Epic Cockpit Guide
Run multi-issue epics from Claude Code without polling GitHub. The cockpit watches every issue in your epic, tells you the moment one needs you, assembles everything you need to decide, and acts only when you approve.
What Is the Epic Cockpit?
When you run work through Generacy, the cluster already automates the agent side: it picks up labeled issues, drives them through specification, planning, implementation, and validation, and opens pull requests.
What it can't automate away is your side of the workflow. Agents pause at gates โ points where they need a human decision: answering clarifying questions, reviewing a spec or a PR, deciding to merge. On an epic with many issues in flight, noticing which issue is waiting on you means refreshing the GitHub UI across all of them.
The Epic Cockpit replaces that polling treadmill with a set of /cockpit:* commands in Claude Code:
- It watches for you. One watcher covers every issue in the epic, across every repository the epic touches, and notifies you on each state change.
- It pre-assembles every decision. Drafted clarification answers, a code review summary, merge readiness โ each gate collapses to a single approval.
- You keep the judgment. The cockpit automates the legwork; answers, review verdicts, and scope decisions are always yours.
Prerequisites
On a Generacy cluster: nothing to set up. Cluster setup installs the
cockpit plugin automatically, so /cockpit:* commands resolve in any fresh
Claude Code session. If you haven't launched a cluster yet, start with the Onboarding Guide.
Standalone (outside a cluster), you need three things:
-
The cockpit plugin. Add the Generacy marketplace to your Claude Code settings, then
install the
cockpitplugin:text{ "extraKnownMarketplaces": ["generacy-ai/agency"] } -
The
generacyCLI on yourPATH:bashnpm install -g @generacy-ai/generacy -
The GitHub CLI, authenticated:
gh auth login
๐ก Tip
gh, the repositories from the epic itself.
Filing an Epic
The cockpit has no config files or manifests to maintain โ the epic issue itself is the source of truth. File a GitHub issue
whose body lists the child issues as task-list items, grouped under ### phase headings:
## Overview
Ship the new billing flow.
### P1 โ Backend
- [ ] acme/api#101 โ Billing service skeleton
- [ ] acme/api#102 โ Stripe webhook handler
### P2 โ Frontend
- [ ] acme/web#55 โ Checkout page
- [ ] acme/web#56 โ Billing settings panel -
Each
- [ ] owner/repo#Nline is a child issue. Children can live in different repositories โ the cockpit watches them all. -
Each
###heading is a phase you can queue as a unit. -
The body is re-read on every poll, so issues you add mid-epic โ say, a
### Bugssection appended after manual testing โ join the watch automatically.
๐ก Tip
The Loop at a Glance
A phase of an epic flows through the cockpit like this:
- Queue โ
/cockpit:queuehands a phase's issues to the cluster. - Watch โ
/cockpit:watchnotifies you as issues change state, suggesting the next command each time. - Clarify โ when an agent asks questions,
/cockpit:clarifydrafts grounded answers for your approval. - Review โ when a spec, plan, or pull request is ready,
/cockpit:reviewassembles it for your verdict. - Merge โ when validation completes and checks are green,
/cockpit:mergelands it. - Repeat for the next phase โ or let
/cockpit:autodrive the loop.
At any point, /cockpit:status <epic-ref> prints a one-shot snapshot
of every child issue: its phase, current state, and pull request with a checks rollup.
Epic refs and issue refs can be given as a bare number (in the current repo), owner/repo#N, or a full GitHub URL.
Queue a Phase
/cockpit:queue acme/planning#42 P1
Queueing is the "go" trigger: it assigns the phase's issues to the
cluster account and applies the workflow label (default process:speckit-feature) so the cluster picks them up. The command always
shows you a preview โ exactly which issues will be queued โ and asks for confirmation
before doing anything.
Use --label to queue with a different workflow (for example a bugfix
pass over a ### Bugs phase), and --issue to queue a single
issue instead of a whole phase.
Watch for Transitions
/cockpit:watch acme/planning#42 Watch is a pure sensor: it polls the epic's issues (default every 30 seconds, batched per repository to respect rate limits) and never changes anything on GitHub. Each real state transition becomes one notification in your session, with the suggested next command:
[cockpit] acme/api#101 phase:implement โ waiting-for:implementation-review ยท suggested: /cockpit:review 101 --gate implementation-review The watcher reports every actionable or terminal state โ including agent errors and failures, with the error comment attached. Silence is never mistaken for success. What you'll see, and what to do about it:
| State | Meaning | Your move |
|---|---|---|
waiting-for:clarification | Agent has questions | /cockpit:clarify |
waiting-for:spec-review (also plan / tasks) | Artifact ready for review | /cockpit:review --gate spec-review |
waiting-for:implementation-review | Pull request ready for review | /cockpit:review --gate implementation-review |
waiting-for:manual-validation | Needs hands-on testing | Test it, then advance the gate |
completed:validate | Done; merge candidate | /cockpit:merge |
agent:error / failed:* | Worker hit a problem | Read the attached error; requeue or fix |
waiting-for:address-pr-feedback | Agent is handling your review feedback | Nothing โ informational |
The watcher also emits phase-complete when every issue in a phase has
merged ("all P1 issues merged โ queue P2?") and epic-complete
when the whole epic is done.
Answer Clarifications
/cockpit:clarify acme/api#101 When an agent pauses with questions, answering them well means digging back through the spec, the plan, and the code. Clarify does that digging for you:
- It fetches the agent's questions plus the relevant spec, plan, and code.
- It drafts an answer per question, grounded in that context โ each one presented with the question, the options the agent posted, a recommendation, and the reasoning behind it.
- You approve the whole batch, edit individual answers, or skip โ one decision for the batch.
- On approval it posts a single comment and advances the gate; the agent resumes on the cluster's next poll.
Agents sometimes come back with a follow-up round of questions โ the watcher will tell you, and you run clarify again.
Review Gates
/cockpit:review acme/api#101 --gate implementation-review
Review handles every human-verdict gate in the workflow. The --gate name
is one of: spec-review, clarification-review, plan-review, tasks-review, or implementation-review.
- Artifact gates (spec, clarification, plan, tasks) summarize the artifact so you can judge it without opening the branch.
- Implementation review runs a full code review of the pull request in a dedicated subagent and presents the findings with a suggested verdict.
Approve, and the gate advances โ the agent moves to its next phase. Request changes, and the cockpit posts your feedback as inline PR comments; the agent picks the threads up, addresses them, and the watcher tells you when it's ready for another look.
Merge on Green
/cockpit:merge acme/api#101
When an issue reaches completed:validate and every required check is
green, merge squash-merges the pull request. If checks are red, it
refuses โ and instead spawns a bounded fixer subagent to repair the failing checks,
then re-evaluates. Still red after the fix attempt? It stops and hands the decision
back to you.
โ ๏ธ Important
Auto Mode
/cockpit:auto acme/planning#42 The six commands above are assist mode: watch suggests, you invoke. Auto mode removes that last bit of legwork. One sentence: auto mode automates transport โ running the next command โ and leaves judgment exactly where assist mode put it.
Auto watches the epic, dispatches each transition through the same flows you'd run by hand, and interrupts you for exactly four kinds of decision:
- Clarification batches โ drafted answers, one batch approval.
- Review and validation verdicts โ approve or request changes.
- Phase-queue confirmations โ "P1 complete โ queue P2 (4 issues)?"
- Escalations โ red checks that survived a fix attempt, or agent errors: retry, skip, or stop.
Nothing outside that list ever prompts you; nothing on it ever proceeds without you. The one deliberate exception to "every action gates": a validated issue with green checks merges without asking, because your verdict already happened at implementation review โ validation plus green checks is mechanical.
Every action auto takes is recorded as a one-line ledger entry (issue ยท transition ยท
action ยท outcome), printed in the session and appended to a run file under .generacy/cockpit/auto-runs/ โ a complete audit trail of the run. The
loop exits with a summary when the epic completes.
No epic? Use a tracking issue
Auto doesn't require a formal phased epic. Point it at any issue whose body carries task-list refs, or have it file one for you:
/cockpit:auto --tracking acme/api#120 # drive an existing tracking issue
/cockpit:auto --new "Payment bugs" # file a fresh tracking issue, then drive it Because the scope lives on the tracking issue rather than in your session, a restarted session picks up exactly where the last one left off.
Safety Guarantees
- Merge never fires on red checks. No exceptions, no override flag.
- Every gate prompts. There is no per-gate auto-approve and no "full auto" โ judgment is never delegated.
- Cockpit comments are marked. Every comment the cockpit posts carries an HTML marker, so you can always audit what was automated versus written by hand.
- Mutations confirm first. Queue previews its issue set before acting; advance refuses if the issue's active gate isn't the one you named.
- Actions re-check live state. Every actuator re-fetches the issue's current state immediately before acting, so a stale notification can't trigger the wrong action.
Configuration
None required. Two optional overrides live in a cockpit: block in .generacy/config.yaml:
cockpit:
owner: alice # GitHub owner; defaults to your gh login
assignee: some-bot # queue target; defaults to your gh login
Per-run knobs are flags instead: --interval on watch (default 30s), --label and --assignee on queue.
Quick Reference
| Command | Does |
|---|---|
/cockpit:status <epic> | Snapshot of every child: phase, state, PR + checks |
/cockpit:queue <epic> <phase> | Preview, confirm, and hand a phase to the cluster |
/cockpit:watch <epic> | Notify on every state transition, with next step |
/cockpit:clarify <issue> | Draft grounded answers; approve, post, advance |
/cockpit:review <issue> --gate <g> | Review an artifact or PR; approve or request changes |
/cockpit:merge <issue> | Squash-merge on green; fix or escalate on red |
/cockpit:auto <epic> | Drive the whole loop; you decide only at the gates |
Every command wraps a generacy cockpit CLI verb you can also run directly
in a terminal โ generacy cockpit --help is the canonical reference.
Troubleshooting
| Problem | Solution |
|---|---|
generacy CLI not found |
In a cluster session it's already installed โ add it to your PATH: export PATH="/shared-packages/node_modules/.bin:$PATH".
Standalone: npm install -g @generacy-ai/generacy.
|
| Authentication failed |
The cockpit uses gh for all GitHub access โ run gh auth login and retry.
|
| "No parseable refs" on the epic |
The epic body doesn't match the expected format. Check that children are - [ ] owner/repo#N task-list lines under ###
headings โ see Filing an Epic. The cockpit fails loud rather than guessing.
|
| Advance refused ("active gate differs") |
The issue has moved on since you last looked. Run /cockpit:status to see its current gate and act on that instead.
|
| Watcher exited |
Long-running sessions can time out the watch process; this is expected. Run /cockpit:watch again โ auto mode re-arms itself.
|