Atomic workflow recipes for Claude Code. One MCP tool call runs the whole commit → push → PR → CI-wait → merge pipeline. Either all of it happens, or it errors cleanly. No more half-finished agent loops.
Claude Code memory rules (CLAUDE.md) are advisory. The model routinely ignores procedural instructions like "commit → push → open a PR → wait for CI → merge — no confirmation at each step." anthropics/claude-code#8059 is the canonical bug that every duplicate gets merged into.
Hooks can gate a single tool call but can't force a sequence across calls. The actual fix is to move atomicity down a layer — from the agent loop (where enforcement is impossible) to the tool call (where atomicity is native).
anvil exposes a single MCP tool (ship) that runs the entire pipeline inside one tool call. The model either invokes it end-to-end or errors. No partial state, no skipped steps, no approval fatigue.
npm install -g @heznpc/anvilThen in your repo:
anvil initThis wires up .claude/settings.json to register anvil's MCP server for that project.
In a Claude Code session:
> ship this as "fix auth redirect bug"
Claude calls the ship tool. Internally it runs:
git add -Agit commit -m "<message>"git push -u origin HEAD(creates a branch if you're onmain)gh pr create --base main --title "<message>"gh pr checks --watch(blocks until CI passes)gh pr merge --squash --delete-branch
Any step failing aborts the whole pipeline. No half-shipped state.
| Arg | Required | Default | Description |
|---|---|---|---|
message |
yes | — | Commit message and PR title |
branch |
no | ship/<timestamp> |
Branch name, used when starting from the base branch |
strategy |
no | squash |
Merge strategy: squash / merge / rebase |
base |
no | main |
Base branch for the PR |
- Claude Code
gitwith an authenticated remoteghCLI (rungh auth statusto confirm)- Node 18+
- v0.2 — Pre-flight guard (
Stophook): blocks session end if a ship started but didn't complete - v0.3 — Declarative recipe format: YAML for custom pipelines beyond
ship - v0.4 — Cross-agent: compile recipes to Cursor rules + Copilot instructions
- v1.0 — Public API for third-party recipe definitions
| anvil | Claude hooks only | Slash commands | Spine-lite | |
|---|---|---|---|---|
| Atomic multi-step workflows | ✅ tool-call level | ❌ per-call gate only | ❌ single-call policy | |
| Works without user remembering to type a command | ✅ | ❌ | ||
| CI wait + merge built in | ✅ | ❌ | ❌ | |
| Cross-repo portable | ✅ |
MIT © heznpc