harnessed 3.4.2 → 3.4.3

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.
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  // package.json
2
2
  var package_default = {
3
- version: "3.4.2"};
3
+ version: "3.4.3"};
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.2\",\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.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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harnessed",
3
- "version": "3.4.2",
3
+ "version": "3.4.3",
4
4
  "description": "AI coding harness package manager + composition orchestrator",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -103,6 +103,15 @@ 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
+ ## How to invoke
108
+
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.
110
+
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>".
112
+
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
+
106
115
  ## References
107
116
 
108
117
  - D-01 master orchestrator delegation pattern
@@ -5,7 +5,7 @@ description: |
5
5
  战略层 / Phase 层 / 子任务层独立判断 gate, 可能 3 个全跑 / 1-2 个 / 全跳 + 透明声明。
6
6
  schema_version: harnessed.workflow.v3 with delegates_to (3 sub: strategic + phase + subtask, mode parallel)
7
7
  + disciplines_applied (6 default) + tools_available (planning-with-files)。
8
- Triggered by harnessed CLI `harnessed discuss --topic <text>` or slash command `/discuss`
8
+ Triggered by slash command `/discuss`
9
9
  (bare per ADR 0030 namespace policy D-02 LOCK) after `harnessed setup`.
10
10
  trigger_phrases:
11
11
  - "discuss"
@@ -49,9 +49,17 @@ Sister `workflows/capabilities.yaml`:
49
49
 
50
50
  ## Invocation
51
51
 
52
- - CLI: `harnessed discuss --topic "<text>"`
53
52
  - Slash command: `/discuss <text>` (bare per ADR 0030 namespace policy D-02 LOCK after `harnessed setup`)
54
53
 
54
+ <!-- v3.4.3-dual-path-invocation -->
55
+ ## How to invoke
56
+
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.
58
+
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>".
60
+
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
+
55
63
  ## References
56
64
 
57
65
  - D-01 master orchestrator delegation pattern
@@ -41,7 +41,6 @@ Sister `workflows/judgments/phase-gate.yaml`:
41
41
 
42
42
  ## Invocation
43
43
 
44
- - CLI: `harnessed discuss-phase --phase <num>`
45
44
  - Slash command: `/discuss-phase <num>` (after `harnessed setup`)
46
45
 
47
46
  ## Routing rules
@@ -52,16 +51,37 @@ Sister `workflows/judgments/phase-gate.yaml`:
52
51
  - < 1 天工作量
53
52
  - bug 修复且已有最小复现
54
53
 
54
+ <!-- v3.4.3-dual-path-invocation -->
55
55
  ## How to invoke
56
56
 
57
- Use the SlashCommand tool to run: `{{ capabilities.gsd-discuss-phase.cmd }}`
58
-
59
- (If a `⚠️ ... not installed` warning was printed by `harnessed setup`, the backing
60
- capability is missing on disk. Install it (`claude plugin install <name>` for
61
- plugins, or follow the official install instructions for user-skills — e.g. for
62
- gstack: `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack` then
63
- `cd ~/.claude/skills/gstack && ./setup`), then re-run `harnessed setup` to re-render
64
- this SKILL.md and clear the warning.)
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.)
65
85
 
66
86
  ## References
67
87
 
@@ -6,7 +6,7 @@ description: |
6
6
  schema_version: harnessed.workflow.v3 with disciplines_applied (6 default) + tools_available
7
7
  (gstack-office-hours + gstack-plan-ceo-review + planning-with-files) + 3 phases (gate
8
8
  judgments.strategic-gate.* fires + planning-with-files /plan findings.md 持久化)。
9
- Triggered by harnessed CLI `harnessed discuss-strategic --topic <text>` or slash command
9
+ Triggered by slash command
10
10
  `/discuss-strategic` after `harnessed setup`.
11
11
  trigger_phrases:
12
12
  - "discuss strategic"
@@ -45,7 +45,6 @@ Sister `workflows/judgments/strategic-gate.yaml`:
45
45
 
46
46
  ## Invocation
47
47
 
48
- - CLI: `harnessed discuss-strategic --topic "<text>"`
49
48
  - Slash command: `/discuss-strategic <text>` (after `harnessed setup`)
50
49
 
51
50
  ## Routing rules
@@ -56,16 +55,39 @@ Sister `workflows/judgments/strategic-gate.yaml`:
56
55
  - continuing 已有 phase 的执行
57
56
  - 用户已给明确 ticket / spec
58
57
 
58
+ <!-- v3.4.3-dual-path-invocation -->
59
59
  ## How to invoke
60
60
 
61
- Use the SlashCommand tool to run: `{{ capabilities.gstack-office-hours.cmd }}`
62
-
63
- (If a `⚠️ ... not installed` warning was printed by `harnessed setup`, the backing
64
- capability is missing on disk. Install it (`claude plugin install <name>` for
65
- plugins, or follow the official install instructions for user-skills e.g. for
66
- gstack: `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack` then
67
- `cd ~/.claude/skills/gstack && ./setup`), then re-run `harnessed setup` to re-render
68
- this SKILL.md and clear the warning.)
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.)
69
91
 
70
92
  ## References
71
93
 
@@ -46,7 +46,6 @@ Sister `workflows/judgments/subtask-gate.yaml`:
46
46
 
47
47
  ## Invocation
48
48
 
49
- - CLI: `harnessed discuss-subtask --task "<text>"`
50
49
  - Slash command: `/discuss-subtask <text>` (after `harnessed setup`)
51
50
 
52
51
  ## Routing rules
@@ -57,16 +56,37 @@ Sister `workflows/judgments/subtask-gate.yaml`:
57
56
  - 标准库直接调用
58
57
  - bug 修复且已知根因
59
58
 
59
+ <!-- v3.4.3-dual-path-invocation -->
60
60
  ## How to invoke
61
61
 
62
- Use the SlashCommand tool to run: `{{ capabilities.superpowers-brainstorming.cmd }}`
63
-
64
- (If a `⚠️ ... not installed` warning was printed by `harnessed setup`, the backing
65
- capability is missing on disk. Install it (`claude plugin install <name>` for
66
- plugins, or follow the official install instructions for user-skills — e.g. for
67
- gstack: `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack` then
68
- `cd ~/.claude/skills/gstack && ./setup`), then re-run `harnessed setup` to re-render
69
- this SKILL.md and clear the warning.)
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.)
70
90
 
71
91
  ## References
72
92
 
@@ -42,7 +42,6 @@ trigger `is-complex-architecture` 重构 ref。
42
42
 
43
43
  ## Invocation
44
44
 
45
- - CLI: `harnessed plan-architecture --module "<name>"`
46
45
  - Slash command: `/plan-architecture <name>` (after `harnessed setup`)
47
46
 
48
47
  ## Routing rules
@@ -53,16 +52,39 @@ trigger `is-complex-architecture` 重构 ref。
53
52
  - 性能 / scaling 关键路径
54
53
  - 引入显著技术债 / migration 风险
55
54
 
55
+ <!-- v3.4.3-dual-path-invocation -->
56
56
  ## How to invoke
57
57
 
58
- Use the SlashCommand tool to run: `{{ capabilities.plan-eng-review.cmd }}`
59
-
60
- (If a `⚠️ ... not installed` warning was printed by `harnessed setup`, the backing
61
- capability is missing on disk. Install it (`claude plugin install <name>` for
62
- plugins, or follow the official install instructions for user-skills — e.g. for
63
- gstack: `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack` then
64
- `cd ~/.claude/skills/gstack && ./setup`), then re-run `harnessed setup` to re-render
65
- this SKILL.md and clear the warning.)
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.)
66
88
 
67
89
  ## References
68
90
 
@@ -6,7 +6,7 @@ description: |
6
6
  task_plan.md。schema_version: harnessed.workflow.v3 with delegates_to (2 sub: architecture
7
7
  serial order 1 + phase serial order 2) + disciplines_applied (6 default) + tools_available
8
8
  (planning-with-files + plan-eng-review + gsd-plan-phase)。
9
- Triggered by harnessed CLI `harnessed plan --topic <text>` or slash command `/plan`
9
+ Triggered by slash command `/plan`
10
10
  (bare per ADR 0030 namespace policy D-02 LOCK) after `harnessed setup`.
11
11
  trigger_phrases:
12
12
  - "plan"
@@ -50,9 +50,17 @@ Sister `workflows/capabilities.yaml`:
50
50
 
51
51
  ## Invocation
52
52
 
53
- - CLI: `harnessed plan --topic "<text>"`
54
53
  - Slash command: `/plan <text>` (bare per ADR 0030 namespace policy D-02 LOCK after `harnessed setup`)
55
54
 
55
+ <!-- v3.4.3-dual-path-invocation -->
56
+ ## How to invoke
57
+
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.
59
+
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>".
61
+
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
+
56
64
  ## References
57
65
 
58
66
  - D-01 master orchestrator delegation pattern
@@ -46,7 +46,6 @@ reframe)。
46
46
 
47
47
  ## Invocation
48
48
 
49
- - CLI: `harnessed plan-phase --phase <num>`
50
49
  - Slash command: `/plan-phase <num>` (after `harnessed setup`)
51
50
 
52
51
  ## Output artifacts
@@ -55,16 +54,39 @@ reframe)。
55
54
  - `progress.md` — phase 进度跟踪 + cross-session 恢复
56
55
  - (`findings.md` 由 discuss-* sub-workflow 产出, 此处不重复)
57
56
 
57
+ <!-- v3.4.3-dual-path-invocation -->
58
58
  ## How to invoke
59
59
 
60
- Use the SlashCommand tool to run: `{{ capabilities.gsd-plan-phase.cmd }}`
61
-
62
- (If a `⚠️ ... not installed` warning was printed by `harnessed setup`, the backing
63
- capability is missing on disk. Install it (`claude plugin install <name>` for
64
- plugins, or follow the official install instructions for user-skills — e.g. for
65
- gstack: `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack` then
66
- `cd ~/.claude/skills/gstack && ./setup`), then re-run `harnessed setup` to re-render
67
- this SKILL.md and clear the warning.)
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.)
68
90
 
69
91
  ## References
70
92
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: research
3
- description: 多源调研 workflow — Tavily/Exa/ctx7 多源 fan-out + GSD discuss synth aggregate; harnessed v2.0 NEW per R20.7 (Stage ① Discuss 独立 call); schema bumped to harnessed.workflow.v3 in Phase v3.0-3.4 W1.1 (T3.4.W1.1) with disciplines_applied [6] + tools_available [tavily-mcp, exa-mcp, ctx7, gsd-discuss-phase], phases reuse v2 verbatim. Triggered by harnessed CLI `harnessed research --topic <text>` or slash command `/research` after `harnessed setup`.
3
+ description: 多源调研 workflow — Tavily/Exa/ctx7 多源 fan-out + GSD discuss synth aggregate; harnessed v2.0 NEW per R20.7 (Stage ① Discuss 独立 call); schema bumped to harnessed.workflow.v3 in Phase v3.0-3.4 W1.1 (T3.4.W1.1) with disciplines_applied [6] + tools_available [tavily-mcp, exa-mcp, ctx7, gsd-discuss-phase], phases reuse v2 verbatim. Triggered by slash command `/research` after `harnessed setup`.
4
4
  preamble-tier: 2
5
5
  schema_version: harnessed.workflow.v3
6
6
  ---
@@ -28,7 +28,6 @@ Sister `workflows/capabilities.yaml` entries:
28
28
  - `gsd-discuss-phase` (synth aggregate)
29
29
 
30
30
  ## Invocation
31
- - CLI: `harnessed research --topic "<topic>"`
32
31
  - Slash command: `/research <topic>` (after `harnessed setup`)
33
32
 
34
33
  ## Routing rules (sister ~/.claude/rules/web-search.md)
@@ -37,3 +36,33 @@ Sister `workflows/capabilities.yaml` entries:
37
36
  - 库 / API 文档 → ctx7 CLI (per ~/.claude/rules/context7.md)
38
37
  - 关键词 / 时效内容 → Tavily MCP (默认)
39
38
  - 抓整站 / 站点结构 → Tavily crawl/map
39
+
40
+ <!-- v3.4.3-dual-path-invocation -->
41
+ ## How to invoke
42
+
43
+ **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.
44
+
45
+ **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:
46
+
47
+ > You are a **Research analyst**.
48
+ >
49
+ > **Mission**: Multi-source investigation (docs / web search / codebase grep / library probe) producing a `findings.md` with citations, NOT speculation. Use `ctx7` for library docs, `tavily-mcp` / `exa-mcp` for web, `gh` CLI for GitHub artifacts, and codebase `Grep` for internal references.
50
+ >
51
+ > **Default-suspect mode**: assume the change is broken / risky / incomplete until proven otherwise. Cite `file:line` for every finding; do not generalize.
52
+ >
53
+ > **Review checklist**:
54
+ > 1. Resolve each unknown claim to a citable source (URL, file:line, or `ctx7` doc id)
55
+ >
56
+ > 2. Cite version explicitly when discussing library / framework APIs (training cutoff may be stale)
57
+ >
58
+ > 3. Capture conflicting sources side-by-side; do not silently pick one
59
+ >
60
+ > 4. Flag `OPEN: <question>` for items the user must decide; never paper over
61
+ >
62
+ > 5. Persist results to `.planning/<phase>/findings.md` for cross-session handoff
63
+ >
64
+ > **Output format**: structured report with severity-classified findings (verified / unverified / conflicting / open). 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.
65
+
66
+ (Role prompt is self-contained — works even when the upstream `specialist` user-skill / plugin isn't installed.)
67
+
68
+ (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.)
@@ -47,26 +47,37 @@ Sister `workflows/capabilities.yaml` entries:
47
47
  - ✅ **触发**: 项目结束 / 里程碑结束 / 用户明示 "复盘 / retro / lessons learned"
48
48
  - ❌ **跳过**: 日常 PR / 单 phase 完成 (常规 verify-progress 已够用)
49
49
 
50
- ## CLI invocation
51
-
52
- ```bash
53
- # Dry-run preview — arbitrate-only, never spawns SDK.
54
- harnessed retro --milestone <name> --dry-run --non-interactive
55
-
56
- # Apply path — real SDK spawn + 2-phase serial (gstack /retro → planning-with-files RETROSPECTIVE.md sink).
57
- harnessed retro --milestone <name> --apply
58
- ```
59
-
50
+ <!-- v3.4.3-dual-path-invocation -->
60
51
  ## How to invoke
61
52
 
62
- Use the SlashCommand tool to run: `{{ capabilities.retro-gstack.cmd }}`
63
-
64
- (If a `⚠️ ... not installed` warning was printed by `harnessed setup`, the backing
65
- capability is missing on disk. Install it (`claude plugin install <name>` for
66
- plugins, or follow the official install instructions for user-skills — e.g. for
67
- gstack: `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack` then
68
- `cd ~/.claude/skills/gstack && ./setup`), then re-run `harnessed setup` to re-render
69
- this SKILL.md and clear the warning.)
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.)
70
81
 
71
82
  ## References
72
83