{"id":"0921d14c-d78f-4882-a0f7-e66a5b9cb041","shortId":"Yakr8P","kind":"skill","title":"autonomous-dispatcher","tagline":"Use when running, configuring, or troubleshooting the autonomous-dev-team dispatcher cron. Triggers on phrases like \"run the dispatcher\", \"scan for pending issues\", \"dispatch autonomous tasks\", \"set up the dispatch cron\", \"configure dispatcher.conf\", \"set up multi-project dispatc","description":"# Autonomous Dev Team Dispatcher\n\nScan GitHub issues and dispatch dev/review tasks. One cron tick is one invocation of `dispatcher-tick.sh` (single-project) or `dispatcher-multi-tick.sh` (multi-project). The full state machine, per-step semantics, and invariants live at [`docs/pipeline/` in the source repo](https://github.com/zxkane/autonomous-dev-team/tree/main/docs/pipeline) — that's the spec; this file is the agent's invocation contract.\n\n## Prerequisites\n\n- `gh` and `jq` on `PATH`.\n- For the local backend: `$PROJECT_DIR` set, pointing at the project root. Per-project `autonomous.conf` (see `scripts/autonomous.conf.example`).\n- For multi-project / remote backends: `dispatcher.conf` declaring `PROJECTS=()` (see `scripts/dispatcher.conf.example`).\n- `autonomous-dev.sh` and `autonomous-review.sh` need the execute bit (mode `100755`) — restored upstream and self-healed by `dispatcher-tick.sh` on every tick (#97).\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 only reads labels/comments and spawns local processes via the helper script — it does NOT modify source code or push to branches.\n\n## What to do\n\nWhen the cron fires (default: every 5 min), run **one** of:\n\n**Single-project deployment** (one repo per dispatcher):\n\n```bash\nbash \"$PROJECT_DIR/scripts/dispatcher-tick.sh\"\n```\n\n**Multi-project deployment** (one cron, many repos — closes #62):\n\n```bash\nDISPATCHER_CONF=\"$HOME/.autonomous/dispatcher.conf\" \\\n  bash \"$PROJECT_DIR/scripts/dispatcher-multi-tick.sh\"\n```\n\nThe multi-tick wrapper iterates `PROJECTS=()` from `dispatcher.conf` and runs one `dispatcher-tick.sh` per project. Per-project failures are logged to stderr but do not stall other projects. See `scripts/dispatcher.conf.example` for the schema.\n\nEach `PROJECTS[]` entry is one of two shapes:\n\n- **Local project** (file path): a path to a per-project `autonomous.conf` on this dispatcher box. The dispatcher and the project source live on the same machine. The wrapper sources the conf via the `AUTONOMOUS_CONF` priority-1 path (PR-4 / [INV-14]).\n- **Remote project** (inline metadata block): used when the project source lives on a remote dev box reached via AWS SSM. The dispatcher box does NOT have the project's `autonomous.conf` — everything the dispatcher needs to scan issues + dispatch is declared inline in `dispatcher.conf`. `EXECUTION_BACKEND=remote-aws-ssm` and `SSM_INSTANCE_ID` route the actual `dispatch-local.sh` invocation to the remote box via `aws ssm send-command`. (#62)\n\nEither form runs the same 5-step tick:\n\n1. **Concurrency gate** — abort if `count(in-progress + reviewing) >= MAX_CONCURRENT`.\n2. **scan-new** — find `autonomous`-only issues, check dependencies, dispatch dev-new.\n3. **scan-pending-review** — find `pending-review` issues, dispatch review.\n4. **scan-pending-dev** — find `pending-dev` issues, retry-counter check, dispatch dev-resume (or mark stalled if exhausted).\n5. **stale detection** — for `in-progress` / `reviewing` issues, probe wrapper PID, branch on alive/dead and on PR/CI/idle gates.\n\nThe logic is in [`scripts/dispatcher-tick.sh`](scripts/dispatcher-tick.sh) and the helpers in [`scripts/lib-dispatch.sh`](scripts/lib-dispatch.sh). For the spec each step is implementing, see [`docs/pipeline/dispatcher-flow.md` in the source repo](https://github.com/zxkane/autonomous-dev-team/blob/main/docs/pipeline/dispatcher-flow.md).\n\n## GitHub Authentication — App token, not user token\n\nAll `gh` calls inside the dispatcher use a GitHub App token, not the default user token. The wrappers (`autonomous-dev.sh`, `autonomous-review.sh`) handle their own auth via `lib-auth.sh`; the dispatcher tick handles its own.\n\nWhen `GH_AUTH_MODE=app`, `dispatcher-tick.sh` automatically calls `gh-app-token.sh::get_gh_app_token` after upfront validation and exports `GH_TOKEN` before any `gh` call (#91). Required vars in the project's autonomous.conf or the inline metadata block:\n\n```\nGH_AUTH_MODE=app\nDISPATCHER_APP_ID=<numeric app id>\nDISPATCHER_APP_PEM=<absolute path to PEM>\n```\n\nIf any of those are missing, or if token generation fails, the tick exits 1 with a `FATAL` message — there is no silent fallback to user auth.\n\nThe token is valid for 1 hour and scoped to the target repo only. `dispatcher-tick.sh` typically completes in well under a minute, so a single token covers the whole tick. When `GH_AUTH_MODE=token` (default) or unset, the dispatcher uses whatever `GH_TOKEN` / `gh auth login` token the caller provides.\n\n## Dispatch Helpers\n\n`dispatcher-tick.sh` calls a `dispatch()` helper for each task type, which routes to the configured execution backend. **Do NOT spawn agent processes any other way.** Each backend handles `nohup`, input validation, log-file mode 0600, and stale-wrapper kill ([INV-09](https://github.com/zxkane/autonomous-dev-team/blob/main/docs/pipeline/invariants.md#inv-09-just_dispatched-skip-rule)).\n\nBackends today:\n\n| `EXECUTION_BACKEND` | Driver | When to use |\n|---|---|---|\n| `local` (default, also when unset) | `scripts/dispatch-local.sh` | Wrapper runs on the same box as the dispatcher. |\n| `remote-aws-ssm` | `scripts/dispatch-remote-aws-ssm.sh` | Wrapper runs on a remote dev EC2 reached via AWS Systems Manager. The dispatcher sends `aws ssm send-command` to invoke `dispatch-local.sh` on the remote box. |\n\nPer-task command shapes (passed through both backends identically):\n\n| Type | Command |\n|---|---|\n| New dev task | `dispatch dev-new ISSUE_NUM` |\n| Review task | `dispatch review ISSUE_NUM` |\n| Resume dev task | `dispatch dev-resume ISSUE_NUM SESSION_ID` |\n\n## What the dispatcher MUST NOT do\n\nThe dispatcher is a label-and-spawn coordinator, not a code-changer:\n\n- MUST NOT commit or push to the target repository.\n- MUST NOT modify source files in `$PROJECT_DIR`.\n- MUST ONLY read issue labels/comments via the GitHub API, update labels via the GitHub API, and dispatch wrapper processes via the configured backend (`dispatch-local.sh` or `dispatch-remote-aws-ssm.sh`).\n\nAny code changes happen via the wrapper-spawned dev / review agents.\n\n## Environment Variables\n\nLoaded from `scripts/autonomous.conf` (sourced by `dispatcher-tick.sh` before `lib-dispatch.sh`):\n\n- `REPO`: GitHub repo in `owner/repo` format (e.g., `myorg/myproject`)\n- `REPO_OWNER`, `REPO_NAME`: split form of REPO (used for App token scoping)\n- `PROJECT_ID`: project identifier for log/PID files (default: `project`)\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- `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## 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\nFor the full state machine, see [`docs/pipeline/state-machine.md` in the source repo](https://github.com/zxkane/autonomous-dev-team/blob/main/docs/pipeline/state-machine.md).\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","amazon-q-developer","autonomous-coding","claude-code","claude-code-action"],"capabilities":["skill","source-zxkane","skill-autonomous-dispatcher","topic-agent-skills","topic-ai-agents","topic-ai-code-review","topic-amazon-q-developer","topic-autonomous-coding","topic-claude-code","topic-claude-code-action","topic-claude-code-hooks","topic-code-review-automation","topic-code-review-bots","topic-codex","topic-codex-cli"],"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.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 17 github stars · SKILL.md body (8,447 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-05-18T19:06:10.437Z","embedding":null,"createdAt":"2026-04-19T00:40:45.926Z","updatedAt":"2026-05-18T19:06:10.437Z","lastSeenAt":"2026-05-18T19:06:10.437Z","tsv":"'-09':741 '-1':343 '-14':348 '-4':346 '/5':1018 '/zxkane/autonomous-dev-team/blob/main/docs/pipeline/dispatcher-flow.md).':533 '/zxkane/autonomous-dev-team/blob/main/docs/pipeline/invariants.md#inv-09-just_dispatched-skip-rule)).':744 '/zxkane/autonomous-dev-team/blob/main/docs/pipeline/state-machine.md).':1139 '/zxkane/autonomous-dev-team/tree/main/docs/pipeline)':90 '0600':734 '0e8':1041,1082 '1':426,634,652 '100755':146 '1d76db':1061 '2':438 '3':452,984 '4':464 '5':230,423,487,971 '5319e7':1067 '62':256,417 '91':597 '97':158 'a16':1042,1083 'abort':429 'absolut':955 'activ':1056,1070 'actual':404 'add':1013 'agent':99,719,912,1054,1068 'alive/dead':501 'also':755 'announc':1034 'anyon':176 'api':883,889 'app':536,550,577,584,613,615,618,941,986,989,996,1002 'appli':187 'approv':1081,1115 'architectur':1151 'attempt':977,1122 'auth':564,575,611,646,679,692 'authent':535 'auto':1095,1100,1108 'auto-merg':1107 'automat':579 'autonom':2,12,29,44,182,340,443,1015,1025,1040,1048,1105 'autonomous-dev-team':11 'autonomous-dev.sh':138,559,1146 'autonomous-dispatch':1,1024 'autonomous-review.sh':140,560,1154 'autonomous.conf':124,317,378,604 'avoid':1160 'aw':367,396,412,770,782,788 'await':1064,1089 'b60205':1117 'backend':112,132,393,715,725,745,748,808,897 'bash':243,244,257,261,1010 'bit':144 'block':353,609 'bot':994 'box':321,364,371,410,764,799 'branch':193,220,499 'call':543,580,596,701 'caller':696 'chang':903 'changer':857 'check':446,477,1028 'checklist':1158 'close':255,1096,1101 'code':216,856,902,1150 'code-chang':855 'color':1038 'command':416,792,803,811 'commit':860 'complet':663,1063 'complex':1149 'concurr':427,437,966 'conf':259,337,341 'configur':7,36,713,896,1008 'content':166,173,1163 'contract':102 'coordin':852 'count':431 'counter':476 'cover':673 'creat':178 'cron':16,35,56,226,252,1007,1012,1017 'd4c5f9':1102 'decis':1152 'declar':134,388 'default':228,554,682,754,951,970,983,1148 'definit':1036 'depend':447 'deploy':238,250 'descript':1039 'detect':489 'dev':13,45,363,450,468,472,480,778,813,817,828,832,910,975,1074 'dev-new':449,816 'dev-resum':479,831 'dev/review':53 'develop':1057,1062,1080,1145 'dir':114,874,954 'dir/scripts/dispatcher-multi-tick.sh':263 'dir/scripts/dispatcher-tick.sh':246 'dispatc':43 'dispatch':3,15,23,28,34,47,52,162,199,242,258,320,323,370,381,386,448,462,478,546,568,614,617,686,698,703,767,786,815,823,830,840,845,891,985,993,995,1016,1026,1032 'dispatch-local.sh':405,795,898 'dispatch-remote-aws-ssm.sh':900 'dispatcher-multi-tick.sh':67 'dispatcher-tick.sh':62,154,276,578,661,700,920 'dispatcher.conf':37,133,272,391 'docs/pipeline':83 'docs/pipeline/dispatcher-flow.md':526 'docs/pipeline/state-machine.md':1132 'driver':749 'e.g':929 'e99695':1075 'ec2':779 'either':418 'ensur':180 'entri':300 'environ':913 'everi':156,229 'everyth':379 'exceed':1119 'execut':143,392,714,747 'exhaust':486 'exit':633 'export':590 'fail':630,1077 'failur':282 'fallback':643 'fatal':637 'fbca04':1053 'file':96,308,732,871,950,1006 'find':442,457,469 'fire':227 'form':419,936 'format':928 'full':72,1128 'gate':428,505 'generat':629 'get':582 'gh':104,542,574,583,591,595,610,678,689,691 'gh-app-token.sh':581 'github':49,164,192,534,549,882,888,924,988,1001,1029 'github.com':89,532,743,1138 'github.com/zxkane/autonomous-dev-team/blob/main/docs/pipeline/dispatcher-flow.md).':531 'github.com/zxkane/autonomous-dev-team/blob/main/docs/pipeline/invariants.md#inv-09-just_dispatched-skip-rule)).':742 'github.com/zxkane/autonomous-dev-team/blob/main/docs/pipeline/state-machine.md).':1137 'github.com/zxkane/autonomous-dev-team/tree/main/docs/pipeline)':88 'handl':561,570,726 'happen':904 'heal':152 'helper':209,514,699,704 'home/.autonomous/dispatcher.conf':260 'hour':653 'id':401,616,837,945,987,990 'ident':809 'identifi':947 'implement':524 'in-progress':432,491,1050 'inlin':351,389,607 'input':168,728 'insid':544 'instanc':400 'inv':347,740 'invari':80 'investig':1125 'invoc':60,101,406 'invok':794 'isol':1020 'issu':27,50,165,172,179,385,445,461,473,495,819,825,834,878,980,1030,1043,1118 'iter':269 'jq':106 'key':1004 'kill':739 'label':183,849,885,1035,1037 'label-and-spawn':848 'labels/comments':202,879 'lib-auth.sh':566 'lib-dispatch.sh':922 'like':20 'live':81,328,359 'load':915 'local':111,205,306,753,963 'log':284,731 'log-fil':730 'log/pid':949 'logic':507 'login':693 'machin':74,332,964,1130 'maintain':190 'manag':784 'mani':253 'manual':1090,1114,1124 'mark':483,979 'max':436,965,967,972,974,1120 'merg':1087,1091,1109 'messag':638,1021 'metadata':352,608 'min':231 'minut':668 'miss':625 'mode':145,576,612,680,733 'model':1140,1143,1156 'modifi':214,869 'multi':41,69,129,248,266 'multi-project':40,68,128,247 'multi-tick':265 'must':841,858,867,875 'myorg/myproject':930 'name':934,1014 'need':141,382,1078 'new':441,451,812,818 'no-auto-clos':1093,1098 'nohup':727 'note':160 'num':820,826,835 'one':55,59,233,239,251,275,302 'openclaw':1009,1011 'opus':1147,1161 'organiz':196 'owner':932 'owner/repo':927 'parallel':968 'pass':805,1085,1112 'path':108,309,311,344,956,998 'pem':619,997,1005 'pend':26,455,459,467,471,1059,1073 'pending-dev':470,1072 'pending-review':458,1058 'per':76,122,241,277,280,315,801 'per-project':121,279,314 'per-step':75 'per-task':800 'phrase':19 'pid':498 'pipelin':1049 'point':116 'polici':197 'pr':345,1086 'pr/ci/idle':504 'prerequisit':103 'present':1097 'prioriti':342 'privat':1003 'probe':496 'process':163,206,720,893,1046 'progress':434,493,1052 'project':42,65,70,113,119,123,130,135,237,245,249,262,270,278,281,292,299,307,316,326,350,357,376,602,873,944,946,952,953,959 'provid':697 'public':170 'push':218,862 'quota':1162 'rational':1144 'reach':365,780 'read':201,877 'remot':131,349,362,395,409,769,777,798 'remote-aws-ssm':394,768 'repo':87,240,254,530,659,923,925,931,933,938,1136 'repositori':171,866 'requir':598,1113,1123 'restor':147 'resum':481,827,833 'retri':475,973,976,1121 'retry-count':474 'review':435,456,460,463,494,821,824,911,1060,1065,1066,1071,1076,1084,1111,1153 'root':120,960 'rout':402,710 'ruleset':194 'run':6,21,232,274,420,760,774,1022 'scan':24,48,384,440,454,466 'scan-new':439 'scan-pending-dev':465 'scan-pending-review':453 'schema':297 'scope':655,943 'script':210 'scripts/autonomous.conf':917 'scripts/autonomous.conf.example':126 'scripts/dispatch-local.sh':758 'scripts/dispatch-remote-aws-ssm.sh':772 'scripts/dispatcher-tick.sh':510,511 'scripts/dispatcher.conf.example':137,294 'scripts/lib-dispatch.sh':516,517 'secur':159 'see':125,136,293,525,1131 'self':151 'self-heal':150 'semant':78 'send':415,787,791 'send-command':414,790 'session':836,1019 'set':31,38,115 'shape':305,804 'silent':642 'singl':64,236,671 'single-project':63,235 'skill':1027 'skill-autonomous-dispatcher' 'skip':1106 'sonnet':1155,1157 'sourc':86,215,327,335,358,529,870,918,1135 'source-zxkane' 'spawn':204,718,851,909 'spec':94,520 'split':935 'ssm':368,397,399,413,771,789 'stale':488,737 'stale-wrapp':736 'stall':290,484,982,1116 'state':73,1129 'stderr':286 'step':77,424,522 'strategi':1141 'system':783 'target':658,865 'task':30,54,707,802,814,822,829,969,1033,1142 'team':14,46 'tick':57,157,267,425,569,632,676 'today':746 'token':537,540,551,556,585,592,628,648,672,681,690,694,942 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-code-review' 'topic-amazon-q-developer' 'topic-autonomous-coding' 'topic-claude-code' 'topic-claude-code-action' 'topic-claude-code-hooks' 'topic-code-review-automation' 'topic-code-review-bots' 'topic-codex' 'topic-codex-cli' 'trigger':17 'troubleshoot':9 'trust':189 'two':304 'type':708,810 'typic':662 'unset':684,757 'untrust':175 'updat':884 'upfront':587 'upstream':148 'use':4,191,354,547,687,752,939,1103 'user':539,555,645 'valid':588,650,729 'var':599 'variabl':914 'verif':1159 'via':207,338,366,411,565,781,880,886,894,905 'way':723 'well':665 'whatev':688 'whole':675 'wrapper':268,334,497,558,738,759,773,892,908 'wrapper-spawn':907","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-05-18T19:06:10.437Z"},{"listingId":"0921d14c-d78f-4882-a0f7-e66a5b9cb041","source":"skills_sh","sourceId":"zxkane/autonomous-dev-team/autonomous-dispatcher","sourceUrl":"https://skills.sh/zxkane/autonomous-dev-team/autonomous-dispatcher","isPrimary":true,"firstSeenAt":"2026-05-07T20:45:53.085Z","lastSeenAt":"2026-05-07T22:43:39.419Z"}],"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":17,"topics":["agent-skills","ai-agents","ai-code-review","amazon-q-developer","autonomous-coding","claude-code","claude-code-action","claude-code-hooks","code-review-automation","code-review-bots","codex","codex-cli","coding-agents","github-automation","github-issues","kiro-cli","llm-agents","openclaw","pull-request-automation","tdd"],"license":null,"html_url":"https://github.com/zxkane/autonomous-dev-team","pushed_at":"2026-05-18T16:25:24Z","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":"6dc0204738a78ccb6d3c602178014f9da0f0b84f","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":"Use when running, configuring, or troubleshooting the autonomous-dev-team dispatcher cron. Triggers on phrases like \"run the dispatcher\", \"scan for pending issues\", \"dispatch autonomous tasks\", \"set up the dispatch cron\", \"configure dispatcher.conf\", \"set up multi-project dispatcher\", \"dispatch to a remote dev box via SSM\", \"EXECUTION_BACKEND=remote-aws-ssm\", \"stale agent detection\", or working on dispatcher-tick.sh / dispatcher-multi-tick.sh / dispatch-local.sh / dispatch-remote-aws-ssm.sh. Covers per-project tick (5 steps: concurrency, scan-new, scan-pending-review, scan-pending-dev, stale detection), the multi-project outer loop, and pluggable local-vs-remote-AWS-SSM execution backends."},"skills_sh_url":"https://skills.sh/zxkane/autonomous-dev-team/autonomous-dispatcher"},"updatedAt":"2026-05-18T19:06:10.437Z"}}