Cookbook
This cookbook is written for AI agents (Claude Code and any coding agent) driving cckit — and for the humans steering them. Each recipe gives you three things:
- The prompt — plain-intent text you hand the agent. You describe the goal in your own words; the agent triggers cckit for you. You don’t name the commands — that’s the point.
- What cckit does — the commands cckit runs under the hood, shown so you can see what happened. You rarely type these yourself.
- Configure — any one-time setup the recipe assumes.
cckit is built to be agent-operable: every verb has a machine-readable mode (cckit <verb> --llm) and the repo ships an AGENTS.md contract, so an agent reasons over structured data instead of scraping human output. Point your agent at AGENTS.md once and it knows the grammar.
Prime your agent once (copy-paste):
Read AGENTS.md and cckit.config.json in this repo.
From now on, drive the whole work lifecycle through cckit — read the board and repo state as data,act one step at a time, and resolve everything from cckit.config.json.
You don't need me to name the commands; follow the AGENTS.md contract.Configure cckit in a repo (one-time)
Section titled “Configure cckit in a repo (one-time)”Configure. cckit needs git, gh (authenticated), and jq. It reads everything from cckit.config.json, which init scaffolds.
Prompt:
Set up cckit in this repository and confirm it's ready to use.
Scaffold its config and project setup, and check that my GitHub access is working.
Then show me what it detected about the stack so I can verify it looks right.What cckit does:
cckit init # scaffold cckit.config.json + .claude/cckit doctor # preflight: deps + gh authcckit scan --llm # verify detected stack + kit state (JSON)Ship one issue end-to-end
Section titled “Ship one issue end-to-end”The core lifecycle: isolated worktree → PR → close → clean up. Each step is one verb, correct by construction — the agent runs them in order and does not improvise branch or PR plumbing.
Prompt:
Check the board and pick the next issue that's ready.
Take it all the way to a merged PR — work it on its own isolated branch, keep the change focused onthat issue, and open the pull request.
When it's merged, clean up and tell me the PR link.What cckit does:
cckit next # find the next unblocked issue + its start commandcckit start <issue> # worktree + branch, board → In Progress# …agent makes the change in the new worktree…cckit pr <issue> "<summary>" # commit, push, open the PR, board → In Reviewcckit close <issue> "<summary>" # close the issue, board → Donecckit gc --prune --yes # remove the merged branch + worktreecckit sync --llm at any point gives the agent the board state and what’s unblocked.
Plan and run a multi-part effort
Section titled “Plan and run a multi-part effort”An effort is a parent issue plus native sub-issues — use it when one goal decomposes into several tasks. The parent issue is the plan, so the agent reads it instead of a separate doc.
Prompt:
This work is too big for one PR — turn it into a tracked effort.
Break it into a sub-task for each independent piece, and size the work for me first.
Then build the pieces (in parallel where they don't touch the same files), and open a single PR forthe whole effort once they're all done.What cckit does:
cckit effort plan --llm # session-fit plan over open efforts (data)cckit effort new "Auth rework" # parent issue + native sub-issues, all on the boardcckit effort start <N> # integration branch effort/<N> + worktree# …build sub-issues on the effort branch (sequential) or in worktrees (parallel)…cckit effort pr <N> # ONE PR: effort/<N> → base branchcckit effort close <N> # squash-merge, close parent + all subs, garbage-collectSee Efforts, waves & worktrees for how an effort breaks into waves.
Fan out a wave with cckit wave
Section titled “Fan out a wave with cckit wave”For a whole wave of unblocked issues at once, cckit wave writes the brief and the agent fans it out into one subagent per issue. The captain (cckit watch) gates the resulting PRs and merges the clean ones.
Prompt:
Clear the next wave of ready work.
Fan the unblocked issues out so they're worked in parallel, then gate the resulting PRs and merge theones that pass.
Advance to the next wave and keep going until the board is drained.What cckit does:
cckit wave # emit the wave-0 subagent fan-out brief# …the agent spawns one subagent per issue, each opens a PR…cckit watch --merge # gate open PRs, squash-merge the clean ones, advance the waveSteer a parallel session
Section titled “Steer a parallel session”When several sessions work on the same machine — a captain and its wave agents in one repo, or a
session in a different project — cckit msg gives them a mailbox. In a project with the kit’s
mail hook wired, delivery reaches a live session between its tool calls, not just at its next
start. A session is addressed by what it’s on: its branch (same project) or project:branch.
cckit msg send docs/site "main moved — rebase before continuing" # same project, by branchcckit msg send acme/api:main "your schema change breaks our build" # another project on this machinecckit msg send all "v0.4.0 released" # broadcast: every session herecckit msg send task/9-fix --steer "stop: wrong base branch" # steer: also blocks its next # stop and redirects itcckit msg read # read your own mail manuallycckit msg list # machine-wide unread countsDirect messages are read-once; broadcasts are project-scoped, reach each session exactly once,
and expire after 7 days. Everything lives at ~/.cckit/mail — machine-local by design, zero
setup beyond the hook.
Fan out flows in parallel / run unattended
Section titled “Fan out flows in parallel / run unattended”For several independent issues at once, the agent orchestrates parallel worktrees — always dry-run first so it (and you) can see the launch plan before anything is created.
Prompt (parallel):
Work the next few unblocked issues at the same time.
Show me the launch plan first; if it looks right, run them with at most three going at once.
Then summarize how each one turned out.Prompt (unattended / overnight):
Clear the unblocked backlog unattended, a few at a time.
Auto-pick ready issues and drive them through to merged.
Only stop and ping me on a genuine blocker — otherwise give me a summary of what merged.What cckit does:
cckit orchestrate --dry-run 46 47 48 # resolve + print the plan; create nothingcckit orchestrate --cap 3 46 47 48 # launch, at most 3 concurrent; the rest queuecckit autopilot --cap 3 # auto-pick unblocked issues and drive themAdopt an existing repo
Section titled “Adopt an existing repo”Bring cckit to a project that already has its own structure — nothing above the kit is restructured.
Prompt:
Bring cckit into this existing project without disturbing its layout.
Look at what's already here, add its config, and record the kit-shaped files the repo already has.
Then confirm everything's wired up.What cckit does:
cckit scan # detect the repo's stack + current kit statecckit init # scaffold cckit.config.json + .claude/cckit adopt # record kit-shaped files the repo already hascckit status # confirm the board + worktrees + handoff viewThe full adoption sequence is on the adoption page.
Drive cckit as pure data (headless agents)
Section titled “Drive cckit as pure data (headless agents)”For a non-interactive agent (CI bot, scheduled run), skip human output entirely and consume JSON. Every verb that reports state takes --llm.
Prompt:
You're running headless — no human watching.
Work the board through to merged on your own: read state as structured data, pick thehighest-priority unblocked issue, and drive it start to finish.
Keep token use lean when you hand context to sub-agents.What cckit does:
cckit sync --llm # board state + what's unblocked, as TOONcckit scan --llm # repo stack + kit state, as JSONcckit plan --llm # the session-fit wave plan, as TOONecho "$json" | cckit encode-context # compact uniform arrays into TOON for sub-agentsIndependent, educational project — not affiliated with or endorsed by Anthropic. Claude and Claude Code are trademarks of Anthropic PBC. Disclaimer & trademarks ·
From Mexico with love by josegtz