[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M719FP2H24E62CTVCJN905AM":3,"skill-same:01M719FP2H24E62CTVCJN905AM":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":41,"install":42,"resources":55},"01M719FP2H24E62CTVCJN905AM","cross-machine-coordination",null,"Enables squad agents on different machines to share work via git-based task queuing","DeDuva\u002Fsquad","DeDuva","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8153108?v=4","01M719BQB25861D0TKS3RVHMN2","01M719BQBSWR380PSYDD5M9YD4",1,"MIT","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fcross-machine-coordination\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28],"coordination","machine","cross machine coordination","orchestration","work","git","squad","manual","task","share","via","2026-11-10 10:12:30",false,"---\nname: \"cross-machine-coordination\"\ndescription: \"Enables squad agents on different machines to share work via git-based task queuing\"\ndomain: \"orchestration\"\nconfidence: \"medium\"\nsource: \"manual\"\n---\n\n# Skill: Cross-Machine Coordination Pattern\n\n**Skill ID:** `cross-machine-coordination`  \n**Owner:** Ralph (Work Monitor)  \n**Squad Integration:** All agents  \n**Status:** Specification (ready for implementation)  \n\n---\n\n## Overview\n\nEnables squad agents running on different machines (laptop, DevBox, Azure VM) to securely share work, coordinate execution, and pass results without manual intervention.\n\n**Pattern:** Git-based task queuing + GitHub Issues supplement\n\n---\n\n## Usage\n\n### For Task Sources (Orchestrating Machine)\n\n**To assign work to DevBox:**\n\n```bash\n# Create task file\ncat > .squad\u002Fcross-machine\u002Ftasks\u002F2026-03-14T1530Z-laptop-gpu-voice-clone.yaml \u003C\u003C 'EOF'\nid: gpu-voice-clone-001\nsource_machine: laptop-machine\ntarget_machine: devbox\npriority: high\ncreated_at: 2026-03-14T15:30:00Z\ntask_type: gpu_workload\npayload:\n  command: \"python scripts\u002Fvoice-clone.py --input voice.wav --output cloned.wav\"\n  expected_duration_min: 15\n  resources:\n    gpu: true\n    memory_gb: 8\nstatus: pending\nEOF\n\n# Commit & push\ngit add .squad\u002Fcross-machine\u002Ftasks\u002F\ngit commit -m \"Cross-machine task: GPU voice cloning [squad:machine-devbox]\"\ngit push origin main\n```\n\nRalph on DevBox will:\n1. Pull the task on next cycle (5-10 min)\n2. Validate schema & command whitelist\n3. Execute the GPU workload\n4. Write result to `.squad\u002Fcross-machine\u002Fresults\u002Fgpu-voice-clone-001.yaml`\n5. Commit & push the result\n\n---\n\n### For Task Executors (DevBox, Azure VMs)\n\nRalph automatically watches `.squad\u002Fcross-machine\u002Ftasks\u002F` for work targeted at this machine.\n\n**On each cycle (5-10 min):**\n\n```python\n# Pseudo-code (Ralph implementation)\n1. git pull origin main\n2. Load all .yaml files in .squad\u002Fcross-machine\u002Ftasks\u002F\n3. Filter for status=pending AND target_machine=HOSTNAME\n4. For each task:\n   a. Validate schema (must have: id, source_machine, target_machine, payload)\n   b. Validate command against whitelist\n   c. Execute task (with timeout)\n   d. Write result to .squad\u002Fcross-machine\u002Fresults\u002F{id}.yaml\n   e. Commit & push result\n```\n\n---\n\n### For Urgent\u002FAd-Hoc Tasks\n\n**Use GitHub Issues with `squad:machine-{name}` label:**\n\n```bash\n# Create issue\ngh issue create \\\n  --title \"GPU: Clone voice profile from sample.wav\" \\\n  --body \"Execute voice cloning on DevBox. Input: \u002Fpath\u002Fto\u002Fvoice-input.wav\" \\\n  --label \"squad:machine-devbox\" \\\n  --label \"urgent\"\n```\n\nRalph on DevBox will:\n1. Detect issue with `squad:machine-devbox` label\n2. Parse task from issue body\n3. Execute task\n4. Comment with result\n5. Close issue\n\n---\n\n## File Formats\n\n### Task File (YAML)\n\n**Location:** `.squad\u002Fcross-machine\u002Ftasks\u002F{timestamp}-{machine}-{task-id}.yaml`\n\n**Required Fields:**\n```yaml\nid: {task-id}                      # Unique identifier (alphanumeric + dash)\nsource_machine: {hostname}         # Where task was created\ntarget_machine: {hostname}         # Where task will execute\npriority: high|normal|low          # Execution priority\ncreated_at: 2026-03-14T15:30:00Z   # ISO 8601 timestamp\ntask_type: gpu_workload|script|... # Category\npayload:\n  command: \"...\"                   # Shell command to execute\n  expected_duration_min: 15        # Timeout (minutes)\n  resources:\n    gpu: true|false\n    memory_gb: 8\n    cpu_cores: 4\nstatus: pending|executing|completed|failed\n```\n\n**Optional Fields:**\n```yaml\ndescription: \"Human-readable task description\"\ntimeout_override_min: 120          # Override default timeout\nretry_count: 3                     # Retry failed tasks\n```\n\n### Result File (YAML)\n\n**Location:** `.squad\u002Fcross-machine\u002Fresults\u002F{task-id}.yaml`\n\n```yaml\nid: {task-id}                          # Links back to task\ntarget_machine: devbox                 # Executed on\ncompleted_at: 2026-03-14T15:45:00Z    # When it finished\nstatus: completed|failed|timeout       # Outcome\nexit_code: 0                           # Shell exit code\nstdout: \"...\"                          # Captured output\nstderr: \"...\"                          # Captured errors\nduration_seconds: 900                  # How long it took\nartifacts:\n  - path: \"\u002Fpath\u002Fto\u002Fartifacts\u002F...\"   # Location of results\n    type: audio|text|model|...\n    size_mb: 2.5\n```\n\n---\n\n## Security Model\n\n### Validation Pipeline\n\nAll tasks go through:\n\n1. **Schema Validation**\n   - YAML structure matches spec\n   - Required fields present\n   - No unexpected fields (reject)\n\n2. **Command Whitelist**\n   - Only approved commands allowed\n   - Path validation (no `..\u002F..\u002F` escapes)\n   - Environment variable sanitization\n   - No inline shell operators (`&&`, `|`, `>`)\n\n3. **Resource Limits**\n   - Timeout enforced (default: 60 min)\n   - Memory cap: 16GB (adjustable)\n   - CPU threads: 4 (adjustable)\n   - Disk write: 100GB (adjustable)\n\n4. **Execution Isolation**\n   - Runs as unprivileged user\n   - Temp directory cleaned after execution\n   - Network access: read-only (no outbound writes)\n\n5. **Audit Trail**\n   - All executions logged to git\n   - Commit signed with Ralph's key\n   - Result stored immutably\n\n### Threat Mitigations\n\n| Threat | Mitigation |\n|--------|-----------|\n| **Malicious task injection** | Branch protection + PR review before merge |\n| **Credential leakage** | Pre-commit secret scan + environment scrubbing |\n| **Resource exhaustion** | Timeout + memory limits |\n| **Code injection** | Command whitelist + no shell evaluation |\n| **Result tampering** | Git commit history is immutable |\n\n---\n\n## Configuration\n\nRalph reads config from `.squad\u002Fconfig.json`:\n\n```json\n{\n  \"cross_machine\": {\n    \"enabled\": true,\n    \"poll_interval_seconds\": 300,\n    \"this_machine\": \"devbox\",\n    \"max_concurrent_tasks\": 2,\n    \"task_timeout_minutes\": 60,\n    \"command_whitelist\": [\n      \"python scripts\u002Fvoice-clone.py\",\n      \"python scripts\u002Fdata-process.py\",\n      \"bash scripts\u002Fcleanup.sh\"\n    ],\n    \"result_ttl_days\": 30\n  }\n}\n```\n\n---\n\n## Examples\n\n### Example 1: GPU Voice Cloning (Laptop → DevBox)\n\n**1. Laptop creates task:**\n\n```yaml\n# .squad\u002Fcross-machine\u002Ftasks\u002F2026-03-14T1530Z-laptop-gpu-001.yaml\nid: gpu-voice-clone-001\nsource_machine: laptop-machine\ntarget_machine: devbox\npriority: high\ncreated_at: 2026-03-14T15:30:00Z\ntask_type: gpu_workload\npayload:\n  command: \"python scripts\u002Fvoice-clone.py --input voice.wav --output cloned.wav\"\n  expected_duration_min: 15\n  resources:\n    gpu: true\n    memory_gb: 8\nstatus: pending\n```\n\n**2. Laptop commits & pushes:**\n\n```bash\ngit add .squad\u002Fcross-machine\u002Ftasks\u002F\ngit commit -m \"Task: GPU voice cloning [squad:machine-devbox]\"\ngit push origin main\n```\n\n**3. DevBox Ralph (5 min later):**\n\n```\n[Ralph Watch Cycle]\n- Pulled origin\u002Fmain\n- Detected: gpu-voice-clone-001 (status: pending, target: devbox)\n- Validation: ✅ Schema OK, command whitelisted\n- Executing: python scripts\u002Fvoice-clone.py ...\n- [15 minutes of processing]\n- Completed: exit code 0\n- Writing result...\n- Committing & pushing...\n```\n\n**4. Laptop Ralph (next cycle) sees result:**\n\n```yaml\n# .squad\u002Fcross-machine\u002Fresults\u002Fgpu-voice-clone-001.yaml\nid: gpu-voice-clone-001\ntarget_machine: devbox\ncompleted_at: 2026-03-14T15:45:00Z\nstatus: completed\nexit_code: 0\nstdout: \"Voice cloning completed. Output written to \u002Ftmp\u002Fcloned.wav\"\nstderr: \"\"\nduration_seconds: 900\nartifacts:\n  - path: \"\u002Fpath\u002Fto\u002Fartifacts\u002Fvoice-clone-001\u002Foutput.wav\"\n    type: audio\n    size_mb: 2.5\n```\n\n---\n\n### Example 2: Urgent Debug Request (Human → DevBox via Issue)\n\n**Create issue:**\n\n```bash\ngh issue create \\\n  --title \"DevBox: Debug voice model failure\" \\\n  --body \"Error: Model failed to load on last run. Please check \u002Ftmp\u002Fmodel.log and report findings.\" \\\n  --label \"squad:machine-devbox\" \\\n  --label \"urgent\"\n```\n\n**DevBox Ralph detects → executes → comments:**\n\n```\n✅ Executed on devbox at 2026-03-14 15:47:00\nCommand: python scripts\u002Fdebug-model.py\n\nResult:\n------\nModel file: \u002Ftmp\u002Fmodel-v2.bin (OK)\nChecksum: a1b2c3d4e5f6 (matches expected)\nMemory available: 12 GB (sufficient)\n\nERROR FOUND: Config file permission issue\n  - File: ~\u002F.config\u002Fvoice\u002Fmodel.yaml\n  - Permissions: -rw------- (owner-only)\n  - Expected: -rw-r--r-- (world-readable for service)\n\nFIX: Run: chmod 644 ~\u002F.config\u002Fvoice\u002Fmodel.yaml\n```\n\n---\n\n## Error Handling\n\n### Task Execution Failures\n\nIf a task fails (exit code != 0):\n\n1. Result written with `status: failed` + exit code\n2. stderr captured in result\n3. Committed to git for audit\n4. Source machine can retry by re-pushing task with `status: pending`\n\n### Stalled Tasks\n\nIf a task doesn't complete within timeout:\n\n1. Process killed\n2. Result written with `status: timeout`\n3. stderr: \"Execution exceeded X minutes\"\n4. Source can investigate or retry\n\n### Network Failures\n\nIf git push\u002Fpull fails:\n\n- Ralph retries on next cycle\n- Tasks queue locally until connectivity restored\n- No tasks lost (stored in local repo)\n\n---\n\n## Monitoring & Debugging\n\n### Check Task Queue\n\n```bash\nls -la .squad\u002Fcross-machine\u002Ftasks\u002F\ncat .squad\u002Fcross-machine\u002Ftasks\u002F*.yaml | grep -E \"^(id|status|target_machine):\"\n```\n\n### Check Results\n\n```bash\nls -la .squad\u002Fcross-machine\u002Fresults\u002F\ncat .squad\u002Fcross-machine\u002Fresults\u002F{task-id}.yaml\n```\n\n### View Execution History\n\n```bash\ngit log --oneline .squad\u002Fcross-machine\u002F | head -20\n```\n\n### Monitor Ralph Cycles\n\n```bash\ntail -f .squad\u002Flog\u002Fralph-watch.log | grep \"cross-machine\"\n```\n\n---\n\n## Integration with Ralph Watch\n\nRalph automatically includes this pattern in its watch loop:\n\n```\nRalph Watch Cycle (every 5-10 min):\n1. Fetch GitHub issues with squad:machine-* labels\n2. Poll .squad\u002Fcross-machine\u002Ftasks\u002F\n3. For each matching task:\n   - Validate\n   - Execute\n   - Write result\n   - Commit & push\n4. Update status in issue (if applicable)\n5. Sleep until next cycle\n```\n\nNo manual Ralph configuration needed — just create task files or issues with the right labels.\n\n---\n\n## Migration from Manual Handoff\n\n**Before (today):**\n- Laptop → user manually copies file to Teams chat\n- user pastes into target terminal\n- user copies output back\n- user pastes result manually\n\n**After (with this pattern):**\n- Laptop Ralph writes task file → git push\n- DevBox Ralph auto-executes → git push result\n- Laptop Ralph auto-reads result\n- 0 human intervention needed\n\n---\n\n## Future Enhancements\n\nPotential expansions (Phase 2+):\n\n1. **Task Priorities:** Execution order based on priority field\n2. **Serial Pipelines:** Machine A → B → C task chains\n3. **GPU Availability Polling:** Query DevBox before submitting work\n4. **Cost Tracking:** Log resource usage per task\n5. **Notification Webhooks:** Alert on task completion\n6. **Web Dashboard:** Real-time task status visualization\n\n---\n\n## Questions?\n\nRefer to research report: `research\u002Factive\u002Fcross-machine-agents\u002FREADME.md`\n\nContact: Seven (Research & Docs) or Ralph (Work Monitor)\n","# Skill: Cross-Machine Coordination Pattern\n\n**Skill ID:** `cross-machine-coordination`  \n**Owner:** Ralph (Work Monitor)  \n**Squad Integration:** All agents  \n**Status:** Specification (ready for implementation)  \n\n---\n\n## Overview\n\nEnables squad agents running on different machines (laptop, DevBox, Azure VM) to securely share work, coordinate execution, and pass results without manual intervention.\n\n**Pattern:** Git-based task queuing + GitHub Issues supplement\n\n---\n\n## Usage\n\n### For Task Sources (Orchestrating Machine)\n\n**To assign work to DevBox:**\n\n```bash\n# Create task file\ncat > .squad\u002Fcross-machine\u002Ftasks\u002F2026-03-14T1530Z-laptop-gpu-voice-clone.yaml \u003C\u003C 'EOF'\nid: gpu-voice-clone-001\nsource_machine: laptop-machine\ntarget_machine: devbox\npriority: high\ncreated_at: 2026-03-14T15:30:00Z\ntask_type: gpu_workload\npayload:\n  command: \"python scripts\u002Fvoice-clone.py --input voice.wav --output cloned.wav\"\n  expected_duration_min: 15\n  resources:\n    gpu: true\n    memory_gb: 8\nstatus: pending\nEOF\n\n# Commit & push\ngit add .squad\u002Fcross-machine\u002Ftasks\u002F\ngit commit -m \"Cross-machine task: GPU voice cloning [squad:machine-devbox]\"\ngit push origin main\n```\n\nRalph on DevBox will:\n1. Pull the task on next cycle (5-10 min)\n2. Validate schema & command whitelist\n3. Execute the GPU workload\n4. Write result to `.squad\u002Fcross-machine\u002Fresults\u002Fgpu-voice-clone-001.yaml`\n5. Commit & push the result\n\n---\n\n### For Task Executors (DevBox, Azure VMs)\n\nRalph automatically watches `.squad\u002Fcross-machine\u002Ftasks\u002F` for work targeted at this machine.\n\n**On each cycle (5-10 min):**\n\n```python\n# Pseudo-code (Ralph implementation)\n1. git pull origin main\n2. Load all .yaml files in .squad\u002Fcross-machine\u002Ftasks\u002F\n3. Filter for status=pending AND target_machine=HOSTNAME\n4. For each task:\n   a. Validate schema (must have: id, source_machine, target_machine, payload)\n   b. Validate command against whitelist\n   c. Execute task (with timeout)\n   d. Write result to .squad\u002Fcross-machine\u002Fresults\u002F{id}.yaml\n   e. Commit & push result\n```\n\n---\n\n### For Urgent\u002FAd-Hoc Tasks\n\n**Use GitHub Issues with `squad:machine-{name}` label:**\n\n```bash\n# Create issue\ngh issue create \\\n  --title \"GPU: Clone voice profile from sample.wav\" \\\n  --body \"Execute voice cloning on DevBox. Input: \u002Fpath\u002Fto\u002Fvoice-input.wav\" \\\n  --label \"squad:machine-devbox\" \\\n  --label \"urgent\"\n```\n\nRalph on DevBox will:\n1. Detect issue with `squad:machine-devbox` label\n2. Parse task from issue body\n3. Execute task\n4. Comment with result\n5. Close issue\n\n---\n\n## File Formats\n\n### Task File (YAML)\n\n**Location:** `.squad\u002Fcross-machine\u002Ftasks\u002F{timestamp}-{machine}-{task-id}.yaml`\n\n**Required Fields:**\n```yaml\nid: {task-id}                      # Unique identifier (alphanumeric + dash)\nsource_machine: {hostname}         # Where task was created\ntarget_machine: {hostname}         # Where task will execute\npriority: high|normal|low          # Execution priority\ncreated_at: 2026-03-14T15:30:00Z   # ISO 8601 timestamp\ntask_type: gpu_workload|script|... # Category\npayload:\n  command: \"...\"                   # Shell command to execute\n  expected_duration_min: 15        # Timeout (minutes)\n  resources:\n    gpu: true|false\n    memory_gb: 8\n    cpu_cores: 4\nstatus: pending|executing|completed|failed\n```\n\n**Optional Fields:**\n```yaml\ndescription: \"Human-readable task description\"\ntimeout_override_min: 120          # Override default timeout\nretry_count: 3                     # Retry failed tasks\n```\n\n### Result File (YAML)\n\n**Location:** `.squad\u002Fcross-machine\u002Fresults\u002F{task-id}.yaml`\n\n```yaml\nid: {task-id}                          # Links back to task\ntarget_machine: devbox                 # Executed on\ncompleted_at: 2026-03-14T15:45:00Z    # When it finished\nstatus: completed|failed|timeout       # Outcome\nexit_code: 0                           # Shell exit code\nstdout: \"...\"                          # Captured output\nstderr: \"...\"                          # Captured errors\nduration_seconds: 900                  # How long it took\nartifacts:\n  - path: \"\u002Fpath\u002Fto\u002Fartifacts\u002F...\"   # Location of results\n    type: audio|text|model|...\n    size_mb: 2.5\n```\n\n---\n\n## Security Model\n\n### Validation Pipeline\n\nAll tasks go through:\n\n1. **Schema Validation**\n   - YAML structure matches spec\n   - Required fields present\n   - No unexpected fields (reject)\n\n2. **Command Whitelist**\n   - Only approved commands allowed\n   - Path validation (no `..\u002F..\u002F` escapes)\n   - Environment variable sanitization\n   - No inline shell operators (`&&`, `|`, `>`)\n\n3. **Resource Limits**\n   - Timeout enforced (default: 60 min)\n   - Memory cap: 16GB (adjustable)\n   - CPU threads: 4 (adjustable)\n   - Disk write: 100GB (adjustable)\n\n4. **Execution Isolation**\n   - Runs as unprivileged user\n   - Temp directory cleaned after execution\n   - Network access: read-only (no outbound writes)\n\n5. **Audit Trail**\n   - All executions logged to git\n   - Commit signed with Ralph's key\n   - Result stored immutably\n\n### Threat Mitigations\n\n| Threat | Mitigation |\n|--------|-----------|\n| **Malicious task injection** | Branch protection + PR review before merge |\n| **Credential leakage** | Pre-commit secret scan + environment scrubbing |\n| **Resource exhaustion** | Timeout + memory limits |\n| **Code injection** | Command whitelist + no shell evaluation |\n| **Result tampering** | Git commit history is immutable |\n\n---\n\n## Configuration\n\nRalph reads config from `.squad\u002Fconfig.json`:\n\n```json\n{\n  \"cross_machine\": {\n    \"enabled\": true,\n    \"poll_interval_seconds\": 300,\n    \"this_machine\": \"devbox\",\n    \"max_concurrent_tasks\": 2,\n    \"task_timeout_minutes\": 60,\n    \"command_whitelist\": [\n      \"python scripts\u002Fvoice-clone.py\",\n      \"python scripts\u002Fdata-process.py\",\n      \"bash scripts\u002Fcleanup.sh\"\n    ],\n    \"result_ttl_days\": 30\n  }\n}\n```\n\n---\n\n## Examples\n\n### Example 1: GPU Voice Cloning (Laptop → DevBox)\n\n**1. Laptop creates task:**\n\n```yaml\n# .squad\u002Fcross-machine\u002Ftasks\u002F2026-03-14T1530Z-laptop-gpu-001.yaml\nid: gpu-voice-clone-001\nsource_machine: laptop-machine\ntarget_machine: devbox\npriority: high\ncreated_at: 2026-03-14T15:30:00Z\ntask_type: gpu_workload\npayload:\n  command: \"python scripts\u002Fvoice-clone.py --input voice.wav --output cloned.wav\"\n  expected_duration_min: 15\n  resources:\n    gpu: true\n    memory_gb: 8\nstatus: pending\n```\n\n**2. Laptop commits & pushes:**\n\n```bash\ngit add .squad\u002Fcross-machine\u002Ftasks\u002F\ngit commit -m \"Task: GPU voice cloning [squad:machine-devbox]\"\ngit push origin main\n```\n\n**3. DevBox Ralph (5 min later):**\n\n```\n[Ralph Watch Cycle]\n- Pulled origin\u002Fmain\n- Detected: gpu-voice-clone-001 (status: pending, target: devbox)\n- Validation: ✅ Schema OK, command whitelisted\n- Executing: python scripts\u002Fvoice-clone.py ...\n- [15 minutes of processing]\n- Completed: exit code 0\n- Writing result...\n- Committing & pushing...\n```\n\n**4. Laptop Ralph (next cycle) sees result:**\n\n```yaml\n# .squad\u002Fcross-machine\u002Fresults\u002Fgpu-voice-clone-001.yaml\nid: gpu-voice-clone-001\ntarget_machine: devbox\ncompleted_at: 2026-03-14T15:45:00Z\nstatus: completed\nexit_code: 0\nstdout: \"Voice cloning completed. Output written to \u002Ftmp\u002Fcloned.wav\"\nstderr: \"\"\nduration_seconds: 900\nartifacts:\n  - path: \"\u002Fpath\u002Fto\u002Fartifacts\u002Fvoice-clone-001\u002Foutput.wav\"\n    type: audio\n    size_mb: 2.5\n```\n\n---\n\n### Example 2: Urgent Debug Request (Human → DevBox via Issue)\n\n**Create issue:**\n\n```bash\ngh issue create \\\n  --title \"DevBox: Debug voice model failure\" \\\n  --body \"Error: Model failed to load on last run. Please check \u002Ftmp\u002Fmodel.log and report findings.\" \\\n  --label \"squad:machine-devbox\" \\\n  --label \"urgent\"\n```\n\n**DevBox Ralph detects → executes → comments:**\n\n```\n✅ Executed on devbox at 2026-03-14 15:47:00\nCommand: python scripts\u002Fdebug-model.py\n\nResult:\n------\nModel file: \u002Ftmp\u002Fmodel-v2.bin (OK)\nChecksum: a1b2c3d4e5f6 (matches expected)\nMemory available: 12 GB (sufficient)\n\nERROR FOUND: Config file permission issue\n  - File: ~\u002F.config\u002Fvoice\u002Fmodel.yaml\n  - Permissions: -rw------- (owner-only)\n  - Expected: -rw-r--r-- (world-readable for service)\n\nFIX: Run: chmod 644 ~\u002F.config\u002Fvoice\u002Fmodel.yaml\n```\n\n---\n\n## Error Handling\n\n### Task Execution Failures\n\nIf a task fails (exit code != 0):\n\n1. Result written with `status: failed` + exit code\n2. stderr captured in result\n3. Committed to git for audit\n4. Source machine can retry by re-pushing task with `status: pending`\n\n### Stalled Tasks\n\nIf a task doesn't complete within timeout:\n\n1. Process killed\n2. Result written with `status: timeout`\n3. stderr: \"Execution exceeded X minutes\"\n4. Source can investigate or retry\n\n### Network Failures\n\nIf git push\u002Fpull fails:\n\n- Ralph retries on next cycle\n- Tasks queue locally until connectivity restored\n- No tasks lost (stored in local repo)\n\n---\n\n## Monitoring & Debugging\n\n### Check Task Queue\n\n```bash\nls -la .squad\u002Fcross-machine\u002Ftasks\u002F\ncat .squad\u002Fcross-machine\u002Ftasks\u002F*.yaml | grep -E \"^(id|status|target_machine):\"\n```\n\n### Check Results\n\n```bash\nls -la .squad\u002Fcross-machine\u002Fresults\u002F\ncat .squad\u002Fcross-machine\u002Fresults\u002F{task-id}.yaml\n```\n\n### View Execution History\n\n```bash\ngit log --oneline .squad\u002Fcross-machine\u002F | head -20\n```\n\n### Monitor Ralph Cycles\n\n```bash\ntail -f .squad\u002Flog\u002Fralph-watch.log | grep \"cross-machine\"\n```\n\n---\n\n## Integration with Ralph Watch\n\nRalph automatically includes this pattern in its watch loop:\n\n```\nRalph Watch Cycle (every 5-10 min):\n1. Fetch GitHub issues with squad:machine-* labels\n2. Poll .squad\u002Fcross-machine\u002Ftasks\u002F\n3. For each matching task:\n   - Validate\n   - Execute\n   - Write result\n   - Commit & push\n4. Update status in issue (if applicable)\n5. Sleep until next cycle\n```\n\nNo manual Ralph configuration needed — just create task files or issues with the right labels.\n\n---\n\n## Migration from Manual Handoff\n\n**Before (today):**\n- Laptop → user manually copies file to Teams chat\n- user pastes into target terminal\n- user copies output back\n- user pastes result manually\n\n**After (with this pattern):**\n- Laptop Ralph writes task file → git push\n- DevBox Ralph auto-executes → git push result\n- Laptop Ralph auto-reads result\n- 0 human intervention needed\n\n---\n\n## Future Enhancements\n\nPotential expansions (Phase 2+):\n\n1. **Task Priorities:** Execution order based on priority field\n2. **Serial Pipelines:** Machine A → B → C task chains\n3. **GPU Availability Polling:** Query DevBox before submitting work\n4. **Cost Tracking:** Log resource usage per task\n5. **Notification Webhooks:** Alert on task completion\n6. **Web Dashboard:** Real-time task status visualization\n\n---\n\n## Questions?\n\nRefer to research report: `research\u002Factive\u002Fcross-machine-agents\u002FREADME.md`\n\nContact: Seven (Research & Docs) or Ralph (Work Monitor)\n",{"name":5,"domain":21,"source":25,"confidence":34,"description":7},"medium","dev","4ffda80d1bb1043d9169688cf161e53097345c72","packages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fcross-machine-coordination",0,"https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad","https:\u002F\u002Fgithub.com\u002FDeDuva","2026-11-09 20:24:44",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add DeDuva\u002Fsquad --skill cross-machine-coordination",{"tool":48,"command":49},"bunx","bunx skills add DeDuva\u002Fsquad --skill cross-machine-coordination",{"tool":51,"command":52},"pnpm","pnpm dlx skills add DeDuva\u002Fsquad --skill cross-machine-coordination","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fcross-machine-coordination\u002FSKILL.md",true,[],[57,73,81,96,120,135],{"skillNo":58,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":67,"publishedAt":29},"01M719NE6ZPZT80MKVWFDECJZ3","My Skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fmy-skill\u002FSKILL.md",[62],{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[68,69,70,71,72],"my","my skill","testing","vitest","tester",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":29},"01M719NDJAMEWM8D9H355SCNA8","bad-skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fbad-skill\u002FSKILL.md",[],[79,80],"bad skill","bad",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":29},"01M719NCC1AZ02GHZ1V71YPEV7","squad-conventions","Core conventions and patterns used in the Squad codebase","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[88,24,89,90,91,92,25,93,94,95],"conventions","squad conventions","project-conventions","core","project","high","codebase","patterns",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":29},"01M719NAYM17B7X8MGP681EHKQ","rework-rate","Measure and interpret PR rework rate — the emerging 5th DORA metric","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Frework-rate\u002FSKILL.md",[],[103,104,105,106,93,107,108,109,24,110,111,112,113,25,114,115,116,117,118,119],"rate","rework rate","health","analyze","review efficiency","quality","metric","metrics","efficiency","code quality","pr","prs","when","code","team","code-review","review",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":29},"01M719NA136PDC3SQ10R4R88TH","nap","Context hygiene — compress, prune, archive .squad\u002F state","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fnap\u002FSKILL.md",[],[122,127,128,129,130,131,132,133,24,134],"prune","state","maintenance","context hygiene","archive","hygiene","compress","context",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":145,"publishedAt":29},"01M719N7B4PBQPNXW78TEJY4HQ","e2e-template-testing","End-to-end validation of coordinator and agent template changes","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fe2e-template-testing\u002FSKILL.md",[141,144],{"categoryNo":142,"categoryName":143,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},[70,146,147,148,149,150,151,25,152,93,153],"e2e template testing","e2e","template","end","coordinator","development","changes","validation"]