Trigger layer
What calls chit and when. Triggers live outside manifests; chit does not ship a scheduler.
chit is a runtime. Something else decides when to call it. That something is the trigger: a Claude Code workflow, a custom command, a prompt, or a human typing a tool call. The trigger owns "when" and "what goal"; chit owns "how" and "what happened."
Triggers live outside manifests by design. chit does not ship a scheduler, cron, SaaS automations, or a dynamic router. If you want a Monday-morning batch, the cron job is yours; chit is the thing the cron job calls.
Practical flows
Goal to reviewed plan
The most common trigger path for multi-step work:
- The trigger calls
chit_orchestratewith a goal. chit runs a read-only planner, drafts a sequential plan, and returns the normalized plan plus anapproval_hash. Nothing is created yet. - A human reviews the plan, base, and manifest bindings, then calls
chit_plan_startwithconfirm:trueand the hash. chit launches the first step. chit_plan_driveadvances the plan until the next gate. It waits while a step converges, reconciles when it finishes, and launches the next runnable step. It never applies.- When a step reaches
review_ready, the human reviews the diff and callschit_plan_advancewithapply.confirm:trueto commit it into the integration branch. (Withoutconfirm, the apply is a dry run.) Thenchit_plan_driveagain for the next step. - Repeat until every step is applied or the human cancels.
The two human gates are plan-start approval and each step's apply. Everything between is mechanical progression. See the MCP plan tools for the full reference.
Single run
A trigger that needs one task, not a sequence:
- Call
chit_startwith a manifest (or recipe), a task, a scope, and a worktree ascwd. - Advance with
chit_nextper iteration (foreground) or let it converge unattended (background withmode: "background"). - Inspect with
chit_status/chit_trace; cancel withchit_cancel.
This is the path for well-scoped, self-contained slices. See self-hosting for the loop in practice.
Independent parallel work
When tasks do not depend on each other's diffs, use a batch:
- Call
chit_batch_startwith a task graph. It is approval-gated the same way as plans: dry-run first, then confirm with the hash. chit_batch_advancereconciles finished runs and launches the next wave.- The deliverable is a set of reviewable worktree branches. Merging is yours.
See the MCP batch tools for the full reference.
What can be a trigger
Anything that can call an MCP tool or the CLI. Common examples:
- A Claude Code conversation. The human types a goal; the chat calls
chit_orchestrateand walks the plan flow. This is the primary path today. - A Claude Code custom command or prompt. A
.claude/commands/file or a prompt template that calls chit tools with a canned goal or recipe. - A Claude Code workflow or skill. A skill that composes chit tools into a higher-level operation (the supervised convergence loop is one).
- A shell script or CI step.
chit convergeorchit runfrom a terminal, wrapped in whatever scheduler you already have. - A human at a terminal.
chit_startover MCP, orchit convergefrom the CLI.
chit does not care which of these called it. The manifest, the approval hash, and the audit trail are the same regardless of trigger.
What chit does not do
chit is the declared runtime underneath. It does not:
- Schedule or poll. No cron, no queue, no webhook listener.
- Route dynamically. Manifests are static DAGs; iteration lives in an orchestrator on top.
- Auto-approve. Every gate (plan start, step apply, batch start) requires a human or an explicit
confirm:true. - Ship trigger infrastructure. If you need a trigger, you build or choose one; chit is the thing it calls.