AgentMachinist · Onboarding
AgentMachinist turns your GitHub issues into reviewed, tested pull requests — built by the coding agent you already use, on your own Mac, with you signing off at every step that matters.
amber = you act blue = the machine acts
Coding agents are fast, but speed without checkpoints is how you end up with code you don't understand in a repo you no longer trust. AgentMachinist's answer is simple: the expensive machine work only ever happens between two cheap human decisions.
Gate 1 works because a plan is much easier to judge than code. The spec is a short Markdown document in a draft PR: what will be built, which files change, how it will be tested. If it's wrong, you close the PR and sharpen the issue — no code was written, nothing was wasted.
Everything runs on your Mac using the logins you already have — your GitHub CLI session and your coding agent's own account. There are no API keys to create or store.
Every task runs in its own disposable workshop (a git worktree), away from whatever you're editing. Your checkout, including uncommitted work, stays exactly as you left it.
While writing the spec, the agent can read your code but can't change a file. Edit rights only switch on after you approve — the gates exist in the process itself, not just in policy.
After implementing, your test command runs. If it fails, nothing is pushed and the PR stays draft — you get the failing workshop kept on disk to inspect.
Specs are commits, approvals are labels, progress is PR state. There's no hidden database — you can audit every decision in your repo's history.
Claude Code is the default, but OpenCode, PI, and Codex plug into the same pipeline through one config line.
You need git, the GitHub CLI signed in (gh auth status), uv, and at least one coding agent CLI such as claude.
uv tool install git+https://github.com/vscarpenter/AgentMachinist
Then confirm with machinist --version.
cd ~/code/my-project
machinist init
This writes machinist.yaml, creates a spec folder, and installs two small GitHub workflows. Open machinist.yaml and set one thing before anything else: your test command.
tests:
command: npm test # or pytest, cargo test, go test ./...
Commit the new files and push. You're operational.
The system fits around your day instead of demanding it. Here's the rhythm it settles into:
Prefer to drive manually? Every stage is also a command: machinist spec 12 plans one issue, machinist run 12 implements an approved one, and machinist watch --once does a single sweep — handy under cron.
The one thing everyone gets wrong once
GitHub's green “Approve” review button is not the approval. GitHub actually blocks that button on your own PRs. To approve a spec, add the machinist:approved label — or simply comment /machinist-execute on the PR, which does it for you.
The machine plans from your issue the way a machinist works from a drawing: it can only be as precise as what you hand it. Three habits make the difference:
machinist status is your shop-floor board — it shows every issue and PR in the pipeline and what each is waiting for. Beyond that, the failure behavior is designed to be boring:
watch after fixing the cause.| Command | What it does |
|---|---|
| machinist init | Sets a repository up: config file, spec folder, GitHub workflows. |
| machinist watch | Runs the daemon: plans labeled issues, implements approved specs. --once for a single pass. |
| machinist spec <n> | Plans one issue by hand — spec, branch, draft PR. |
| machinist run <n> | Implements one approved spec by hand. |
| machinist status | Shows where every issue and PR stands in the pipeline. |
AgentMachinist is open source and was, fittingly, partly built by itself: its getting-started guide was specced, implemented, test-gated, and shipped through this exact pipeline as the project's first task. Full details live in the repository's docs/ folder.