{"id":"0921d14c-d78f-4882-a0f7-e66a5b9cb041","shortId":"Yakr8P","kind":"skill","title":"autonomous-dispatcher","tagline":"This skill should be used when dispatching autonomous development or review tasks from GitHub issues. Covers scanning for new issues with the 'autonomous' label, dispatching dev-new/dev-resume/review processes, dependency checking, retry counting, stale process detection, and con","description":"# Autonomous Dev Team Dispatcher\n\nScan GitHub issues and dispatch dev/review tasks locally.\n\n> **Security Note**: This dispatcher processes GitHub issue content as input. In public repositories, issue content is untrusted — anyone can create issues. Ensure the `autonomous` label can only be applied by trusted maintainers (use GitHub branch rulesets or organizational policies). The dispatcher itself only reads labels/comments and spawns local processes — it does NOT modify source code or push to branches.\n\n## GitHub Authentication — USE APP TOKEN, NOT USER TOKEN\n\n**CRITICAL:** All `gh` CLI calls MUST use a GitHub App token, NOT the default user token.\n\n**Before running any `gh` command**, generate and export the App token using the shared script at `scripts/gh-app-token.sh`:\n\n```bash\n# Source the shared token generator\nsource \"${PROJECT_DIR}/scripts/gh-app-token.sh\"\n\n# Generate token for the dispatcher's GitHub App\nGH_TOKEN=$(get_gh_app_token \"$DISPATCHER_APP_ID\" \"$DISPATCHER_APP_PEM\" \"$REPO_OWNER\" \"$REPO_NAME\") || {\n  echo \"FATAL: Failed to generate GitHub App token\" >&2\n  exit 1\n}\nif [[ -z \"$GH_TOKEN\" ]]; then\n  echo \"FATAL: GitHub App token is empty\" >&2\n  exit 1\nfi\nexport GH_TOKEN\n```\n\nThe `DISPATCHER_APP_PEM` env var must point to the App's private key PEM file.\nIf not set, provide the path explicitly.\n\nThis ensures all issue comments, label changes, and API calls appear as the configured GitHub App bot instead of a personal user account. The token is valid for 1 hour and scoped to the target repo only.\n\n**DO NOT skip this step.** If `GH_TOKEN` is not set, `gh` will fall back to the user's personal token, which is incorrect.\n\n## Environment Variables\n\n- `REPO`: GitHub repo in `owner/repo` format (e.g., `myorg/myproject`)\n- `PROJECT_DIR`: Absolute path to the project root on the local machine\n- `MAX_CONCURRENT`: Max parallel tasks (default: `5`)\n- `MAX_RETRIES`: Max dev retry attempts before marking issue as `stalled` (default: `3`)\n- `PROJECT_ID`: Project identifier for log/PID files (default: `project`)\n- `DISPATCHER_APP_ID`: GitHub App ID for the dispatcher bot\n- `DISPATCHER_APP_PEM`: Path to the GitHub App private key PEM file\n\n## Local Dispatch Helper Script\n\n**CRITICAL:** All task dispatches (dev-new, dev-resume, review) MUST use the helper script `scripts/dispatch-local.sh` in the project root's `scripts/` directory. The script handles:\n- Background process spawning via `nohup`\n- Input validation (numeric issue numbers, safe session IDs)\n- Config loading from `scripts/autonomous.conf`\n\n**Usage:**\n```bash\n# PROJECT_DIR is the absolute path to the project root\n\n# For new dev task:\nbash \"$PROJECT_DIR/scripts/dispatch-local.sh\" dev-new ISSUE_NUM\n\n# For review task:\nbash \"$PROJECT_DIR/scripts/dispatch-local.sh\" review ISSUE_NUM\n\n# For resume dev task:\nbash \"$PROJECT_DIR/scripts/dispatch-local.sh\" dev-resume ISSUE_NUM SESSION_ID\n```\n\n**DO NOT construct dispatch commands manually.** Always use the dispatch-local.sh script.\n\n**DO NOT commit or push code to the target repository.** The dispatcher's role is strictly:\n1. Read issue labels and comments via GitHub API\n2. Update labels and post comments via GitHub API\n3. Dispatch local processes using the helper script\n\nAll code changes happen via the autonomous-dev/review scripts. The dispatcher MUST NOT modify source files or push to any branch (especially main).\n\n## Dispatch Logic\n\nWhen triggered (cron every 5 minutes), execute the following steps IN ORDER.\n\n**Important:** Maintain a `JUST_DISPATCHED` array to track issue numbers dispatched in the current cycle. This prevents Step 5 from false-positive stale detection on freshly dispatched processes whose PID files haven't been written yet.\n\n```bash\n# Initialize at the start of each dispatch cycle\nJUST_DISPATCHED=()\n```\n\n### Step 1: Check Concurrency\n\nCount issues with labels `in-progress` OR `reviewing`:\n```bash\nACTIVE=$(gh issue list --repo \"$REPO\" --state open --limit 100 \\\n  --label \"autonomous\" --json labels \\\n  -q '[.[] | select(.labels[].name | IN(\"in-progress\",\"reviewing\"))] | length')\n```\nIf ACTIVE >= MAX_CONCURRENT (default 5), STOP. Log \"Concurrency limit reached (ACTIVE/MAX_CONCURRENT)\" and exit.\n\n### Step 2: Scan for New Tasks\n\nFind issues with `autonomous` label but NO state labels:\n```bash\ngh issue list --repo \"$REPO\" --state open --limit 100 \\\n  --label \"autonomous\" --json number,labels,title \\\n  -q '[.[] | select(\n    [.labels[].name] | (\n      contains([\"in-progress\"]) or\n      contains([\"pending-review\"]) or\n      contains([\"reviewing\"]) or\n      contains([\"pending-dev\"]) or\n      contains([\"stalled\"]) or\n      contains([\"approved\"])\n    ) | not\n  )]'\n```\n\nFor each found issue (respecting concurrency limit):\n\n**1. Check Dependencies** — before dispatching, read the issue body and look for a `## Dependencies` section. Parse issue references (`#N`) from that section. For each referenced issue, check if it is closed:\n```bash\n# Extract dependency issue numbers from the issue body\nDEPS=$(gh issue view ISSUE_NUM --repo \"$REPO\" --json body -q '.body' \\\n  | sed -n '/^## Dependencies/,/^## /p' \\\n  | grep -oP '#\\K[0-9]+')\n\n# Check if all dependencies are closed\nBLOCKED=false\nfor DEP in $DEPS; do\n  STATE=$(gh issue view \"$DEP\" --repo \"$REPO\" --json state -q '.state')\n  if [ \"$STATE\" != \"CLOSED\" ]; then\n    BLOCKED=true\n    break\n  fi\ndone\n\nif [ \"$BLOCKED\" = true ]; then\n  # Skip this issue — dependency not yet resolved\n  continue\nfi\n```\n\nIf any dependency issue is still open, **skip this issue silently** (do not add labels or comment). It will be picked up in the next dispatch cycle after its dependencies are resolved.\n\n**2.** Add `in-progress` label\n**3.** Comment: `Dispatching autonomous development...`\n**4.** Dispatch via helper script:\n```bash\nbash \"$PROJECT_DIR/scripts/dispatch-local.sh\" dev-new ISSUE_NUM\n```\n**5.** Track dispatched issue: `JUST_DISPATCHED+=(ISSUE_NUM)`\n**6.** Re-check concurrency after each dispatch\n\n### Step 3: Scan for Review Tasks\n\nFind issues with `autonomous` + `pending-review` (no `reviewing`):\n```bash\ngh issue list --repo \"$REPO\" --state open --limit 100 \\\n  --label \"autonomous,pending-review\" --json number,labels \\\n  -q '[.[] | select([.labels[].name] | contains([\"reviewing\"]) | not)]'\n```\n\nFor each found issue (respecting concurrency limit):\n**1.** Remove `pending-review`, add `reviewing`\n**2.** Comment: `Dispatching autonomous review...`\n**3.** Dispatch via helper script:\n```bash\nbash \"$PROJECT_DIR/scripts/dispatch-local.sh\" review ISSUE_NUM\n```\n**4.** Track dispatched issue: `JUST_DISPATCHED+=(ISSUE_NUM)`\n\n### Step 4: Scan for Pending-Dev (Resume)\n\nFind issues with `autonomous` + `pending-dev`:\n```bash\ngh issue list --repo \"$REPO\" --state open --limit 100 \\\n  --label \"autonomous,pending-dev\" --json number,labels,comments\n```\n\nFor each found issue (respecting concurrency limit):\n\n**1. Check retry count** — before dispatching, count BOTH **failed** `Agent Session Report (Dev)` comments (exit code ≠ 0) AND **dispatcher-detected crash** comments. Only count failures that occurred **after the last stalled→unstalled transition** (i.e., after the most recent \"Marking as stalled\" comment). This ensures that removing the `stalled` label resets the retry counter. Successful dev completions (exit code 0) that were sent back by review do NOT count as retries:\n```bash\n# Find the timestamp of the last \"Marking as stalled\" comment (retry counter cutoff).\n# If the issue was never stalled, use epoch (1970-01-01T00:00:00Z) to count all comments.\nLAST_STALLED_AT=$(gh issue view ISSUE_NUM --repo \"$REPO\" --json comments \\\n  -q '[.comments[] | select(.body | test(\"Marking as stalled\"))] | last | .createdAt // \"1970-01-01T00:00:00Z\"')\n\n# Count failed agent session reports (only after last stalled cutoff)\nAGENT_FAILURES=$(gh issue view ISSUE_NUM --repo \"$REPO\" --json comments \\\n  -q \"[.comments[] | select((.createdAt > \\\"${LAST_STALLED_AT}\\\") and (.body | test(\\\"Agent Session Report \\\\\\\\(Dev\\\\\\\\)\\\")) and (.body | test(\\\"Exit code: 0\\\") | not))] | length\")\n\n# Count dispatcher-detected crashes (only after last stalled cutoff)\nDISPATCHER_CRASHES=$(gh issue view ISSUE_NUM --repo \"$REPO\" --json comments \\\n  -q \"[.comments[] | select((.createdAt > \\\"${LAST_STALLED_AT}\\\") and (.body | test(\\\"Task appears to have crashed|process not found|crashed \\\\\\\\(no PR found\\\\\\\\)|crashed\\\\\\\\. PR found\\\")))] | length\")\n\nRETRY_COUNT=$((AGENT_FAILURES + DISPATCHER_CRASHES))\nMAX_RETRIES=\"${MAX_RETRIES:-3}\"\n\nif [ \"$RETRY_COUNT\" -ge \"$MAX_RETRIES\" ]; then\n  # Issue has exceeded retry limit — mark as stalled\n  gh issue edit ISSUE_NUM --repo \"$REPO\" \\\n    --remove-label \"pending-dev\" \\\n    --add-label \"stalled\"\n  gh issue comment ISSUE_NUM --repo \"$REPO\" \\\n    --body \"Issue has exceeded the maximum retry limit ($MAX_RETRIES failed attempts: $AGENT_FAILURES agent failures + $DISPATCHER_CRASHES dispatcher-detected crashes). Marking as stalled. @${REPO_OWNER} please investigate manually.\"\n  continue\nfi\n```\n\nIf combined retry count exceeds `MAX_RETRIES` (default 3), add `stalled` label, remove `pending-dev`, post a comment, and **skip this issue**. When a user removes the `stalled` label to re-dispatch, the retry counter automatically resets because only crashes after the latest \"Marking as stalled\" comment are counted.\n\n**2.** Extract latest dev session ID from issue comments (search for `Dev Session ID:` — do NOT match `Review Session ID:`):\n```bash\nSESSION_ID=$(gh issue view ISSUE_NUM --repo \"$REPO\" --json comments \\\n  -q '[.comments[].body | capture(\"Dev Session ID: `(?P<id>[a-zA-Z0-9_-]+)`\"; \"g\") | .id] | last // empty')\n```\n\n**3.** Remove `pending-dev`, add `in-progress`\n**4.** Comment: `Resuming development (session: SESSION_ID)...`\n**5.** Dispatch via helper script:\n```bash\nbash \"$PROJECT_DIR/scripts/dispatch-local.sh\" dev-resume ISSUE_NUM SESSION_ID\n```\n**6.** Track dispatched issue: `JUST_DISPATCHED+=(ISSUE_NUM)`\n\n### Step 5: Stale Detection\n\nFind issues with `in-progress` or `reviewing` that may be stuck.\n\n**Skip freshly dispatched issues:** Before checking any issue, verify it was NOT dispatched in the current cycle. Issues in `JUST_DISPATCHED` must be skipped — their PID files may not exist yet.\n\n```bash\n# Skip issues dispatched in this cycle\nif [[ \" ${JUST_DISPATCHED[*]} \" == *\" ISSUE_NUM \"* ]]; then\n  # Skip — just dispatched this cycle, PID file may not exist yet\n  continue\nfi\n```\n\nFor each remaining issue, check if the agent process is still alive locally. Use the correct PID file prefix based on the issue's current label:\n\n- `in-progress` issues use PID file: `/tmp/agent-${PROJECT_ID}-issue-ISSUE_NUM.pid`\n- `reviewing` issues use PID file: `/tmp/agent-${PROJECT_ID}-review-ISSUE_NUM.pid`\n\n```bash\n# For in-progress issues:\nkill -0 $(cat /tmp/agent-${PROJECT_ID}-issue-ISSUE_NUM.pid 2>/dev/null) 2>/dev/null && echo ALIVE || echo DEAD\n\n# For reviewing issues:\nkill -0 $(cat /tmp/agent-${PROJECT_ID}-review-ISSUE_NUM.pid 2>/dev/null) 2>/dev/null && echo ALIVE || echo DEAD\n```\n\nIf DEAD and issue still has `in-progress`, **check whether a PR exists before deciding the transition**:\n```bash\nPR_EXISTS=$(gh pr list --repo \"$REPO\" --state open --json number,body \\\n  -q \"[.[] | select(.body | test(\\\"#ISSUE_NUM[^0-9]\\\") or test(\\\"#ISSUE_NUM$\\\"))] | length\")\n\nif [ \"$PR_EXISTS\" -gt 0 ]; then\n  # PR exists — review agent can assess the work\n  # Comment: \"Task appears to have crashed. PR found — moving to pending-review for assessment.\"\n  # Remove `in-progress`, add `pending-review`\nelse\n  # No PR — dev agent didn't finish, retry development\n  # Comment: \"Task appears to have crashed (no PR found). Moving to pending-dev for retry.\"\n  # Remove `in-progress`, add `pending-dev`\nfi\n```\n\nIf DEAD and issue still has `reviewing`:\n1. Comment: `Review process appears to have crashed. Moving to pending-dev for retry.`\n2. Remove `reviewing`, add `pending-dev`\n\n## Cron Configuration (OpenClaw)\n\n```bash\nopenclaw cron add \\\n  --name \"Autonomous Dispatcher\" \\\n  --cron \"*/5 * * * *\" \\\n  --session isolated \\\n  --message \"Run the autonomous-dispatcher skill. Check GitHub issues and dispatch tasks.\" \\\n  --announce\n```\n\n## Label Definitions\n\n| Label | Color | Description |\n|-------|-------|-------------|\n| `autonomous` | `#0E8A16` | Issue should be processed by autonomous pipeline |\n| `in-progress` | `#FBCA04` | Agent is actively developing |\n| `pending-review` | `#1D76DB` | Development complete, awaiting review |\n| `reviewing` | `#5319E7` | Agent is actively reviewing |\n| `pending-dev` | `#E99695` | Review failed, needs more development |\n| `approved` | `#0E8A16` | Review passed. PR merged (or awaiting manual merge if `no-auto-close` present) |\n| `no-auto-close` | `#d4c5f9` | Used with `autonomous` — skip auto-merge after review passes, requires manual approval |\n| `stalled` | `#B60205` | Issue exceeded max retry attempts; requires manual investigation |\n\n## Model Strategy\n\n| Task | Model | Rationale |\n|------|-------|-----------|\n| Development (`autonomous-dev.sh`) | Opus (default) | Complex coding, architecture decisions |\n| Review (`autonomous-review.sh`) | Sonnet (`--model sonnet`) | Checklist verification, avoids Opus quota contention |","tags":["autonomous","dispatcher","dev","team","zxkane","agent-skills","ai-agents","ai-code-review","autonomous-coding","autonomous-dev-team","ci-cd","claude-code"],"capabilities":["skill","source-zxkane","skill-autonomous-dispatcher","topic-agent-skills","topic-ai-agents","topic-ai-code-review","topic-autonomous-coding","topic-autonomous-dev-team","topic-ci-cd","topic-claude-code","topic-claude-code-hooks","topic-code-review-automation","topic-codex-cli","topic-coding-agents","topic-devops-automation"],"categories":["autonomous-dev-team"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/zxkane/autonomous-dev-team/autonomous-dispatcher","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add zxkane/autonomous-dev-team","source_repo":"https://github.com/zxkane/autonomous-dev-team","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (13,159 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-22T13:03:20.438Z","embedding":null,"createdAt":"2026-04-19T00:40:45.926Z","updatedAt":"2026-04-22T13:03:20.438Z","lastSeenAt":"2026-04-22T13:03:20.438Z","tsv":"'-0':1598,1616 '-01':1123,1124,1155,1156 '-3':1260 '-9':789,1668 '/5':1786 '/dev-resume/review':32 '/dev/null':1605,1607,1623,1625 '/p':784 '/review':533 '/scripts/gh-app-token.sh':164 '/tmp/agent-':1578,1587,1600,1618 '0':788,1045,1088,1200,1667,1678 '00':1126,1158 '00z':1127,1159 '0e8':1809,1850 '1':199,214,270,498,612,729,956,1029,1753 '100':634,687,933,1012 '1970':1122,1154 '1d76db':1829 '2':197,212,507,664,868,963,1383,1604,1606,1622,1624,1768 '3':344,516,874,910,968,1340,1432 '4':879,980,989,1441 '5':331,555,581,654,893,1448,1473 '5319e7':1835 '6':901,1464 '9':1427 'a-za-z0':1423 'a16':1810,1851 'absolut':315,430 'account':264 'activ':625,650,1824,1838 'active/max_concurrent':660 'add':849,869,961,1290,1341,1437,1707,1741,1771,1781 'add-label':1289 'agent':1038,1162,1170,1191,1252,1312,1314,1552,1683,1715,1822,1836 'aliv':1556,1609,1627 'alway':477 'announc':1802 'anyon':72 'api':250,506,515 'app':117,131,147,172,177,180,183,195,208,221,229,257,355,358,365,371 'appear':252,1235,1690,1723,1757 'appli':83 'approv':720,1849,1883 'architectur':1905 'array':568 'assess':1685,1702 'attempt':337,1311,1890 'authent':115 'auto':1863,1868,1876 'auto-merg':1875 'automat':1369 'autonom':2,11,26,43,78,531,636,672,689,877,918,935,966,999,1014,1783,1793,1808,1816,1873 'autonomous-dev':530 'autonomous-dev.sh':1900 'autonomous-dispatch':1,1792 'autonomous-review.sh':1908 'avoid':1914 'await':1832,1857 'b60205':1885 'back':293,1092 'background':407 'base':1564 'bash':155,425,440,451,461,600,624,678,760,884,885,924,973,974,1003,1100,1403,1453,1454,1519,1591,1648,1778 'block':796,818,824 'bodi':737,768,778,780,1147,1189,1196,1232,1300,1417,1660,1663 'bot':258,363 'branch':89,113,546 'break':820 'call':126,251 'captur':1418 'cat':1599,1617 'chang':248,526 'check':35,613,730,755,790,904,1030,1493,1549,1639,1796 'checklist':1912 'cli':125 'close':759,795,816,1864,1869 'code':109,487,525,1044,1087,1199,1904 'color':1806 'combin':1333 'command':142,475 'comment':246,503,512,852,875,964,1021,1042,1051,1071,1110,1131,1143,1145,1180,1182,1223,1225,1295,1350,1380,1391,1414,1416,1442,1688,1721,1754 'commit':484 'complet':1085,1831 'complex':1903 'con':42 'concurr':326,614,652,657,727,905,954,1027 'config':420 'configur':255,1776 'construct':473 'contain':698,703,708,711,716,719,946 'content':62,69,1917 'continu':834,1330,1543 'correct':1560 'count':37,615,1032,1035,1053,1097,1129,1160,1203,1251,1263,1335,1382 'counter':1082,1112,1368 'cover':19 'crash':1050,1207,1214,1238,1242,1246,1255,1317,1321,1373,1693,1726,1760 'creat':74 'createdat':1153,1184,1227 'critic':122,380 'cron':553,1775,1780,1785 'current':576,1503,1569 'cutoff':1113,1169,1212 'cycl':577,608,862,1504,1525,1536 'd4c5f9':1870 'dead':1611,1629,1631,1747 'decid':1645 'decis':1906 'default':135,330,343,352,653,1339,1902 'definit':1804 'dep':769,799,801,807 'depend':34,731,742,762,783,793,830,838,865 'descript':1807 'detect':40,587,1049,1206,1320,1475 'dev':30,44,335,385,388,438,444,459,465,532,714,889,994,1002,1017,1041,1084,1194,1288,1347,1386,1394,1419,1436,1458,1714,1734,1744,1765,1774,1842 'dev-new':29,384,443,888 'dev-resum':387,464,1457 'dev/review':52 'develop':12,878,1444,1720,1825,1830,1848,1899 'didn':1716 'dir':163,314,427 'dir/scripts/dispatch-local.sh':442,453,463,887,976,1456 'directori':403 'dispatch':3,10,28,46,51,58,95,169,179,182,220,354,362,364,377,383,474,493,517,536,549,567,573,590,607,610,733,861,876,880,895,898,908,965,969,982,985,1034,1048,1205,1213,1254,1316,1319,1365,1449,1466,1469,1490,1500,1508,1522,1528,1534,1784,1794,1800 'dispatch-local.sh':480 'dispatcher-detect':1047,1204,1318 'done':822 'e.g':311 'e99695':1843 'echo':189,205,1608,1610,1626,1628 'edit':1278 'els':1711 'empti':211,1431 'ensur':76,243,1073 'env':223 'environ':303 'epoch':1121 'especi':547 'everi':554 'exceed':1270,1303,1336,1887 'execut':557 'exist':1517,1541,1643,1650,1676,1681 'exit':198,213,662,1043,1086,1198 'explicit':241 'export':145,216 'extract':761,1384 'fail':191,1037,1161,1310,1845 'failur':1054,1171,1253,1313,1315 'fall':292 'fals':584,797 'false-posit':583 'fatal':190,206 'fbca04':1821 'fi':215,821,835,1331,1544,1745 'file':234,351,375,541,594,1514,1538,1562,1577,1586 'find':669,915,996,1101,1476 'finish':1718 'follow':559 'format':310 'found':724,951,1024,1241,1245,1248,1695,1729 'fresh':589,1489 'g':1428 'ge':1264 'generat':143,160,165,193 'get':175 'gh':124,141,173,176,202,217,285,290,626,679,770,804,925,1004,1135,1172,1215,1276,1293,1406,1651 'github':17,48,60,88,114,130,171,194,207,256,306,357,370,505,514,1797 'grep':785 'gt':1677 'handl':406 'happen':527 'haven':595 'helper':378,394,522,882,971,1451 'hour':271 'i.e':1063 'id':181,346,356,359,419,470,1388,1396,1402,1405,1421,1429,1447,1463,1580,1589,1602,1620 'identifi':348 'import':563 'in-progress':619,644,699,870,1438,1479,1571,1593,1636,1704,1738,1818 'incorrect':302 'initi':601 'input':64,412 'instead':259 'investig':1328,1893 'isol':1788 'issu':18,23,49,61,68,75,245,340,415,446,455,467,500,571,616,627,670,680,725,736,745,754,763,767,771,773,805,829,839,845,891,896,899,916,926,952,978,983,986,997,1005,1025,1116,1136,1138,1173,1175,1216,1218,1268,1277,1279,1294,1296,1301,1354,1390,1407,1409,1460,1467,1470,1477,1491,1495,1505,1521,1529,1548,1567,1574,1583,1596,1614,1633,1665,1671,1749,1798,1811,1886 'issue-issue_num.pid':1581,1603 'json':637,690,777,810,939,1018,1142,1179,1222,1413,1658 'k':787 'key':232,373 'kill':1597,1615 'label':27,79,247,501,509,618,635,638,641,673,677,688,692,696,850,873,934,941,944,1013,1020,1078,1285,1291,1343,1361,1570,1803,1805 'labels/comments':99 'last':1059,1106,1132,1152,1167,1185,1210,1228,1430 'latest':1376,1385 'length':648,1202,1249,1673 'limit':633,658,686,728,932,955,1011,1028,1272,1307 'list':628,681,927,1006,1653 'load':421 'local':54,102,323,376,518,1557 'log':656 'log/pid':350 'logic':550 'look':739 'machin':324 'main':548 'maintain':86,564 'manual':476,1329,1858,1882,1892 'mark':339,1068,1107,1149,1273,1322,1377 'match':1399 'max':325,327,332,334,651,1256,1258,1265,1308,1337,1888 'maximum':1305 'may':1485,1515,1539 'merg':1855,1859,1877 'messag':1789 'minut':556 'model':1894,1897,1910 'modifi':107,539 'move':1696,1730,1761 'must':127,225,391,537,1509 'myorg/myproject':312 'n':747,782 'name':188,642,697,945,1782 'need':1846 'never':1118 'new':22,31,386,437,445,667,890 'next':860 'no-auto-clos':1861,1866 'nohup':411 'note':56 'num':447,456,468,774,892,900,979,987,1139,1176,1219,1280,1297,1410,1461,1471,1530,1666,1672 'number':416,572,691,764,940,1019,1659 'numer':414 'occur':1056 'op':786 'open':632,685,842,931,1010,1657 'openclaw':1777,1779 'opus':1901,1915 'order':562 'organiz':92 'owner':186,1326 'owner/repo':309 'p':1422 'parallel':328 'pars':744 'pass':1853,1880 'path':240,316,367,431 'pem':184,222,233,366,374 'pend':705,713,920,937,959,993,1001,1016,1287,1346,1435,1699,1709,1733,1743,1764,1773,1827,1841 'pending-dev':712,992,1000,1015,1286,1345,1434,1732,1742,1763,1772,1840 'pending-review':704,919,936,958,1698,1708,1826 'person':262,298 'pick':856 'pid':593,1513,1537,1561,1576,1585 'pipelin':1817 'pleas':1327 'point':226 'polici':93 'posit':585 'post':511,1348 'pr':1244,1247,1642,1649,1652,1675,1680,1694,1713,1728,1854 'prefix':1563 'present':1865 'prevent':579 'privat':231,372 'process':33,39,59,103,408,519,591,1239,1553,1756,1814 'progress':621,646,701,872,1440,1481,1573,1595,1638,1706,1740,1820 'project':162,313,319,345,347,353,399,426,434,441,452,462,886,975,1455,1579,1588,1601,1619 'provid':238 'public':66 'push':111,486,543 'q':639,694,779,812,942,1144,1181,1224,1415,1661 'quota':1916 'rational':1898 're':903,1364 're-check':902 're-dispatch':1363 'reach':659 'read':98,499,734 'recent':1067 'refer':746 'referenc':753 'remain':1547 'remov':957,1075,1284,1344,1358,1433,1703,1737,1769 'remove-label':1283 'repo':185,187,277,305,307,629,630,682,683,775,776,808,809,928,929,1007,1008,1140,1141,1177,1178,1220,1221,1281,1282,1298,1299,1325,1411,1412,1654,1655 'report':1040,1164,1193 'repositori':67,491 'requir':1881,1891 'reset':1079,1370 'resolv':833,867 'respect':726,953,1026 'resum':389,458,466,995,1443,1459 'retri':36,333,336,1031,1081,1099,1111,1250,1257,1259,1262,1266,1271,1306,1309,1334,1338,1367,1719,1736,1767,1889 'review':14,390,449,454,623,647,706,709,913,921,923,938,947,960,962,967,977,1094,1400,1483,1582,1613,1682,1700,1710,1752,1755,1770,1828,1833,1834,1839,1844,1852,1879,1907 'review-issue_num.pid':1590,1621 'role':495 'root':320,400,435 'ruleset':90 'run':139,1790 'safe':417 'scan':20,47,665,911,990 'scope':273 'script':152,379,395,402,405,481,523,534,883,972,1452 'scripts/autonomous.conf':423 'scripts/dispatch-local.sh':396 'scripts/gh-app-token.sh':154 'search':1392 'section':743,750 'secur':55 'sed':781 'select':640,695,943,1146,1183,1226,1662 'sent':1091 'session':418,469,1039,1163,1192,1387,1395,1401,1404,1420,1445,1446,1462,1787 'set':237,289 'share':151,158 'silent':846 'skill':5,1795 'skill-autonomous-dispatcher' 'skip':281,827,843,1352,1488,1511,1520,1532,1874 'sonnet':1909,1911 'sourc':108,156,161,540 'source-zxkane' 'spawn':101,409 'stale':38,586,1474 'stall':342,717,1060,1070,1077,1109,1119,1133,1151,1168,1186,1211,1229,1275,1292,1324,1342,1360,1379,1884 'start':604 'state':631,676,684,803,811,813,815,930,1009,1656 'step':283,560,580,611,663,909,988,1472 'still':841,1555,1634,1750 'stop':655 'strategi':1895 'strict':497 'stuck':1487 'success':1083 't00':1125,1157 'target':276,490 'task':15,53,329,382,439,450,460,668,914,1234,1689,1722,1801,1896 'team':45 'test':1148,1190,1197,1233,1664,1670 'timestamp':1103 'titl':693 'token':118,121,132,137,148,159,166,174,178,196,203,209,218,266,286,299 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-code-review' 'topic-autonomous-coding' 'topic-autonomous-dev-team' 'topic-ci-cd' 'topic-claude-code' 'topic-claude-code-hooks' 'topic-code-review-automation' 'topic-codex-cli' 'topic-coding-agents' 'topic-devops-automation' 'track':570,894,981,1465 'transit':1062,1647 'trigger':552 'true':819,825 'trust':85 'unstal':1061 'untrust':71 'updat':508 'usag':424 'use':8,87,116,128,149,392,478,520,1120,1558,1575,1584,1871 'user':120,136,263,296,1357 'valid':268,413 'var':224 'variabl':304 'verif':1913 'verifi':1496 'via':410,504,513,528,881,970,1450 'view':772,806,1137,1174,1217,1408 'whether':1640 'whose':592 'work':1687 'written':598 'yet':599,832,1518,1542 'z':201 'z0':1426 'za':1425","prices":[{"id":"c6bc82a9-33e2-4a0e-b203-e8e6107464c6","listingId":"0921d14c-d78f-4882-a0f7-e66a5b9cb041","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"zxkane","category":"autonomous-dev-team","install_from":"skills.sh"},"createdAt":"2026-04-19T00:40:45.926Z"}],"sources":[{"listingId":"0921d14c-d78f-4882-a0f7-e66a5b9cb041","source":"github","sourceId":"zxkane/autonomous-dev-team/autonomous-dispatcher","sourceUrl":"https://github.com/zxkane/autonomous-dev-team/tree/main/skills/autonomous-dispatcher","isPrimary":false,"firstSeenAt":"2026-04-19T00:40:45.926Z","lastSeenAt":"2026-04-22T13:03:20.438Z"}],"details":{"listingId":"0921d14c-d78f-4882-a0f7-e66a5b9cb041","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"zxkane","slug":"autonomous-dispatcher","github":{"repo":"zxkane/autonomous-dev-team","stars":15,"topics":["agent-skills","ai-agents","ai-code-review","autonomous-coding","autonomous-dev-team","ci-cd","claude-code","claude-code-hooks","code-review-automation","codex-cli","coding-agents","devops-automation","github-automation","github-issues","kiro-cli","llm-agents","openclaw","pull-request-automation","tdd","template-project"],"license":null,"html_url":"https://github.com/zxkane/autonomous-dev-team","pushed_at":"2026-04-20T15:45:13Z","description":"Turns GitHub issues into merged PRs with zero human intervention. Powered by OpenClaw, supports Claude Code, Codex CLI, and Kiro CLI.","skill_md_sha":"7bbb391927d9fa4ca0c88f7eab6133852c6448ff","skill_md_path":"skills/autonomous-dispatcher/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/zxkane/autonomous-dev-team/tree/main/skills/autonomous-dispatcher"},"layout":"multi","source":"github","category":"autonomous-dev-team","frontmatter":{"name":"autonomous-dispatcher","description":"This skill should be used when dispatching autonomous development or review tasks from GitHub issues. Covers scanning for new issues with the 'autonomous' label, dispatching dev-new/dev-resume/review processes, dependency checking, retry counting, stale process detection, and concurrency limiting. Use when asked to \"run the dispatcher\", \"scan for pending issues\", \"dispatch autonomous tasks\", \"check stale agents\", or \"set up the dispatch cron\"."},"skills_sh_url":"https://skills.sh/zxkane/autonomous-dev-team/autonomous-dispatcher"},"updatedAt":"2026-04-22T13:03:20.438Z"}}