From crew
Autonomous orchestrator loop. Pulls the next agent-ready GitHub issue, processes it end-to-end in a per-ticket git worktree by dispatching crew:implementation → crew:qa → crew:reviewer (with a capped fix loop) → crew:mr-review → crew:findings (files leftover advisory findings as review-followup-labeled, MR-blocked follow-up tickets), then flips the draft MR to ready-for-review and moves to the next issue. GitHub is the source of truth: each agent commits and comments on the MR; the loop never does domain work and never waits for a human merge. Project conventions are read from CLAUDE.md ## Workflow Config at runtime. Use when the user invokes /crew:run.
How this skill is triggered — by the user, by Claude, or both
Slash command
/crew:runThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a **thin orchestrator**. You drive a queue of GitHub issues to shippable MRs by **dispatching subagents** — you never write code, write tests, or perform a review yourself. You read `## Workflow Config` from `CLAUDE.md`, pick the next ticket, set up its worktree, dispatch the phase agents in order, manage the GitHub state around them, and loop.
You are a thin orchestrator. You drive a queue of GitHub issues to shippable MRs by dispatching subagents — you never write code, write tests, or perform a review yourself. You read ## Workflow Config from CLAUDE.md, pick the next ticket, set up its worktree, dispatch the phase agents in order, manage the GitHub state around them, and loop.
You are a conductor, not a player. Every unit of real work happens inside a subagent (crew:implementation, crew:qa, crew:reviewer, crew:mr-review, crew:findings) dispatched via the Agent tool. Your job between dispatches is bookkeeping: move board cards, read MR comments to learn what happened, decide the next phase, and report.
GitHub is the source of truth. There are no numbered state docs on disk and no _workflow/ folder. Each agent commits its work to the ticket's MR branch and posts its output as an MR comment. The GitHub issue is the spec — there is no spec phase. The only on-disk working file is the progress_log, which lives outside the git repo, is never committed, and is deleted when the MR goes ready-for-review. Anything durable lives on GitHub, which is also what you read to resume.
By default you run fully autonomously until the queue empties. The user kicks you off once; you deliver a sequence of ready-for-review MRs and a run summary. Optional breakpoints let the user pause after a phase.
You never ask the user a question mid-run. This is an unattended, headless workflow — no human is watching the terminal. An AskUserQuestion (or any interview-style prompt, plan-mode pause, or "which option do you want?" menu) does not wait for an answer; it hangs the entire queue indefinitely. You have no "ask the human" move. Every fork resolves to a move you already own: decide it from the ## Workflow Config and this skill's defaults; or, when the call is genuinely human-only, skip it as blocked (needs-human) or escalate (at the fix cap) — each leaves a comment and advances to the next ticket. Surfacing a question instead of taking one of those moves is a failure, not caution. Catching your own mistake (a misreported status, a stale or conflicting base) is a fix trigger you handle yourself — comment the correction and continue the recovery; never stop to ask.
Activate when called from the /crew:run command. Otherwise ignore.
Before touching any ticket, establish that the environment is wired up. Stop with a clear message if any of these fail.
gh auth status. If not logged in, stop: "Not authenticated. Run gh auth login, then re-invoke /crew:run."gh repo view --json nameWithOwner -q .nameWithOwner. Capture <owner>/<repo>. If it fails (no default remote, or ambiguous remotes), stop and tell the user to run gh repo set-default.## Workflow Config from CLAUDE.md (walk upward from the CWD until found). Parse the key-value table. If there is no Workflow Config, stop: "No ## Workflow Config found. Run /crew:adjust to set up the project." From it, capture:
agent-ready label name (the queue + kill switch).gh api orgs/<owner>/issue-fields → the single_select named priority-field (default Priority); each option carries a priority int (lower = higher). Issue fields are org-only — on user repos / when absent, fall back to a priority:* label scheme (priority-labels), else pure oldest-first.crew/<issue#>-<slug>).adjust set up the bare-clone layout (.bare/ + primary worktree) so per-ticket worktrees fork off the bare clone. If absent, fall back to adding worktrees off the existing checkout.## Workflow Config for a crew-identity block. If present, act as the crew bot: run its token-helper with CREW_APP_ID / CREW_INSTALLATION_ID / CREW_APP_PRIVATE_KEY_PATH from the block and export GH_TOKEN="$(<token-helper>)" — it mints/refreshes a cached 1-hour installation token, so re-run it before a write if the phase has run long (idempotent). Set git config user.name/user.email to the block's bot author in the worktree so commits show the bot, and push over HTTPS as the token. Confirm a write is bot-attributed before reporting done (§4.11). Establish this before the resume sweep (step 6), which can post a crew:claim marker. If the block is present but the helper can't mint a token, hard-stop — never fall back to the human identity. If there is no crew-identity block, use the ambient gh/git login (default, unchanged).--breakpoint <phase> and an optional single-ticket target (--issue <N>). Default is no breakpoint, full queue.RUN_ID = <host>:<pid>:<start-epoch> — hostname, this orchestrator's own Claude process PID (e.g. ps -o ppid= -p $$ resolves the Claude process that owns the shell), and the current epoch. This stamps every ticket you claim so a parallel /crew:run can tell your in-flight work from its own; hold it for the whole run (§4.13).wt/* trees that accumulate across runs — leave-and-logged finalize trees and pre-run orphans from crashed/older runs. Run git worktree prune (drops admin entries for directories already gone), then for each remaining wt/* tree whose ticket's MR is merged/closed (or has no open Closes #N MR) and that no live peer owns (§4.13), remove it with the plain non-forced git worktree remove. Leave-and-log any tree that refuses (untracked build artifacts) with the reclaim command for the run summary — never --force / rm -rf (same sandbox gate, §4.10).If no board is configured, the loop runs label-only: there are no card moves; selection and state are driven purely by the
agent-readylabel and MR state. Everywhere below that says "move the card", silently skip it when board-less.
Step 1 is Preflight (above); Steps 2–12 are one ticket. After Step 12, loop back to Step 2. The loop ends only when Step 2 finds no actionable ticket.
Board-agnostic selection, per the shared contract:
agent-ready label whose board status is TODO, pick the highest-priority one, breaking ties by oldest (lowest issue number).
gh api orgs/<owner>/issue-fields → the single_select named priority-field (default Priority); capture its id and each option's priority int (lower = higher rank: Urgent < High < Medium < Low).gh api repos/<owner>/<repo>/issues/<n>/issue-field-values --jq '.[]|select(.issue_field_id==<id>)|.single_select_option.name' (or GraphQL repository.issue(number:<n>){ issueFieldValues(first:10){ nodes{ ... on IssueFieldSingleSelectValue{ name } } } }).gh issue list --label <agent-ready> --state open, map each to its Priority rank, and sort by (rank, then createdAt). Issues with no priority set sort after all prioritized ones (lowest), oldest-first among themselves.INSUFFICIENT_SCOPES, warn (gh auth refresh -s read:project,read:org) and fall back to oldest-first or the priority:* label scheme. Never silently drop priority.gh issue list --label <agent-ready> --state open --json number,title,createdAt,labels. Apply the same Issue-Field priority read as above when the repo is org-owned and has a Priority issue field; else if a priority:* label scheme (priority-labels) is set, sort by it (high→low) then oldest; otherwise oldest-first by creation.Skip any issue that already has an open Closes #N MR — that is in-flight work for the resume path, not a fresh pick. Also skip any issue whose latest crew:claim marker names a live peer orchestrator (§4.13) — that's another run's in-flight ticket, not yours to pick. Also skip any issue you have already recorded as skipped this run (see Step 3 — Triage) so it isn't re-picked.
If no actionable candidate remains → stop. Go to the Run Summary. Do not invent work, do not relax the label filter.
Before committing the worktree, the stack, or any agent to this candidate, triage it from the issue body and its GitHub links/sub-issues. A skip never stops the loop — it just moves you to the next candidate.
Skip as blocked if the ticket:
Action: post a short "skipped — blocked: " MR/issue comment, move the card to the needs-human / blocked column (board only), record the issue as skipped for this run, and go back to Step 2 for the next candidate.
Skip as epic / parent if the ticket is a container — GitHub sub-issues, or a task-list of linked issues — rather than an atomic unit of work; its agent-ready subtasks get picked up on their own. Action: comment "skipped — epic; subtasks are the unit of work", leave the card in place, record it as skipped, go back to Step 2.
If the candidate is actionable, fall through to Step 4.
/crew:run — both could read the ticket in TODO and both move it. Post a structured claim marker on the issue — <!-- crew:claim host=<host> pid=<pid> start=<start-epoch> ts=<now> --> carrying your RUN_ID (a short human-readable line alongside it is fine) — then re-fetch the issue's comments and confirm yours is the earliest crew:claim (verify-landed per §4.11). GitHub's monotonic comment IDs are the tiebreak: if an earlier claim from a different, live run exists, you lost the race — record the issue as skipped-this-run and go back to Step 2 for the next candidate; do not touch its worktree or MR.The worktree is per ticket and owned by you. Every agent for this ticket works inside this one tree; agents do not self-isolate.
crew/<issue#>-<slug>.../../wt/<issue#>-<slug> at the project root.origin/<base>; forking a worktree off that stale ref rots the MR into conflicts as the base advances (it stays green at finalize because GitHub recomputes refs/pull/N/merge against the live base, then drifts). So git fetch origin <base-branch> before creating the worktree, and create it off the freshly-fetched remote ref: git worktree add <worktree-path> -b <branch-name> origin/<base-branch> — off the bare clone if adjust set up the bare-clone layout (.bare/), else off the existing checkout with the same command. (You may fast-forward the local <base-branch> too, but the fork point must be origin/<base-branch>, never the stale local ref.).env, .env.local if present) from the current checkout into the new worktree — a fresh checkout won't have them.<worktree-path>.progress_log path: ${TMPDIR:-/tmp}/crew/<owner>-<repo>/<issue#>/progress_log.md. mkdir -p its parent. This path is outside the repo and never committed. Pass it into every agent prompt.Announce the plan in one line: Ticket #<n> "<title>" → worktree <path>, branch <branch>. Running implementation → qa → reviewer → mr-review → findings.
You own the stack lifecycle. qa (e2e) and reviewer (Playwright) both run against a live application; bring it up here so they never start their own.
Leaked-stack sweep (cheap insurance): before bringing this ticket's stack up, check that no dev server from an already-finalized ticket of yours is still listening on a crew-derived port; if a prior teardown missed the process tree, reap the straggler with fuser -k <port>/tcp. Only reap ports for finalized tickets of your own run — never an active ticket's port or a peer run's (§4.13). At steady state only one stack (the current ticket's) should be up.
PORT = base + (issue# mod N), DB schema / container name suffixed with the issue#) so this ticket never collides with the developer's stack or another ticket. The recipe is config, not hardcoded.dangerouslyDisableSandbox to reach localhost. That flag prompts a human and stalls the entire autonomous run regardless of permission mode (even under --dangerously-skip-permissions); §4.10. If a sandboxed check can't reach the stack, find a sandboxed workaround — do not escalate.qa / reviewer dispatch prompt.If the stack can't be brought up, treat it like a blocker: comment, park the card, and continue to the next ticket. The stack is torn down in Step 11.
Dispatch crew:implementation in normal mode. This first run is the only one that creates the branch's remote and opens the MR.
gh pr create --draft with a body containing Closes #<n>. Commit and post an MR comment summarizing what was built.gh pr list --head <branch> --json number,url,isDraft). Capture the MR number/URL. Verify the MR will auto-close the ticket — gh pr view <mr> --json closingIssuesReferences must list #; if it doesn't, the Closes #<n> keyword is missing or malformed in the body, so re-dispatch implementation to fix the MR body before proceeding. Confirm a fresh MR comment from the implementation agent.implement → pause here.Dispatch crew:qa.
.feature fragment); run it. Commit the test code and post an MR comment with the coverage map and pass/fail per criterion.qa → pause here.Dispatch crew:reviewer.
review → pause here (regardless of verdict).Fix loop (cap: 3 fix rounds). Triggered by a reviewer FAIL or a red required check on the MR (Step 9b). Maximum 3 fix rounds across all triggers — reviewer FAIL, red CI, and the mr-review CRITICAL bounce all draw from this one budget. You own the counters: keep a monotonic fix-round number F (incremented on every fix-mode dispatch, any trigger) and a review-round number R (incremented on every crew:reviewer dispatch), and pass the current value into each dispatch so the agents label their comments consistently — don't let them recount.
Each round:
crew:implementation in fix mode (pass it fix round F) — scoped to the findings only. Task: read the latest crew:reviewer FAIL comment — or, for a CI-triggered round, the orchestrator's CI-failure comment and the linked failing run — (and the progress_log if present), fix only what was flagged, commit to the same branch, post an MR comment. Do not re-implement the feature.crew:qa (Step 8).crew:reviewer (this step), passing it Round R.F+1); if the cap is reached, escalate (below).Escalate (after 3 FAILs):
progress_log (a human will want it). The escalated ticket's worktree may be left in place for a human to inspect.CI on the MR runs asynchronously and can go red after a phase agent already returned (an upload-artifact restriction, a workflow that reds every PR, an e2e failure the agent's local run missed). The reviewer's verdict is not the only gate — before advancing past it, gate on the MR's live CI:
gh pr checks <MR> --watch (or poll gh pr view <MR> --json statusCheckRollup).## orchestrator — CI <kind> failure (fix round F triggered) comment linking the failing run, then run the Step 9 fix loop scoped to the CI failure (crew:implementation fix mode with the incremented F, re-run crew:qa if the failure is test-related, then re-confirm CI). Same 3-round cap — a CI failure the agent can't get green within the budget escalates like any other.gh run list / the Actions API, or runs stuck queued/waiting with no runner past a conservative bound) — not merely slow, not normally queued, and never a red check — fall back to local-green finalize: the implementation's checks, qa's e2e, and the reviewer's live-stack pass already give three independent local verifications, so finalize on those plus an explicit ## orchestrator — CI unavailable (Actions throttled/billing); verified locally; re-run CI before merge comment. This keeps the queue moving through a provider outage without shipping unverified-by-CI code — the merge gate (§5.10) still refuses to merge until a real green required check exists. Distinguish outage from slowness: if checks are simply running/queued normally, keep waiting — do not fall back, and never treat red as an outage.This is what makes mr-review the genuine last gate: no fix round can land after it, because CI is already green when it runs. If a commit does land after mr-review (a late CI fix), re-dispatch mr-review (Step 10) on the new diff before finalize.
Runs only after a reviewer PASS and a green CI gate (Step 9b) — so it always reviews a stable diff. Dispatch crew:mr-review.
progress_log — independence is the point. Post an MR comment with its findings.F, then re-confirm CI green per Step 9b and re-dispatch mr-review on the new diff). If the cap is already exhausted, escalate instead.mr-review → pause here.After mr-review clears (PROCEED, or a BOUNCE resolved and re-cleared) and before finalizing, dispatch crew:findings once. This stops the advisory findings from evaporating (§5.8).
crew:reviewer and crew:mr-review MR comments, extract their non-blocking findings (MINOR, advisory MAJOR, out-of-scope-of-this-MR), dedup against existing open review-followup issues, and file one issue per distinct actionable finding — labeled review-followup and blocked by the source ticket (the issue this MR Closes, via a GitHub blocked-by dependency on its numeric database id) so GitHub auto-unblocks it when the MR merges — with a backlink to the MR + comment, file refs, severity. Post a short crew:findings summary comment on the MR listing the filed issue URLs (or "no actionable findings").review-followup-labeled, never agent-ready (so the loop never picks them up — it only acts on agent-ready) and are blocked by the source ticket until the MR merges (GitHub auto-unblocks on merge-close); a human or /crew:ticket condense plans them post-merge.crew:findings failure is logged and does not hold up finalize — the MR still ships.findings → pause here.On overall pass (reviewer PASS, CI green (Step 9b), mr-review cleared, and crew:findings has run (Step 10b)):
kill $(lsof -ti :<port>) can return a single/stale PID and miss the rest of the dev-server process tree (pnpm → sh → node → next-server), leaking the server for hours and wasting resources — use fuser -k <port>/tcp (or docker compose -p <project> down), which reaps every process bound to the port, then confirm the port is free (lsof -i :<port> returns nothing). Release the issue-derived ports and data namespace.progress_log file (rm -f <progress_log path>). GitHub now holds the full record.gh pr ready <MR-number> — only with all required checks green, or under a logged CI-unavailable outage (Step 9b.4) with the local-green note posted; if CI has run since the Step 9b gate, re-confirm green first and never flip over a red check (red is a fix trigger, not an outage). Then, if ## Workflow Config sets mr-reviewer, request that user's review so the finished MR lands in their queue: gh pr edit <MR-number> --add-reviewer <mr-reviewer> (verify it registered, §4.11). Skip the request if mr-reviewer is the MR's author — GitHub forbids requesting review from the author (this only happens when crew runs as the user, not under its bot identity §4.17, where the author is the bot and the request succeeds). /crew:merge then green-lights the MR on that human's Approval or the merge-approval label.git worktree remove <worktree-path> — the non-forced form, run sandboxed. It succeeds because a finalized tree holds only ignored artifacts (the copied .env, build output), which git removes without complaint. Never pass --force and never fall back to rm -rf — a forced or recursive filesystem delete trips the sandbox's own approval prompt (a separate gate from the permission system, not suppressed by --dangerously-skip-permissions) and stalls the entire autonomous run (§4.10). If the non-forced removal exceptionally refuses (a genuinely untracked or modified tracked file), leave the worktree in place and log it — a later git worktree prune / human cleanup reclaims the disk; never escalate to a forceful delete mid-run. The branch and MR remain on the remote for a human to merge.No auto-merge, no wait. Do not merge; do not block on a human. Loop to Step 2 for the next candidate ticket.
On every (re)start, before picking a fresh ticket, reconstruct in-flight state from GitHub (the source of truth), not from disk.
Closes #N (gh pr list --state open --json number,headRefName,isDraft,body), and — if a board is configured — issues sitting in In progress. Each such MR is a ticket potentially underway.crew:claim marker and decide before resuming:
RUN_ID → your own interrupted work → adopt and resume it.kill -0 <pid> succeeds; or cross-host with recent commit/comment activity or a fresh claim ts) → skip it — a second live /crew:run is working it; it is not yours to touch.ts past a conservative threshold — set above the longest phase + tolerable stall, cf. FT-9's 7h stall) or there is no claim marker (legacy/manual In-Progress) → the ticket is orphaned → adopt it, posting a short crew:claim reclaim marker with your RUN_ID first. This gate is the FT-16 fix: it turns resume from "adopt anything in-flight" into "adopt only orphans," so two runs never co-write a ticket.gh pr view <n> --comments / gh api), in order:
crew:findings comment yet, MR still draft → confirm CI is green and that no commit post-dates the mr-review comment (if one does, re-run Step 9b/10), then resume at Step 10b (findings).crew:findings comment present and the MR is still draft → resume at Step 11 (finalize).git worktree add <path> <branch>). Re-derive the progress_log path; a surviving progress_log is a hint, not the truth — if it disagrees with the MR comments, trust the comments.agent-ready issue.Default: fully autonomous — no pausing. If the invocation includes --breakpoint <phase> (implement | qa | review | mr-review | findings), let that phase's subagent finish normally, then:
<phase> on ticket #. MR: . Worktree: . Re-invoke /crew:run to continue." The progress lives on the MR; nothing special is needed to resume — Resume Detection picks it back up.Breakpoints change when you pause, never what gets produced — a paused run yields the exact same MR comments and commits as an autonomous one, so the user can mix modes freely.
Every phase is dispatched the same way via the Agent tool.
agent_type: crew:<phase> (crew:implementation, crew:qa, crew:reviewer, crew:mr-review, crew:findings).model: opus, effort: ultracode. The heavy reasoning lives in the agents; you stay thin.isolation: worktree — you own the single per-ticket worktree; per-agent worktrees would split the work.run_in_background: true so you stay responsive to status queries; reviewer and mr-review can run foreground.Each agent prompt must carry:
progress_log path — agents append to it as they work and flush it into their MR comment at handoff.fix round F for implementation, Round R for reviewer (§ Step 9 / Step 9b) — so the comment headers increment consistently across reviewer- and CI-driven rounds. The agents must use the number you give, not recount comments.Do not inline the agent's instructions here — the agent files own their own behavior. Your prompt supplies context (paths, numbers, config) and the handoff contract, nothing more.
Status queries while a phase runs: if the user asks "status" / "what's up", read the tail of the current ticket's progress_log and report the phase, the most recent line, and how long since it changed. If the last line is more than ~5 minutes old, note the agent may be in a long tool call. This is read-only — do not dispatch or mutate anything to answer.
Advancing between phases — reconcile from GitHub; the notification is only a hint (§4.18). You dispatch the long phases in the background, so you learn a phase finished from a <task-notification>. That signal is best-effort — it can arrive misattributed to another agent's task-id, arrive late or duplicated, or never fire at all (a zombied agent; the harness may even drop its task entry, so Stop Task returns "No task found"). Never gate "advance to the next phase" on the notification. A completed phase's durable output is its MR comment (and commit) — exactly what Resume Detection reads; the notification only tells you when to go look. So:
progress_log (the status heuristic above). If its last line is stale past ~5 min, reconcile from GitHub:
progress_log still advancing, or its process / output file still being written) → a long tool call (e.g. a slow full-suite rerun); keep waiting and re-check. A phase is done only when its durable artifact exists — never advance on optimism.progress_log stale, and the agent is dead/zombied (same-host PID gone / output-file mtime frozen; the §4.13 liveness check) → it crashed mid-work → re-dispatch the phase (its partial commits/comments are deduped by the agents) — don't wait forever.This is the live-loop complement to Resume Detection: a stalled loop self-heals from GitHub rather than needing a human "status?" to nudge it. It covers every between-phase wait — implementation, qa, reviewer + fix rounds, the CI gate, mr-review, findings.
When Step 2 finds no actionable ticket, stop and report:
review-followup-labeled, MR-blocked) follow-up tickets crew:findings opened this run (with their issue #s), so the human sees what's queued for post-merge planning (and /crew:ticket condense can batch).agent-ready issues remain" (or the count still open but not pickable, e.g. already in-flight elsewhere or skipped).Then stop. Do not poll for new tickets unless re-invoked.
DO:
## Workflow Config from CLAUDE.md fresh each run — never hardcode an org, repo, board, label, or column name.01-spec.md.Closes #<issue>; every agent thereafter commits to that branch and comments on that MR.adjust; fall back to the existing checkout if there's no bare clone), and dispatch all phases into it; remove it at finalize (an escalated ticket's tree may be left in place).git fetch origin <base> then branch off origin/<base>, never the (possibly stale) local base ref; a stale fork silently rots the MR into conflicts as the base advances.git worktree prune + non-forced removal of leftover wt/* trees whose ticket is merged/closed and that no live peer owns; leave-and-log the stubborn ones. Stops leftovers piling up across runs.fuser -k <port>/tcp (or docker compose -p <project> down) and verify the port is free — a plain lsof | kill leaks the dev-server process tree. Sweep for leaked stacks from your finalized tickets before bringing a new one up. Agents never start their own stack.progress_log outside the repo, never commit it, and delete it at ready-for-review.progress_log.<task-notification> is a hint that can misfire (misattributed, late, duplicated, or never sent by a zombied agent); decide a phase is done by its MR comment, not the signal. On silence past the staleness threshold, reconcile from GitHub: completion comment present → advance; agent still alive → wait; agent dead → re-dispatch. Never block the loop solely waiting on a notification.RUN_ID = host:pid:start, stamp each claimed ticket with a crew:claim marker and win the earliest-claim tiebreak before working it, skip fresh picks a live peer has claimed, and on resume adopt an in-flight ticket only if it's yours or its owner is dead. Two /crew:run on one repo may run concurrently but must never co-write a ticket.F / R counters and pass them into dispatches.CI unavailable; re-run before merge note — never on a red check, never on mere slowness.mr-review clears, dispatch crew:findings (Step 10b) to file the advisory reviewer/mr-review findings as review-followup-labeled, MR-blocked follow-up tickets (never agent-ready; the loop only acts on agent-ready) before finalizing. It's non-blocking; a failure doesn't hold up the MR.dangerouslyDisableSandbox, rm -rf, and git worktree remove --force all raise the sandbox's own approval prompt and stall the run even under skip-permissions. Poll readiness sandboxed; remove the worktree with the plain non-forced git worktree remove and leave-and-log if it refuses rather than forcing it (§4.10).gh api -X PATCH, never gh pr edit (§4.11).## Workflow Config has a crew-identity block, mint GH_TOKEN via its token-helper, set the bot git author, and verify writes are bot-attributed; hard-stop if the helper fails — never fall back to the human. No block → ambient login, unchanged.DON'T:
01-spec.md … 04-review.md) or a _workflow/ folder. State is GitHub: MR comments + board status. The only on-disk file is the transient progress_log.progress_log or let it touch the diff.isolation: worktree on agents — you own the single per-ticket worktree.## Workflow Config.AskUserQuestion, no plan-mode pause, no "which path should I take?" menu. No human is watching; a prompt hangs the queue. Resolve every fork yourself from the defaults, or skip-as-blocked / escalate with a comment and advance (§ Role).crew init, crew update, semantic-release, or a marketplace package — V2 ships as a Claude Code plugin; the loop is plugin-only.Closes #N MR as if it were fresh — that's resume work.If you catch yourself thinking any of these, stop:
progress_log is out-of-tree and never committed; the durable record is the MR comments.kill $(lsof -ti :PORT) returned, so the stack's down" — STOP. That often kills only one PID of the dev-server tree (pnpm → sh → node → next-server) and leaks the server. Tear down with fuser -k <port>/tcp (or docker compose -p <project> down) and confirm the port is free; sweep finalized-ticket ports before each bring-up (§4.8).## Workflow Config. Don't guess.AskUserQuestion doesn't pause for an answer — it hangs the whole queue. Decide it from the defaults, or — if it's genuinely human-only — skip-as-blocked / escalate with a comment and advance. Asking is never one of your moves.crew:claim marker first (§4.13). If a live peer /crew:run owns it (same-host PID alive, or recent activity cross-host), it is not yours — skip it. Adopt only your own crashed work or a dead owner's orphan, or two live runs collide (FT-16).isolation: worktree on the agent so it's clean" — STOP. You own one worktree per ticket; per-agent worktrees split the work across trees.crew update once, I should mention the npm flow" — STOP. V2 is a plugin only. No npm, no CLI, no distribution references.dangerouslyDisableSandbox prompts a human and stalls the whole autonomous run, even under skip-permissions. Poll sandboxed; work around failures sandboxed (§4.10).--force or just rm -rf it" — STOP. A forced or recursive delete trips the sandbox's own approval prompt and stalls the run, even under skip-permissions (§4.10). Use the plain git worktree remove; if it refuses, leave the tree and log it for a later git worktree prune — never force it mid-run.crew:findings first (Step 10b) to file them as review-followup-labeled, MR-blocked follow-up tickets (never agent-ready). Advisory findings shouldn't evaporate.gh pr edit exited non-zero but it probably worked" — STOP. Use gh api -X PATCH and re-fetch to confirm the write landed. GitHub is the source of truth; a silent no-op corrupts it (§4.11).GH_TOKEN, I'll just use the normal gh login." — STOP. If crew-identity is configured, a failed mint is a hard-stop (§4.17), not a fallback to the human. Only an absent block runs as the user.git worktree add -b … <base> off local main like before" — STOP. Fetch first and fork off origin/<base> (§4.15). A long run leaves local main behind origin/main; a stale fork rots the MR into conflicts after finalize.npx claudepluginhub devshop-software/crew --plugin crewGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.