orchestrator-workflow 0.28.0 → 0.29.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/CHANGELOG.md +26 -0
- package/INSTALL-AGENT.md +85 -58
- package/README.md +134 -44
- package/assets/agents-md-section.md +16 -4
- package/assets/skill/SKILL.md +17 -6
- package/dist/cli-apply.d.ts +2 -0
- package/dist/cli-inputs.d.ts +13 -17
- package/dist/cli-inputs.js +69 -54
- package/dist/cli.js +110 -6
- package/dist/codex.d.ts +8 -0
- package/dist/codex.js +52 -0
- package/dist/doctor.d.ts +6 -0
- package/dist/doctor.js +29 -5
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/init.d.ts +34 -7
- package/dist/init.js +128 -28
- package/dist/operator-manifest.d.ts +5 -1
- package/dist/operator-manifest.js +33 -1
- package/dist/routing-state.d.ts +60 -0
- package/dist/routing-state.js +277 -0
- package/dist/routing.d.ts +103 -0
- package/dist/routing.js +254 -0
- package/dist/uninstall.js +2 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.29.0] - 2026-09-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Native Codex custom agents under `.codex/agents/`, including profile-scoped
|
|
15
|
+
roles and optional effort-tier variants with explicit model and effort.
|
|
16
|
+
The initial routing uses Astra for review/advice and implementation
|
|
17
|
+
escalation, Sol for discovery/slicing, Terra for regular implementation,
|
|
18
|
+
and Luna for narrowly scoped low-tier work.
|
|
19
|
+
- Harness-specific role/tier routing overrides through `--routing <file>`
|
|
20
|
+
on `init`, `setup`, and `apply`, persisted alongside the legacy `models`
|
|
21
|
+
configuration. Optional `--codex-catalog <file>` checks selected Codex
|
|
22
|
+
model/effort pairs against a supplied catalog before installation writes.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Agent-led installation and deliberate model refresh are the recommended
|
|
27
|
+
entry point. The agent inspects capabilities and existing preferences,
|
|
28
|
+
applies authorized scoped changes through the CLI, and reports verification
|
|
29
|
+
gaps. The CLI remains available as the reproducible installation backend.
|
|
30
|
+
- Codex workflow guidance uses native role delegation when supported, with an
|
|
31
|
+
explicit inline fallback for environments without native subagents. Normal
|
|
32
|
+
reinstallation preserves recorded routing; model changes use explicit
|
|
33
|
+
overrides or documented operator synchronization.
|
|
34
|
+
|
|
35
|
+
|
|
10
36
|
## [0.28.0] - 2026-09-04
|
|
11
37
|
|
|
12
38
|
### Added
|
package/INSTALL-AGENT.md
CHANGED
|
@@ -17,21 +17,23 @@ which is mutable. For a stable audit, pin the URL to a commit SHA instead
|
|
|
17
17
|
|
|
18
18
|
## What the linked instructions do
|
|
19
19
|
|
|
20
|
-
1. **
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
If the installer reports conflicts with locally edited files, the
|
|
34
|
-
|
|
20
|
+
1. **Inspect the repository and installed state**: detect harness configs,
|
|
21
|
+
read an existing workflow manifest, and inspect native model capabilities
|
|
22
|
+
where the harness provides them. Existing choices and authorization are
|
|
23
|
+
evidence; the agent does not make you answer them again.
|
|
24
|
+
2. **Prepare a concrete configuration diff**: selected harnesses, profile,
|
|
25
|
+
tier variants, and the complete per-harness role/tier routing that will be
|
|
26
|
+
persisted. Existing routing leaves remain exact unless you asked to change
|
|
27
|
+
them. The agent records the prior routing in its handoff as the rollback
|
|
28
|
+
input and never treats "latest" or "newer" as a reason to change models.
|
|
29
|
+
3. **Ask only when needed**, for a material preference, missing authority, or
|
|
30
|
+
a conflict that changes the result. Then run the non-interactive CLI with
|
|
31
|
+
`--routing <json-file>` for the reviewed deep patch and, when available,
|
|
32
|
+
`--codex-catalog <json-file>` for deterministic Codex capability checking.
|
|
33
|
+
If the installer reports conflicts with locally edited files, inspect the
|
|
34
|
+
concrete files and reuse any overwrite authority already granted for that
|
|
35
|
+
scope. Ask before a `--force` re-run only when authority or conflict scope
|
|
36
|
+
remains unresolved. **The operator
|
|
35
37
|
path**: when an operator has already run `orchestrator-workflow setup`
|
|
36
38
|
on this machine (an operator manifest exists at
|
|
37
39
|
`<operator home>/manifest.json`, where the operator home is
|
|
@@ -48,9 +50,12 @@ which is mutable. For a stable audit, pin the URL to a commit SHA instead
|
|
|
48
50
|
following the byte-precise rules in step 4 below. This manual path
|
|
49
51
|
covers `init` only; there is no manual equivalent for `apply` or
|
|
50
52
|
`adopt`, both of which require the installed CLI.
|
|
51
|
-
5. **
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
5. **Verify and report back**: describe the applied routing, prior routing
|
|
54
|
+
rollback input, installed profile and variants, and the supported dispatch
|
|
55
|
+
path (named selection, explicit model/effort spawn from the installed TOML,
|
|
56
|
+
or inline/sequential fallback). Include checks run, unknown capability or
|
|
57
|
+
entitlement gaps, and conflicts left in place. The workflow never opens a
|
|
58
|
+
GUI or changes fleet or global harness configuration.
|
|
54
59
|
|
|
55
60
|
### Write surface
|
|
56
61
|
|
|
@@ -77,24 +82,26 @@ The install creates or touches only these paths:
|
|
|
77
82
|
is created with a short heading when absent (Claude Code harness only)
|
|
78
83
|
- `.claude/skills/orchestrator-workflow/SKILL.md` and
|
|
79
84
|
`.claude/agents/{explorer,task-slicer,implementer,reviewer,advisor}.md` (Claude Code)
|
|
80
|
-
- `.agents/skills/orchestrator-workflow/SKILL.md`
|
|
85
|
+
- `.agents/skills/orchestrator-workflow/SKILL.md` and
|
|
86
|
+
`.codex/agents/{explorer,task-slicer,implementer,reviewer,advisor}.toml` (Codex)
|
|
81
87
|
- `.opencode/skills/orchestrator-workflow/SKILL.md` and
|
|
82
88
|
`.opencode/agents/{explorer,task-slicer,implementer,reviewer,advisor}.md` (opencode)
|
|
83
89
|
|
|
84
90
|
The per-role agent files above are the `full` profile (the default); the
|
|
85
|
-
`minimal` profile writes only the `implementer` and `reviewer` files for
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
what it gets. When `--tiers` is on, each installed Claude Code and opencode role
|
|
91
|
+
`minimal` profile writes only the `implementer` and `reviewer` files for all
|
|
92
|
+
three harnesses and skips `task-slicer`, `explorer`, and `advisor` entirely.
|
|
93
|
+
When `--tiers` is on, each installed role
|
|
89
94
|
additionally gets one subagent file per non-default effort tier, named
|
|
90
|
-
`<role>-<tier>.md`
|
|
91
|
-
|
|
95
|
+
`<role>-<tier>.md` for Claude Code/opencode or `<role>-<tier>.toml` for Codex
|
|
96
|
+
(never a file for the role's own default tier, which would collide with the
|
|
97
|
+
plain role file); see the package README's
|
|
92
98
|
"Effort tiers" section for the full role/tier table and the per-harness
|
|
93
99
|
frontmatter shape. `--tiers` is off by default and has no interactive
|
|
94
100
|
prompt equivalent in the manual fallback below (nor does its negation,
|
|
95
101
|
`--no-tiers`): the automated installer is the only path that renders
|
|
96
102
|
tier-variant files; a manual scaffold (step 4) does not cover them.
|
|
97
|
-
|
|
103
|
+
The manifest records the complete effective routing map, including exact
|
|
104
|
+
Codex model and effort selections. Nothing else in the repository is modified. Locally edited files are
|
|
98
105
|
reported as conflicts and left alone, never overwritten silently; the
|
|
99
106
|
exceptions are the kit-owned surfaces: `.ai/workflow/manifest.json` (the
|
|
100
107
|
kit's state file, rewritten whenever the applied state changes) and the
|
|
@@ -103,52 +110,64 @@ is fully reversible: `npx orchestrator-workflow uninstall` removes exactly
|
|
|
103
110
|
this write surface again, keeping run history under `.ai/runs/` and any
|
|
104
111
|
locally edited files. Network access is limited to the npm registry (for
|
|
105
112
|
`npx`) and, in the manual fallback, this repository on github.com /
|
|
106
|
-
raw.githubusercontent.com.
|
|
113
|
+
raw.githubusercontent.com. Native harness capability inspection is read-only;
|
|
114
|
+
the workflow does not open a GUI or mutate global or fleet configuration.
|
|
107
115
|
|
|
108
116
|
## Instructions for the agent
|
|
109
117
|
|
|
110
118
|
You are a coding agent that was pointed at this file. Execute the following
|
|
111
119
|
steps in the repository you were asked to install into.
|
|
112
120
|
|
|
113
|
-
1.
|
|
114
|
-
`CLAUDE.md` (Claude Code), `.opencode/`,
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
1. Inspect the target before proposing changes:
|
|
122
|
+
- Detect `.claude/` or `CLAUDE.md` (Claude Code), `.opencode/`,
|
|
123
|
+
`opencode.json` or `opencode.jsonc` (opencode), and `.agents/` or
|
|
124
|
+
`.codex/` (Codex).
|
|
125
|
+
- Read `.ai/workflow/manifest.json` when present. Treat its harnesses,
|
|
126
|
+
profile, tiers, legacy models, and exact routing as the reinstall
|
|
127
|
+
baseline. Preserve them unless the operator already requested a change.
|
|
128
|
+
- Inspect native model capabilities when the installed harness exposes a
|
|
129
|
+
read-only command. For Codex, a refreshed `codex debug models` catalog
|
|
130
|
+
can be supplied to the installer with `--codex-catalog`; a bundled-only
|
|
131
|
+
view does not prove account entitlement. Do not invent a minimum harness
|
|
132
|
+
version. If the catalog or entitlement is unavailable offline, report
|
|
133
|
+
that gap instead of claiming validation.
|
|
134
|
+
- Check for an operator manifest as described under "Operator path" below.
|
|
135
|
+
Existing authorization and preferences remain valid. Do not open a GUI
|
|
136
|
+
or change global or fleet configuration.
|
|
117
137
|
|
|
118
|
-
2.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
when the chosen profile does not install that role.
|
|
129
|
-
- Whether to also render effort-tier subagent variants (`--tiers`)?
|
|
130
|
-
Default: off. There is no per-tier model question: tier models are
|
|
131
|
-
chosen automatically from the tier (see the package README's "Effort
|
|
132
|
-
tiers" section for the role/tier table and the model-class mapping).
|
|
138
|
+
2. Prepare a concrete, reviewable configuration diff. Infer the harness set
|
|
139
|
+
from installed state and detected configs; infer the existing profile,
|
|
140
|
+
tiers, and routing from the manifests. Use `full` for a fresh install
|
|
141
|
+
unless the repository clearly calls for `minimal`. Build a routing JSON
|
|
142
|
+
deep patch only for leaves that need to change. Its shape is
|
|
143
|
+
`harness -> role -> tier -> {model, effort}`; the role's default-tier key
|
|
144
|
+
configures the unsuffixed file. Preserve every omitted leaf. Keep the prior
|
|
145
|
+
routing in the handoff as the rollback input. Never upgrade a model merely
|
|
146
|
+
because a newer one exists, and ask the operator only when a material
|
|
147
|
+
preference, authority boundary, or conflict remains unresolved.
|
|
133
148
|
|
|
134
|
-
3. Run the non-interactive installer with the
|
|
149
|
+
3. Run the non-interactive installer with the reviewed configuration:
|
|
135
150
|
|
|
136
151
|
```bash
|
|
137
152
|
npx orchestrator-workflow init --yes \
|
|
138
153
|
--harness <claude,codex,opencode> \
|
|
139
154
|
--profile <minimal|full> \
|
|
140
|
-
--models "explorer=<model>,task-slicer=<model>,implementer=<model>,reviewer=<model>,advisor=<model>" \
|
|
155
|
+
[--models "explorer=<model>,task-slicer=<model>,implementer=<model>,reviewer=<model>,advisor=<model>"] \
|
|
156
|
+
[--routing <routing.json>] \
|
|
157
|
+
[--codex-catalog <codex-catalog.json>] \
|
|
141
158
|
[--tiers | --no-tiers]
|
|
142
159
|
```
|
|
143
160
|
|
|
144
161
|
Omit `--profile` to keep `full` (or, on a re-run, whatever profile was
|
|
145
|
-
installed previously)
|
|
146
|
-
|
|
162
|
+
installed previously). `--models` is a backward-compatible input for
|
|
163
|
+
Claude Code and opencode only; never use it to configure Codex. `--routing`
|
|
164
|
+
is the highest-precedence deep patch. Add `--tiers` only when the operator asked for tier
|
|
147
165
|
variants; add `--no-tiers` only when the operator explicitly wants them
|
|
148
166
|
turned off on a re-run that previously had them on; omit both to keep
|
|
149
167
|
tiers off on a fresh install, or whatever value was previously installed
|
|
150
|
-
on a re-run. If the command reports conflicts,
|
|
151
|
-
and ask before
|
|
168
|
+
on a re-run. If the command reports conflicts, inspect the concrete files,
|
|
169
|
+
reuse prior overwrite authority for the same scope, and ask before
|
|
170
|
+
`--force` only when authority or scope remains unresolved.
|
|
152
171
|
|
|
153
172
|
**Operator path**: before running `init`, check whether an operator
|
|
154
173
|
manifest already exists on this machine, at
|
|
@@ -166,9 +185,13 @@ steps in the repository you were asked to install into.
|
|
|
166
185
|
4. Only if npx or the registry is unavailable, scaffold manually from
|
|
167
186
|
https://github.com/LanNguyenSi/agent-dx/tree/master/packages/orchestrator-workflow/assets.
|
|
168
187
|
This manual path does not cover `--tiers`: it never renders
|
|
169
|
-
|
|
188
|
+
tier variant files, regardless of what the operator asked
|
|
170
189
|
for in step 2; tell the operator tier variants require the automated
|
|
171
|
-
installer (step 3).
|
|
190
|
+
installer (step 3). It also cannot safely reproduce native Codex TOML from
|
|
191
|
+
the Markdown assets without duplicating the installer's serializer. For a
|
|
192
|
+
Codex manual fallback, install the shared skill only and state that roles
|
|
193
|
+
must run inline and sequentially until the automated CLI can generate
|
|
194
|
+
`.codex/agents/*.toml`.
|
|
172
195
|
|
|
173
196
|
- `.ai/workflow/templates/00-goal.md` through `06-handoff.md` from
|
|
174
197
|
`assets/templates/`, unchanged.
|
|
@@ -197,6 +220,8 @@ steps in the repository you were asked to install into.
|
|
|
197
220
|
directly after the `effort:` line. Ensure `CLAUDE.md` exists and
|
|
198
221
|
contains a line `@AGENTS.md`.
|
|
199
222
|
- Codex: `.agents/skills/orchestrator-workflow/SKILL.md`, same skill file.
|
|
223
|
+
Do not hand-author `.codex/agents/*.toml`; report the native-agent
|
|
224
|
+
limitation above and use the inline/sequential role fallback.
|
|
200
225
|
- opencode: `.opencode/skills/orchestrator-workflow/SKILL.md` from
|
|
201
226
|
`assets/skill/SKILL.md`, unchanged.
|
|
202
227
|
For each role in the chosen profile (same set as Claude Code above),
|
|
@@ -237,7 +262,7 @@ steps in the repository you were asked to install into.
|
|
|
237
262
|
---
|
|
238
263
|
```
|
|
239
264
|
- `.ai/workflow/manifest.json`, exactly this shape (harnesses MUST be an
|
|
240
|
-
array, `profile` is `"minimal"` or `"full"`, models keyed by role,
|
|
265
|
+
array, `profile` is `"minimal"` or `"full"`, legacy models keyed by role,
|
|
241
266
|
version = the kit version you installed, read from this kit's own
|
|
242
267
|
`packages/orchestrator-workflow/package.json` `version` field):
|
|
243
268
|
|
|
@@ -270,6 +295,8 @@ steps in the repository you were asked to install into.
|
|
|
270
295
|
run then treats existing kit files conservatively and reports conflicts
|
|
271
296
|
rather than overwriting them.
|
|
272
297
|
|
|
273
|
-
5.
|
|
274
|
-
|
|
275
|
-
|
|
298
|
+
5. Verify the expected files and manifest entries, then report back: which
|
|
299
|
+
harnesses and roles were installed; the exact model and effort per routed
|
|
300
|
+
role/tier; whether variants were rendered; the prior routing to use for a
|
|
301
|
+
rollback; the commands actually run; any offline capability or entitlement
|
|
302
|
+
gap; and conflicts left in place.
|
package/README.md
CHANGED
|
@@ -52,6 +52,25 @@ Two effects fall out of this shape:
|
|
|
52
52
|
|
|
53
53
|
## Install
|
|
54
54
|
|
|
55
|
+
### Recommended: agent-led installation
|
|
56
|
+
|
|
57
|
+
Give a coding agent this line:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
Follow the install instructions at https://raw.githubusercontent.com/LanNguyenSi/agent-dx/master/packages/orchestrator-workflow/INSTALL-AGENT.md
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The agent inspects installed harnesses, reusable preferences, authorization,
|
|
64
|
+
and available model capabilities. It presents the exact CLI invocation and
|
|
65
|
+
routing diff, asks only about unresolved material decisions, applies the
|
|
66
|
+
authorized change, and verifies the supported dispatch path. Existing routing
|
|
67
|
+
is preserved unless you explicitly change it, and a newer model is never an
|
|
68
|
+
automatic upgrade. [INSTALL-AGENT.md](INSTALL-AGENT.md) makes the write surface
|
|
69
|
+
and fallback behavior auditable. The link tracks `master`; pin it to a commit
|
|
70
|
+
SHA for a stable audit.
|
|
71
|
+
|
|
72
|
+
### Manual and advanced CLI installation
|
|
73
|
+
|
|
55
74
|
```bash
|
|
56
75
|
npx orchestrator-workflow init
|
|
57
76
|
```
|
|
@@ -62,14 +81,17 @@ resolved target (`Installing into ...`) before it writes anything and warns
|
|
|
62
81
|
when the target is not a git repository root; pass `init <dir>` to install
|
|
63
82
|
into a different directory. The installer is interactive by default: it
|
|
64
83
|
locates existing harness configs (`.claude/`, `CLAUDE.md`, `.opencode/`,
|
|
65
|
-
`opencode.json`, `.agents/`, `.codex/`)
|
|
66
|
-
|
|
84
|
+
`opencode.json`, `.agents/`, `.codex/`) and preselects what it found. For a
|
|
85
|
+
guided install, use the agent-led path above: the agent inspects the repository
|
|
86
|
+
and available harness capabilities, prepares the exact CLI invocation and
|
|
87
|
+
routing diff, and asks only about choices or authority it cannot infer safely.
|
|
67
88
|
|
|
68
89
|
Non-interactive:
|
|
69
90
|
|
|
70
91
|
```bash
|
|
71
92
|
npx orchestrator-workflow init --yes
|
|
72
93
|
npx orchestrator-workflow init --harness claude,codex,opencode --models "implementer=sonnet,reviewer=opus" --yes
|
|
94
|
+
npx orchestrator-workflow init --harness codex --routing ./routing.json --codex-catalog ./codex-models.json --tiers --yes
|
|
73
95
|
npx orchestrator-workflow init --profile minimal --yes
|
|
74
96
|
```
|
|
75
97
|
|
|
@@ -98,26 +120,13 @@ harness to install it.
|
|
|
98
120
|
npx orchestrator-workflow init --harness none --yes
|
|
99
121
|
```
|
|
100
122
|
|
|
101
|
-
To let a coding agent do the install, give it this single line:
|
|
102
|
-
|
|
103
|
-
```text
|
|
104
|
-
Follow the install instructions at https://raw.githubusercontent.com/LanNguyenSi/agent-dx/master/packages/orchestrator-workflow/INSTALL-AGENT.md
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
The agent then asks you the harness and model questions in chat and runs the
|
|
108
|
-
non-interactive CLI (manual scaffolding where npx is unavailable).
|
|
109
|
-
[INSTALL-AGENT.md](INSTALL-AGENT.md) documents, step by step, what the
|
|
110
|
-
linked instructions make the agent do and which files it may touch, so the
|
|
111
|
-
prompt can be audited before delegating. The link tracks `master`; pin it
|
|
112
|
-
to a commit SHA for a stable audit.
|
|
113
|
-
|
|
114
123
|
## What gets installed
|
|
115
124
|
|
|
116
125
|
```text
|
|
117
126
|
.ai/
|
|
118
127
|
workflow/
|
|
119
128
|
templates/ 00-goal.md ... 06-handoff.md (canonical run templates)
|
|
120
|
-
manifest.json kit version,
|
|
129
|
+
manifest.json kit version, harnesses, profile, legacy models, exact routing
|
|
121
130
|
runs/ one directory per unit of work, newest = active
|
|
122
131
|
AGENTS.md marker-fenced "Agentic Coding Workflow" policy section
|
|
123
132
|
```
|
|
@@ -131,17 +140,19 @@ Per selected harness:
|
|
|
131
140
|
| Harness | Files | Notes |
|
|
132
141
|
|---|---|---|
|
|
133
142
|
| Claude Code | `.claude/skills/orchestrator-workflow/SKILL.md`, `.claude/agents/{explorer,task-slicer,implementer,reviewer,advisor}.md`, `CLAUDE.md` | Claude Code reads `CLAUDE.md`, not `AGENTS.md`; the installer adds an additive `@AGENTS.md` import. Subagent models go into the `model:` frontmatter; the read-only explorer, reviewer, and advisor also get `disallowedTools: Edit, Write, NotebookEdit`. |
|
|
134
|
-
| OpenAI Codex | `.agents/skills/orchestrator-workflow/SKILL.md` | Codex reads `AGENTS.md` natively.
|
|
143
|
+
| OpenAI Codex | `.agents/skills/orchestrator-workflow/SKILL.md`, `.codex/agents/{explorer,task-slicer,implementer,reviewer,advisor}.toml` | Codex reads `AGENTS.md` natively. Native custom-agent files carry the canonical role instructions plus `model` and `model_reasoning_effort`. Explorer and advisor request a read-only sandbox; reviewer inherits the caller's sandbox so it can run temporary/build checks, while its prompt prohibits source edits. |
|
|
135
144
|
| opencode | `.opencode/skills/orchestrator-workflow/SKILL.md`, `.opencode/agents/{explorer,task-slicer,implementer,reviewer,advisor}.md` | opencode reads `AGENTS.md` natively. Subagents get `mode: subagent`; the read-only explorer, reviewer, and advisor also get `permission: edit: deny`. Model resolution is described below. |
|
|
136
145
|
|
|
137
|
-
**Read-only posture, honestly stated.**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
**Read-only posture, honestly stated.** Claude Code disables file-mutation
|
|
147
|
+
tools for explorer, reviewer, and advisor; opencode denies edits for those
|
|
148
|
+
roles. Codex requests a read-only sandbox for explorer and advisor. Its
|
|
149
|
+
reviewer inherits the caller's sandbox so temporary/build checks remain
|
|
150
|
+
possible, while its prompt prohibits source edits. In inherited or otherwise
|
|
151
|
+
write-enabled sandboxes, shell-level mutation (`git checkout`,
|
|
142
152
|
`git restore`, `git clean`, `git stash`, `git reset`, `sed -i`, redirecting
|
|
143
153
|
output into a file) is guarded by instruction only: the agent prompts forbid
|
|
144
|
-
it explicitly, but
|
|
154
|
+
it explicitly, but the role definition itself does not prevent it. A native
|
|
155
|
+
read-only sandbox can block those writes. This residual has bitten in practice (a
|
|
145
156
|
reviewer ran `git checkout` and discarded uncommitted work), which is why the
|
|
146
157
|
prompts now name the forbidden commands instead of just saying "read-only".
|
|
147
158
|
Marker- or verdict-style enforcement of the Bash residual (sandboxing,
|
|
@@ -149,8 +160,8 @@ PreToolUse hooks) is harness territory and out of this kit's scope.
|
|
|
149
160
|
|
|
150
161
|
## Role profile
|
|
151
162
|
|
|
152
|
-
`--profile` selects which subagent roles get installed
|
|
153
|
-
opencode
|
|
163
|
+
`--profile` selects which subagent roles get installed for Claude Code, Codex,
|
|
164
|
+
and opencode:
|
|
154
165
|
|
|
155
166
|
| Profile | Roles installed | When to use it |
|
|
156
167
|
|---|---|---|
|
|
@@ -206,7 +217,33 @@ without reporting them at all.
|
|
|
206
217
|
|
|
207
218
|
## Model preselection
|
|
208
219
|
|
|
209
|
-
|
|
220
|
+
Routing is a harness-specific map from role and tier to a complete
|
|
221
|
+
`{model, effort}` selection. Pass a JSON file with `--routing`; the CLI deep
|
|
222
|
+
merges only the leaves you provide and records the resulting effective map in
|
|
223
|
+
`.ai/workflow/manifest.json`. The role's default-tier key configures its
|
|
224
|
+
unsuffixed file; another allowed key configures the corresponding
|
|
225
|
+
`<role>-<tier>` variant when `--tiers` is enabled. For example:
|
|
226
|
+
|
|
227
|
+
```json
|
|
228
|
+
{
|
|
229
|
+
"codex": {
|
|
230
|
+
"implementer": {
|
|
231
|
+
"medium": { "model": "gpt-5.6-terra", "effort": "medium" },
|
|
232
|
+
"xhigh": { "model": "gpt-6-astra", "effort": "xhigh" }
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
An omitted `--routing` preserves the exact persisted map on a re-install.
|
|
239
|
+
Changing one leaf leaves the others intact, which makes a previous manifest a
|
|
240
|
+
usable rollback record. Model updates are deliberate per role and tier: the
|
|
241
|
+
installer never interprets a newer model as automatically better and never
|
|
242
|
+
rewrites a preserved choice merely because another model exists.
|
|
243
|
+
|
|
244
|
+
`--models` remains as the backward-compatible, per-role input for Claude Code
|
|
245
|
+
and opencode. It does not configure Codex. Existing manifests that contain
|
|
246
|
+
only `models` continue to produce the same Claude Code and opencode defaults:
|
|
210
247
|
|
|
211
248
|
| Role | Default | Why |
|
|
212
249
|
|---|---|---|
|
|
@@ -216,9 +253,41 @@ Each subagent role gets a model, chosen interactively or via `--models`:
|
|
|
216
253
|
| reviewer | `opus` | skeptical review benefits from the strongest model |
|
|
217
254
|
| advisor | `opus` | escalations happen precisely when the situation is hard, so it shares the reviewer's strongest-model default |
|
|
218
255
|
|
|
219
|
-
The orchestrator itself runs on the session's main model
|
|
220
|
-
|
|
221
|
-
|
|
256
|
+
The orchestrator itself runs on the session's main model. For Codex, start the
|
|
257
|
+
orchestrator on `gpt-6-astra` at `high` effort; use `xhigh` for demanding work.
|
|
258
|
+
The installer does not mutate global or fleet Codex configuration to enforce
|
|
259
|
+
that recommendation.
|
|
260
|
+
|
|
261
|
+
**Codex defaults.** Codex uses native `.codex/agents/*.toml` custom agents.
|
|
262
|
+
The file shape follows the
|
|
263
|
+
[official Codex subagent configuration](https://learn.chatgpt.com/docs/agent-configuration/subagents).
|
|
264
|
+
The shipped routing is:
|
|
265
|
+
|
|
266
|
+
| Role | Tier | Model | Effort |
|
|
267
|
+
|---|---|---|---|
|
|
268
|
+
| explorer | low | `gpt-5.6-luna` | low |
|
|
269
|
+
| explorer | medium (default) | `gpt-5.6-sol` | medium |
|
|
270
|
+
| explorer | high | `gpt-5.6-sol` | high |
|
|
271
|
+
| task-slicer | low | `gpt-5.6-luna` | low |
|
|
272
|
+
| task-slicer | medium (default) | `gpt-5.6-sol` | medium |
|
|
273
|
+
| task-slicer | high | `gpt-5.6-sol` | high |
|
|
274
|
+
| implementer | low | `gpt-5.6-luna` | low |
|
|
275
|
+
| implementer | medium (default) | `gpt-5.6-terra` | medium |
|
|
276
|
+
| implementer | high | `gpt-5.6-terra` | high |
|
|
277
|
+
| implementer | xhigh | `gpt-6-astra` | xhigh |
|
|
278
|
+
| reviewer | medium | `gpt-5.6-terra` | medium |
|
|
279
|
+
| reviewer | high (default) | `gpt-6-astra` | high |
|
|
280
|
+
| reviewer | xhigh | `gpt-6-astra` | xhigh |
|
|
281
|
+
| advisor | high (default) | `gpt-6-astra` | high |
|
|
282
|
+
| advisor | xhigh | `gpt-6-astra` | xhigh |
|
|
283
|
+
|
|
284
|
+
When you have a deterministic Codex model catalog, pass it with
|
|
285
|
+
`--codex-catalog <json-file>`. The CLI validates the selected Codex model and
|
|
286
|
+
effort pairs before writing. Without a supplied catalog it performs no online
|
|
287
|
+
entitlement check; offline or account-specific availability remains unknown.
|
|
288
|
+
Use the harness's native capability commands, such as `codex debug models`, to
|
|
289
|
+
refresh a catalog before installation when appropriate. A bundled-capability
|
|
290
|
+
view describes what the binary knows and does not prove account entitlement.
|
|
222
291
|
|
|
223
292
|
**opencode model resolution.** opencode requires fully-qualified `provider/model-id`
|
|
224
293
|
strings (e.g. `github-copilot/claude-sonnet-4.6`). At install time the CLI
|
|
@@ -242,14 +311,14 @@ be supplied as a fully-qualified `--models` entry, e.g.
|
|
|
242
311
|
`--tiers` renders an additional per-role subagent definition for each
|
|
243
312
|
non-default effort tier, alongside the one default (unsuffixed) agent file
|
|
244
313
|
`--profile` already installs. Each tier variant is a standalone subagent
|
|
245
|
-
definition, not a modification of the default file
|
|
246
|
-
|
|
247
|
-
|
|
314
|
+
definition, not a modification of the default file. Claude Code and opencode
|
|
315
|
+
use `<role>.md` / `<role>-<tier>.md`; Codex uses `<role>.toml` /
|
|
316
|
+
`<role>-<tier>.toml`.
|
|
248
317
|
|
|
249
318
|
**Every default file carries its own pinned effort, independent of
|
|
250
|
-
`--tiers`.**
|
|
251
|
-
the
|
|
252
|
-
|
|
319
|
+
`--tiers`.** The harness composers add the role's own default routing
|
|
320
|
+
selection to the unsuffixed file. In the legacy Claude/opencode path this is
|
|
321
|
+
`TIER_DEFS[DEFAULT_TIER[role]].effort`: `effort: medium` for explorer,
|
|
253
322
|
task-slicer, and implementer; `effort: high` for reviewer and advisor
|
|
254
323
|
(opencode: a `variant: high` line when the resolved model is Claude-family,
|
|
255
324
|
following the same dispatch rule tier variants use, `reasoningEffort:
|
|
@@ -271,7 +340,8 @@ no variant files unless asked. `--tiers` turns the feature on for that run,
|
|
|
271
340
|
`--no-tiers` turns it off; a plain re-run with neither flag keeps whatever
|
|
272
341
|
the previous install had, the same override-vs-persist rule already used
|
|
273
342
|
for `--profile` and `--models`. There is no interactive prompt for it:
|
|
274
|
-
`tiers` is opt-in/off via the flags only.
|
|
343
|
+
`tiers` is opt-in/off via the flags only. Neither Codex nor the other harnesses
|
|
344
|
+
get `max` or `ultra` variants from this kit.
|
|
275
345
|
|
|
276
346
|
```bash
|
|
277
347
|
npx orchestrator-workflow init --tiers --yes
|
|
@@ -346,6 +416,19 @@ warning are opencode-scoped only; Claude Code variants resolve `model:` from
|
|
|
346
416
|
a plain alias (`haiku`/`sonnet`/`opus`) and need no live catalog lookup, so
|
|
347
417
|
they are unaffected.
|
|
348
418
|
|
|
419
|
+
Codex variants carry `model` and `model_reasoning_effort` from their exact
|
|
420
|
+
routing leaf. The canonical role prompt becomes `developer_instructions`.
|
|
421
|
+
Runtime dispatch follows the client's actual capabilities: select the named
|
|
422
|
+
installed agent when supported; otherwise, if spawning supports explicit model
|
|
423
|
+
and effort, read the installed TOML and pass its selection, developer
|
|
424
|
+
instructions, and narrow task contract into a fresh task-local spawn. A
|
|
425
|
+
full-history spawn may not permit a model override. If that explicit spawn
|
|
426
|
+
cannot accept a sandbox override, explorer and advisor inherit the caller's
|
|
427
|
+
sandbox and their prompt is the edit guard. When native spawning is
|
|
428
|
+
unavailable, run the same contract inline and sequentially. The orchestrator
|
|
429
|
+
alone spawns agents. In particular, it must not choose `implementer-low` when
|
|
430
|
+
the task requires a test, typecheck, lint, build, or named mutation probe.
|
|
431
|
+
|
|
349
432
|
**Warning: `CLAUDE_CODE_EFFORT_LEVEL` overrides every agent's frontmatter
|
|
350
433
|
`effort:`, tier variants included.** Claude Code's `effort:` frontmatter
|
|
351
434
|
field does work: it reaches the model request as `output_config.effort`.
|
|
@@ -379,12 +462,13 @@ orchestrator-workflow apply --target /path/to/repo
|
|
|
379
462
|
```
|
|
380
463
|
|
|
381
464
|
**`setup`** writes or updates this operator's default install options
|
|
382
|
-
(harnesses, profile, models, tiers) as the baseline for future installs; it
|
|
465
|
+
(harnesses, profile, legacy models, routing, tiers) as the baseline for future installs; it
|
|
383
466
|
touches no repository. A flag always wins; a flag-less re-run keeps the
|
|
384
467
|
previously stored values; a first-ever `setup` falls back to `claude` /
|
|
385
|
-
`full` / the kit's default
|
|
386
|
-
option flags as `init` (`--harness`, `--profile`, `--models`, `--
|
|
387
|
-
`--no-tiers`, `--opencode-provider`, `--yes`).
|
|
468
|
+
`full` / the kit's default routing / tiers off. `setup` takes the same
|
|
469
|
+
option flags as `init` (`--harness`, `--profile`, `--models`, `--routing`,
|
|
470
|
+
`--codex-catalog`, `--tiers` / `--no-tiers`, `--opencode-provider`, `--yes`).
|
|
471
|
+
The defaults live in
|
|
388
472
|
`<operator home>/manifest.json`, where the operator home is
|
|
389
473
|
`~/.orchestrator-workflow/` unless the `ORCHESTRATOR_WORKFLOW_HOME`
|
|
390
474
|
environment variable names a different directory.
|
|
@@ -404,15 +488,17 @@ an **interactive** re-run on such a target still prompts, with the same
|
|
|
404
488
|
nothing-pre-checked behaviour described in "Templates-only mode" above
|
|
405
489
|
(it applies identically to `apply`).
|
|
406
490
|
Pass `--sync` to invert that for
|
|
407
|
-
profile, tiers, and
|
|
491
|
+
profile, tiers, legacy models, and routing: the operator's defaults then win over whatever
|
|
408
492
|
the target already had recorded. A target pinned to a kit version other
|
|
409
493
|
than the one being applied is skipped rather than touched (see the pin
|
|
410
494
|
rule below). `apply` also takes the same install options as `init` (`--harness`,
|
|
411
|
-
`--profile`, `--models`, `--
|
|
412
|
-
`--force`, `--yes`), which feed the
|
|
495
|
+
`--profile`, `--models`, `--routing`, `--codex-catalog`, `--tiers` /
|
|
496
|
+
`--no-tiers`, `--opencode-provider`, `--force`, `--yes`), which feed the
|
|
497
|
+
precedence rule above. An explicit routing file is the highest-precedence
|
|
498
|
+
deep patch; leaves it omits retain their resolved baseline values.
|
|
413
499
|
|
|
414
500
|
**`doctor [--json] [--prune]`** reports every operator-registered target's
|
|
415
|
-
status: `clean`, `divergent` (from the operator defaults), `version-lag`,
|
|
501
|
+
status: `clean`, `divergent` (from the operator defaults, including routing), `version-lag`,
|
|
416
502
|
`drift` (installed files edited, deleted, or unreadable since install),
|
|
417
503
|
`missing`, `no-manifest`, or `unverifiable`. It exits `2` when the operator
|
|
418
504
|
manifest is missing or unreadable, or, with `--prune`, when the operator
|
|
@@ -424,6 +510,10 @@ version. `--prune` removes `missing` and `no-manifest` targets from the
|
|
|
424
510
|
registry before reporting (never an `unverifiable` one, since that status
|
|
425
511
|
means the check itself was inconclusive, not that the target is confirmed
|
|
426
512
|
gone) and rewrites the manifest file in its normalized form.
|
|
513
|
+
For a legacy opencode leaf without a recorded provider-qualified model id,
|
|
514
|
+
doctor reports `Routing comparison incomplete` and includes
|
|
515
|
+
`routingComparisonGaps` in JSON instead of declaring a false routing
|
|
516
|
+
divergence. The gap alone does not change the target status.
|
|
427
517
|
|
|
428
518
|
**`adopt [dir] [--json]`** brings a repository that already has the kit installed,
|
|
429
519
|
by hand or by an earlier `init`, under the operator's management without
|
|
@@ -155,7 +155,8 @@ Workflow state lives under `.ai/`:
|
|
|
155
155
|
The newest run directory is the active one; older ones are the auditable
|
|
156
156
|
history.
|
|
157
157
|
- `.ai/workflow/manifest.json` records the installed kit version, the chosen
|
|
158
|
-
harnesses, and the per-role
|
|
158
|
+
harnesses, legacy model preferences, and the exact per-harness role/tier
|
|
159
|
+
routing selections.
|
|
159
160
|
- Every worktree a run touches carries a `.ai/run` pointer (absolute path of
|
|
160
161
|
the run directory, gitignored) and `00-goal.md` carries one
|
|
161
162
|
`run-base[<repo-basename>]` marker per repository for multi-repo runs.
|
|
@@ -164,9 +165,20 @@ Workflow state lives under `.ai/`:
|
|
|
164
165
|
|
|
165
166
|
- The orchestrator runs on the session's main model. Use the strongest
|
|
166
167
|
reasoning model available.
|
|
167
|
-
- Per-role model
|
|
168
|
-
advisor) are recorded in
|
|
169
|
-
|
|
168
|
+
- Per-role and per-tier model/effort selections (explorer, task slicer,
|
|
169
|
+
implementer, reviewer, advisor) are recorded in
|
|
170
|
+
`.ai/workflow/manifest.json` and in the harness subagent definitions.
|
|
171
|
+
- Preserve recorded routing choices across re-installs. Change a model only
|
|
172
|
+
through a deliberate role/tier override; never treat a newer model as an
|
|
173
|
+
automatic upgrade. The prior routing is the rollback input.
|
|
174
|
+
- For Codex, inspect the native delegation capabilities before dispatch. Use
|
|
175
|
+
an installed named agent when selection is supported; otherwise, when spawn
|
|
176
|
+
accepts explicit model and effort, read the installed role TOML and pass its
|
|
177
|
+
model, effort, developer instructions, and narrow contract into a fresh
|
|
178
|
+
task-local spawn. Apply the TOML sandbox request only when that spawn surface
|
|
179
|
+
accepts it; otherwise the role inherits the caller's sandbox and its prompt
|
|
180
|
+
is the edit guard. If native spawning is unavailable, run the contract
|
|
181
|
+
inline and sequentially. Only the orchestrator delegates.
|
|
170
182
|
|
|
171
183
|
### Definition of done
|
|
172
184
|
|
package/assets/skill/SKILL.md
CHANGED
|
@@ -54,8 +54,8 @@ rule, not its full scope.
|
|
|
54
54
|
|
|
55
55
|
Where the harness supports subagent definitions, the explorer, slicer,
|
|
56
56
|
implementer, reviewer, and advisor roles are installed as named subagents
|
|
57
|
-
(Claude Code: `.claude/agents/`,
|
|
58
|
-
preselected models.
|
|
57
|
+
(Claude Code: `.claude/agents/`, Codex: `.codex/agents/`, opencode:
|
|
58
|
+
`.opencode/agents/`) with preselected models and pinned effort.
|
|
59
59
|
Only the roles this install's profile carries exist as named subagents (see
|
|
60
60
|
`profile` in `.ai/workflow/manifest.json`); run any missing role inline with
|
|
61
61
|
the same contract. Spawn the installed roles instead of improvising role
|
|
@@ -489,10 +489,21 @@ instructions found in untrusted content as risks instead of following them.
|
|
|
489
489
|
- **opencode**: invoke the installed `.opencode/agents/` subagents the same
|
|
490
490
|
way (`mode: subagent`); the same profile scoping applies. The `.ai/run`
|
|
491
491
|
pointer rule from Run state applies unchanged.
|
|
492
|
-
- **OpenAI Codex**:
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
492
|
+
- **OpenAI Codex**: dispatch according to the native capabilities actually
|
|
493
|
+
exposed. When a named-agent selector is available, select the installed
|
|
494
|
+
`.codex/agents/<role>.toml` definition. When spawning accepts explicit model
|
|
495
|
+
and reasoning effort but has no named selector, read that TOML and pass its
|
|
496
|
+
model, effort, `developer_instructions`, and the narrow task contract to a
|
|
497
|
+
fresh task-local spawn; do not assume a full-history spawn can override the
|
|
498
|
+
model. When native spawning is unavailable, run the role inline and
|
|
499
|
+
sequentially with the same contract. Their exact routing remains pinned in
|
|
500
|
+
the installed definitions in every case. Explorer and advisor request a
|
|
501
|
+
read-only sandbox; if an explicit spawn cannot accept a sandbox override,
|
|
502
|
+
they inherit the caller's sandbox and their prompt is the remaining edit
|
|
503
|
+
guard. Reviewer inherits the caller's sandbox so temporary/build checks
|
|
504
|
+
remain possible, but its prompt still prohibits source edits. Only
|
|
505
|
+
the orchestrator spawns agents, and every route produces the same run files.
|
|
506
|
+
The `.ai/run` pointer rule from Run state applies unchanged.
|
|
496
507
|
|
|
497
508
|
## Subagent misfire rule
|
|
498
509
|
|