task-pipeline-skill 0.12.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/CHANGELOG.md +477 -0
  2. package/LICENSE +47 -0
  3. package/README.md +369 -171
  4. package/cursor/rules/task-pipeline.mdc +125 -20
  5. package/package.json +8 -4
  6. package/plugins/task-pipeline/.claude-plugin/plugin.json +15 -4
  7. package/plugins/task-pipeline/commands/task-pipeline.md +20 -8
  8. package/plugins/task-pipeline/skills/task-pipeline/SKILL.md +112 -39
  9. package/plugins/task-pipeline/skills/task-pipeline/pipeline.example.json +35 -16
  10. package/plugins/task-pipeline/skills/task-pipeline/references/acceptance.md +119 -0
  11. package/plugins/task-pipeline/skills/task-pipeline/references/artifacts.md +47 -14
  12. package/plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md +108 -0
  13. package/plugins/task-pipeline/skills/task-pipeline/references/build.md +365 -0
  14. package/plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md +72 -31
  15. package/plugins/task-pipeline/skills/task-pipeline/references/conventions.md +27 -3
  16. package/plugins/task-pipeline/skills/task-pipeline/references/decomposition.md +139 -0
  17. package/plugins/task-pipeline/skills/task-pipeline/references/grill.md +78 -7
  18. package/plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md +159 -0
  19. package/plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md +100 -0
  20. package/plugins/task-pipeline/skills/task-pipeline/references/planning.md +195 -0
  21. package/plugins/task-pipeline/skills/task-pipeline/references/review.md +174 -0
  22. package/plugins/task-pipeline/skills/task-pipeline/references/spec.md +144 -0
  23. package/plugins/task-pipeline/skills/task-pipeline/references/stages.md +190 -35
  24. package/plugins/task-pipeline/skills/task-pipeline/references/tdd.md +110 -0
  25. package/plugins/task-pipeline/skills/task-pipeline/templates/README.md +5 -3
  26. package/plugins/task-pipeline/skills/task-pipeline/templates/brief.md +50 -2
  27. package/plugins/task-pipeline/skills/task-pipeline/templates/carryover.md +36 -0
package/README.md CHANGED
@@ -4,56 +4,139 @@
4
4
  [![validate](https://github.com/ssheleg/task-pipeline/actions/workflows/validate.yml/badge.svg)](https://github.com/ssheleg/task-pipeline/actions/workflows/validate.yml)
5
5
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
6
6
 
7
- Full-cycle task delivery pipeline orchestrator for **Claude Code**. One skill that
8
- runs any substantial task through an up-front **intake grill** + **9 gated stages** —
9
- built on the [superpowers](https://github.com/obra/superpowers) skills.
7
+ **A full-cycle delivery pipeline for coding agents.** One skill takes a substantial
8
+ task, interrogates it into a complete brief, then walks it through ten gated stages
9
+ and refuses to advance until each gate passes.
10
10
 
11
- ## What it does
11
+ Agents write code well and judge *when to stop asking you things* badly. A
12
+ substantial task becomes twenty interruptions, or a confident build that skipped
13
+ the tests and quietly delivered two thirds of what you asked for. `task-pipeline`
14
+ front-loads every decision into one intake conversation, then runs to the end
15
+ without checking in — and closes by accounting for every requirement, from a list
16
+ rather than from memory.
12
17
 
13
- `intake grill docs study brainstorm spec plan → subagent build → tests →
14
- lint/deploy post-deploy log check docs/wiki sync`
18
+ Built for **Claude Code**, and installable into any agent that reads skills
19
+ (Cursor, Codex, OpenCode, …). Every stage's doctrine ships **inside the skill** —
20
+ no companion plugin, nothing to resolve, nothing that breaks when a dependency is
21
+ missing.
15
22
 
16
- It **grills you first, always**: stage 0 is mandatory — a one-line task ("make me
17
- feature X") is expanded, one question at a time, into a locked brief, and the grill
18
- also sweeps stages 1→9 for anything that would stop the run later. Each stage gates
19
- the next. Every gate is typed — **auto** (the orchestrator verifies it, pass/fail)
20
- or **manual** (waits for your go). One model, confirmed before the run starts.
23
+ ---
24
+
25
+ ## The flow
26
+
27
+ ```
28
+ intake grill → docs study → brainstorm + decompose → spec → plan → subagent build
29
+ → tests → lint/deploy → post-deploy log check → docs/wiki sync → acceptance
30
+ ```
31
+
32
+ ```mermaid
33
+ flowchart TD
34
+ S0["0 · Harvest + intake grill<br/>brief · REQ table · source ledger"]
35
+ S1["1 · Docs study"]
36
+ S2["2 · Brainstorm + decompose"]
37
+ S3["3 · Spec — UX track first, if UI"]
38
+ S4["4 · Plan"]
39
+ S5["5 · Dev — worktree, subagents, TDD"]
40
+ S6["6 · Tests"]
41
+ S7["7 · Lint + deploy"]
42
+ S8["8 · Post-deploy"]
43
+ S9["9 · Docs + wiki"]
44
+ S10["10 · Acceptance"]
45
+
46
+ S0 --> S1 --> S2 --> S3 --> S4 --> S5 --> S6 --> S7 --> S8 --> S9 --> S10
47
+ S10 -. "platform: next module" .-> S3
48
+ S10 -. "accounts for every REQ in the brief" .-> S0
49
+
50
+ classDef manual fill:#fde68a,stroke:#b45309,color:#111827
51
+ classDef auto fill:#dbeafe,stroke:#1d4ed8,color:#111827
52
+ class S0,S2,S3,S7,S10 manual
53
+ class S1,S4,S5,S6,S8,S9 auto
54
+ ```
55
+
56
+ Every gate is **typed**: `auto` — the orchestrator verifies it itself, pass/fail
57
+ (blue); `manual` — it waits for your explicit go (amber).
21
58
 
22
59
  | # | Stage | Gate | Type |
23
60
  |---|---|---|---|
24
- | 0 | Intake grill — **mandatory** | shared understanding + autonomy sweep; brief locked | manual |
61
+ | 0 | Harvest + intake grill — **mandatory** | source ledger written; shared understanding + autonomy sweep; brief locked | manual |
25
62
  | 1 | Docs study | contracts grounded on current docs | auto |
26
- | 2 | Brainstorm | design approved; UI verdict recorded | manual |
63
+ | 2 | Brainstorm + decompose | design approved; UI verdict recorded; every REQ answered; platform: module map approved | manual |
27
64
  | 3 | Spec | committed + reviewed; UI: super-ux chain validated, linter green | manual |
28
65
  | 4 | Plan | parallel-ready, DoD per task | auto |
29
- | 5 | Dev | tasks DONE, TDD green per task | auto |
66
+ | 5 | Dev | tasks DONE (three review verdicts each), TDD green per task | auto |
30
67
  | 6 | Tests | full suite green, new code covered | auto |
31
68
  | 7 | Lint + deploy | lint clean + suite green before deploy | manual |
32
69
  | 8 | Post-deploy | clean boot / honest degradation | auto |
33
- | 9 | Docs + wiki | docs + wiki synced | auto |
70
+ | 9 | Docs + wiki | every stale source-ledger row updated; docs + wiki synced | auto |
71
+ | 10 | **Acceptance** | every REQ accounted for with evidence; operator signs off | manual |
34
72
 
35
- These stages (0 intake + 1→9) are the plugin's **example** flow. It's a machine-readable config
36
- ([`pipeline.example.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.example.json))
37
- against a universal contract
38
- ([`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
39
- a host project copies the example to `pipeline.json` and rewrites it with its own
40
- stages (any count), its own `skills[]`, and its own `auto`/`manual` gate types —
41
- "bring your own skills". The framework bakes in no fixed stages.
73
+ ## What you get
42
74
 
43
- ## Intake grill (stage 0) mandatory
75
+ - **The intake grill asks what a senior engineer would ask** before anything is
76
+ touched — scope, edge cases, failure modes, rollback, who the user is — so the
77
+ build does not stall halfway through.
78
+ - **Every stage has a gate.** No code before a spec. No deploy before tests. No
79
+ "done" before the post-deploy logs have been read.
80
+ - **Nothing falls out the back.** The request becomes a frozen, addressable list of
81
+ requirements, and the last stage accounts for every one of them with evidence.
82
+ - **Team discipline without a team.** ADRs, a written plan, a real test suite, a
83
+ wiki entry — produced as part of the work, not promised for later.
84
+ - **It adapts to your repo, not the reverse.** Deploy, docs and wiki conventions
85
+ are read from the host project, so nothing is imposed.
44
86
 
45
- Inspired by [Matt Pocock's grill-me](https://github.com/mattpocock/skills). Before
46
- any technical work, task-pipeline interviews you relentlessly — one question per
47
- turn, each with a recommended answer, exploring the codebase before asking — until
48
- every decision branch is resolved and locked into a **task brief**. There is no
49
- "clear enough task" exemption: no stage-1 work starts without a committed,
50
- confirmed brief.
87
+ ## Quickstart
88
+
89
+ ```
90
+ /plugin marketplace add ssheleg/task-pipeline
91
+ /plugin install task-pipeline@task-pipeline
92
+ ```
93
+
94
+ Then say *"run this through the pipeline"*, *"the full cycle"*, or invoke
95
+ `/task-pipeline <one-line task>`. Russian phrasings (*"полный цикл"*, *"прогони по
96
+ конвейеру"*) route the same way. The skill creates a TaskList with one entry per
97
+ stage and walks the gates. See [Install](#install) for the other channels.
98
+
99
+ ---
100
+
101
+ ## What makes it different
51
102
 
52
- **Built in nothing to install.** The full doctrine ships inside the skill
53
- ([`references/grill.md`](plugins/task-pipeline/skills/task-pipeline/references/grill.md)):
54
- no companion skill, no resolution step, no fallback path, no version skew. Adapted
55
- from [Matt Pocock's grill-with-docs](https://github.com/mattpocock/skills) (MIT
56
- see [LICENSE](LICENSE) *Third-party*).
103
+ ### Everything is built in zero required dependencies
104
+
105
+ The doctrine each stage runs on ships inside the skill. Nothing to install for it,
106
+ nothing to resolve at preflight, no version skew with someone else's repo, and no
107
+ stage that can fail because a plugin is missing:
108
+
109
+ | Stage | Built-in doctrine |
110
+ |---|---|
111
+ | 0 Knowledge harvest | [`knowledge-sources.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md) — source list, the wiki, the ledger, the stage-9 loop-back |
112
+ | 0 Intake grill | [`grill.md`](plugins/task-pipeline/skills/task-pipeline/references/grill.md) — interview loop, domain awareness, autonomy sweep |
113
+ | 2 Brainstorm | [`brainstorm.md`](plugins/task-pipeline/skills/task-pipeline/references/brainstorm.md) — approaches, YAGNI, the no-code-before-approval gate |
114
+ | 2 Decompose | [`decomposition.md`](plugins/task-pipeline/skills/task-pipeline/references/decomposition.md) — platforms only: brick criteria, module map, build order |
115
+ | 3 Spec | [`spec.md`](plugins/task-pipeline/skills/task-pipeline/references/spec.md) — UX-track order, locked contracts, global constraints, self-review |
116
+ | 4 Plan | [`planning.md`](plugins/task-pipeline/skills/task-pipeline/references/planning.md) — zero-context tasks, parallel groups, no placeholders |
117
+ | 5 Build | [`build.md`](plugins/task-pipeline/skills/task-pipeline/references/build.md) + [`review.md`](plugins/task-pipeline/skills/task-pipeline/references/review.md) — isolation, ledger, subagent loop, review rubric, fix loop |
118
+ | 5–6 TDD | [`tdd.md`](plugins/task-pipeline/skills/task-pipeline/references/tdd.md) — the iron law, red/green/refactor, the suite gate |
119
+ | 10 Acceptance | [`acceptance.md`](plugins/task-pipeline/skills/task-pipeline/references/acceptance.md) — REQ coverage table, evidence rules, the closing question |
120
+ | any loop | [`loop-guard.md`](plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md) — churn detection, caps, the break protocol |
121
+
122
+ **Ported, not depended on.** Stage 0 is adapted from
123
+ [Matt Pocock's `grilling` / `grill-with-docs`](https://github.com/mattpocock/skills)
124
+ and stages 2–6 from the corresponding skills in
125
+ [obra/superpowers](https://github.com/obra/superpowers) — both MIT, both credited in
126
+ [LICENSE](LICENSE) → *Third-party*. Nothing at runtime reaches for either.
127
+
128
+ **Optional bridge:** if you already run an equivalent skill set, map it onto stages
129
+ 2/4/5/6 in your `pipeline.json` → `skills[]`. That's a substitution, never a
130
+ requirement — the gates still govern, and nothing detects, recommends or waits for
131
+ an external provider.
132
+
133
+ ### The intake grill (stage 0) — mandatory
134
+
135
+ Before any technical work, task-pipeline interviews you relentlessly — one question
136
+ per turn, each with a recommended answer, exploring the codebase before asking —
137
+ until every decision branch is resolved and locked into a **task brief**. There is
138
+ no "clear enough task" exemption: no stage-1 work starts without a committed,
139
+ confirmed brief.
57
140
 
58
141
  **Domain awareness.** While exploring, the grill reads the project's own
59
142
  `CONTEXT.md` / `docs/adr/` and holds you to them — calling out terms that conflict
@@ -64,15 +147,131 @@ decisions that are hard to reverse, surprising without context **and** the resul
64
147
  a real trade-off get an ADR. Both files are created lazily.
65
148
 
66
149
  **Autonomy comes from the sweep.** Beyond the task itself, the grill pre-resolves
67
- everything that would otherwise interrupt stages 1→9: which external libs need docs,
68
- branch and task-tracker policy, the test command and what "green" means, the lint
69
- command, the deploy target and its **authorization**, where logs and health live,
70
- which docs and runbooks to update, and the model. Each gets an answer or an explicit
71
- "stop and ask me here" — an unasked question is a scheduled interruption. Deploy
72
- authorization has a hard floor: a standing go counts only if it names the target and
73
- the preconditions.
150
+ everything that would otherwise interrupt stages 1→10: which external libs need
151
+ docs, branch and task-tracker policy, the test command and what "green" means, the
152
+ lint command, the deploy target and its **authorization**, where logs and health
153
+ live, which docs and runbooks to update, and the model. Each gets an answer or an
154
+ explicit "stop and ask me here" — an unasked question is a scheduled interruption.
155
+ Deploy authorization has a hard floor: a standing go counts only if it names the
156
+ target and the preconditions.
157
+
158
+ ### Knowledge harvest — read the project before asking the person
159
+
160
+ Stage 0 doesn't open with a question. It opens by finding what the project already
161
+ knows about this task
162
+ ([`knowledge-sources.md`](plugins/task-pipeline/skills/task-pipeline/references/knowledge-sources.md)):
163
+ the code, `CLAUDE.md`, `CONTEXT.md` and the ADRs, `docs/` and `docs/ux/`, previous
164
+ pipeline briefs and their carry-over ledgers, **the knowledge wiki if you have one**,
165
+ and **any other repository or hosted doc system your project names as its docs**. It's
166
+ retrieval scoped by the task's own nouns, not a read of everything, and it ends with a
167
+ **source ledger** written into the brief — one row per source, what it says, how
168
+ fresh, and whether this run makes it stale.
169
+
170
+ That buys two things. The cheap one: you don't get asked what an ADR already
171
+ answers. The one that matters: **an answer nobody can check is a recollection.**
172
+ People answer from memory about systems they wrote a year ago, and without the
173
+ document in hand there is no way to tell a decision from a misremembering — so the
174
+ run builds on it and every later gate passes honestly on a false premise. With the
175
+ harvest in hand the grill quotes the source instead: *"the March ADR says orders go
176
+ through the command handler, you just described a direct write — has that changed?"*
177
+ You outrank every document, but **only out loud**: an override quoted against its
178
+ source is a recorded decision, an unquoted one is an undetected divergence. When two
179
+ sources disagree, precedence is code > host docs/ADRs > wiki > memory.
180
+
181
+ Then the loop closes: **stage 9 updates exactly what stage 0 read.** Every doc the
182
+ run proved stale is already in the ledger with what's wrong, so "docs updated" means
183
+ the sources the next run will trust — not just the files this change happened to
184
+ touch.
185
+
186
+ **The wiki is [obsidian-wiki](https://github.com/ar9av/obsidian-wiki)** (Karpathy's
187
+ LLM-wiki pattern), and it's the one source that carries *why* across projects and
188
+ across months. Detected via `~/.obsidian-wiki/config` or a resolving `wiki-query`.
189
+ Installed → queried at stage 0, synced with `wiki-update` at stage 9. Not installed →
190
+ recommended once, with the line, and the run continues:
191
+
192
+ ```bash
193
+ pip install obsidian-wiki
194
+ obsidian-wiki setup --vault /path/to/your/vault
195
+ ```
196
+
197
+ It is a **recommendation, never a gate** — no stage blocks on a missing wiki, and
198
+ nothing asks twice in one run.
199
+
200
+ ### The REQ spine — why nothing falls out the back
201
+
202
+ Every gate before the last one asks *"is this artifact good?"* — none asks *"does
203
+ this still contain everything that was asked for?"* Scope doesn't leak inside a
204
+ stage; it leaks on the **seams**, because brief → spec → plan → task briefs is four
205
+ rewrites and nothing compares the lists.
206
+
207
+ So the grill's second hard output is an addressable **requirement table**: one row
208
+ per independently verifiable deliverable, each naming how it will be verified. A
209
+ requirement you can't say how to verify is a badly-stated requirement — it gets
210
+ split during the grill, not discovered at the end.
74
211
 
75
- ## UX track (user-facing tasks) super-ux recommended
212
+ From there the ids thread through everything:
213
+
214
+ | Where | What it does |
215
+ |---|---|
216
+ | Spec | every section carries `covers: REQ-…` |
217
+ | Plan | every task carries `Implements: REQ-…`; **the gate is set equality** against the brief — a difference is printed as the explicit list of dropped requirements |
218
+ | Build | the implementer's brief quotes the REQ statement verbatim, so it optimises the requirement and not just the instruction |
219
+ | Review | a third verdict beside spec-compliance and code-quality: **does this satisfy its REQ?** |
220
+ | Deploy | no REQ may still be `open`; a `partial` ships only with explicit acceptance |
221
+ | **Acceptance** | every REQ gets `verified` / `partial` / `deferred` / `dropped` — and `verified` requires **evidence**: a passing test name, a `file:line`, a command and its output |
222
+
223
+ Two rules keep it honest. **The list is frozen** — adding mid-run is free, removing
224
+ or narrowing needs your explicit agreement, because silently restating the task
225
+ smaller makes every later gate pass honestly on a shrunken task. And **deferred out
226
+ loud is forgotten** — anything postponed, dropped or half-done goes into an
227
+ append-only carry-over ledger the moment it's said, including implementer concerns
228
+ and non-blocking review findings.
229
+
230
+ Stage 10 closes the circle with the question the pipeline exists to be able to
231
+ answer from a list rather than from memory: *here's what you asked for, here's what
232
+ shipped, here's what's deferred and where it lives — what's missing?*
233
+
234
+ ### Platforms — decomposed into bricks, built one at a time
235
+
236
+ A one-feature task runs the pipeline once. A **platform** — several independent
237
+ capabilities, several separately shippable surfaces, requirements no single
238
+ deliverable satisfies — gets cut into modules at stage 2, before any spec is
239
+ written ([`decomposition.md`](plugins/task-pipeline/skills/task-pipeline/references/decomposition.md)).
240
+
241
+ Modules are cut **by capability, never by layer** ("Ordering", "Billing" — not
242
+ "Controllers", "Services"), and a candidate is only a brick when it is
243
+ independently specifiable, buildable and testable, owns its own entities, talks to
244
+ its neighbours through declared contracts only, and can land while leaving the
245
+ system working. The committed module map fixes the build order — **walking skeleton
246
+ first**, then topological, no cycles — and every requirement maps to exactly one
247
+ module.
248
+
249
+ Then stages 3→10 run **per module**: dossier → plan → build → tests → deploy →
250
+ post-deploy → docs → acceptance → next brick. Stages 0–2 run once for the platform,
251
+ and the map's status column is what a resumed session reads to know where it
252
+ stopped. Each module's spec is a full dossier: architecture, entities and
253
+ ownership, contracts in and out with their failure behavior, business rules, edge
254
+ and failure cases, UI/Figma chain, limits, open questions.
255
+
256
+ ### Loop guard — churn is detected, not endured
257
+
258
+ Any repeating pass can start undoing the previous one: two shapes alternating, the
259
+ same file rewritten round after round, a finding that was closed coming back. That
260
+ looks like progress and consumes a run, so it is
261
+ [detected mechanically](plugins/task-pipeline/skills/task-pipeline/references/loop-guard.md):
262
+ every repeat pass logs one line per touched file with **the reason that forced it**
263
+ — a finding id, a failed gate item. "Cleanup" is not a reason.
264
+
265
+ It trips on revert-oscillation, a file edited twice for the same reason, a
266
+ resurrected finding, a third entry into one stage, or two loops editing one file —
267
+ plus hard caps (5 fix rounds per task, 2 re-entries per stage, 3 passes per module).
268
+ On a trip the run **stops editing**, names shape A and shape B with their evidence,
269
+ escalates to the layer that owns the conflict (rubric → operator → plan → spec →
270
+ module map), re-plans the check as an ordered checklist with one verification
271
+ command per item, and goes through it one at a time. A higher-layer conflict is
272
+ never settled inside a lower loop.
273
+
274
+ ### UX track (user-facing tasks) — super-ux recommended
76
275
 
77
276
  The moment a task touches any user-facing surface (web / mobile / CLI / TUI — a
78
277
  screen, command, or visible behavior), [super-ux](https://github.com/ssheleg/super-ux)
@@ -81,30 +280,82 @@ installed, task-pipeline uses it; if not, it gives you the install line on the s
81
280
  The spec stage runs it **before any plan is written**: `/ux` (setup check) →
82
281
  `ux-foundation` (personas, JTBD, **customer journey maps**, user stories) →
83
282
  `ux-flows` (user flows + `screens.md` UI map, Figma frames) → `ux-scenarios`
84
- (usage scenarios validated against the base, ux-contract v4) → `/ux-lint` (must pass). The
85
- spec then embeds the UX layer — scenario IDs, CJM stages served, applicable UX
86
- patterns — and the plan's UI tasks carry scenario IDs in their DoD. Scenarios come
87
- before interface.
88
-
89
- ## Prerequisites
90
-
91
- **superpowers** — https://github.com/obra/superpowers
283
+ (usage scenarios validated against super-ux's own scenario-format contract) →
284
+ `/ux-lint` (must pass). The spec then embeds the UX layer — scenario IDs, CJM
285
+ stages served, applicable UX patterns — and the plan's UI tasks carry scenario IDs
286
+ in their DoD. Scenarios come before interface.
92
287
 
93
288
  ```
94
- /plugin marketplace add obra/superpowers
95
- /plugin install superpowers@superpowers
289
+ /plugin marketplace add ssheleg/super-ux
290
+ /plugin install super-ux@super-ux
96
291
  ```
97
292
 
98
- **super-ux** (only for user-facing tasks) https://github.com/ssheleg/super-ux
293
+ ### Model policy one model, confirmed once
99
294
 
295
+ The default recommendation is *the most capable reasoning model the environment
296
+ offers* — currently the latest Opus generation, but that's a **tier, not a string**.
297
+ Model ids go stale as generations ship, and you may be on another provider entirely,
298
+ so nothing is hardcoded: the pipeline resolves the top tier available at runtime and
299
+ stage configs use provider-agnostic tokens (`default` / `inherit`).
300
+
301
+ You confirm or override it (per-stage overrides welcome) before stage 0 — then it
302
+ **stops asking**. A skill can't switch the main-loop model; `/model` is yours.
303
+ Stage-5 subagents are pinned to the confirmed model automatically. If the
304
+ recommended tier isn't available, the pipeline says which one it's using and
305
+ continues — a reminder, never a block.
306
+
307
+ ---
308
+
309
+ ## Configure it for your project
310
+
311
+ ### Bring your own skills
312
+
313
+ Stages 0→10 above are the plugin's **example** flow. It is a machine-readable config
314
+ ([`pipeline.example.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.example.json))
315
+ written against a universal contract
316
+ ([`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
317
+ copy the example to `pipeline.json` in your repo and rewrite it with your own stages
318
+ (any count), your own `skills[]`, and your own `auto`/`manual` gate types. The
319
+ framework bakes in no fixed stage count and no opinion on which gates are manual.
320
+
321
+ ```jsonc
322
+ {
323
+ "version": 1,
324
+ "stages": [
325
+ {
326
+ "id": 1,
327
+ "state": "spec",
328
+ "name": "Spec",
329
+ "model": "default", // 'default' = the run's confirmed model
330
+ "skills": ["your-team:spec"], // whatever your environment resolves
331
+ "gate": { "type": "manual", "check": "spec committed and reviewed" }
332
+ }
333
+ ]
334
+ }
100
335
  ```
101
- /plugin marketplace add ssheleg/super-ux
102
- /plugin install super-ux@super-ux
103
- ```
336
+
337
+ ### Release automation (optional, toggleable)
338
+
339
+ A pipeline config may declare an optional `release` block: a master `enabled`
340
+ toggle, a `trigger`, project-defined `steps`, and `verify` smoke-checks. It's **off
341
+ unless a project turns it on**, and every project configures its own. This repo's
342
+ own instance is [`.github/workflows/release.yml`](.github/workflows/release.yml) —
343
+ armed per repo by the `RELEASE_ENABLED` variable (unset = off), it validates the tag
344
+ against the manifests, cuts a GitHub release from the CHANGELOG, and smoke-tests
345
+ `npx` from a clean checkout. Copy and adapt it; nothing is hardcoded.
346
+
347
+ ### Portability
348
+
349
+ Stages 6–10 read the host project's `CLAUDE.md` conventions (tests / lint / deploy /
350
+ docs / wiki) with detection fallbacks, so the skill works in any repo. The canonical
351
+ artifact layout each stage writes to is fixed in
352
+ [`artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md).
353
+
354
+ ---
104
355
 
105
356
  ## Install
106
357
 
107
- **Plugin (recommended):**
358
+ **Claude Code plugin (recommended):**
108
359
  ```
109
360
  /plugin marketplace add ssheleg/task-pipeline
110
361
  /plugin install task-pipeline@task-pipeline
@@ -112,14 +363,14 @@ before interface.
112
363
 
113
364
  **Any agent via the skills CLI (Cursor, Codex, OpenCode, 70+ — not Claude Code,
114
365
  use the plugin above):**
115
- ```
366
+ ```bash
116
367
  npx skills add ssheleg/task-pipeline --agent cursor --agent codex --global
117
368
  ```
118
369
  (one repeated `--agent` per agent; never include `claude-code` while the plugin is
119
370
  installed — the plain copy shadows it)
120
371
 
121
372
  **npm installer (no clone needed):**
122
- ```
373
+ ```bash
123
374
  npx github:ssheleg/task-pipeline # straight from GitHub
124
375
  npx task-pipeline-skill # from the npm registry
125
376
  ```
@@ -127,17 +378,14 @@ npx task-pipeline-skill # from the npm registry
127
378
  on npm; installs the same skill + `/task-pipeline` command into `~/.claude`,
128
379
  idempotent, `--force` to overwrite)
129
380
 
130
- **Cursor:**
131
- ```
132
- npx skills add ssheleg/task-pipeline --agent cursor --global # global, or…
133
- ```
134
- …or per project, copy `cursor/rules/task-pipeline.mdc` into the repo's
381
+ **Cursor:** the skills CLI above with `--agent cursor`, or per project copy
382
+ [`cursor/rules/task-pipeline.mdc`](cursor/rules/task-pipeline.mdc) into the repo's
135
383
  `.cursor/rules/`. Cursor has no global rules directory — use the skills CLI for a
136
384
  global install, the `.mdc` for per-project, or paste it into Cursor Settings →
137
385
  Rules. The rule is self-contained (no external links), so it works copied anywhere.
138
386
 
139
387
  **Plain skill:**
140
- ```
388
+ ```bash
141
389
  git clone https://github.com/ssheleg/task-pipeline
142
390
  cd task-pipeline && ./install.sh
143
391
  ```
@@ -145,10 +393,10 @@ cd task-pipeline && ./install.sh
145
393
  command into `~/.claude/commands/`; idempotent — rerun skips existing installs,
146
394
  `./install.sh --force` overwrites)
147
395
 
148
- ## Updating everywhere
396
+ ### Updating
149
397
 
150
- Pick **one** channel per agent (running the plugin and the plain/skills-CLI copy
151
- on the same Claude Code install yields a duplicate skill).
398
+ Pick **one** channel per agent running the plugin and the plain/skills-CLI copy on
399
+ the same Claude Code install yields a duplicate, shadowing skill.
152
400
 
153
401
  | Agent / channel | Update |
154
402
  |---|---|
@@ -158,114 +406,64 @@ on the same Claude Code install yields a duplicate skill).
158
406
  | npm | `npx task-pipeline-skill@latest` / `npx github:ssheleg/task-pipeline` (ephemeral — always latest) |
159
407
  | Plain skill | `git pull && ./install.sh --force` |
160
408
 
161
- ## Use
409
+ ### Prerequisites
162
410
 
163
- Say *"run this through the pipeline"* / *"полный цикл"* / *"прогони по конвейеру"*,
164
- or `/task-pipeline`. The skill creates a per-stage TaskList and walks the gates.
411
+ **None for the pipeline itself** — the doctrine for every stage ships inside the
412
+ skill. Three optional companions make individual stages better:
165
413
 
166
- ## Model policy
414
+ | Companion | For | Required? |
415
+ |---|---|---|
416
+ | [super-ux](https://github.com/ssheleg/super-ux) | the stage-3 UX track | only for user-facing tasks |
417
+ | context7 (MCP) | stage-1 docs study | recommended — web-search fallback |
418
+ | [obsidian-wiki](https://github.com/ar9av/obsidian-wiki) | stage-0 harvest + stage-9 sync | recommended — never a gate |
167
419
 
168
- **One model, confirmed once, at preflight.** The default recommendation is *the most
169
- capable reasoning model the environment offers* currently the latest Opus
170
- generation, but that's a **tier, not a string**. Model ids go stale as generations
171
- ship, and you may be on another provider entirely, so nothing is hardcoded: the
172
- pipeline resolves the top tier available at runtime and stage configs use
173
- provider-agnostic tokens (`default` / `inherit`).
420
+ A single preflight block prints which are ready, which to install, and the model
421
+ recommendation, so you arm the whole run in one exchange. Detail:
422
+ [`companion-skills.md`](plugins/task-pipeline/skills/task-pipeline/references/companion-skills.md).
174
423
 
175
- You confirm or override it (per-stage overrides welcome) before stage 0 — then it
176
- **stops asking**. A skill can't switch the main-loop model; `/model` is yours.
177
- Stage-5 subagents are pinned to the confirmed model automatically. If the
178
- recommended tier isn't available, the pipeline says which one it's using and
179
- continues — a reminder, never a block.
424
+ ---
180
425
 
181
- ## Release automation (project-configurable, toggleable)
182
-
183
- A pipeline config may declare an optional `release` block (see
184
- [`pipeline.schema.json`](plugins/task-pipeline/skills/task-pipeline/pipeline.schema.json)):
185
- a master `enabled` toggle, a `trigger`, project-defined `steps`, and `verify`
186
- smoke-checks. It's **off unless a project turns it on**, and every project
187
- configures its own. This repo's own instance is
188
- [`.github/workflows/release.yml`](.github/workflows/release.yml) armed per repo
189
- by the `RELEASE_ENABLED` variable (unset = off), it validates the tag against the
190
- manifests, cuts a GitHub release from the CHANGELOG, and smoke-tests `npx` from a
191
- clean checkout. Copy and adapt it per project; nothing is hardcoded.
192
-
193
- ## Companion skills
194
-
195
- `references/companion-skills.md` lists what powers each stage and how to install
196
- it: **superpowers** (required), **super-ux** (required for user-facing tasks
197
- install line surfaced on the spot), **context7** (docs stage), **wiki-update**
198
- (stage 9). The stage-0 grill is **not** on that list it's built into the skill. A
199
- single preflight
200
- block prints which are ready, which to install, and the model recommendation, so you
201
- arm the whole run in one exchange.
202
-
203
- ## Portability
204
-
205
- Stages 6–9 read the host project's `CLAUDE.md` conventions (tests / lint / deploy /
206
- docs / wiki) with detection fallbacks, so the skill works in any repo. The
207
- canonical artifact layout each stage writes to is fixed in
208
- [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md).
209
-
210
- ## По-русски
211
-
212
- **task-pipeline** — оркестратор полного цикла доставки задачи для Claude Code:
213
- один скилл проводит любую существенную задачу через **интейк-грил + 9 гейтованных
214
- стадий** (изучение доков брейншторм → спека → план → сборка сабагентами →
215
- тесты линт/деплой пост-деплой проверка логов синк доков/вики), построенных
216
- на скиллах [superpowers](https://github.com/obra/superpowers).
217
-
218
- - **Грил на входе (стадия 0) — обязателен.** Одна строка задачи («сделай фичу X»)
219
- недостаточна для автономной работы, поэтому стадию нельзя пропустить: пайплайн
220
- «допрашивает» оператора — по одному вопросу за ход, с рекомендованным ответом,
221
- изучив код до вопроса — пока все ветки решений не закрыты и не зафиксированы в
222
- брифе. Ни одна стадия 1+ не стартует без закоммиченного подтверждённого брифа.
223
- **Грил встроен в скилл** — ставить нечего: вся доктрина лежит в
224
- `references/grill.md`, без компаньонов, резолва и фолбэков. Портировано из
225
- [grill-with-docs Мэтта Покока](https://github.com/mattpocock/skills) (MIT, см.
226
- `LICENSE` → *Third-party*).
227
- - **Доменная осознанность на гриле.** Пайплайн читает `CONTEXT.md` / `docs/adr/`
228
- проекта и держит оператора в рамках его же языка: ловит термины, конфликтующие с
229
- глоссарием, заменяет размытые слова каноничными, проверяет отношения конкретными
230
- краевыми сценариями, вскрывает расхождения между кодом и только что сказанным.
231
- Разрешённый термин сразу пишется в `CONTEXT.md`; решение, которое трудно
232
- откатить, неочевидно без контекста и стало результатом реального компромисса,
233
- получает ADR. Файлы создаются лениво.
234
- - **Автономию даёт свип по стадиям.** Помимо самой задачи грил заранее закрывает
235
- всё, что иначе остановит стадии 1→9: внешние библиотеки и где их доки, политику
236
- веток и трекер задач, команду тестов и что значит «зелено», команду линта, цель
237
- деплоя и **авторизацию на него**, где живут логи/health, какие доки и раннбуки
238
- обновлять, и модель. По каждому пункту — либо ответ, либо явное «здесь
239
- остановись и спроси»; незаданный вопрос = запланированное прерывание. У
240
- авторизации деплоя жёсткий пол: постоянное «go» засчитывается, только если
241
- названы цель и предусловия.
242
- - Ни одна стадия не стартует, пока не пройден гейт предыдущей; деплой требует
243
- зелёного полного прогона тестов и явного «go» оператора.
244
- - **UX-трек (super-ux рекомендуется):** как только задача трогает интерфейс
245
- (web/mobile/CLI/TUI), [super-ux](https://github.com/ssheleg/super-ux) —
246
- рекомендуемый воркфлоу, детектится ещё на гриле; если установлен — используется,
247
- если нет — сразу даётся строка установки. Стадия спеки гоняет `/ux` →
248
- `ux-foundation` (персоны, JTBD, CJM) → `ux-flows` (флоу + `screens.md` — карта
249
- экранов) → `ux-scenarios` (сценарии, ux-contract v4) → `/ux-lint` (линтер должен
250
- быть зелёным) до написания плана; спека включает ID сценариев, `SCR-` экраны,
251
- стадии CJM и UX-паттерны.
252
- Сценарии — до интерфейса.
253
- - **Модель — одна на прогон, подтверждается один раз до старта.** Рекомендация по
254
- умолчанию — *самая мощная reasoning-модель, доступная в окружении* (сейчас это
255
- последнее поколение Opus, но это **тир, а не строка**). Идентификаторы моделей
256
- устаревают, и провайдер может быть другой, поэтому ничего не захардкожено:
257
- актуальный топ-тир определяется в рантайме, а в конфиге стадий стоят
258
- провайдер-агностичные токены (`default` / `inherit`). Оператор подтверждает или
259
- переопределяет (можно по стадиям) — дальше пайплайн больше не переспрашивает.
260
- Сабагенты стадии 5 пинятся на подтверждённую модель автоматически.
261
- - Стадии 6–9 читают конвенции хост-проекта из `CLAUDE.md` (тесты / линт /
262
- деплой / доки / вики), поэтому скилл работает в любом репозитории.
263
-
264
- Запуск: скажите *«полный цикл»* / *«прогони по конвейеру»* или `/task-pipeline
265
- <задача>`. Установка — см. раздел Install выше (плагин, `npx skills add
266
- ssheleg/task-pipeline`, `npx task-pipeline-skill` / `npx
267
- github:ssheleg/task-pipeline` или `./install.sh`).
426
+ ## Documentation map
427
+
428
+ | File | What's in it |
429
+ |---|---|
430
+ | [`SKILL.md`](plugins/task-pipeline/skills/task-pipeline/SKILL.md) | the orchestrator: how to run, the stage table, the model decision |
431
+ | [`references/stages.md`](plugins/task-pipeline/skills/task-pipeline/references/stages.md) | per-stage detail and the exact gate criteria |
432
+ | [`references/artifacts.md`](plugins/task-pipeline/skills/task-pipeline/references/artifacts.md) | the canonical document layout each stage writes to |
433
+ | [`references/conventions.md`](plugins/task-pipeline/skills/task-pipeline/references/conventions.md) | how stages 6–10 read the host project's `CLAUDE.md` |
434
+ | [`references/model-tiering.md`](plugins/task-pipeline/skills/task-pipeline/references/model-tiering.md) | model policy, the `/model` reminder, overrides |
435
+ | [`templates/`](plugins/task-pipeline/skills/task-pipeline/templates/README.md) | brief, carry-over ledger, `CONTEXT.md` and ADR skeletons |
436
+ | [`CHANGELOG.md`](CHANGELOG.md) | every release, with the reasoning behind it |
437
+ | [`CONTRIBUTING.md`](CONTRIBUTING.md) | dev setup, the validator, the version-sync rule, release flow |
438
+
439
+ ## Contributing
440
+
441
+ Issues and pull requests are welcome see [CONTRIBUTING.md](CONTRIBUTING.md) for
442
+ the repo's invariants (the structural validator, four-way version sync, and the
443
+ surfaces that must never drift apart). Security reports:
444
+ [SECURITY.md](SECURITY.md). Everyone participating is expected to follow the
445
+ [Code of Conduct](CODE_OF_CONDUCT.md).
446
+
447
+ ```bash
448
+ npm test # python3 test/validate.py — the structural validator
449
+ ```
450
+
451
+ ## Author
452
+
453
+ Built by ssheleg — [sshlg.me](https://sshlg.me)
454
+
455
+ - X / Twitter — [@fuck_this_year](https://x.com/fuck_this_year)
456
+ - Telegram — [@sshlg](https://t.me/sshlg)
457
+
458
+ Part of the [ssheleg skill family](https://github.com/ssheleg/sshlg-skills):
459
+ `super-ux`, `task-pipeline`, `make-skill`, `sheleg-design`, `seo-aeo-audit`.
460
+ One command installs all five for every agent you use:
461
+
462
+ ```bash
463
+ npx sshlg-skills install
464
+ ```
268
465
 
269
466
  ## License
270
467
 
271
- MIT © 2026 ssheleg.
468
+ MIT © 2026 ssheleg. Third-party portions (the ported stage doctrine) are credited
469
+ and licensed in [LICENSE](LICENSE) → *Third-party*.