@tacuchi/agent-workflow-cli 15.2.0 → 16.0.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.
- package/package.json +1 -1
- package/skills/w/README.md +14 -14
- package/skills/w/SKILL.md +94 -82
- package/skills/w/artifacts/artifacts-core/TASKS.md +1 -1
- package/skills/w/artifacts/artifacts-research/CONCLUSIONS.md +1 -1
- package/skills/w/commands/README.md +22 -22
- package/skills/w/commands/export-diagrams.md +9 -9
- package/skills/w/commands/export-manuals.md +9 -9
- package/skills/w/commands/export-reports.md +9 -9
- package/skills/w/commands/export-scripts.md +9 -9
- package/skills/w/commands/fix-git.md +12 -12
- package/skills/w/commands/plan-exec.md +19 -19
- package/skills/w/commands/plan-new.md +18 -18
- package/skills/w/commands/plan-refine.md +22 -22
- package/skills/w/commands/quick.md +16 -16
- package/skills/w/commands/spec-new.md +35 -34
- package/skills/w/commands/spec-refine.md +16 -16
- package/skills/w/commands/status.md +18 -16
- package/skills/w/commands/workspace-init.md +14 -14
- package/skills/w/exports/README.md +5 -5
- package/skills/w/exports/export-diagrams/SKILL.md +58 -58
- package/skills/w/exports/export-manuals/SKILL.md +61 -61
- package/skills/w/exports/export-reports/SKILL.md +51 -51
- package/skills/w/exports/export-scripts/SKILL.md +60 -60
- package/skills/w/harness/SKILL.md +48 -47
- package/skills/w/loops/CHASSIS.md +101 -98
- package/skills/w/loops/CODE-POLICIES.md +21 -21
- package/skills/w/loops/README.md +30 -29
- package/skills/w/loops/plan-exec-loop/SKILL.md +77 -77
- package/skills/w/loops/plan-new-loop/SKILL.md +80 -80
- package/skills/w/loops/plan-refine-loop/SKILL.md +62 -62
- package/skills/w/loops/quick-loop/SKILL.md +79 -79
- package/skills/w/loops/spec-refine-loop/SKILL.md +93 -94
- package/skills/w/roles/README.md +2 -2
- package/skills/w/roles/diagrams/SKILL.md +50 -47
- package/skills/w/roles/git/SKILL.md +58 -58
- package/skills/w/roles/research/SKILL.md +65 -62
- package/skills/w/roles/sql/SKILL.md +59 -55
- package/skills/w/roles/ui-spec/SKILL.md +60 -74
|
@@ -1,135 +1,135 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: export-scripts
|
|
3
|
-
description: "
|
|
3
|
+
description: "Consolidates the workspace's pending SQL into a single `docs/scripts/NNN-export-scripts-YYYY-MM-DD/` bundle with continuous numbering after `00-ROLLBACK.sql`. Reads type-B migrations (DDL/DML) from two sources: `.workflow/sessions/<folder>/SCRIPTS.sql` across N sessions AND standalone `docs/scripts/*.sql` (excluding previous bundles). Ignores read-only type-A (diagnostic queries, not deliverables). Minimal SQL headers + a simple README (3 sections: Files / Apply / Revert). The rollback is derived from the forwards. Read-only/report: it NEVER executes SQL nor commits — the bundle is for a human/DBA to apply. Composes the `sql` capability. Use for 'release SQL bundle', 'prepare the prod push', 'consolidate pending SQLs'. User-invoked via `/w:export-scripts`."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# export-scripts —
|
|
6
|
+
# export-scripts — consolidated SQL bundle, simple and direct
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Consolidates the pending SQL migrations of N sessions + standalone files into a single bundle under `docs/scripts/NNN-export-scripts-YYYY-MM-DD/`, with continuous numbering after `00-ROLLBACK.sql`. **Read-only / report** — the AI **never executes** the SQL; the user/DBA applies the bundle manually.
|
|
9
9
|
|
|
10
|
-
>
|
|
10
|
+
> `export-*` family (the only artifact→`docs/` path). Design: `docs/referencias/workflow-exports/export-scripts.md`.
|
|
11
11
|
|
|
12
12
|
## Category
|
|
13
13
|
|
|
14
|
-
`docs/scripts` —
|
|
14
|
+
`docs/scripts` — the **only** `docs/` folder this export writes.
|
|
15
15
|
|
|
16
16
|
## Composes
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
The **`sql`** capability (built-in default `sql`), resolved via `.workflow/skills.toml`. It contributes the DDL/DML category vocabulary, the application order and the rollback derivation. This export does **not** own that logic: it composes it. Rebindable or `off` by config.
|
|
19
19
|
|
|
20
20
|
## When to use
|
|
21
21
|
|
|
22
|
-
- "
|
|
23
|
-
-
|
|
24
|
-
-
|
|
22
|
+
- "Release SQL bundle", "prepare the prod push", "consolidate pending SQLs".
|
|
23
|
+
- Before promoting a branch to certification / `main`.
|
|
24
|
+
- After several `exec`/`quick` sessions left `SCRIPTS.sql` files with migrations.
|
|
25
25
|
|
|
26
26
|
## What it does
|
|
27
27
|
|
|
28
|
-
1.
|
|
29
|
-
2.
|
|
30
|
-
3.
|
|
31
|
-
4.
|
|
32
|
-
5.
|
|
33
|
-
6.
|
|
28
|
+
1. Collects the workspace's SQL from **two sources**: each corpus session's type-B `SCRIPTS.sql` + standalone `docs/scripts/*.sql` (excluding previous bundles).
|
|
29
|
+
2. Classifies the statements by canonical category (DDL-TABLES / DDL-FUNCTIONS / DML / INSERTS).
|
|
30
|
+
3. Consolidates cross-source per category with **continuous numbering** after `00-ROLLBACK.sql`.
|
|
31
|
+
4. Writes the consolidated forwards (each statement with its origin, 1 line).
|
|
32
|
+
5. Derives `00-ROLLBACK.sql` **at the end**, reading the already-written forwards.
|
|
33
|
+
6. Writes a minimal `README.md` (Files / Apply / Revert).
|
|
34
34
|
|
|
35
35
|
## What it does NOT do
|
|
36
36
|
|
|
37
|
-
- **
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
37
|
+
- **Execute SQL** (DB scripts-only invariant). The bundle is a deliverable; a human/DBA applies it.
|
|
38
|
+
- Commit, merge, push.
|
|
39
|
+
- Touch `.workflow/sessions/` or the standalone `docs/scripts/*.sql` (read-only).
|
|
40
|
+
- Write any `docs/` folder other than `docs/scripts/` (invariant: one category).
|
|
41
|
+
- Migrate previous bundles (`docs/scripts/NNN-export-scripts-*/` stay as history).
|
|
42
|
+
- Include read-only type-A (diagnostic queries) or invent SQL.
|
|
43
|
+
- Generate email templates, production checklists, commit/session listings, or executive summaries in the README.
|
|
44
44
|
|
|
45
45
|
## Read-only sandbox
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
In plan mode it **describes**, never writes: the resolved `NNN`, the detected sources (sessions + standalone), the categories with content, the files that would appear at the bundle root and the approximate README content. It does **not** run `Write`, effectful `aw next-number`, or mutations.
|
|
48
48
|
|
|
49
49
|
## Inputs
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
**`agent-workflow` CLI (alias `aw`)** — never read hardcoded paths:
|
|
52
52
|
|
|
53
|
-
- `aw sessions` / `aw release-data [--since sessionNNN] [--source <alias>]` —
|
|
54
|
-
- `aw session-artifacts --code <NNN> --dump scripts` —
|
|
55
|
-
- `aw next-number docs/scripts` —
|
|
53
|
+
- `aw sessions` / `aw release-data [--since sessionNNN] [--source <alias>]` — enumerates the session corpus.
|
|
54
|
+
- `aw session-artifacts --code <NNN> --dump scripts` — lists the session's `.sql` files with path and size (content is read by path). No scripts → empty list, silent skip.
|
|
55
|
+
- `aw next-number docs/scripts` — deterministic numbering of the bundle directory (the CLI handles destination-folder resolution).
|
|
56
56
|
|
|
57
57
|
**Filesystem**:
|
|
58
58
|
|
|
59
|
-
- `docs/scripts/*.sql`
|
|
59
|
+
- Standalone `docs/scripts/*.sql` (top-level only), **excluding** any `docs/scripts/NNN-export-scripts-*/` (previous outputs of this export).
|
|
60
60
|
|
|
61
|
-
**Args** (
|
|
61
|
+
**Args** (no lifecycle *structured-choice*; harness capability — see [`../../harness/SKILL.md`](../../harness/SKILL.md)):
|
|
62
62
|
|
|
63
63
|
```
|
|
64
64
|
/w:export-scripts [--sessions NNN[,NNN]] [--since sessionNNN] [--source <alias>]
|
|
65
65
|
[--skip-standalone] [--dry-run]
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
| Flag |
|
|
68
|
+
| Flag | Behavior |
|
|
69
69
|
|---|---|
|
|
70
|
-
| `--sessions NNN[,NNN]` |
|
|
71
|
-
| `--since sessionNNN` |
|
|
72
|
-
| `--source <alias>` |
|
|
73
|
-
| `--skip-standalone` |
|
|
74
|
-
| `--dry-run` |
|
|
70
|
+
| `--sessions NNN[,NNN]` | Discrete filter by code (takes precedence over `--since`) |
|
|
71
|
+
| `--since sessionNNN` | Only sessions after NNN (exclusive: NNN itself is out; use `--sessions` to include it) |
|
|
72
|
+
| `--source <alias>` | Limits to one source (multi-source workspace) |
|
|
73
|
+
| `--skip-standalone` | Skips reading the standalone `docs/scripts/*.sql` |
|
|
74
|
+
| `--dry-run` | Propositional report, no files written |
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
No args: every corpus session + every standalone `.sql` (excluding previous bundles).
|
|
77
77
|
|
|
78
78
|
## Flow
|
|
79
79
|
|
|
80
|
-
###
|
|
80
|
+
### Step 1 — Collect SQL sources
|
|
81
81
|
|
|
82
|
-
**
|
|
82
|
+
**Source A — sessions**: for every corpus session (`aw sessions` / `release-data` + `session-artifacts --code <NNN> --dump scripts`), read the `.sql` files the dump lists (per-script path). Take **only** type-B statements (deliverable DDL/DML migrations); ignore read-only type-A (diagnostic queries). Expected per-statement markers: `-- @category: <01-04>` + `-- @stmt: NNN-verb-target` (format defined by the `sql` capability).
|
|
83
83
|
|
|
84
|
-
**
|
|
84
|
+
**Source B — standalone** (unless `--skip-standalone`): list top-level `docs/scripts/*.sql`, **excluding** `docs/scripts/NNN-export-scripts-*/`. Per file: honor `@category` markers when present; otherwise infer the category from content (`CREATE/ALTER TABLE`, `CREATE INDEX` → `01`; `CREATE OR REPLACE FUNCTION`/`PROCEDURE` → `02`; `UPDATE`/`DELETE` → `03`; `INSERT INTO … VALUES` → `04`). If the filename contains `rollback` → skip (it never enters a forward).
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
If the A + B union is empty → **abort**: there is no pending SQL in the workspace.
|
|
87
87
|
|
|
88
|
-
###
|
|
88
|
+
### Step 2 — Bundle numbering
|
|
89
89
|
|
|
90
90
|
`aw next-number docs/scripts` → `docs/scripts/NNN-export-scripts-YYYY-MM-DD/`.
|
|
91
91
|
|
|
92
|
-
###
|
|
92
|
+
### Step 3 — Classification and internal order
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
Group by canonical category: `01 DDL-TABLES` · `02 DDL-FUNCTIONS` · `03 DML` · `04 INSERTS`. Internal order chronological by origin (ascending session → ascending stmt; standalone interleaved by lexical filename order).
|
|
95
95
|
|
|
96
|
-
###
|
|
96
|
+
### Step 4 — Continuous numbering (no gaps)
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
Assign sequential numbers **only to categories with content**, in canonical order. The first forward is always `01-…`. E.g.: DML only → `00-ROLLBACK.sql`, `01-DML.sql`; all 4 categories → `00-ROLLBACK.sql`, `01-DDL-TABLES.sql`, `02-DDL-FUNCTIONS.sql`, `03-DML.sql`, `04-INSERTS.sql`.
|
|
99
99
|
|
|
100
|
-
###
|
|
100
|
+
### Step 5 — Write the forwards
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
Per category with content, one file with a 1-2 line header (`-- 0N-<CATEGORY>.sql — bundle NNN-export-scripts-YYYY-MM-DD`) and, per statement, **a one-line origin comment** (`-- sessionXXX / stmt-id` or `-- docs/scripts/001-filename.sql`) followed by the SQL exactly as the developer wrote it (wrapped in `BEGIN; … COMMIT;` where it applies). Do not replicate motivation/impact/idempotency already present at the origin; no statement index, no invented verification SELECTs.
|
|
103
103
|
|
|
104
|
-
###
|
|
104
|
+
### Step 6 — Derive `00-ROLLBACK.sql` (at the end)
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
Via the `sql` capability, **reading the already-written forwards** (not the original `SCRIPTS.sql`): inverse statements in reverse order (last→first), a single transactional block, and an "irreversible cleanup" block at the end outside the transaction only if there are operations without an automatic reverse.
|
|
107
107
|
|
|
108
|
-
###
|
|
108
|
+
### Step 7 — Write the `README.md` (3 sections)
|
|
109
109
|
|
|
110
|
-
`## Archivos` (
|
|
110
|
+
`## Archivos` (table: 1 row per file present) · `## Aplicar` (one `psql -f` per file in ascending order; the export executes nothing) · `## Revertir` (`psql -f 00-ROLLBACK.sql` + a note if there is an irreversible block). The README is a user-facing deliverable → write it in the user's language. **Vetoed**: executive summary, session table, email templates, commit listing, production checklist.
|
|
111
111
|
|
|
112
|
-
###
|
|
112
|
+
### Step 8 — Write or report
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
With `--dry-run`: print the report; write nothing. Otherwise: `Write` the bundle. **NEVER commit**. Summary to the user: one line per written file + the bundle path (without replicating the README).
|
|
115
115
|
|
|
116
116
|
## Output location
|
|
117
117
|
|
|
118
118
|
```
|
|
119
119
|
docs/scripts/NNN-export-scripts-YYYY-MM-DD/
|
|
120
|
-
├── 00-ROLLBACK.sql #
|
|
121
|
-
├── 01-<
|
|
122
|
-
├── 02-<
|
|
120
|
+
├── 00-ROLLBACK.sql # reverse derived from the forwards
|
|
121
|
+
├── 01-<CATEGORY>.sql # first forward (continuous numbering)
|
|
122
|
+
├── 02-<CATEGORY>.sql # …per category with content
|
|
123
123
|
└── README.md # Archivos · Aplicar · Revertir
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
## Re-run
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
Functionally idempotent: each invocation takes the next `NNN` and **never overwrites** previous bundles. To regenerate: delete the directory manually and re-invoke.
|
|
129
129
|
|
|
130
130
|
## Resources
|
|
131
131
|
|
|
132
|
-
- Design: `docs/referencias/workflow-exports/export-scripts.md` ·
|
|
133
|
-
-
|
|
134
|
-
-
|
|
132
|
+
- Design: `docs/referencias/workflow-exports/export-scripts.md` · family: [`../README.md`](../README.md).
|
|
133
|
+
- Composed capability: `sql` (built-in default; see `docs/referencias/workflow-roles/`).
|
|
134
|
+
- Source artifact: `SCRIPTS.sql` (see `docs/referencias/workflow-artifacts/artifacts-core/`).
|
|
135
135
|
- Siblings: [`../export-manuals/SKILL.md`](../export-manuals/SKILL.md) · [`../export-diagrams/SKILL.md`](../export-diagrams/SKILL.md) · [`../export-reports/SKILL.md`](../export-reports/SKILL.md).
|
|
@@ -1,88 +1,89 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harness
|
|
3
3
|
description: >-
|
|
4
|
-
Harness-agnostic capability layer for agent-workflow. Read-and-follow doc (
|
|
5
|
-
invocable
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
SKILL.md (overview)
|
|
4
|
+
Harness-agnostic capability layer for agent-workflow. Read-and-follow doc (not
|
|
5
|
+
invocable by name): defines the contract that keeps the tool harness-agnostic
|
|
6
|
+
(Claude Code, Codex, Gemini/Antigravity, OpenCode, Crush, Warp/Oz, generic) without
|
|
7
|
+
giving up each harness's rich capabilities. Catalogs the capabilities the workflow
|
|
8
|
+
depends on, binds each to the concrete mechanism of every harness (binding matrix),
|
|
9
|
+
and fixes the two principles (capability-not-tool · progressive-enhancement).
|
|
10
|
+
Referenced from SKILL.md (overview) and the loops when they name structured-choice /
|
|
11
|
+
compaction.
|
|
11
12
|
---
|
|
12
13
|
|
|
13
|
-
# harness —
|
|
14
|
+
# harness — harness-agnostic capability layer (cross-cutting)
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
**Read-and-follow** doc (never invoked by name). Here lives the contract that keeps agent-workflow **harness-agnostic** (Claude Code, Codex, opencode, Gemini CLI, …) without giving up each harness's rich capabilities. Referenced from `../SKILL.md` (overview) and from the loops when they name a capability (`structured-choice`, `compaction`, …).
|
|
16
17
|
|
|
17
|
-
##
|
|
18
|
+
## The problem
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
The doctrine (commands + loops + artifacts) describes **what** the AI does, never **with which tool** of a concrete harness. Natural vocabulary drags in Claude-Code-specific mechanisms — `AskUserQuestion`, `/compact`, `$ARGUMENTS`, `Task`/`Agent` — as if they were universal. This document abstracts them: the doctrine references **capabilities**; here each capability maps to each harness's **concrete mechanism**.
|
|
20
21
|
|
|
21
|
-
##
|
|
22
|
+
## Two principles
|
|
22
23
|
|
|
23
|
-
1. **
|
|
24
|
-
2. **Progressive enhancement.**
|
|
24
|
+
1. **Capability, not tool.** Loops/commands name an abstract **capability** (e.g. *structured-choice*, *compaction*). A single table — this one — binds it to each harness's mechanism. Switching harness = switching column, never doctrine.
|
|
25
|
+
2. **Progressive enhancement.** Use the **richest** mechanism the harness offers; **degrade** to a universal fallback when it does not exist. That satisfies both "harness-agnostic" **and** "leverage each harness".
|
|
25
26
|
|
|
26
|
-
> **
|
|
27
|
+
> **Symmetry with the skills cascade (`.workflow/skills.toml`):** that category binds **roles → skills** by config; this one binds **capabilities → harness mechanisms** by detection. Same pattern (binding + default), different axis: one is *what knowledge the loop composes*, the other is *which host primitives execute it*.
|
|
27
28
|
|
|
28
29
|
## Capability catalog
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
The capabilities the harness layer depends on, with their universal fallback (what is used when the harness offers nothing better):
|
|
31
32
|
|
|
32
|
-
| Capability |
|
|
33
|
+
| Capability | What the workflow needs | Universal fallback (lowest common) |
|
|
33
34
|
|---|---|---|
|
|
34
|
-
| **command-invocation** |
|
|
35
|
-
| **procedure-loading** |
|
|
36
|
-
| **structured-choice** |
|
|
37
|
-
| **compaction** |
|
|
38
|
-
| **subagent-dispatch** | *(
|
|
39
|
-
| **persistent-context** |
|
|
40
|
-
| **external-data** |
|
|
41
|
-
| **dry-run / preview** |
|
|
35
|
+
| **command-invocation** | the user triggers a flow by name (`spec-new`, `plan-exec`, …) | the user writes "run the `<cmd>` procedure" and the AI reads its doc |
|
|
36
|
+
| **procedure-loading** | load a loop's/command's doctrine | the AI **reads the `.md`** of the loop and follows it (read-and-follow) |
|
|
37
|
+
| **structured-choice** | ask the human ≤3 content questions **+ always** a `flow` control (`Compactar`/`Cerrar`) through a side channel | a **numbered markdown** question in chat; the `flow` control is offered as one more option |
|
|
38
|
+
| **compaction** | shrink the context without losing the thread | write `CHECKPOINT` and ask the user to restart the context and resume (resume keys off `CHECKPOINT`) |
|
|
39
|
+
| **subagent-dispatch** | *(optional)* parallelize research breadth | **inline sequential** research in the same session (the default anyway) |
|
|
40
|
+
| **persistent-context** | the `WORKSPACE` block + conventions always present | the repo's context file (standard **`AGENTS.md`**; `CLAUDE.md` on Claude Code) |
|
|
41
|
+
| **external-data** | read-only DB reads or other sources for research/validation | **MCP** (widely supported); without it, the gap degrades to a human question |
|
|
42
|
+
| **dry-run / preview** | preview what a command would do without writing | the command **describes** the change instead of applying it (e.g. `spec-new` lists the draft without creating the file) |
|
|
42
43
|
|
|
43
|
-
> **
|
|
44
|
+
> **Only two capabilities are `must` for a loop's cycle**: `structured-choice` and `compaction`. Both degrade to a purely textual fallback → **any** harness with chat + a filesystem runs the full model. The rest (subagents, MCP, slash commands, native skills) is *enhancement*.
|
|
44
45
|
|
|
45
46
|
## Harness binding matrix
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
Concrete mechanism per harness (**Jul-2026**, verified against official 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).
|
|
48
49
|
|
|
49
|
-
| Capability | Claude Code | Codex | Gemini / Antigravity | OpenCode | Crush | Warp / Oz |
|
|
50
|
+
| Capability | Claude Code | Codex | Gemini / Antigravity | OpenCode | Crush | Warp / Oz | Generic |
|
|
50
51
|
|---|---|---|---|---|---|---|---|
|
|
51
|
-
| command-invocation | `.claude/commands/` (slash) | slash + skills | `.gemini/commands/*.toml` | `.opencode/command/` |
|
|
52
|
+
| command-invocation | `.claude/commands/` (slash) | slash + skills | `.gemini/commands/*.toml` | `.opencode/command/` | user-invocable skills | Workflows (Drive) | text |
|
|
52
53
|
| procedure-loading (skills) | `SKILL.md` `.claude/skills` | `SKILL.md` `.agents/skills` | `SKILL.md` (agentskills) | `SKILL.md` `.opencode`+`.claude`+`.agents` | `SKILL.md` `.agents`+`.crush`+`.claude` | `SKILL.md` `.agents`+`.warp`+`.claude` | read-and-follow `.md` |
|
|
53
|
-
| structured-choice | `AskUserQuestion` (**
|
|
54
|
+
| structured-choice | `AskUserQuestion` (**main-agent only**) | — | — | — | — | — | numbered markdown |
|
|
54
55
|
| compaction | `/compact` | Pre/PostCompact hooks | ~ | `session.compacted` | ~ | ~ | CHECKPOINT + resume |
|
|
55
|
-
| subagent-dispatch | `Task` (
|
|
56
|
-
| persistent-context | `CLAUDE.md` (**
|
|
57
|
-
| external-data (MCP) | `.mcp.json` | `.codex/config.toml` `[mcp_servers]` | `settings.json` `mcpServers` | `opencode.json` `mcp` | `crush.json` `mcp` | `.warp/.mcp.json` (+
|
|
58
|
-
| **enforcement (deny tool)** | `PreToolUse` → `permissionDecision:deny` / exit 2 | `PreToolUse` (**≈
|
|
59
|
-
| plugin / dist | `.claude-plugin` + marketplace | `.codex-plugin` + `/plugins` marketplace | Extension `gemini-extension.json` |
|
|
56
|
+
| subagent-dispatch | `Task` (parallel) | `SubagentStart` / agents | agents (`.gemini/agents`) | `.opencode/agent/*.md` | ~ | ~ (cloud agents) | inline |
|
|
57
|
+
| persistent-context | `CLAUDE.md` (does **not** read AGENTS.md → symlink) | `AGENTS.md` | `GEMINI.md` + `AGENTS.md` | `AGENTS.md` | `CRUSH.md` + `AGENTS.md` | `AGENTS.md` (auto) | `AGENTS.md` |
|
|
58
|
+
| external-data (MCP) | `.mcp.json` | `.codex/config.toml` `[mcp_servers]` | `settings.json` `mcpServers` | `opencode.json` `mcp` | `crush.json` `mcp` | `.warp/.mcp.json` (+auto-discovers `.mcp.json`) · Oz: `--mcp` flag | — |
|
|
59
|
+
| **enforcement (deny tool)** | `PreToolUse` → `permissionDecision:deny` / exit 2 | `PreToolUse` (**≈same protocol**) | `BeforeTool` → `decision:deny` / exit 2 | plugin `tool.execute.before` (`throw`) | `allowed_tools` (+ preliminary hooks) | allow/deny lists (**coarse**) | doctrine (git-safe #5) |
|
|
60
|
+
| plugin / dist | `.claude-plugin` + marketplace | `.codex-plugin` + `/plugins` marketplace | Extension `gemini-extension.json` | JS/TS plugin (npm) | MCP + skills + config | Warp Drive | — |
|
|
60
61
|
|
|
61
|
-
> **
|
|
62
|
+
> **Notes (field research Jul-2026):** **`SKILL.md` skills** are the **universal** portable unit — **all six** harnesses support them (Codex added them Dec-2025; **`.agents/skills` is the cross-host anchor**, read by Codex/OpenCode/Crush/Warp). **Structured choice** (`AskUserQuestion`) remains **Claude Code / main-agent only** → elsewhere `structured-choice` degrades to numbered markdown. The **enforcement layer** (new row) is **NO longer 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. **MCP** is universal (each host its file/key). The **guaranteed floor** (last column) runs the full model.
|
|
62
63
|
|
|
63
|
-
> **Oz (
|
|
64
|
+
> **Oz (Warp's cloud sibling).** `oz agent run` is a cloud agent orchestrator that **reuses Warp's surfaces**: same skills (`.agents/skills`, flattened to top level like Warp) and `AGENTS.md`, with `structured-choice` equally degraded to numbered markdown. It differs in three points: **detection** via `OZ_RUN_ID` (takes priority over Warp when both markers coexist); **MCP without a config file** — the JSON is passed via the `--mcp` flag of `oz agent run` (or the `OZ_MCP_CONFIG` env), it never writes `.warp/.mcp.json`; and **no plugin or hooks** (advisory enforcement, like Warp). Hence it shares the **Warp / Oz** column with that MCP caveat.
|
|
64
65
|
|
|
65
66
|
## Leverage installed skills
|
|
66
67
|
|
|
67
|
-
"
|
|
68
|
+
"Leverage whatever skills the harness has installed" resolves through the **same** `.workflow/skills.toml` binding: a role can point at a skill **installed on the host** (third-party, via skills.sh) instead of the built-in. Rule:
|
|
68
69
|
|
|
69
|
-
-
|
|
70
|
-
-
|
|
70
|
+
- If the host has a **better** skill for a role (e.g. a superior diagram generator for `diagrams`, or a specialized investigator for `research`), **bind it** in `.workflow/skills.toml` and the loop composes it unchanged.
|
|
71
|
+
- The built-in default is the **floor**, not the ceiling: it guarantees the role works on any host; the binding **enriches** it where the host can do more.
|
|
71
72
|
|
|
72
|
-
##
|
|
73
|
+
## Convention for the rest of the corpus
|
|
73
74
|
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
75
|
+
- Loops/commands reference the **capability** by name (e.g. "*structured-choice* (see `harness/SKILL.md`)"), **never** the concrete tool.
|
|
76
|
+
- The historical name `AskUserQuestion` survives **only** as the Claude-Code binding of `structured-choice` (this table), never as doctrine vocabulary.
|
|
77
|
+
- The `flow` lifecycle control (`Compactar`/`Cerrar`) belongs to the `structured-choice` capability, not to a tool: on harnesses without structured choice it is offered as one more textual option.
|
|
77
78
|
|
|
78
79
|
## Distribution (install-time)
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
Proven pattern (Spec Kit, 30+ agents): **one canonical source** + generate/symlink into the per-harness dirs at install (`.claude/`, `.codex/`, `.gemini/`, …). agent-workflow already does this via `aw self install-skill`. Recommended convention: **canonical `AGENTS.md` + `CLAUDE.md` symlink** (Claude Code does not read `AGENTS.md` natively; the rest do).
|
|
81
82
|
|
|
82
83
|
## Command packaging (harness-specific)
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
Each command's **contract** (Flow, Trigger, Input, Mode, …) is agnostic. The **file** the harness executes wraps that contract in its native format: Claude Code = slash command with frontmatter (`description`, `argument-hint`, `allowed-tools`) + a body that invokes the skill or the `aw` CLI; Codex = slash command or skill; Gemini/Antigravity = `.gemini/commands/*.toml`; OpenCode = `.opencode/command/*.md`; Crush/Warp = the invocable **skill itself**. The **universal fallback** is *skill-as-command*: since all six harnesses load skills, the doctrine always runs even without native commands. The contract never changes; the wrapper does (another column).
|
|
85
86
|
|
|
86
87
|
## Status
|
|
87
88
|
|
|
88
|
-
|
|
89
|
+
Capability model + binding matrix **defined** and **validated** with field research (**Jul-2026**, against official docs). Coverage: **6 real harnesses** (families; Warp/Oz counts as one, like Gemini/Antigravity): Claude Code, Codex, Gemini/Antigravity, OpenCode, Crush, Warp/Oz — all support `SKILL.md` (anchor `.agents/skills`) + MCP + `AGENTS.md`; deterministic enforcement on Claude/Codex/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.
|