
autonomous-dispatcher
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", "EXECUTIONBACKEND=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.
- Installs
- 124
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/zxkane/autonomous-dev-team --skill autonomous-dispatcher- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads autonomous-dispatcher automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Autonomous Dev Team Dispatcher
Scan 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 — that's the spec; this file is the agent's invocation contract.
Prerequisites
ghandjqonPATH.- For the local backend:
$PROJECT_DIRset, pointing at the project root. Per-projectautonomous.conf(seescripts/autonomous.conf.example). - For multi-project / remote backends:
dispatcher.confdeclaringPROJECTS=()(seescripts/dispatcher.conf.example). autonomous-dev.shandautonomous-review.shneed the execute bit (mode100755) — restored upstream and self-healed bydispatcher-tick.shon every tick (#97).
Security note: This dispatcher processes GitHub issue content as input. In public repositories, issue content is untrusted — anyone can create issues. Ensure the
autonomouslabel 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.
What to do
When the cron fires (default: every 5 min), run one of:
Single-project deployment (one repo per dispatcher):
bash "$PROJECT_DIR/scripts/dispatcher-tick.sh"
Multi-project deployment (one cron, many repos — closes #62):
DISPATCHER_CONF="$HOME/.autonomous/dispatcher.conf" \
bash "$PROJECT_DIR/scripts/dispatcher-multi-tick.sh"
The 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.
Each PROJECTS[] entry is one of two shapes:
- Local project (file path): a path to a per-project
autonomous.confon this dispatcher box. The dispatcher and the project source live on the same machine. The wrapper sources the conf via theAUTONOMOUS_CONFpriority-1 path (PR-4 / [INV-14]). - 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 indispatcher.conf.EXECUTION_BACKEND=remote-aws-ssmandSSM_INSTANCE_IDroute the actualdispatch-local.shinvocation to the remote box viaaws ssm send-command. (#62)
Either form runs the same 5-step tick:
- Concurrency gate — abort if
count(in-progress + reviewing) >= MAX_CONCURRENT. - scan-new — find
autonomous-only issues, check dependencies, dispatch dev-new. - scan-pending-review — find
pending-reviewissues, dispatch review. - scan-pending-dev — find
pending-devissues, retry-counter check, dispatch dev-resume (or mark stalled if exhausted). - stale detection — for
in-progress/reviewingissues, probe wrapper PID, branch on alive/dead and on PR/CI/idle gates.
The logic is in scripts/dispatcher-tick.sh and the helpers in scripts/lib-dispatch.sh. For the spec each step is implementing, see docs/pipeline/dispatcher-flow.md in the source repo.
GitHub Authentication — App token, not user token
All 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.
When 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:
GH_AUTH_MODE=app
DISPATCHER_APP_ID=<numeric app id>
DISPATCHER_APP_PEM=<absolute path to PEM>
If 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.
The 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 token the caller provides through the code-host's standard channel — on GitHub, GH_TOKEN or a gh auth login session; on GitLab (CODE_HOST=gitlab), GITLAB_TOKEN or a glab auth login session. The chp_*/itp_* provider seams route through whichever is present.
Dispatch Helpers
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).
Backends today:
EXECUTION_BACKEND | Driver | When to use |
|---|---|---|
local (default, also when unset) | scripts/dispatch-local.sh | Wrapper runs on the same box as the dispatcher. |
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. |
Per-task command shapes (passed through both backends identically):
| Type | Command |
|---|---|
| New dev task | dispatch dev-new ISSUE_NUM |
| Review task | dispatch review ISSUE_NUM |
| Resume dev task | dispatch dev-resume ISSUE_NUM SESSION_ID |
Lane GC Enforcement
adt-gc.sh periodically reclaims residue from dead lanes under INV-117's
registry-driven safety predicate. The built-in default remains --dry-run
on all platforms. P8 safety improvements may merge while the default flip and
production enforcement remain gated by issue #384's at-least-two-week clean
soak. Explicit ADT_GC_ENFORCE=1 or --kill requires authorized enforcement.
Inspect the effective mode and host prerequisites:
bash "$PROJECT_DIR/scripts/adt-gc.sh" --doctor
For an immediate box-wide rollback shared by the periodic timer and every
project's opportunistic --quick invocation:
source "$PROJECT_DIR/scripts/lib-lane.sh"
mkdir -p "$ADT_STATE_ROOT"
printf 'ADT_GC_ENFORCE=0\n' > "$ADT_STATE_ROOT/adt-gc.conf"
Remove the file to restore environment selection or the built-in dry-run default. A present
rollback file vetoes ADT_GC_ENFORCE=1 from the environment; explicit
--dry-run/--kill overrides both without inspecting them. Precedence is CLI
mode > persistent config veto > environment > built-in. Selected invalid values
warn and fail toward dry-run. The config is parsed as data and must contain
exactly one rollback assignment plus optional blank lines or comments.
When ADT_STATE_ROOT is unset, lib-lane.sh resolves the mode-600 host
pointer at $HOME/.local/state/adt-state-root, written atomically by
install-gc-timer.sh; this keeps the rollback on the same custom root used by
the timer and opportunistic collectors. The same lib-state-root.sh resolver
is used by local dispatcher marker reads and embedded into remote SSM liveness
checks.
What the dispatcher MUST NOT do
The dispatcher is a label-and-spawn coordinator, not a code-changer:
- MUST NOT commit or push to the target repository.
- MUST NOT modify source files in
$PROJECT_DIR. - 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.shordispatch-remote-aws-ssm.sh).
Any code changes happen via the wrapper-spawned dev / review agents.
Environment Variables
Loaded from scripts/autonomous.conf (sourced by dispatcher-tick.sh before lib-dispatch.sh):
REPO: GitHub repo inowner/repoformat (e.g.,myorg/myproject)REPO_OWNER,REPO_NAME: split form of REPO (used for App token scoping)PROJECT_ID: project identifier for log/PID files (default:project)PROJECT_DIR: absolute path to the project root on the local machineMAX_CONCURRENT: max parallel tasks (default:5)MAX_RETRIES: max dev retry attempts before marking issue asstalled(default:3)DISPATCHER_APP_ID: GitHub App ID for the dispatcher botDISPATCHER_APP_PEM: path to the GitHub App private key PEM file
Cron Configuration (OpenClaw)
openclaw cron add \
--name "Autonomous Dispatcher" \
--cron "*/5 * * * *" \
--session isolated \
--message "Run the autonomous-dispatcher skill. Check GitHub issues and dispatch tasks." \
--announce
Label Definitions
| Label | Color | Description |
|---|---|---|
autonomous | #0E8A16 | Issue should be processed by autonomous pipeline |
in-progress | #FBCA04 | Agent is actively developing |
pending-review | #1D76DB | Development complete, awaiting review |
reviewing | #5319E7 | Agent is actively reviewing |
pending-dev | #E99695 | Review failed, needs more development |
approved | #0E8A16 | Review passed. PR merged (or awaiting manual merge if no-auto-close present) |
no-auto-close | #d4c5f9 | Used with autonomous — skip auto-merge after review passes, requires manual approval |
stalled | #B60205 | Issue exceeded max retry attempts; requires manual investigation |
For the full state machine, see docs/pipeline/state-machine.md in the source repo.
Model Strategy
| Task | Model | Rationale |
|---|---|---|
Development (autonomous-dev.sh) | Opus (default) | Complex coding, architecture decisions |
Review (autonomous-review.sh) | Sonnet (--model sonnet) | Checklist verification, avoids Opus quota contention |
FAQ
What does the autonomous-dispatcher skill do?
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", "EXECUTIONBACKEND=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.
How do I install autonomous-dispatcher?
Run npx skills add https://github.com/zxkane/autonomous-dev-team --skill autonomous-dispatcher in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/autonomous-dispatcher/ (personal) or .claude/skills/autonomous-dispatcher/ (project).
Which AI agents can use autonomous-dispatcher?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is autonomous-dispatcher safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains autonomous-dispatcher?
It is published by zxkane in zxkane/autonomous-dev-team. It has 124 recorded installs.
More from zxkane/autonomous-dev-team
create-issue
zxkane/autonomous-dev-team
Use when the user asks to create a GitHub issue, file a bug, request a feature, open a tracking issue, or break a feature into multiple sub-issues. Guides interactive issue drafting with structured templates, workspace-change attachment, dependency linking, and the optional autonomous label for the automated dev pipeline.
autonomous-review
zxkane/autonomous-dev-team
Use to perform an end-to-end PR review and reach an approve/request-changes verdict — including verifying acceptance criteria, running E2E tests via browser automation, resolving merge conflicts, and (when verdict passes) merging the PR. Triggers on phrases like "review this PR", "decide whether to approve and merge", "run E2E verification", "resolve merge conflicts on PR N", or when the dispatcher hands off a PR labeled pending-review / reviewing for autonomous review. Distinct from in-flight dev-side self-review (that lives in autonomous-dev's pr-review step).
autonomous-dev
zxkane/autonomous-dev-team
Use to develop a feature or bug fix end-to-end through a TDD git-worktree workflow — interactively (developer-led) or unattended (autonomous-mode, driven by the dispatcher). Triggers on phrases like "implement issue N", "fix this bug", "add a feature", "create a worktree", "write test cases", "push and open a PR", "check CI", "address review comments", "resolve review threads", "/q review", "/codex review", "implement this autonomously", or any partial step in the design → worktree → tests → implement → verify → review → PR → CI → E2E lifecycle. Interactive mode asks for decisions; autonomous mode makes decisions per autonomous-mode.md and posts progress comments to the GitHub issue.
autonomous-common
zxkane/autonomous-dev-team
Use when setting up, troubleshooting, or modifying the shared hooks and agent-callable utility scripts that enforce the autonomous dev/review workflow. Triggers on phrases like "push to main is blocked", "block-commit-outside-worktree hook failing", "configure hooks after npx skills add", "what does check-pr-review.sh do", "set up workflow hook symlinks", or when editing files under skills/autonomous-common/. Provides the hooks the autonomous-dev / autonomous-review skills depend on, plus utility scripts (gh-as-user.sh, mark-issue-checkbox.sh, reply-to-comments.sh, resolve-threads.sh).
Popular devops & cloud skills
microsoft-foundry
microsoft/azure-skills
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure
azure-diagnostics
microsoft/azure-skills
Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.
azure-prepare
microsoft/azure-skills
Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.
azure-ai
microsoft/azure-skills
Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.
azure-deploy
microsoft/azure-skills
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.
azure-validate
microsoft/azure-skills
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.