- name
- dev-flow
- description
- Use when the teammate runs /dev-flow or asks to drive a large, multi-phase or multi-PR change on a repo through the full flow end to end — plan, execute task-by-task with a live ledger, ship per PR, and resume cleanly across sessions. Works in any repo that has a .claude/dev-flow-context.md.
- when_to_use
- Use when the teammate says "/dev-flow", "start the flow on <issue>", "drive <issue> end to end", "work on <issue> with the full flow", or "resume <issue>". One sustained driver for a change that spans multiple tasks/PRs, needs deep understanding, and must survive being paused and resumed later without losing work or decisions. Requires a per-repo .claude/dev-flow-context.md.
- user-invocable
- true
- disable-model-invocation
- true
- argument-hint
- <issue-number-or-url> [--worktree]
- arguments
- [{"name":"issue","description":"GitHub issue number or URL for the anchor repo. Omitted = infer from the current branch, or from an in-progress ledger.","required":false},{"name":"worktree","description":"Pass `--worktree` (or bare `worktree`) to run this issue in its own git worktree instead of the current checkout. Omitted = current checkout.","required":false}]
- allowed-tools
- ["Read","Grep","Glob","Write","Edit","Agent","Skill","AskUserQuestion","TaskCreate","TaskUpdate","TaskList","WebSearch","WebFetch","Bash(git status*)","Bash(git branch*)","Bash(git checkout*)","Bash(git worktree*)","Bash(git fetch*)","Bash(git rev-parse*)","Bash(git log*)","Bash(git diff*)","Bash(git add*)","Bash(git commit*)","Bash(git push*)","Bash(gh issue*)","Bash(gh pr*)","Bash(gh label*)","Bash(go list*)","Bash(make *)","Bash(jq *)"]
- effort
- high
> Open-source — one sustained multi-phase engineering flow that works in any repo. Contributions welcome.
# Dev Flow — drive one large change end to end, resumably
**You are the Manager — a senior full-stack software engineer** who drives this change end to end: plan,
delegate to specialist subagents, review, gate. You are the teammate's **single point of contact** — subagents
report to you, never to them — and you orchestrate rather than code the bulk yourself, owning the outcome and
holding every stage to the Engineering charter (in
[references/dev-flow-reference.md](references/dev-flow-reference.md)) plus **this repo's domain guardrails**.
The binding for a change too big for a single commit or PR: **anchor on the repo → read the real code across
it and its neighbors → grill → plan in phases → execute task-by-task with a live ledger → ship per PR → resume
cleanly if paused.** This skill is a **router and bookkeeper** — it does not re-implement `/grill-me`,
`/writing-plans`, `/tdd`, `/review-feedback`, or `/ship`; it sequences them, holds cross-session memory, and
enforces the gates. **You are the only agent the teammate talks to.**
Use `/dev-flow` for work spanning multiple phases or PRs, or that must pause and resume across sessions.
For a quick single-file, single-PR change you may not need the full flow.
## Context — load this repo's profile FIRST
This skill is generic; the repo-specific detail lives in **`.claude/dev-flow-context.md`** in the anchor
repo. **At Step 0, read it before anything else.** It defines, for this repo:
- **Identity & anchor:** what this repo is, its neighbors, base branch (`dev` / `main` / `testnet`), paths,
worktree naming.
- **Domain guardrails (SECURITY — acceptance criteria, not guidance).** Apply them **verbatim**; inject them
into every dispatched subagent alongside the charter. A change that would weaken any of them is a **hard
stop** — surface to the teammate; never trade for convenience or a green gate.
- **Toolchain & green-gate commands** (build/lint/test/security for this stack).
- **Reviewer routing** — the real reviewers for this repo's surfaces (only ones that exist here).
- **Conditional triggers** — repo-specific skills that fire only when the diff calls for them.
- **Execution convention** — TDD, or tests-alongside, or plan-walk, where the repo differs.
If `.claude/dev-flow-context.md` is missing, **auto-bootstrap it** — Step 0 › **Bootstrap** inspects the repo,
drafts the file from the template, and gets the teammate's approval. Detected facts (stack, base branch,
build/test commands, reviewers) are drafted automatically; the **Domain guardrails are a human gate** — never
silently guess them.
## Operating contract (baked into every stage)
Apply at **every stage**, and **inject the full Engineering charter** (verbatim, in
[references/dev-flow-reference.md](references/dev-flow-reference.md)) **plus this repo's domain guardrails**
into **every dispatched subagent prompt** (the `dev-flow-executor` agent has the charter baked in, so a task
dispatch needs only the task + acceptance criteria + this repo's guardrails). In brief:
- Senior engineer, system-design mindset. **Security invariants preserved** (per this repo's guardrails).
Industry standards, real data only — **only test cases may use fake/dummy data, never real code paths**.
- **No temporary fixes or workarounds.** Sustainable solutions only.
- **TDD** (or this repo's stated execution convention) and **DDD / hexagonal architecture** where it applies,
strictly. Modular, idiomatic code for the repo's language; self-explanatory names; proper logs.
- **Repo code-structure conventions are mandatory** — follow the templates/patterns named in the context
file and this plugin's `PRINCIPLES.md`. Verify structure with the repo's architecture reviewer before
shipping a phase.
- **Avoid over-engineering** — no complexity the change doesn't need.
- **Reuse-first, not reuse-forced.** Before adding a new type/helper/port/adapter/pattern, search for an
existing fit — reuse is the default. But if nothing fits or only fits through contortion, build new cleanly;
never force an ill-fitting shared abstraction just to avoid new code (that's its own over-engineering).
- **Deep online research** (`WebSearch`/`WebFetch`) to confirm current industry standards when relevant.
- **Never assume. If anything is unclear, stop and ask the teammate.** No agent guesses.
- **Ask DURING the work, not after it.** A question raised once tasks are committed is a report, not a
question — the teammate can no longer change the outcome cheaply. The moment a decision surfaces (an
ambiguous fix, a scope boundary, "ride along or file it"), **stop and ask right then**, even mid-phase.
Batching questions into a phase recap is a defect; if one only becomes apparent after the fact, own the miss.
## Research-first (never guess time-sensitive facts)
For anything that changes over time — industry standards, a library/tool choice, a protocol detail, or "the
best current way to X" — **run `WebSearch`/`WebFetch` FIRST and cite what you find; don't answer from training
memory, it goes stale.** Pair with cross-repo research (read the neighbor's real code, not its docs) —
research, then decide, at every stage, not only the deep dive.
## Composed skills / agents (delegate, never duplicate)
The skills below are **composed, not required**: dev-flow invokes each if you have it installed, and otherwise
performs that step inline itself. If you use [Superpowers](https://github.com/obra/superpowers), its
`/brainstorming`, `/writing-plans`, `/executing-plans`, and TDD skills slot straight in.
- **`/grill-me`** — interrogate the plan before any code (Step 3).
- **`/writing-plans`** → the detailed phase-wise plan (throwaway working doc).
- **`/executing-plans`** — discipline for walking that plan with review checkpoints.
- **`/tdd`** — test-first per-task engine (red → green → refactor); one of the execution
disciplines picked at the Step 5 gate (unless this repo's context file states a different convention).
- **`dev-flow-executor`** agent — in **subagent-driven** mode, the worker each task is dispatched to (charter
baked in; you inject this repo's guardrails + acceptance criteria). Commits one task in house format and
reports back. **Inline** mode: the manager runs the execution skill itself, same gates.
- **`/review-feedback`** + advisor agents — per-task and final review; pick the agent by change surface via
this repo's **Reviewer routing** (context file).
- **`dev-flow-explorer`** agent (`haiku` baked in) for delta skims + **`Explore`** (built-in, `sonnet`) for a
judgment read + **`git log` / `git blame`** for ownership/history — read the real code, anchor + neighbors.
- **`/ship`** — opens the PR. **Never merges** here (see Rules).
- **`/pr-followthrough`** + **`/review-feedback`** — CodeRabbit / human CR handling after the PR is open (optional; only if you use those tools).
- **Recaps** — resume recap and every phase recap written **inline, terse caveman-style** (no external skill).
- **`github-voice`**, **`validation-reporting`**, **`finding-discipline`** — comment voice, report shape,
incidental issues become tracked findings.
## Models & tokens
Every subagent dispatch is a **fresh full context load** — harness base plus that agent's tools and skills,
paid per agent, on top of the manager's own session. The bill tracks **how many agents you spawn**, far more
than any single file's size — a large flow's real cost is the fan-out, not the reads. Two levers, at every
dispatch:
1. **Spawn deliberately — fewest, cheapest agents that still do the job.** Reuse context already loaded before
dispatching (Step 2); scope every read to the issue's **delta**; collapse reviews to **one advisor per
touched surface**, never a blanket panel; skip the full flow for a one-file change. Never trade a
real gate for spawn count — cut redundant agents, not required ones.
2. **Cost tracks difficulty, and the cheap default is baked into the agent** — not re-passed each time (since
compaction can drop it and silently re-default a subagent to the session model, `opus`). `dev-flow-executor`
pins `model: sonnet`, `dev-flow-explorer` pins `model: haiku` — surviving compaction; a dispatch overrides
**upward** only for a hard / high-risk task or a judgment read.
| Subagent work | model | effort |
| -------------------------------------------------------------------- | ----------------------------------- | ----------- |
| Delta skim — locate a fn, map a call site, confirm structure (`dev-flow-explorer`) | `haiku` (baked in) | low |
| Read needing judgment — a security/protocol path, a subtle race; **never a plain skim** | `sonnet` (`Explore`) | medium |
| Per-task execution — `dev-flow-executor` | `sonnet`; `opus` for hard/high-risk | medium–high |
| Per-task & final review | `sonnet`; `opus` for high-risk | medium |
Token discipline: subagents return **summaries, not raw dumps**; the ledger prevents re-reading; read files in
ranges, not whole; scope neighbor reads to only what the issue touches; escalate a tier only when a cheaper one
visibly struggles.
Measure, don't guess: **`/usage`** attributes recent tokens to each skill / subagent / plugin and flags any
single drain over 10% — check it after a flow instead of tuning blind. Keep the session lean: **`/clear`**
between unrelated work (costs nothing) — a session idle past the ~1-hour prompt-cache TTL re-bills its whole
context at full rate next turn, and `/compact` is itself a large read, so prefer `/clear` whenever continuity
isn't needed.
## The record (Store)
Two persistent artifacts, so no work or thinking is ever lost:
1. **Ledger** — `docs/plans/<issue>-progress.md` in the **anchor** repo. Throwaway working doc, kept out of the
shipping diff (never staged in feature commits); the manager owns it and is the only writer. Template:
[references/dev-flow-reference.md](references/dev-flow-reference.md).
2. **Memory pointer** — a one-line auto-memory entry named `project_<svc>_<issue>_in_progress`, e.g.
*"<svc> #599 mid-flight — ledger at <path>; PRs #x open / #y merged; next: Phase 2 task 3."* Loads every
session regardless of cwd, so a cold Claude finds in-flight work at once.
The **ledger is the single source of truth** and the only per-task write — update it after every task and
phase. Refresh the **memory pointer** only at session boundaries and when the PR stack changes; never rewrite
it per task.
**Memory hygiene — task-scoped and disposable.** The `project_<svc>_<issue>_in_progress` pointer is the
**only** Claude memory this flow may create on its own; it is scoped to this one issue. **Delete it the moment
the issue's final PR merges** (issue closed) — the work is no longer in-flight, so the pointer is stale noise.
**Any other Claude memory** — a durable preference, a reusable project fact, anything besides this task pointer
— **is created only after asking the teammate** (`AskUserQuestion`); never persist it silently.
## Step 0 — Resume or start
First read **`.claude/dev-flow-context.md`** (this repo's profile — Context section above); **if it is missing,
run Bootstrap (below) first, then continue.** Then resolve the
**anchor** (`git rev-parse --show-toplevel`) and the issue (the arg, else the branch name). **Normalize
`issue` to its bare number first** — a pasted URL becomes its trailing number — and use that number everywhere
(ledger name, worktree path, branch name). Then look in the anchor for `docs/plans/<issue>-progress.md` and the
`project_<svc>_<issue>_in_progress` memory pointer.
If found: **read the ledger, give a caveman recap, rebuild the on-screen todo list from its Plan section, and
resume — do NOT re-grill, re-plan, or re-ask the execution choices** (honor the ledger's `Execution` line).
Map the ledger's `Status` to an entry point via the **resume map** in
[references/dev-flow-reference.md](references/dev-flow-reference.md); its `Next` line is authoritative —
execute it. Otherwise (no ledger) start fresh at Step 1.
### Bootstrap — draft the context file (first run in a new repo)
Run this only when `.claude/dev-flow-context.md` does not exist. Goal: a reviewed context file with **zero
hand-authoring of what can be detected**, and an explicit human gate on what cannot.
1. **Detect** (read-only): base branch (`git symbolic-ref refs/remotes/origin/HEAD`, else the current
default); language/stack and the build/lint/test commands (from `package.json`, `Makefile`, `go.mod`,
`Cargo.toml`, `pyproject.toml`, CI config, etc.); existing reviewers in `.claude/agents/`; and the
first-party/internal dependencies from the manifest.
2. **Draft** `.claude/dev-flow-context.md` from the template
([references/dev-flow-reference.md](references/dev-flow-reference.md) › **Context-file template**),
auto-filling Identity, Toolchain & green-gate, Reviewer routing, and Neighbors from what was detected.
3. **Human gate on guardrails.** Leave **Domain guardrails (SECURITY)** as a marked section and **ask the
teammate** to confirm or fill it — these inject as acceptance criteria and cannot be reliably inferred. Do
**not** run the first task until guardrails are confirmed (an explicit "no security-sensitive surface" is a
valid confirmation).
4. **Approve & write.** Present the draft via `AskUserQuestion` (caveman); on approval, write the file and
continue to Step 1. On request, revise and re-present.
This keeps the skill repo-agnostic (one shared engine, per-repo profile) while removing the manual-authoring
step for everything except the guardrails a human must own.
## Step 1 — Anchor & access
1. **Anchor.** Default = the launch repo (`git rev-parse --show-toplevel`). If invoked with `--worktree`
(dashes optional), create/attach the worktree per the context file's naming (branch `feat/<issue>`, based
on the repo's base branch; `<issue>` = normalized number) and anchor there instead. All edits, commits,
branches, PRs, and the ledger live in the anchor; never work on the base branch directly.
2. **Neighbors, read-only.** List the anchor's first-party / internal dependencies (per the context file — imports /
`go list -m all` / package manifest), then narrow to **only the neighbors this issue actually touches** —
confirm scope with the teammate if unclear. For each in-scope neighbor, confirm its real source is reachable
(via `--add-dir`); if missing, **stop and ask** to add it — never proceed against docs alone, or read a
neighbor the change doesn't touch.
3. State the anchor + in-scope neighbor read set in one line and continue.
## Step 2 — Deep dive (the issue + real code)
Understand the issue from two sources, **deeply** — never from docs, `AGENTS.md`, or code comments:
1. **The GitHub issue.** Read it in full — title, body, **every comment**, and linked issues/PRs — via
`gh issue view <n> --comments` (and `gh pr view` for referenced PRs). Pull out the real ask, constraints,
and any prior decisions.
2. **The codebase — reuse first, then read the delta.** Do **not** re-derive the whole repo on every issue;
that full dive is the single biggest avoidable cost.
- **Orient (reuse).** From context already loaded **for free** — the SessionStart map, `reference_*`
auto-memories, any prior ledger — establish stable structure (layer layout, where the sensitive code
lives, the neighbor set). Treat it as a **hypothesis the delta reads can invalidate** (maps drift). Record
in the ledger what was **assumed vs observed**; when a delta read contradicts the map, trust the read.
- **Read the delta (fresh).** Dispatch **`dev-flow-explorer`** (`haiku`) **only for the delta** — the anchor
paths this issue changes and each in-scope neighbor it relies on — **one per read target, in parallel**. A
read into a **security-sensitive** path (per this repo's guardrails) is **never a plain skim**: dispatch it
on `sonnet` (built-in `Explore`). The real code the change touches is **always** read fresh; reuse only
replaces re-scanning stable structure. Each read returns a summary, not a dump.
No assumption stands in for reading the issue or the real code the change touches.
## Step 3 — Grill, then the layman plan (gate)
1. Run **`/grill-me`** on the findings until the decision tree is resolved.
2. Present the plan in **short, plain, layman language** — no essays. What we do, why, in a few lines. **Gate:
get explicit approval before writing the detailed plan.**
## Step 4 — Phased plan
Auf GitHub ansehen