harnessed 3.4.3 → 3.4.4

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 (34) hide show
  1. package/README.md +3 -0
  2. package/dist/cli.mjs +1084 -745
  3. package/dist/cli.mjs.map +1 -1
  4. package/dist/index.mjs +1 -1
  5. package/dist/index.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/workflows/auto/SKILL.md +10 -4
  8. package/workflows/capabilities.yaml +1 -1
  9. package/workflows/discuss/auto/SKILL.md +9 -4
  10. package/workflows/discuss/phase/SKILL.md +11 -29
  11. package/workflows/discuss/strategic/SKILL.md +11 -31
  12. package/workflows/discuss/subtask/SKILL.md +11 -29
  13. package/workflows/execute-task/SKILL.md +7 -6
  14. package/workflows/execute-task/workflow.yaml +93 -0
  15. package/workflows/plan/architecture/SKILL.md +11 -31
  16. package/workflows/plan/auto/SKILL.md +9 -4
  17. package/workflows/plan/phase/SKILL.md +11 -31
  18. package/workflows/research/SKILL.md +14 -1
  19. package/workflows/retro/SKILL.md +11 -29
  20. package/workflows/task/auto/SKILL.md +9 -4
  21. package/workflows/task/clarify/SKILL.md +11 -29
  22. package/workflows/task/code/SKILL.md +11 -31
  23. package/workflows/task/deliver/SKILL.md +12 -32
  24. package/workflows/task/test/SKILL.md +11 -31
  25. package/workflows/verify/auto/SKILL.md +9 -4
  26. package/workflows/verify/code-review/SKILL.md +11 -33
  27. package/workflows/verify/design/SKILL.md +11 -33
  28. package/workflows/verify/multispec/SKILL.md +11 -31
  29. package/workflows/verify/paranoid/SKILL.md +11 -35
  30. package/workflows/verify/progress/SKILL.md +11 -29
  31. package/workflows/verify/qa/SKILL.md +11 -31
  32. package/workflows/verify/security/SKILL.md +11 -33
  33. package/workflows/verify/simplify/SKILL.md +11 -31
  34. package/workflows/execute-task/phases.yaml +0 -73
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  // package.json
2
2
  var package_default = {
3
- version: "3.4.3"};
3
+ version: "3.4.4"};
4
4
 
5
5
  // src/index.ts
6
6
  var VERSION = package_default.version;
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OA8Fb,CAAA;;;AC3FO,IAAM,UAAU,eAAA,CAAI","file":"index.mjs","sourcesContent":["{\n \"name\": \"harnessed\",\n \"version\": \"3.4.3\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"manifests\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"expr-eval\": \"^2.0.2\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Main library entry — re-exports public APIs.\n// phase 1.1 batch 1: skeleton only; schema validator wired in batch 2 (T3+).\n\nimport pkg from '../package.json' with { type: 'json' }\n\nexport const VERSION = pkg.version\n"]}
1
+ {"version":3,"sources":["../package.json","../src/index.ts"],"names":[],"mappings":";AAAA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OA8Fb,CAAA;;;AC3FO,IAAM,UAAU,eAAA,CAAI","file":"index.mjs","sourcesContent":["{\n \"name\": \"harnessed\",\n \"version\": \"3.4.4\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"manifests\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"expr-eval\": \"^2.0.2\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Main library entry — re-exports public APIs.\n// phase 1.1 batch 1: skeleton only; schema validator wired in batch 2 (T3+).\n\nimport pkg from '../package.json' with { type: 'json' }\n\nexport const VERSION = pkg.version\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harnessed",
3
- "version": "3.4.3",
3
+ "version": "3.4.4",
4
4
  "description": "AI coding harness package manager + composition orchestrator",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -103,14 +103,20 @@ Sister `workflows/capabilities.yaml`:
103
103
  - 4 stage-master `/discuss /plan /task /verify` 仍可独立 invoke — `/auto` 是 opt-in NEW workflow
104
104
  - `--staged` opt-in for stage gate UX (每 stage 完停 user review)
105
105
 
106
- <!-- v3.4.3-dual-path-invocation -->
107
106
  ## How to invoke
108
107
 
109
- **Preferred path** (master orchestrator): dispatch to the per-sub-workflow slash commands in the order this stage prescribes. Each sub command lives at `~/.claude/commands/<sub-name>.md` with its own dual-path fallback.
108
+ Use the Bash tool to run:
110
109
 
111
- **Fallback path** (when no slash command from the sub-list resolves): run each missing sub-workflow inline using its own role prompt from `~/.claude/skills/<sub-name>/SKILL.md`. Do NOT skip stages silently — each sub either runs or is logged as "skipped: <reason>".
110
+ ```bash
111
+ echo "$ARGUMENTS" | harnessed run auto --task-stdin
112
+ ```
112
113
 
113
- (Sister `~/.claude/commands/auto.md` is also generated by `harnessed setup` so `/auto` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed auto --apply` CLI claims are removed; that subcommand was never implemented.)
114
+ If `$ARGUMENTS` is empty, run `harnessed run auto` (no stdin pipe).
115
+
116
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
117
+ - For stage-by-stage review, append `--staged` (pauses between stages for user review).
118
+
119
+ <!-- harnessed-generated:v3.4.4 -->
114
120
 
115
121
  ## References
116
122
 
@@ -451,7 +451,7 @@ capabilities:
451
451
  since: v2.0
452
452
  category: tool-bundled-skill
453
453
  description: Sub-task completion gate (verbatim COMPLETE; max-iterations fallback)
454
- sdk_ref: src/routing/lib/ralphLoop.ts
454
+ sdk_ref: src/workflow/lib/ralphLoop.ts
455
455
  fires_when:
456
456
  - subtask.completion_required == true
457
457
 
@@ -51,14 +51,19 @@ Sister `workflows/capabilities.yaml`:
51
51
 
52
52
  - Slash command: `/discuss <text>` (bare per ADR 0030 namespace policy D-02 LOCK after `harnessed setup`)
53
53
 
54
- <!-- v3.4.3-dual-path-invocation -->
55
54
  ## How to invoke
56
55
 
57
- **Preferred path** (master orchestrator): dispatch to the per-sub-workflow slash commands in the order this stage prescribes. Each sub command lives at `~/.claude/commands/<sub-name>.md` with its own dual-path fallback.
56
+ Use the Bash tool to run:
58
57
 
59
- **Fallback path** (when no slash command from the sub-list resolves): run each missing sub-workflow inline using its own role prompt from `~/.claude/skills/<sub-name>/SKILL.md`. Do NOT skip stages silently — each sub either runs or is logged as "skipped: <reason>".
58
+ ```bash
59
+ echo "$ARGUMENTS" | harnessed run discuss --task-stdin
60
+ ```
60
61
 
61
- (Sister `~/.claude/commands/discuss.md` is also generated by `harnessed setup` so `/discuss` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed discuss --apply` CLI claims are removed; that subcommand was never implemented.)
62
+ If `$ARGUMENTS` is empty, run `harnessed run discuss` (no stdin pipe).
63
+
64
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
65
+
66
+ <!-- harnessed-generated:v3.4.4 -->
62
67
 
63
68
  ## References
64
69
 
@@ -51,37 +51,19 @@ Sister `workflows/judgments/phase-gate.yaml`:
51
51
  - < 1 天工作量
52
52
  - bug 修复且已有最小复现
53
53
 
54
- <!-- v3.4.3-dual-path-invocation -->
55
54
  ## How to invoke
56
55
 
57
- **Preferred path** (when the upstream specialist is installed): use the SlashCommand tool to run `{{ capabilities.gsd-discuss-phase.cmd }}` — the upstream specialist takes over.
58
-
59
- **Fallback path** (when the upstream isn't installed or returns no result): use the Task tool to spawn a general-purpose subagent with this prompt:
60
-
61
- > You are a **Phase clarification analyst**.
62
- >
63
- > **Mission**: Surface and resolve gray-area implementation decisions BEFORE a phase enters planning. Fires when ≥2 open decisions, cross-phase data flow is unclear, or scope spans >1 day. Adapted from GSD `/gsd-discuss-phase`.
64
- >
65
- > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
66
- >
67
- > **Review checklist**:
68
- > 1. List every open decision as a single question (1 line each)
69
- >
70
- > 2. For each, list 2-4 candidate answers with one-line tradeoffs
71
- >
72
- > 3. Identify cross-phase contracts (data flow / API shape / migration order)
73
- >
74
- > 4. Flag decisions blocking start (must answer before plan) vs. deferrable
75
- >
76
- > 5. Persist to `.planning/<phase>/findings.md` + `knowledge.md` for hand-off
77
- >
78
- > 6. If the layer is genuinely clear, say 'no clarification needed' and exit
79
- >
80
- > **Output format**: structured report with severity-classified findings (blocking / deferrable / resolved). One finding per line: `[severity] file:line — problem (one sentence); fix: suggested change`. If no findings, say so explicitly. No preamble, no end-of-report summary.
81
-
82
- (Role prompt is self-contained — works even when the upstream `gsd-discuss-phase` user-skill / plugin isn't installed.)
83
-
84
- (Sister `~/.claude/commands/discuss-phase.md` is also generated by `harnessed setup` so `/discuss-phase` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed discuss-phase --apply` CLI claims are removed; that subcommand was never implemented.)
56
+ Use the Bash tool to run:
57
+
58
+ ```bash
59
+ echo "$ARGUMENTS" | harnessed run discuss-phase --task-stdin
60
+ ```
61
+
62
+ If `$ARGUMENTS` is empty, run `harnessed run discuss-phase` (no stdin pipe).
63
+
64
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
65
+
66
+ <!-- harnessed-generated:v3.4.4 -->
85
67
 
86
68
  ## References
87
69
 
@@ -55,39 +55,19 @@ Sister `workflows/judgments/strategic-gate.yaml`:
55
55
  - continuing 已有 phase 的执行
56
56
  - 用户已给明确 ticket / spec
57
57
 
58
- <!-- v3.4.3-dual-path-invocation -->
59
58
  ## How to invoke
60
59
 
61
- **Preferred path** (when the upstream specialist is installed): use the SlashCommand tool to run `{{ capabilities.gstack-office-hours.cmd }}` — the upstream specialist takes over.
62
-
63
- **Fallback path** (when the upstream isn't installed or returns no result): use the Task tool to spawn a general-purpose subagent with this prompt:
64
-
65
- > You are a **Strategic Office-Hours advisor (CEO + Product lens)**.
66
- >
67
- > **Mission**: Stress-test the product / scope / business value of a new feature, milestone, or project BEFORE engineering investment. Adapted from gstack `/office-hours` + `/plan-ceo-review`.
68
- >
69
- > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
70
- >
71
- > **Review checklist**:
72
- > 1. What user problem does this solve? Who specifically experiences it today?
73
- >
74
- > 2. Why this, why now? (alternative cost of working on something else)
75
- >
76
- > 3. What does success look like — measurable, not vibes (1 metric, not 5)?
77
- >
78
- > 4. Is the scope MVP-able? What's the smallest cut that still proves the bet?
79
- >
80
- > 5. What assumptions are load-bearing? Which would kill the feature if wrong?
81
- >
82
- > 6. Who pays the maintenance cost after ship — same team, or a hand-off?
83
- >
84
- > 7. Decision: ship / iterate / kill / table — with one-line reason
85
- >
86
- > **Output format**: structured report with severity-classified findings (ship / iterate / kill / table (each with reason)). One finding per line: `[severity] file:line — problem (one sentence); fix: suggested change`. If no findings, say so explicitly. No preamble, no end-of-report summary.
87
-
88
- (Role prompt is self-contained — works even when the upstream `gstack-office-hours` user-skill / plugin isn't installed.)
89
-
90
- (Sister `~/.claude/commands/discuss-strategic.md` is also generated by `harnessed setup` so `/discuss-strategic` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed discuss-strategic --apply` CLI claims are removed; that subcommand was never implemented.)
60
+ Use the Bash tool to run:
61
+
62
+ ```bash
63
+ echo "$ARGUMENTS" | harnessed run discuss-strategic --task-stdin
64
+ ```
65
+
66
+ If `$ARGUMENTS` is empty, run `harnessed run discuss-strategic` (no stdin pipe).
67
+
68
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
69
+
70
+ <!-- harnessed-generated:v3.4.4 -->
91
71
 
92
72
  ## References
93
73
 
@@ -56,37 +56,19 @@ Sister `workflows/judgments/subtask-gate.yaml`:
56
56
  - 标准库直接调用
57
57
  - bug 修复且已知根因
58
58
 
59
- <!-- v3.4.3-dual-path-invocation -->
60
59
  ## How to invoke
61
60
 
62
- **Preferred path** (when the upstream specialist is installed): use the SlashCommand tool to run `{{ capabilities.superpowers-brainstorming.cmd }}` — the upstream specialist takes over.
63
-
64
- **Fallback path** (when the upstream isn't installed or returns no result): use the Task tool to spawn a general-purpose subagent with this prompt:
65
-
66
- > You are a **Subtask brainstormer**.
67
- >
68
- > **Mission**: Generate ≥2 implementation approaches for a single subtask and compare tradeoffs. Fires when core algorithm / data structure / API contract / high error-cost. Skip pure CRUD or single-obvious-path tasks.
69
- >
70
- > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
71
- >
72
- > **Review checklist**:
73
- > 1. State the subtask in one sentence; confirm scope with user if ambiguous
74
- >
75
- > 2. Produce 2-4 distinct approaches (not just '2 flavors of the same idea')
76
- >
77
- > 3. For each: complexity, perf, failure modes, test surface, future change cost
78
- >
79
- > 4. Recommend one with 1-2 line reason; flag risks of the chosen path
80
- >
81
- > 5. Output a `findings.md` block the implementer can paste into the task
82
- >
83
- > 6. If options collapse to one (others clearly bad), say so and exit fast
84
- >
85
- > **Output format**: structured report with severity-classified findings (recommended / acceptable / rejected). One finding per line: `[severity] file:line — problem (one sentence); fix: suggested change`. If no findings, say so explicitly. No preamble, no end-of-report summary.
86
-
87
- (Role prompt is self-contained — works even when the upstream `superpowers-brainstorming` user-skill / plugin isn't installed.)
88
-
89
- (Sister `~/.claude/commands/discuss-subtask.md` is also generated by `harnessed setup` so `/discuss-subtask` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed discuss-subtask --apply` CLI claims are removed; that subcommand was never implemented.)
61
+ Use the Bash tool to run:
62
+
63
+ ```bash
64
+ echo "$ARGUMENTS" | harnessed run discuss-subtask --task-stdin
65
+ ```
66
+
67
+ If `$ARGUMENTS` is empty, run `harnessed run discuss-subtask` (no stdin pipe).
68
+
69
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
70
+
71
+ <!-- harnessed-generated:v3.4.4 -->
90
72
 
91
73
  ## References
92
74
 
@@ -38,10 +38,11 @@ v2 schema fields per `src/workflow/schema/workflow.ts` (T2.4.W0.1 16th surface
38
38
  - `parallelism: judgments.parallelism-gate.<route>.fires` (D-11 subagent / Agent Teams / main session route)
39
39
  - `fallback.max_iterations_exceeded: {action, message, exit_code}` (R20.10 acceptance c "explicit NOT silent")
40
40
 
41
- Per-phase models load from `workflows/execute-task/phases.yaml`; engine.runRouting
42
- spawns each phase as a sub-agent via `@anthropic-ai/claude-agent-sdk` 0.3.142+
41
+ Per-phase models load from `workflows/execute-task/workflow.yaml` (v3 SoT post
42
+ v3.4.4 Phase 6 — v2 phases.yaml deleted); runWorkflow spawns each phase as a
43
+ sub-agent via `@anthropic-ai/claude-agent-sdk` 0.3.142+
43
44
  (`AgentDefinition` 5-字段 unpack — ADR 0011 § 4). ralph-loop SDK wrapper at 04-deliver
44
- reuses sister Phase 2.2 v0.2.0 ship: `src/routing/lib/ralphLoop.ts` (54L) + `sdkSpawn.ts` (91L)
45
+ reuses sister Phase 2.2 v0.2.0 ship: `src/workflow/lib/ralphLoop.ts` (54L) + `sdkSpawn.ts` (91L)
45
46
  + 4-layer dual-signal `isComplete` (NOT 重写 — per RESEARCH § 3.1).
46
47
 
47
48
  ## CLI invocation (the only enforced entry — B-28)
@@ -78,6 +79,6 @@ the CLI subcommand above (B-28 single-entry contract).
78
79
  - ADR 0011 — execute-task SDK + ralph-loop integration (phase 2.2 W6 — finalize)
79
80
  - `.planning/intel/omc-comparison.md` § CD-2 — per-phase model tier defaults
80
81
  - `src/cli/execute-task.ts` — CLI implementation (T5.1)
81
- - `workflows/execute-task/phases.yaml` — 4-phase config (T3.3)
82
- - `src/routing/lib/sdkSpawn.ts` — SDK query() consumer (T4.1)
83
- - `src/routing/lib/ralphLoop.ts` — verbatim COMPLETE round-trip
82
+ - `workflows/execute-task/workflow.yaml` — 4-phase config (v3 SoT; v3.4.4 Phase 6 ship — v2 phases.yaml deleted)
83
+ - `src/workflow/lib/sdkSpawn.ts` — SDK query() consumer (T4.1)
84
+ - `src/workflow/lib/ralphLoop.ts` — verbatim COMPLETE round-trip
@@ -0,0 +1,93 @@
1
+ # workflows/execute-task/workflow.yaml — v3.4.4 Phase 4 Commit 1 NEW (Path A)
2
+ # Former v2 `phases.yaml` (74L) deleted v3.4.4 Phase 6 Wave 3c — this v3
3
+ # workflow.yaml is now the single SoT. Authored fresh per HANDOFF-v3.4.4 L745
4
+ # Path A decision + PHASE-4-SPEC L101-180 verbatim.
5
+ #
6
+ # 4-phase chain mirrors v2 verbatim:
7
+ # 01-clarify superpowers-brainstorming opus gate: subtask-gate.brainstorming.fires
8
+ # 02-code karpathy 心法 + on[] sonnet conditional: tdd / grill-with-docs / zoom-out
9
+ # 03-test superpowers TDD sonnet on: test_fail → diagnose
10
+ # 04-deliver ralph-loop haiku args.completion_promise=COMPLETE + fallback
11
+ #
12
+ # v2 → v3 字段 delta (PHASE-4-SPEC L13 + L116-178):
13
+ # BUMP `schema_version: harnessed.workflow.v3` (sister Phase 3.3 W0.5 WorkflowSchemaV3)
14
+ # ADD `disciplines_applied: [6 basename]` (D-09 L0 Discipline Substrate, Pattern A A.1 strict Literal Union)
15
+ # ADD `tools_available: [7 capabilities.yaml entry name]` (D-05 Contract C1 cross-validate)
16
+ # KEEP phases verbatim from former v2 phases.yaml (Path A1 — coexisted through Phase 5; v2 deleted Phase 6 Wave 3c)
17
+ #
18
+ # Per-phase model tier (intel CD-2 § 第 4 条) preserved verbatim from v2:
19
+ # opus / sonnet / sonnet / haiku
20
+ # Override via CLI: `--model-tier inherit` (B-10 escape hatch).
21
+ #
22
+ # Sister refs:
23
+ # - .planning/v3.4.4/PHASE-4-SPEC.md L101-180 (NEW yaml shape verbatim)
24
+ # - workflows/execute-task/phases.yaml (former v2 SoT — DELETED v3.4.4 Phase 6 Wave 3c; this workflow.yaml is sole SoT)
25
+ # - workflows/research/workflow.yaml (v3 standalone shape reference)
26
+ # - workflows/verify/simplify/workflow.yaml (v3 sub-workflow shape reference)
27
+ # - workflows/capabilities.yaml (7 capability refs: superpowers-brainstorming/tdd/grill-with-docs/zoom-out/diagnose/ralph-loop/planning-with-files)
28
+ # - workflows/defaults.yaml ralph_max_iterations.execute-task.{01..04}
29
+ # - workflows/disciplines/{karpathy,output-style,language,operational,priority,protocols}.yaml (L0 substrate)
30
+ # - src/workflow/schema/workflow.ts WorkflowSchemaV3 (Phase 3.3 W0.5 SHIPPED 122L)
31
+
32
+ schema_version: harnessed.workflow.v3
33
+ workflow: execute-task
34
+ description: |
35
+ 子任务执行 workflow — 4-phase chain (brainstorming → karpathy + mattpocock route by
36
+ condition → TDD + diagnose → ralph-loop COMPLETE) triggered by harnessed CLI
37
+ `harnessed execute-task --task <text>` OR universal `harnessed run execute-task`.
38
+
39
+ disciplines_applied: [karpathy, output-style, language, operational, priority, protocols]
40
+ tools_available: [superpowers-brainstorming, tdd, grill-with-docs, zoom-out, diagnose, ralph-loop, planning-with-files]
41
+
42
+ phases:
43
+ - id: 01-clarify
44
+ name: brainstorming
45
+ upstream: superpowers brainstorming
46
+ capability: '{{ capabilities.superpowers-brainstorming.cmd }}'
47
+ model: opus
48
+ max_iterations: '{{ defaults.ralph_max_iterations.execute-task.01-clarify }}'
49
+ gate: judgments.subtask-gate.brainstorming.fires
50
+
51
+ - id: 02-code
52
+ name: code (karpathy 心法 always-on + mattpocock conditional route)
53
+ upstream: karpathy
54
+ model: sonnet
55
+ max_iterations: '{{ defaults.ralph_max_iterations.execute-task.02-code }}'
56
+ on:
57
+ - if: 'judgments.tdd-gate.tdd-strongly-suggested.fires'
58
+ invoke: '{{ capabilities.tdd.cmd }}'
59
+ - if: 'phase.spec_ambiguous == true'
60
+ invoke: '{{ capabilities.grill-with-docs.cmd }}'
61
+ - if: 'phase.unfamiliar_module == true'
62
+ invoke: '{{ capabilities.zoom-out.cmd }}'
63
+
64
+ - id: 03-test
65
+ name: test (conditional TDD + diagnose on fail)
66
+ upstream: superpowers TDD
67
+ capability: '{{ capabilities.tdd.cmd }}'
68
+ model: sonnet
69
+ max_iterations: '{{ defaults.ralph_max_iterations.execute-task.03-test }}'
70
+ on:
71
+ - if: 'test_fail == true'
72
+ invoke: '{{ capabilities.diagnose.cmd }}'
73
+
74
+ - id: 04-deliver
75
+ name: deliver (ralph-loop COMPLETE gate + max-iter fallback)
76
+ upstream: ralph-loop
77
+ capability: '{{ capabilities.ralph-loop.cmd }}'
78
+ model: haiku
79
+ args:
80
+ completion_promise: COMPLETE
81
+ max_iterations: '{{ defaults.ralph_max_iterations.execute-task.04-deliver }}'
82
+ gate: judgments.parallelism-gate.fires
83
+ parallelism: judgments.parallelism-gate.ralph-loop-wrapper.fires
84
+ on:
85
+ - if: 'subtask.lines >= 20 and subtask.type != "single_command_query"'
86
+ invoke: '{{ capabilities.ralph-loop.cmd }}'
87
+ - if: 'subtask.lines < 20 or subtask.type == "single_command_query"'
88
+ action: skip
89
+ fallback:
90
+ max_iterations_exceeded:
91
+ action: emit_warning_and_halt
92
+ message: '⚠️ ralph-loop max-iterations ({{ args.max_iterations }}) exceeded for execute-task 04-deliver. Sub-task likely incomplete — see workflow engine catch handler for manual options.'
93
+ exit_code: 1
@@ -52,39 +52,19 @@ trigger `is-complex-architecture` 重构 ref。
52
52
  - 性能 / scaling 关键路径
53
53
  - 引入显著技术债 / migration 风险
54
54
 
55
- <!-- v3.4.3-dual-path-invocation -->
56
55
  ## How to invoke
57
56
 
58
- **Preferred path** (when the upstream specialist is installed): use the SlashCommand tool to run `{{ capabilities.plan-eng-review.cmd }}` — the upstream specialist takes over.
59
-
60
- **Fallback path** (when the upstream isn't installed or returns no result): use the Task tool to spawn a general-purpose subagent with this prompt:
61
-
62
- > You are a **Staff Engineer architect**.
63
- >
64
- > **Mission**: Lock down system architecture BEFORE phase planning when complex (≥3 modules / new framework / new data model / scaling-critical / large migration). Adapted from gstack `/plan-eng-review`.
65
- >
66
- > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
67
- >
68
- > **Review checklist**:
69
- > 1. Identify the smallest architecture change that satisfies all requirements
70
- >
71
- > 2. Diagram component boundaries (data flow / call direction / ownership)
72
- >
73
- > 3. List interfaces / contracts between components (function signatures, API shapes)
74
- >
75
- > 4. Failure modes: what happens when each component is slow / down / inconsistent?
76
- >
77
- > 5. Migration / rollback path — can we ship in slices, or all-at-once?
78
- >
79
- > 6. Choose mechanisms with the lowest blast radius and lowest unique vocabulary
80
- >
81
- > 7. Document tradeoffs of the rejected alternatives (so reviewers see the road not taken)
82
- >
83
- > **Output format**: structured report with severity-classified findings (approved / approved-with-changes / blocked). One finding per line: `[severity] file:line — problem (one sentence); fix: suggested change`. If no findings, say so explicitly. No preamble, no end-of-report summary.
84
-
85
- (Role prompt is self-contained — works even when the upstream `plan-eng-review` user-skill / plugin isn't installed.)
86
-
87
- (Sister `~/.claude/commands/plan-architecture.md` is also generated by `harnessed setup` so `/plan-architecture` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed plan-architecture --apply` CLI claims are removed; that subcommand was never implemented.)
57
+ Use the Bash tool to run:
58
+
59
+ ```bash
60
+ echo "$ARGUMENTS" | harnessed run plan-architecture --task-stdin
61
+ ```
62
+
63
+ If `$ARGUMENTS` is empty, run `harnessed run plan-architecture` (no stdin pipe).
64
+
65
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
66
+
67
+ <!-- harnessed-generated:v3.4.4 -->
88
68
 
89
69
  ## References
90
70
 
@@ -52,14 +52,19 @@ Sister `workflows/capabilities.yaml`:
52
52
 
53
53
  - Slash command: `/plan <text>` (bare per ADR 0030 namespace policy D-02 LOCK after `harnessed setup`)
54
54
 
55
- <!-- v3.4.3-dual-path-invocation -->
56
55
  ## How to invoke
57
56
 
58
- **Preferred path** (master orchestrator): dispatch to the per-sub-workflow slash commands in the order this stage prescribes. Each sub command lives at `~/.claude/commands/<sub-name>.md` with its own dual-path fallback.
57
+ Use the Bash tool to run:
59
58
 
60
- **Fallback path** (when no slash command from the sub-list resolves): run each missing sub-workflow inline using its own role prompt from `~/.claude/skills/<sub-name>/SKILL.md`. Do NOT skip stages silently — each sub either runs or is logged as "skipped: <reason>".
59
+ ```bash
60
+ echo "$ARGUMENTS" | harnessed run plan --task-stdin
61
+ ```
61
62
 
62
- (Sister `~/.claude/commands/plan.md` is also generated by `harnessed setup` so `/plan` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed plan --apply` CLI claims are removed; that subcommand was never implemented.)
63
+ If `$ARGUMENTS` is empty, run `harnessed run plan` (no stdin pipe).
64
+
65
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
66
+
67
+ <!-- harnessed-generated:v3.4.4 -->
63
68
 
64
69
  ## References
65
70
 
@@ -54,39 +54,19 @@ reframe)。
54
54
  - `progress.md` — phase 进度跟踪 + cross-session 恢复
55
55
  - (`findings.md` 由 discuss-* sub-workflow 产出, 此处不重复)
56
56
 
57
- <!-- v3.4.3-dual-path-invocation -->
58
57
  ## How to invoke
59
58
 
60
- **Preferred path** (when the upstream specialist is installed): use the SlashCommand tool to run `{{ capabilities.gsd-plan-phase.cmd }}` — the upstream specialist takes over.
61
-
62
- **Fallback path** (when the upstream isn't installed or returns no result): use the Task tool to spawn a general-purpose subagent with this prompt:
63
-
64
- > You are a **Phase planner**.
65
- >
66
- > **Mission**: Break a phase into ordered, dependency-aware tasks with explicit file paths and acceptance criteria, then persist via planning-with-files plugin. Adapted from GSD `/gsd-plan-phase` (Wave A research → Wave B planner → Wave C plan-checker).
67
- >
68
- > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
69
- >
70
- > **Review checklist**:
71
- > 1. Each task names the exact files it touches (NOT just 'auth module')
72
- >
73
- > 2. Each task has acceptance criteria a third party can verify
74
- >
75
- > 3. Dependencies are explicit (task N requires task M output)
76
- >
77
- > 4. Tasks are ≤1 day each; split if larger
78
- >
79
- > 5. Identify the verification step (test / lint / typecheck) for each task
80
- >
81
- > 6. Persist as `task_plan.md` + `progress.md` via planning-with-files `/plan`
82
- >
83
- > 7. Final pass: a fresh agent should be able to execute from these files alone
84
- >
85
- > **Output format**: structured report with severity-classified findings (ready-to-execute / needs-revision / blocked). One finding per line: `[severity] file:line — problem (one sentence); fix: suggested change`. If no findings, say so explicitly. No preamble, no end-of-report summary.
86
-
87
- (Role prompt is self-contained — works even when the upstream `gsd-plan-phase` user-skill / plugin isn't installed.)
88
-
89
- (Sister `~/.claude/commands/plan-phase.md` is also generated by `harnessed setup` so `/plan-phase` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed plan-phase --apply` CLI claims are removed; that subcommand was never implemented.)
59
+ Use the Bash tool to run:
60
+
61
+ ```bash
62
+ echo "$ARGUMENTS" | harnessed run plan-phase --task-stdin
63
+ ```
64
+
65
+ If `$ARGUMENTS` is empty, run `harnessed run plan-phase` (no stdin pipe).
66
+
67
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
68
+
69
+ <!-- harnessed-generated:v3.4.4 -->
90
70
 
91
71
  ## References
92
72
 
@@ -37,7 +37,6 @@ Sister `workflows/capabilities.yaml` entries:
37
37
  - 关键词 / 时效内容 → Tavily MCP (默认)
38
38
  - 抓整站 / 站点结构 → Tavily crawl/map
39
39
 
40
- <!-- v3.4.3-dual-path-invocation -->
41
40
  ## How to invoke
42
41
 
43
42
  **Preferred path** (master orchestrator): dispatch to the per-sub-workflow slash commands in the order this stage prescribes. Each sub command lives at `~/.claude/commands/<sub-name>.md` with its own dual-path fallback.
@@ -66,3 +65,17 @@ Sister `workflows/capabilities.yaml` entries:
66
65
  (Role prompt is self-contained — works even when the upstream `specialist` user-skill / plugin isn't installed.)
67
66
 
68
67
  (Sister `~/.claude/commands/research.md` is also generated by `harnessed setup` so `/research` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed research --apply` CLI claims are removed; that subcommand was never implemented.)
68
+
69
+ ## How to invoke
70
+
71
+ Use the Bash tool to run:
72
+
73
+ ```bash
74
+ echo "$ARGUMENTS" | harnessed run research --task-stdin
75
+ ```
76
+
77
+ If `$ARGUMENTS` is empty, run `harnessed run research` (no stdin pipe).
78
+
79
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
80
+
81
+ <!-- harnessed-generated:v3.4.4 -->
@@ -47,37 +47,19 @@ Sister `workflows/capabilities.yaml` entries:
47
47
  - ✅ **触发**: 项目结束 / 里程碑结束 / 用户明示 "复盘 / retro / lessons learned"
48
48
  - ❌ **跳过**: 日常 PR / 单 phase 完成 (常规 verify-progress 已够用)
49
49
 
50
- <!-- v3.4.3-dual-path-invocation -->
51
50
  ## How to invoke
52
51
 
53
- **Preferred path** (when the upstream specialist is installed): use the SlashCommand tool to run `{{ capabilities.retro-gstack.cmd }}` — the upstream specialist takes over.
54
-
55
- **Fallback path** (when the upstream isn't installed or returns no result): use the Task tool to spawn a general-purpose subagent with this prompt:
56
-
57
- > You are a **Retrospective facilitator**.
58
- >
59
- > **Mission**: Run a Lessons / Decisions / Surprises retrospective for the closed milestone, then persist to `RETROSPECTIVE.md`. Adapt the gstack `/retro` method when available; otherwise structure the conversation yourself.
60
- >
61
- > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
62
- >
63
- > **Review checklist**:
64
- > 1. What did we set out to do, vs. what actually shipped?
65
- >
66
- > 2. Top 3 surprises (positive or negative) — root cause each
67
- >
68
- > 3. Decisions that paid off; decisions we would reverse
69
- >
70
- > 4. Process changes for next milestone (concrete, not vague)
71
- >
72
- > 5. What deserves a permanent rule entry (CLAUDE.md / docs/adr/)?
73
- >
74
- > 6. Persist verbatim to `.planning/RETROSPECTIVE.md` — append, do not overwrite
75
- >
76
- > **Output format**: structured report with severity-classified findings (lesson / decision / surprise / process-change). One finding per line: `[severity] file:line — problem (one sentence); fix: suggested change`. If no findings, say so explicitly. No preamble, no end-of-report summary.
77
-
78
- (Role prompt is self-contained — works even when the upstream `retro-gstack` user-skill / plugin isn't installed.)
79
-
80
- (Sister `~/.claude/commands/retro.md` is also generated by `harnessed setup` so `/retro` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed retro --apply` CLI claims are removed; that subcommand was never implemented.)
52
+ Use the Bash tool to run:
53
+
54
+ ```bash
55
+ echo "$ARGUMENTS" | harnessed run retro --task-stdin
56
+ ```
57
+
58
+ If `$ARGUMENTS` is empty, run `harnessed run retro` (no stdin pipe).
59
+
60
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
61
+
62
+ <!-- harnessed-generated:v3.4.4 -->
81
63
 
82
64
  ## References
83
65
 
@@ -57,14 +57,19 @@ Sister `workflows/capabilities.yaml`:
57
57
 
58
58
  - Slash command: `/task <text>` (bare per ADR 0030 namespace policy D-02 LOCK after `harnessed setup`)
59
59
 
60
- <!-- v3.4.3-dual-path-invocation -->
61
60
  ## How to invoke
62
61
 
63
- **Preferred path** (master orchestrator): dispatch to the per-sub-workflow slash commands in the order this stage prescribes. Each sub command lives at `~/.claude/commands/<sub-name>.md` with its own dual-path fallback.
62
+ Use the Bash tool to run:
64
63
 
65
- **Fallback path** (when no slash command from the sub-list resolves): run each missing sub-workflow inline using its own role prompt from `~/.claude/skills/<sub-name>/SKILL.md`. Do NOT skip stages silently — each sub either runs or is logged as "skipped: <reason>".
64
+ ```bash
65
+ echo "$ARGUMENTS" | harnessed run task --task-stdin
66
+ ```
66
67
 
67
- (Sister `~/.claude/commands/task.md` is also generated by `harnessed setup` so `/task` is a real platform slash command — both files carry the same dual-path instruction. Previous v3.4.x `harnessed task --apply` CLI claims are removed; that subcommand was never implemented.)
68
+ If `$ARGUMENTS` is empty, run `harnessed run task` (no stdin pipe).
69
+
70
+ After completion, the Bash output prints a `Next:` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.
71
+
72
+ <!-- harnessed-generated:v3.4.4 -->
68
73
 
69
74
  ## References
70
75