@tacuchi/agent-workflow-cli 22.1.0 → 22.3.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 (43) hide show
  1. package/dist/application/resume-service.js +45 -114
  2. package/dist/application/resume-service.js.map +1 -1
  3. package/dist/application/self/codex-plugin.js +87 -0
  4. package/dist/application/self/codex-plugin.js.map +1 -0
  5. package/dist/application/self/hooks-dialect.js +18 -0
  6. package/dist/application/self/hooks-dialect.js.map +1 -0
  7. package/dist/application/self/hooks-json.js +226 -0
  8. package/dist/application/self/hooks-json.js.map +1 -0
  9. package/dist/application/self/hooks-toml.js +4 -11
  10. package/dist/application/self/hooks-toml.js.map +1 -1
  11. package/dist/application/self/host-states.js +64 -3
  12. package/dist/application/self/host-states.js.map +1 -1
  13. package/dist/application/self/install-hooks.js +291 -37
  14. package/dist/application/self/install-hooks.js.map +1 -1
  15. package/dist/application/self/install-skill.js +7 -2
  16. package/dist/application/self/install-skill.js.map +1 -1
  17. package/dist/application/self/opencode-plugin.js +167 -0
  18. package/dist/application/self/opencode-plugin.js.map +1 -0
  19. package/dist/application/self/uninstall.js +147 -1
  20. package/dist/application/self/uninstall.js.map +1 -1
  21. package/dist/application/status-service.js +1 -0
  22. package/dist/application/status-service.js.map +1 -1
  23. package/dist/application/workline-index-service.js +143 -28
  24. package/dist/application/workline-index-service.js.map +1 -1
  25. package/dist/cli/commands/resume.js +20 -3
  26. package/dist/cli/commands/resume.js.map +1 -1
  27. package/dist/cli/commands/status.js +57 -8
  28. package/dist/cli/commands/status.js.map +1 -1
  29. package/dist/cli/tui/app.js +1 -1
  30. package/dist/cli/tui/app.js.map +1 -1
  31. package/dist/cli/tui/components/host-admin-section.js +53 -21
  32. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  33. package/dist/cli/tui/tabs/mcp-tab.js +20 -5
  34. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  35. package/dist/cli/tui/tabs/workflow-tab.js +2 -2
  36. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  37. package/dist/domain/harnesses.js +166 -10
  38. package/dist/domain/harnesses.js.map +1 -1
  39. package/package.json +1 -1
  40. package/skills/w/commands/resume.md +19 -12
  41. package/skills/w/commands/status.md +9 -5
  42. package/skills/w/commands/workspace-init.md +6 -6
  43. package/skills/w/harness/HARNESS.md +10 -6
@@ -1,4 +1,59 @@
1
1
  import { HOST_VERIFICATIONS } from "./host-verification.js";
2
+ /**
3
+ * The events the bundled hook template ships, in template order.
4
+ *
5
+ * The per-host contract below is a statement ABOUT this set: "carried" and
6
+ * "omitted" only mean something against a fixed list. A guard pins it to the
7
+ * template's own keys, so a sixth event added to the bundle cannot leave every
8
+ * host silently under-declared.
9
+ */
10
+ export const TEMPLATE_HOOK_EVENTS = [
11
+ "SessionStart",
12
+ "PreToolUse",
13
+ "SessionEnd",
14
+ "PreCompact",
15
+ "PostCompact",
16
+ ];
17
+ /**
18
+ * The one-line mechanism every surface prints, derived from the contract.
19
+ *
20
+ * It used to be a hand-written string per host, and three of them were wrong:
21
+ * crush was declared hookless while it has `PreToolUse`, gemini named a
22
+ * `BeforeTool` event that appears nowhere in its binary, and opencode named its
23
+ * event without ever saying where the plugin goes. A sentence nobody can
24
+ * recompute is a sentence nobody notices going stale.
25
+ */
26
+ export function hookMechanism(hooks) {
27
+ const base = `${hooks.artifact.path} → ${hooks.artifact.entry}`;
28
+ return hooks.caveat === undefined ? base : `${base}; ${hooks.caveat}`;
29
+ }
30
+ /**
31
+ * Which template events travel to this host and which do not, in one line.
32
+ *
33
+ * Printed next to the hook state because a reader who is only told "supports
34
+ * hooks" assumes parity — and on crush, gemini and opencode what travels is the
35
+ * enforcement, never the resumability.
36
+ */
37
+ export function hookCoverage(hooks) {
38
+ const carried = [];
39
+ const partial = [];
40
+ const omitted = [];
41
+ for (const event of TEMPLATE_HOOK_EVENTS) {
42
+ const support = hooks.events[event];
43
+ if (support.state === "carried")
44
+ carried.push(event);
45
+ else if (support.state === "degraded")
46
+ partial.push(`${event} (${support.loss})`);
47
+ else
48
+ omitted.push(event);
49
+ }
50
+ const parts = [`carries ${carried.length === 0 ? "no template event" : carried.join(", ")}`];
51
+ if (partial.length > 0)
52
+ parts.push(`partial: ${partial.join(", ")}`);
53
+ if (omitted.length > 0)
54
+ parts.push(`omits ${omitted.join(", ")}`);
55
+ return parts.join("; ");
56
+ }
2
57
  /** The mention form every host that auto-discovers skills by description shares. */
3
58
  const MENTION = {
4
59
  kind: "mention",
@@ -13,7 +68,18 @@ export const HARNESSES = [
13
68
  support: { tier: "official" },
14
69
  runtime: { bins: ["claude"], versionArgs: ["--version"] },
15
70
  configDir: { kind: "dir", path: "~/.claude" },
16
- hooks: { mechanism: "~/.claude/settings.json → hooks{}", managed: true },
71
+ hooks: {
72
+ managed: true,
73
+ artifact: { kind: "config-merge", path: "~/.claude/settings.json", entry: "hooks{}" },
74
+ events: {
75
+ SessionStart: { state: "carried", native: "SessionStart" },
76
+ PreToolUse: { state: "carried", native: "PreToolUse" },
77
+ SessionEnd: { state: "carried", native: "SessionEnd" },
78
+ PreCompact: { state: "carried", native: "PreCompact" },
79
+ PostCompact: { state: "carried", native: "PostCompact" },
80
+ },
81
+ verified: "Jul-2026, against the installed claude runtime (matrix base)",
82
+ },
17
83
  envMarkers: ["CLAUDECODE", "CLAUDE_PLUGIN_ROOT", "CLAUDE_AGENT_ID"],
18
84
  mcpHostId: "claude",
19
85
  globalMcpPaths: {
@@ -53,10 +119,23 @@ export const HARNESSES = [
53
119
  // an interactive human review, persisted as `trusted_hash` in
54
120
  // `[hooks.state]`. Writing the file is therefore not arming it, and forging
55
121
  // that hash would forge the person's security decision — so this stays
56
- // `managed: false` and the mechanism string says exactly why.
122
+ // `managed: false` and its `caveat` says exactly why.
57
123
  hooks: {
58
- mechanism: "~/.codex/hooks.json (Claude-shaped); each hook needs an interactive trust review in codex, recorded as trusted_hash in [hooks.state]",
59
124
  managed: false,
125
+ artifact: {
126
+ kind: "config-merge",
127
+ path: "~/.codex/hooks.json",
128
+ entry: "hooks{} (Claude-shaped)",
129
+ },
130
+ caveat: "each hook needs an interactive trust review in codex, recorded as trusted_hash in [hooks.state]",
131
+ events: {
132
+ SessionStart: { state: "carried", native: "SessionStart" },
133
+ PreToolUse: { state: "carried", native: "PreToolUse" },
134
+ SessionEnd: { state: "carried", native: "SessionEnd" },
135
+ PreCompact: { state: "carried", native: "PreCompact" },
136
+ PostCompact: { state: "carried", native: "PostCompact" },
137
+ },
138
+ verified: "2026-08-05, against codex-cli 0.146.0 (HookEventsToml enum + real runs)",
60
139
  },
61
140
  envMarkers: ["CODEX_THREAD_ID", "CODEX_HOME", "CODEX_CLI", "CODEX_RUNTIME"],
62
141
  mcpHostId: "codex",
@@ -188,7 +267,28 @@ export const HARNESSES = [
188
267
  // ~/.gemini. Probed in that order so the successor wins.
189
268
  runtime: { bins: ["agy", "gemini"], versionArgs: ["--version"] },
190
269
  configDir: { kind: "dir", path: "~/.gemini" },
191
- hooks: { mechanism: "extension-bundled (BeforeTool)", managed: false },
270
+ // The catalog used to name a `BeforeTool` event. It appears nowhere in the
271
+ // binary: what agy has is a single `hooks.json` at the customization root.
272
+ hooks: {
273
+ managed: true,
274
+ artifact: {
275
+ kind: "config-merge",
276
+ path: "~/.agents/hooks.json",
277
+ entry: "named hooks → PreToolUse/PostToolUse (Claude-shaped) · PreInvocation/PostInvocation/Stop (flat handler lists)",
278
+ },
279
+ caveat: 'handlers are type: "command" only and run synchronously, blocking the loop; the host documents its customization root as the workspace\'s .agents/, so whether a user-global one is read was NOT verified',
280
+ events: {
281
+ SessionStart: { state: "omitted", reason: "agy declares no session-start event" },
282
+ PreToolUse: { state: "carried", native: "PreToolUse" },
283
+ SessionEnd: {
284
+ state: "omitted",
285
+ reason: "its closest event is `Stop`, which fires at the end of every turn and not at session close: carrying the close hook there would run it on every turn",
286
+ },
287
+ PreCompact: { state: "omitted", reason: "agy exposes no compaction event" },
288
+ PostCompact: { state: "omitted", reason: "agy exposes no compaction event" },
289
+ },
290
+ verified: "2026-08-18, against agy 1.0.16 (its bundled `hooks.json` doc + the CORTEX_STEP_TYPE tool names in the binary): `BeforeTool` does not appear in the binary",
291
+ },
192
292
  envMarkers: [
193
293
  "GEMINI_CLI",
194
294
  "GEMINI_SANDBOX",
@@ -205,7 +305,7 @@ export const HARNESSES = [
205
305
  },
206
306
  projectMcpPath: ".gemini/settings.json",
207
307
  pluginManifest: null, // Gemini uses Extensions (gemini-extension.json) — Phase 2
208
- pluginHooksDir: null, // Extension-bundled hooks (BeforeTool) Phase 2
308
+ pluginHooksDir: null, // agy's hooks are its own hooks.json, not extension-bundled
209
309
  skillsDirs: [".agents/skills", ".gemini/skills"],
210
310
  installTarget: "gemini",
211
311
  invocation: MENTION,
@@ -236,7 +336,25 @@ export const HARNESSES = [
236
336
  support: { tier: "best-effort" },
237
337
  runtime: { bins: ["opencode"], versionArgs: ["--version"] },
238
338
  configDir: { kind: "mcp-parent" },
239
- hooks: { mechanism: "JS/TS plugins (tool.execute.before)", managed: false },
339
+ hooks: {
340
+ managed: false,
341
+ artifact: {
342
+ kind: "plugin-module",
343
+ path: ".opencode/plugin/",
344
+ entry: 'a JS/TS module, declared in opencode.json under "plugin": []',
345
+ },
346
+ events: {
347
+ SessionStart: { state: "omitted", reason: "the plugin API fires no session-start event" },
348
+ PreToolUse: { state: "carried", native: "tool.execute.before" },
349
+ SessionEnd: { state: "omitted", reason: "the plugin API fires no session-end event" },
350
+ PreCompact: {
351
+ state: "omitted",
352
+ reason: "its only candidate is `experimental.session.compacting`, an experimental event Workline does not rest resumability on",
353
+ },
354
+ PostCompact: { state: "omitted", reason: "the plugin API fires no post-compaction event" },
355
+ },
356
+ verified: "2026-08-04, against opencode 1.18.5 (its plugin API event list)",
357
+ },
240
358
  envMarkers: ["OPENCODE", "OPENCODE_BIN", "OPENCODE_CONFIG"],
241
359
  mcpHostId: "opencode",
242
360
  globalMcpPaths: {
@@ -264,8 +382,8 @@ export const HARNESSES = [
264
382
  },
265
383
  {
266
384
  // Crush (charmbracelet/crush). Config `crush.json` ($schema charm.land/crush.json);
267
- // MCP under `mcp` (type "stdio"). Reads .agents/skills + .claude/skills. Hooks are
268
- // preliminary; enforcement via `allowed_tools` allowlist Phase 3.
385
+ // MCP under `mcp` (type "stdio"). Reads .agents/skills + .claude/skills. It has
386
+ // hooks of its own (`hooks` in crush.json) on top of the `allowed_tools` allowlist.
269
387
  // Global config verified 2026-07 (README charmbracelet/crush): Unix XDG,
270
388
  // Windows %LOCALAPPDATA%\crush\crush.json (override CRUSH_GLOBAL_CONFIG).
271
389
  id: "crush",
@@ -274,7 +392,25 @@ export const HARNESSES = [
274
392
  support: { tier: "best-effort", unstableSurface: true },
275
393
  runtime: { bins: ["crush"], versionArgs: ["--version"] },
276
394
  configDir: { kind: "mcp-parent" },
277
- hooks: { mechanism: "preliminary; enforcement via allowed_tools allowlist", managed: false },
395
+ // The catalog used to deny crush had hooks at all. It has them, in its own
396
+ // config file, and exactly one event.
397
+ hooks: {
398
+ managed: true,
399
+ artifact: {
400
+ kind: "config-merge",
401
+ path: "~/.config/crush/crush.json",
402
+ entry: "hooks{} (HookConfig: command · matcher · timeout)",
403
+ },
404
+ caveat: "matching hooks run in parallel, deduplicated by command; a project crush.json takes precedence over the global one",
405
+ events: {
406
+ SessionStart: { state: "omitted", reason: "crush supports only PreToolUse" },
407
+ PreToolUse: { state: "carried", native: "PreToolUse" },
408
+ SessionEnd: { state: "omitted", reason: "crush supports only PreToolUse" },
409
+ PreCompact: { state: "omitted", reason: "crush supports only PreToolUse" },
410
+ PostCompact: { state: "omitted", reason: "crush supports only PreToolUse" },
411
+ },
412
+ verified: '2026-08-04, against crush v0.87.0 (its embedded docs + JSON schema): "Only PreToolUse is currently supported"',
413
+ },
278
414
  envMarkers: ["CRUSH", "CRUSH_CONFIG"],
279
415
  mcpHostId: "crush",
280
416
  globalMcpPaths: {
@@ -338,7 +474,27 @@ export const HARNESSES = [
338
474
  versionArgs: ["--version"],
339
475
  },
340
476
  configDir: { kind: "dir", path: "~/.kimi-code" },
341
- hooks: { mechanism: "~/.kimi-code/config.toml → [[hooks]]", managed: true },
477
+ hooks: {
478
+ managed: true,
479
+ artifact: {
480
+ kind: "config-merge",
481
+ path: "~/.kimi-code/config.toml",
482
+ entry: "[[hooks]] (event · matcher · command · timeout)",
483
+ },
484
+ caveat: "user-global only: kimi has no project-level config",
485
+ events: {
486
+ SessionStart: { state: "carried", native: "SessionStart" },
487
+ PreToolUse: { state: "carried", native: "PreToolUse" },
488
+ SessionEnd: { state: "carried", native: "SessionEnd" },
489
+ PreCompact: { state: "carried", native: "PreCompact" },
490
+ PostCompact: {
491
+ state: "degraded",
492
+ native: "PostCompact",
493
+ loss: 'its type: "prompt" handler cannot be expressed in config.toml and is reported as skipped',
494
+ },
495
+ },
496
+ verified: "2026-07-29, against kimi 0.29.2 (shipped binary + live probes)",
497
+ },
342
498
  envMarkers: [],
343
499
  mcpHostId: "kimi",
344
500
  globalMcpPaths: {
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "22.1.0",
3
+ "version": "22.3.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 resolve through `.workflow/skills.toml`. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,25 +12,32 @@ allowed-tools:
12
12
 
13
13
  Read-only **with or without an argument**: no loop, no session, and it writes nothing in `docs/` or `.workflow/`. Sibling of `aw status`; not `aw session-resume` / `aw resume-summary` (internals).
14
14
 
15
- 1. **Read-only** — never run the route; the user does.
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`. 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
- 4. Output in the **user's language**.
15
+ 1. **Never re-decide** — priority, ties, the spec→plan link and the command are the CLI's. No re-sort by date, no slug match, no tie broken.
16
+ 2. Output in the **user's language**.
19
17
 
20
18
  ## Run
21
19
 
22
- 1. `aw resume --format human`. For one artifact, **pass it as the positional** (`aw resume docs/plans/009-plan-x.md` or its `NNN`); for a session, `aw resume --code <NNN | folder>`; none walks the pipeline.
23
- 2. **Relay it verbatim.**
24
- 3. Nothing pending → say so and stop; cheap host-memory may add a recent-focus note, never expensive or blocking.
20
+ 1. `aw resume --format human`. For one artifact, **pass it as the positional** (`aw resume docs/plans/009-plan-x.md`, or its `NNN`); for a session, `aw resume --code <NNN | folder>`; neither walks the pipeline.
21
+ 2. **Relay it verbatim**, then offer the choice.
22
+
23
+ ## Choose and continue
24
+
25
+ No target → **every** pending item as `candidates` in the CLI's order, `proposal` the recommended one. It runs no route and writes nothing: continuing is yours.
26
+
27
+ 1. **Analyse briefly first** — what is pending, what you recommend, why. From that envelope alone: no transcript, no repo walk.
28
+ 2. **One option per candidate** — only for CLI candidates, in its order — each with its re-entry command, plus the `flow` slot. Canonical [option shape](../loops/CHASSIS.md#structured-choice-design--batching) and [host binding](../harness/HARNESS.md#harness-binding-matrix): the title is the label, `Progreso` + `Siguiente` the sentence.
29
+ 3. **Past the host's ceiling**, group by class into ≤3 questions; if a class still will not fit, present them **all** as labelled markdown and declare the degradation. Nothing trimmed, merged or dropped.
30
+ 4. **Choosing invokes that command in the same turn.** The destination flow opens its own session and consent boundaries.
31
+ 5. **No candidates** → nothing is pending: say it and stop, opening no choice; cheap host-memory may add a recent-focus note, never expensive or blocking. No workspace → offer `/w:workspace-init`.
25
32
 
26
33
  ## What the CLI decides (do not re-derive)
27
34
 
28
- - **Priority**: unrefined spec → refined spec with no plan → incomplete plan loose checkpoint; started plans first.
29
- - **Ties**: equal priority and progress → candidates; date never splits.
30
- - **Spec→plan link**: the plan's `Derived from` or `## Origin`, never the slug; unproven stays unplanned.
31
- - **The route**: `/w:spec-refine`, `/w:plan-new`, `/w:plan-exec` or `aw session-resume --reopen`.
35
+ - **Priority**: unrefined spec → refined spec with no plan → plan not `done`; started first. A loose session is a notice, never a candidate.
36
+ - **Ties**: equal priority and progress → no single recommendation; date never splits.
37
+ - **Spec→plan link**: `Derived from` or `## Origin`, never the slug; unproven stays unplanned.
38
+ - **The route**: `/w:spec-refine`, `/w:plan-new`, `/w:plan-exec`, `aw session-resume --reopen`.
32
39
 
33
- > A plan is not finished because its boxes are ticked. `aw resume` re-enters at the first phase not `validada`, names a `bloqueada` phase with its declared reason, and when the phases are green but the plan never closed, the final validation remains. A plan declaring `done` over open work comes back as inconsistent repair first.
40
+ > A plan is not finished because its boxes are ticked: re-entry is the first phase not `validada`, a `bloqueada` phase with its declared reason, or phases green, plan never closed the final validation. One declaring `done` over open work comes back as inconsistent. An obligation leaving it neither runnable nor closable is said before its percentage.
34
41
 
35
42
  ## More context
36
43
 
@@ -15,14 +15,18 @@ Read-only single pass: no loop, no session, no writes. Transversal.
15
15
  ## Run
16
16
 
17
17
  1. `aw status --format human`; `--detail` for the full inventory ("detalle", "todo", "historial").
18
- 2. **Relay it verbatim.** The CLI already selects, groups and humanizes. Never paraphrase, re-sort, add or drop a line.
19
- 3. **Host context, opportunistic.** Host with *cheap* host-memory → append a `▸ CONTEXTO DEL HOST` section with a few recent-focus signals. Otherwise omit silently. Never scan transcripts, never ask.
18
+ 2. **Relay it verbatim.** The CLI selects, groups and humanizes: never paraphrase, re-sort, add or drop a line.
19
+ 3. **Host context, opportunistic.** Cheap host-memory → append a `▸ CONTEXTO DEL HOST` section with a few recent-focus signals. Otherwise omit silently; never scan transcripts, never ask.
20
20
 
21
- > **The default view is what is LEFT TO DO** — unrefined specs, refined specs with no plan, plans not `done`. `--detail` brings back history, sessions and discarded items re-run rather than explain an absence.
21
+ > **The default view is what is LEFT TO DO** — unrefined specs, refined specs with no plan, plans not `done` — and each says **what it still owes**, under its title. `--detail` brings back history, sessions and discarded items: re-run, never explain an absence.
22
22
 
23
- > **Automation reads JSON.** Piped or with `--json` / `--format json`, `aw status` emits its machine-readable envelope; `--detail` is human-only.
23
+ > **An obligation comes before the percentage.** What leaves an item neither runnable nor closable — an unresolvable design reference, a pending reconciliation, an unprovable baseline — takes the title, and the progress drops below it. A plan at `100%` with every phase `validada` is not finished either: it owes its final validation and its close.
24
24
 
25
- `initialized: false`, everything empty say the folder is not an agent-workflow workspace and suggest `/w:workspace-init`.
25
+ > **Sessions are not the user's work.** One carrying work with no document of its own is a **notice** count and how to look — never a pending row.
26
+
27
+ > **Automation reads JSON.** Piped or with `--json` / `--format json` it emits its envelope; `--detail` is human-only.
28
+
29
+ Nothing pending → one line, no empty section. No workspace → it offers `/w:workspace-init`; an empty pipeline for want of one is never "nothing pending".
26
30
 
27
31
  ## More context
28
32
 
@@ -12,16 +12,16 @@ allowed-tools:
12
12
 
13
13
  Turns the current folder into a Workline workspace: **1+ sources** (repos), one source = standalone. No project/hub modes.
14
14
 
15
- `aw workspace-init --source alias:path[:branch] [--proyecto <name>] [--main-branch <branch>] [--dry-run] --format human`
15
+ `aw workspace-init --source alias:path[:branch] [flags above] --format human`
16
16
 
17
- > **The CLI writes; this wrapper does not** — `Write` and `Edit` are deliberately absent from `allowed-tools`. Use `--dry-run` to preview, then re-run without it. Relay the CLI's output; do not re-render it.
17
+ > **The CLI writes; this wrapper does not** — `Write` and `Edit` are absent from `allowed-tools` on purpose. `--dry-run` previews; re-run without it. Relay the output, never re-render it.
18
18
 
19
19
  ## Interactive steps
20
20
 
21
- 1. **Sources** — the CLI detects the repo path(s); the user confirms aliases, paths, branches. Multiple `--source` accepted.
22
- 2. **Default skills** — present the catalog of capabilities (roles). Per role: `built-in default`, a third-party skill (`skills.sh`), or `off`; the result lands in `.workflow/skills.toml`. Cascade: `built-in → ~/.workflow/skills.toml (global) → .workflow/skills.toml (workspace)`. The template also ships a commented `[compaction]` section the `mode` switch for the loops' context self-regulation (`confirm` default, `auto` opt-in).
23
- 3. **Minimal scaffold** — only the activation set: `.workflow/sessions/` (the marker that activates the operating context), `.workflow/skills.toml`, the `WORKSPACE` block in CLAUDE.md/AGENTS.md and the CLI-owned `.gitignore`. **Nothing else upfront**: each `docs/<category>` folder is born on demand at its first numbered write (`aw next-number docs/<cat>`); `.workflow/launch/<alias>/` and `docs/logs/` at the first launch.
24
- 4. **External sources** — a source outside the workspace folder gets multi-root visibility (gitignored) and a reconcile.
21
+ 1. **Sources** — the CLI detects the repo path(s); the user confirms aliases, paths and branches. Multiple `--source` accepted.
22
+ 2. **Default skills** — present the catalog of capabilities (roles). Per role: `built-in default`, a third-party skill (`skills.sh`), or `off`; the result lands in `.workflow/skills.toml`. Cascade: `built-in → ~/.workflow/skills.toml (global) → .workflow/skills.toml (workspace)`. The template also ships a commented `[compaction]` section: the `mode` switch for the loops' context self-regulation (`confirm` default, `auto` opt-in).
23
+ 3. **Minimal scaffold** — only the activation set: `.workflow/sessions/` (the marker that activates the operating context), `.workflow/skills.toml`, the `WORKSPACE` block in CLAUDE.md/AGENTS.md and the CLI-owned `.gitignore`. **Nothing else upfront**: each `docs/<category>` is born on demand at its first numbered write (`aw next-number docs/<cat>`), and `.workflow/launch/<alias>/` plus `docs/logs/` at the first launch.
24
+ 4. **External sources** — one outside the workspace folder gets multi-root visibility (gitignored) and a reconcile.
25
25
 
26
26
  **Idempotent** — a re-run reconciles: it keeps manual configuration and prunes the legacy scaffold.
27
27
 
@@ -70,7 +70,7 @@ coordination, without turning a deterministic CLI rule into model work.
70
70
 
71
71
  ## Harness binding matrix
72
72
 
73
- Concrete mechanism per harness (matrix base verified **Jul-2026**; the `structured-choice` row re-verified **2026-08-04** and the Codex `hooks` row **2026-08-05**, both against the INSTALLED runtimes plus real runs — not docs; `~` partial). Antigravity CLI reuses Gemini's surfaces (`~/.gemini/`); Oz reuses Warp's (they share the **Warp / Oz** column, with MCP via flag — see the note under the matrix).
73
+ Concrete mechanism per harness (matrix base verified **Jul-2026**; the `structured-choice` row re-verified **2026-08-04**, the Codex `hooks` row **2026-08-05** and the crush/gemini/opencode `hooks` contract **2026-08-18**, all against the INSTALLED runtimes plus real runs — not docs; `~` partial). Antigravity CLI reuses Gemini's surfaces (`~/.gemini/`); Oz reuses Warp's (they share the **Warp / Oz** column, with MCP via flag — see the note under the matrix).
74
74
 
75
75
  | Capability | Claude Code | Codex | Kimi Code | Gemini / Antigravity | OpenCode | Crush | Warp / Oz | Generic |
76
76
  |---|---|---|---|---|---|---|---|---|
@@ -83,16 +83,20 @@ Concrete mechanism per harness (matrix base verified **Jul-2026**; the `structur
83
83
  | **host-memory** | `MEMORY.md` (cheap) + transcripts/`--resume` (deep) | `AGENTS.md` (static → fallback) | sessions with resume/fork (`kimi -S`) + `AGENTS.md` | `GEMINI.md`+`AGENTS.md` (static → fallback) | `AGENTS.md` (static → fallback) | `CRUSH.md`+`AGENTS.md` (static → fallback) | rules / history (~) | git/`docs/` + ask |
84
84
  | **web-research** | `WebSearch` / `WebFetch` | `web_search` (opt-in config) | moonshot search + fetch services | `google_web_search` + `web_fetch` | `webfetch` (~) | ~ | ~ (agent web access) | — (offline + declare) |
85
85
  | external-data (MCP) | `.mcp.json` | `.codex/config.toml` `[mcp_servers]` | `~/.kimi-code/mcp.json` `mcpServers` (also reads project `.mcp.json`) | `settings.json` `mcpServers` | `opencode.json` `mcp` | `crush.json` `mcp` | `.warp/.mcp.json` (+auto-discovers `.mcp.json`) · Oz: `--mcp` flag | — |
86
- | **enforcement (deny tool)** | `PreToolUse` → `permissionDecision:deny` / exit 2 | `PreToolUse` (**≈same protocol**) | `PreToolUse` → block / exit 2 | `BeforeTool` `decision:deny` / exit 2 | plugin `tool.execute.before` (`throw`) | `allowed_tools` (+ preliminary hooks) | allow/deny lists (**coarse**) | doctrine (git-safe #5) |
86
+ | **enforcement (deny tool)** | `PreToolUse` → `permissionDecision:deny` / exit 2 | `PreToolUse` (**≈same protocol**) | `PreToolUse` → block / exit 2 | `PreToolUse` in its `hooks.json` (Claude-shaped; `BeforeTool` **does not exist**) | plugin `tool.execute.before` (`throw`) | `PreToolUse` in `crush.json` → `hooks` (+ `allowed_tools` allowlist) | allow/deny lists (**coarse**) | doctrine (git-safe #5) |
87
87
  | plugin / dist | `.claude-plugin` + marketplace | `.codex-plugin` + `/plugins` marketplace | plugins + marketplace (no manifest we ship) | Extension `gemini-extension.json` | JS/TS plugin (npm) | MCP + skills + config | Warp Drive | — |
88
88
 
89
89
  > **Kimi Code caveats** (verified 2026-07-29 vs the shipped v0.29.2 binary + live probes): it exports **no env markers** to its subprocesses, so `aw harness` legitimately answers `unknown` inside it and detection goes through binary + config dir. Its hooks live **only** in the user-global `config.toml` — there is no project-level config — and their schema is `event`/`matcher`/`command`/`timeout`, so the bundled JSON template is *transformed*, not copied: `type: "prompt"` hooks cannot be expressed and are reported as skipped, and matchers are carried only for the tool-name events.
90
90
 
91
91
  > **Codex hooks caveats** (verified **2026-08-05** vs codex-cli 0.146.0 + real runs). Its user-level hooks are **not** in `config.toml`: they live in **`~/.codex/hooks.json`** with the **same JSON shape as Claude's** — `{"hooks": {"<Event>": [{"matcher": …, "hooks": [{"type": "command", "command": …, "timeout": N}]}]}}`. The event enum (`HookEventsToml`) is `PreToolUse` · `PermissionRequest` · `PostToolUse` · `PreCompact` · `PostCompact` · `SessionStart` · `SessionEnd` · `UserPromptSubmit` · `SubagentStart` · `SubagentStop` · `Stop`, so **all 5 events of the bundled template fit**, and its handlers admit `command`, **`prompt`** and `agent` — the `type: "prompt"` hook kimi cannot express, codex can. One observed limit: `SessionEnd` clamps its timeout to **3 s**.
92
92
  >
93
- > **But writing that file does not arm it, and that is why Workline does not manage hooks here.** Codex requires an **interactive human review per new or changed hook** (`New hook - review required`, `Modified since last trusted - review required`) and persists the decision as `trusted_hash` under `[hooks.state]`, keyed `"<file>:<event_snake_case>:<i>:<j>"`; the hash pins the command, so any edit re-requires review. Probe: in a clean `CODEX_HOME` a freshly written `hooks.json` was **read and validated** (it clamped a timeout) yet **no hook ran** across two consecutive runs, and codex recorded no trust entry of its own. Forging that hash would forge the person's security approval, so the surfaces say **available, not armed** and name this reason. `--dangerously-bypass-hook-trust` is per-invocation and self-describing. Plugin-bundled hooks skip the review (`Managed hooks are always on`), which is the route to take if this is ever revisited.
93
+ > **But writing that file does not arm it, and that is why Workline does not manage hooks here.** Codex requires an **interactive human review per new or changed hook** (`New hook - review required`, `Modified since last trusted - review required`) and persists the decision as `trusted_hash` under `[hooks.state]`, keyed `"<file>:<event_snake_case>:<i>:<j>"`; the hash pins the command, so any edit re-requires review. Probe: in a clean `CODEX_HOME` a freshly written `hooks.json` was **read and validated** (it clamped a timeout) yet **no hook ran** across two consecutive runs, and codex recorded no trust entry of its own. Forging that hash would forge the person's security approval, so the surfaces say **available, not armed** and name this reason. `--dangerously-bypass-hook-trust` is per-invocation and self-describing. Plugin-bundled hooks skip the review (`Managed hooks are always on`), and **that route is now generated**: `aw self install-hooks --target codex` writes a bundle — `.codex-plugin/plugin.json` with `"hooks": "./hooks.json"`, the five template events verbatim under `~/.agent-workflow/codex-plugin/`, and reports `generated`, never `installed`. Codex takes plugins **through a marketplace** (`codex plugin marketplace add` then `codex plugin install`), so arming it is the person's step; the uninstaller removes the bundle, and only when its descriptor `name` is ours. Verified against codex-cli 0.147.0 (its plugin validator's required fields and its own scaffold).
94
94
 
95
- > **Notes (field research Aug-2026):** **`SKILL.md` skills** are the **universal** portable unit **every harness in the matrix** supports them (Codex added them Dec-2025; **`.agents/skills` is the cross-host anchor**, read by Codex/OpenCode/Crush/Warp/Oz/**Kimi Code** every host except Claude Code, which reads only `.claude/skills`). The **enforcement layer** is **not Claude-exclusive**: Codex + Gemini use a near-identical protocol (`permissionDecision:deny` / exit 2) and OpenCode blocks via `throw` in a JS plugin; Crush/Warp only offer **coarse** allow/deny (no custom per-command logic) there, conventions stay **advisory** + allow/deny lists. Enforced **plan mode** is never trusted for safety; git-safe (invariant #5) is our own though a host-planner's *output* (the plan it built) is adoptable input (`../commands/plan-new.md` § *Input resolution*, mode 4). **MCP** is universal (each host its file/key). The **guaranteed floor** (last column) runs the full model.
95
+ > **Hooks contract per host** (catalog dated **2026-08-18**; runtimes read 2026-08-04 and 2026-07-29). Three catalog rows described mechanisms their runtimes do not have. **crush** was declared hookless and has hooks: `crush.json` → `hooks` (`command` · `matcher` · `timeout`), **only `PreToolUse`** (v0.87.0, its embedded docs + JSON schema). **gemini/Antigravity** named a `BeforeTool` event that appears **nowhere in `agy` 1.0.16**: what it has is one `hooks.json` at its customization root, with `PreToolUse`/`PostToolUse` Claude-shaped plus `PreInvocation`/`PostInvocation`/`Stop`. **opencode** named its event but never its artifact, which is a **JS/TS module in `.opencode/plugin/`** declared under `"plugin": []` code, not config. That module is now **generated** (`aw self install-hooks --target opencode`): it registers `tool.execute.before`, and it TRANSLATES opencode calls its tools `edit`/`write`/`bash` while our hooks read a Claude-shaped `{tool_name, tool_input}` and act only on names they know, so the module bridges both ways and throws on the CLI's exit 2. The SQL guard does **not** travel: its matcher (`mcp__.*__execute_sql`) names no opencode tool the bridge can produce, and the generated file's own header lists that omission next to the four missing events. Ownership is the module's first line; uninstall removes it and its `plugin[]` entry, and leaves anyone else's. Against the bundle's five template events: Claude and Codex carry all five; Kimi carries all five with `PostCompact` **partial** (its `type: "prompt"` handler is not expressible in `config.toml`); **crush, gemini and opencode carry `PreToolUse` and nothing else**. So on those three the **enforcement travels and the resumability does not** no session pin, no compaction checkpoint — and that is declared, never simulated: agy's `Stop` fires at the end of every turn rather than at session close, and opencode's only compaction candidate is `experimental.session.compacting`.
96
+ >
97
+ > **crush and agy are now MANAGED** (`aw self install-hooks --target crush|gemini`, and the uninstaller removes what it wrote). Their `PreToolUse` matchers are TRANSLATED, never copied: ours name Claude's tools, crush's are `edit`/`write`/`multiedit`/`bash` and agy's are its step types lowercased (`file_change`, `run_command`), so a verbatim matcher would install a hook that never fires. A matcher with no translation **skips its hook and says so**. Ownership is per entry, by the command invoking this CLI: on crush ours are merged beside the person's own `hooks` inside `crush.json`, and on agy ours live under one named hook (`agent-workflow`) in `~/.agents/hooks.json` — a hook of that name whose commands are not ours is left alone. agy documents its customization root as the workspace's `.agents/`; whether a user-global one is read is **not verified**, and the install result says so rather than implying it.
98
+
99
+ > **Notes (field research Aug-2026):** **`SKILL.md` skills** are the **universal** portable unit — **every harness in the matrix** supports them (Codex added them Dec-2025; **`.agents/skills` is the cross-host anchor**, read by Codex/OpenCode/Crush/Warp/Oz/**Kimi Code** — every host except Claude Code, which reads only `.claude/skills`). The **enforcement layer** is **not Claude-exclusive**: Codex + Gemini use a near-identical protocol (`permissionDecision:deny` / exit 2) and OpenCode blocks via `throw` in a JS plugin; Crush blocks through `PreToolUse` in its own `crush.json` (its ONLY hook event) on top of its `allowed_tools` allowlist; Warp/Oz only offer **coarse** allow/deny (no custom per-command logic) → there, conventions stay **advisory** + allow/deny lists. Enforced **plan mode** is never trusted for safety; git-safe (invariant #5) is our own — though a host-planner's *output* (the plan it built) is adoptable input (`../commands/plan-new.md` § *Input resolution*, mode 4). **MCP** is universal (each host its file/key). The **guaranteed floor** (last column) runs the full model.
96
100
 
97
101
  > **structured-choice routing.** A native binding qualifies only when the current client exposes it and can display the option's functional sentence without loss. When it has separate fields, map the semantic label and sentence to them; when it exposes one visible option string, render `Label — functional sentence`. Otherwise use labeled markdown. Respect the per-call ceilings in the row and reserve one question slot for `flow`; carry overflow into a later call. If the native tool already injects a custom/free-text option, do not add a duplicate `Other` option.
98
102
 
@@ -163,8 +167,8 @@ Each command's **contract** (Flow, Trigger, Input, Mode, …) is agnostic. The *
163
167
 
164
168
  ## Status
165
169
 
166
- Capability model + binding matrix **defined** and **validated** with field research (base **Jul-2026**; the `structured-choice` row re-verified **2026-08-04** and the Codex `hooks` row **2026-08-05** against the INSTALLED runtimes plus real runs — see the evidence note under the matrix for which claims rest on a run and which still rest on a doc).
170
+ Capability model + binding matrix **defined** and **validated** with field research (base **Jul-2026**; the `structured-choice` row re-verified **2026-08-04**, the Codex `hooks` row **2026-08-05** and the crush/gemini/opencode `hooks` contract **2026-08-18** against the INSTALLED runtimes plus real runs — see the evidence note under the matrix for which claims rest on a run and which still rest on a doc). The per-host hook contract lives in `domain/harnesses.ts` (artifact + one answer per template event) and its fixtures are the guards in `host-catalog-guards.test.ts` plus the dialect and HOME-temp cases in `hooks-json-dialects.test.ts`; opencode's plugin artifact is still later work, and observing any of them inside an installed host is an optional handoff, never a closing condition.
167
171
 
168
172
  The catalog counts **8 hosts** — `claude-code`, `codex`, `oz`, `warp`, `gemini`, `opencode`, `crush`, `kimi` — each with its own entry in `domain/harnesses.ts`. The columns above group two pairs that share a config surface (Warp/Oz, Gemini/Antigravity), which is a presentation choice, not a second taxonomy: the host set is whatever `HARNESSES` says. Anti-drift guards cover the CODE projections (TUI, install targets, doctor, detection); `chassis-consistency.test.ts` additionally parses the `structured-choice` row and asserts every host binding or explicit limitation. Support levels: **official** — Claude Code, Codex, Warp, Gemini/Antigravity, Kimi Code; **best-effort** — Oz, OpenCode, Crush. `agents` (`~/.agents/skills`) is a **shared destination**, never a host.
169
173
 
170
- All support `SKILL.md` (anchor `.agents/skills`) + MCP + `AGENTS.md`; deterministic enforcement on Claude/Codex/Kimi/Gemini/OpenCode, advisory + coarse allow/deny on Crush/Warp/Oz. The CLI (`aw`) implements the registry (`domain/harnesses.ts`), the per-host MCP writers, `detect-hosts` and `install-skill --target <host>`. The universal floor (`AGENTS.md` + text + files + skills) runs the full model today.
174
+ All support `SKILL.md` (anchor `.agents/skills`) + MCP + `AGENTS.md`; deterministic enforcement on Claude/Codex/Kimi/Gemini/OpenCode/Crush, advisory + coarse allow/deny on Warp/Oz. The CLI (`aw`) implements the registry (`domain/harnesses.ts`), the per-host MCP writers, `detect-hosts` and `install-skill --target <host>`. The universal floor (`AGENTS.md` + text + files + skills) runs the full model today.