@tacuchi/agent-workflow-cli 20.24.0 → 20.26.0

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 (82) hide show
  1. package/README.md +34 -11
  2. package/dist/application/dev-only-services.js +17 -14
  3. package/dist/application/dev-only-services.js.map +1 -1
  4. package/dist/application/mcp-host-reader.js +3 -1
  5. package/dist/application/mcp-host-reader.js.map +1 -1
  6. package/dist/application/mcp-host-writer.js +86 -41
  7. package/dist/application/mcp-host-writer.js.map +1 -1
  8. package/dist/application/plugin-doctor/hooks.js +7 -1
  9. package/dist/application/plugin-doctor/hooks.js.map +1 -1
  10. package/dist/application/self/bootstrap.js +30 -16
  11. package/dist/application/self/bootstrap.js.map +1 -1
  12. package/dist/application/self/clean-legacy.js +5 -0
  13. package/dist/application/self/clean-legacy.js.map +1 -1
  14. package/dist/application/self/detect-hosts.js +31 -45
  15. package/dist/application/self/detect-hosts.js.map +1 -1
  16. package/dist/application/self/doctor-self.js +7 -2
  17. package/dist/application/self/doctor-self.js.map +1 -1
  18. package/dist/application/self/hooks-toml.js +232 -0
  19. package/dist/application/self/hooks-toml.js.map +1 -0
  20. package/dist/application/self/host-states.js +290 -0
  21. package/dist/application/self/host-states.js.map +1 -0
  22. package/dist/application/self/install-hooks.js +98 -4
  23. package/dist/application/self/install-hooks.js.map +1 -1
  24. package/dist/application/self/install-skill.js +53 -24
  25. package/dist/application/self/install-skill.js.map +1 -1
  26. package/dist/application/self/install-targets.js +23 -0
  27. package/dist/application/self/install-targets.js.map +1 -1
  28. package/dist/application/self/mcp-config.js +13 -19
  29. package/dist/application/self/mcp-config.js.map +1 -1
  30. package/dist/application/self/skills-manager.js +9 -0
  31. package/dist/application/self/skills-manager.js.map +1 -1
  32. package/dist/application/self/uninstall.js +162 -26
  33. package/dist/application/self/uninstall.js.map +1 -1
  34. package/dist/cli/commands/dev-only.js +4 -1
  35. package/dist/cli/commands/dev-only.js.map +1 -1
  36. package/dist/cli/commands/mcp.js +16 -8
  37. package/dist/cli/commands/mcp.js.map +1 -1
  38. package/dist/cli/tui/components/host-admin-section.js +69 -60
  39. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  40. package/dist/cli/tui/data/workflow-content.js +6 -0
  41. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  42. package/dist/cli/tui/hosts.js +39 -17
  43. package/dist/cli/tui/hosts.js.map +1 -1
  44. package/dist/cli/tui/tabs/config-tab.js +3 -3
  45. package/dist/cli/tui/tabs/config-tab.js.map +1 -1
  46. package/dist/cli/tui/tabs/mcp-tab-helpers.js +7 -1
  47. package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
  48. package/dist/cli/tui/tabs/mcp-tab.js +32 -10
  49. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  50. package/dist/cli/tui/tabs/skills-tab.js +13 -4
  51. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  52. package/dist/cli/tui/tabs/status-tab.js +11 -17
  53. package/dist/cli/tui/tabs/status-tab.js.map +1 -1
  54. package/dist/cli/tui/tabs/workflow-tab.js +7 -3
  55. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  56. package/dist/cli/tui/tui-prefs.js +7 -1
  57. package/dist/cli/tui/tui-prefs.js.map +1 -1
  58. package/dist/domain/harnesses.js +129 -0
  59. package/dist/domain/harnesses.js.map +1 -1
  60. package/dist/domain/host-verification.js +20 -0
  61. package/dist/domain/host-verification.js.map +1 -0
  62. package/package.json +3 -2
  63. package/skills/w/SKILL.md +3 -3
  64. package/skills/w/commands/README.md +2 -0
  65. package/skills/w/commands/export-diagrams.md +1 -1
  66. package/skills/w/commands/export-manuals.md +1 -1
  67. package/skills/w/commands/export-reports.md +1 -1
  68. package/skills/w/commands/export-scripts.md +1 -1
  69. package/skills/w/commands/fix-git.md +1 -1
  70. package/skills/w/commands/generate-launch.md +2 -2
  71. package/skills/w/commands/persist.md +2 -2
  72. package/skills/w/commands/plan-exec.md +2 -2
  73. package/skills/w/commands/plan-new.md +2 -2
  74. package/skills/w/commands/plan-refine.md +2 -2
  75. package/skills/w/commands/quick.md +2 -2
  76. package/skills/w/commands/resume.md +2 -2
  77. package/skills/w/commands/spec-new.md +2 -2
  78. package/skills/w/commands/spec-refine.md +2 -2
  79. package/skills/w/commands/status.md +1 -1
  80. package/skills/w/commands/workspace-init.md +1 -1
  81. package/skills/w/harness/HARNESS.md +32 -21
  82. package/skills/w/loops/CHASSIS.md +7 -6
@@ -1,6 +1,13 @@
1
+ import { HOST_VERIFICATIONS } from "./host-verification.js";
1
2
  export const HARNESSES = [
2
3
  {
3
4
  id: "claude-code",
5
+ label: "Claude Code",
6
+ glyph: "C",
7
+ support: { tier: "official" },
8
+ runtime: { bins: ["claude"], versionArgs: ["--version"] },
9
+ configDir: { kind: "dir", path: "~/.claude" },
10
+ hooks: { mechanism: "~/.claude/settings.json → hooks{}", managed: true },
4
11
  envMarkers: ["CLAUDECODE", "CLAUDE_PLUGIN_ROOT", "CLAUDE_AGENT_ID"],
5
12
  mcpHostId: "claude",
6
13
  globalMcpPaths: {
@@ -16,6 +23,15 @@ export const HARNESSES = [
16
23
  },
17
24
  {
18
25
  id: "codex",
26
+ label: "Codex",
27
+ glyph: "X",
28
+ support: { tier: "official" },
29
+ runtime: { bins: ["codex"], versionArgs: ["--version"] },
30
+ configDir: { kind: "dir", path: "~/.codex" },
31
+ // Codex HAS hooks, in a different format (TOML) with no settled user-level
32
+ // syntax — declared, not managed: the surfaces say "available, not armed"
33
+ // instead of pretending the host has none.
34
+ hooks: { mechanism: "~/.codex/config.toml (plugin hooks/hooks.json)", managed: false },
19
35
  envMarkers: ["CODEX_HOME", "CODEX_CLI", "CODEX_RUNTIME"],
20
36
  mcpHostId: "codex",
21
37
  globalMcpPaths: {
@@ -40,6 +56,17 @@ export const HARNESSES = [
40
56
  // Keep oz before warp in the array so first-match detection picks oz first
41
57
  // when both OZ_RUN_ID and TERM_PROGRAM=WarpTerminal are set.
42
58
  id: "oz",
59
+ label: "Oz",
60
+ glyph: "Z",
61
+ support: { tier: "best-effort", unstableSurface: true },
62
+ // Oz ships inside Warp.app (…/Contents/Resources/bin/oz) and Warp puts that
63
+ // dir on PATH — so the binary IS probe-able even though ~/.oz never exists.
64
+ runtime: { bins: ["oz"], versionArgs: ["--version"] },
65
+ configDir: {
66
+ kind: "none",
67
+ reason: "Oz runs inside Warp's environment and keeps no config dir of its own",
68
+ },
69
+ hooks: null, // DEC-W4: no hook system.
43
70
  envMarkers: ["OZ_RUN_ID"],
44
71
  mcpHostId: null, // Oz does not write a config file; emits JSON for --mcp flag
45
72
  pluginManifest: null,
@@ -49,6 +76,14 @@ export const HARNESSES = [
49
76
  },
50
77
  {
51
78
  id: "warp",
79
+ label: "Warp Terminal",
80
+ glyph: "W",
81
+ support: { tier: "official" },
82
+ // No `warp` CLI exists: it is a GUI terminal. Runtime availability is
83
+ // therefore not probe-able — the detection reports that, it does not guess.
84
+ runtime: { bins: [], versionArgs: [] },
85
+ configDir: { kind: "mcp-parent" },
86
+ hooks: null, // DEC-W4: no hook system.
52
87
  envMarkers: ["WARP_IS_LOCAL_SHELL_SESSION"],
53
88
  termProgramMatch: "WarpTerminal",
54
89
  mcpHostId: "warp",
@@ -81,6 +116,14 @@ export const HARNESSES = [
81
116
  // ANTIGRAVITY_* markers are the env vars agy exports to subprocesses.
82
117
  // MCP in settings.json (mcpServers, Claude-compatible shape).
83
118
  id: "gemini",
119
+ label: "Gemini CLI / Antigravity",
120
+ glyph: "G",
121
+ support: { tier: "official" },
122
+ // `agy` is the live binary; `gemini` is the deprecated CLI that shares
123
+ // ~/.gemini. Probed in that order so the successor wins.
124
+ runtime: { bins: ["agy", "gemini"], versionArgs: ["--version"] },
125
+ configDir: { kind: "dir", path: "~/.gemini" },
126
+ hooks: { mechanism: "extension-bundled (BeforeTool)", managed: false },
84
127
  envMarkers: [
85
128
  "GEMINI_CLI",
86
129
  "GEMINI_SANDBOX",
@@ -106,6 +149,12 @@ export const HARNESSES = [
106
149
  // (type "local", command as array, `environment`). Reads .claude/skills and
107
150
  // .agents/skills directly. Enforcement via JS plugins (tool.execute.before) — Phase 2.
108
151
  id: "opencode",
152
+ label: "OpenCode",
153
+ glyph: "O",
154
+ support: { tier: "best-effort" },
155
+ runtime: { bins: ["opencode"], versionArgs: ["--version"] },
156
+ configDir: { kind: "mcp-parent" },
157
+ hooks: { mechanism: "JS/TS plugins (tool.execute.before)", managed: false },
109
158
  envMarkers: ["OPENCODE", "OPENCODE_BIN", "OPENCODE_CONFIG"],
110
159
  mcpHostId: "opencode",
111
160
  globalMcpPaths: {
@@ -126,6 +175,12 @@ export const HARNESSES = [
126
175
  // Global config verified 2026-07 (README charmbracelet/crush): Unix XDG,
127
176
  // Windows %LOCALAPPDATA%\crush\crush.json (override CRUSH_GLOBAL_CONFIG).
128
177
  id: "crush",
178
+ label: "Crush",
179
+ glyph: "R",
180
+ support: { tier: "best-effort", unstableSurface: true },
181
+ runtime: { bins: ["crush"], versionArgs: ["--version"] },
182
+ configDir: { kind: "mcp-parent" },
183
+ hooks: { mechanism: "preliminary; enforcement via allowed_tools allowlist", managed: false },
129
184
  envMarkers: ["CRUSH", "CRUSH_CONFIG"],
130
185
  mcpHostId: "crush",
131
186
  globalMcpPaths: {
@@ -148,7 +203,81 @@ export const HARNESSES = [
148
203
  ],
149
204
  installTarget: "crush",
150
205
  },
206
+ {
207
+ // Kimi Code (MoonshotAI) — successor of the Python `kimi-cli`, shipped as a
208
+ // single Node SEA binary. Everything below was verified 2026-07-29 against
209
+ // the shipped v0.29.2 binary (its JS is readable) plus live probes:
210
+ // · skills, 4 tiers: user `<KIMI_CODE_HOME>/skills` + `~/.agents/skills`,
211
+ // project `.kimi-code/skills` + `.agents/skills`. Probe: a skill dropped
212
+ // in ~/.agents/skills was listed AND invoked as `/skill:<name>`.
213
+ // · hooks in `[[hooks]]` of the USER-GLOBAL config.toml only — there is no
214
+ // project-level config.toml (probe: a project hook never fired). Schema
215
+ // is event/matcher/command/timeout, strict — NOT Claude's shape.
216
+ // · MCP `mcp.json` with the Claude-compatible `mcpServers` wrapper: global
217
+ // `~/.kimi-code/mcp.json`, project `<cwd>/.kimi-code/mcp.json`.
218
+ // · NO env markers reach subprocesses (probe: `env | grep ^KIMI` is empty
219
+ // inside its own shell tool), hence the empty envMarkers and the binary
220
+ // probe below — the installer lives in ~/.kimi-code/bin, a dir only
221
+ // interactive shells put on PATH.
222
+ id: "kimi",
223
+ label: "Kimi Code",
224
+ glyph: "K",
225
+ support: { tier: "official", unstableSurface: true },
226
+ runtime: {
227
+ bins: ["kimi"],
228
+ fallbackBinPaths: ["~/.kimi-code/bin/kimi"],
229
+ versionArgs: ["--version"],
230
+ },
231
+ configDir: { kind: "dir", path: "~/.kimi-code" },
232
+ hooks: { mechanism: "~/.kimi-code/config.toml → [[hooks]]", managed: true },
233
+ envMarkers: [],
234
+ mcpHostId: "kimi",
235
+ globalMcpPaths: {
236
+ darwin: "~/.kimi-code/mcp.json",
237
+ linux: "~/.kimi-code/mcp.json",
238
+ win32: "~/.kimi-code/mcp.json",
239
+ },
240
+ projectMcpPath: ".kimi-code/mcp.json",
241
+ pluginManifest: null, // Kimi has plugins, but no manifest convention we ship.
242
+ pluginHooksDir: null, // Its hooks live in config.toml, not in a plugin dir.
243
+ skillsDirs: [".kimi-code/skills", ".agents/skills"],
244
+ installTarget: "kimi",
245
+ },
246
+ ];
247
+ /** Hosts that auto-discover skills from the open-standard `~/.agents/skills`. */
248
+ function hostsReading(dir) {
249
+ return HARNESSES.filter((h) => h.skillsDirs.includes(dir)).map((h) => h.id);
250
+ }
251
+ export const SHARED_SKILL_DESTINATIONS = [
252
+ {
253
+ id: "agents",
254
+ label: "Agents (shared skills dir)",
255
+ glyph: "A",
256
+ dir: "~/.agents/skills",
257
+ readBy: hostsReading(".agents/skills"),
258
+ },
151
259
  ];
260
+ /** One install target per host, in catalog order. THE host set. */
261
+ export const HOST_INSTALL_TARGETS = HARNESSES.map((h) => h.installTarget);
262
+ /**
263
+ * Hosts that write an MCP config FILE. Oz is out on purpose: it takes servers
264
+ * through a `--mcp` launch flag, so there is nothing to write for it.
265
+ */
266
+ export const MCP_FILE_HOSTS = HARNESSES.filter((h) => h.mcpHostId !== null).map((h) => h.mcpHostId);
267
+ /** Install targets that are shared destinations, not hosts. */
268
+ export const SHARED_INSTALL_TARGETS = SHARED_SKILL_DESTINATIONS.map((d) => d.id);
269
+ /** The HarnessSpec owning an install target, or null for a shared destination. */
270
+ export function harnessByInstallTarget(target) {
271
+ return HARNESSES.find((h) => h.installTarget === target) ?? null;
272
+ }
273
+ /**
274
+ * What a verification RUN proved about this host, or null when no run ever
275
+ * covered it. Read it instead of asserting support from the tier alone: the
276
+ * tier is what we promise, this is what was actually checked.
277
+ */
278
+ export function verificationFor(id) {
279
+ return HOST_VERIFICATIONS[id] ?? null;
280
+ }
152
281
  /**
153
282
  * Resolves the global MCP config path template for a harness spec. Does NOT
154
283
  * expand `~` nor %LOCALAPPDATA% — expansion is the caller's job (see
@@ -1 +1 @@
1
- {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/domain/harnesses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/domain/harnesses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ // VERIFICATION LEDGER — written by `npm run smoke:hosts`, never by hand.
2
+ //
3
+ // It is deliberately a separate module from the catalog: `harnesses.ts` is
4
+ // hand-authored (ids, dirs, tiers — what we DECIDE), this file records what a
5
+ // run actually PROVED. Keeping the two apart is what lets every projection say
6
+ // "verified against X on date Y" without a surface ever claiming a verification
7
+ // that no run backs (spec 010, criterion 10).
8
+ //
9
+ // A host absent from this record has simply never been verified by a run.
10
+ export const HOST_VERIFICATIONS = {
11
+ "claude-code": { version: "2.1.220", at: "2026-07-29", depth: "install" },
12
+ codex: { version: "0.145.0", at: "2026-07-29", depth: "install" },
13
+ oz: { version: "0.2026.07.22.09.01.stable_01", at: "2026-07-29", depth: "invocation" },
14
+ warp: { version: null, at: "2026-07-29", depth: "install" },
15
+ gemini: { version: "1.0.16", at: "2026-07-29", depth: "install" },
16
+ opencode: { version: "1.18.0", at: "2026-07-29", depth: "invocation" },
17
+ crush: { version: "0.87.0", at: "2026-07-29", depth: "invocation" },
18
+ kimi: { version: "0.29.2", at: "2026-07-29", depth: "install" },
19
+ };
20
+ //# sourceMappingURL=host-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-verification.js","sourceRoot":"","sources":["../../src/domain/host-verification.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAiB1E,MAAM,CAAC,MAAM,kBAAkB,GAAoD;IACjF,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IACzE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IACjE,EAAE,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IACtF,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IAC3D,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IACjE,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IACtE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;IACnE,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;CAChE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "20.24.0",
3
+ "version": "20.26.0",
4
4
  "description": "Runtime CLI for Workline — the stages + loops + artifacts system for agent work. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, persist, workspace-init, export-*); `self install --target <host>` copies SKILL + commands + hooks into the host. Pluggable capability skills via `.workflow/skills.toml`. Multi-empresa parametrization via `profile.json` cascade. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,7 +18,8 @@
18
18
  "lint:fix": "biome check --write .",
19
19
  "format": "biome format --write .",
20
20
  "typecheck": "tsc --noEmit",
21
- "prepublishOnly": "npm run lint && npm run typecheck && npm run test && npm run build"
21
+ "prepublishOnly": "npm run lint && npm run typecheck && npm run test && npm run build",
22
+ "smoke:hosts": "npm run build && node scripts/smoke-hosts.mjs"
22
23
  },
23
24
  "keywords": [
24
25
  "cli",
package/skills/w/SKILL.md CHANGED
@@ -174,11 +174,11 @@ The **loop chassis** is NOT bound: it is the common engine of the 5 loops ([`loo
174
174
 
175
175
  ### Harness (harness-agnostic)
176
176
 
177
- The doctrine names abstract **capabilities**, never a concrete harness tool. A single doc —`harness/HARNESS.md`— binds each capability to each harness's mechanism (Claude Code, Codex, Gemini/Antigravity, OpenCode, Crush, Warp, generic). Two principles: **capability-not-tool** (loops/commands reference the capability by name) and **progressive-enhancement** (use the harness's richest mechanism; degrade to a universal fallback when it does not exist).
177
+ The doctrine names abstract **capabilities**, never a concrete harness tool. A single doc —`harness/HARNESS.md`— binds each capability to each harness's mechanism (Claude Code, Codex, Kimi Code, Gemini/Antigravity, OpenCode, Crush, Warp/Oz, generic). Two principles: **capability-not-tool** (loops/commands reference the capability by name) and **progressive-enhancement** (use the harness's richest mechanism; degrade to a universal fallback when it does not exist).
178
178
 
179
179
  Key capabilities:
180
180
 
181
- - **structured-choice** — ask the human ≤3 content questions + 1 `flow` control. Claude Code: `AskUserQuestion`. Fallback: numbered markdown.
181
+ - **structured-choice** — ask the human ≤3 content questions + 1 `flow` control; each option has a short label and a one-sentence functional explanation/example. Use the native binding in `HARNESS.md` when the current client exposes it; otherwise use labeled markdown with `Aceptar recomendaciones`, never positional codes.
182
182
  - **compaction** — shrink the context without losing the thread; its context-pressure signal feeds the loops' self-regulation (chassis § *Compact / resume*). Claude Code: `/compact`. Fallback: `CHECKPOINT` + resume.
183
183
  - **command-invocation** · **procedure-loading** · **subagent-dispatch** (opt.) · **persistent-context** · **external-data** (MCP) · **dry-run/preview**.
184
184
 
@@ -193,7 +193,7 @@ One language per plane — never mix them:
193
193
  | Doctrine (this bundle: chassis, loops, commands, roles, exports, harness) | **English** |
194
194
  | **Section headings** of artifacts and docs (`## Requirement`, `## Completed`, …) | **English** (parse contract) |
195
195
  | Everything **user-facing**: structured-choice questions, reports, dashboards, the **content** the AI writes into artifacts and `docs/` deliverables, commit messages | **the user's language** (this product: Spanish) |
196
- | Literal option labels (`Compactar`, `Cerrar`, `Guardar plan`, …) | canonical product strings — use them **verbatim** |
196
+ | Literal option labels (`Continuar`, `Compactar`, `Cerrar`, `Aceptar recomendaciones`, `Guardar plan`, …) | canonical product strings — use them **verbatim** |
197
197
  | Domain terms (class/route/table names, e.g. the QTC fleet) | the domain's ubiquitous language (Spanish) — never translated |
198
198
 
199
199
  ### The 6 hard invariants
@@ -45,3 +45,5 @@ Every `<command>.md` in this folder uses this frontmatter + body structure — t
45
45
  | `argument-hint:` | Argument signature for the user |
46
46
  | `allowed-tools:` | YAML list (typically `Bash`/`Read`/`Write`/`Edit`). Loops/exports are **read-and-followed**, not invoked with `Skill:` — so `Skill` is **not** in `allowed-tools`. |
47
47
  | Body | 1-3 orienting lines, then the invocation: **read-and-follow** the sibling loop/export doc (`LOOP.md` / `EXPORT.md`), or call the `aw` CLI; then `## Plan mode`, `## Resources` |
48
+
49
+ Every `aw context-plan` call pins `--root "${CLAUDE_PLUGIN_ROOT}/skills/w"`. Claude expands that official plugin placeholder in command content; `aw self install-skill` replaces it with the absolute installed bundle path in native and synthesized wrappers. A receipt therefore describes the same tree the host command reads, even when the globally installed CLI is a different version.
@@ -18,6 +18,6 @@ allowed-tools: ["Bash", "Read"]
18
18
 
19
19
  ## More context
20
20
 
21
- `aw context-plan --command export-diagrams --signal <s>` returns the extra documents a case needs; read exactly what it lists:
21
+ `aw context-plan --command export-diagrams --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
22
22
 
23
23
  - `authoring` — the notation or the `--engine` choice is not obvious from the material → [`../exports/export-diagrams/EXPORT.md`](../exports/export-diagrams/EXPORT.md), no longer loaded on the normal path
@@ -20,6 +20,6 @@ allowed-tools: ["Bash", "Read"]
20
20
 
21
21
  ## More context
22
22
 
23
- `aw context-plan --command export-manuals --signal <s>` returns the extra documents a case needs; read exactly what it lists:
23
+ `aw context-plan --command export-manuals --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
24
24
 
25
25
  - `authoring` — the manual's structure or audience is not obvious from the material → [`../exports/export-manuals/EXPORT.md`](../exports/export-manuals/EXPORT.md), no longer loaded on the normal path
@@ -19,6 +19,6 @@ allowed-tools: ["Bash", "Read"]
19
19
 
20
20
  ## More context
21
21
 
22
- `aw context-plan --command export-reports --signal <s>` returns the extra documents a case needs; read exactly what it lists:
22
+ `aw context-plan --command export-reports --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
23
23
 
24
24
  - `authoring` — the report's structure or audience is not obvious from the material → [`../exports/export-reports/EXPORT.md`](../exports/export-reports/EXPORT.md), no longer loaded on the normal path
@@ -19,6 +19,6 @@ allowed-tools: ["Bash", "Read"]
19
19
 
20
20
  ## More context
21
21
 
22
- `aw context-plan --command export-scripts --signal <s>` returns the extra documents a case needs; read exactly what it lists:
22
+ `aw context-plan --command export-scripts --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
23
23
 
24
24
  - `authoring` — the rollback derivation or the ordering is not obvious from the material → [`../exports/export-scripts/EXPORT.md`](../exports/export-scripts/EXPORT.md), no longer loaded on the normal path
@@ -38,4 +38,4 @@ No loop, no session, never writes `docs/`. Any git repo, workspace or not. Outpu
38
38
 
39
39
  ## More context
40
40
 
41
- `aw context-plan --command fix-git --signal <s>` returns the extra documents a case needs; read exactly what it lists.
41
+ `aw context-plan --command fix-git --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` lists the case-specific documents to read.
@@ -15,7 +15,7 @@ Single-pass, no loop, no session, **never writes `docs/`**. **Transversal** (no
15
15
  ## Run
16
16
 
17
17
  1. **Detect** — `aw generate-launch --dry-run [--source <alias>]`. Per source: `stack`, `launchable`, the detected `run` and `mode` (`interactive` | `server`).
18
- 2. **Confirm (structured-choice)** — per **launchable** source; recommended = the detected mode.
18
+ 2. **Confirm (structured-choice)** — per **launchable** source; recommended = the detected mode. Use the canonical [option shape](../loops/CHASSIS.md#structured-choice-design--batching) and [per-host binding](../harness/HARNESS.md#harness-binding-matrix).
19
19
  - **Interactive** — foreground, owns a real TTY. TUIs / REPLs / interactive CLIs.
20
20
  - **Server** — background + log window (close-to-stop). Dev servers, services.
21
21
  - **Custom command** — the user gives the exact run command (optional).
@@ -26,6 +26,6 @@ Single-pass, no loop, no session, **never writes `docs/`**. **Transversal** (no
26
26
 
27
27
  ## More context
28
28
 
29
- `aw context-plan --command generate-launch --signal <s>` returns the extra documents a case needs; read exactly what it lists:
29
+ `aw context-plan --command generate-launch --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
30
30
 
31
31
  - `detection` — the CLI's automatic detection of how to run the project was wrong or ambiguous → [`../modules/LAUNCH-DETECTION.md`](../modules/LAUNCH-DETECTION.md)
@@ -17,7 +17,7 @@ Captures **work already produced in this conversation** — with or without host
17
17
  > 1. **Adopt, don't re-derive** — single pass, **NO RESEARCH**: transcribe/organize what the conversation already established. New investigation is flow work (`spec-refine`, `quick`), never this command's.
18
18
  > 2. **You classify and write; the CLI decides everything else** — inventory, anti-duplicate, numbering, destination, authorization and the write itself belong to `aw persist`. Never write into `docs/` with a file tool here; `Write`/`Edit` are deliberately not in `allowed-tools`.
19
19
  > 3. **Never invent the number** — the `NNN` you put in the path is consultative; `apply` reassigns it inside the lock. Do not renumber it.
20
- > 4. **Confirm before writing** — classification and destination go through **structured-choice**; `apply` refuses without the digest `validate` returned. **Never creates sessions** (sessions are loop-created only).
20
+ > 4. **Confirm before writing** — classification and destination go through **structured-choice** (canonical [option shape](../loops/CHASSIS.md#structured-choice-design--batching) + [per-host binding](../harness/HARNESS.md#harness-binding-matrix)); `apply` refuses without the digest `validate` returned. **Never creates sessions** (sessions are loop-created only).
21
21
  > 5. **Language** — headings in English (parse contract); content in the **user's language**.
22
22
 
23
23
  ## Input
@@ -42,4 +42,4 @@ Requires a **workspace** (`docs/` is the managed surface). Without one → degra
42
42
 
43
43
  ## More context
44
44
 
45
- `aw context-plan --command persist --signal classification` returns the routing table — which shape goes to `docs/research/`, which becomes a spec draft, which is a plan adoption — plus the anti-duplicate rule: [`../modules/PERSIST-ROUTING.md`](../modules/PERSIST-ROUTING.md). Read exactly what it lists.
45
+ `aw context-plan --command persist --signal classification --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the routing table — which shape goes to `docs/research/`, which becomes a spec draft, which is a plan adoption — plus the anti-duplicate rule: [`../modules/PERSIST-ROUTING.md`](../modules/PERSIST-ROUTING.md). Read exactly what it lists.
@@ -23,7 +23,7 @@ Starts or resumes `plan-exec-loop` (Layer 2), which executes the real work phase
23
23
 
24
24
  ## Run the loop
25
25
 
26
- 1. `aw context-plan --command plan-exec` — read exactly the documents it lists, in order.
26
+ 1. `aw context-plan --command plan-exec --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` — read exactly the documents it lists, in order.
27
27
  2. Follow the loop manual end to end, taking `$ARGUMENTS` as input: it checks executability on entry, executes phase by phase (git-safe, DB scripts-only), keeps the plan alive and reports.
28
28
 
29
29
  > `plan-exec-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body. It is **resumable**: an existing CHECKPOINT continues from there.
@@ -35,7 +35,7 @@ Starts or resumes `plan-exec-loop` (Layer 2), which executes the real work phase
35
35
 
36
36
  ## More context
37
37
 
38
- `aw context-plan --command plan-exec --signal <s>` returns the extra documents a case needs; read exactly what it lists:
38
+ `aw context-plan --command plan-exec --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
39
39
 
40
40
  - `db` — the plan touches a database → [`../modules/EXEC-DB-POLICY.md`](../modules/EXEC-DB-POLICY.md)
41
41
  - `probe` — a task is a PoC → [`../modules/EXEC-PROBE-TASKS.md`](../modules/EXEC-PROBE-TASKS.md)
@@ -23,7 +23,7 @@ SPEC → PLAN bridge. Turns the "what" (refined spec) into the "how" (plan). Del
23
23
 
24
24
  ## Run the loop
25
25
 
26
- 1. `aw context-plan --command plan-new` — read exactly the documents it lists, in order.
26
+ 1. `aw context-plan --command plan-new --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` — read exactly the documents it lists, in order.
27
27
  2. Follow the loop manual end to end, taking `$ARGUMENTS` as input (resolved per the module below): it detects state/resume, runs the gap-driven engine, manages sessions, converges and reports.
28
28
 
29
29
  > `plan-new-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body.
@@ -34,7 +34,7 @@ The plan is born with `### Fn` phases that each leave a **verifiable state of th
34
34
 
35
35
  ## More context
36
36
 
37
- `aw context-plan --command plan-new --signal <s>` returns the extra documents a case needs; read exactly what it lists:
37
+ `aw context-plan --command plan-new --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
38
38
 
39
39
  - `input` — the argument is not plainly a `ready-for-plan` spec → [`../modules/PLAN-INPUT.md`](../modules/PLAN-INPUT.md)
40
40
  - `split` — the spec may need more than one plan → [`../modules/PLAN-SPLIT-GATE.md`](../modules/PLAN-SPLIT-GATE.md)
@@ -23,7 +23,7 @@ allowed-tools:
23
23
 
24
24
  ## Run the loop
25
25
 
26
- 1. `aw context-plan --command plan-refine` — read exactly the documents it lists, in order.
26
+ 1. `aw context-plan --command plan-refine --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` — read exactly the documents it lists, in order.
27
27
  2. Follow the loop manual end to end, taking `$ARGUMENTS` as input: it detects state/resume, runs the gap-driven engine, manages sessions, converges and reports.
28
28
 
29
29
  > `plan-refine-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body.
@@ -32,7 +32,7 @@ allowed-tools:
32
32
 
33
33
  ## More context
34
34
 
35
- `aw context-plan --command plan-refine --signal <s>` returns the extra documents a case needs; read exactly what it lists:
35
+ `aw context-plan --command plan-refine --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
36
36
 
37
37
  - `input` — where this plan came from, and what a plan returned by `plan-exec` means → [`../modules/PLAN-INPUT.md`](../modules/PLAN-INPUT.md)
38
38
  - `resume` — a prior refinement of this plan may exist → [`../modules/PLAN-REFINE-KEYS.md`](../modules/PLAN-REFINE-KEYS.md)
@@ -23,7 +23,7 @@ Delegates to `quick-loop` (Layer 2). Creates a light session (traceability + res
23
23
 
24
24
  ## Run the loop
25
25
 
26
- 1. `aw context-plan --command quick` — read exactly the documents it lists, in order.
26
+ 1. `aw context-plan --command quick --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` — read exactly the documents it lists, in order.
27
27
  2. Follow the loop manual end to end, taking `$ARGUMENTS` as the task: it evaluates the size gate, creates the light session, works with minimal ceremony (git-safe), escalates if the task grows, and reports.
28
28
 
29
29
  > `quick-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body.
@@ -35,7 +35,7 @@ Delegates to `quick-loop` (Layer 2). Creates a light session (traceability + res
35
35
 
36
36
  ## More context
37
37
 
38
- `aw context-plan --command quick --signal <s>` returns the extra documents a case needs; read exactly what it lists:
38
+ `aw context-plan --command quick --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
39
39
 
40
40
  - `db` — the task reads or writes a database → [`../modules/DB-SCRIPTS-ONLY.md`](../modules/DB-SCRIPTS-ONLY.md)
41
41
  - `probe` — a runnable doubt has to be settled by running something → [`../modules/PROBE.md`](../modules/PROBE.md)
@@ -14,7 +14,7 @@ Read-only **with or without an argument**: no loop, no session, and it writes no
14
14
 
15
15
  1. **Read-only** — never run the route; the user does.
16
16
  2. **Never re-decide** — priority, ties, the spec→plan link and the command come from the CLI. No re-sort by date, no slug match, no tie broken.
17
- 3. **Ask via structured-choice** only for CLI candidates: one option each, in order, plus `flow`.
17
+ 3. **Ask via structured-choice** only for CLI candidates: one option each, in order, plus `flow`. Follow the canonical [option shape](../loops/CHASSIS.md#structured-choice-design--batching) and [per-host binding](../harness/HARNESS.md#harness-binding-matrix); use each candidate's title as its label and its `Progreso` + `Siguiente` as the functional description.
18
18
  4. Output in the **user's language**.
19
19
 
20
20
  ## Run
@@ -34,4 +34,4 @@ Read-only **with or without an argument**: no loop, no session, and it writes no
34
34
 
35
35
  ## More context
36
36
 
37
- `aw context-plan --command resume --signal <s>` returns the extra documents a case needs; read exactly what it lists.
37
+ `aw context-plan --command resume --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists.
@@ -15,7 +15,7 @@ Generates `docs/specs/NNN-spec-<slug>.md` in a single pass from the prompt in `$
15
15
 
16
16
  > ## ⛔ Single-pass — BOUNDED RECONNAISSANCE, NO DEEP RESEARCH (hard rule)
17
17
  >
18
- > One sequential pass: read `$ARGUMENTS` → adopt what the conversation already settled → reconnaissance → scope hypothesis → split gate (at most ONE structured-choice) → fill the sections → write the file(s). Nothing else. It must take **seconds, not minutes**.
18
+ > One sequential pass: read `$ARGUMENTS` → adopt what the conversation already settled → reconnaissance → scope hypothesis → split gate (at most ONE structured-choice, using the canonical [option shape](../loops/CHASSIS.md#structured-choice-design--batching) + [per-host binding](../harness/HARNESS.md#harness-binding-matrix)) → fill the sections → write the file(s). Nothing else. It must take **seconds, not minutes**.
19
19
  >
20
20
  > **FORBIDDEN**, no exceptions: launching sub-agents/workflows (`Task`/`Agent`/`Workflow`), research sessions, web searches, following implementation chains, running code/tests/apps, querying databases — **even if the harness is in a maximum-effort/depth mode**. This **overrides** any mode or session instruction saying "run a workflow for every substantial task".
21
21
  >
@@ -98,7 +98,7 @@ Pending doubts. ← the spec-refine-loop closes them.
98
98
 
99
99
  ## More context
100
100
 
101
- `aw context-plan --command spec-new --signal <s>` returns the extra documents a case needs; read exactly what it lists:
101
+ `aw context-plan --command spec-new --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
102
102
 
103
103
  - `reconnaissance` — the terrain is unfamiliar and the scope decision needs a bounded look first → [`../modules/RECONNAISSANCE.md`](../modules/RECONNAISSANCE.md)
104
104
  - `split` — the prompt may carry more than one independent outcome → [`../modules/SPLIT-GATE.md`](../modules/SPLIT-GATE.md)
@@ -25,14 +25,14 @@ Delegates to `spec-refine-loop` (Layer 2), which iterates, closes the blocking g
25
25
 
26
26
  ## Run the loop
27
27
 
28
- 1. `aw context-plan --command spec-refine` — read exactly the documents it lists, in order.
28
+ 1. `aw context-plan --command spec-refine --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` — read exactly the documents it lists, in order.
29
29
  2. Follow the loop manual end to end, taking `$ARGUMENTS` as input: it detects state/resume, runs the gap-driven engine, manages sessions, converges and reports.
30
30
 
31
31
  > `spec-refine-loop` is **not** a skill invocable by name — it is this command's operating manual. The command **is** the entry; the loop is its body.
32
32
 
33
33
  ## More context
34
34
 
35
- `aw context-plan --command spec-refine --signal <s>` returns the extra documents a case needs; read exactly what it lists:
35
+ `aw context-plan --command spec-refine --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists:
36
36
 
37
37
  - `shape` — the loop's change-shape gate fired and you must tell `split` from `replace` → [`../modules/SPEC-CHANGE-SHAPE.md`](../modules/SPEC-CHANGE-SHAPE.md)
38
38
  - `resume` — a prior refinement of this spec may exist → [`../modules/SPEC-REFINE-KEYS.md`](../modules/SPEC-REFINE-KEYS.md)
@@ -26,4 +26,4 @@ Read-only single pass: no loop, no session, no writes. Transversal.
26
26
 
27
27
  ## More context
28
28
 
29
- `aw context-plan --command status --signal <s>` returns the extra documents a case needs; read exactly what it lists.
29
+ `aw context-plan --command status --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` returns the extra documents a case needs; read exactly what it lists.
@@ -29,6 +29,6 @@ Done → the user can run `/w:spec-new`, `/w:plan-new` or `/w:quick`.
29
29
 
30
30
  ## More context
31
31
 
32
- `aw context-plan --command workspace-init --signal <s>` returns the extra documents a case needs; read exactly what it lists:
32
+ `aw context-plan --command workspace-init --signal <s> --root "${CLAUDE_PLUGIN_ROOT}/skills/w"` lists the case-specific documents to read:
33
33
 
34
34
  - `scaffold` — the folder already carries a workspace, or you need what init versions, ignores and prunes → [`../modules/WORKSPACE-SCAFFOLD.md`](../modules/WORKSPACE-SCAFFOLD.md)