@gobing-ai/spur 0.3.41 → 0.3.42
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/.claude-plugin/marketplace.json +15 -0
- package/README.md +15 -1
- package/config/templates/AGENTS.md +5 -3
- package/config/workflows/task-pipeline.yaml +103 -12
- package/package.json +15 -12
- package/plugins/README.md +655 -0
- package/plugins/sp/README.md +621 -0
- package/plugins/sp/agents/expert-spur.md +109 -0
- package/plugins/sp/agents/super-coder.md +126 -0
- package/plugins/sp/agents/super-planner.md +283 -0
- package/plugins/sp/agents/super-reviewer.md +154 -0
- package/plugins/sp/commands/dev-arch.md +30 -0
- package/plugins/sp/commands/dev-brainstorm.md +40 -0
- package/plugins/sp/commands/dev-changelog.md +28 -0
- package/plugins/sp/commands/dev-daily.md +29 -0
- package/plugins/sp/commands/dev-debug.md +29 -0
- package/plugins/sp/commands/dev-dogfood.md +33 -0
- package/plugins/sp/commands/dev-featurechange.md +130 -0
- package/plugins/sp/commands/dev-find-conflict.md +51 -0
- package/plugins/sp/commands/dev-find-issue.md +76 -0
- package/plugins/sp/commands/dev-find-next.md +60 -0
- package/plugins/sp/commands/dev-fixall.md +33 -0
- package/plugins/sp/commands/dev-gitmsg.md +28 -0
- package/plugins/sp/commands/dev-gtd.md +97 -0
- package/plugins/sp/commands/dev-handover.md +26 -0
- package/plugins/sp/commands/dev-idea.md +50 -0
- package/plugins/sp/commands/dev-next.md +31 -0
- package/plugins/sp/commands/dev-parallel.md +30 -0
- package/plugins/sp/commands/dev-plan.md +46 -0
- package/plugins/sp/commands/dev-refine.md +48 -0
- package/plugins/sp/commands/dev-refineall.md +65 -0
- package/plugins/sp/commands/dev-refresh.md +32 -0
- package/plugins/sp/commands/dev-reverse.md +32 -0
- package/plugins/sp/commands/dev-review.md +31 -0
- package/plugins/sp/commands/dev-run.md +63 -0
- package/plugins/sp/commands/dev-runall.md +80 -0
- package/plugins/sp/commands/dev-simplify.md +39 -0
- package/plugins/sp/commands/dev-unit.md +29 -0
- package/plugins/sp/commands/dev-verify.md +48 -0
- package/plugins/sp/commands/dev-verifyall.md +72 -0
- package/plugins/sp/commands/dev-wrap.md +30 -0
- package/plugins/sp/commands/dev-wrapall.md +33 -0
- package/plugins/sp/commands/rule-add.md +18 -0
- package/plugins/sp/commands/rule-refine.md +18 -0
- package/plugins/sp/commands/rule-scan.md +18 -0
- package/plugins/sp/commands/spur-init.md +22 -0
- package/plugins/sp/commands/workflow-add.md +18 -0
- package/plugins/sp/commands/workflow-refine.md +18 -0
- package/plugins/sp/hooks/agent-hint.ts +60 -0
- package/plugins/sp/hooks/careful-guard.ts +147 -0
- package/plugins/sp/hooks/context-post-tool.ts +325 -0
- package/plugins/sp/hooks/context-session-start.ts +182 -0
- package/plugins/sp/hooks/context-session-stop.ts +95 -0
- package/plugins/sp/hooks/hooks.json +51 -0
- package/plugins/sp/hooks/pi/guard-extension.ts +341 -0
- package/plugins/sp/hooks/task-write-guard.ts +84 -0
- package/plugins/sp/plugin.json +8 -0
- package/plugins/sp/scripts/batch-preflight.ts +204 -0
- package/plugins/sp/scripts/daily-summary/daily-summary.ts +606 -0
- package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +363 -0
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +168 -0
- package/plugins/sp/scripts/feature-sync-bounded.ts +451 -0
- package/plugins/sp/scripts/stage-registry-adapter.ts +1341 -0
- package/plugins/sp/scripts/task-size-precheck.ts +202 -0
- package/plugins/sp/scripts/validate-commands.ts +651 -0
- package/plugins/sp/scripts/validate-flag-contracts.ts +875 -0
- package/plugins/sp/skills/brainstorm/SKILL.md +361 -0
- package/plugins/sp/skills/brainstorm/agents/openai.yaml +14 -0
- package/plugins/sp/skills/brainstorm/examples/ideation-example.md +209 -0
- package/plugins/sp/skills/brainstorm/metadata.openclaw +7 -0
- package/plugins/sp/skills/brainstorm/references/grilling-interview.md +68 -0
- package/plugins/sp/skills/brainstorm/references/workflows.md +255 -0
- package/plugins/sp/skills/branch-workflow/SKILL.md +109 -0
- package/plugins/sp/skills/branch-workflow/references/branch-lifecycle.md +69 -0
- package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +100 -0
- package/plugins/sp/skills/code-implementation/SKILL.md +176 -0
- package/plugins/sp/skills/code-implementation/references/debugging.md +64 -0
- package/plugins/sp/skills/code-implementation/references/implementation-patterns.md +113 -0
- package/plugins/sp/skills/code-improvement/SKILL.md +231 -0
- package/plugins/sp/skills/code-improvement/references/deepening-signals.md +205 -0
- package/plugins/sp/skills/code-review/SKILL.md +112 -0
- package/plugins/sp/skills/code-review/references/receiving-code-review.md +70 -0
- package/plugins/sp/skills/code-review/references/review-lenses.md +117 -0
- package/plugins/sp/skills/code-review/references/self-review-checklist.md +53 -0
- package/plugins/sp/skills/code-review/references/verification-before-completion.md +68 -0
- package/plugins/sp/skills/code-simplification/SKILL.md +225 -0
- package/plugins/sp/skills/code-testing/SKILL.md +108 -0
- package/plugins/sp/skills/code-testing/references/stacks/bun-ts.md +165 -0
- package/plugins/sp/skills/code-testing/references/stacks/go.md +88 -0
- package/plugins/sp/skills/code-testing/references/stacks/python.md +117 -0
- package/plugins/sp/skills/code-testing/references/test-loop-breaker.md +37 -0
- package/plugins/sp/skills/code-testing/references/test-output-discipline.md +52 -0
- package/plugins/sp/skills/code-testing/references/unit-testing.md +212 -0
- package/plugins/sp/skills/code-verification/SKILL.md +535 -0
- package/plugins/sp/skills/code-verification/references/code-improvement.md +39 -0
- package/plugins/sp/skills/code-verification/references/secu-review.md +94 -0
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +141 -0
- package/plugins/sp/skills/conflict-finding/SKILL.md +254 -0
- package/plugins/sp/skills/conflict-finding/references/authority-resolution.md +258 -0
- package/plugins/sp/skills/conflict-finding/references/comparison-protocol.md +277 -0
- package/plugins/sp/skills/conflict-finding/references/finding-contract.md +346 -0
- package/plugins/sp/skills/conflict-finding/references/remediation-routing.md +276 -0
- package/plugins/sp/skills/daily-summary/SKILL.md +171 -0
- package/plugins/sp/skills/daily-summary/agents/openai.yaml +13 -0
- package/plugins/sp/skills/doc-evolve/SKILL.md +175 -0
- package/plugins/sp/skills/doc-evolve/references/operations.md +93 -0
- package/plugins/sp/skills/dogfood-testing/SKILL.md +608 -0
- package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +211 -0
- package/plugins/sp/skills/dogfood-testing/references/report-template.md +351 -0
- package/plugins/sp/skills/doubt-driven-development/SKILL.md +136 -0
- package/plugins/sp/skills/functional-review/SKILL.md +364 -0
- package/plugins/sp/skills/functional-review/references/verdict-schema.md +133 -0
- package/plugins/sp/skills/indexed-context/SKILL.md +164 -0
- package/plugins/sp/skills/issue-finding/SKILL.md +424 -0
- package/plugins/sp/skills/issue-finding/agents/openai.yaml +15 -0
- package/plugins/sp/skills/issue-finding/examples/expected-findings.json +27 -0
- package/plugins/sp/skills/issue-finding/examples/session-test-loop.jsonl +23 -0
- package/plugins/sp/skills/issue-finding/references/session-formats.md +121 -0
- package/plugins/sp/skills/next-feature/SKILL.md +125 -0
- package/plugins/sp/skills/next-feature/references/handoff-routing.md +92 -0
- package/plugins/sp/skills/next-feature/references/proposal-contract.md +49 -0
- package/plugins/sp/skills/next-feature/references/ranking-rubric.md +52 -0
- package/plugins/sp/skills/next-feature/references/signal-derivation.md +67 -0
- package/plugins/sp/skills/next-router/SKILL.md +181 -0
- package/plugins/sp/skills/next-router/references/messages.md +90 -0
- package/plugins/sp/skills/next-router/references/routing-table.md +216 -0
- package/plugins/sp/skills/parallel-execution/SKILL.md +148 -0
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +100 -0
- package/plugins/sp/skills/parallel-execution/references/fan-out-patterns.md +101 -0
- package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +94 -0
- package/plugins/sp/skills/reverse-engineering/SKILL.md +375 -0
- package/plugins/sp/skills/reverse-engineering/agents/openai.yaml +18 -0
- package/plugins/sp/skills/source-driven-development/SKILL.md +124 -0
- package/plugins/sp/skills/spec-decomposition/SKILL.md +117 -0
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +539 -0
- package/plugins/sp/skills/spur-cli/SKILL.md +133 -0
- package/plugins/sp/skills/spur-cli/references/agent.md +179 -0
- package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +82 -0
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +177 -0
- package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +84 -0
- package/plugins/sp/skills/spur-cli/references/features/verbs.md +122 -0
- package/plugins/sp/skills/spur-cli/references/features.md +234 -0
- package/plugins/sp/skills/spur-cli/references/init.md +119 -0
- package/plugins/sp/skills/spur-cli/references/message.md +98 -0
- package/plugins/sp/skills/spur-cli/references/rules/authoring-rules.md +212 -0
- package/plugins/sp/skills/spur-cli/references/rules/fine-tuning.md +148 -0
- package/plugins/sp/skills/spur-cli/references/rules/operations.md +228 -0
- package/plugins/sp/skills/spur-cli/references/rules/validation-and-extension.md +129 -0
- package/plugins/sp/skills/spur-cli/references/rules.md +209 -0
- package/plugins/sp/skills/spur-cli/references/serve.md +58 -0
- package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +98 -0
- package/plugins/sp/skills/spur-cli/references/tasks/section-editing.md +95 -0
- package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +361 -0
- package/plugins/sp/skills/spur-cli/references/tasks.md +278 -0
- package/plugins/sp/skills/spur-cli/references/team.md +133 -0
- package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +226 -0
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +211 -0
- package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +129 -0
- package/plugins/sp/skills/spur-cli/references/workflows.md +355 -0
- package/plugins/sp/skills/spur-dev/SKILL.md +224 -0
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +196 -0
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +664 -0
- package/plugins/sp/skills/spur-dev/references/decision-brief.md +80 -0
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +546 -0
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +164 -0
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +727 -0
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +350 -0
- package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +191 -0
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +417 -0
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +171 -0
- package/plugins/sp/skills/spur-dev/references/glossary.md +95 -0
- package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +80 -0
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +88 -0
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +302 -0
- package/plugins/sp/skills/spur-dev/references/product-planning.md +206 -0
- package/plugins/sp/skills/spur-dev/references/section-batching.md +24 -0
- package/plugins/sp/skills/sys-architecture/SKILL.md +155 -0
- package/plugins/sp/skills/sys-architecture/references/decision-method.md +137 -0
- package/plugins/sp/skills/sys-architecture/references/upkeep-survey.md +75 -0
- package/plugins/sp/skills/sys-debugging/SKILL.md +228 -0
- package/plugins/sp/skills/sys-debugging/references/debugging-protocol.md +62 -0
- package/plugins/sp/skills/test-driven-development/SKILL.md +248 -0
- package/plugins/sp/skills/wayfinder/SKILL.md +292 -0
- package/spur.js +6093 -5180
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feature-verbs
|
|
3
|
+
description: Per-verb flag detail, JSON shapes, and the four check layers for spur feature.
|
|
4
|
+
see_also:
|
|
5
|
+
- spur-cli
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# `spur feature` — verb detail
|
|
9
|
+
|
|
10
|
+
Ground truth for every `spur feature` verb. The CLI is the source of behavior; this mirrors it. If
|
|
11
|
+
a flag isn't listed, it doesn't exist.
|
|
12
|
+
|
|
13
|
+
## `create <name>`
|
|
14
|
+
|
|
15
|
+
Allocate a feature with a hierarchical ID (DD-14) under the create-lock (serialized allocation;
|
|
16
|
+
fail-loud).
|
|
17
|
+
|
|
18
|
+
| Flag | Effect |
|
|
19
|
+
| ---- | ------ |
|
|
20
|
+
| `--parent <id>` | Child gets the next free digit 1–9 under `<id>`. Omit for a top-level letter ID. |
|
|
21
|
+
| `--folder <path>` | Target a non-default features folder. |
|
|
22
|
+
| `--json` | Emit `{ ref: { id, filePath } }`. |
|
|
23
|
+
|
|
24
|
+
## `show <id>` / `list`
|
|
25
|
+
|
|
26
|
+
- `show <id>` prints frontmatter + body.
|
|
27
|
+
- `list` filters by `--status <s>` and/or `--priority <p>`. `--json` emits an array.
|
|
28
|
+
|
|
29
|
+
## `update <id> [status] | --field <key> --value <v> | --section <name> --from-file <path>`
|
|
30
|
+
|
|
31
|
+
Multi-mode. At least one of status, field pair, or section pair is required (exit `2` otherwise).
|
|
32
|
+
|
|
33
|
+
- **Status** (positional): legal transition over `backlog → active → verifying → blocked → done →
|
|
34
|
+
cancelled`. `verifying` is the AC-traceability gate. **One active goal** corpus-wide (enforced by
|
|
35
|
+
`check`).
|
|
36
|
+
- **Field** (`--field` requires `--value`): set a single frontmatter scalar, e.g.
|
|
37
|
+
`--field priority --value P1`.
|
|
38
|
+
- **Section** (`--section` **requires** `--from-file`): replace the entire named section body from a
|
|
39
|
+
file (same file-wins contract as `spur task update --section`).
|
|
40
|
+
|
|
41
|
+
## `advance <id>`
|
|
42
|
+
|
|
43
|
+
Walk the legal **forward** lifecycle path hop-by-hop until a target status.
|
|
44
|
+
|
|
45
|
+
| Flag | Effect |
|
|
46
|
+
| ---- | ------ |
|
|
47
|
+
| `--to <status>` | Target status (default `done`). Forward path: `backlog → active → verifying → done`. |
|
|
48
|
+
| `--folder <path>` | Custom features folder. |
|
|
49
|
+
| `--json` | Emit `{ id, status, hops: [{ from, to }, …] }`. |
|
|
50
|
+
|
|
51
|
+
No-op (success) when already at the target. Exit `1` if the feature is missing or a hop is illegal.
|
|
52
|
+
|
|
53
|
+
## `move <id>`
|
|
54
|
+
|
|
55
|
+
Re-parent a subtree. `--parent <new>` cascade-renames `<id>` and **every descendant** to the new
|
|
56
|
+
position; omit `--parent` to lift the subtree to a top-level group. Use this for any structural
|
|
57
|
+
change — never hand-edit an ID, which would orphan descendants and break edges.
|
|
58
|
+
|
|
59
|
+
| Flag | Effect |
|
|
60
|
+
| ---- | ------ |
|
|
61
|
+
| `--parent <id>` | New parent (omit → top-level group). |
|
|
62
|
+
| `--dry-run` | Show old→new ID map + affected tasks without writing. |
|
|
63
|
+
| `--folder` / `--json` | Standard. |
|
|
64
|
+
|
|
65
|
+
## `refresh`
|
|
66
|
+
|
|
67
|
+
Rebuild **derived docs only**: `INDEX.md` and each feature's `## Tasks` auto-gen region from task
|
|
68
|
+
`feature_id` edges (WBS / title / status). **Files win** for that region; Goal/Scope/AC and feature
|
|
69
|
+
`status` are untouched. Run after task create/link/done or hand-edits that leave the roster stale.
|
|
70
|
+
|
|
71
|
+
| Flag | Effect |
|
|
72
|
+
| ---- | ------ |
|
|
73
|
+
| `--feature <id>` | Rewrite only that feature's `## Tasks` (INDEX.md still fully regenerated). |
|
|
74
|
+
| `--folder` / `--json` | Standard. |
|
|
75
|
+
|
|
76
|
+
**vs `sync`:** `refresh` never changes lifecycle status and never runs transition guards.
|
|
77
|
+
|
|
78
|
+
## `sync [id]`
|
|
79
|
+
|
|
80
|
+
Align a feature's **frontmatter status** with linked task states. Derives a proposal and, unless
|
|
81
|
+
`--dry-run`, applies legal lifecycle hops (e.g. all tasks terminal → toward `done`; reopened work →
|
|
82
|
+
reopen). Real transitions — gates (dogfood for self-referential workflow features, one-active-goal,
|
|
83
|
+
L4 readiness) may deny a hop.
|
|
84
|
+
|
|
85
|
+
| Flag | Effect |
|
|
86
|
+
| ---- | ------ |
|
|
87
|
+
| `[id]` / `--all` | One feature, or every feature that has linked tasks (one required). |
|
|
88
|
+
| `--dry-run` | Report proposal only; no write. |
|
|
89
|
+
| `--force` | Apply a *reopen* (backward) proposal without interactive confirmation. |
|
|
90
|
+
| `--folder` / `--json` | Standard. JSON: `{ proposal, applied, appliedHops[] }`. |
|
|
91
|
+
|
|
92
|
+
**vs `refresh`:** `sync` never rewrites INDEX.md or `## Tasks` tables.
|
|
93
|
+
|
|
94
|
+
## `check [id]`
|
|
95
|
+
|
|
96
|
+
The four-layer validator. Bare = whole tree; with an ID = one feature. `--strict` elevates warnings
|
|
97
|
+
to failures. `--json` emits per-feature findings.
|
|
98
|
+
|
|
99
|
+
| Layer | Checks | Severity |
|
|
100
|
+
| ----- | ------ | -------- |
|
|
101
|
+
| **L1** | Zod frontmatter schema | hard error |
|
|
102
|
+
| **L2** | Section-Status-Matrix presence (required sections per status) | warning-first; `gate:true` sections are hard |
|
|
103
|
+
| **L3** | Format rules — BDD AC syntax, one-active-goal, children-limit (≤ 9, corpus-derived) | mixed |
|
|
104
|
+
| **L4** | Traceability — incoming `feature_id` edges, orphan scenarios, coverage orphans, `verifying` readiness | warning-first |
|
|
105
|
+
|
|
106
|
+
A finding carries `{ layer: 'L1'|'L2'|'L3'|'L4', section, severity, message }`. Parse the JSON to
|
|
107
|
+
answer "is H2 ready for `verifying`?" or "which scenarios have no task?" — the rules are CLI code,
|
|
108
|
+
not prose to restate. This is the gate `sp:spur-dev`'s planning half loops on.
|
|
109
|
+
|
|
110
|
+
## Command surface (quick)
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
spur feature create <name> [--parent <id>] [--folder] [--json]
|
|
114
|
+
spur feature show <id> [--folder] [--json]
|
|
115
|
+
spur feature update <id> [status] [--field <k> --value <v>] [--section <n> --from-file <p>] [--folder] [--json]
|
|
116
|
+
spur feature advance <id> [--to <status>] [--folder] [--json]
|
|
117
|
+
spur feature list [--status <s>] [--priority <p>] [--folder] [--json]
|
|
118
|
+
spur feature move <id> [--parent <id>] [--dry-run] [--folder] [--json]
|
|
119
|
+
spur feature refresh [--feature <id>] [--folder] [--json]
|
|
120
|
+
spur feature sync [id] | --all [--dry-run] [--force] [--folder] [--json]
|
|
121
|
+
spur feature check [id] [--strict] [--folder] [--json]
|
|
122
|
+
```
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spur-cli-features
|
|
3
|
+
description: "spur-cli noun reference: operate `spur feature` as the project's feature CLI — author features with hierarchical IDs (DD-14), write acceptance criteria the validator and decomposition both read, drive the feature lifecycle, move subtrees, and keep traceability honest. The intent-and-AC side of the planning layer that the spine orchestrates against."
|
|
4
|
+
see_also:
|
|
5
|
+
- spur-cli
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# spur feature — the feature CLI
|
|
9
|
+
|
|
10
|
+
`spur feature` is the CLI for the **feature tree** — the markdown feature files that capture intent
|
|
11
|
+
(`Goal` / `Scope`) and acceptance criteria, organized by hierarchical IDs (DD-14). Features are the
|
|
12
|
+
*why* and *what-done-looks-like*; tasks (see `spur task`) are the *how*.
|
|
13
|
+
|
|
14
|
+
This is a **companion reference**, not an orchestrator. It documents *what each verb is* and *how
|
|
15
|
+
to author features and AC well*. The end-to-end loop that turns a vague intake into a feature, AC,
|
|
16
|
+
and a decomposed task batch lives in **`sp:spur-dev`** — do not reimplement that loop here (R3).
|
|
17
|
+
When you need to *drive* planning, reach for `sp:spur-dev`; when you need to know *which verb does
|
|
18
|
+
what* or *how to write a scenario*, this skill.
|
|
19
|
+
|
|
20
|
+
## Verb map
|
|
21
|
+
|
|
22
|
+
| Verb | Purpose | Key flags |
|
|
23
|
+
| ---- | ------- | --------- |
|
|
24
|
+
| `create <name>` | Allocate a feature; assigns a hierarchical ID under the create-lock | `--parent <id>` `--folder` `--json` |
|
|
25
|
+
| `show <id>` | Print one feature's frontmatter + body | `--folder` `--json` |
|
|
26
|
+
| `update <id> [status]` | Lifecycle transition, scalar field set, **or** section replace | `--field <k> --value <v>` `--section <n> --from-file <p>` `--folder` `--json` |
|
|
27
|
+
| `advance <id>` | Walk forward along the legal lifecycle path to a target status | `--to <status>` (default `done`) `--folder` `--json` |
|
|
28
|
+
| `list` | List features, filtered | `--status <s>` `--priority <p>` `--folder` `--json` |
|
|
29
|
+
| `move <id>` | Re-parent a subtree (cascade-rename of descendants) | `--parent <id>` `--dry-run` `--folder` `--json` |
|
|
30
|
+
| `refresh` | Rebuild INDEX + each feature `## Tasks` table from task edges (**docs only**; no status change) | `--feature <id>` `--folder` `--json` |
|
|
31
|
+
| `check [id]` | Validate one feature / the tree; the 4-layer gate | `--strict` `--folder` `--json` |
|
|
32
|
+
| `sync [id]` | Align feature **lifecycle status** with linked task states (real transitions + guards) | `--all` `--dry-run` `--force` `--folder` `--json` |
|
|
33
|
+
|
|
34
|
+
**`refresh` vs `sync` (do not conflate):**
|
|
35
|
+
|
|
36
|
+
| Need | Verb |
|
|
37
|
+
| ---- | ---- |
|
|
38
|
+
| Stale `## Tasks` roster / INDEX after tasks finished or linked | `refresh` |
|
|
39
|
+
| Feature frontmatter `status` should follow task statuses | `sync` (preview with `--dry-run`) |
|
|
40
|
+
|
|
41
|
+
`refresh` never runs lifecycle gates. `sync` never rewrites the Tasks table — run both when you need both.
|
|
42
|
+
|
|
43
|
+
All verbs accept `--json` and `--folder <path>`.
|
|
44
|
+
|
|
45
|
+
## Hierarchical IDs (DD-14)
|
|
46
|
+
|
|
47
|
+
Feature IDs are positional: a top-level feature is a letter (`H`), a child appends one digit per
|
|
48
|
+
level (`H1`, `H2`, then `H21`, `H22`). Rules the CLI enforces — you don't restate them, you let
|
|
49
|
+
`create` and `check` apply them:
|
|
50
|
+
|
|
51
|
+
- One digit per level; **≤ 9 children** per parent (the corpus-derived limit `check` flags as L3).
|
|
52
|
+
- The parent of an ID is that ID with its **last character dropped** (`H21` → `H2` → `H`).
|
|
53
|
+
- `create --parent H2` takes the **next free digit 1–9** under `H2`; allocation is serialized by
|
|
54
|
+
the create-lock so concurrent creates never collide.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
spur feature create "Planning layer" --parent H # → H<n>
|
|
58
|
+
spur feature create "Task CLI" --parent H1 # → H1<n>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
To restructure, use `move` — never hand-edit an ID. `move <id> --parent <new>` re-parents the
|
|
62
|
+
subtree and **cascade-renames** every descendant; omit `--parent` to lift it to a top-level group.
|
|
63
|
+
|
|
64
|
+
**Before create or restructure (judgment, not CLI):** load
|
|
65
|
+
[features/hierarchy-mece.md](features/hierarchy-mece.md) — MECE sibling sets, **sparse cautious
|
|
66
|
+
roots**, extend-vs-create decision procedure, merge vs reparent, depth/width limits. `/sp:dev-plan`,
|
|
67
|
+
`/sp:dev-idea`, and `/sp:dev-featurechange` must follow that checklist so new work prefers an
|
|
68
|
+
existing parent over a new letter.
|
|
69
|
+
|
|
70
|
+
## Editing a feature: status, fields, and sections
|
|
71
|
+
|
|
72
|
+
`update` is multi-mode (status, field, and/or section — not all require mutual exclusion, but each
|
|
73
|
+
mode needs its own required args).
|
|
74
|
+
|
|
75
|
+
**Lifecycle transition** (positional status):
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
spur feature update H2 active
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Valid statuses: `backlog → active → verifying → blocked → done → cancelled`. The lifecycle engine
|
|
82
|
+
enforces legal transitions; `verifying` is the gate where AC traceability must hold (L4).
|
|
83
|
+
**One active goal** at a time is enforced by `check` (a corpus invariant).
|
|
84
|
+
|
|
85
|
+
**Scalar field set:**
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
spur feature update H2 --field priority --value P1
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`--field` requires `--value`. This sets a single frontmatter scalar (e.g. `priority`).
|
|
92
|
+
|
|
93
|
+
**Section replace** (file-wins, same contract as `spur task update --section`):
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
spur feature update H2 --section "Acceptance Criteria" --from-file /tmp/ac.md
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`--section` **requires** `--from-file` (exit `2` otherwise). Replaces the whole named section body.
|
|
100
|
+
The `## Tasks` block is still rebuilt by `refresh` (files win for that region).
|
|
101
|
+
|
|
102
|
+
**Advance** (multi-hop forward walk):
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
spur feature advance H2 # walk forward until done (default)
|
|
106
|
+
spur feature advance H2 --to verifying
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Walks the legal forward path (`backlog → active → verifying → done`) hop-by-hop until `--to`
|
|
110
|
+
(default `done`). No-op when already at the target.
|
|
111
|
+
|
|
112
|
+
## Acceptance criteria conventions
|
|
113
|
+
|
|
114
|
+
AC is the contract `check` validates and decomposition maps tasks against. Author scenarios in the
|
|
115
|
+
feature's `## Acceptance Criteria` as Gherkin.
|
|
116
|
+
|
|
117
|
+
### R-numbering
|
|
118
|
+
|
|
119
|
+
Every scenario carries an `R1, R2, …` prefix in its title:
|
|
120
|
+
|
|
121
|
+
```gherkin
|
|
122
|
+
Scenario: R1 — User can create a task with required fields
|
|
123
|
+
Scenario: R2 — Task creation fails gracefully on missing title
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
- **Sequential within a feature** — start at R1 per feature.
|
|
127
|
+
- **Stable forever** — never renumber after tasks are created; a new scenario takes the next free
|
|
128
|
+
number. (Tasks reference AC by *scenario title*, normalized — the R-prefix is stripped on match —
|
|
129
|
+
so a renumber silently breaks coverage.)
|
|
130
|
+
- **One R-number = one scenario** — never split a requirement across scenarios under one R-number,
|
|
131
|
+
never merge two requirements into one scenario.
|
|
132
|
+
|
|
133
|
+
### Two tiers (authoring convention)
|
|
134
|
+
|
|
135
|
+
Tag scenarios `@core` (must ship; maps to a task in decomposition) or `@edge` (advisory error/edge
|
|
136
|
+
paths; may be deferred). This is a **planning convention** (DD-06), not a `check` gating feature
|
|
137
|
+
today — the validator currently treats all scenarios uniformly — but tagging lets decomposition and
|
|
138
|
+
future tiered gating tell them apart. Full rationale: `sp:spur-dev`'s AC style guide.
|
|
139
|
+
|
|
140
|
+
See [features/acceptance-criteria.md](features/acceptance-criteria.md) for the Gherkin template
|
|
141
|
+
and the checklist-vs-Gherkin two-format note.
|
|
142
|
+
|
|
143
|
+
## Traceability habits
|
|
144
|
+
|
|
145
|
+
The L4 layer of `check` reads the **task → feature** edges (`feature-id` in task frontmatter) and
|
|
146
|
+
the AC coverage map. Habits that keep it green:
|
|
147
|
+
|
|
148
|
+
- **Create tasks with `--feature <id>`** so the incoming edge exists (`spur task create … --feature H2`).
|
|
149
|
+
- **Match a task to AC by scenario title**, not R-number — coverage is computed on normalized
|
|
150
|
+
titles, so keep titles stable even as you renumber-around them.
|
|
151
|
+
- **Before `verifying`**, run `spur feature check <id> --json` and clear: orphan scenarios (AC with
|
|
152
|
+
no task), coverage orphans (tasks claiming AC that doesn't exist), and broken edges.
|
|
153
|
+
- **Run `refresh` after hand-edits or task status changes** so the `## Tasks` block and tree reflect
|
|
154
|
+
the files (files win). This is **not** `sync` — it does not change feature status.
|
|
155
|
+
- **Scope `refresh` to one feature** with `--feature <id>` when only one feature's task links changed
|
|
156
|
+
(INDEX.md is still regenerated for the whole tree): `spur feature refresh --feature H2`.
|
|
157
|
+
|
|
158
|
+
## Roadmap and priority habits
|
|
159
|
+
|
|
160
|
+
Use feature hierarchy for user-facing capabilities and roadmap themes; keep technical-module mapping
|
|
161
|
+
as prose or notes unless the product surface is developer infrastructure. Priority is a scalar field
|
|
162
|
+
(`spur feature update <id> --field priority --value P1`), while status is lifecycle state
|
|
163
|
+
(`backlog → active → verifying → blocked → done → cancelled`). Do not conflate the two.
|
|
164
|
+
|
|
165
|
+
**Structure first:** [features/hierarchy-mece.md](features/hierarchy-mece.md) (MECE roots, when to
|
|
166
|
+
extend vs create). **Then priority:** [features/roadmap-priority.md](features/roadmap-priority.md).
|
|
167
|
+
|
|
168
|
+
For roadmap adjustment, apply the RICE/MoSCoW and strategy guidance from `sp:spur-dev`'s product
|
|
169
|
+
planning reference, then apply accepted deterministic changes through `spur feature update`,
|
|
170
|
+
`spur feature move`, `spur feature refresh`, and `spur feature check`.
|
|
171
|
+
|
|
172
|
+
## The gate — `check --json`
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
spur feature check H2 --json # one feature
|
|
176
|
+
spur feature check --json # whole tree
|
|
177
|
+
spur feature check --strict --json # warnings → failures
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The 4-layer validator (frontmatter, AC syntax, children-limit/structure, L4 traceability) emits its
|
|
181
|
+
verdict and findings as JSON. **Query this, don't re-derive it** — the rules live in the CLI, never
|
|
182
|
+
restated as prose here. This is what `sp:spur-dev`'s feature-check gate loop runs.
|
|
183
|
+
|
|
184
|
+
## Status sync - `sync`
|
|
185
|
+
|
|
186
|
+
`spur feature sync` keeps a feature's **lifecycle status** honest against the states of its linked
|
|
187
|
+
tasks — if all tasks are `done`, the feature should advance to `done`; if tasks reopen, the feature
|
|
188
|
+
reopens. It computes a proposal (`from → to` with a `reason`) and, unless `--dry-run`, applies it
|
|
189
|
+
via real lifecycle transitions (dogfood / one-active-goal / L4 gates may deny a hop).
|
|
190
|
+
|
|
191
|
+
**Not for roster tables.** A stale `## Tasks` line (e.g. task still listed `todo` after it is `done`)
|
|
192
|
+
is fixed with `spur feature refresh`, not `sync`. Use `sync --dry-run` first when you only want to
|
|
193
|
+
see the proposed status hop.
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
spur feature sync H2 --json # one feature
|
|
197
|
+
spur feature sync H2 --dry-run --json # propose only, no write
|
|
198
|
+
spur feature sync --all --json # every feature with linked tasks
|
|
199
|
+
spur feature sync H2 --force # apply a reopen proposal without confirmation
|
|
200
|
+
spur feature sync H2 --folder docs/custom-tasks --json # non-default tasks folder
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
- **`[id]`** syncs one feature; **`--all`** syncs every feature with linked tasks. One of the two is
|
|
204
|
+
required - exit `2` if neither is given.
|
|
205
|
+
- **`--dry-run`** reports proposed transitions without applying. **`--force`** applies a *reopen*
|
|
206
|
+
proposal (status moving backward) without interactive confirmation.
|
|
207
|
+
- **`--json`** single-feature emits `{ proposal, applied, appliedHops[] }`; `--all` emits
|
|
208
|
+
`{ totalFeatures, evaluated, updatedCount, results[] }` where each result is the single-feature
|
|
209
|
+
shape. `proposal` is
|
|
210
|
+
`{ featureId, from, to, reason, requiresConfirm?, gateBlocked?, gateFindings?, hops? }`.
|
|
211
|
+
- **Exit codes:** `0` success (including NOOP), `1` error, `2` invalid usage (no id and no `--all`).
|
|
212
|
+
|
|
213
|
+
## What this skill is NOT
|
|
214
|
+
|
|
215
|
+
- **Not the planning loop.** Intake → create → AC generation → check-loop → decomposition →
|
|
216
|
+
batch-create is `sp:spur-dev`'s planning half (R3).
|
|
217
|
+
- **Not validation logic.** This skill says *run `check`*; the layers it enforces are CLI code.
|
|
218
|
+
- **Not tasks.** Task verbs, the WBS lifecycle, and section editing live in **`spur task` (see [tasks.md](tasks.md))**.
|
|
219
|
+
|
|
220
|
+
## References
|
|
221
|
+
|
|
222
|
+
| Reference | Covers |
|
|
223
|
+
| --------- | ------ |
|
|
224
|
+
| [features/verbs.md](features/verbs.md) | Per-verb flag detail, JSON shapes, the 4 check layers |
|
|
225
|
+
| [features/acceptance-criteria.md](features/acceptance-criteria.md) | Gherkin template, R-numbering, `@core`/`@edge`, traceability mechanics |
|
|
226
|
+
| [features/hierarchy-mece.md](features/hierarchy-mece.md) | MECE roots, create/extend/reparent/merge rules, root gate, depth limits |
|
|
227
|
+
| [features/roadmap-priority.md](features/roadmap-priority.md) | Roadmap hierarchy, priority/status conventions, and feature-tree adjustment workflow |
|
|
228
|
+
|
|
229
|
+
## See also
|
|
230
|
+
|
|
231
|
+
- **`sp:spur-dev`** — orchestrates these verbs into the planning + execution loop. Use it to
|
|
232
|
+
*drive* planning; use this skill to *look up a verb* or *author AC*.
|
|
233
|
+
- **`spur task` (see [tasks.md](tasks.md))** — the companion for `spur task` (WBS lifecycle, section editing, the
|
|
234
|
+
readiness matrix).
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: init
|
|
3
|
+
description: "spur-cli noun reference for `spur init` and `spur status`: CLI verbs (init scaffold with --name/--force/--minimal, status with --json) plus post-scaffold init validation for /sp:spur-init - Phase 1.5 functional-validation probes and Phase 1.6 rule-glob adaptation."
|
|
4
|
+
see_also:
|
|
5
|
+
- spur-cli
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# spur init / spur status - CLI verbs and post-scaffold validation
|
|
9
|
+
|
|
10
|
+
## CLI verbs
|
|
11
|
+
|
|
12
|
+
| Verb | Purpose | Key flags |
|
|
13
|
+
| ---- | ------- | --------- |
|
|
14
|
+
| `init` | Scaffold a new Spur project in the current directory | `--name <name>` `--force` `--minimal` `--json` |
|
|
15
|
+
| `status [path]` | Show project and git status for a Spur project | `--json` |
|
|
16
|
+
|
|
17
|
+
### `spur init` - scaffold a Spur project
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
spur init # interactive: prompt for project name
|
|
21
|
+
spur init --name my-project # non-interactive
|
|
22
|
+
spur init --name my-project --force # overwrite existing .spur/ files
|
|
23
|
+
spur init --minimal # skip optional scaffolding (rules, workflows)
|
|
24
|
+
spur init --json # machine-readable
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Materializes the `.spur/` directory tree with config, docs, rules, and workflow templates. The
|
|
28
|
+
post-scaffold validation probes (Phase 1.5 / 1.6, below) run immediately after this verb completes.
|
|
29
|
+
|
|
30
|
+
#### Flags
|
|
31
|
+
|
|
32
|
+
| Flag | Purpose |
|
|
33
|
+
|------|---------|
|
|
34
|
+
| `--name <name>` | Project name (skips interactive prompt). |
|
|
35
|
+
| `--force` | Overwrite existing `.spur/` files. Without it, existing files are preserved. |
|
|
36
|
+
| `--minimal` | Skip optional scaffolding (rules presets, workflow templates). Core config + docs only. |
|
|
37
|
+
| `--json` | Output machine-readable JSON instead of interactive summary. |
|
|
38
|
+
|
|
39
|
+
### `spur status [path]` - project and git status
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
spur status # current directory
|
|
43
|
+
spur status /path/to/project # specific project
|
|
44
|
+
spur status --json # machine-readable
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Reports the project's Spur configuration state (init status, feature/task counts, rule preset
|
|
48
|
+
health) and git working-tree status. Optional `[path]` argument targets a different project
|
|
49
|
+
directory.
|
|
50
|
+
|
|
51
|
+
## Post-scaffold validation
|
|
52
|
+
|
|
53
|
+
Two probes sit between the deterministic scaffold (`spur init`) and the non-deterministic doc
|
|
54
|
+
customization: Phase 1.5 (functional validation) confirms the fresh tree is immediately functional;
|
|
55
|
+
Phase 1.6 (rule glob adaptation) rewrites layout-dependent rule globs so `recommended-pre-check`
|
|
56
|
+
runs clean on this project's layout. The executing agent owns content *adaptation* only — `spur
|
|
57
|
+
init` owns *file materialization* (`04_DESIGN.md` §1.1 "Init ownership contract").
|
|
58
|
+
|
|
59
|
+
### Phase 1.5 — Functional validation probe
|
|
60
|
+
|
|
61
|
+
Before any customization, confirm the fresh scaffold is immediately functional. If any probe
|
|
62
|
+
fails, STOP and report the gap rather than papering over it with customization:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
spur status
|
|
66
|
+
spur task create "__probe__" --template standard # confirms task template + matrix resolve
|
|
67
|
+
spur workflow validate .spur/workflows/task-pipeline.yaml
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Phase 1.6 — Rule glob adaptation (LLM-as-judge)
|
|
71
|
+
|
|
72
|
+
The bundled `recommended-pre-check` preset ships globs calibrated to Spur's own monorepo
|
|
73
|
+
(`apps/**/*.ts`, `packages/**/*.ts`, `scripts/**/*.ts`). On any other layout these match zero
|
|
74
|
+
files, and `rg` exits 2 ("No files were searched") — surfacing as `kind: "error"` findings that
|
|
75
|
+
obscure real violations. Rather than ship a broken probe, **you (the executing agent) ARE the
|
|
76
|
+
LLM-as-judge**: inspect the project tree and rewrite layout-dependent globs to match reality.
|
|
77
|
+
|
|
78
|
+
**You are NOT creating scaffold files.** Adapted rule files under `.spur/rules/<category>/` are
|
|
79
|
+
customization overlays — the local layer shadows the bundled layer (first-layer-wins by relative
|
|
80
|
+
path, `04_DESIGN.md` §1.1). This is content adaptation of rule globs, exactly analogous to the
|
|
81
|
+
doc edits in Phase 2, not file materialization.
|
|
82
|
+
|
|
83
|
+
Steps:
|
|
84
|
+
|
|
85
|
+
1. **Detect layout.** Inspect top-level dirs + manifest files to classify the project:
|
|
86
|
+
- Monorepo (Bun workspaces / npm workspaces / pnpm): `apps/` + `packages/` present, or
|
|
87
|
+
`package.json` has a non-empty `workspaces` field.
|
|
88
|
+
- Single-package TS/JS: `src/`, `test/` or `tests/`, single `package.json`, no workspaces.
|
|
89
|
+
- Flat script repo: `.ts`/`.js` files at root or one shallow dir, no `src/`.
|
|
90
|
+
- Polyglot / non-TS (Python/Go/Rust primary): primary source lives under non-TS globs;
|
|
91
|
+
TS rules become correct no-ops and need no adaptation (skip to step 5).
|
|
92
|
+
|
|
93
|
+
2. **Read the resolved preset.** `spur rule list --preset recommended-pre-check --json` returns
|
|
94
|
+
the category → rule-file map with resolved paths (bundled vs. global vs. local).
|
|
95
|
+
|
|
96
|
+
3. **For each category** (`typescript`, `structure`, `boundary`, `surface`, `ui`), read the
|
|
97
|
+
resolved rule file and identify layout-dependent `include` globs. The Spur-monorepo anchors
|
|
98
|
+
that almost always need rewriting:
|
|
99
|
+
- `apps/**/*.ts`, `packages/**/*.ts`, `scripts/**/*.ts` → project's actual TS source roots
|
|
100
|
+
- `apps/**/*.test.ts`, `packages/**/*.test.ts` → project's actual test roots
|
|
101
|
+
- `apps/*/package.json`, `packages/*/package.json` → workspace manifests (or root `package.json`)
|
|
102
|
+
- `apps/web/src/**`, `apps/server/src/**` → single web/server entry roots
|
|
103
|
+
|
|
104
|
+
4. **Write adapted overrides.** For each rule file with layout-dependent globs, copy the bundled
|
|
105
|
+
content to `.spur/rules/<category>/<rule-file>.yaml`, then rewrite only the layout-dependent
|
|
106
|
+
globs to match the detected roots. Preserve all non-layout globs (`**/*.ts`, `**/node_modules/**`,
|
|
107
|
+
`.spur/rules/**`), rule `id`s, evaluators, and severities verbatim. Write via the `Write` tool.
|
|
108
|
+
|
|
109
|
+
5. **Verify the adaptation.** Re-run the probe that motivated this phase:
|
|
110
|
+
```
|
|
111
|
+
spur rule run --preset recommended-pre-check --json
|
|
112
|
+
```
|
|
113
|
+
Acceptance: **zero findings with `kind: "error"`**. Genuine violations surface as
|
|
114
|
+
`kind: "violation"` and are expected on a real codebase — they are NOT adaptation failures.
|
|
115
|
+
If `kind: "error"` findings remain, their globs still mismatch; re-read those rule files and
|
|
116
|
+
widen the adapted globs. Idempotency: if `.spur/rules/<category>/` already holds hand-tuned
|
|
117
|
+
overrides for a rule (differs from the bundled content), skip re-adapting that rule.
|
|
118
|
+
|
|
119
|
+
Phase 2 customization proceeds only after this probe is clean.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spur-cli-message
|
|
3
|
+
description: "spur-cli noun reference: operate `spur message` as the durable inter-agent messaging surface - send, inbox, reply, and watch. The inbox that `spur agent run --drain` and `spur agent loop` consume."
|
|
4
|
+
see_also:
|
|
5
|
+
- spur-cli
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# spur message - durable inter-agent messaging
|
|
9
|
+
|
|
10
|
+
`spur message` is the CLI for **durable inter-agent messages**. Messages are persisted (not
|
|
11
|
+
ephemeral), so an agent can drain its inbox on the next `run --drain` or `loop` iteration even if it
|
|
12
|
+
was offline when the message was sent. This is the inbox surface that `spur agent run --drain` and
|
|
13
|
+
`spur agent loop` consume.
|
|
14
|
+
|
|
15
|
+
This is a **companion reference**, not an orchestrator. It documents *what each verb is and how to
|
|
16
|
+
use it well*.
|
|
17
|
+
|
|
18
|
+
## Verb map
|
|
19
|
+
|
|
20
|
+
| Verb | Purpose | Key flags |
|
|
21
|
+
| ---- | ------- | --------- |
|
|
22
|
+
| `send <body>` | Enqueue a message for an agent | `--to <id>` `--from <id>` `--json` |
|
|
23
|
+
| `inbox` | List messages addressed to an agent | `--agent <id>` `--json` |
|
|
24
|
+
| `reply <msg-id> <body>` | Thread a reply to a message | `--json` |
|
|
25
|
+
| `watch` | Follow an agent inbox - surface new messages as they arrive | `--agent <id>` `--interval <ms>` `--json` |
|
|
26
|
+
|
|
27
|
+
All verbs accept `--json` for machine consumption. **Exit codes:** `0` success, `1` error, `2`
|
|
28
|
+
invalid usage.
|
|
29
|
+
|
|
30
|
+
## `send` - enqueue a message
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
spur message send "Please review PR 42" --to reviewer
|
|
34
|
+
spur message send "Task 0040 is blocked" --to worker-1 --from operator
|
|
35
|
+
spur message send "Done" --to planner --json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Enqueues a durable message addressed to `--to <id>`. The recipient drains it on its next `agent run
|
|
39
|
+
--drain` or `agent loop` iteration. `--from` defaults to `operator`.
|
|
40
|
+
|
|
41
|
+
### Flags
|
|
42
|
+
|
|
43
|
+
| Flag | Purpose |
|
|
44
|
+
|------|---------|
|
|
45
|
+
| `--to <id>` | **Required.** Recipient agent id. |
|
|
46
|
+
| `--from <id>` | Sender id (default: `operator`). |
|
|
47
|
+
| `--json` | Output machine-readable JSON. |
|
|
48
|
+
|
|
49
|
+
## `inbox` - list addressed messages
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
spur message inbox --agent worker-1
|
|
53
|
+
spur message inbox --agent worker-1 --json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Lists messages addressed to `--agent <id>`, oldest first. The body is truncated in plain-text output;
|
|
57
|
+
`--json` returns the full body.
|
|
58
|
+
|
|
59
|
+
## `reply` - thread a reply
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
spur message reply msg-003 "Acknowledged - starting now"
|
|
63
|
+
spur message reply msg-003 "Done" --json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Threads a reply to a specific message id. The reply is addressable to the original sender's inbox.
|
|
67
|
+
|
|
68
|
+
## `watch` - follow an inbox live
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
spur message watch --agent worker-1
|
|
72
|
+
spur message watch --agent worker-1 --interval 1000 --json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Polls the inbox and surfaces each **new** message exactly once as it arrives. `Ctrl-C` to exit. With
|
|
76
|
+
`--json`, emits one JSON object per new message (machine-consumable); without it, prints plain-text
|
|
77
|
+
lines.
|
|
78
|
+
|
|
79
|
+
### Flags
|
|
80
|
+
|
|
81
|
+
| Flag | Purpose |
|
|
82
|
+
|------|---------|
|
|
83
|
+
| `--agent <id>` | **Required.** Agent id to watch. |
|
|
84
|
+
| `--interval <ms>` | Poll interval in milliseconds (default: `2000`). Must be a positive integer; exit `2` otherwise. |
|
|
85
|
+
| `--json` | Output one JSON object per new message. |
|
|
86
|
+
|
|
87
|
+
## What this skill is NOT
|
|
88
|
+
|
|
89
|
+
- **Not the agent runner.** `spur agent run --drain` and `spur agent loop` consume the inbox; this
|
|
90
|
+
reference documents the verbs that *populate* it. See **[agent.md](agent.md)**.
|
|
91
|
+
- **Not real-time transport.** Messages are durable and polled, not pushed. `watch` simulates
|
|
92
|
+
real-time by polling on an interval.
|
|
93
|
+
|
|
94
|
+
## See also
|
|
95
|
+
|
|
96
|
+
- **`spur agent` (see [agent.md](agent.md))** - `run --drain` and `loop` consume the inbox.
|
|
97
|
+
- **`spur team` (see [team.md](team.md))** - team lifecycle that assigns agents to tasks.
|
|
98
|
+
- **`sp:spur-cli`** SKILL.md - the facade that routes to this reference.
|