hotmilk 0.1.14 → 0.1.15

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 (36) hide show
  1. package/AGENTS.md +9 -8
  2. package/README.md +121 -82
  3. package/agents/assistant.md +1 -1
  4. package/agents/coach.md +24 -3
  5. package/agents/designer.md +1 -1
  6. package/hotmilk.json +5 -0
  7. package/package.json +39 -23
  8. package/skills/pioneer/SKILL.md +73 -59
  9. package/skills/pioneer/references/autoresearch-routing.md +2 -0
  10. package/skills/pioneer/references/observational-memory-routing.md +90 -0
  11. package/skills/pioneer/references/plannotator-routing.md +2 -0
  12. package/skills/pioneer/references/shazam-routing.md +58 -0
  13. package/src/bootstrap/btw.ts +49 -0
  14. package/src/bootstrap/context-stack.ts +71 -14
  15. package/src/bootstrap/dashboard-settings.ts +16 -2
  16. package/src/bootstrap/dashboard.ts +85 -10
  17. package/src/bootstrap/defaults.ts +26 -0
  18. package/src/bootstrap/extensions.ts +3 -0
  19. package/src/bootstrap/global-extension-sources.ts +33 -3
  20. package/src/bootstrap/graph.ts +12 -0
  21. package/src/bootstrap/project-trust.ts +14 -0
  22. package/src/bootstrap/resolve-bundled.ts +28 -4
  23. package/src/bootstrap/session.ts +33 -0
  24. package/src/bootstrap/subagents-doctor.ts +12 -0
  25. package/src/config/bundled-extensions.ts +30 -0
  26. package/src/config/bundled-package-registry.ts +3 -0
  27. package/src/config/hotmilk.ts +54 -1
  28. package/src/config/mcp.ts +45 -12
  29. package/src/config/resolve.ts +5 -0
  30. package/src/config/runtime.ts +2 -0
  31. package/src/controller/input.ts +15 -0
  32. package/src/controller/mode.ts +32 -0
  33. package/src/index.ts +1 -0
  34. package/src/ui/footer.ts +63 -1
  35. package/src/ui/github-user.ts +52 -4
  36. package/src/ui/session-logo.ts +31 -3
package/AGENTS.md CHANGED
@@ -25,14 +25,14 @@ Requires **Node.js 22+**. Targets **Pi 0.80** (`@earendil-works/pi-coding-agent`
25
25
 
26
26
  ## Code layout
27
27
 
28
- | Path | Role |
29
- | -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
30
- | `src/index.ts` | Extension entry: runtime, register handlers |
31
- | `src/config/` | `hotmilk.json` I/O, resolve, `createHotmilkRuntime()` |
32
- | `src/bootstrap/` | Bundled extension registration, session, graph, defaults |
33
- | `src/controller/` | `/mode`, `/stop`, `/interrupt` |
34
- | `src/ui/` | Footer, session logo |
35
- | `prompts/`, `skills/`, `themes/` | Shipped Pi assets (`pi.prompts`, `pi.skills`, `pi.themes`); first-party skills live under `./skills/` only |
28
+ | Path | Role |
29
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
30
+ | `src/index.ts` | Extension entry: runtime, register handlers |
31
+ | `src/config/` | `hotmilk.json` I/O, resolve, `createHotmilkRuntime()` |
32
+ | `src/bootstrap/` | Bundled extension registration, session, graph, defaults |
33
+ | `src/controller/` | `/mode`, `/stop`, `/interrupt` |
34
+ | `src/ui/` | Footer, session logo |
35
+ | `prompts/`, `skills/`, `themes/` | Shipped Pi assets (`pi.prompts`, `pi.skills`, `pi.themes`); first-party skills under `./skills/` (`pioneer`, `update-docs`, …) |
36
36
 
37
37
  ## Agent behavior
38
38
 
@@ -42,6 +42,7 @@ Merge with your global agent guidelines when present. For this repo:
42
42
  2. **Simplicity** — No speculative features; keep lazy loading (`extensions.ts`) intact.
43
43
  3. **Verify** — Run `bun test` (and `bun run lint` when changing TS or config).
44
44
  4. **Docs** — User-facing changes in `README.md`; update `hotmilk.json` when changing defaults (code reads it as the template).
45
+ 5. **Workflow** — Plan/memory/optimize routing: [README § Workflow routing](README.md#workflow-routing) and [`skills/pioneer/SKILL.md`](skills/pioneer/SKILL.md).
45
46
 
46
47
  ## More
47
48
 
package/README.md CHANGED
@@ -4,14 +4,21 @@
4
4
 
5
5
  Use it when you want a practical engineering workstation without hand-picking a dozen `pi-*` packages and wiring `settings.json` yourself.
6
6
 
7
+ ## Contents
8
+
9
+ - [What you get](#what-you-get)
10
+ - [Quick start](#quick-start)
11
+ - [Configuration](#configuration) — toggles, `/mode` groups, [workflow routing](#workflow-routing)
12
+ - [Development](#development)
13
+
7
14
  ## What you get
8
15
 
9
16
  | Layer | Packages / assets |
10
17
  | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
11
- | **Orchestration** | [gentle-pi](https://www.npmjs.com/package/gentle-pi) **≥0.4.1** (el Gentleman, SDD/OpenSpec sync, skill registry, `/gentle-ai:doctor`) |
12
- | **Context** | [context-mode](https://www.npmjs.com/package/context-mode) |
18
+ | **Orchestration** | [gentle-pi](https://www.npmjs.com/package/gentle-pi) **^0.10.x** (el Gentleman, SDD/OpenSpec sync, skill registry, `/gentle-ai:doctor`) |
19
+ | **Context** | [context-mode](https://www.npmjs.com/package/context-mode), [pi-observational-memory](https://www.npmjs.com/package/pi-observational-memory) (compaction continuity, default off) |
13
20
  | **Codebase graph** | [graphify-pi](https://www.npmjs.com/package/graphify-pi) |
14
- | **Subagents** | [pi-subagents](https://www.npmjs.com/package/pi-subagents), [pi-ask-user](https://www.npmjs.com/package/pi-ask-user) |
21
+ | **Subagents / actors** | [pi-subagents](https://www.npmjs.com/package/pi-subagents), [pi-ask-user](https://www.npmjs.com/package/pi-ask-user), [pi-actors](https://www.npmjs.com/package/@llblab/pi-actors) (off by default) |
15
22
  | **Goals & docs** | [pi-goal](https://www.npmjs.com/package/pi-goal), [pi-docparser](https://www.npmjs.com/package/pi-docparser) |
16
23
  | **File-based planning** | [@tomxprime/planning-with-files](https://www.npmjs.com/package/@tomxprime/planning-with-files), [@plannotator/pi-extension](https://www.npmjs.com/package/@plannotator/pi-extension) (browser plan approval) |
17
24
  | **Integrations** | [pi-mcp-adapter](https://www.npmjs.com/package/pi-mcp-adapter), [pi-btw](https://www.npmjs.com/package/pi-btw) (side channel — see below), [@haispeed/pi-obsidian](https://www.npmjs.com/package/@haispeed/pi-obsidian) |
@@ -93,19 +100,7 @@ On startup, hotmilk scans only **global** Pi settings for bundled-extension dedu
93
100
 
94
101
  Upstream packages add their own commands (gentle-pi `/gentle-ai:status`, `/gentle-ai:doctor`, SDD chains, graphify, context-mode, planning-with-files `/plan-status`, plannotator `/plannotator`, and so on).
95
102
 
96
- ### Planning with files
97
-
98
- Invoke when you want Manus-style on-disk planning:
99
-
100
- ```text
101
- /skill:planning-with-files
102
- ```
103
-
104
- Or ask Pi to use the planning-with-files skill. The extension maintains `task_plan.md`, `findings.md`, and `progress.md`. Optional: `PWF_MODE=cache-safe` or `planningWithFiles.mode` in settings (see upstream README).
105
-
106
- ### Plannotator (plan approval)
107
-
108
- Enable `extensions.plannotator` in `/mode`, then `/reload`. Start plan mode with `/plannotator plans/<name>.md` or `pi --plan plans/<name>.md`. The agent drafts a checklist plan; you approve or annotate in the browser before execution. See upstream README for `plannotator.json` phase tuning. Default toggle is **off** (~37MB unpacked UI).
103
+ For **which plan, memory, or optimize path to use**, see [Workflow routing](#workflow-routing) (canonical matrix) and the bundled [`pioneer`](skills/pioneer/SKILL.md) skill.
109
104
 
110
105
  ## Configuration
111
106
 
@@ -120,13 +115,16 @@ Enable `extensions.plannotator` in `/mode`, then `/reload`. Start plan mode with
120
115
  "context-mode": true,
121
116
  "ask-user": true,
122
117
  "graphify": true,
118
+ "shazam": false,
123
119
  "subagents": true,
120
+ "pi-actors": false,
124
121
  "goal": true,
125
122
  "docparser": true,
126
123
  "obsidian": true,
127
124
  "btw": true,
128
125
  "simplify": true,
129
126
  "rtk-optimizer": false,
127
+ "observational-memory": false,
130
128
  "mcp-adapter": false,
131
129
  "planning-with-files": false,
132
130
  "plannotator": false,
@@ -144,7 +142,6 @@ Enable `extensions.plannotator` in `/mode`, then `/reload`. Start plan mode with
144
142
  "autoSuggestUpdate": true
145
143
  },
146
144
  "defaults": {
147
- "language": "ja",
148
145
  "persona": "gentleman"
149
146
  },
150
147
  "mcp": {
@@ -157,30 +154,80 @@ Enable `extensions.plannotator` in `/mode`, then `/reload`. Start plan mode with
157
154
  }
158
155
  ```
159
156
 
160
- | Key / area | Behavior |
161
- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
162
- | `extensions.*` | Set to `false` to skip registering that bundled extension |
163
- | `extensions.gentle-ai` | Default `true`. gentle-pi **0.4.1+**: orchestration, lazy SDD preflight, OpenSpec sync/archive agents, `/gentle-ai:doctor` / `:status`. hotmilk keeps **startup-banner off** (figlet header instead) |
164
- | `extensions.subagents` | Default `true`. Imports pi-subagents **0.28+** (~10s): acceptance gates, `timeoutMs`, resource limits. Use with `gentle-ai` for delegation; set `false` for faster startup without Task tools |
165
- | `extensions.btw` | Default `true`. Side conversation via `/btw` while main runs. **Delegate implementation to subagents**; use BTW for quick human questions. See [pi-btw coexistence](#pi-btw-with-subagents-default-on) |
166
- | `extensions.context-mode` | Default `true`. Prefer `ctx_*` for large outputs (see project context-window rules) |
167
- | `extensions.rtk-optimizer` | Default `false`. Bash/read/grep output compaction; enable with `context-mode` for leftover shell output. Install [`rtk` CLI](https://github.com/rtk-ai/rtk) for command rewrite (`/rtk verify`) |
168
- | `extensions.planning-with-files` | Default `false`. Manus-style on-disk planning (`task_plan.md`, `findings.md`, `progress.md`) |
169
- | `extensions.plannotator` | Default `false`. Browser plan approval gate (`/plannotator`, `--plan`); enable when human sign-off before execution |
170
- | `extensions.autoresearch` | Default `false`. Autonomous optimize loop (`/autoresearch`, `.auto/`). See [pi-autoresearch coexistence](#pi-autoresearch-with-gentle-ai-default-off) |
171
- | `extensions.goal` `mcp-adapter` | Integration / perf extensions (formerly always loaded via `pi.extensions`; now toggled like other bundled deps) |
172
- | Enabled extensions | Loaded **in parallel** on session start (faster than sequential import when many toggles are on) |
173
- | `graph.warnOnStale` | Notify when `graphify-out/needs_update` exists |
174
- | `graph.autoSuggestUpdate` | Append `graphify update .` to that notification |
175
- | `defaults.persona` | Seeds `.pi/gentle-ai/persona.json` when missing (`gentleman` \| `neutral`) |
176
- | `defaults.language` | Appends a project language hint to the system prompt each turn |
177
- | `mcp.seedOnStart` | Copy `mcp.json` template into `~/.pi/agent/mcp.json` when missing (empty template; for pi-mcp-adapter) |
178
- | `projectTrust.mode` | Pi project trust: `delegate` (default), `prompt`, `always`, or `never` |
179
- | `projectTrust.remember` | When `mode` is `always` or `never`, persist the decision in Pi `trust.json` |
180
- | `extensions.mcp-adapter` | Default `false`. Enable only when you want MCP servers from `~/.pi/agent/mcp.json` (do not duplicate context-mode) |
157
+ | Key / area | Behavior |
158
+ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
159
+ | `extensions.*` | Set to `false` to skip registering that bundled extension |
160
+ | `extensions.gentle-ai` | Default `true`. gentle-pi **0.10.x** (bundled `^0.10.2`): orchestration, lazy SDD preflight, OpenSpec sync/archive agents, `/gentle-ai:doctor` / `:status`. hotmilk keeps **startup-banner off** (figlet header instead) |
161
+ | `extensions.subagents` | Default `true`. Imports pi-subagents **0.28+** (~10s): acceptance gates, `timeoutMs`, resource limits. Use with `gentle-ai` for delegation; set `false` for faster startup without Task tools |
162
+ | `extensions.btw` | Default `true`. Side conversation via `/btw` while main runs. **Delegate implementation to subagents**; use BTW for quick human questions. See [pi-btw coexistence](#pi-btw-with-subagents-default-on) |
163
+ | `extensions.context-mode` | Default `true`. Prefer `ctx_*` for large outputs (see project context-window rules) |
164
+ | `extensions.observational-memory` | Default `false`. Compaction continuity; pairs with `context-mode`. See [Workflow routing](#workflow-routing) |
165
+ | `extensions.shazam` | Default `false`. Tree-sitter + LSP execute guards (`shazam_impact`, `shazam_verify`); complements graphify — see [Workflow routing](#workflow-routing) |
166
+ | `extensions.rtk-optimizer` | Default `false`. Bash/read/grep output compaction; enable with `context-mode` for leftover shell output. Install [`rtk` CLI](https://github.com/rtk-ai/rtk) for command rewrite (`/rtk verify`) |
167
+ | `extensions.planning-with-files` | Default `false`. On-disk planning see [Workflow routing](#workflow-routing) |
168
+ | `extensions.plannotator` | Default `false`. Browser plan approval see [Workflow routing](#workflow-routing) |
169
+ | `extensions.autoresearch` | Default `false`. Optimize loop see [Workflow routing](#workflow-routing) |
170
+ | `extensions.goal` `mcp-adapter` | Integration / perf extensions (formerly always loaded via `pi.extensions`; now toggled like other bundled deps) |
171
+ | Enabled extensions | Loaded **in parallel** on session start (faster than sequential import when many toggles are on) |
172
+ | `graph.warnOnStale` | Notify when `graphify-out/needs_update` exists |
173
+ | `graph.autoSuggestUpdate` | Append `graphify update .` to that notification |
174
+ | `defaults.persona` | Seeds `.pi/gentle-ai/persona.json` when missing (`gentleman` \| `neutral`) |
175
+ | `defaults.language` | Appends a project language hint to the system prompt each turn |
176
+ | `mcp.seedOnStart` | Copy `mcp.json` template into `~/.pi/agent/mcp.json` when missing (empty template; for pi-mcp-adapter) |
177
+ | `projectTrust.mode` | Pi project trust: `delegate` (default), `prompt`, `always`, or `never` |
178
+ | `projectTrust.remember` | When `mode` is `always` or `never`, persist the decision in Pi `trust.json` |
179
+ | `extensions.mcp-adapter` | Default `false`. Enable only when you want MCP servers from `~/.pi/agent/mcp.json` (do not duplicate context-mode) |
181
180
 
182
181
  **MCP (default):** `context-mode` extension registers `ctx_*` via its built-in bridge (same module as [upstream `.pi/extensions/context-mode`](https://github.com/mksglu/context-mode/tree/main/.pi/extensions/context-mode), loaded from `build/adapters/pi/extension.js`). Hotmilk removes any `context-mode` server from `~/.pi/agent/mcp.json` when the extension is on. Enable `mcp-adapter` only for **other** MCP servers—not a second context-mode entry.
183
182
 
183
+ ### `/mode` groups
184
+
185
+ `/mode` sections follow `BUNDLED_EXTENSION_GROUP_ORDER` in `src/config/bundled-extensions.ts`:
186
+
187
+ | Group | Extensions (toggle ids) |
188
+ | ------------------------- | ------------------------------------------------------------------------------------------------------- |
189
+ | **Harness** | `skill-registry`, `sdd-init`, `gentle-ai` |
190
+ | **Agent tools** | `ask-user`, `graphify`, `shazam`, `subagents`, `pi-actors`, `agent-dashboard`, `web-access`, `pi-flows` |
191
+ | **Context & performance** | `context-mode`, `simplify`, `rtk-optimizer`, `observational-memory` |
192
+ | **Integrations** | `goal`, `docparser`, `obsidian`, `btw`, `mcp-adapter` |
193
+ | **Workflow** | `planning-with-files`, `plannotator`, `red-green` |
194
+ | **Output** | `caveman`, `kanagawa` |
195
+ | **Experiments** | `autoresearch`, `tetris` |
196
+
197
+ ### Workflow routing
198
+
199
+ Pick **one plan authority per task**. Memory and optimize loops are **not** plan paths — they layer beside execution. Full tie-breakers and anti-patterns: bundled [`pioneer`](skills/pioneer/SKILL.md) skill.
200
+
201
+ **Plan paths** (enable toggle → `/reload` when default off):
202
+
203
+ | When | Toggle / command | Artifact | Pioneer reference |
204
+ | --------------------------------- | ---------------------------------------------------- | -------------------------------------------- | ---------------------------------------------------------------------------- |
205
+ | Small, bounded fix | (none) — chat `Plan:` | chat only | [`chat-plan.md`](skills/pioneer/references/chat-plan.md) |
206
+ | Medium scope + browser approval | `plannotator` → `/plannotator plans/<name>.md` | `plans/*.md` | [`plannotator-routing.md`](skills/pioneer/references/plannotator-routing.md) |
207
+ | Heavy research, `/clear` recovery | `planning-with-files` → `/skill:planning-with-files` | `task_plan.md`, `findings.md`, `progress.md` | upstream PWF skill |
208
+ | Cross-cutting, spec, >400L review | `gentle-ai` → OpenSpec SDD | `openspec/changes/<change>/` | [`openspec-routing.md`](skills/pioneer/references/openspec-routing.md) |
209
+
210
+ **Memory layers** (supplementary — never replace plan/spec authority):
211
+
212
+ | Need | Prefer |
213
+ | ----------------------------- | ------------------------------------------------------------------------------- |
214
+ | Large logs, docs, test output | `context-mode` → `ctx_*` |
215
+ | Rationale across compactions | `observational-memory` (extra model cost; V3 needs clean session after upgrade) |
216
+ | User-readable plan files | `planning-with-files` |
217
+ | Execute-time impact / LSP | `shazam` (after graphify recon; not a graph replacement) |
218
+
219
+ Details: [`observational-memory-routing.md`](skills/pioneer/references/observational-memory-routing.md), [`shazam-routing.md`](skills/pioneer/references/shazam-routing.md).
220
+
221
+ **Optimize loops** (mutually exclusive with SDD/Plannotator on the same task):
222
+
223
+ | Need | Prefer |
224
+ | ------------------------------------------ | ------------------------------------------------------------ |
225
+ | Metric optimize (bench, bundle size, loss) | `autoresearch` → `/skill:autoresearch-create` |
226
+ | Feature delivery, spec, approval gates | `gentle-ai` SDD or `plannotator` — keep autoresearch **off** |
227
+ | Correctness-first TDD | `red-green` (`/tdd`) |
228
+
229
+ Stop active loops (`/autoresearch off`) before switching plan paths. Details: [`autoresearch-routing.md`](skills/pioneer/references/autoresearch-routing.md). Default shortcut `Ctrl+Shift+F` — override in `~/.pi/agent/extensions/pi-autoresearch.json`.
230
+
184
231
  ### Agents, skills, and scope
185
232
 
186
233
  Pi resolves bundled assets at **user (global)**, **project**, and **package** layers. hotmilk ships package defaults; you override per machine or per repo.
@@ -284,46 +331,38 @@ Set `"btw": false` in `/mode` if you want delegation only with no side channel.
284
331
 
285
332
  ### Optional extensions (off by default)
286
333
 
287
- Enable in `/mode` or set the key to `true` in `hotmilk.json`, then `/reload`.
288
-
289
- | Toggle | Package | Notes |
290
- | ----------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
291
- | `caveman` | [pi-caveman](https://www.npmjs.com/package/pi-caveman) | Terse English (`/caveman`). Conflicts with `defaults.language: ja` |
292
- | `red-green` | [pi-red-green](https://www.npmjs.com/package/pi-red-green) | TDD via `/tdd`, `/tdd-status`. Config: `~/.pi/red-green/config.json` |
293
- | `plannotator` | [@plannotator/pi-extension](https://www.npmjs.com/package/@plannotator/pi-extension) | Browser plan approval (`/plannotator`, `pi --plan`). Planning phase restricts writes to the plan file; Approve/Deny in browser before execution. Default off (~37MB UI). Phase tuning: `~/.pi/agent/plannotator.json`. See [Plannotator (plan approval)](#plannotator-plan-approval); pioneer routing: [`skills/pioneer/references/plannotator-routing.md`](skills/pioneer/references/plannotator-routing.md) |
294
- | `autoresearch` | [pi-autoresearch](https://www.npmjs.com/package/pi-autoresearch) | Autonomous optimize loop (`/autoresearch`, `.auto/` session files). Skills: `autoresearch-create`, `autoresearch-finalize`, `autoresearch-hooks`. Default shortcut `Ctrl+Shift+F` — override in `~/.pi/agent/extensions/pi-autoresearch.json`. Off by default (dashboard widget + shortcuts). See [coexistence](#pi-autoresearch-with-gentle-ai-default-off) |
295
- | `agent-dashboard` | [@blackbelt-technology/pi-agent-dashboard](https://www.npmjs.com/package/@blackbelt-technology/pi-agent-dashboard) | Warm-starts before the bridge loads (cold boot up to ~60s). Peers **0.74**; test on 0.80 before relying on it. Node.js ≥ 22.18 |
296
- | `web-access` | [pi-web-access](https://www.npmjs.com/package/pi-web-access) | `web_search`, fetch, GitHub clone, PDF/video. Optional keys: `~/.pi/web-search.json` |
297
- | `pi-flows` | [@blackbelt-technology/pi-flows](https://www.npmjs.com/package/@blackbelt-technology/pi-flows) | YAML DAG workflows (`/flows`). Peers **0.74** + `@sinclair/typebox`; off by default on 0.80 stacks |
298
- | `kanagawa` | [pi-kanagawa](https://www.npmjs.com/package/pi-kanagawa) | Kanagawa theme (also in `/theme` via shipped assets), wave animation, `/thinking`. **Replaces hotmilk footer** when on |
299
- | `tetris` | [pi-tetris](https://www.npmjs.com/package/pi-tetris) | Play Tetris with `/tetris`. Lightweight; default off |
300
-
301
- ### pi-autoresearch with gentle-ai (default off)
302
-
303
- `autoresearch` lives under the **Experiments** group in `/mode` (with `tetris`). Enable when the task is a **measure → edit → benchmark → keep/discard** loop, not feature delivery.
334
+ Enable in `/mode` or set the key to `true` in `hotmilk.json`, then `/reload`. Workflow-oriented toggles are summarized in [Workflow routing](#workflow-routing).
335
+
336
+ | Toggle | Package | Notes |
337
+ | ----------------------- | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
338
+ | `planning-with-files` | [@tomxprime/planning-with-files](https://www.npmjs.com/package/@tomxprime/planning-with-files) | On-disk planning; `/skill:planning-with-files` |
339
+ | `plannotator` | [@plannotator/pi-extension](https://www.npmjs.com/package/@plannotator/pi-extension) | `/plannotator`, `pi --plan`; ~37MB UI; `plannotator.json` |
340
+ | `observational-memory` | [pi-observational-memory](https://www.npmjs.com/package/pi-observational-memory) | Compaction continuity; V3 = clean session after upgrade |
341
+ | `supi-context` | [@mrclrchtr/supi-context](https://www.npmjs.com/package/@mrclrchtr/supi-context) | Context analysis & formatting; default off |
342
+ | `shazam` | [pi-shazam](https://www.npmjs.com/package/pi-shazam) | `shazam_*` tools; LSP-backed verify; complements graphify |
343
+ | `autoresearch` | [pi-autoresearch](https://www.npmjs.com/package/pi-autoresearch) | `/autoresearch`, `.auto/`; shortcut override in `pi-autoresearch.json` |
344
+ | `caveman` | [pi-caveman](https://www.npmjs.com/package/pi-caveman) | Terse English; conflicts with `defaults.language: ja` |
345
+ | `red-green` | [pi-red-green](https://www.npmjs.com/package/pi-red-green) | `/tdd`, `/tdd-status`; `~/.pi/red-green/config.json` |
346
+ | `agent-dashboard` | [@blackbelt-technology/pi-agent-dashboard](https://www.npmjs.com/package/@blackbelt-technology/pi-agent-dashboard) | Warm-start; peers **0.74** test on 0.80 |
347
+ | `web-access` | [pi-web-access](https://www.npmjs.com/package/pi-web-access) | `web_search`, fetch; `~/.pi/web-search.json` |
348
+ | `pi-flows` | [@blackbelt-technology/pi-flows](https://www.npmjs.com/package/@blackbelt-technology/pi-flows) | `/flows`; peers **0.74** |
349
+ | `pi-actors` | [@llblab/pi-actors](https://www.npmjs.com/package/@llblab/pi-actors) | Local actor kernel (`spawn`, `message`, `inspect`) |
350
+ | `prompt-template-model` | [pi-prompt-template-model](https://www.npmjs.com/package/pi-prompt-template-model) | Prompt template model selector; default off |
351
+ | `kanagawa` | [pi-kanagawa](https://www.npmjs.com/package/pi-kanagawa) | Theme; **replaces hotmilk footer** when on |
352
+ | `tetris` | [pi-tetris](https://www.npmjs.com/package/pi-tetris) | `/tetris` |
353
+ | `latchkey` | [latchkey](https://www.npmjs.com/package/latchkey) | **Skill-only** — API credential injection via `/skill:latchkey` |
354
+
355
+ ### Alternative skill stacks (not bundled)
356
+
357
+ hotmilk does **not** bundle [bigpowers](https://github.com/danielvm-git/bigpowers) — a separate spec-driven skill stack (70+ skills, prompts, MCP). It has no `pi.extensions` entry, runs `postinstall` global symlinks, and **conflicts with gentle-pi / pioneer plan routing**. Install separately if you want that workflow instead of hotmilk's defaults:
304
358
 
305
- | Task shape | Prefer |
306
- | ---------------------------------------------------------- | -------------------------------------------------------------------------- |
307
- | Optimize metric (test time, bundle size, loss, Lighthouse) | `autoresearch: true` → `/skill:autoresearch-create` or `/autoresearch` |
308
- | Feature, spec, cross-cutting, review >400 lines | `gentle-ai` + OpenSpec/SDD — keep `autoresearch` off |
309
- | Human plan approval before writes | `plannotator` — not autoresearch as plan authority |
310
- | Strict correctness-first test cycle | `red-green` (`/tdd`) — autoresearch only when optimizing the metric itself |
311
-
312
- **Do not run SDD phases and an active autoresearch loop on the same task.** Stop the loop (`/autoresearch off`) before `/sdd-continue` or Plannotator approval work. Pioneer routing: [`skills/pioneer/references/autoresearch-routing.md`](skills/pioneer/references/autoresearch-routing.md).
313
-
314
- **Shortcut conflicts:** default fullscreen dashboard is `Ctrl+Shift+F`. Override or disable in `~/.pi/agent/extensions/pi-autoresearch.json`:
315
-
316
- ```json
317
- {
318
- "shortcuts": {
319
- "fullscreenDashboard": "ctrl+shift+y"
320
- }
321
- }
359
+ ```bash
360
+ pi install npm:bigpowers
322
361
  ```
323
362
 
324
- Use `null` for a shortcut key to skip registration.
363
+ Do not enable bigpowers alongside pioneer OpenSpec/Plannotator on the same task. See [`.agents/plans/EXTENSIONS.md`](.agents/plans/EXTENSIONS.md) §L8.
325
364
 
326
- **Agent dashboard troubleshooting**
365
+ ### Agent dashboard troubleshooting
327
366
 
328
367
  - Run **one** dashboard process: either hotmilk warm-start (`agent-dashboard: true`) **or** manual `npm run dashboard:start`, not both.
329
368
  - Keep only `"hotmilk"` in `~/.pi/agent/settings.json` `packages[]` (not a standalone dashboard extension path). Hotmilk prunes duplicate dashboard paths on session start when `agent-dashboard` is enabled.
@@ -388,14 +427,14 @@ npm publish --access public
388
427
 
389
428
  ### Layout
390
429
 
391
- | Path | Role |
392
- | -------------------------------- | ------------------------------------------------------------------------------------------------- |
393
- | `src/index.ts` | Extension entry: config, bundled extensions, session UI, input routing |
394
- | `src/config/hotmilk.ts` | `hotmilk.json` load / seed / save |
395
- | `agents/` | Package-canonical subagent prompts (`package: hotmilk`); install into `.pi/agents/` for discovery |
396
- | `prompts/`, `skills/`, `themes/` | Shipped with the package (`pi.prompts`, `pi.skills`, `pi.themes`) |
397
- | `mcp.json` | MCP server template for local projects |
398
- | `hotmilk.json` | Default toggle template (published in the npm package) |
430
+ | Path | Role |
431
+ | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
432
+ | `src/index.ts` | Extension entry: config, bundled extensions, session UI, input routing |
433
+ | `src/config/hotmilk.ts` | `hotmilk.json` load / seed / save |
434
+ | `agents/` | Package-canonical subagent prompts (`package: hotmilk`); install into `.pi/agents/` for discovery |
435
+ | `prompts/`, `skills/`, `themes/` | Shipped with the package (`pi.prompts`, `pi.skills`, `pi.themes`); workflow routing in [`skills/pioneer/`](skills/pioneer/SKILL.md) |
436
+ | `mcp.json` | MCP server template for local projects |
437
+ | `hotmilk.json` | Default toggle template (published in the npm package) |
399
438
 
400
439
  ## License
401
440
 
@@ -2,7 +2,7 @@
2
2
  name: assistant
3
3
  description: General-purpose coding assistant for reading, writing, and reviewing code
4
4
  tools: read, grep, find, ls, bash, edit, write, todo, subagent
5
- model: cursor/auto
5
+ # model: cursor/auto
6
6
  thinking: low
7
7
  systemPromptMode: replace
8
8
  inheritProjectContext: true
package/agents/coach.md CHANGED
@@ -35,9 +35,30 @@ When the user clearly wants implementation, say so and recommend parent route to
35
35
  ## Coaching method
36
36
 
37
37
  1. Restate the goal in one sentence; list what is **known** vs **assumed**.
38
- 2. Teach the **minimum** concept needed for the next decision (diagrams or short tables OK).
39
- 3. Offer **2–3** options with tradeoffs and how each would be **verified** (`bun test`, doctor, graphify, Share_op, etc.).
40
- 4. End with one **recommended next step** for the parent (e.g. `planner`, `scout`, `ask-user`, inline fix).
38
+ 2. Surface the **TCZ contract** for this goal: `V`, `θ`, `Share`/`S_i`, and the **LUB candidate** (see below).
39
+ 3. Teach the **minimum** concept needed for the next decision (diagrams or short tables OK).
40
+ 4. Offer **2–3** options with tradeoffs and how each would be **verified** (`bun test`, doctor, graphify, Share_op, multi-bridge ensemble, etc.).
41
+ 5. End with one **recommended next step** for the parent (e.g. `planner`, `scout`, `ask-user`, inline fix).
42
+
43
+ ### TCZ convergence check (V / θ / Share / LUB)
44
+
45
+ Treat coaching as helping the human ascend toward the **least upper bound (LUB)** of shared abstraction, not just answering the immediate question.
46
+
47
+ - **Theorem 1 / 個別収束**: for every goal, make `V` (verification potential) and `θ` (acceptance threshold) explicit in the coaching output. If the user cannot state them, push back and ask up to three targeted questions before routing to a planner.
48
+ - **Theorem 2 / 共有整合**: when the goal involves multiple agents, shared artifacts, or review gates, identify the shared checks `S_i` and the minimum `Share ≥ η` that must hold across them.
49
+ - **Theorem 3 / 領域固定**: for large, ambiguous, or bridge-split changes, state an **LUB candidate** — the smallest shared abstraction that all acceptable implementations would satisfy. If multiple plausible agent outputs exist, recommend a **multi-bridge ensemble** (multiple independent implementations whose LUB is checked against the LUB candidate).
50
+ - **Boundary maintenance**: the coach intervenes at the `V ≈ θ` boundary, not inside the converged interior. If the user is about to delegate to `planner` with unstated `V`/`θ` or LUB, pause and ask.
51
+
52
+ ## Before delegating to planner
53
+
54
+ A handoff to `planner` should include — or explicitly waive — all of:
55
+
56
+ 1. `V`: what concrete evidence will prove the change is correct?
57
+ 2. `θ`: what is the minimum acceptable value of that evidence?
58
+ 3. `LUB candidate`: what shared abstraction must every acceptable implementation satisfy?
59
+ 4. `Constraints / Boundaries / Iteration policy / Blocked stop condition` from the strong goal contract.
60
+
61
+ If any are missing and the user still wants a plan, write the handoff with `V`, `θ`, and LUB as open risks that `planner` must resolve first.
41
62
 
42
63
  ## Working rules
43
64
 
@@ -2,7 +2,7 @@
2
2
  name: designer
3
3
  description: Frontend design specialist for HTML/CSS/JSX/TSX/MDX with UI styling and UX focus
4
4
  tools: read, grep, find, ls, bash, edit, write, todo, subagent
5
- model: cursor/auto
5
+ # model: cursor/auto
6
6
  thinking: medium
7
7
  systemPromptMode: replace
8
8
  inheritProjectContext: true
package/hotmilk.json CHANGED
@@ -6,13 +6,17 @@
6
6
  "context-mode": true,
7
7
  "ask-user": true,
8
8
  "graphify": true,
9
+ "shazam": false,
9
10
  "subagents": true,
11
+ "pi-actors": false,
10
12
  "goal": true,
11
13
  "docparser": true,
12
14
  "obsidian": true,
13
15
  "btw": true,
14
16
  "simplify": true,
15
17
  "rtk-optimizer": false,
18
+ "observational-memory": false,
19
+ "supi-context": false,
16
20
  "mcp-adapter": false,
17
21
  "planning-with-files": false,
18
22
  "plannotator": false,
@@ -23,6 +27,7 @@
23
27
  "web-access": false,
24
28
  "pi-flows": false,
25
29
  "kanagawa": false,
30
+ "prompt-template-model": false,
26
31
  "tetris": false
27
32
  },
28
33
  "graph": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hotmilk",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "hotmilk — Pi package bundling gentle-pi, context-mode, graphify, subagents, and bundled extension toggles via hotmilk.json",
5
5
  "keywords": [
6
6
  "hotmilk",
@@ -38,47 +38,63 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@blackbelt-technology/pi-agent-dashboard": "^0.5.4",
41
- "@blackbelt-technology/pi-flows": "^0.2.4",
41
+ "@blackbelt-technology/pi-flows": "^0.3.2",
42
42
  "@haispeed/pi-obsidian": "^0.1.1",
43
- "@plannotator/pi-extension": "^0.21.2",
43
+ "@llblab/pi-actors": "^0.39.0",
44
+ "@mrclrchtr/supi-context": "^2.2.1",
45
+ "@plannotator/pi-extension": "^0.22.0",
44
46
  "@tomxprime/planning-with-files": "^1.1.0",
45
- "context-mode": "^1.0.168",
46
- "gentle-pi": "^0.10.2",
47
+ "context-mode": "^1.0.169",
48
+ "gentle-pi": "^0.13.0",
47
49
  "graphify-pi": "^0.3.0",
48
- "pi-ask-user": "^0.11.2",
49
- "pi-autoresearch": "^1.6.0",
50
+ "latchkey": "^2.20.1",
51
+ "pi-ask-user": "^0.12.0",
52
+ "pi-autoresearch": "^1.6.2",
50
53
  "pi-btw": "^0.4.1",
51
54
  "pi-caveman": "^1.0.7",
52
55
  "pi-docparser": "^3.0.1",
53
56
  "pi-goal": "^0.1.7",
54
57
  "pi-kanagawa": "^1.0.0",
55
- "pi-mcp-adapter": "^2.10.0",
58
+ "pi-mcp-adapter": "^2.11.0",
59
+ "pi-observational-memory": "^3.0.3",
60
+ "pi-prompt-template-model": "^0.10.0",
56
61
  "pi-red-green": "^0.2.2",
57
- "pi-rtk-optimizer": "^0.8.3",
62
+ "pi-rtk-optimizer": "^0.9.0",
63
+ "pi-shazam": "^0.26.0",
58
64
  "pi-simplify": "^0.2.2",
59
- "pi-subagents": "^0.31.0",
65
+ "pi-subagents": "^0.34.0",
60
66
  "pi-tetris": "^1.3.1",
61
67
  "pi-web-access": "^0.13.0"
62
68
  },
63
69
  "devDependencies": {
64
- "@earendil-works/pi-agent-core": "^0.80.2",
65
- "@earendil-works/pi-ai": "^0.80.2",
66
- "@earendil-works/pi-coding-agent": "^0.80.2",
67
- "@earendil-works/pi-tui": "^0.80.2",
68
- "@types/node": "^22.20.0",
69
- "typebox": "^1.3.1",
70
- "vite-plus": "^0.2.1"
70
+ "@earendil-works/pi-agent-core": "^0.80.6",
71
+ "@earendil-works/pi-ai": "^0.80.6",
72
+ "@earendil-works/pi-coding-agent": "^0.80.6",
73
+ "@earendil-works/pi-tui": "^0.80.6",
74
+ "@types/node": "^22.20.1",
75
+ "typebox": "^1.3.6",
76
+ "vite-plus": "^0.2.4"
71
77
  },
72
78
  "peerDependencies": {
73
- "@earendil-works/pi-agent-core": "^0.80.2",
74
- "@earendil-works/pi-ai": "^0.80.2",
75
- "@earendil-works/pi-coding-agent": "^0.80.2",
76
- "@earendil-works/pi-tui": "^0.80.2",
77
- "typebox": "^1.3.0"
79
+ "@earendil-works/pi-agent-core": "^0.80.6",
80
+ "@earendil-works/pi-ai": "^0.80.6",
81
+ "@earendil-works/pi-coding-agent": "^0.80.6",
82
+ "@earendil-works/pi-tui": "^0.80.6",
83
+ "typebox": "^1.3.6"
78
84
  },
79
85
  "overrides": {
86
+ "@earendil-works/pi-coding-agent": "^0.80.6",
80
87
  "@fastify/static": "9.1.3",
81
- "@mozilla/readability": "0.6.0"
88
+ "@mariozechner/pi-coding-agent": "npm:@earendil-works/pi-coding-agent@^0.80.6",
89
+ "@mozilla/readability": "0.6.0",
90
+ "dompurify": "^3.4.11",
91
+ "esbuild": "0.28.1",
92
+ "hono": "^4.12.28",
93
+ "linkify-it": "^5.0.1",
94
+ "protobufjs": "^7.6.3",
95
+ "undici": "^7.28.0",
96
+ "vite": "^8.1.4",
97
+ "ws": "8.21.0"
82
98
  },
83
99
  "engines": {
84
100
  "node": "22"