@tacuchi/agent-workflow-cli 20.23.0 → 20.25.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 (137) hide show
  1. package/README.md +34 -11
  2. package/dist/application/context/budget-service.js +128 -0
  3. package/dist/application/context/budget-service.js.map +1 -0
  4. package/dist/application/context/bundle-root.js +41 -0
  5. package/dist/application/context/bundle-root.js.map +1 -0
  6. package/dist/application/context/manifest.js +150 -0
  7. package/dist/application/context/manifest.js.map +1 -0
  8. package/dist/application/context/measure.js +227 -0
  9. package/dist/application/context/measure.js.map +1 -0
  10. package/dist/application/context/plan-service.js +177 -0
  11. package/dist/application/context/plan-service.js.map +1 -0
  12. package/dist/application/dev-only-services.js +17 -14
  13. package/dist/application/dev-only-services.js.map +1 -1
  14. package/dist/application/mcp-host-reader.js +3 -1
  15. package/dist/application/mcp-host-reader.js.map +1 -1
  16. package/dist/application/mcp-host-writer.js +86 -41
  17. package/dist/application/mcp-host-writer.js.map +1 -1
  18. package/dist/application/plugin-doctor/hooks.js +7 -1
  19. package/dist/application/plugin-doctor/hooks.js.map +1 -1
  20. package/dist/application/self/bootstrap.js +30 -16
  21. package/dist/application/self/bootstrap.js.map +1 -1
  22. package/dist/application/self/clean-legacy.js +5 -0
  23. package/dist/application/self/clean-legacy.js.map +1 -1
  24. package/dist/application/self/detect-hosts.js +31 -45
  25. package/dist/application/self/detect-hosts.js.map +1 -1
  26. package/dist/application/self/doctor-self.js +7 -2
  27. package/dist/application/self/doctor-self.js.map +1 -1
  28. package/dist/application/self/hooks-toml.js +232 -0
  29. package/dist/application/self/hooks-toml.js.map +1 -0
  30. package/dist/application/self/host-states.js +290 -0
  31. package/dist/application/self/host-states.js.map +1 -0
  32. package/dist/application/self/install-hooks.js +98 -4
  33. package/dist/application/self/install-hooks.js.map +1 -1
  34. package/dist/application/self/install-skill.js +28 -16
  35. package/dist/application/self/install-skill.js.map +1 -1
  36. package/dist/application/self/install-targets.js +23 -0
  37. package/dist/application/self/install-targets.js.map +1 -1
  38. package/dist/application/self/mcp-config.js +13 -19
  39. package/dist/application/self/mcp-config.js.map +1 -1
  40. package/dist/application/self/skills-manager.js +9 -0
  41. package/dist/application/self/skills-manager.js.map +1 -1
  42. package/dist/application/self/uninstall.js +162 -26
  43. package/dist/application/self/uninstall.js.map +1 -1
  44. package/dist/cli/commands/context-budget.js +79 -0
  45. package/dist/cli/commands/context-budget.js.map +1 -0
  46. package/dist/cli/commands/context-plan.js +75 -0
  47. package/dist/cli/commands/context-plan.js.map +1 -0
  48. package/dist/cli/commands/dev-only.js +4 -1
  49. package/dist/cli/commands/dev-only.js.map +1 -1
  50. package/dist/cli/commands/index.js +4 -0
  51. package/dist/cli/commands/index.js.map +1 -1
  52. package/dist/cli/commands/mcp.js +16 -8
  53. package/dist/cli/commands/mcp.js.map +1 -1
  54. package/dist/cli/help-groups.js +4 -0
  55. package/dist/cli/help-groups.js.map +1 -1
  56. package/dist/cli/parser.js +4 -0
  57. package/dist/cli/parser.js.map +1 -1
  58. package/dist/cli/tui/components/host-admin-section.js +69 -60
  59. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  60. package/dist/cli/tui/data/workflow-content.js +6 -0
  61. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  62. package/dist/cli/tui/hosts.js +39 -17
  63. package/dist/cli/tui/hosts.js.map +1 -1
  64. package/dist/cli/tui/tabs/config-tab.js +3 -3
  65. package/dist/cli/tui/tabs/config-tab.js.map +1 -1
  66. package/dist/cli/tui/tabs/mcp-tab-helpers.js +7 -1
  67. package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
  68. package/dist/cli/tui/tabs/mcp-tab.js +32 -10
  69. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  70. package/dist/cli/tui/tabs/skills-tab.js +13 -4
  71. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  72. package/dist/cli/tui/tabs/status-tab.js +11 -17
  73. package/dist/cli/tui/tabs/status-tab.js.map +1 -1
  74. package/dist/cli/tui/tabs/workflow-tab.js +7 -3
  75. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  76. package/dist/cli/tui/tui-prefs.js +7 -1
  77. package/dist/cli/tui/tui-prefs.js.map +1 -1
  78. package/dist/domain/harnesses.js +129 -0
  79. package/dist/domain/harnesses.js.map +1 -1
  80. package/dist/domain/host-verification.js +20 -0
  81. package/dist/domain/host-verification.js.map +1 -0
  82. package/package.json +3 -2
  83. package/skills/w/SKILL.md +2 -2
  84. package/skills/w/commands/export-diagrams.md +10 -27
  85. package/skills/w/commands/export-manuals.md +13 -29
  86. package/skills/w/commands/export-reports.md +11 -27
  87. package/skills/w/commands/export-scripts.md +12 -29
  88. package/skills/w/commands/fix-git.md +21 -32
  89. package/skills/w/commands/generate-launch.md +13 -32
  90. package/skills/w/commands/persist.md +8 -29
  91. package/skills/w/commands/plan-exec.md +14 -30
  92. package/skills/w/commands/plan-new.md +11 -38
  93. package/skills/w/commands/plan-refine.md +13 -41
  94. package/skills/w/commands/quick.md +13 -20
  95. package/skills/w/commands/resume.md +17 -33
  96. package/skills/w/commands/spec-new.md +28 -69
  97. package/skills/w/commands/spec-refine.md +12 -37
  98. package/skills/w/commands/status.md +12 -19
  99. package/skills/w/commands/workspace-init.md +13 -20
  100. package/skills/w/context/MANIFEST.json +486 -0
  101. package/skills/w/harness/HARNESS.md +24 -17
  102. package/skills/w/loops/CHASSIS.md +53 -104
  103. package/skills/w/loops/CODE-POLICIES.md +4 -9
  104. package/skills/w/loops/plan-exec-loop/LOOP.md +5 -12
  105. package/skills/w/loops/plan-new-loop/LOOP.md +8 -32
  106. package/skills/w/loops/plan-refine-loop/LOOP.md +8 -36
  107. package/skills/w/loops/quick-loop/LOOP.md +4 -10
  108. package/skills/w/loops/spec-refine-loop/LOOP.md +7 -49
  109. package/skills/w/modules/ADOPTED-CONTEXT.md +10 -0
  110. package/skills/w/modules/COMPACTION.md +13 -0
  111. package/skills/w/modules/DB-RESEARCH-RULE.md +11 -0
  112. package/skills/w/modules/DB-SCRIPTS-ONLY.md +12 -0
  113. package/skills/w/modules/EXEC-DB-POLICY.md +7 -0
  114. package/skills/w/modules/EXEC-PROBE-TASKS.md +11 -0
  115. package/skills/w/modules/IDEATION-GATE.md +16 -0
  116. package/skills/w/modules/INCREMENTAL-STRATEGY.md +7 -0
  117. package/skills/w/modules/LAUNCH-DETECTION.md +26 -0
  118. package/skills/w/modules/PERSIST-ROUTING.md +16 -0
  119. package/skills/w/modules/PLAN-DESIGN-SPECS.md +12 -0
  120. package/skills/w/modules/PLAN-INPUT.md +26 -0
  121. package/skills/w/modules/PLAN-MODE.md +26 -0
  122. package/skills/w/modules/PLAN-PROBE-TASKS.md +10 -0
  123. package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +7 -0
  124. package/skills/w/modules/PLAN-REFINE-KEYS.md +9 -0
  125. package/skills/w/modules/PLAN-REFINE-SPLIT.md +12 -0
  126. package/skills/w/modules/PLAN-SPLIT-GATE.md +14 -0
  127. package/skills/w/modules/PROBE.md +12 -0
  128. package/skills/w/modules/PROMPT-CONTINUITY.md +13 -0
  129. package/skills/w/modules/RECONNAISSANCE.md +48 -0
  130. package/skills/w/modules/REPLANNING.md +12 -0
  131. package/skills/w/modules/SESSION-NUMBERING.md +19 -0
  132. package/skills/w/modules/SIMULATION-LIFECYCLE.md +11 -0
  133. package/skills/w/modules/SPEC-CHANGE-SHAPE.md +37 -0
  134. package/skills/w/modules/SPEC-REFINE-KEYS.md +14 -0
  135. package/skills/w/modules/SPLIT-GATE.md +42 -0
  136. package/skills/w/modules/WORKSPACE-SCAFFOLD.md +28 -0
  137. package/skills/w/roles/ui-spec/ROLE.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tui-prefs.js","sourceRoot":"","sources":["../../../src/cli/tui/tui-prefs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-prefs.js","sourceRoot":"","sources":["../../../src/cli/tui/tui-prefs.ts"],"names":[],"mappings":"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"}
@@ -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.23.0",
3
+ "version": "20.25.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
@@ -99,7 +99,7 @@ It is the **inter-turn** face of the *persistent objective* (same `CHECKPOINT`+r
99
99
 
100
100
  ### Host as producer — adopted context
101
101
 
102
- The flows are **composable with host-native work, never exclusive**. The host is not only the executor of the loops: it is a legitimate **producer** of input. Work products born in the host conversation — an analysis reached with a host feature, a plan built in the host's plan mode, settled conclusions — are first-class flow input via **adoption**: transcribe with provenance (`## Origin` = adopted from the host conversation), verify like any other input (gate integrity), and never re-derive or re-ask what is already settled. Entry points: any loop start (adopted context — `loops/CHASSIS.md` § *Adopted context*), `plan-new` input mode 4 (adopt an external plan), and `/w:persist` (classify + persist finished work into `docs/`).
102
+ The flows are **composable with host-native work, never exclusive**. The host is not only the executor of the loops: it is a legitimate **producer** of input. Work products born in the host conversation — an analysis reached with a host feature, a plan built in the host's plan mode, settled conclusions — are first-class flow input via **adoption**: transcribe with provenance (`## Origin` = adopted from the host conversation), verify like any other input (gate integrity), and never re-derive or re-ask what is already settled. Entry points: any loop start (adopted context — `modules/ADOPTED-CONTEXT.md`, loaded under the `adopted` signal), `plan-new` input mode 4 (adopt an external plan), and `/w:persist` (classify + persist finished work into `docs/`).
103
103
 
104
104
  ### The commands (`/w:` namespace)
105
105
 
@@ -126,7 +126,7 @@ The flows are **composable with host-native work, never exclusive**. The host is
126
126
 
127
127
  A loop is a skill that teaches the AI **how to iterate** to a deliverable: detect gaps, resolve them (human via structured-choice, inline research, a small probe/PoC or a composed capability), integrate and repeat until convergence. The 5 loops run the same **common engine** — persistent objective + verification-first, gap-driven convergent, single session per run, structured-choice + `flow` control (`Compactar`/`Cerrar`), compact/resume, artifacts as a live log, convergence gate — whose canon lives in [`loops/CHASSIS.md`](loops/CHASSIS.md); each loop is an **heir** adding only its deltas.
128
128
 
129
- The **code-editing** loops (`plan-exec-loop`, `quick-loop`) additionally apply the *code-editing loop policies*: safe git, DB scripts-only and the pre-commit **closing review gate** (nothing reaches a proposed commit unreviewed) — see [`loops/CODE-POLICIES.md`](loops/CODE-POLICIES.md) (the chassis' sibling doc; document loops do not load it).
129
+ The **code-editing** loops (`plan-exec-loop`, `quick-loop`) additionally apply the *code-editing loop policies*: safe git, DB scripts-only (`modules/DB-SCRIPTS-ONLY.md`, under the `db` signal) and the pre-commit **closing review gate** (nothing reaches a proposed commit unreviewed) — see [`loops/CODE-POLICIES.md`](loops/CODE-POLICIES.md) (the chassis' sibling doc; document loops do not load it).
130
130
 
131
131
  `spec-new` has no loop (single-pass): **6 commands / 5 loops**.
132
132
 
@@ -1,40 +1,23 @@
1
1
  ---
2
- description: Exports architecture/flow diagrams from N sessions to docs/diagrams/ as a numbered dossier. Backed by `aw export-diagrams`, which owns the corpus, the numbering, the shape check and the atomic publication. Explicit, separate step — never automatic.
2
+ description: Use to promote diagram material from N sessions into a numbered dossier under docs/diagrams/. Read-only over sessions; `aw export-diagrams` owns the corpus, the numbering and the write. Never automatic.
3
3
  argument-hint: "[--sessions <ids>] [--since <YYYY-MM-DD>] [--source <alias>]"
4
- allowed-tools:
5
- [
6
- "Bash",
7
- "Read",
8
- ]
4
+ allowed-tools: ["Bash", "Read"]
9
5
  ---
10
6
 
11
- # export-diagrams — export diagrams
12
-
13
- Promotes diagram material from `.workflow/sessions/` into a numbered dossier under `docs/diagrams/`. Single-pass, read-only over sessions. **Transversal**: no flow, no loop, **never creates a session**.
14
-
15
7
  ## Run
16
8
 
17
- 1. `aw export-diagrams prepare --format human [--sessions <a,b>] [--since <YYYY-MM-DD>] [--source <alias>]` (`--detail` prints the full response contract). Returns the corpus, the destination, the required shape and an `input_digest`.
18
- 2. **Synthesize the deliverable.** Compose one JSON answer: `version`, `operation` and `input_digest` copied **verbatim**; `state: "proposed"`; `artifacts` with one `{ path, content }` per file, every path inside the destination the request declares. The `NNN` is consultative `apply` reassigns it inside the lock.
19
- 3. `echo '<json>' | aw export-diagrams validate --format human` → preview + `approval_digest`.
20
- 4. **Confirm scope and destination with the user**, showing that preview.
21
- 5. `echo '<json>' | aw export-diagrams apply --approval <digest> --format human`.
22
-
23
- Every rejection names its cause and one valid next action; nothing was written. Fix the answer and repeat from step 3.
24
-
25
- > **The CLI owns everything but the synthesis**: corpus selection and filters, numbering, the shape check, the write authorization and the atomic publication. Never write into `docs/` with a file tool — `Write` is deliberately not in `allowed-tools`. A dossier lands whole or not at all.
9
+ 1. `aw export-diagrams prepare --format human` (+ `--sessions`/`--since`/`--source`) corpus, destination, shape, `input_digest`.
10
+ 2. Answer with one JSON: `version`/`operation`/`input_digest` **verbatim**, `state: "proposed"`, `artifacts` = `{ path, content }` per file, all inside the destination; `NNN` is advisory: `apply` renumbers.
11
+ 3. `echo '<json>' | aw export-diagrams validate --format human` → preview + `approval_digest`; confirm scope and destination with the user.
12
+ 4. `echo '<json>' | aw export-diagrams apply --approval <digest>`. On rejection nothing was written: fix and repeat step 3.
26
13
 
27
14
  ## What it produces
28
15
 
29
16
  - `docs/diagrams/NNN-export-diagrams-YYYY-MM-DD/`: `README.md` (required) + the diagrams in Markdown, plus their DSL (`.dsl`/`.puml`/`.mmd`) when it helps.
30
- - Does **not** mutate sessions, touch another `docs/` folder, or open/close loops.
31
-
32
- ## Plan mode
17
+ - Never write into `docs/` with a file tool: one pass, all or nothing, no session or loop created/touched.
33
18
 
34
- Run `aw export-diagrams prepare` (read-only) and describe the deliverable and the destination it would publish, without applying.
19
+ ## More context
35
20
 
36
- ## Resources
21
+ `aw context-plan --command export-diagrams --signal <s>` returns the extra documents a case needs; read exactly what it lists:
37
22
 
38
- - CLI: `aw export-diagrams prepare | validate | apply` (service `export-service` over `semantic-operation/`)
39
- - Diagram authoring reference: `../exports/export-diagrams/EXPORT.md` (engine `--engine`, notation) — no longer loaded on the normal path
40
- - Design reference: `docs/referencias/workflow-exports/README.md`
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
@@ -1,41 +1,25 @@
1
1
  ---
2
- description: Exports user/operator manuals from N sessions to docs/manuals/ as a numbered dossier. Backed by `aw export-manuals`; docs/manuals/INDEX.md is the only overwritable file and requires --overwrite. Explicit, separate step — never automatic.
2
+ description: Use to promote user and operator manuals from N sessions into a numbered dossier under docs/manuals/. Read-only over sessions; `aw export-manuals` owns numbering, INDEX.md and the write. Never automatic.
3
3
  argument-hint: "[--sessions <ids>] [--since <YYYY-MM-DD>] [--source <alias>]"
4
- allowed-tools:
5
- [
6
- "Bash",
7
- "Read",
8
- ]
4
+ allowed-tools: ["Bash", "Read"]
9
5
  ---
10
6
 
11
- # export-manuals — export manuals
12
-
13
- Promotes manual material from `.workflow/sessions/` into a numbered dossier under `docs/manuals/`. Single-pass, read-only over sessions. **Transversal**: no flow, no loop, **never creates a session**.
14
-
15
7
  ## Run
16
8
 
17
- 1. `aw export-manuals prepare --format human [--sessions <a,b>] [--since <YYYY-MM-DD>] [--source <alias>]` (`--detail` prints the full response contract). Returns the corpus, the destination, the required shape and an `input_digest`.
18
- 2. **Synthesize the deliverable.** Compose one JSON answer: `version`, `operation` and `input_digest` copied **verbatim**; `state: "proposed"`; `artifacts` with one `{ path, content }` per file, every path inside the destination the request declares. The `NNN` is consultative `apply` reassigns it inside the lock.
19
- 3. `echo '<json>' | aw export-manuals validate --format human` → preview + `approval_digest`.
20
- 4. **Confirm scope and destination with the user**, showing that preview.
21
- 5. `echo '<json>' | aw export-manuals apply --approval <digest> --format human [--overwrite]`.
22
-
23
- Every rejection names its cause and one valid next action; nothing was written. Fix the answer and repeat from step 3.
24
-
25
- > **The CLI owns everything but the synthesis**: corpus selection and filters, numbering, the shape check, the write authorization and the atomic publication. Never write into `docs/` with a file tool — `Write` is deliberately not in `allowed-tools`. A dossier lands whole or not at all.
9
+ 1. `aw export-manuals prepare --format human` (+ `--sessions`/`--since`/`--source`) corpus, destination, shape, `input_digest`.
10
+ 2. Answer with one JSON: `version`/`operation`/`input_digest` **verbatim**, `state: "proposed"`, `artifacts` = `{ path, content }` per file, all inside the destination; `NNN` is advisory: `apply` renumbers.
11
+ 3. `echo '<json>' | aw export-manuals validate --format human` → preview + `approval_digest`; confirm scope and destination with the user.
12
+ 4. `echo '<json>' | aw export-manuals apply --approval <digest> [--overwrite]`. On rejection nothing was written: fix and repeat step 3.
26
13
 
27
14
  ## What it produces
28
15
 
29
- - `docs/manuals/NNN-export-manuals-YYYY-MM-DD/`: `README.md` (required) + the manuals in Markdown.
30
- - Optionally `docs/manuals/INDEX.md` the **only** file an export may replace, and only with an explicit `--overwrite` the user approved.
31
- - Does **not** mutate sessions, touch another `docs/` folder, or open/close loops.
32
-
33
- ## Plan mode
16
+ - `docs/manuals/NNN-export-manuals-YYYY-MM-DD/`: `README.md` (required) + the manuals, in Markdown.
17
+ - `docs/manuals/INDEX.md`: optional; the **only** file an export may replace, with approved `--overwrite`.
18
+ - Never write into `docs/` with a file tool: one pass, all or nothing, no session or loop created/touched.
19
+ - Authoring ref: no longer loaded on the normal path.
34
20
 
35
- Run `aw export-manuals prepare` (read-only) and describe the deliverable and the destination it would publish, without applying.
21
+ ## More context
36
22
 
37
- ## Resources
23
+ `aw context-plan --command export-manuals --signal <s>` returns the extra documents a case needs; read exactly what it lists:
38
24
 
39
- - CLI: `aw export-manuals prepare | validate | apply` (service `export-service` over `semantic-operation/`)
40
- - Manual authoring reference: `../exports/export-manuals/EXPORT.md` — no longer loaded on the normal path
41
- - Design reference: `docs/referencias/workflow-exports/README.md`
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
@@ -1,40 +1,24 @@
1
1
  ---
2
- description: Exports a bounded report from N sessions to docs/reports/ as a numbered Markdown document. Backed by `aw export-reports`, which owns the corpus, the numbering and the write. Explicit, separate step — never automatic.
2
+ description: Use to promote findings from N sessions into ONE numbered Markdown report under docs/reports/. Read-only over sessions; `aw export-reports` owns the corpus, the numbering and the write. Never automatic.
3
3
  argument-hint: "[--sessions <ids>] [--since <YYYY-MM-DD>] [--source <alias>]"
4
- allowed-tools:
5
- [
6
- "Bash",
7
- "Read",
8
- ]
4
+ allowed-tools: ["Bash", "Read"]
9
5
  ---
10
6
 
11
- # export-reports — export a report
12
-
13
- Promotes session findings into one numbered report under `docs/reports/`. Single-pass, read-only over sessions. **Transversal**: no flow, no loop, **never creates a session**.
14
-
15
7
  ## Run
16
8
 
17
- 1. `aw export-reports prepare --format human [--sessions <a,b>] [--since <YYYY-MM-DD>] [--source <alias>]` (`--detail` prints the full response contract). Returns the corpus, the destination, the required shape and an `input_digest`.
18
- 2. **Synthesize the deliverable.** Compose one JSON answer: `version`, `operation` and `input_digest` copied **verbatim**; `state: "proposed"`; `artifacts` with one `{ path, content }` per file, every path inside the destination the request declares. The `NNN` is consultative `apply` reassigns it inside the lock.
19
- 3. `echo '<json>' | aw export-reports validate --format human` → preview + `approval_digest`.
20
- 4. **Confirm scope and destination with the user**, showing that preview.
21
- 5. `echo '<json>' | aw export-reports apply --approval <digest> --format human`.
22
-
23
- Every rejection names its cause and one valid next action; nothing was written. Fix the answer and repeat from step 3.
24
-
25
- > **The CLI owns everything but the synthesis**: corpus selection and filters, numbering, the shape check, the write authorization and the atomic publication. Never write into `docs/` with a file tool — `Write` is deliberately not in `allowed-tools`. A dossier lands whole or not at all.
9
+ 1. `aw export-reports prepare --format human` (+ `--sessions`/`--since`/`--source`) corpus, destination, shape, `input_digest`.
10
+ 2. Answer with one JSON: `version`/`operation`/`input_digest` **verbatim**, `state: "proposed"`, `artifacts` = `{ path, content }` per file, all inside the destination; `NNN` is advisory: `apply` renumbers.
11
+ 3. `echo '<json>' | aw export-reports validate --format human` → preview + `approval_digest`; confirm scope and destination with the user.
12
+ 4. `echo '<json>' | aw export-reports apply --approval <digest>`. On rejection nothing was written: fix and repeat step 3.
26
13
 
27
14
  ## What it produces
28
15
 
29
16
  - `docs/reports/NNN-<slug>-YYYY-MM-DD.md`: ONE document that declares its audience and its scope in the opening lines.
30
- - Does **not** mutate sessions, touch another `docs/` folder, or open/close loops.
31
-
32
- ## Plan mode
17
+ - Never write into `docs/` with a file tool: one pass, all or nothing, no session or loop created/touched.
18
+ - Authoring ref: no longer loaded on the normal path.
33
19
 
34
- Run `aw export-reports prepare` (read-only) and describe the deliverable and the destination it would publish, without applying.
20
+ ## More context
35
21
 
36
- ## Resources
22
+ `aw context-plan --command export-reports --signal <s>` returns the extra documents a case needs; read exactly what it lists:
37
23
 
38
- - CLI: `aw export-reports prepare | validate | apply` (service `export-service` over `semantic-operation/`)
39
- - Report authoring reference: `../exports/export-reports/EXPORT.md` — no longer loaded on the normal path
40
- - Design reference: `docs/referencias/workflow-exports/README.md`
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
@@ -1,41 +1,24 @@
1
1
  ---
2
- description: Exports DB scripts (type-B SCRIPTS.sql) from N sessions to docs/scripts/ as a bundle with continuous forwards + rollback. Backed by `aw export-scripts`, which validates the bundle shape and NEVER executes SQL. Explicit, separate step — never automatic.
2
+ description: Use to promote the type-B `SCRIPTS.sql` artifacts of N sessions into a docs/scripts/ bundle continuous forwards plus rollback. `aw export-scripts` checks the bundle shape and NEVER executes SQL. Never automatic.
3
3
  argument-hint: "[--sessions <ids>] [--since <YYYY-MM-DD>] [--source <alias>]"
4
- allowed-tools:
5
- [
6
- "Bash",
7
- "Read",
8
- ]
4
+ allowed-tools: ["Bash", "Read"]
9
5
  ---
10
6
 
11
- # export-scripts — export DB scripts
12
-
13
- Promotes the `SCRIPTS.sql` artifacts (type B — migrations) of N sessions from `.workflow/sessions/` into a bundle under `docs/scripts/`. Single-pass, read-only over sessions. **Transversal**: no flow, no loop, **never creates a session**.
14
-
15
7
  ## Run
16
8
 
17
- 1. `aw export-scripts prepare --format human [--sessions <a,b>] [--since <YYYY-MM-DD>] [--source <alias>]` (`--detail` prints the full response contract). Returns the corpus, the destination, the required shape and an `input_digest`.
18
- 2. **Synthesize the deliverable.** Compose one JSON answer: `version`, `operation` and `input_digest` copied **verbatim**; `state: "proposed"`; `artifacts` with one `{ path, content }` per file, every path inside the destination the request declares. The `NNN` is consultative `apply` reassigns it inside the lock.
19
- 3. `echo '<json>' | aw export-scripts validate --format human` → preview + `approval_digest`.
20
- 4. **Confirm scope and destination with the user**, showing that preview.
21
- 5. `echo '<json>' | aw export-scripts apply --approval <digest> --format human`.
22
-
23
- Every rejection names its cause and one valid next action; nothing was written. Fix the answer and repeat from step 3.
24
-
25
- > **The CLI owns everything but the synthesis**: corpus selection and filters, numbering, the shape check, the write authorization and the atomic publication. Never write into `docs/` with a file tool — `Write` is deliberately not in `allowed-tools`. A dossier lands whole or not at all.
9
+ 1. `aw export-scripts prepare --format human` (+ `--sessions`/`--since`/`--source`) corpus, destination, shape, `input_digest`.
10
+ 2. Answer with one JSON: `version`/`operation`/`input_digest` **verbatim**, `state: "proposed"`, `artifacts` = `{ path, content }` per file, all inside the destination; `NNN` is advisory: `apply` renumbers.
11
+ 3. `echo '<json>' | aw export-scripts validate --format human` → preview + `approval_digest`; confirm scope and destination with the user.
12
+ 4. `echo '<json>' | aw export-scripts apply --approval <digest>`. On rejection nothing was written: fix and repeat step 3.
26
13
 
27
14
  ## What it produces
28
15
 
29
- - `docs/scripts/NNN-export-scripts-YYYY-MM-DD/`: `00-ROLLBACK.sql` and `README.md` (both required) + the forwards `NN-<nombre>.sql`, numbered **continuously from 01** the CLI rejects a gap.
30
- - The AI **never executes** the SQL, and neither does the CLI: the bundle is for a human/DBA to apply.
31
- - Does **not** mutate sessions, touch another `docs/` folder, or open/close loops.
32
-
33
- ## Plan mode
16
+ - `docs/scripts/NNN-export-scripts-YYYY-MM-DD/`: `00-ROLLBACK.sql` and `README.md`, both required, + forwards `NN-<nombre>.sql` numbered **continuously from 01**; the CLI rejects a gap.
17
+ - Neither the AI nor the CLI executes the SQL: the bundle is for a human or DBA to apply.
18
+ - Never write into `docs/` with a file tool: one pass, all or nothing, no session or loop created/touched.
34
19
 
35
- Run `aw export-scripts prepare` (read-only) and describe the deliverable and the destination it would publish, without applying.
20
+ ## More context
36
21
 
37
- ## Resources
22
+ `aw context-plan --command export-scripts --signal <s>` returns the extra documents a case needs; read exactly what it lists:
38
23
 
39
- - CLI: `aw export-scripts prepare | validate | apply` (service `export-service` over `semantic-operation/`)
40
- - SQL bundle reference: `../exports/export-scripts/EXPORT.md` (rollback derivation, ordering) — no longer loaded on the normal path
41
- - Design reference: `docs/referencias/workflow-exports/README.md`
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
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Use when a merge left conflicts to resolve. Backed by `aw fix-git`, which reads the three versions of each conflict, validates the semantic resolution and stages only files still in conflict. You supply the resolved content; the CLI decides which paths stay authorized and owns edit, stage and commit. Git-safe — the merge commit is a separate confirmed action, never push/--amend/--no-verify. Transversal (not a flow), no session, never touches docs/.
2
+ description: Use when a merge left conflicts to resolve. `aw fix-git` hands you the three versions of each conflict, validates your resolution and owns edit, stage and commit. Git-safe, transversal, never touches docs/.
3
3
  argument-hint: "[--source <alias> | --path <ruta>]"
4
4
  allowed-tools:
5
5
  [
@@ -8,45 +8,34 @@ allowed-tools:
8
8
  ]
9
9
  ---
10
10
 
11
- # fix-git — merge-conflict resolver (transversal)
11
+ # fix-git — merge conflicts
12
12
 
13
- Single-pass, **no loop, no session**, **never writes `docs/`**. **Workspace-agnostic**: any git repo, with or without `.workflow/`. User-facing output in the **user's language**.
13
+ No loop, no session, never writes `docs/`. Any git repo, workspace or not. Output in the **user's language**.
14
14
 
15
- > **Hard floor — applies even if you read nothing beyond this file:**
16
- >
17
- > 1. **You supply content; the CLI owns the effects.** Never edit a conflicted file, never `git add`, never `git commit` by hand — `Edit` is deliberately not in `allowed-tools`.
18
- > 2. **Only unambiguous resolutions.** Anything you cannot resolve on evidence is `state: "ambiguous"`, which the CLI turns into a question. Never guess a side.
19
- > 3. **The commit is a separate action**, always confirmed, and the message is proposed to the user first. Never `--no-verify`, `--amend` or push.
20
- > 4. **Never `git merge --abort` on your own** — propose it; the user decides.
15
+ **Hard floor:**
21
16
 
22
- ## Run
17
+ 1. **You supply content; the CLI owns the effects.** Never edit a conflicted file, never `git add` or `git commit` by hand.
18
+ 2. **Only unambiguous resolutions** — what evidence cannot settle is `state: "ambiguous"`; never guess a side.
19
+ 3. **The commit is separate**, always confirmed, message proposed first. Never `--no-verify`, `--amend` or push.
20
+ 4. **Never `git merge --abort` yourself** — propose it; the user decides.
23
21
 
24
- 1. `aw fix-git prepare --format human [--source <alias> | --path <ruta>]` (`--detail` prints the response contract and the request size). Returns the merge direction (`theirs → ours`), the conflicted paths, their three index stages and their blob hashes.
25
- 2. **Resolve each conflict from the three versions the request carries** — `base` (common ancestor), `ours` (HEAD) and `theirs` (the incoming branch). Read both sides' *intent*, not just their text: `ours`, `theirs`, a combination, or a rewrite that preserves both intents.
26
- 3. Compose one JSON answer: `version`, `operation` and `input_digest` copied verbatim; `state: "proposed"`; `artifacts` with **one `{ path, content }` per conflicted file**, `content` being the complete resolved file with **no conflict markers**.
27
- - Any file you cannot settle on evidence → `state: "ambiguous"` with `reason`. Nothing is written; present the choice to the user.
28
- - A binary conflict is rejected by the CLI: propose `git checkout --ours|--theirs` to the user instead.
29
- 4. `echo '<json>' | aw fix-git apply --format human [--source …]`. The invocation authorizes the write **because** the set is unambiguous and still current — a conflict another process resolved meanwhile fails as stale.
30
- 5. **Propose the merge commit** to the user (canonical one-line format). On approval:
31
- `aw fix-git commit --message "<mensaje>" --confirm [--source …]`.
22
+ ## Run
32
23
 
33
- Every rejection names its cause and one valid next action; nothing was written. Fix the answer and repeat from step 4.
24
+ 1. `aw fix-git prepare --format human [--source <alias> | --path <ruta>]` merge direction (`theirs ours`), conflicted paths, their three stages and blob hashes; inspector `aw merge-state`.
25
+ 2. Resolve each conflict from `base` (ancestor), `ours` (HEAD) and `theirs` (incoming) by *intent*, not text: one side, a combination, or a rewrite of both.
26
+ 3. One JSON answer: `version`, `operation`, `input_digest` verbatim, `state: "proposed"`, `artifacts` = one complete `{ path, content }` per conflicted file.
27
+ - Cannot settle it → `state: "ambiguous"` with `reason`, nothing written. Binary conflict → rejected; propose `git checkout --ours|--theirs`.
28
+ 4. `echo '<json>' | aw fix-git apply --format human [--source …]` — authorized while the set is unambiguous and current. A rejection names its cause and next action; nothing was written — fix and repeat.
29
+ 5. Propose the merge commit; on approval `aw fix-git commit --message "<mensaje>" --confirm`.
34
30
 
35
- > **No merge in progress?** If the user explicitly asked to merge a branch, run `git -C <path> merge <branch>` and continue. Otherwise report there is nothing to resolve and stop.
31
+ > **No merge in progress?** User asked to merge a branch run `git -C <path> merge <branch>` and continue; otherwise say nothing is left to resolve.
36
32
 
37
33
  ## What the CLI decides (do not re-derive)
38
34
 
39
- - **Which paths are writable**: exactly the files still unmerged. A path outside that set is rejected, not silently skipped.
40
- - **Whether the conflict is still yours**: the blob hashes seal the set; if it moved, `apply` fails stale instead of overwriting someone else's resolution.
41
- - **Whether the content is really resolved**: leftover `<<<<<<<` / `=======` / `>>>>>>>` is a rejection.
42
- - **Whether the merge can close**: `commit` refuses while any file stays unmerged.
43
-
44
- ## Plan mode
45
-
46
- Run `aw fix-git prepare` (read-only), report **origin ↔ destination** and the per-file conflicts, and describe the resolution you would propose — without applying or committing.
35
+ - **Writable paths**: only files still unmerged anything else is rejected, and blob hashes seal the set: a moved conflict fails stale.
36
+ - **Resolved**: leftover `<<<<<<<` / `=======` / `>>>>>>>` is a rejection.
37
+ - **Can close**: `commit` refuses while a file stays unmerged.
47
38
 
48
- ## Resources
39
+ ## More context
49
40
 
50
- - CLI: `aw fix-git prepare | apply | commit` (service `fix-git-service` over `semantic-operation/`) · `aw merge-state` (read-only inspector)
51
- - Reference: `../roles/git/ROLE.md` § *Merge-conflict resolution* — the reasoning about intent; the mechanics now live in the CLI
52
- - Design reference: `docs/referencias/workflow-skills/fix-git.md`
41
+ `aw context-plan --command fix-git --signal <s>` returns the extra documents a case needs; read exactly what it lists.