impulso 0.19.1

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 (85) hide show
  1. package/README.md +425 -0
  2. package/agents/ImpulsoOrchestrator.md +112 -0
  3. package/agents/debugger.md +38 -0
  4. package/agents/generalist.md +26 -0
  5. package/agents/implementer-frontend.md +41 -0
  6. package/agents/implementer-infra.md +41 -0
  7. package/agents/implementer.md +35 -0
  8. package/agents/planner.md +52 -0
  9. package/agents/reviewer.md +40 -0
  10. package/agents/scout-writer.md +24 -0
  11. package/agents/scout.md +22 -0
  12. package/agents/shipper.md +64 -0
  13. package/commands/impulso-address-pr-comments.md +162 -0
  14. package/commands/impulso-brainstorm.md +54 -0
  15. package/commands/impulso-context-pack.md +55 -0
  16. package/commands/impulso-debug.md +50 -0
  17. package/commands/impulso-directspeech-compress.md +137 -0
  18. package/commands/impulso-directspeech-help.md +33 -0
  19. package/commands/impulso-directspeech-stats.md +16 -0
  20. package/commands/impulso-implement.md +86 -0
  21. package/commands/impulso-plan.md +92 -0
  22. package/commands/impulso-ship.md +46 -0
  23. package/commands/impulso-spec.md +106 -0
  24. package/commands/impulso-verify.md +99 -0
  25. package/commands/plannotator-annotate.md +47 -0
  26. package/commands/plannotator-last.md +45 -0
  27. package/commands/plannotator-review.md +46 -0
  28. package/harnesses/claude/README.md +109 -0
  29. package/harnesses/claude/hooks/bash-state-guard.cjs +84 -0
  30. package/harnesses/claude/hooks/directspeech-context.cjs +29 -0
  31. package/harnesses/claude/hooks/path-guard.cjs +106 -0
  32. package/harnesses/claude/hooks/preflight.cjs +39 -0
  33. package/harnesses/claude/hooks/pretooluse-bash.cjs +69 -0
  34. package/harnesses/claude/hooks/rtk.cjs +87 -0
  35. package/harnesses/claude/hooks/subagent-start.cjs +83 -0
  36. package/harnesses/claude/hooks/task-exit.cjs +189 -0
  37. package/harnesses/claude/hooks/tdd-observer.cjs +118 -0
  38. package/harnesses/claude/hooks/tokensave-stale.cjs +63 -0
  39. package/harnesses/claude/hooks/userpromptsubmit.cjs +42 -0
  40. package/harnesses/claude/install.sh +120 -0
  41. package/harnesses/claude/merge-settings.cjs +71 -0
  42. package/harnesses/claude/uninstall.sh +89 -0
  43. package/harnesses/opencode/bin/darwin-amd64/impulso-hub +0 -0
  44. package/harnesses/opencode/bin/darwin-arm64/impulso-hub +0 -0
  45. package/harnesses/opencode/bin/impulso-hub +0 -0
  46. package/harnesses/opencode/bin/linux-amd64/impulso-hub +0 -0
  47. package/harnesses/opencode/bin/linux-arm64/impulso-hub +0 -0
  48. package/harnesses/opencode/commands-loader.js +101 -0
  49. package/harnesses/opencode/compose.js +111 -0
  50. package/harnesses/opencode/directspeech/README.md +43 -0
  51. package/harnesses/opencode/directspeech/plugin.js +47 -0
  52. package/harnesses/opencode/frontmatter.js +60 -0
  53. package/harnesses/opencode/install.sh +121 -0
  54. package/harnesses/opencode/orchestration/index.js +362 -0
  55. package/harnesses/opencode/plugin.js +84 -0
  56. package/harnesses/opencode/rtk/README.md +100 -0
  57. package/harnesses/opencode/rtk/rtk.ts +41 -0
  58. package/harnesses/opencode/session-name/plugin.js +27 -0
  59. package/harnesses/opencode/sync-commands.js +98 -0
  60. package/harnesses/opencode/uninstall.sh +36 -0
  61. package/opencode/opencode.jsonc +35 -0
  62. package/package.json +95 -0
  63. package/scripts/bump-plugin-version.cjs +28 -0
  64. package/scripts/install-hub.js +78 -0
  65. package/scripts/sync-agents.cjs +167 -0
  66. package/shared/directspeech-config.cjs +18 -0
  67. package/shared/orchestration-config.cjs +281 -0
  68. package/shared/orchestration-data.json +48 -0
  69. package/shared/state-guard.cjs +56 -0
  70. package/shared/tokensave-freshness.cjs +62 -0
  71. package/skills/impulso-address-pr-comments/SKILL.md +159 -0
  72. package/skills/impulso-brainstorm/SKILL.md +51 -0
  73. package/skills/impulso-context-pack/SKILL.md +52 -0
  74. package/skills/impulso-debug/SKILL.md +47 -0
  75. package/skills/impulso-directspeech-compress/SKILL.md +134 -0
  76. package/skills/impulso-directspeech-help/SKILL.md +30 -0
  77. package/skills/impulso-directspeech-stats/SKILL.md +13 -0
  78. package/skills/impulso-implement/SKILL.md +83 -0
  79. package/skills/impulso-plan/SKILL.md +89 -0
  80. package/skills/impulso-ship/SKILL.md +43 -0
  81. package/skills/impulso-spec/SKILL.md +103 -0
  82. package/skills/impulso-verify/SKILL.md +96 -0
  83. package/skills/plannotator-annotate/SKILL.md +45 -0
  84. package/skills/plannotator-last/SKILL.md +43 -0
  85. package/skills/plannotator-review/SKILL.md +44 -0
@@ -0,0 +1,137 @@
1
+ ---
2
+ description:
3
+ 'Compress natural language memory files (CLAUDE.md, todos, preferences) into
4
+ Impulso-DirectSpeech format to save input tokens. Preserves all technical
5
+ substance, code, URLs, and structure. Compressed version overwrites the
6
+ original file. Human-readable backup saved as FILE.original.md. Trigger:
7
+ /impulso-directspeech-compress FILEPATH or "compress memory file"'
8
+ ---
9
+
10
+ # Impulso-DirectSpeech Compress
11
+
12
+ ## Purpose
13
+
14
+ Compress natural language files into terse DirectSpeech to reduce input tokens.
15
+ Overwrites original. Backup: `<filename>.original.md`.
16
+
17
+ ## Trigger
18
+
19
+ `/impulso-directspeech-compress <filepath>` or when user asks to compress a
20
+ memory file.
21
+
22
+ ## Process
23
+
24
+ 1. Scripts in `scripts/` adjacent to this SKILL.md. If not found, search for
25
+ `scripts/__main__.py`.
26
+
27
+ 2. From the directory containing this SKILL.md, run:
28
+
29
+ python3 -m scripts <absolute_filepath>
30
+
31
+ 3. CLI will:
32
+
33
+ - detect file type
34
+ - call Claude to compress
35
+ - validate output
36
+ - errors: cherry-pick fix (targeted, no recompression), retry ≤2 times
37
+ - still failing after 2 retries: report error, leave original untouched
38
+
39
+ 4. Return result to user
40
+
41
+ ## Compression Rules
42
+
43
+ ### Remove
44
+
45
+ - Articles: a, an, the
46
+ - Filler: just, really, basically, actually, simply, essentially, generally
47
+ - Pleasantries: "sure", "certainly", "of course", "happy to", "I'd recommend"
48
+ - Hedging: "it might be worth", "you could consider", "it would be good to"
49
+ - Redundant phrasing: "in order to" → "to", "make sure to" → "ensure", "the
50
+ reason is because" → "because"
51
+ - Connective fluff: "however", "furthermore", "additionally", "in addition"
52
+
53
+ ### Preserve EXACTLY (never modify)
54
+
55
+ - Code blocks (fenced ``` and indented)
56
+ - Inline code (`backtick content`)
57
+ - URLs and links (full URLs, markdown links)
58
+ - File paths (`/src/components/...`, `./config.yaml`)
59
+ - Commands (`npm install`, `git commit`, `docker build`)
60
+ - Technical terms (library names, API names, protocols, algorithms)
61
+ - Proper nouns (project names, people, companies)
62
+ - Dates, version numbers, numeric values
63
+ - Environment variables (`$HOME`, `NODE_ENV`)
64
+
65
+ ### Preserve Structure
66
+
67
+ - All markdown headings (keep exact heading text, compress body below)
68
+ - Bullet point hierarchy (keep nesting level)
69
+ - Numbered lists (keep numbering)
70
+ - Tables (compress cell text, keep structure)
71
+ - Frontmatter/YAML headers in markdown files
72
+
73
+ ### Compress
74
+
75
+ - Use short synonyms: "big" not "extensive", "fix" not "implement a solution
76
+ for", "use" not "utilize"
77
+ - Fragments OK: "Run tests before commit" not "You should always run tests
78
+ before committing"
79
+ - Drop "you should", "make sure to", "remember to" — just state the action
80
+ - Merge redundant bullets that say the same thing differently
81
+ - Keep one example where multiple examples show the same pattern
82
+
83
+ CRITICAL RULE: Anything inside `...` must be copied EXACTLY. Do not:
84
+
85
+ - remove comments
86
+ - remove spacing
87
+ - reorder lines
88
+ - shorten commands
89
+ - simplify anything
90
+
91
+ Inline code (`...`) must be preserved EXACTLY. Do not modify anything inside
92
+ backticks.
93
+
94
+ If file contains code blocks:
95
+
96
+ - Treat code blocks as read-only regions
97
+ - Only compress text outside them
98
+ - Do not merge sections around code
99
+
100
+ ## Pattern
101
+
102
+ Original:
103
+
104
+ > You should always make sure to run the test suite before pushing any changes
105
+ > to the main branch. This is important because it helps catch bugs early and
106
+ > prevents broken builds from being deployed to production.
107
+
108
+ Compressed:
109
+
110
+ > Run tests before push to main. Catch bugs early, prevent broken prod deploys.
111
+
112
+ Original:
113
+
114
+ > The application uses a microservices architecture with the following
115
+ > components. The API gateway handles all incoming requests and routes them to
116
+ > the appropriate service. The authentication service is responsible for
117
+ > managing user sessions and JWT tokens.
118
+
119
+ Compressed:
120
+
121
+ > Microservices architecture. API gateway route all requests to services. Auth
122
+ > service manage user sessions + JWT tokens.
123
+
124
+ ## Boundaries
125
+
126
+ - ONLY compress natural language files (.md, .txt, .typ, .typst, .tex,
127
+ extensionless)
128
+ - NEVER modify: .py, .js, .ts, .json, .yaml, .yml, .toml, .env, .lock, .css,
129
+ .html, .xml, .sql, .sh
130
+ - Mixed content (prose + code): compress prose sections only
131
+ - Unsure if code or prose → leave unchanged
132
+ - Backed up as FILE.original.md before overwriting
133
+ - Never compress FILE.original.md (skip it)
134
+
135
+ ---
136
+
137
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,33 @@
1
+ ---
2
+ description:
3
+ 'Quick-reference card for Impulso-DirectSpeech skills and commands. One-shot
4
+ display, not a persistent mode. Trigger: /impulso-directspeech-help, "impulso
5
+ help", "what impulso commands".'
6
+ ---
7
+
8
+ # Impulso-DirectSpeech Help
9
+
10
+ Display reference card when invoked. One-shot — do NOT persist. Output in
11
+ Impulso style.
12
+
13
+ ## Mode
14
+
15
+ Always active — harness-enforced, every turn. No activation, no off-switch.
16
+ Auto-Clarity drops terseness for security warnings + irreversible actions;
17
+ code/commits/PRs always normal.
18
+
19
+ ## Skills
20
+
21
+ | Skill | Trigger | What it do |
22
+ | --------------------------------- | --------------------------------------- | ----------------------------------------------------------- |
23
+ | **impulso-directspeech-compress** | `/impulso-directspeech-compress <file>` | Compress .md files to terse prose. Saves ~46% input tokens. |
24
+ | **impulso-directspeech-stats** | `/impulso-directspeech-stats` | Lifetime token-savings stats. |
25
+
26
+ ## Language
27
+
28
+ Keep user's language. Portuguese input → Portuguese DirectSpeech. Compress
29
+ style, not language.
30
+
31
+ ---
32
+
33
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,16 @@
1
+ ---
2
+ description:
3
+ 'Show real token usage and estimated savings for the current session. Reads
4
+ from the session log — no AI estimation. Triggers on
5
+ /impulso-directspeech-stats.'
6
+ ---
7
+
8
+ # Impulso-DirectSpeech Stats
9
+
10
+ On `/impulso-directspeech-stats`: output token savings in short table — total
11
+ saved, sessions, avg compression ratio. No session log → note stats tracking not
12
+ yet integrated.
13
+
14
+ ---
15
+
16
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,86 @@
1
+ ---
2
+ description:
3
+ 'Invoke when the pipeline enters the implement phase: loop every plan task in
4
+ order, dispatch the right implementer variant per brief, run per-task review,
5
+ and advance when all tasks are done.'
6
+ ---
7
+
8
+ # Impulso Implement
9
+
10
+ Deterministic state/precondition validation and status `--json` schema v1 are
11
+ owned by `impulso-hub`; this skill retains human interview, dispatch, and
12
+ remediation policy.
13
+
14
+ Implement phase: sequential task loop (start → brief → dispatch → review) →
15
+ advance.
16
+
17
+ ## MUST
18
+
19
+ 1. Run `impulso-hub status --json`. Confirm `phase === "implement"`. Exit 2 =
20
+ read stderr, fix, retry.
21
+
22
+ 2. Extract workspace and task list:
23
+
24
+ ```bash
25
+ WORKSPACE=$(impulso-hub workspace-path)
26
+ TASK_IDS=$(impulso-hub task-ids)
27
+ ```
28
+
29
+ 3. For each task N in order (sequential — never parallel implementers):
30
+
31
+ a. Skip if `impulso-hub status --json` shows task N already
32
+ `"status":"done"`.
33
+
34
+ b. Run:
35
+
36
+ ```bash
37
+ impulso-hub task start <N>
38
+ BRIEF_PATH=$(impulso-hub brief <N>)
39
+ REPORT_PATH=$(impulso-hub workspace-path --report <N>)
40
+ ```
41
+
42
+ c. Get the agent variant from the brief and resolve:
43
+
44
+ ```bash
45
+ VARIANT=$(grep '^variant:' "$BRIEF_PATH" | awk '{print $2}')
46
+ AGENT=$(impulso-hub resolve-agent "$VARIANT")
47
+ MODEL=$(impulso-hub models --agent "$AGENT")
48
+ ```
49
+
50
+ d. Dispatch implementer (model: `$MODEL`):
51
+
52
+ - Brief path: `$BRIEF_PATH`
53
+ - Report path: `$REPORT_PATH`
54
+ - Instruction: "Read brief. Write report to report path. Return ≤15-line
55
+ status block with STATUS, commits, tests, concerns."
56
+ - On NEEDS_CONTEXT: surface to user, re-dispatch.
57
+ - On BLOCKED: assess, handle.
58
+
59
+ e. Loop: run `impulso-hub task done <N>`. On exit 2 → relay stderr back to
60
+ same implementer as a fix instruction, re-run until gate passes or BLOCKED.
61
+
62
+ f. Generate review package:
63
+
64
+ ```bash
65
+ START_SHA=$(impulso-hub status --field currentTask && impulso-hub status --json | node -e "const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')); process.stdout.write(d.tasks['<N>'].startSha)")
66
+ DIFF_PATH=$(impulso-hub review-package "$START_SHA" HEAD)
67
+ REVIEWER_MODEL=$(impulso-hub models --agent reviewer)
68
+ ```
69
+
70
+ g. Dispatch reviewer (model: `$REVIEWER_MODEL`):
71
+
72
+ - Brief path: `$BRIEF_PATH`
73
+ - Report path: `$REPORT_PATH`
74
+ - Diff path: `$DIFF_PATH`
75
+ - Instruction: "Review the diff. Return ≤15-line verdict."
76
+ - Critical/Important findings: dispatch implementer once, re-dispatch
77
+ reviewer. One fix cycle only.
78
+
79
+ h. Proceed to task N+1.
80
+
81
+ 4. After all tasks complete, run `impulso-hub advance`. Exit 2 = read stderr,
82
+ fix, retry.
83
+
84
+ ---
85
+
86
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,92 @@
1
+ ---
2
+ description:
3
+ 'Invoke when the pipeline enters the plan phase: dispatch planner to draft
4
+ plan.md, run the plannotator-annotate gate, apply feedback, record the marker,
5
+ and advance.'
6
+ ---
7
+
8
+ # Impulso Plan
9
+
10
+ Deterministic state/precondition validation and status `--json` schema v1 are
11
+ owned by `impulso-hub`; this skill retains human interview, dispatch, and
12
+ remediation policy.
13
+
14
+ Plan phase: planner drafts plan.md → plannotator annotate gate → record →
15
+ advance.
16
+
17
+ ## Plan task format (planner must follow exactly)
18
+
19
+ ```
20
+ ## Task N: <title>
21
+ variant: default|frontend|infra
22
+ model-hint: <haiku|sonnet|opus>
23
+ parallel-safe: yes|no
24
+
25
+ - [ ] write failing test for <behavior> — verify FAIL
26
+ - [ ] minimal implementation — verify PASS
27
+
28
+ Interfaces: <exact signatures>
29
+ ```
30
+
31
+ `tdd: false — <justification>` allowed only when no testable surface exists.
32
+
33
+ ## MUST
34
+
35
+ 1. Run `impulso-hub status --json`. Confirm `phase === "plan"`. Exit 2 = read
36
+ stderr, fix, retry if solvable; surface to user if not.
37
+
38
+ 2. Get planner model and workspace paths:
39
+
40
+ ```bash
41
+ MODEL=$(impulso-hub models --agent planner)
42
+ PLAN_PATH=$(impulso-hub workspace-path --plan)
43
+ WORKSPACE=$(impulso-hub workspace-path)
44
+ SPEC_PATH=$(impulso-hub workspace-path --spec)
45
+ ```
46
+
47
+ 3. Dispatch planner (model: `$MODEL`):
48
+
49
+ - Context paths: `$WORKSPACE/brainstorm.md`, `$SPEC_PATH`
50
+ - Output path: `$PLAN_PATH`
51
+ - Instruction: "Read brainstorm.md and spec.md. Draft plan.md at the output
52
+ path using the exact task format above. Return ≤15-line status block."
53
+ - On NEEDS_CONTEXT: surface to user, gather, re-dispatch.
54
+ - On BLOCKED: surface to user. Do not guess.
55
+
56
+ 4. Launch plannotator on the plan:
57
+
58
+ ```bash
59
+ impulso-hub plannotator launch annotate "$PLAN_PATH"
60
+ ```
61
+
62
+ 5. **IMMEDIATELY relay URL:** "Open Plannotator at \<URL\> (remote: \<Remote\>).
63
+ Annotate plan.md, then tell me when done." WAIT for user.
64
+
65
+ Launch timeout (exit 2) → STOP. Check stderr, ask whether to retry.
66
+
67
+ 6. After user confirms:
68
+
69
+ ```bash
70
+ impulso-hub plannotator wait
71
+ ```
72
+
73
+ 7. `annotated` → re-dispatch planner (model: `$MODEL`) with:
74
+
75
+ - Annotation text and plan.md path: `$PLAN_PATH`
76
+ - Instruction: "Apply these annotations to plan.md. Maintain task format
77
+ contract. Overwrite in place. Return ≤15-line status block."
78
+ - On NEEDS_CONTEXT: surface to user, gather, re-dispatch.
79
+
80
+ 8. Run:
81
+
82
+ ```bash
83
+ impulso-hub record-plannotator plan.md
84
+ ```
85
+
86
+ WARNING: editing plan.md after recording invalidates marker.
87
+
88
+ 9. Run `impulso-hub advance`. Exit 2 = read stderr, satisfy precondition, retry.
89
+
90
+ ---
91
+
92
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,46 @@
1
+ ---
2
+ description:
3
+ 'Invoke when the pipeline enters the ship phase: dispatch shipper to create
4
+ the PR, confirm the PR URL is recorded, and advance to complete the pipeline.'
5
+ ---
6
+
7
+ # Impulso Ship
8
+
9
+ Deterministic state/precondition validation and status `--json` schema v1 are
10
+ owned by `impulso-hub`; this skill retains human interview, dispatch, and
11
+ remediation policy.
12
+
13
+ Ship phase: dispatch shipper → record PR → advance.
14
+
15
+ ## MUST
16
+
17
+ 1. Run `impulso-hub status --json`. Confirm `phase === "ship"`. Exit 2 = read
18
+ stderr, fix, retry.
19
+
20
+ 2. Get workspace paths and shipper model:
21
+
22
+ ```bash
23
+ SLUG=$(impulso-hub status --field slug)
24
+ WORKSPACE=$(impulso-hub workspace-path)
25
+ MODEL=$(impulso-hub models --agent shipper)
26
+ ```
27
+
28
+ 3. Dispatch shipper (model: `$MODEL`):
29
+
30
+ - Spec path: `$WORKSPACE/spec.md`
31
+ - Plan path: `$WORKSPACE/plan.md`
32
+ - Instruction: "Read spec.md and plan.md. Commit staged changes (conventional
33
+ format), push branch, open PR. Run `impulso-hub record-pr <url>` with the
34
+ resulting PR URL. Watch CI via
35
+ `impulso-hub ci-watch <url> [--timeout 600]`. Return ≤15-line status
36
+ block."
37
+ - On NEEDS_CONTEXT: surface to user, re-dispatch.
38
+ - On BLOCKED: surface to user. Do not guess.
39
+
40
+ 4. Confirm PR recorded: check `impulso-hub status --json | grep pr.url`.
41
+
42
+ 5. Run `impulso-hub advance`. Exit 2 = read stderr, satisfy precondition, retry.
43
+
44
+ ---
45
+
46
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,106 @@
1
+ ---
2
+ description:
3
+ 'Invoke when the pipeline enters the spec phase: dispatch planner to draft
4
+ spec.md, impulso-hub spec-review-mode determines route (confirm vs
5
+ plannotator), execute gate action, advance.'
6
+ ---
7
+
8
+ # Impulso Spec
9
+
10
+ Deterministic state/precondition validation and status `--json` schema v1 are
11
+ owned by `impulso-hub`; this skill retains human interview, dispatch, and
12
+ remediation policy.
13
+
14
+ Spec phase: planner drafts spec.md → impulso-hub spec-review-mode determines
15
+ route (confirm vs plannotator) → execute the gate-specified action → advance.
16
+
17
+ ## MUST
18
+
19
+ 1. Run `impulso-hub status --json`. Confirm `phase === "spec"`. Exit 2 = read
20
+ stderr, fix, retry.
21
+
22
+ 2. Get planner model and spec path:
23
+
24
+ ```bash
25
+ MODEL=$(impulso-hub models --agent planner)
26
+ SPEC_PATH=$(impulso-hub workspace-path --spec)
27
+ WORKSPACE=$(impulso-hub workspace-path)
28
+ ```
29
+
30
+ 3. Dispatch planner (model: `$MODEL`):
31
+
32
+ - Context path: `$WORKSPACE/brainstorm.md`
33
+ - Output path: `$SPEC_PATH`
34
+ - Instruction: "Read brainstorm.md. Draft spec.md at the output path. Return
35
+ ≤15-line status block."
36
+ - On NEEDS_CONTEXT: surface to user, gather, re-dispatch.
37
+ - On BLOCKED: surface to user. Do not guess.
38
+
39
+ 4. Get review mode from gate:
40
+
41
+ ```bash
42
+ impulso-hub spec-review-mode
43
+ ```
44
+
45
+ Parse `mode:` and `lines:` from output.
46
+
47
+ ## Route A: mode=confirm — chat confirmation only
48
+
49
+ 5a. Present spec.md to user in chat. Ask: "Confirm this spec is correct?" On
50
+ confirmation:
51
+
52
+ ```bash
53
+ impulso-hub record-spec-confirmation
54
+ impulso-hub advance
55
+ ```
56
+
57
+ Done. No Plannotator session.
58
+
59
+ ## Route B: mode=plannotator — Plannotator annotate flow
60
+
61
+ 5b. Launch plannotator on the spec:
62
+
63
+ ```bash
64
+ impulso-hub plannotator launch annotate "$SPEC_PATH"
65
+ ```
66
+
67
+ Returns JSON with `url` and `remoteUrl`.
68
+
69
+ 6b. **IMMEDIATELY relay URL:** "Open Plannotator at \<URL\> (remote:
70
+ \<Remote\>). Annotate spec.md, then tell me when done." WAIT for user.
71
+
72
+ Launch timeout (exit 2) → STOP. Check stderr, ask whether to retry.
73
+
74
+ 7b. After user confirms:
75
+
76
+ ```bash
77
+ impulso-hub plannotator wait
78
+ ```
79
+
80
+ Returns `{"decision":"approved"|"dismissed"|"annotated","feedback":"..."}`.
81
+
82
+ 8b. `annotated` → re-dispatch planner with feedback:
83
+
84
+ - Annotation feedback text
85
+ - spec.md path: `$SPEC_PATH`
86
+ - Instruction: "Apply these annotations to spec.md. Overwrite in place.
87
+ Return ≤15-line status block."
88
+ - On NEEDS_CONTEXT: surface to user, gather, re-dispatch.
89
+
90
+ 9b. Run:
91
+
92
+ ```bash
93
+ impulso-hub record-plannotator spec.md
94
+ ```
95
+
96
+ WARNING: editing spec.md after recording invalidates marker. Re-run
97
+ plannotator session if file changes.
98
+
99
+ ## Advance
100
+
101
+ 10. Run `impulso-hub advance`. Exit 2 = read stderr, satisfy precondition,
102
+ retry.
103
+
104
+ ---
105
+
106
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,99 @@
1
+ ---
2
+ description:
3
+ 'Invoke when the pipeline enters the verify phase: run full test suite and
4
+ coverage, dispatch branch reviewer, run fix cycle if needed, run
5
+ plannotator-review gate, record, and advance.'
6
+ ---
7
+
8
+ # Impulso Verify
9
+
10
+ Deterministic state/precondition validation and status `--json` schema v1 are
11
+ owned by `impulso-hub`; this skill retains human interview, dispatch, and
12
+ remediation policy.
13
+
14
+ Verify phase: tests → coverage → branch review → fix cycle → plannotator-review
15
+ gate → record → advance.
16
+
17
+ ## MUST
18
+
19
+ 1. Run `impulso-hub status --json`. Confirm `phase === "verify"`. Exit 2 = read
20
+ stderr, fix, retry.
21
+
22
+ 2. Extract workspace:
23
+
24
+ ```bash
25
+ WORKSPACE=$(impulso-hub workspace-path)
26
+ ```
27
+
28
+ 3. Run full test suite:
29
+
30
+ ```bash
31
+ impulso-hub run-test --full
32
+ ```
33
+
34
+ Non-zero = tests failing. Fix before continuing.
35
+
36
+ 4. Run coverage:
37
+
38
+ ```bash
39
+ impulso-hub run-test --coverage
40
+ ```
41
+
42
+ Non-zero = coverage failing. Fix before continuing.
43
+
44
+ 5. Generate branch review package:
45
+
46
+ ```bash
47
+ BASE=$(impulso-hub merge-base)
48
+ DIFF_PATH=$(impulso-hub review-package "$BASE" HEAD)
49
+ REVIEWER_MODEL=$(impulso-hub models --agent reviewer)
50
+ ```
51
+
52
+ 6. Dispatch reviewer (model: `$REVIEWER_MODEL`) for branch review:
53
+
54
+ - Diff path: `$DIFF_PATH`
55
+ - Instruction: "Branch review: review the full diff from main. Return
56
+ ≤15-line verdict."
57
+ - Critical/Important: dispatch implementer once with findings, re-run tests
58
+ (steps 3–4), re-dispatch reviewer. Once only.
59
+
60
+ 7. When reviewer has **no Critical or Important** findings:
61
+
62
+ ```bash
63
+ impulso-hub record-review-verdict clean
64
+ ```
65
+
66
+ Critical/Important remaining → `impulso-hub record-review-verdict findings`.
67
+
68
+ 8. Run plannotator review:
69
+
70
+ ```bash
71
+ impulso-hub plannotator launch review
72
+ ```
73
+
74
+ 9. **IMMEDIATELY relay URL:** "Open Plannotator at \<URL\> (remote: \<Remote\>).
75
+ Review the branch changes, then tell me when done." WAIT for user.
76
+
77
+ Launch timeout (exit 2) → STOP. Check stderr, ask whether to retry.
78
+
79
+ 10. After user confirms:
80
+
81
+ ```bash
82
+ impulso-hub plannotator wait
83
+ ```
84
+
85
+ 11. Feedback → apply fixes, re-run tests (steps 3–4), re-run plannotator review
86
+ (steps 8–10). LGTM → continue.
87
+
88
+ 12. Record and advance:
89
+
90
+ ```bash
91
+ impulso-hub record-plannotator --review
92
+ impulso-hub advance
93
+ ```
94
+
95
+ WARNING: committing after recording invalidates marker.
96
+
97
+ ---
98
+
99
+ **User arguments:** $ARGUMENTS
@@ -0,0 +1,47 @@
1
+ ---
2
+ description:
3
+ "Open Plannotator's annotation UI for a markdown file, HTML file, URL, or
4
+ folder and then respond to the returned annotations."
5
+ ---
6
+
7
+ # Plannotator Annotate
8
+
9
+ Use when user wants document annotated in Plannotator.
10
+
11
+ ## Protocol
12
+
13
+ 1. Set `TARGET` to the file/URL/folder to annotate. Never empty.
14
+
15
+ 2. Launch plannotator and get the URL:
16
+
17
+ ```bash
18
+ impulso-hub plannotator launch annotate <TARGET>
19
+ ```
20
+
21
+ This returns a JSON line with `url`, `remoteUrl`, `port`, and `pid`.
22
+ Plannotator runs in the background.
23
+
24
+ 3. **IMMEDIATELY relay URL:** "Open Plannotator at `<URL>` (remote: `<Remote>`).
25
+ Annotate `<TARGET>`, then tell me when done." WAIT for user to confirm.
26
+
27
+ 4. After user confirms, wait for plannotator to finish and get the decision:
28
+
29
+ ```bash
30
+ impulso-hub plannotator wait
31
+ ```
32
+
33
+ Returns JSON:
34
+ `{"decision":"approved"|"dismissed"|"annotated","feedback":"..."}`.
35
+
36
+ 5. Apply the decision:
37
+ - `approved` → acknowledge, proceed.
38
+ - `dismissed` → session closed, say so, continue.
39
+ - `annotated` → address the feedback text.
40
+
41
+ 6. Launch timeout (impulso-hub exits 2): check stderr, ask whether to retry.
42
+
43
+ Run commands yourself. Never ask user to paste shell commands into chat.
44
+
45
+ ---
46
+
47
+ **User arguments:** $ARGUMENTS