@gobing-ai/spur 0.3.41 → 0.3.43

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 (185) hide show
  1. package/.claude-plugin/marketplace.json +15 -0
  2. package/README.md +15 -1
  3. package/config/templates/AGENTS.md +5 -3
  4. package/config/workflows/task-pipeline.yaml +113 -12
  5. package/package.json +15 -12
  6. package/plugins/README.md +655 -0
  7. package/plugins/sp/README.md +621 -0
  8. package/plugins/sp/agents/expert-spur.md +109 -0
  9. package/plugins/sp/agents/super-coder.md +126 -0
  10. package/plugins/sp/agents/super-planner.md +283 -0
  11. package/plugins/sp/agents/super-reviewer.md +154 -0
  12. package/plugins/sp/commands/dev-arch.md +30 -0
  13. package/plugins/sp/commands/dev-brainstorm.md +40 -0
  14. package/plugins/sp/commands/dev-changelog.md +28 -0
  15. package/plugins/sp/commands/dev-daily.md +29 -0
  16. package/plugins/sp/commands/dev-debug.md +29 -0
  17. package/plugins/sp/commands/dev-dogfood.md +33 -0
  18. package/plugins/sp/commands/dev-featurechange.md +130 -0
  19. package/plugins/sp/commands/dev-find-conflict.md +51 -0
  20. package/plugins/sp/commands/dev-find-issue.md +76 -0
  21. package/plugins/sp/commands/dev-find-next.md +60 -0
  22. package/plugins/sp/commands/dev-fixall.md +33 -0
  23. package/plugins/sp/commands/dev-gitmsg.md +28 -0
  24. package/plugins/sp/commands/dev-gtd.md +97 -0
  25. package/plugins/sp/commands/dev-handover.md +26 -0
  26. package/plugins/sp/commands/dev-idea.md +50 -0
  27. package/plugins/sp/commands/dev-next.md +31 -0
  28. package/plugins/sp/commands/dev-parallel.md +30 -0
  29. package/plugins/sp/commands/dev-plan.md +46 -0
  30. package/plugins/sp/commands/dev-refine.md +48 -0
  31. package/plugins/sp/commands/dev-refineall.md +65 -0
  32. package/plugins/sp/commands/dev-refresh.md +32 -0
  33. package/plugins/sp/commands/dev-reverse.md +32 -0
  34. package/plugins/sp/commands/dev-review.md +31 -0
  35. package/plugins/sp/commands/dev-run.md +63 -0
  36. package/plugins/sp/commands/dev-runall.md +83 -0
  37. package/plugins/sp/commands/dev-simplify.md +39 -0
  38. package/plugins/sp/commands/dev-unit.md +29 -0
  39. package/plugins/sp/commands/dev-verify.md +48 -0
  40. package/plugins/sp/commands/dev-verifyall.md +72 -0
  41. package/plugins/sp/commands/dev-wrap.md +48 -0
  42. package/plugins/sp/commands/dev-wrapall.md +51 -0
  43. package/plugins/sp/commands/rule-add.md +18 -0
  44. package/plugins/sp/commands/rule-refine.md +18 -0
  45. package/plugins/sp/commands/rule-scan.md +18 -0
  46. package/plugins/sp/commands/spur-init.md +22 -0
  47. package/plugins/sp/commands/workflow-add.md +18 -0
  48. package/plugins/sp/commands/workflow-refine.md +18 -0
  49. package/plugins/sp/hooks/agent-hint.ts +60 -0
  50. package/plugins/sp/hooks/careful-guard.ts +147 -0
  51. package/plugins/sp/hooks/context-post-tool.ts +325 -0
  52. package/plugins/sp/hooks/context-session-start.ts +182 -0
  53. package/plugins/sp/hooks/context-session-stop.ts +95 -0
  54. package/plugins/sp/hooks/hooks.json +51 -0
  55. package/plugins/sp/hooks/pi/guard-extension.ts +341 -0
  56. package/plugins/sp/hooks/task-write-guard.ts +84 -0
  57. package/plugins/sp/plugin.json +8 -0
  58. package/plugins/sp/scripts/batch-preflight.ts +204 -0
  59. package/plugins/sp/scripts/daily-summary/daily-summary.ts +606 -0
  60. package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
  61. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +363 -0
  62. package/plugins/sp/scripts/dogfood-testing/validate-report.ts +168 -0
  63. package/plugins/sp/scripts/feature-sync-bounded.ts +451 -0
  64. package/plugins/sp/scripts/stage-registry-adapter.ts +1341 -0
  65. package/plugins/sp/scripts/task-size-precheck.ts +202 -0
  66. package/plugins/sp/scripts/validate-commands.ts +651 -0
  67. package/plugins/sp/scripts/validate-flag-contracts.ts +875 -0
  68. package/plugins/sp/skills/brainstorm/SKILL.md +361 -0
  69. package/plugins/sp/skills/brainstorm/agents/openai.yaml +14 -0
  70. package/plugins/sp/skills/brainstorm/examples/ideation-example.md +209 -0
  71. package/plugins/sp/skills/brainstorm/metadata.openclaw +7 -0
  72. package/plugins/sp/skills/brainstorm/references/grilling-interview.md +68 -0
  73. package/plugins/sp/skills/brainstorm/references/workflows.md +255 -0
  74. package/plugins/sp/skills/branch-workflow/SKILL.md +109 -0
  75. package/plugins/sp/skills/branch-workflow/references/branch-lifecycle.md +69 -0
  76. package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +100 -0
  77. package/plugins/sp/skills/code-implementation/SKILL.md +203 -0
  78. package/plugins/sp/skills/code-implementation/references/debugging.md +64 -0
  79. package/plugins/sp/skills/code-implementation/references/implementation-patterns.md +113 -0
  80. package/plugins/sp/skills/code-improvement/SKILL.md +231 -0
  81. package/plugins/sp/skills/code-improvement/references/deepening-signals.md +205 -0
  82. package/plugins/sp/skills/code-review/SKILL.md +112 -0
  83. package/plugins/sp/skills/code-review/references/receiving-code-review.md +70 -0
  84. package/plugins/sp/skills/code-review/references/review-lenses.md +117 -0
  85. package/plugins/sp/skills/code-review/references/self-review-checklist.md +53 -0
  86. package/plugins/sp/skills/code-review/references/verification-before-completion.md +68 -0
  87. package/plugins/sp/skills/code-simplification/SKILL.md +225 -0
  88. package/plugins/sp/skills/code-testing/SKILL.md +108 -0
  89. package/plugins/sp/skills/code-testing/references/stacks/bun-ts.md +165 -0
  90. package/plugins/sp/skills/code-testing/references/stacks/go.md +88 -0
  91. package/plugins/sp/skills/code-testing/references/stacks/python.md +117 -0
  92. package/plugins/sp/skills/code-testing/references/test-loop-breaker.md +37 -0
  93. package/plugins/sp/skills/code-testing/references/test-output-discipline.md +52 -0
  94. package/plugins/sp/skills/code-testing/references/unit-testing.md +212 -0
  95. package/plugins/sp/skills/code-verification/SKILL.md +535 -0
  96. package/plugins/sp/skills/code-verification/references/code-improvement.md +39 -0
  97. package/plugins/sp/skills/code-verification/references/secu-review.md +94 -0
  98. package/plugins/sp/skills/code-verification/references/verdict-schema.md +141 -0
  99. package/plugins/sp/skills/conflict-finding/SKILL.md +254 -0
  100. package/plugins/sp/skills/conflict-finding/references/authority-resolution.md +258 -0
  101. package/plugins/sp/skills/conflict-finding/references/comparison-protocol.md +277 -0
  102. package/plugins/sp/skills/conflict-finding/references/finding-contract.md +346 -0
  103. package/plugins/sp/skills/conflict-finding/references/remediation-routing.md +276 -0
  104. package/plugins/sp/skills/daily-summary/SKILL.md +171 -0
  105. package/plugins/sp/skills/daily-summary/agents/openai.yaml +13 -0
  106. package/plugins/sp/skills/doc-evolve/SKILL.md +175 -0
  107. package/plugins/sp/skills/doc-evolve/references/operations.md +93 -0
  108. package/plugins/sp/skills/dogfood-testing/SKILL.md +608 -0
  109. package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +211 -0
  110. package/plugins/sp/skills/dogfood-testing/references/report-template.md +351 -0
  111. package/plugins/sp/skills/doubt-driven-development/SKILL.md +136 -0
  112. package/plugins/sp/skills/functional-review/SKILL.md +364 -0
  113. package/plugins/sp/skills/functional-review/references/verdict-schema.md +133 -0
  114. package/plugins/sp/skills/indexed-context/SKILL.md +164 -0
  115. package/plugins/sp/skills/issue-finding/SKILL.md +442 -0
  116. package/plugins/sp/skills/issue-finding/agents/openai.yaml +15 -0
  117. package/plugins/sp/skills/issue-finding/examples/expected-findings.json +27 -0
  118. package/plugins/sp/skills/issue-finding/examples/session-test-loop.jsonl +23 -0
  119. package/plugins/sp/skills/issue-finding/references/session-formats.md +151 -0
  120. package/plugins/sp/skills/next-feature/SKILL.md +125 -0
  121. package/plugins/sp/skills/next-feature/references/handoff-routing.md +92 -0
  122. package/plugins/sp/skills/next-feature/references/proposal-contract.md +49 -0
  123. package/plugins/sp/skills/next-feature/references/ranking-rubric.md +52 -0
  124. package/plugins/sp/skills/next-feature/references/signal-derivation.md +67 -0
  125. package/plugins/sp/skills/next-router/SKILL.md +181 -0
  126. package/plugins/sp/skills/next-router/references/messages.md +90 -0
  127. package/plugins/sp/skills/next-router/references/routing-table.md +216 -0
  128. package/plugins/sp/skills/parallel-execution/SKILL.md +148 -0
  129. package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +109 -0
  130. package/plugins/sp/skills/parallel-execution/references/fan-out-patterns.md +101 -0
  131. package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +94 -0
  132. package/plugins/sp/skills/reverse-engineering/SKILL.md +375 -0
  133. package/plugins/sp/skills/reverse-engineering/agents/openai.yaml +18 -0
  134. package/plugins/sp/skills/source-driven-development/SKILL.md +124 -0
  135. package/plugins/sp/skills/spec-decomposition/SKILL.md +117 -0
  136. package/plugins/sp/skills/spec-decomposition/references/decomposition.md +539 -0
  137. package/plugins/sp/skills/spur-cli/SKILL.md +133 -0
  138. package/plugins/sp/skills/spur-cli/references/agent.md +179 -0
  139. package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +82 -0
  140. package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +177 -0
  141. package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +84 -0
  142. package/plugins/sp/skills/spur-cli/references/features/verbs.md +122 -0
  143. package/plugins/sp/skills/spur-cli/references/features.md +234 -0
  144. package/plugins/sp/skills/spur-cli/references/init.md +119 -0
  145. package/plugins/sp/skills/spur-cli/references/message.md +98 -0
  146. package/plugins/sp/skills/spur-cli/references/rules/authoring-rules.md +212 -0
  147. package/plugins/sp/skills/spur-cli/references/rules/fine-tuning.md +148 -0
  148. package/plugins/sp/skills/spur-cli/references/rules/operations.md +228 -0
  149. package/plugins/sp/skills/spur-cli/references/rules/validation-and-extension.md +129 -0
  150. package/plugins/sp/skills/spur-cli/references/rules.md +209 -0
  151. package/plugins/sp/skills/spur-cli/references/serve.md +58 -0
  152. package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +98 -0
  153. package/plugins/sp/skills/spur-cli/references/tasks/section-editing.md +95 -0
  154. package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +361 -0
  155. package/plugins/sp/skills/spur-cli/references/tasks.md +280 -0
  156. package/plugins/sp/skills/spur-cli/references/team.md +133 -0
  157. package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +226 -0
  158. package/plugins/sp/skills/spur-cli/references/workflows/operations.md +211 -0
  159. package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +129 -0
  160. package/plugins/sp/skills/spur-cli/references/workflows.md +355 -0
  161. package/plugins/sp/skills/spur-dev/SKILL.md +224 -0
  162. package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +196 -0
  163. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +680 -0
  164. package/plugins/sp/skills/spur-dev/references/decision-brief.md +80 -0
  165. package/plugins/sp/skills/spur-dev/references/dev-operations.md +546 -0
  166. package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +164 -0
  167. package/plugins/sp/skills/spur-dev/references/execution-batch.md +790 -0
  168. package/plugins/sp/skills/spur-dev/references/execution-workflow.md +352 -0
  169. package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +191 -0
  170. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +417 -0
  171. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +171 -0
  172. package/plugins/sp/skills/spur-dev/references/glossary.md +95 -0
  173. package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +80 -0
  174. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +120 -0
  175. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +302 -0
  176. package/plugins/sp/skills/spur-dev/references/product-planning.md +206 -0
  177. package/plugins/sp/skills/spur-dev/references/section-batching.md +24 -0
  178. package/plugins/sp/skills/sys-architecture/SKILL.md +155 -0
  179. package/plugins/sp/skills/sys-architecture/references/decision-method.md +137 -0
  180. package/plugins/sp/skills/sys-architecture/references/upkeep-survey.md +75 -0
  181. package/plugins/sp/skills/sys-debugging/SKILL.md +228 -0
  182. package/plugins/sp/skills/sys-debugging/references/debugging-protocol.md +62 -0
  183. package/plugins/sp/skills/test-driven-development/SKILL.md +248 -0
  184. package/plugins/sp/skills/wayfinder/SKILL.md +292 -0
  185. package/spur.js +6035 -4963
@@ -0,0 +1,63 @@
1
+ ---
2
+ description: Run a task — full pipeline (precheck→implement→test→review→approve→verify→record→done) or single-step (implement)
3
+ argument-hint: "<wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue]"
4
+ allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill"]
5
+ ---
6
+
7
+ # Dev Run
8
+
9
+ Wraps the **sp:spur-dev** and **sp:code-implementation** skills.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `<wbs>` | Task WBS to run. | required |
16
+ | `--mode` `<full\|implement>` | Full pipeline or single implement step. | full |
17
+ | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing stages. In an interactive session, omit/`inline` keeps the controller in the host session (non-subprocess); eligible full-mode `agent.run` stages may dispatch once to a native subagent, with host fallback (task 0508). `auto` or a name keeps subprocess dispatch. | inline |
18
+ | `--auto` | Skip objective HITL confirmations. | off |
19
+ | `--next` | Chain-to-completion via the next-router. | off |
20
+ | `--wrap` | Run the wrap hop after the main step. The `--agent` selector is preserved into the `/sp:dev-wrap <wbs>` handoff when supplied; omission remains omission. The wrap hop is workflow-backed and reports its trigger-3 subprocess override. | off |
21
+ | `--continue` | Resume an interrupted task from its checkpoint. | off |
22
+
23
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
24
+
25
+ ## Usage
26
+
27
+ /sp:dev-run <wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue]
28
+
29
+ ## Implementation
30
+
31
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
32
+ - Full pipeline (default `--mode full`): interactive omit/`--agent inline` uses the
33
+ [inline pipeline driver](../skills/spur-dev/references/inline-pipeline-driver.md) via
34
+ `Skill(skill="sp:spur-dev", args="run-inline $ARGUMENTS")`; `--agent auto` or a named executor
35
+ uses `Skill(skill="sp:spur-dev", args="run $ARGUMENTS")` and the workflow subprocess path.
36
+ - Implement step only (`--mode implement`): `Skill(skill="sp:code-implementation", args="$ARGUMENTS")`
37
+
38
+ **Flags:**
39
+
40
+ - `--auto` | `--agent <inline|auto|name>` — Skip objective HITL confirmations (taste/irreversible gates still pause). `--agent` names who does the model-bearing work. Interactive omit/`inline` keeps the controller and implement-only stages in this session; full mode reads `task-pipeline.yaml` as the SSOT and interprets its actions/guards through the inline driver, where eligible `agent.run` stages may dispatch once to a native subagent and otherwise run in the host (task 0508). It records `stage <id> executed inline in session <session-id>` or `stage <id> executed via subagent <agent-id> (host session <session-id>)` in the run log. `auto` or a name is merged into `vars.agent` and `vars.implementAgent` and keeps the existing subprocess workflow. Headless `spur workflow run` / `spur agent run` is unchanged. See the [execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
41
+
42
+ **Mode split (load-bearing — bug-742)**
43
+
44
+ | Mode | What runs | Must not do |
45
+ | --- | --- | --- |
46
+ | `--mode full` (default) | Interactive omit/inline: host-session driver over `task-pipeline.yaml`; explicit/headless executor: workflow subprocess | — |
47
+ | `--mode implement` | Single implement competency via `sp:code-implementation` | Re-launch the full pipeline, `spur workflow run …task-pipeline…`, or `/sp:dev-run` **without** `--mode implement` |
48
+
49
+ The pipeline's `implement` step invokes this command **only** as:
50
+
51
+ ```text
52
+ /sp:dev-run --mode implement <wbs> --auto
53
+ ```
54
+
55
+ That pure slash form is intentional (ADR-043): workflow `agent.run` `input` is a command pointer, not an inline essay. Anti-recursion, scope, and Solution authorship live in this command + `sp:code-implementation`, not in YAML prose bolted onto the slash line.
56
+
57
+ **When `--mode implement` is active (including as a pipeline subprocess):** work only in the current working tree on `<wbs>`. **NEVER invoke** `spur workflow run` for the task pipeline, and **NEVER invoke** `/sp:dev-run` without an explicit `--mode implement` — this step *is* the pipeline's implement stage; re-entering full mode recurses (bug-742).
58
+
59
+ > **⚠ Redefinition (feature H8, 2026-07-31).** `--next` previously selected implement-only mode on
60
+ > this command. It no longer does — use `--mode implement`. The replacement already existed and is
61
+ > what `routing-table.md` row A5 dispatches, which is evidence the overload was accidental. This
62
+ > warning is marked for removal after one release (these are prompt files; leaving it is permanent
63
+ > noise). See ADR-039. **was: `--next` selected implement-only mode.**
@@ -0,0 +1,83 @@
1
+ ---
2
+ description: Run a batch of tasks through their pipelines in dependency-correct order — resolve a set, topo-sort, run each via task-pipeline.yaml, emit a batch report
3
+ argument-hint: "--tasks <selector> [--feature <id>] [--mode <sequential|parallel>] [--keep-going] [--auto] [--agent <inline|auto|name>] [--json] [--wrap] [--next] [--continue] [--worktree [<name>]]"
4
+ allowed-tools: ["Bash", "Read", "Skill"]
5
+ ---
6
+
7
+ # Dev Runall
8
+
9
+ Wraps the **sp:spur-dev** skill.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `--tasks` `<selector>` | Task selector to run. | required |
16
+ | `--feature` `<id>` | Restrict to a feature. | omitted |
17
+ | `--mode` `<sequential\|parallel>` | Batch execution order. | sequential |
18
+ | `--keep-going` | Continue past per-task failures. | off |
19
+ | `--auto` | Skip objective HITL gates. | off |
20
+ | `--agent` `<inline\|auto\|name>` | Who runs each task's pipeline stages. Interactive sequential omit/`inline` uses the host-session driver — host-controlled, eligible `agent.run` stages may use a native subagent (task 0508); `auto`, a name, parallel mode, and headless invocation use subprocesses. | inline |
21
+ | `--json` | Emit structured JSON. | off |
22
+ | `--wrap` | Run the wrap hop per task. The `--agent` selector is preserved into each `/sp:dev-wrap <wbs>` handoff when supplied; omission remains omission. | off |
23
+ | `--next` | Chain-to-completion via the next-router. | off |
24
+ | `--continue` | Resume an interrupted batch. | off |
25
+ | `--worktree` `[<name>]` | Run the batch in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. | off |
26
+
27
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
28
+
29
+ ## Usage
30
+
31
+ ```
32
+ /sp:dev-runall --tasks <selector> [--feature <id>] [--mode <sequential|parallel>] [--keep-going] [--auto] [--agent <inline|auto|name>] [--json] [--wrap] [--next] [--continue] [--worktree [<name>]]
33
+ ```
34
+
35
+ Flags: `--tasks <selector>` (required — explicit WBS list, status pseudo-list, `feature:<id>`,
36
+ or `ready`), `--feature <id>` (sugar for `feature:<id>`; when the effective selector is
37
+ feature-derived, `dev-runall` runs `spur feature check <id> --strict --json` **once** before
38
+ resolving tasks — a non-zero strict check aborts the batch with verdict `aborted` and the
39
+ structured findings, before any task pipeline action, task 0510 R2), `--mode`
40
+ `<sequential|parallel>` (default `sequential`; `parallel` fans out a proven-independent subset —
41
+ see `execution-batch.md` § Parallel Execution), `--keep-going`
42
+ (batch failure policy — skip a failed task's in-batch dependents, continue independents; default
43
+ halts on first failure), `--auto`
44
+ (sets `profile=auto` on each per-task run, skipping the HITL approve gate), `--agent <inline|auto|name>`
45
+ (names who runs the pipeline's stages — interactive sequential omit/`inline` uses the host driver;
46
+ `auto` or a name is merged into each per-task `vars.agent` and `vars.implementAgent`; parallel mode
47
+ retains isolated subprocesses, ADR-047), `--json` (emit the
48
+ report as JSON), `--wrap` (trigger
49
+ `wrapup-pipeline.yaml` after the batch completes), `--next`
50
+ (chain each task to terminal status, then run the wrap hop **once for the batch** — see below),
51
+ `--worktree` `[<name>]` (run the batch in an isolated git worktree —
52
+ FF-merge onto the base ref on full success, retain intact on any failure/halt/non-FF; bare form
53
+ creates a fresh tree, `<name>` form adopts an existing worktree by name/path/branch; see
54
+ `execution-batch.md` § Worktree isolation).
55
+
56
+ **`--worktree` is sequential-only.** `--worktree --mode parallel` is **rejected**. This flag gives
57
+ the batch *one* worktree for the whole run; per-task worktrees and parallel isolation remain task
58
+ 0142 Slice A. Run parallel batches without `--worktree`, or run them sequentially with it.
59
+
60
+ **`--worktree` corpus visibility.** While the batch runs in a worktree, corpus writes (task
61
+ statuses, kanban) land in the worktree copy; your main tree still shows pre-run statuses until the
62
+ FF-merge on success. This is expected, not a bug.
63
+
64
+ **`--next` (batch-once wrap).** `--next`
65
+ is chain-to-completion with propagation. On `dev-runall`, each task in the batch runs its
66
+ `task-pipeline.yaml` to terminal status (the pipeline already drives precheck → implement → test →
67
+ review → approve → verify → record → done); when the batch is complete, the wrap hop runs **once
68
+ for the batch** — mirroring the batch-once shippable gate `dev-verifyall` uses — rather than once
69
+ per task. Without `--next`, `--wrap` is wrap-without-chaining (the single batch wraps without
70
+ advancing the feature lifecycle). **was: `--next` deliberately omitted; the old no-`--next` rationale argued against the old per-task-transition meaning and does not carry.**
71
+
72
+ **Three orthogonal axes** (do not confuse): `--keep-going`
73
+ = batch failure policy (does a failure halt the batch or skip dependents?);
74
+ `--continue` = resume from
75
+ checkpoint (pick up an interrupted batch); `--next`
76
+ = chain each task to terminal status + batch-once wrap. See `dev-operations.md` § runall for the
77
+ full distinction.
78
+
79
+ ## Implementation
80
+
81
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface). Interactive sequential omit/`inline` keeps the orchestrator in the host session through the [inline pipeline driver](../skills/spur-dev/references/inline-pipeline-driver.md); eligible `agent.run` stages may dispatch once to a native subagent with host fallback (task 0508). `--agent auto`, a name, or parallel mode retains the isolated per-task workflow boundary.
82
+ - Interactive sequential omit/inline: `Skill(skill="sp:spur-dev", args="runall-inline $ARGUMENTS")`.
83
+ - Explicit executor or parallel mode: `Skill(skill="sp:spur-dev", args="runall $ARGUMENTS")` → `sp:super-planner` agent.
@@ -0,0 +1,39 @@
1
+ ---
2
+ description: Simplify code for clarity without changing behavior — reduce complexity in recent changes (or a given scope), preserving behavior exactly
3
+ argument-hint: "[<path-or-scope>] [--scope <recent|all|path>] [--check <cmd>] [--agent <inline|auto|name>] [--auto]"
4
+ allowed-tools: ["Bash", "Read", "Edit", "Skill"]
5
+ ---
6
+
7
+ # Dev Simplify
8
+
9
+ Wraps the **sp:code-simplification** skill.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `[<path-or-scope>]` | Path or scope to simplify. | recent |
16
+ | `--scope` `<recent\|all\|path>` | Scope of the simplification pass. | recent |
17
+ | `--check` `<cmd>` | Validation command to iterate against. | project gate |
18
+ | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing simplification. | inline |
19
+ | `--auto` | Skip objective HITL gates (taste gates: over-engineering removal & cross-file utility extraction still require approval). | off |
20
+
21
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
22
+
23
+ ## Usage
24
+
25
+ /sp:dev-simplify [<path-or-scope>] [--scope <recent|all|path>] [--check <cmd>] [--agent <inline|auto|name>] [--auto]
26
+
27
+ ## Implementation
28
+
29
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
30
+ - `Skill(skill="sp:code-simplification", args="$ARGUMENTS")`
31
+ - **Interaction & Confirmation Model**:
32
+ - **Over-Engineering Removal**: Classify abstractions as Accidental LLM Over-engineering vs Intentional Reserved Patterns. Present target, reason, pros, cons, and recommendation with rationale before removing indirection.
33
+ - **Common Pattern Consolidation**: Follow the 5-stage lifecycle:
34
+ 1. Identify repeating operations across scope.
35
+ 2. Confirm proposed shared helper/utility signature and module location with operator.
36
+ 3. Implement shared helper in isolation with unit tests.
37
+ 4. Refactor call-sites incrementally.
38
+ 5. Run regression verification suite (`--check <cmd>`).
39
+
@@ -0,0 +1,29 @@
1
+ ---
2
+ description: Generate or extend tests until the unit target is met
3
+ argument-hint: "<target> [--coverage <n>] [--agent <inline|auto|name>] [--auto]"
4
+ allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill"]
5
+ ---
6
+
7
+ # Dev Unit
8
+
9
+ Wraps the **sp:code-testing** skill.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `<target>` | File / module / path to generate tests for. | required |
16
+ | `--coverage` `<n>` | Coverage percentage target. | configured |
17
+ | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing test work. | inline |
18
+ | `--auto` | Skip objective HITL gates. | off |
19
+
20
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
21
+
22
+ ## Usage
23
+
24
+ /sp:dev-unit <target> [--coverage <n>] [--agent <inline|auto|name>] [--auto]
25
+
26
+ ## Implementation
27
+
28
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
29
+ - `Skill(skill="sp:code-testing", args="$ARGUMENTS")`
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Verify a task against its requirements and Acceptance Criteria — traceability check producing a PASS/PARTIAL/FAIL verdict with evidence
3
+ argument-hint: "<wbs> [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--skip-shippable]"
4
+ allowed-tools: ["Bash", "Read", "Skill"]
5
+ ---
6
+
7
+ # Dev Verify
8
+
9
+ Wraps the **sp:code-verification** skill.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `<wbs>` | Task WBS to verify. | required |
16
+ | `--agent` `<inline\|auto\|name>` | Who runs the model-bearing verification. | inline |
17
+ | `--fix` `<none\|blockers-first\|all>` | Auto-fix policy on findings. | none |
18
+ | `--focus` `<lens>` | Verification lens. | omitted |
19
+ | `--bdd` | Run BDD scenarios. | off |
20
+ | `--auto` | Skip objective HITL gates. | off |
21
+ | `--force` | Re-run even if already verified. | off |
22
+ | `--next` | Hand off to the next-router on success. | off |
23
+ | `--skip-shippable` | Compatibility alias for --skip-shipable; skip the shippable gate. | off |
24
+
25
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
26
+
27
+ ## Usage
28
+
29
+ ```
30
+ /sp:dev-verify <wbs> [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--skip-shippable]
31
+ ```
32
+
33
+ **Shippable readiness** (feature-level): when `--fix all` and the task has a `feature_id`, the
34
+ skill runs `spur feature check <id>` after the per-task verdict and emits `Shippable: PASS|FAIL|N/A`.
35
+ Default **on** with `--fix all`. Opt out only with **`--skip-shippable`** (alias `--skip-shipable`).
36
+ See `sp:code-verification` § Shippable readiness gate.
37
+
38
+ ## Implementation
39
+
40
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
41
+ - `Skill(skill="sp:code-verification", args="verify $ARGUMENTS")`
42
+
43
+ **Flags:**
44
+
45
+ `--next`: chain-to-completion with
46
+ propagation — on a PASS verdict, hand the task back to `sp:next-router` to advance and re-invoke
47
+ until done or a gate stops it. The `testing → done` transition is the chain's first hop. A PARTIAL
48
+ or FAIL verdict halts the chain (task stays `testing` as review-pending). **was: `--next` chain-ish (undefined formally).**
@@ -0,0 +1,72 @@
1
+ ---
2
+ description: Verify a batch of tasks against their requirements and Acceptance Criteria — batch traceability check producing per-task verdicts and a summary report
3
+ argument-hint: "--tasks <selector> [--feature <id>] [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--json] [--skip-shippable] [--worktree [<name>]]"
4
+ allowed-tools: ["Bash", "Read", "Skill"]
5
+ ---
6
+
7
+ # Dev Verifyall
8
+
9
+ Wraps the **sp:spur-dev** and **sp:code-verification** skills.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `--tasks` `<selector>` | Task selector to verify. | required |
16
+ | `--feature` `<id>` | Restrict to a feature. | omitted |
17
+ | `--agent` `<inline\|auto\|name>` | Who runs each verification. | inline |
18
+ | `--fix` `<none\|blockers-first\|all>` | Auto-fix policy on findings. | none |
19
+ | `--focus` `<lens>` | Verification lens. | omitted |
20
+ | `--bdd` | Run BDD scenarios. | off |
21
+ | `--auto` | Skip objective HITL gates. | off |
22
+ | `--force` | Re-run even if already verified. | off |
23
+ | `--next` | Hand off to the next-router on success. | off |
24
+ | `--json` | Emit structured JSON. | off |
25
+ | `--skip-shippable` | Compatibility alias for --skip-shipable; skip the shippable gate. | off |
26
+ | `--worktree` `[<name>]` | Run the batch in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. | off |
27
+
28
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
29
+
30
+ ## Usage
31
+
32
+ ```
33
+ /sp:dev-verifyall --tasks <selector> [--feature <id>] [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--json] [--skip-shippable] [--worktree [<name>]]
34
+ ```
35
+
36
+ Flags: `--tasks <selector>` (required unless `--feature`), `--feature <id>` (sugar for
37
+ `feature:<id>`), shared verify flags (`--agent`, `--fix`,
38
+ `--focus`, `--bdd`,
39
+ `--auto`, `--force`),
40
+ `--next` (per-task lifecycle chaining — see below),
41
+ `--json`, `--skip-shippable`, `--worktree` `[<name>]` (run the batch in an isolated git worktree — FF-merge
42
+ onto the base ref on full success, retain intact on any failure/halt/non-FF; bare form creates a
43
+ fresh tree, `<name>` form adopts an existing worktree by name/path/branch; see
44
+ `execution-batch.md` § Worktree isolation).
45
+ **`--worktree` corpus visibility.** While the batch runs in a worktree, corpus writes (task
46
+ statuses, verdicts) land in the worktree copy; your main tree still shows pre-run statuses until
47
+ the FF-merge on success. Expected, not a bug.
48
+
49
+ **`--next` (per-task lifecycle chaining):** `--next`
50
+ is chain-to-completion with propagation. For each task whose verdict is **PASS**, the chain's first
51
+ hop transitions `testing → done` through the FSM with the `--strict-core` Review L3 guard honored;
52
+ a task whose verdict is **PARTIAL** or **FAIL** does **not** transition (it stays `testing` as
53
+ review-pending) — that task's chain halts, reporting the verdict. One task's non-PASS never blocks
54
+ another task's transition — each task's verdict is its own, and each task's chain is independent.
55
+ Transitions run **before** the shippable gate (R3), so `spur feature check` observes the final
56
+ statuses. Do not confuse with `--keep-going`
57
+ (batch failure policy, dev-runall) or `--continue`
58
+ (resume from checkpoint) — see the glossary. **was: `--next` chain-ish (per-task transition, undefined formally).**
59
+
60
+ **Shippable readiness** (feature-level): when `--fix all` and a feature context exists
61
+ (`--feature` or a unique shared `feature_id` across the set), after all per-task verifies the
62
+ orchestrator runs **one** `spur feature check <id>` and emits `Shippable: PASS|FAIL|N/A`.
63
+ A FAIL means the batch is **not clean** (rollup at least PARTIAL) even if every task AC PASSed.
64
+ Default **on** with `--fix all`. Opt out only with **`--skip-shippable`** (alias `--skip-shipable`).
65
+ Without `--fix all`, shippable is not evaluated (optional note: use `--fix all` for ship gate).
66
+
67
+ ## Implementation
68
+
69
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
70
+ - Batch orchestration: `Skill(skill="sp:spur-dev", args="verifyall $ARGUMENTS")`
71
+ - Per-task verification (inner): `Skill(skill="sp:code-verification", args="verify <wbs> $SHARED_FLAGS")`
72
+ - Shippable gate: once after the batch (same skill § Shippable readiness gate)
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Wrap up a single completed task — learnings, metrics, doc-sync, optional feature transition and branch cleanup
3
+ argument-hint: "<wbs> [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]"
4
+ allowed-tools: ["Bash", "Read", "AskUserQuestion"]
5
+ ---
6
+
7
+ # Dev Wrap
8
+
9
+ Wraps the **wrapup-pipeline.yaml** workflow.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `<wbs>` | Task WBS to wrap. | required |
16
+ | `--agent` `<inline\|auto\|name>` | Who runs the wrap's model-bearing steps. Wrap is workflow-backed: omit/`inline` resolves to `agent.default` (objective trigger 3 — durable auditable run record required); `auto` tier-resolves an executor; a name pins that executor into `vars.agent`. | agent.default |
17
+ | `--auto` | Skip objective HITL gates. | off |
18
+ | `--merge` | Merge the wrap branch. | off |
19
+ | `--dry-run` | Render the wrap without writing. | off |
20
+
21
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
22
+
23
+ ## Usage
24
+
25
+ /sp:dev-wrap <wbs> [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]
26
+
27
+ ## Implementation
28
+
29
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
30
+ - Wrap stays **workflow-backed** — `spur workflow run .spur/workflows/wrapup-pipeline.yaml` is the only implementation; there is no inline wrap driver.
31
+ - Resolve the executor **before** launching the workflow:
32
+ - `--agent <name>` → pass the name unchanged into `vars.agent`.
33
+ - `--agent auto` → tier-resolve a concrete executor first, then merge it into `vars.agent`.
34
+ - omit/`--agent inline` → resolve to `agent.default` (the documented headless resolution of `inline`).
35
+ - Emit a pre-dispatch notice naming the override before `spur workflow run`, exactly:
36
+ `execution surface: subprocess`, `reason: trigger 3 — durable auditable run record required`, `requested agent: inline|auto|<name>`, `executor: agent.default|<resolved-name>`.
37
+ - The wrap workflow still creates its durable run record (task_run_links / trace) — the notice reports the override, it does not change the workflow.
38
+
39
+ ```bash
40
+ AGENT=… # resolved above: agent.default for inline/omitted, tier-resolved for auto, unchanged for <name>
41
+ echo "execution surface: subprocess; reason: trigger 3 — durable auditable run record required; requested agent: <inline|auto|name>; executor: $AGENT"
42
+ VARS=$(jq -nc --arg tasks "[\"$WBS\"]" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
43
+ '{tasks:$tasks, agent:$agent, profile:$profile, merge:$merge}')
44
+ spur workflow run .spur/workflows/wrapup-pipeline.yaml --vars "$VARS" [--dry-run]
45
+ ```
46
+
47
+ The executor resolution is described in the bullets above; the snippet's `AGENT` variable carries
48
+ the resolved name (`agent.default` for omit/`inline`).
@@ -0,0 +1,51 @@
1
+ ---
2
+ description: Wrap up a batch of completed tasks — learnings, metrics, doc-sync, feature transition, optional branch cleanup
3
+ argument-hint: "[--since <iso-date>] [--feature <id>] [--status <s>] [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]"
4
+ allowed-tools: ["Bash", "Read", "AskUserQuestion"]
5
+ ---
6
+
7
+ # Dev Wrapall
8
+
9
+ Wraps the **wrapup-pipeline.yaml** workflow.
10
+
11
+ ## Argument Flags
12
+
13
+ | Flag | Description | Default |
14
+ | --- | --- | --- |
15
+ | `--since` `<iso-date>` | Wrap tasks completed since a date. | configured |
16
+ | `--feature` `<id>` | Wrap tasks in a feature. | omitted |
17
+ | `--status` `<s>` | Only wrap tasks in a status. | done |
18
+ | `--agent` `<inline\|auto\|name>` | Who runs the wrap's model-bearing steps. Wrap is workflow-backed: omit/`inline` resolves to `agent.default` (objective trigger 3 — durable auditable run record required); `auto` tier-resolves an executor; a name pins that executor into `vars.agent`. | agent.default |
19
+ | `--auto` | Skip objective HITL gates. | off |
20
+ | `--merge` | Merge wrap branches. | off |
21
+ | `--dry-run` | Render wraps without writing. | off |
22
+
23
+ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
24
+
25
+ ## Usage
26
+
27
+ /sp:dev-wrapall [--since <iso-date>] [--feature <id>] [--status <s>] [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]
28
+
29
+ ## Implementation
30
+
31
+ - Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
32
+ - Wrap stays **workflow-backed** — `spur workflow run .spur/workflows/wrapup-pipeline.yaml` is the only implementation; there is no inline wrap driver.
33
+ - Resolve the executor **before** launching the workflow:
34
+ - `--agent <name>` → pass the name unchanged into `vars.agent`.
35
+ - `--agent auto` → tier-resolve a concrete executor first, then merge it into `vars.agent`.
36
+ - omit/`--agent inline` → resolve to `agent.default` (the documented headless resolution of `inline`).
37
+ - Emit a pre-dispatch notice naming the override before `spur workflow run`, exactly:
38
+ `execution surface: subprocess`, `reason: trigger 3 — durable auditable run record required`, `requested agent: inline|auto|<name>`, `executor: agent.default|<resolved-name>`.
39
+ - The wrap workflow still creates its durable run record — the notice reports the override, it does not change the workflow.
40
+
41
+ ```bash
42
+ AGENT=… # resolved above: agent.default for inline/omitted, tier-resolved for auto, unchanged for <name>
43
+ echo "execution surface: subprocess; reason: trigger 3 — durable auditable run record required; requested agent: <inline|auto|name>; executor: $AGENT"
44
+ VARS=$(jq -nc --arg tasks "$TASKS" --arg feature "$FEATURE" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
45
+ '{tasks:$tasks, feature:$feature, agent:$agent, profile:$profile, merge:$merge}')
46
+ spur workflow run .spur/workflows/wrapup-pipeline.yaml --vars "$VARS" [--dry-run]
47
+ ```
48
+
49
+ The executor resolution is described in the bullets above; the snippet's `AGENT` variable carries
50
+ the resolved name (`agent.default` for omit/`inline`).
51
+
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Author a validated, smoke-tested constraint rule
3
+ argument-hint: "\"<description>\" [--file <path>] [--preset <target>]"
4
+ allowed-tools: ["Bash", "Read", "Write", "Skill"]
5
+ ---
6
+
7
+ # Rule Add
8
+
9
+ Wraps the **sp:spur-cli** skill.
10
+
11
+ ## Usage
12
+
13
+ /sp:rule-add "<description>" [--file <path>] [--preset <target>]
14
+
15
+ ## Implementation
16
+
17
+ - `Skill(skill="sp:spur-cli", args="rule add $ARGUMENTS")`
18
+
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Refine a constraint rule or preset, then re-verify it
3
+ argument-hint: "<rule-file-or-preset> [--intent \"<goal>\"] [--severity <sev>] [--scope <glob>] [--exempt <path>] [--disable <id>] [--override <id>] [--dry-run]"
4
+ allowed-tools: ["Bash", "Read", "Edit", "Skill"]
5
+ ---
6
+
7
+ # Rule Refine
8
+
9
+ Wraps the **sp:spur-cli** skill.
10
+
11
+ ## Usage
12
+
13
+ /sp:rule-refine <rule-file-or-preset> [--intent "<goal>"] [--severity <sev>] [--scope <glob>] [--exempt <path>] [--disable <id>] [--override <id>] [--dry-run]
14
+
15
+ ## Implementation
16
+
17
+ - `Skill(skill="sp:spur-cli", args="rule refine $ARGUMENTS")`
18
+
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Discover recurring anti-patterns worth codifying as rules
3
+ argument-hint: "[<path-or-glob>]"
4
+ allowed-tools: ["Bash", "Read", "Grep", "Glob", "Skill"]
5
+ ---
6
+
7
+ # Rule Scan
8
+
9
+ Wraps the **sp:spur-cli** skill.
10
+
11
+ ## Usage
12
+
13
+ /sp:rule-scan [<path-or-glob>]
14
+
15
+ ## Implementation
16
+
17
+ - `Skill(skill="sp:spur-cli", args="rule scan $ARGUMENTS")`
18
+
@@ -0,0 +1,22 @@
1
+ ---
2
+ description: Initialize a new Spur project — scaffold config + docs, then customize for this project's stack and scope
3
+ argument-hint: "[--name <name>] [--minimal] [--force]"
4
+ allowed-tools: ["Bash", "Read", "Write", "Skill"]
5
+ ---
6
+
7
+ # Spur Init
8
+
9
+ Wraps **spur init** (deterministic scaffold) + **sp:doc-evolve** (project customization).
10
+
11
+ ## Usage
12
+
13
+ /sp:spur-init [--name <name>] [--minimal] [--force]
14
+
15
+ ## Implementation
16
+
17
+ ```bash
18
+ spur init --json $ARGUMENTS
19
+ ```
20
+ - Parse the JSON envelope once and retain it as `scaffoldResult`; summarize its created/skipped files in one block.
21
+ - Customize (Phase 2): `Skill(skill="sp:doc-evolve", args="customize --project <scaffoldResult.project>")`.
22
+ Reuse the retained project value; do not rerun init or replay its create/exists transcript.
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Author a validated, dry-run-verified workflow in the right execution mode
3
+ argument-hint: "\"<description>\" [--kind <state-machine|transition-flow>] [--file <path>]"
4
+ allowed-tools: ["Bash", "Read", "Write", "Skill"]
5
+ ---
6
+
7
+ # Workflow Add
8
+
9
+ Wraps the **sp:spur-cli** skill.
10
+
11
+ ## Usage
12
+
13
+ /sp:workflow-add "<description>" [--kind <state-machine|transition-flow>] [--file <path>]
14
+
15
+ ## Implementation
16
+
17
+ - `Skill(skill="sp:spur-cli", args="workflow add $ARGUMENTS")`
18
+
@@ -0,0 +1,18 @@
1
+ ---
2
+ description: Refine an existing workflow, then re-validate and re-dry-run it
3
+ argument-hint: "<workflow-file> [--intent \"<goal>\"] [--dry-run]"
4
+ allowed-tools: ["Bash", "Read", "Edit", "Skill"]
5
+ ---
6
+
7
+ # Workflow Refine
8
+
9
+ Wraps the **sp:spur-cli** skill.
10
+
11
+ ## Usage
12
+
13
+ /sp:workflow-refine <workflow-file> [--intent "<goal>"] [--dry-run]
14
+
15
+ ## Implementation
16
+
17
+ - `Skill(skill="sp:spur-cli", args="workflow refine $ARGUMENTS")`
18
+
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Shared host-agent identification helpers — the **only** host-agent detection path
3
+ * in the sp plugin hooks.
4
+ *
5
+ * Why this file exists (task 0480 R4): `resolveAgentHint()` previously existed in two
6
+ * places — `context-session-start.ts` (4-candidate chain, `undefined` fallback) and
7
+ * `pi/guard-extension.ts` (3-candidate chain missing `CLAUDE_CODE_ENTRYPOINT` and
8
+ * `CLAUDE_MODEL`, `'pi'` fallback). The divergence let the two layers reach opposite
9
+ * conclusions about whether the calling agent is identifiable. Consolidating here
10
+ * guarantees both hooks use the same candidate list and cannot silently diverge again.
11
+ *
12
+ * **Do not duplicate this candidate chain elsewhere.** New host-agent signals are
13
+ * added to the arrays below, not to per-hook copies.
14
+ */
15
+
16
+ /**
17
+ * Best-effort agent name from env (never required).
18
+ *
19
+ * Candidate chain (checked in order, first non-empty string wins):
20
+ * 1. `SPUR_AGENT` — explicit override
21
+ * 2. `CLAUDE_CODE_ENTRYPOINT` — Claude Code sets this to its entrypoint path
22
+ * 3. `TERM_PROGRAM` — terminal identifier (e.g. `claude`, `ghostty`)
23
+ * 4. `SPUR_DEFAULT_AGENT` — configured default agent
24
+ *
25
+ * @param env - environment record (defaults to `process.env`)
26
+ * @param fallback - value returned when no candidate matches (defaults to `undefined`)
27
+ */
28
+ export function resolveAgentHint(
29
+ env: NodeJS.ProcessEnv = process.env,
30
+ fallback: string | undefined = undefined,
31
+ ): string | undefined {
32
+ const candidates = [env.SPUR_AGENT, env.CLAUDE_CODE_ENTRYPOINT, env.TERM_PROGRAM, env.SPUR_DEFAULT_AGENT];
33
+ for (const c of candidates) {
34
+ if (typeof c === 'string' && c.trim()) return c.trim();
35
+ }
36
+ return fallback;
37
+ }
38
+
39
+ /**
40
+ * Best-effort model id from env (never required).
41
+ *
42
+ * Candidate chain (checked in order, first non-empty string wins):
43
+ * 1. `SPUR_MODEL` — explicit override
44
+ * 2. `ANTHROPIC_MODEL` — Anthropic API model
45
+ * 3. `OPENAI_MODEL` — OpenAI API model
46
+ * 4. `CLAUDE_MODEL` — Claude Code model setting
47
+ *
48
+ * @param env - environment record (defaults to `process.env`)
49
+ * @param fallback - value returned when no candidate matches (defaults to `undefined`)
50
+ */
51
+ export function resolveModelHint(
52
+ env: NodeJS.ProcessEnv = process.env,
53
+ fallback: string | undefined = undefined,
54
+ ): string | undefined {
55
+ const candidates = [env.SPUR_MODEL, env.ANTHROPIC_MODEL, env.OPENAI_MODEL, env.CLAUDE_MODEL];
56
+ for (const c of candidates) {
57
+ if (typeof c === 'string' && c.trim()) return c.trim();
58
+ }
59
+ return fallback;
60
+ }