{"id":"5c99a7da-1b6f-4f78-90ee-86b9cbc8559b","shortId":"TPUCNv","kind":"skill","title":"task-orchestrator","tagline":"Autonomous multi-agent task orchestration with dependency analysis, parallel tmux/Codex execution, and self-healing heartbeat monitoring. Use for large projects with multiple issues/tasks that need coordinated parallel execution.","description":"# Task Orchestrator\n\nAutonomous orchestration of multi-agent builds using tmux + Codex with self-healing monitoring.\n\n**Load the senior-engineering skill alongside this one for engineering principles.**\n\n## Safety Boundaries\n\n- Do not launch parallel workers for tasks with overlapping write scope until the dependency is resolved.\n- Do not push branches, merge work, or self-heal by guessing when human review is required.\n- Do not store secrets in manifests, logs, prompts, or tmux pane captures.\n- Do not continue retrying a failing task indefinitely; stop and surface the blocker after bounded retries.\n\n## Core Concepts\n\n### 1. Task Manifest\nA JSON file defining all tasks, their dependencies, files touched, and status.\n\n```json\n{\n  \"project\": \"project-name\",\n  \"repo\": \"owner/repo\",\n  \"workdir\": \"/path/to/worktrees\",\n  \"created\": \"2026-01-17T00:00:00Z\",\n  \"model\": \"gpt-5.2-codex\",\n  \"modelTier\": \"high\",\n  \"phases\": [\n    {\n      \"name\": \"Phase 1: Critical\",\n      \"tasks\": [\n        {\n          \"id\": \"t1\",\n          \"issue\": 1,\n          \"title\": \"Fix X\",\n          \"files\": [\"src/foo.js\"],\n          \"dependsOn\": [],\n          \"status\": \"pending\",\n          \"worktree\": null,\n          \"tmuxSession\": null,\n          \"startedAt\": null,\n          \"lastProgress\": null,\n          \"completedAt\": null,\n          \"prNumber\": null\n        }\n      ]\n    }\n  ]\n}\n```\n\n### 2. Dependency Rules\n- **Same file = sequential** — Tasks touching the same file must run in order or merge\n- **Different files = parallel** — Independent tasks can run simultaneously\n- **Explicit depends = wait** — `dependsOn` array enforces ordering\n- **Phase gates** — Next phase waits for current phase completion\n\n### 3. Execution Model\n- Each task gets its own **git worktree** (isolated branch)\n- Each task runs in its own **tmux session**\n- Use **Codex with --yolo** for autonomous execution\n- Model: **GPT-5.2-codex high** (configurable)\n\n---\n\n## Setup Commands\n\n### Initialize Orchestration\n\n```bash\n# 1. Create working directory\nWORKDIR=\"${TMPDIR:-/tmp}/orchestrator-$(date +%s)\"\nmkdir -p \"$WORKDIR\"\n\n# 2. Clone repo for worktrees\ngit clone https://github.com/OWNER/REPO.git \"$WORKDIR/repo\"\ncd \"$WORKDIR/repo\"\n\n# 3. Create tmux socket\nSOCKET=\"$WORKDIR/orchestrator.sock\"\n\n# 4. Initialize manifest\ncat > \"$WORKDIR/manifest.json\" << 'EOF'\n{\n  \"project\": \"PROJECT_NAME\",\n  \"repo\": \"OWNER/REPO\",\n  \"workdir\": \"WORKDIR_PATH\",\n  \"socket\": \"SOCKET_PATH\",\n  \"created\": \"TIMESTAMP\",\n  \"model\": \"gpt-5.2-codex\",\n  \"modelTier\": \"high\",\n  \"phases\": []\n}\nEOF\n```\n\n### Analyze GitHub Issues for Dependencies\n\n```bash\n# Fetch all open issues\ngh issue list --repo OWNER/REPO --state open --json number,title,body,labels > issues.json\n\n# Group by files mentioned in issue body\n# Tasks touching same files should serialize\n```\n\n### Create Worktrees\n\n```bash\n# For each task, create isolated worktree\ncd \"$WORKDIR/repo\"\ngit worktree add -b fix/issue-N \"$WORKDIR/task-tN\" main\n```\n\n### Launch Tmux Sessions\n\n```bash\nSOCKET=\"$WORKDIR/orchestrator.sock\"\n\n# Create session for task\ntmux -S \"$SOCKET\" new-session -d -s \"task-tN\"\n\n# Launch Codex (uses gpt-5.2-codex with reasoning_effort=high from ~/.codex/config.toml)\n# Note: Model config is in ~/.codex/config.toml, not CLI flag\ntmux -S \"$SOCKET\" send-keys -t \"task-tN\" \\\n  \"cd $WORKDIR/task-tN && codex --yolo 'Fix issue #N: DESCRIPTION. Run tests, commit with good message, push to origin.'\" Enter\n```\n\n---\n\n## Monitoring & Self-Healing\n\n### Progress Check Script\n\n```bash\n#!/bin/bash\n# check_progress.sh - Run via heartbeat\n\nWORKDIR=\"$1\"\nSOCKET=\"$WORKDIR/orchestrator.sock\"\nMANIFEST=\"$WORKDIR/manifest.json\"\nSTALL_THRESHOLD_MINS=20\n\ncheck_session() {\n  local session=\"$1\"\n  local task_id=\"$2\"\n  \n  # Capture recent output\n  local output=$(tmux -S \"$SOCKET\" capture-pane -p -t \"$session\" -S -50 2>/dev/null)\n  \n  # Check for completion indicators\n  if echo \"$output\" | grep -qE \"(All tests passed|Successfully pushed|❯ $)\"; then\n    echo \"DONE:$task_id\"\n    return 0\n  fi\n  \n  # Check for errors\n  if echo \"$output\" | grep -qiE \"(error:|failed:|FATAL|panic)\"; then\n    echo \"ERROR:$task_id\"\n    return 1\n  fi\n  \n  # Check for stall (prompt waiting for input)\n  if echo \"$output\" | grep -qE \"(\\? |Continue\\?|y/n|Press any key)\"; then\n    echo \"STUCK:$task_id:waiting_for_input\"\n    return 2\n  fi\n  \n  echo \"RUNNING:$task_id\"\n  return 0\n}\n\n# Check all active sessions\nfor session in $(tmux -S \"$SOCKET\" list-sessions -F \"#{session_name}\" 2>/dev/null); do\n  check_session \"$session\" \"$session\"\ndone\n```\n\n### Self-Healing Actions\n\nWhen a task is stuck, the orchestrator should:\n\n1. **Waiting for input** → Send appropriate response\n   ```bash\n   tmux -S \"$SOCKET\" send-keys -t \"$session\" \"y\" Enter\n   ```\n\n2. **Error/failure** → Capture logs, analyze, retry with fixes\n   ```bash\n   # Capture error context\n   tmux -S \"$SOCKET\" capture-pane -p -t \"$session\" -S -100 > \"$WORKDIR/logs/$task_id-error.log\"\n   \n   # Kill and restart with error context\n   tmux -S \"$SOCKET\" kill-session -t \"$session\"\n   tmux -S \"$SOCKET\" new-session -d -s \"$session\"\n   tmux -S \"$SOCKET\" send-keys -t \"$session\" \\\n     \"cd $WORKDIR/$task_id && codex --model gpt-5.2-codex-high --yolo 'Previous attempt failed with: $(cat error.log | tail -20). Fix the issue and retry.'\" Enter\n   ```\n\n3. **No progress for 20+ mins** → Nudge or restart\n   ```bash\n   # Check git log for recent commits\n   cd \"$WORKDIR/$task_id\"\n   LAST_COMMIT=$(git log -1 --format=\"%ar\" 2>/dev/null)\n   \n   # If no commits in threshold, restart\n   ```\n\n### Heartbeat Cron Setup\n\n```bash\n# Add to cron (every 15 minutes)\ncron action:add job:{\n  \"label\": \"orchestrator-heartbeat\",\n  \"schedule\": \"*/15 * * * *\",\n  \"prompt\": \"Check orchestration progress at WORKDIR. Read manifest, check all tmux sessions, self-heal any stuck tasks, advance to next phase if current is complete. Do NOT ping human - fix issues yourself.\"\n}\n```\n\n---\n\n## Workflow: Full Orchestration Run\n\n### Step 1: Analyze & Plan\n\n```bash\n# 1. Fetch issues\ngh issue list --repo OWNER/REPO --state open --json number,title,body > /tmp/issues.json\n\n# 2. Analyze for dependencies (files mentioned, explicit deps)\n# Group into phases:\n# - Phase 1: Critical/blocking issues (no deps)\n# - Phase 2: High priority (may depend on Phase 1)\n# - Phase 3: Medium/low (depends on earlier phases)\n\n# 3. Within each phase, identify:\n# - Parallel batch: Different files, no deps → run simultaneously\n# - Serial batch: Same files or explicit deps → run in order\n```\n\n### Step 2: Create Manifest\n\nWrite manifest.json with all tasks, dependencies, file mappings.\n\n### Step 3: Launch Phase 1\n\n```bash\n# Create worktrees for Phase 1 tasks\nfor task in phase1_tasks; do\n  git worktree add -b \"fix/issue-$issue\" \"$WORKDIR/task-$id\" main\ndone\n\n# Launch tmux sessions\nfor task in phase1_parallel_batch; do\n  tmux -S \"$SOCKET\" new-session -d -s \"task-$id\"\n  tmux -S \"$SOCKET\" send-keys -t \"task-$id\" \\\n    \"cd $WORKDIR/task-$id && codex --model gpt-5.2-codex-high --yolo '$PROMPT'\" Enter\ndone\n```\n\n### Step 4: Monitor & Self-Heal\n\nHeartbeat checks every 15 mins:\n1. Poll all sessions\n2. Update manifest with progress\n3. Self-heal stuck tasks\n4. When all Phase N tasks complete → launch Phase N+1\n\n### Step 5: Create PRs\n\n```bash\n# When task completes successfully\ncd \"$WORKDIR/task-$id\"\ngit push -u origin \"fix/issue-$issue\"\ngh pr create --repo OWNER/REPO \\\n  --head \"fix/issue-$issue\" \\\n  --title \"fix: Issue #$issue - $TITLE\" \\\n  --body \"Closes #$issue\n\n## Changes\n[Auto-generated by Codex orchestrator]\n\n## Testing\n- [ ] Unit tests pass\n- [ ] Manual verification\"\n```\n\n### Step 6: Cleanup\n\n```bash\n# After all PRs merged or work complete\ntmux -S \"$SOCKET\" kill-server\ncd \"$WORKDIR/repo\"\nfor task in all_tasks; do\n  git worktree remove \"$WORKDIR/task-$id\" --force\ndone\nrm -rf \"$WORKDIR\"\n```\n\n---\n\n## Manifest Status Values\n\n| Status | Meaning |\n|--------|---------|\n| `pending` | Not started yet |\n| `blocked` | Waiting on dependency |\n| `running` | Codex session active |\n| `stuck` | Needs intervention (auto-heal) |\n| `error` | Failed, needs retry |\n| `complete` | Done, ready for PR |\n| `pr_open` | PR created |\n| `merged` | PR merged |\n\n---\n\n## Example: Security Framework Orchestration\n\n```json\n{\n  \"project\": \"nuri-security-framework\",\n  \"repo\": \"jdrhyne/nuri-security-framework\",\n  \"phases\": [\n    {\n      \"name\": \"Phase 1: Critical\",\n      \"tasks\": [\n        {\"id\": \"t1\", \"issue\": 1, \"files\": [\"ceo_root_manager.js\"], \"dependsOn\": []},\n        {\"id\": \"t2\", \"issue\": 2, \"files\": [\"ceo_root_manager.js\"], \"dependsOn\": [\"t1\"]},\n        {\"id\": \"t3\", \"issue\": 3, \"files\": [\"workspace_validator.js\"], \"dependsOn\": []}\n      ]\n    },\n    {\n      \"name\": \"Phase 2: High\",\n      \"tasks\": [\n        {\"id\": \"t4\", \"issue\": 4, \"files\": [\"kill_switch.js\", \"container_executor.js\"], \"dependsOn\": []},\n        {\"id\": \"t5\", \"issue\": 5, \"files\": [\"kill_switch.js\"], \"dependsOn\": [\"t4\"]},\n        {\"id\": \"t6\", \"issue\": 6, \"files\": [\"ceo_root_manager.js\"], \"dependsOn\": [\"t2\"]},\n        {\"id\": \"t7\", \"issue\": 7, \"files\": [\"container_executor.js\"], \"dependsOn\": []},\n        {\"id\": \"t8\", \"issue\": 8, \"files\": [\"container_executor.js\", \"egress_proxy.js\"], \"dependsOn\": [\"t7\"]}\n      ]\n    }\n  ]\n}\n```\n\n**Parallel execution in Phase 1:**\n- t1 and t3 run in parallel (different files)\n- t2 waits for t1 (same file)\n\n**Parallel execution in Phase 2:**\n- t4, t6, t7 can start together\n- t5 waits for t4, t8 waits for t7\n\n---\n\n## Tips\n\n1. **Always use GPT-5.2-codex high** for complex work: `--model gpt-5.2-codex-high`\n2. **Clear prompts** — Include issue number, description, expected outcome, test instructions\n3. **Atomic commits** — Tell Codex to commit after each logical change\n4. **Push early** — Push to remote branch so progress isn't lost if session dies\n5. **Checkpoint logs** — Capture tmux output periodically to files\n6. **Phase gates** — Don't start Phase N+1 until Phase N is 100% complete\n7. **Self-heal aggressively** — If stuck >10 mins, intervene automatically\n8. **Browser relay limits** — If CDP automation is blocked, use iframe batch scraping or manual browser steps\n\n---\n\n## Integration with Other Skills\n\n- **senior-engineering**: Load for build principles and quality gates\n- **coding-agent**: Reference for Codex CLI patterns\n- **github**: Use for PR creation, issue management\n\n---\n\n## Lessons Learned (2026-01-17)\n\n### Codex Sandbox Limitations\nWhen using `codex exec --full-auto`, the sandbox:\n- **No network access** — `git push` fails with \"Could not resolve host\"\n- **Limited filesystem** — Can't write to paths like `~/nuri_workspace`\n\n### Heartbeat Detection Improvements\nThe heartbeat should check for:\n1. **Shell prompt idle** — If tmux pane shows `username@hostname path %`, worker is done\n2. **Unpushed commits** — `git log @{u}.. --oneline` shows commits not on remote\n3. **Push failures** — Look for \"Could not resolve host\" in output\n\nWhen detected, the orchestrator (not the worker) should:\n1. Push the commit from outside the sandbox\n2. Create the PR via `gh pr create`\n3. Update manifest and notify\n\n### Recommended Pattern\n```bash\n# In heartbeat, for each task:\ncd /tmp/orchestrator-*/task-tN\nif tmux capture-pane shows shell prompt; then\n  # Worker finished, check for unpushed work\n  if git log @{u}.. --oneline | grep -q .; then\n    git push -u origin HEAD\n    gh pr create --title \"$(git log --format=%s -1)\" --body \"Closes #N\" --base main\n  fi\nfi\n```","tags":["task","orchestrator","agent","skills","jdrhyne","agent-skills","agentic-ai","ai-agents","automation","claude-code","clawdbot","codex"],"capabilities":["skill","source-jdrhyne","skill-task-orchestrator","topic-agent-skills","topic-agentic-ai","topic-ai-agents","topic-automation","topic-claude-code","topic-clawdbot","topic-codex","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-github-copilot","topic-llm-agents"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/jdrhyne/agent-skills/task-orchestrator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add jdrhyne/agent-skills","source_repo":"https://github.com/jdrhyne/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.565","qualityRationale":"deterministic score 0.56 from registry signals: · indexed on github topic:agent-skills · 230 github stars · SKILL.md body (11,381 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:54:20.061Z","embedding":null,"createdAt":"2026-04-18T22:05:06.726Z","updatedAt":"2026-04-22T00:54:20.061Z","lastSeenAt":"2026-04-22T00:54:20.061Z","tsv":"'+1':1006,1322 '-01':154,1389 '-1':743,1544 '-100':659 '-17':155,1390 '-20':712 '-5.2':161,265,327,412,700,962,1256,1264 '-50':504 '/.codex/config.toml':419,425 '/15':773 '/bin/bash':465 '/dev/null':506,600,747 '/nuri_workspace':1422 '/orchestrator-':281 '/owner/repo.git':296 '/path/to/worktrees':151 '/task-tn':1507 '/tmp':280 '/tmp/issues.json':830 '/tmp/orchestrator-':1506 '0':527,582 '00':157 '00z':158 '1':128,168,174,274,471,484,547,619,812,816,843,856,903,909,981,1143,1149,1217,1252,1431,1476 '10':1336 '100':1327 '15':762,979 '2':195,287,488,505,575,599,637,746,831,849,888,985,1156,1170,1236,1268,1445,1484 '20':479,723 '2026':153,1388 '3':236,300,719,858,864,900,990,1164,1279,1457,1492 '4':306,971,996,1176,1290 '5':1008,1184,1305 '6':1055,1192,1314 '7':1200,1329 '8':1207,1340 'access':1405 'action':610,765 'activ':585,1105 'add':382,758,766,919 'advanc':792 'agent':7,41,1373 'aggress':1333 'alongsid':57 'alway':1253 'analysi':12 'analyz':333,641,813,832 'appropri':624 'ar':745 'array':224 'atom':1280 'attempt':706 'auto':1043,1110,1400 'auto-gener':1042 'auto-h':1109 'autom':1346 'automat':1339 'autonom':4,36,261 'b':383,920 'base':1548 'bash':273,338,371,390,464,626,645,728,757,815,904,1011,1057,1499 'batch':870,878,935,1351 'block':1098,1348 'blocker':122 'bodi':353,362,829,1038,1545 'bound':124 'boundari':64 'branch':84,247,1296 'browser':1341,1355 'build':42,1366 'captur':109,489,498,639,646,653,1308,1511 'capture-pan':497,652,1510 'cat':309,709 'cd':298,378,439,693,735,956,1016,1071,1505 'cdp':1345 'ceo_root_manager.js':1151,1158,1194 'chang':1041,1289 'check':462,480,507,529,549,583,602,729,775,782,977,1429,1519 'check_progress.sh':466 'checkpoint':1306 'cleanup':1056 'clear':1269 'cli':427,1377 'clone':288,293 'close':1039,1546 'code':1372 'codex':45,162,257,266,328,409,413,441,697,702,959,964,1046,1103,1257,1266,1283,1376,1391,1396 'codex-high':701,963,1265 'coding-ag':1371 'command':270 'commit':449,734,740,750,1281,1285,1447,1453,1479 'complet':235,509,799,1002,1014,1064,1116,1328 'completedat':191 'complex':1260 'concept':127 'config':422 'configur':268 'container_executor.js':1179,1202,1209 'context':648,667 'continu':112,561 'coordin':31 'core':126 'could':1410,1462 'creat':152,275,301,323,369,375,393,889,905,1009,1027,1124,1485,1491,1538 'creation':1383 'critic':169,1144 'critical/blocking':844 'cron':755,760,764 'current':233,797 'd':403,682,943 'date':282 'defin':134 'dep':838,847,874,883 'depend':11,78,138,196,221,337,834,853,860,896,1101 'dependson':180,223,1152,1159,1167,1180,1187,1195,1203,1211 'descript':446,1274 'detect':1424,1469 'die':1304 'differ':212,871,1224 'directori':277 'done':523,606,926,969,1085,1117,1444 'earli':1292 'earlier':862 'echo':512,522,533,542,557,567,577 'effort':416 'egress_proxy.js':1210 'enforc':225 'engin':55,61,1363 'enter':456,636,718,968 'eof':311,332 'error':531,537,543,647,666,1112 'error.log':710 'error/failure':638 'everi':761,978 'exampl':1128 'exec':1397 'execut':15,33,237,262,1214,1233 'expect':1275 'explicit':220,837,882 'f':596 'fail':115,538,707,1113,1408 'failur':1459 'fatal':539 'fetch':339,817 'fi':528,548,576,1550,1551 'file':133,139,178,199,205,213,358,366,835,872,880,897,1150,1157,1165,1177,1185,1193,1201,1208,1225,1231,1313 'filesystem':1415 'finish':1518 'fix':176,443,644,713,804,1034 'fix/issue-':921,1023,1031 'fix/issue-n':384 'flag':428 'forc':1084 'format':744,1542 'framework':1130,1137 'full':808,1399 'full-auto':1398 'gate':228,1316,1370 'generat':1044 'get':241 'gh':343,819,1025,1489,1536 'git':244,292,380,730,741,917,1019,1079,1406,1448,1524,1531,1540 'github':334,1379 'github.com':295 'github.com/owner/repo.git':294 'good':451 'gpt':160,264,326,411,699,961,1255,1263 'grep':514,535,559,1528 'group':356,839 'guess':92 'head':1030,1535 'heal':19,49,90,460,609,788,975,993,1111,1332 'heartbeat':20,469,754,771,976,1423,1427,1501 'high':164,267,330,417,703,850,965,1171,1258,1267 'host':1413,1465 'hostnam':1440 'human':94,803 'id':171,487,525,545,570,580,696,738,924,946,955,958,1018,1083,1146,1153,1161,1173,1181,1189,1197,1204 'identifi':868 'idl':1434 'ifram':1350 'improv':1425 'includ':1271 'indefinit':117 'independ':215 'indic':510 'initi':271,307 'input':555,573,622 'instruct':1278 'integr':1357 'interven':1338 'intervent':1108 'isn':1299 'isol':246,376 'issu':173,335,342,344,361,444,715,805,818,820,845,922,1024,1032,1035,1036,1040,1148,1155,1163,1175,1183,1191,1199,1206,1272,1384 'issues.json':355 'issues/tasks':28 'jdrhyne/nuri-security-framework':1139 'job':767 'json':132,143,350,826,1132 'key':434,565,632,690,952 'kill':662,672,1069 'kill-serv':1068 'kill-sess':671 'kill_switch.js':1178,1186 'label':354,768 'larg':24 'last':739 'lastprogress':189 'launch':67,387,408,901,927,1003 'learn':1387 'lesson':1386 'like':1421 'limit':1343,1393,1414 'list':345,594,821 'list-sess':593 'load':51,1364 'local':482,485,492 'log':104,640,731,742,1307,1449,1525,1541 'logic':1288 'look':1460 'lost':1301 'main':386,925,1549 'manag':1385 'manifest':103,130,308,474,781,890,987,1089,1494 'manifest.json':892 'manual':1052,1354 'map':898 'may':852 'mean':1093 'medium/low':859 'mention':359,836 'merg':85,211,1061,1125,1127 'messag':452 'min':478,724,980,1337 'minut':763 'mkdir':284 'model':159,238,263,325,421,698,960,1262 'modelti':163,329 'monitor':21,50,457,972 'multi':6,40 'multi-ag':5,39 'multipl':27 'must':206 'n':445,1000,1005,1321,1325,1547 'name':147,166,314,598,1141,1168 'need':30,1107,1114 'network':1404 'new':401,680,941 'new-sess':400,679,940 'next':229,794 'note':420 'notifi':1496 'nudg':725 'null':184,186,188,190,192,194 'number':351,827,1273 'nuri':1135 'nuri-security-framework':1134 'one':59 'onelin':1451,1527 'open':341,349,825,1122 'orchestr':3,9,35,37,272,617,770,776,809,1047,1131,1471 'orchestrator-heartbeat':769 'order':209,226,886 'origin':455,1022,1534 'outcom':1276 'output':491,493,513,534,558,1310,1467 'outsid':1481 'overlap':73 'owner/repo':149,316,347,823,1029 'p':285,500,655 'pane':108,499,654,1437,1512 'panic':540 'parallel':13,32,68,214,869,934,1213,1223,1232 'pass':518,1051 'path':319,322,1420,1441 'pattern':1378,1498 'pend':182,1094 'period':1311 'phase':165,167,227,230,234,331,795,841,842,848,855,857,863,867,902,908,999,1004,1140,1142,1169,1216,1235,1315,1320,1324 'phase1':914,933 'ping':802 'plan':814 'poll':982 'pr':1026,1120,1121,1123,1126,1382,1487,1490,1537 'press':563 'previous':705 'principl':62,1367 'prioriti':851 'prnumber':193 'progress':461,721,777,989,1298 'project':25,144,146,312,313,1133 'project-nam':145 'prompt':105,552,774,967,1270,1433,1515 'prs':1010,1060 'push':83,453,520,1020,1291,1293,1407,1458,1477,1532 'q':1529 'qe':515,560 'qie':536 'qualiti':1369 'read':780 'readi':1118 'reason':415 'recent':490,733 'recommend':1497 'refer':1374 'relay':1342 'remot':1295,1456 'remov':1081 'repo':148,289,315,346,822,1028,1138 'requir':97 'resolv':80,1412,1464 'respons':625 'restart':664,727,753 'retri':113,125,642,717,1115 'return':526,546,574,581 'review':95 'rf':1087 'rm':1086 'rule':197 'run':207,218,250,447,467,578,810,875,884,1102,1221 'safeti':63 'sandbox':1392,1402,1483 'schedul':772 'scope':75 'scrape':1352 'script':463 'secret':101 'secur':1129,1136 'self':18,48,89,459,608,787,974,992,1331 'self-heal':17,47,88,458,607,786,973,991,1330 'send':433,623,631,689,951 'send-key':432,630,688,950 'senior':54,1362 'senior-engin':53,1361 'sequenti':200 'serial':368,877 'server':1070 'session':255,389,394,402,481,483,502,586,588,595,597,603,604,605,634,657,673,675,681,684,692,785,929,942,984,1104,1303 'setup':269,756 'shell':1432,1514 'show':1438,1452,1513 'simultan':219,876 'skill':56,1360 'skill-task-orchestrator' 'socket':303,304,320,321,391,399,431,472,496,592,629,651,670,678,687,939,949,1067 'source-jdrhyne' 'src/foo.js':179 'stall':476,551 'start':1096,1241,1319 'startedat':187 'state':348,824 'status':142,181,1090,1092 'step':811,887,899,970,1007,1054,1356 'stop':118 'store':100 'stuck':568,615,790,994,1106,1335 'success':519,1015 'surfac':120 't00':156 't1':172,1147,1160,1218,1229 't2':1154,1196,1226 't3':1162,1220 't4':1174,1188,1237,1246 't5':1182,1243 't6':1190,1238 't7':1198,1212,1239,1250 't8':1205,1247 'tail':711 'task':2,8,34,71,116,129,136,170,201,216,240,249,363,374,396,406,437,486,524,544,569,579,613,695,737,791,895,910,912,915,931,945,954,995,1001,1013,1074,1077,1145,1172,1504 'task-orchestr':1 'task-tn':405,436 'task_id-error.log':661 'tell':1282 'test':448,517,1048,1050,1277 'threshold':477,752 'timestamp':324 'tip':1251 'titl':175,352,828,1033,1037,1539 'tmpdir':279 'tmux':44,107,254,302,388,397,429,494,590,627,649,668,676,685,784,928,937,947,1065,1309,1436,1509 'tmux/codex':14 'tmuxsess':185 'tn':407,438 'togeth':1242 'topic-agent-skills' 'topic-agentic-ai' 'topic-ai-agents' 'topic-automation' 'topic-claude-code' 'topic-clawdbot' 'topic-codex' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-github-copilot' 'topic-llm-agents' 'touch':140,202,364 'u':1021,1450,1526,1533 'unit':1049 'unpush':1446,1521 'updat':986,1493 'use':22,43,256,410,1254,1349,1380,1395 'usernam':1439 'valu':1091 'verif':1053 'via':468,1488 'wait':222,231,553,571,620,1099,1227,1244,1248 'within':865 'work':86,276,1063,1261,1522 'workdir':150,278,286,317,318,470,694,736,779,1088 'workdir/logs':660 'workdir/manifest.json':310,475 'workdir/orchestrator.sock':305,392,473 'workdir/repo':297,299,379,1072 'workdir/task-':923,957,1017,1082 'workdir/task-tn':385,440 'worker':69,1442,1474,1517 'workflow':807 'workspace_validator.js':1166 'worktre':183,245,291,370,377,381,906,918,1080 'write':74,891,1418 'x':177 'y':635 'y/n':562 'yet':1097 'yolo':259,442,704,966","prices":[{"id":"d481c252-2ca8-40e1-b4fb-7dd72b9da5d1","listingId":"5c99a7da-1b6f-4f78-90ee-86b9cbc8559b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"jdrhyne","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:05:06.726Z"}],"sources":[{"listingId":"5c99a7da-1b6f-4f78-90ee-86b9cbc8559b","source":"github","sourceId":"jdrhyne/agent-skills/task-orchestrator","sourceUrl":"https://github.com/jdrhyne/agent-skills/tree/main/skills/task-orchestrator","isPrimary":false,"firstSeenAt":"2026-04-18T22:05:06.726Z","lastSeenAt":"2026-04-22T00:54:20.061Z"}],"details":{"listingId":"5c99a7da-1b6f-4f78-90ee-86b9cbc8559b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"jdrhyne","slug":"task-orchestrator","github":{"repo":"jdrhyne/agent-skills","stars":230,"topics":["agent-skills","agentic-ai","ai-agents","automation","claude-code","clawdbot","codex","cursor","developer-tools","gemini-cli","github-copilot","llm-agents","mcp","openclaw","prompt-engineering","prompts"],"license":null,"html_url":"https://github.com/jdrhyne/agent-skills","pushed_at":"2026-03-27T14:29:53Z","description":"A collection of AI agent skills for Clawdbot, Claude Code, Codex","skill_md_sha":"4912acd36250f35742e72ae8726c6b514ca4d4dc","skill_md_path":"skills/task-orchestrator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/jdrhyne/agent-skills/tree/main/skills/task-orchestrator"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"task-orchestrator","description":"Autonomous multi-agent task orchestration with dependency analysis, parallel tmux/Codex execution, and self-healing heartbeat monitoring. Use for large projects with multiple issues/tasks that need coordinated parallel execution."},"skills_sh_url":"https://skills.sh/jdrhyne/agent-skills/task-orchestrator"},"updatedAt":"2026-04-22T00:54:20.061Z"}}