AgentMachinist · Job card · Rev 0.8.0
One GitHub issue in, one reviewed pull request out. The machine writes the spec and the code; you approve the exact spec commit and you do the merge. Two dispatch modes, same operations.
Machinist works against a GitHub remote: specs are pushed as branches,
approvals live on pull requests. Before machinist init, commit
everything and put the repository on GitHub.
git init && git add . && git commit -m "initial commit"
gh repo create my-project --private --source . --push
gh auth status # must be authenticated
uv tool install agentmachinist
claude --version # or opencode / pi / codex on PATH
Your machine runs everything. spec_source: local
CI writes the spec; you approve from the GitHub UI. spec_source: github-actions
machinist init # dispatch mode: local
machinist doctor
git add machinist.yaml .machinist/specs/.gitkeep .gitignore
git add -p .github/workflows
git commit -m "chore: configure AgentMachinist" && git push
The wizard asks dispatch mode, harness, test gate, and notifications — each with a safe default.
machinist init --spec-source github-actions
gh secret set ANTHROPIC_API_KEY # CI spec harness needs it
machinist sync-workflows
git add -p .github/workflows && git commit && git push
Workflows must be pushed before GitHub can record a SHA-bound approval. The CI spec workflow is claude-code only.
gh issue create --title "Add CSV export" --label agent-task
Write a focused issue with acceptance criteria. The
agent-task label is the trigger — no label, no dispatch.
machinist spec 7 # or: machinist watch --once
machinist spec 7 --dry-run # read-only preview
Harness reads the issue read-only in an isolated
workshop, writes .machinist/specs/issue-7-spec.md, and the
controller pushes agent/issue-7 as a draft PR.
Nothing to run. Applying the label triggers
machinist-spec.yml, which generates the spec in CI and opens
the draft PR.
Your local watch daemon leaves labeled
issues alone — exactly one dispatcher owns this phase.
machinist approve --issue 7 # or --pr 8
Read the spec in the draft PR first. Approval binds the label plus the exact 40-character head SHA.
On the draft PR, post the comment from the PR body:
/machinist-execute <full-spec-commit-sha>
Or apply the machinist:approved label.
machinist-approve.yml records the SHA-bound marker — and
only from owners, members, or collaborators.
machinist run 7 # or leave `machinist watch` running to dispatch it
Harness implements against the approved spec, the test
gate runs (e.g. uv run pytest), the controller commits,
pushes with --force-with-lease, and flips the PR from draft
to ready. Edited the spec after approving? The approval goes stale and
execution refuses until you approve the new head.
A ready PR means implementation finished and the test gate passed.
Review it like any teammate's PR and merge it yourself — AgentMachinist
never merges. For rework: machinist amend 7 --feedback "…"
after a fresh approval.
machinist retry 7. Nothing silently reruns.