Fleet runs¶
chalk fleet splits an epic into tickets and runs them in parallel, each
in its own worktree, branch and sandbox.
chalk fleet PROJ-900 # Claude drafts a plan, you confirm, agents launch in the background
chalk status
chalk logs PROJ-901 -f
How it works¶
- The plan. Claude Code, on your machine, reads the epic through your
Jira MCP server and proposes workstreams: one ticket each, with a
title, context and checkpoints. Or you pass a plan with
--plan FILE. - Confirmation. Chalk prints the plan and asks before launching.
--yesskips the question. - Launch. For each workstream, Chalk creates the worktree and branch,
writes
specs/<TICKET>.mdfrom the plan, commits it and startschalk run --detach. A ticket whose branch already exists is skipped. - Waiting. Only
CHALK_MAX_PARALLELruns go at once. The rest wait; re-runchalk fleet PROJ-900 --yeswhen a slot frees up and the saved plan launches what is left.
Each workstream is an ordinary ticket from then on: it goes to its own pull or merge request, or to detention and office hours.
How many at once¶
CHALK_MAX_PARALLEL=auto, the default, asks Docker what it can take and
runs the smallest of:
- 8;
- half of Docker's CPUs;
- Docker's memory, less 1 GiB for everything else, divided by
CHALK_SANDBOX_MEM_MB(2048 MiB by default).
At least one runs, and 4 when Docker cannot be asked. chalk doctor
prints the number. Set a whole number to choose it yourself.
Plans from Jira¶
chalk fleet EPIC asks Claude Code on your machine to read the epic, so
your Jira MCP server must be configured and its read tools allowed for
non-interactive use. For Atlassian's server:
then sign in once from /mcp in an interactive claude session. A Jira
connector added on claude.ai is not enough: while ANTHROPIC_API_KEY or
another API credential is set, Claude Code does not load claude.ai
connectors.
Your own plan¶
To skip Jira, or to edit a plan, pass your own:
{"workstreams": [
{"ticket": "PROJ-901", "title": "Add limiter middleware",
"context": "What and why, files involved",
"checkpoints": ["Token bucket with tests", "Wire into router"]}
]}
Every workstream needs a ticket like PROJ-901, a title and at least
one checkpoint; context is optional. The plan is saved as
~/.local/state/chalk/<repo>/plans/<EPIC>.json, so re-running
chalk fleet PROJ-900 --yes launches anything that was waiting for a free
slot, without asking Claude again.