session-orchestrator 4.0.0 → 4.1.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +3 -2
- package/.codex-plugin/skills/architecture/SKILL.md +20 -0
- package/.codex-plugin/skills/autopilot/SKILL.md +21 -0
- package/.codex-plugin/skills/autopilot/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/bootstrap/SKILL.md +22 -0
- package/.codex-plugin/skills/bootstrap/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/brainstorm/SKILL.md +22 -0
- package/.codex-plugin/skills/brainstorm/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/claude-md-drift-check/SKILL.md +17 -0
- package/.codex-plugin/skills/close/SKILL.md +21 -0
- package/.codex-plugin/skills/close/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/convergence-monitoring/SKILL.md +24 -0
- package/.codex-plugin/skills/debug/SKILL.md +21 -0
- package/.codex-plugin/skills/debug/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/discovery/SKILL.md +21 -0
- package/.codex-plugin/skills/discovery/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/dispatcher/SKILL.md +21 -0
- package/.codex-plugin/skills/dispatcher/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/docs-orchestrator/SKILL.md +20 -0
- package/.codex-plugin/skills/ecosystem-health/SKILL.md +22 -0
- package/.codex-plugin/skills/eli5/SKILL.md +21 -0
- package/.codex-plugin/skills/eli5/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/eval/SKILL.md +21 -0
- package/.codex-plugin/skills/eval/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/evolve/SKILL.md +21 -0
- package/.codex-plugin/skills/evolve/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/frontmatter-guard/SKILL.md +17 -0
- package/.codex-plugin/skills/gitlab-ops/SKILL.md +22 -0
- package/.codex-plugin/skills/gitlab-portfolio/SKILL.md +17 -0
- package/.codex-plugin/skills/go/SKILL.md +22 -0
- package/.codex-plugin/skills/go/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/grill/SKILL.md +21 -0
- package/.codex-plugin/skills/grill/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/harness-audit/SKILL.md +19 -0
- package/.codex-plugin/skills/harness-audit/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/hook-development/SKILL.md +17 -0
- package/.codex-plugin/skills/mcp-builder/SKILL.md +17 -0
- package/.codex-plugin/skills/memory-cleanup/SKILL.md +21 -0
- package/.codex-plugin/skills/memory-cleanup/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/mode-selector/SKILL.md +19 -0
- package/.codex-plugin/skills/npm-publish/SKILL.md +18 -0
- package/.codex-plugin/skills/peekaboo-driver/SKILL.md +20 -0
- package/.codex-plugin/skills/persona-panel/SKILL.md +22 -0
- package/.codex-plugin/skills/persona-panel/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/plan/SKILL.md +22 -0
- package/.codex-plugin/skills/plan/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/playwright-driver/SKILL.md +22 -0
- package/.codex-plugin/skills/portfolio/SKILL.md +21 -0
- package/.codex-plugin/skills/portfolio/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/quality-gates/SKILL.md +22 -0
- package/.codex-plugin/skills/reconcile/SKILL.md +21 -0
- package/.codex-plugin/skills/reconcile/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/release/SKILL.md +22 -0
- package/.codex-plugin/skills/release/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/remote-offload/SKILL.md +22 -0
- package/.codex-plugin/skills/repo-audit/SKILL.md +19 -0
- package/.codex-plugin/skills/repo-audit/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/session/SKILL.md +21 -0
- package/.codex-plugin/skills/session/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/session-end/SKILL.md +22 -0
- package/.codex-plugin/skills/session-plan/SKILL.md +22 -0
- package/.codex-plugin/skills/session-start/SKILL.md +22 -0
- package/.codex-plugin/skills/spinout/SKILL.md +21 -0
- package/.codex-plugin/skills/spinout/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/sunset-review/SKILL.md +21 -0
- package/.codex-plugin/skills/sunset-review/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/templates-ack/SKILL.md +21 -0
- package/.codex-plugin/skills/templates-ack/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/test/SKILL.md +21 -0
- package/.codex-plugin/skills/test/agents/openai.yaml +5 -0
- package/.codex-plugin/skills/test-runner/SKILL.md +22 -0
- package/.codex-plugin/skills/tmux-layout/SKILL.md +23 -0
- package/.codex-plugin/skills/using-orchestrator/SKILL.md +19 -0
- package/.codex-plugin/skills/vault-mirror/SKILL.md +17 -0
- package/.codex-plugin/skills/vault-sync/SKILL.md +17 -0
- package/.codex-plugin/skills/wave-executor/SKILL.md +22 -0
- package/.codex-plugin/skills/write-executable-plan/SKILL.md +24 -0
- package/{plugin.json → .cursor-plugin/plugin.json} +5 -2
- package/CHANGELOG.md +213 -1
- package/README.md +70 -58
- package/commands/release.md +4 -4
- package/docs/codex-setup.md +43 -9
- package/docs/components.md +3 -2
- package/docs/instruction-delivery.md +12 -5
- package/docs/migration-v4.md +33 -9
- package/hooks/_lib/hook-import-set.json +4 -3
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks.json +1 -1
- package/hooks/on-stop.mjs +25 -4
- package/package.json +2 -2
- package/scripts/ci/assert-coverage-green.mjs +100 -0
- package/scripts/generate-codex-skills.mjs +246 -0
- package/scripts/generate-hook-import-set.mjs +51 -8
- package/scripts/lib/codex/plugin-contract.mjs +6 -0
- package/scripts/lib/config/host-paths.mjs +20 -4
- package/scripts/lib/events.mjs +3 -3
- package/scripts/lib/gates/gate-full.mjs +7 -3
- package/scripts/lib/owner-config-banner.mjs +7 -9
- package/scripts/lib/owner-yaml.mjs +8 -1
- package/scripts/lib/plugin-update-banner.mjs +10 -2
- package/scripts/lib/project-hygiene.mjs +182 -6
- package/scripts/lib/reconcile/engine.mjs +38 -7
- package/scripts/lib/session-identity/own-session.mjs +24 -13
- package/scripts/lib/session-schema/constants.mjs +38 -11
- package/scripts/lib/session-start-probes.mjs +12 -0
- package/scripts/lib/telemetry/schema.mjs +39 -18
- package/scripts/lib/telemetry-flush-health-banner.mjs +211 -0
- package/scripts/lib/validate/check-codex-skills.mjs +191 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +107 -62
- package/scripts/lib/validate/check-skill-links.mjs +37 -7
- package/scripts/lib/validate/check-test-git-config-target.mjs +192 -12
- package/scripts/lib/validate/check-unwired-features.mjs +163 -13
- package/scripts/lib/validate/confidential-names.mjs +95 -30
- package/scripts/lib/validate/repo-files.mjs +48 -14
- package/scripts/lib/vault-mirror/render-sessions.mjs +8 -1
- package/scripts/release.mjs +141 -29
- package/scripts/site-numbers.mjs +344 -8
- package/scripts/validate-plugin.mjs +3 -0
- package/skills/session-start/SKILL.md +2 -2
- package/skills/session-start/references/phase-4-ssot-environment-check.md +5 -0
- package/skills/vault-sync/SKILL.md +10 -0
package/README.md
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# Session Orchestrator
|
|
2
2
|
|
|
3
3
|
[](LICENSE)
|
|
4
|
-
[](CHANGELOG.md)
|
|
5
5
|
[](https://www.npmjs.com/package/session-orchestrator)
|
|
6
6
|
[](docs/telemetry/telemetry-claims.md)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Plan, run and verify coding sessions with **Claude Code, Codex CLI, Cursor IDE, or [Pi](docs/pi-setup.md)**. Session Orchestrator reads your repository and issues, proposes a plan, coordinates work in waves, and records what passed and what remains. Free, MIT-licensed, and community-maintained.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
[Website](https://session-orchestrator.com) · [User guide](docs/USER-GUIDE.md) · [Platform support](#platform-support) · [Changelog](CHANGELOG.md)
|
|
11
|
+
|
|
12
|
+
The same workflows are available on all four harnesses; Codex exposes commands as selectable skills. **Enforcement depth differs** — scope enforcement is full on Claude Code, bridged on Cursor and Pi, and currently unavailable on Codex CLI (see [Platform support](#platform-support)).
|
|
11
13
|
|
|
12
14
|
## Requirements
|
|
13
15
|
|
|
@@ -16,7 +18,7 @@ The same skills and commands are available on all four harnesses; **enforcement
|
|
|
16
18
|
| **Node.js** | **24 or later** (`node --version`) — `package.json` `engines.node` is `>=24.0.0`. The plugin is ES modules and needs a real Node runtime. [Install Node.js](https://nodejs.org/). |
|
|
17
19
|
| **A coding agent** | Claude Code, Codex CLI, Cursor IDE, or Pi. This is a workflow layer *on top of* one of them, not a replacement. |
|
|
18
20
|
| **Harness version** | Codex CLI **0.144.4 or later** ([docs/codex-setup.md](docs/codex-setup.md)). No minimum is pinned for Claude Code, Cursor, or Pi — if `/plugin` (or the Cursor/Pi installer) runs, the plugin loads. |
|
|
19
|
-
| **OS** | macOS and Linux are
|
|
21
|
+
| **OS** | macOS and Linux are tested in CI. Windows is untested and best-effort; shell hooks and the optional Bash/`jq` MCP server need WSL or Git Bash. |
|
|
20
22
|
| **Git** | A git repository. Session-orchestrator reads git state at every session start and commits at close. |
|
|
21
23
|
|
|
22
24
|
## Install
|
|
@@ -28,45 +30,26 @@ The same skills and commands are available on all four harnesses; **enforcement
|
|
|
28
30
|
| **Cursor IDE** | `git clone https://github.com/Kanevry/session-orchestrator.git ~/Projects/session-orchestrator && cd ~/Projects/session-orchestrator && npm install && node scripts/cursor-install.mjs /path/to/your/project` |
|
|
29
31
|
| **Pi** | `pi install npm:session-orchestrator` — or dev-fallback: `git clone https://github.com/Kanevry/session-orchestrator.git ~/Projects/session-orchestrator && cd ~/Projects/session-orchestrator && npm install && node scripts/pi-install.mjs /path/to/your/project --settings-only` |
|
|
30
32
|
|
|
31
|
-
For Claude Code, also install Node dependencies **once**
|
|
33
|
+
For Claude Code, also install the package's Node dependencies **once** and restart Claude Code. First locate the installed plugin:
|
|
32
34
|
|
|
33
35
|
```bash
|
|
34
|
-
|
|
35
|
-
SO_DIR="$(dirname "$(find ~/.claude/plugins/cache -path '*session-orchestrator*' -name package.json 2>/dev/null | head -1)")"
|
|
36
|
-
cd "$SO_DIR" && npm install
|
|
36
|
+
claude plugin list --json
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Setup guides: [Codex](docs/codex-setup.md) · [Cursor IDE](docs/cursor-setup.md) · [Pi](docs/pi-setup.md). Per-IDE notes on `CLAUDE.md` vs `AGENTS.md`: [instruction-file-resolution](skills/_shared/instruction-file-resolution.md).
|
|
39
|
+
Find the enabled `session-orchestrator@kanevry` entry, then replace the placeholder below with its `installPath` value:
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```text
|
|
46
|
-
/plugin update session-orchestrator@kanevry # Claude Code
|
|
41
|
+
```bash
|
|
42
|
+
cd "/absolute/installPath/from/the/list" && npm install
|
|
47
43
|
```
|
|
48
44
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
Session-start tells you when the running copy is behind: `scripts/lib/plugin-update-banner.mjs` compares the version of the code **that is actually loaded** against the published npm version and warns in the session-start banner (minor or major; patch-only updates stay silent). It fails silent — offline, a non-2xx response, or a malformed answer produces *no statement*, never a false "up to date".
|
|
52
|
-
|
|
53
|
-
Upgrading across a major version: **[docs/migration-v4.md](docs/migration-v4.md)** is the current one — v4.0.0 removes five skills, three commands and eight top-level scripts, each on a measured 90-day two-signal rule rather than a judgement call, and it names what replaces every removed invocation. [docs/migration-v3.md](docs/migration-v3.md) documents the older v2 → v3 path and the shape both guides follow (what changes · prerequisites · per-platform steps · what stays · known issues · rollback).
|
|
45
|
+
If that entry is missing or disabled, resolve it through `/plugin` first. Use the path reported for that entry; another cached version or a nested dependency is not the installed plugin.
|
|
54
46
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
Remove the plugin through your harness's own plugin manager — `/plugin` in Claude Code (marketplace entry `session-orchestrator@kanevry`), `codex plugin remove` on Codex CLI ([docs/codex-setup.md](docs/codex-setup.md)). On Cursor and Pi, delete the files the installer wrote into your project.
|
|
58
|
-
|
|
59
|
-
**What stays behind in your repo** — none of it is removed by uninstalling, and all of it is plain text you can delete by hand:
|
|
60
|
-
|
|
61
|
-
- `.orchestrator/` — `bootstrap.lock`, `metrics/` (your session and learning JSONL records), `policy/`, `steering/`, `runtime/`, `peers/`, `session.lock`
|
|
62
|
-
- `STATE.md` under your harness's state directory (`.claude/STATE.md` on Claude Code — see [Platform support](#platform-support))
|
|
63
|
-
- The `## Session Config` block you added to `CLAUDE.md` / `AGENTS.md`
|
|
64
|
-
- `.claude/rules/*.md` if you vendored the rule library via `/bootstrap --sync-rules`
|
|
65
|
-
|
|
66
|
-
Deleting `.orchestrator/metrics/` deletes your session history. Nothing is sent anywhere without your explicit consent (see [Data & telemetry](#safety--data--telemetry)) — the one exception is the session-start update check (`scripts/lib/plugin-update-banner.mjs`): a single anonymous `GET` to the npm registry, at most once per day per repo, comparing your installed version against the latest release. Set `SO_DISABLE_UPDATE_CHECK=1` (or `DO_NOT_TRACK=1`) to turn it off. Beyond that, there is nothing else to revoke.
|
|
47
|
+
Setup guides: [Codex](docs/codex-setup.md) · [Cursor IDE](docs/cursor-setup.md) · [Pi](docs/pi-setup.md). Per-IDE notes on `CLAUDE.md` vs `AGENTS.md`: [instruction-file-resolution](skills/_shared/instruction-file-resolution.md).
|
|
67
48
|
|
|
68
49
|
## Quick Start
|
|
69
50
|
|
|
51
|
+
In Codex, select the corresponding **Session Orchestrator** skill in the picker or use `$session-orchestrator:<command>`; the slash commands below name the shared workflows. For example, bootstrap with `$session-orchestrator:bootstrap`. See [Codex usage](docs/codex-setup.md#usage).
|
|
52
|
+
|
|
70
53
|
**1. Bootstrap the repo once.** Run `/bootstrap` in your project — it scaffolds the minimum structure and writes `.orchestrator/bootstrap.lock`, which session-start requires before `/session` will run.
|
|
71
54
|
|
|
72
55
|
**2. Declare a Session Config.** Add a `## Session Config` section to your project's `CLAUDE.md` (Claude Code, Cursor IDE) or `AGENTS.md` (Codex CLI, Pi) — see [instruction-file-resolution](skills/_shared/instruction-file-resolution.md) for which file each platform reads. The smallest valid config is seven fields:
|
|
@@ -105,7 +88,40 @@ Everything else is opt-in. Full template: [`docs/session-config-template.md`](do
|
|
|
105
88
|
/close # verify every item, commit cleanly, file carryover issues for the rest
|
|
106
89
|
```
|
|
107
90
|
|
|
108
|
-
|
|
91
|
+
In Codex, invoke the same loop through the generated command skills:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
$session-orchestrator:session feature
|
|
95
|
+
$session-orchestrator:go
|
|
96
|
+
$session-orchestrator:close
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
These entries preserve each command's full workflow and prechecks. Codex's native `/goal` is a separate feature. `/plan` and `/evolve` extend the loop, but you can start with just these three.
|
|
100
|
+
|
|
101
|
+
## Upgrade
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
/plugin update session-orchestrator@kanevry # Claude Code
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Restart the harness afterwards, and re-run `npm install` in the plugin directory when the release adds dependencies. On Cursor and the Pi clone fallback, upgrade with `git pull` in your clone followed by the same install script you originally ran. Manage npm-installed Pi packages through Pi's package manager. For Codex, follow the [refresh instructions](docs/codex-setup.md#refresh-and-explicit-cache-invalidation) for your marketplace source, then reload the skill picker or restart Codex.
|
|
108
|
+
|
|
109
|
+
Session-start tells you when the running copy is behind: `scripts/lib/plugin-update-banner.mjs` compares the version of the code **that is actually loaded** against the published npm version and warns in the session-start banner (minor or major; patch-only updates stay silent). It fails silent — offline, a non-2xx response, or a malformed answer produces *no statement*, never a false "up to date".
|
|
110
|
+
|
|
111
|
+
Upgrading across a major version: **[docs/migration-v4.md](docs/migration-v4.md)** is the current one — v4.0.0 removes five skills, three commands and eight top-level scripts, each on a measured 90-day two-signal rule rather than a judgement call, and it names what replaces every removed invocation. [docs/migration-v3.md](docs/migration-v3.md) documents the older v2 → v3 path and the shape both guides follow (what changes · prerequisites · per-platform steps · what stays · known issues · rollback).
|
|
112
|
+
|
|
113
|
+
## Uninstall
|
|
114
|
+
|
|
115
|
+
Remove the plugin through your harness's own plugin manager — `/plugin` in Claude Code (marketplace entry `session-orchestrator@kanevry`), `codex plugin remove` on Codex CLI ([docs/codex-setup.md](docs/codex-setup.md)), or Pi's package manager for an npm-installed Pi package. On Cursor and the Pi clone fallback, delete the files the installer wrote into your project.
|
|
116
|
+
|
|
117
|
+
**What stays behind in your repo** — none of it is removed by uninstalling, and all of it is plain text you can delete by hand:
|
|
118
|
+
|
|
119
|
+
- `.orchestrator/` — `bootstrap.lock`, `metrics/` (your session and learning JSONL records), `policy/`, `steering/`, `runtime/`, `peers/`, `session.lock`
|
|
120
|
+
- `STATE.md` under your harness's state directory (`.claude/STATE.md` on Claude Code — see [Platform support](#platform-support))
|
|
121
|
+
- The `## Session Config` block you added to `CLAUDE.md` / `AGENTS.md`
|
|
122
|
+
- `.claude/rules/*.md` if you vendored the rule library via `/bootstrap --sync-rules`
|
|
123
|
+
|
|
124
|
+
Deleting `.orchestrator/metrics/` deletes your session history. Telemetry requires explicit consent (see [Data & telemetry](#safety--data--telemetry)). The session-start update check (`scripts/lib/plugin-update-banner.mjs`) makes an anonymous `GET` to the npm registry to compare your installed version against the latest release. Successful results are cached for 24 hours per repo; failed checks can retry at the next session start. Set `SO_DISABLE_UPDATE_CHECK=1` (or `DO_NOT_TRACK=1`) to turn it off.
|
|
109
125
|
|
|
110
126
|
## Lifecycle and waves
|
|
111
127
|
|
|
@@ -161,16 +177,16 @@ The system is markdown-driven config plus a thin Node runtime — skills, comman
|
|
|
161
177
|
|
|
162
178
|
## What you get
|
|
163
179
|
|
|
164
|
-
Counts measured on 2026-09-
|
|
180
|
+
Counts measured on 2026-09-07 with the command in brackets:
|
|
165
181
|
|
|
166
182
|
- **43 skills** for the session lifecycle (start, plan, execute, close, evolve), discovery, vault sync, MCP authoring, debugging, brainstorming, plan grilling, persona panels, cross-repo dispatch, learning→rule reconciliation, session-process eval, and audits (`ls -d skills/*/ | grep -v _shared | wc -l`)
|
|
167
183
|
- **25 slash commands** (`/session`, `/go`, `/close`, `/discovery`, `/plan`, `/grill`, `/evolve`, `/autopilot`, `/dispatcher`, `/reconcile`, `/eval`, `/test`, `/debug`, …) (`ls commands/*.md | wc -l`)
|
|
168
184
|
- **14 typed subagents** (code-implementer, test-writer, security-reviewer, session-reviewer, qa-strategist, architect-reviewer, …) (`ls agents/*.md | wc -l`)
|
|
169
185
|
- **27 hook files across 10 event types**, enforcing scope, blocking destructive commands, gating templates-first, and capturing telemetry — full on Claude Code; experimental, post-hoc, or bridged elsewhere ([Platform support](#platform-support)) (`ls hooks/*.mjs | wc -l`)
|
|
170
|
-
- **26
|
|
171
|
-
- **
|
|
186
|
+
- **26 rule files** and **18 ADRs** carrying the reasoning behind the mechanisms (`ls .claude/rules/*.md | wc -l`, `ls docs/adr/*.md | wc -l`)
|
|
187
|
+
- **667 vitest test files** covered by the full quality gate and CI — 13,827 static `it()`/`test()` definitions at that measurement, and the runtime total is higher because of parameterised blocks ([methodology](docs/telemetry/telemetry-claims.md)) (`find tests -name '*.test.mjs' | wc -l`)
|
|
172
188
|
|
|
173
|
-
**Portable across harnesses by construction.**
|
|
189
|
+
**Portable across harnesses by construction.** `scripts/generate-agents-skills.mjs` generates root `AGENTS.md` byte-identical from `CLAUDE.md` and the `.agents/skills/<name>/SKILL.md` mirrors, with spec-legal frontmatter and pointers to canonical instructions. `scripts/generate-codex-skills.mjs` generates the Codex command entrypoints. Plugin validation checks both surfaces. Separate manifests under `.claude-plugin/`, `.codex-plugin/` and `.cursor-plugin/` register each harness's components; see [Codex manifest compatibility](docs/codex-setup.md#manifest-compatibility).
|
|
174
190
|
|
|
175
191
|
Full component inventory: [`docs/components.md`](docs/components.md). Version history and per-release detail: [CHANGELOG.md](CHANGELOG.md).
|
|
176
192
|
|
|
@@ -179,32 +195,28 @@ Full component inventory: [`docs/components.md`](docs/components.md). Version hi
|
|
|
179
195
|
- **Typed waves, not one big batch.** Discovery first, so implementers start with shared context. Impl-Core before Impl-Polish, so architecture lands before integrations. Quality runs a *simplification pass* on AI-generated code **before** tests are written — otherwise tests pin the AI patterns into place.
|
|
180
196
|
- **Inter-wave reviews, not just end-of-session.** Catching regressions between waves stops a bad pattern from propagating into later work; the confidence floor filters speculative criticism so only high-signal findings reach you.
|
|
181
197
|
- **State persists across crashes.** `STATE.md` records wave progress and deviations; the next `/session` offers to resume from the last completed wave.
|
|
182
|
-
- **
|
|
183
|
-
- **Parallel *operator* sessions are treated as a hazard.** Two humans — or two of your own sessions — in the same working copy share one git index, one filesystem, one `STATE.md`. A heartbeat session lock, peer-scope manifests, and the PSA rule set in [`.claude/rules/parallel-sessions.md`](.claude/rules/parallel-sessions.md) exist for exactly that axis.
|
|
198
|
+
- **Hook enforcement has a defined platform boundary.** Claude Code hooks block covered destructive commands; writes outside declared paths warn in `warn` mode and block in `strict` mode. Cursor and Pi bridge supported events. Codex currently has no scope-enforcement adapter ([Platform support](#platform-support)).
|
|
199
|
+
- **Parallel *operator* sessions are treated as a hazard.** Two humans — or two of your own sessions — in the same working copy share one git index, one filesystem, one `STATE.md`. A heartbeat session lock, peer-scope manifests, and the PSA rule set in [`.claude/rules/parallel-sessions.md`](https://github.com/Kanevry/session-orchestrator/blob/main/.claude/rules/parallel-sessions.md) exist for exactly that axis.
|
|
184
200
|
- **Cross-session learning is opt-in and inspectable.** Every session writes a record; after 5+ sessions `/evolve analyze` extracts confidence-scored patterns you can read and prune. Nothing is hidden.
|
|
185
201
|
- **VCS dual support, no lock-in.** Auto-detects GitLab or GitHub from your remote and drives the full lifecycle for both.
|
|
186
202
|
|
|
187
203
|
How this compares to other orchestrators — with the parts that are measured and the parts that are not: [`docs/components.md` § Comparisons](docs/components.md#comparisons).
|
|
188
204
|
|
|
189
|
-
## Recent highlights (v4.
|
|
205
|
+
## Recent highlights (v4.1.0)
|
|
190
206
|
|
|
191
|
-
|
|
207
|
+
Highlights of the v4.1.0 line:
|
|
192
208
|
|
|
193
|
-
- **
|
|
194
|
-
-
|
|
195
|
-
- **
|
|
196
|
-
- **`ultradeep` is a profile over `deep`, not a fourth session type.** Seven waves with a blocking synthesis gate and a read-only review panel. Downstream tooling still sees `deep`, which is why it costs about eight touchpoints instead of forty-eight.
|
|
197
|
-
- **A session-start banner now says when the plugin you are RUNNING is behind the one published** (minor or major; patch-only updates stay silent). This host had been running a copy five minors old for four weeks with no warning, because nothing anywhere compared installed against available.
|
|
198
|
-
- **Two instruments were corrected rather than tuned.** Telemetry attributed the operator's own second machine to the external fleet, and the abandoned-session rate was an artefact of backfilled records. Both now report what they measure.
|
|
199
|
-
- **A root `AGENTS.md`, a root `plugin.json` and a portable `.agents/skills/` mirror.** The repo now speaks the cross-harness instruction conventions it documents, generated and validated rather than hand-maintained.
|
|
209
|
+
- **Privacy and session ownership.** The privacy scanner covers MDX and can include untracked files with `--include-untracked`. Native Codex task IDs now confirm session ownership; ambiguous inherited IDs remain unconfirmed.
|
|
210
|
+
- **CI and release recovery.** Coverage verification now requires valid reports and measured thresholds. Audit detection checks executable workflow commands; GitHub release recovery retains the exact repository, tag and retry notes.
|
|
211
|
+
- **Clearer onboarding.** README, English/German pages and the guide agree on installation and platform capabilities. Guide Copy buttons stay beside their command blocks, including on narrow screens.
|
|
200
212
|
|
|
201
|
-
|
|
213
|
+
If upgrading from before 4.0, read [the v4 migration guide](docs/migration-v4.md). Full changes and verification: [CHANGELOG.md](CHANGELOG.md).
|
|
202
214
|
|
|
203
215
|
## Platform support
|
|
204
216
|
|
|
205
217
|
| Feature | Claude Code | Codex CLI | Cursor IDE | Pi |
|
|
206
218
|
|---|---|---|---|---|
|
|
207
|
-
| All 25 commands | Native slash commands |
|
|
219
|
+
| All 25 commands | Native slash commands | Generated skills (`$session-orchestrator:<name>`) | Native `.cursor/commands` slash commands | Prompt templates |
|
|
208
220
|
| Parallel agents | Agent tool | Multi-agent roles | Sequential only | Sequential (parallel planned) |
|
|
209
221
|
| Session persistence | `.claude/STATE.md` | `.codex/STATE.md` | `.cursor/STATE.md` | `.pi/STATE.md` |
|
|
210
222
|
| Scope enforcement | PreToolUse hooks | Unavailable — pending a real `apply_patch` adapter | `preToolUse` + `beforeShellExecution` via cursor-hook-bridge; `afterFileEdit` post-hoc | `tool_call` bridge |
|
|
@@ -217,13 +229,13 @@ All platforms share the same skills, commands, and scripts; hooks use platform-s
|
|
|
217
229
|
|
|
218
230
|
**Your data stays in your repo.** Session Orchestrator runs locally, requires no account, and writes its records as append-only JSONL under `.orchestrator/metrics/` in *your* repository — sessions, learnings, events, subagent records. Those files are yours: readable, greppable, deletable. Optional anonymous usage telemetry is **off until you explicitly consent** and is separate from the local records ([docs/telemetry.md](docs/telemetry.md) says exactly what it would collect and how to turn it off). Reported metrics describe *this* repository under its own conditions and will not transfer unchanged to yours ([details](docs/telemetry/telemetry-claims.md)).
|
|
219
231
|
|
|
220
|
-
**Destructive-command guard.** `hooks/pre-bash-destructive-guard.mjs` enforces `.orchestrator/policy/blocked-commands.json` — 14 rules, of which 10 block outright (`git reset --hard`, `rm -rf`, `git push --force`, and more) and 4 warn — in the main session *and* in subagent waves. Bypass per session only for intentional maintenance:
|
|
232
|
+
**Destructive-command guard.** On Claude Code, `hooks/pre-bash-destructive-guard.mjs` enforces `.orchestrator/policy/blocked-commands.json` — 14 rules, of which 10 block outright (`git reset --hard`, `rm -rf`, `git push --force`, and more) and 4 warn — in the main session *and* in subagent waves. Other harnesses depend on their event adapters; see [Platform support](#platform-support). Bypass per session only for intentional maintenance:
|
|
221
233
|
|
|
222
234
|
```yaml
|
|
223
235
|
allow-destructive-ops: true
|
|
224
236
|
```
|
|
225
237
|
|
|
226
|
-
The rule source of truth is [`.claude/rules/parallel-sessions.md`](.claude/rules/parallel-sessions.md) (PSA-003), vendored to consumer repos via `/bootstrap`.
|
|
238
|
+
The rule source of truth is [`.claude/rules/parallel-sessions.md`](https://github.com/Kanevry/session-orchestrator/blob/main/.claude/rules/parallel-sessions.md) (PSA-003), vendored to consumer repos via `/bootstrap`.
|
|
227
239
|
|
|
228
240
|
**Import probe.** `hooks/post-edit-import-probe.mjs` (PostToolUse on `Edit`/`Write`/`MultiEdit`) guards the other direction: a hook-reachable helper saved in a broken intermediate state makes *every* Bash/Edit/Write call fail with "Internal hook error — request blocked", host-wide, for every session sharing the working copy. Right after such a file is saved the probe runs ESLint `no-undef` on it (plus a child-process `import()` for `scripts/lib/**`) and reports the blast radius; it never blocks and always exits 0. It only fires for files listed in the committed allowlist [`hooks/_lib/hook-import-set.json`](hooks/_lib/hook-import-set.json), regenerated by `node scripts/generate-hook-import-set.mjs`. Kill switch: `SO_DISABLED_HOOKS=post-edit-import-probe`.
|
|
229
241
|
|
|
@@ -247,9 +259,9 @@ npm run typecheck # node --check on every .mjs file
|
|
|
247
259
|
|
|
248
260
|
`.npmrc` ships with `ignore-scripts=true` (supply-chain defence), so Husky git hooks don't auto-wire on install — run `npx husky` once after cloning. `git commit` then runs gitleaks → owner-privacy scan → lint-staged → commitlint. CI re-runs everything, plus more.
|
|
249
261
|
|
|
250
|
-
Two directories share the name *rules* and play opposite roles: [`rules/`](rules/README.md) is the **deliverable rule library** shipped *out* to consumer repos via `/bootstrap --sync-rules`, while [`.claude/rules/`](.claude/rules/) is this repo's own always-on
|
|
262
|
+
Two directories share the name *rules* and play opposite roles: [`rules/`](rules/README.md) is the **deliverable rule library** shipped *out* to consumer repos via `/bootstrap --sync-rules`, while [`.claude/rules/`](https://github.com/Kanevry/session-orchestrator/tree/main/.claude/rules/) is this repo's own rule set with always-on and path-scoped entries.
|
|
251
263
|
|
|
252
|
-
Contributor docs: [Plugin Architecture (v3)](docs/plugin-architecture-v3.md) · [CONTRIBUTING.md](CONTRIBUTING.md) · [sub-agent authoring spec](docs/agent-authoring.md).
|
|
264
|
+
Contributor docs: [Plugin Architecture (v3)](docs/plugin-architecture-v3.md) · [CONTRIBUTING.md](https://github.com/Kanevry/session-orchestrator/blob/main/CONTRIBUTING.md) · [sub-agent authoring spec](docs/agent-authoring.md).
|
|
253
265
|
|
|
254
266
|
## Support & scope
|
|
255
267
|
|
|
@@ -270,12 +282,12 @@ What it is **not**:
|
|
|
270
282
|
- [User Guide](docs/USER-GUIDE.md) — installation, config reference, workflow walkthrough, FAQ
|
|
271
283
|
- [Components & Reference](docs/components.md) — full skill/command/agent/hook inventory, repository anatomy, comparisons
|
|
272
284
|
- [Plugin Architecture (v3)](docs/plugin-architecture-v3.md) — contributor guide, layering, hook anatomy, testing
|
|
273
|
-
- [Migration
|
|
285
|
+
- [Migration to v4](docs/migration-v4.md) — upgrade path, removed surfaces and replacements
|
|
274
286
|
- [Telemetry](docs/telemetry.md) · [Telemetry claims](docs/telemetry/telemetry-claims.md) — what is collected, how metrics are measured, why they may not transfer
|
|
275
|
-
- [Example Configs](docs/examples/) — Session Config examples for Next.js, Express, Swift
|
|
287
|
+
- [Example Configs](https://github.com/Kanevry/session-orchestrator/tree/main/docs/examples/) — Session Config examples for Next.js, Express, Swift
|
|
276
288
|
- [CHANGELOG.md](CHANGELOG.md) — version history
|
|
277
289
|
|
|
278
|
-
We follow [Conventional Commits](https://www.conventionalcommits.org/) — see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
290
|
+
We follow [Conventional Commits](https://www.conventionalcommits.org/) — see [CONTRIBUTING.md](https://github.com/Kanevry/session-orchestrator/blob/main/CONTRIBUTING.md).
|
|
279
291
|
|
|
280
292
|
## Learn the method behind it
|
|
281
293
|
|
|
@@ -283,7 +295,7 @@ This plugin is a methodology turned into code. The reasoning behind it — why e
|
|
|
283
295
|
|
|
284
296
|
## Links
|
|
285
297
|
|
|
286
|
-
[Homepage](https://session-orchestrator.com) · [Privacy Policy](https://gotzendorfer.at/en/session-orchestrator/privacy) · [npm](https://www.npmjs.com/package/session-orchestrator)
|
|
298
|
+
[Homepage](https://session-orchestrator.com) (also at [/de](https://session-orchestrator.com/de) in German, with a plain-words layer above the developer detail) · [Privacy Policy](https://gotzendorfer.at/en/session-orchestrator/privacy) · [npm](https://www.npmjs.com/package/session-orchestrator)
|
|
287
299
|
|
|
288
300
|
## License
|
|
289
301
|
|
package/commands/release.md
CHANGED
|
@@ -29,14 +29,14 @@ The same reading shows the other half: the GitHub releases for 3.15/3.18/3.19/3.
|
|
|
29
29
|
1. **Preconditions.** Working tree clean, on `main`, and `origin/main` **and** `github/main` both level with `HEAD`. The mirror is checked because the site deploy hangs off `github`, not `origin`.
|
|
30
30
|
2. **Set the version.** `node scripts/release.mjs --set-version X.Y.Z` — rewrites every version surface, syncs `package-lock.json`, re-stamps the measured census on the site.
|
|
31
31
|
3. **Write the editorial half.** The dated `## [X.Y.Z] - YYYY-MM-DD` CHANGELOG entry, `[Unreleased]` folded, README highlights. The script does not write these; `--check` enforces them.
|
|
32
|
-
4. **
|
|
33
|
-
5. **
|
|
34
|
-
6. **
|
|
32
|
+
4. **Gate, commit, push.** Full quality gate, then commit and push to **both** remotes.
|
|
33
|
+
5. **CI green — on the commit that will be published, on BOTH platforms.** Not on its predecessor: a green pipeline from before step 4's commit is evidence about a different tree. And not on GitLab alone — `--check` carries two CI rows, `ci-green-on-head` (GitLab, via `origin`) and `ci-green-on-head-github` (the mirror). The GitLab pipeline is Linux-only; the **macOS** matrix leg exists solely in `.github/workflows/test.yml`, i.e. on the operator's own platform. The github row self-disables (`skipped — no github remote`) in a checkout without a mirror, and fails on `unknown`/`degraded` exactly like the GitLab one — "could not read the mirror" is not "the mirror is green".
|
|
34
|
+
6. **Preflight.** `node scripts/release.mjs --check --json` — every row green. Run this after the release commit is pushed and its CI succeeds: the preflight requires a clean working tree, exact HEAD parity on both remotes and green CI on that commit. It derives its target from `package.json`, so checking the pre-bump version instead produces registry- and tag-collision failures.
|
|
35
35
|
7. **Publish.** `node scripts/release.mjs --publish` — **give it ≥600 s of wall clock, or run it in the background.** The script sets no spawn timeout on purpose (a kill mid-`npm publish` or mid-push is the very failure the receipt boundary exists to avoid), and the tail is slow by construction: each of the two `git push` remotes re-runs the husky pre-push full gate, plus up to 120 s of live-site polling. A 3-minute default command timeout kills it mid-tail.
|
|
36
36
|
|
|
37
37
|
The target-confirmed npm receipt is the irreversible boundary. Before that receipt, any failure aborts normally. After it, never rerun `--publish`: registry propagation timeout/query/wait failures are reconciliation while the script still tags, pushes `main` + tag to both remotes, handles the GitHub release, and polls the live site. If tag/push fails after the receipt, the dependent GitHub-release and site steps are skipped and the script returns structured reconciliation guidance instead. Add the GitHub release for the new tag (`gh release create`) as part of this step, not "later" — "later" is what produced the three-second backfill above.
|
|
38
38
|
|
|
39
|
-
Steps 2–7 are one continuous act. A release left parked between step
|
|
39
|
+
Steps 2–7 are one continuous act. A release left parked between step 4 and step 7 is exactly the `3.18.0` state: every surface says released, the registry disagrees.
|
|
40
40
|
|
|
41
41
|
## Abort criteria
|
|
42
42
|
|
package/docs/codex-setup.md
CHANGED
|
@@ -67,7 +67,7 @@ Codex reports three distinct states that must not be conflated:
|
|
|
67
67
|
|
|
68
68
|
## Refresh and Explicit Cache Invalidation
|
|
69
69
|
|
|
70
|
-
**If you installed via the short remote form** (`codex plugin marketplace add owner/repo`),
|
|
70
|
+
**If you installed via the short remote form** (`codex plugin marketplace add owner/repo`), refresh the Git marketplace snapshot before updating the installed plugin. Measured 2026-09-06 on codex-cli 0.144.4 — `codex plugin marketplace upgrade --help`: *"Refresh configured Git marketplace snapshots. Omit MARKETPLACE_NAME to upgrade all configured Git marketplaces."*
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
codex plugin marketplace upgrade kanevry # or omit the name to refresh all
|
|
@@ -86,6 +86,8 @@ node scripts/codex-install.mjs
|
|
|
86
86
|
|
|
87
87
|
Every installer run executes `codex plugin marketplace add` and `codex plugin add`, even when the marketplace is already configured. The repeated `plugin add` refreshes Codex's installed bundle from the current clone instead of treating installation as a one-time copy.
|
|
88
88
|
|
|
89
|
+
After either refresh path, confirm the installed version with `codex plugin list --available --json` and start a fresh task. Reopen the skill picker and search for `go` or `close`; if the updated entries are still missing, fully restart Codex. Editing the source clone or regenerating skills alone does not refresh the installed bundle.
|
|
90
|
+
|
|
89
91
|
The tracked Codex manifest uses a version such as `3.14.0+codex.20260717175716`. The base must match `package.json`; the `+codex.<YYYYMMDDHHmmss>` UTC suffix is the repository's explicit invalidation marker. When a shipped bundle needs a new cache identity, maintainers commit a new timestamp in `.codex-plugin/plugin.json`. The installer validates that committed value and never mutates the tracked manifest.
|
|
90
92
|
|
|
91
93
|
## Configuration
|
|
@@ -176,14 +178,44 @@ An empty `PreToolUse` or `SubagentStart` array means the event belongs to the va
|
|
|
176
178
|
|
|
177
179
|
## Usage
|
|
178
180
|
|
|
179
|
-
After installation
|
|
181
|
+
After installation or refresh, start a fresh task. In the desktop composer, open the skill picker, search for `go` or `close`, and select the matching **Session Orchestrator** entry. In Codex CLI or the IDE extension, use `/skills` or mention the namespaced skill directly in your prompt. [OpenAI skill invocation](https://learn.chatgpt.com/docs/build-skills)
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
$session-orchestrator:session feature # start a session (housekeeping, feature or deep)
|
|
185
|
+
$session-orchestrator:go # execute the agreed plan
|
|
186
|
+
$session-orchestrator:close # verify and close the session
|
|
187
|
+
$session-orchestrator:plan feature # plan a project or feature (new, feature or retro)
|
|
188
|
+
$session-orchestrator:discovery # run quality probes; optionally add a scope
|
|
189
|
+
$session-orchestrator:evolve analyze # manage learnings (analyze, review or list)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
These are skill invocations in the Codex prompt, not shell commands. Invoking `go` reads the full canonical `commands/go.md`, including its Express Path and prechecks; invoking `close` reads `commands/close.md`, including its state and ledger checks before the session-end workflow. Codex's native `/goal` is a separate feature. Typing `/go` or `/close` alone is not a portable invocation contract; select the skill or use its explicit namespaced form.
|
|
193
|
+
|
|
194
|
+
### Manifest Compatibility
|
|
195
|
+
|
|
196
|
+
The plugin uses `.codex-plugin/plugin.json` for Codex and `.cursor-plugin/plugin.json` for Cursor. It does not ship a root Agent Plugins `plugin.json`: on Codex CLI 0.153.3 and desktop runtime 0.153.4, that standard manifest takes precedence, fixes skill discovery to conventional `skills/`, and supplies the root version. The Codex overlay can supply hooks, apps and interface metadata, but cannot override that skill path or version. This was verified with read-only `plugin/read` probes on 2026-09-07. [Codex manifest parser](https://github.com/openai/codex/blob/main/codex-rs/core-plugins/src/agent_plugin_manifest.rs)
|
|
197
|
+
|
|
198
|
+
Moving the former root metadata to the native Cursor manifest lets Codex load its generated entrypoints and cache suffix. Cursor keeps the declared skills and MCP paths; the manifest explicitly disables discovery of extra rules, agents, commands and hooks. Its existing installer supplies the Cursor command and hook adapters. This follows the [Cursor manifest reference](https://cursor.com/docs/reference/plugins); native Cursor loading has not been runtime-tested as part of this change.
|
|
199
|
+
|
|
200
|
+
### Generated Command Skills
|
|
201
|
+
|
|
202
|
+
The Codex manifest registers one generated skill tree at `.codex-plugin/skills/`. It contains the union of names from `commands/` and `skills/`: when both contain the same name, the command takes precedence, giving the plugin one public entry for that name. OpenAI recommends converting reusable Markdown commands into skills. [OpenAI conversion guidance](https://developers.openai.com/plugins/guides/submit-claude-plugin)
|
|
180
203
|
|
|
181
|
-
-
|
|
182
|
-
|
|
183
|
-
-
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
|
|
204
|
+
The manifest also declares top-level `"commands": []` to suppress the installer's automatic command migration. When that field was omitted, a public install with Codex 0.153.3 added nine `source-command-*` aliases alongside the generated entries, including `source-command-close`, without preserving invocation policy. The empty array selects no command sources; it does not register native slash commands. The generated skill tree remains the public invocation surface. [Codex 0.153.3 command-path parser](https://github.com/openai/codex/blob/rust-v0.153.3/codex-rs/core-plugins/src/manifest.rs#L203), [installer migration](https://github.com/openai/codex/blob/rust-v0.153.3/codex-rs/core-plugins/src/command_migration/plugin.rs)
|
|
205
|
+
|
|
206
|
+
The generated files are adapters, not separate workflow bodies. Each links to its canonical command or skill using a package-relative path, so it also works from the installed bundle. Command adapters read the full command first and resolve internal skill calls directly to `skills/<name>/SKILL.md`, avoiding a recursive call to the public entry. Trailing prompt text supplies the command's `$ARGUMENTS` as data; the adapter does not shell-expand arguments or globally substitute them into command documents.
|
|
207
|
+
|
|
208
|
+
Commands declaring `disable-model-invocation: true`, including `go` and `close`, receive `policy.allow_implicit_invocation: false` in `agents/openai.yaml`. This preserves explicit selection while disabling implicit skill invocation. Other commands retain their source setting. [OpenAI invocation policy](https://learn.chatgpt.com/docs/build-skills#optional-metadata)
|
|
209
|
+
|
|
210
|
+
Maintainers edit the canonical files, then regenerate and check the Codex surface from the plugin root:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
node scripts/generate-codex-skills.mjs
|
|
214
|
+
node scripts/generate-codex-skills.mjs --check
|
|
215
|
+
node scripts/validate-plugin.mjs
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`--check` reports stale generated files without writing them. Plugin validation also checks manifest wiring, command coverage, canonical targets and invocation policy. Commit the generated output with its source change, then follow [Refresh and Explicit Cache Invalidation](#refresh-and-explicit-cache-invalidation) to update the installed copy.
|
|
187
219
|
|
|
188
220
|
## Key Differences from Claude Code
|
|
189
221
|
|
|
@@ -203,6 +235,8 @@ Both platforms share session history and learnings through `.orchestrator/metric
|
|
|
203
235
|
|
|
204
236
|
## Platform Limitations
|
|
205
237
|
|
|
238
|
+
Repository skills under `.agents/skills/` and installed-plugin skills can both appear in the picker. The generated union prevents duplicate names within the plugin; it does not remove pre-existing entries from other discovery scopes. Select the installed command entry whose path is under `.codex-plugin/skills/` when a repository also offers a same-named internal skill.
|
|
239
|
+
|
|
206
240
|
Claude Code dispatches role-specialized agents with dedicated definitions. Codex maps implementation work through its configured roles, so task prompts carry specialization that is not represented by a dedicated role. A project can add more specific TOML definitions under `.codex/agents/` when needed.
|
|
207
241
|
|
|
208
242
|
Hook enforcement is limited to the validated payload-compatible Codex subset described above. In particular, the absence of Claude-only events and Edit/Write handlers is deliberate rather than an installation workaround.
|
|
@@ -219,6 +253,7 @@ codex plugin list --available --json
|
|
|
219
253
|
- **The target is missing, disabled, duplicated, or at the wrong version:** run `codex plugin marketplace list --json`, remove the exact target with `codex plugin remove session-orchestrator@kanevry` when present, and rerun `node scripts/codex-install.mjs` to reinstall and verify it.
|
|
220
254
|
- **A `session-orchestrator@openai-curated` or `session-orchestrator@local` installation remains:** these are the only allowlisted legacy IDs. Remove the exact stale ID with `codex plugin remove session-orchestrator@openai-curated` or `codex plugin remove session-orchestrator@local`; unrelated plugins remain untouched.
|
|
221
255
|
- **The `kanevry` marketplace points at another source:** confirm the conflict with `codex plugin marketplace list --json`, run `codex plugin marketplace remove kanevry`, then rerun the installer from the intended clone so it performs the public marketplace add and plugin add lifecycle.
|
|
256
|
+
- **`go` or `close` is missing from the skill picker:** follow [the refresh steps](#refresh-and-explicit-cache-invalidation), verify the installed version, and restart Codex if reopening the picker does not load the new entries. Use the namespaced skill form from [Usage](#usage), rather than selecting the unrelated native Goal command.
|
|
222
257
|
- **Plugin is installed and enabled but hooks do not fire:** start a fresh task or fully restart Codex, run `/hooks`, and review the trust state. Installation does not imply hook approval.
|
|
223
258
|
- **Other pre-public plugin/config/cache/hook-state residue is suspected:** this state is unsupported. Do not modify private Codex files. File an issue with `codex --version`, `codex plugin list --available --json`, and `codex plugin marketplace list --json` output so the public recovery path can be diagnosed.
|
|
224
259
|
- **Agent dispatch fails:** verify Codex multi-agent support and inspect the bundled or project-level role TOMLs.
|
|
@@ -247,4 +282,3 @@ codex mcp list | grep session-orchestrator # the launch string should mention
|
|
|
247
282
|
```
|
|
248
283
|
|
|
249
284
|
The 0.144.4 minimum-version caveat above still stands: everything in this section was measured on **0.141.0**, below the documented minimum, and has not been re-verified on 0.144.4+ or on the reporter's 0.149.0-alpha.4.3.
|
|
250
|
-
|
package/docs/components.md
CHANGED
|
@@ -52,9 +52,10 @@ Codex uses the curated six-event project subset `SessionStart`, `PreToolUse`, `P
|
|
|
52
52
|
|
|
53
53
|
- **Output Styles (3):** `session-report`, `wave-summary`, `finding-report`.
|
|
54
54
|
- **Policy & rules:** `.orchestrator/policy/blocked-commands.json` (destructive-command rules); `.claude/rules/parallel-sessions.md` (PSA-001..PSA-004).
|
|
55
|
-
- **Codex:** `.codex-plugin/plugin.json` (tracked `+codex.<UTC timestamp>` version), compatibility config, agent role definitions, and the public marketplace/add/list lifecycle implemented by `scripts/codex-install.mjs`. Every run refreshes via `plugin add`; hook trust remains an operator decision in a fresh task through `/hooks`.
|
|
55
|
+
- **Codex:** `.codex-plugin/plugin.json` (tracked `+codex.<UTC timestamp>` version), generated command and skill entrypoints under `.codex-plugin/skills/`, compatibility config, agent role definitions, and the public marketplace/add/list lifecycle implemented by `scripts/codex-install.mjs`. `scripts/generate-codex-skills.mjs` produces the name union with commands taking precedence; [Codex usage](codex-setup.md#usage) explains selection. Every installer run refreshes via `plugin add`; hook trust remains an operator decision in a fresh task through `/hooks`.
|
|
56
|
+
- **Cursor:** `.cursor-plugin/plugin.json` registers canonical skills and `.mcp.json` using Cursor's native manifest format. Additional native component discovery is explicitly disabled; `scripts/cursor-install.mjs` supplies the existing command and hook adapters. The former standard root manifest was moved to prevent [Codex manifest interception](codex-setup.md#manifest-compatibility).
|
|
56
57
|
- **Pi:** `package.json` `pi` manifest, `pi/extensions/session-orchestrator.ts` bridge, `hooks/hooks-pi.json`, `scripts/pi-install.mjs`.
|
|
57
|
-
- **Portable cross-harness surface (generated, never hand-edited):** root `AGENTS.md` (byte-identical copy of `CLAUDE.md`)
|
|
58
|
+
- **Portable cross-harness surface (generated, never hand-edited):** root `AGENTS.md` (byte-identical copy of `CLAUDE.md`) and `.agents/skills/<name>/SKILL.md` — mirrors carrying only spec-legal frontmatter plus a pointer body. These two surfaces are written by `scripts/generate-agents-skills.mjs` and drift-checked via its `--check` form inside `scripts/validate-plugin.mjs`. Native plugin manifests are maintained separately, with versions updated by `scripts/release.mjs`.
|
|
58
59
|
- **Scripts:** deterministic CLI tools (parse-config, run-quality-gate, validate-wave-scope, validate-plugin, token-audit, autopilot) plus shared lib under `scripts/lib/*.mjs`, all covered by the vitest suite.
|
|
59
60
|
|
|
60
61
|
## `/harness-audit` — Anthropic large-codebase rubric
|
|
@@ -688,11 +688,18 @@ agentskills.io permits outside Claude Code (`name`, `description`, `license`,
|
|
|
688
688
|
`skills/<name>/SKILL.md`, never a copy of it — progressive disclosure keeps the
|
|
689
689
|
whole mirror at 47,380 bytes across 43 files.
|
|
690
690
|
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
`.
|
|
694
|
-
|
|
695
|
-
|
|
691
|
+
These are the two artifacts emitted by `scripts/generate-agents-skills.mjs`. Plugin
|
|
692
|
+
manifests are maintained separately under `.claude-plugin/`, `.codex-plugin/` and
|
|
693
|
+
`.cursor-plugin/`; `scripts/release.mjs` updates their versions with `package.json`.
|
|
694
|
+
The initial 4.0.0 standard root `plugin.json` was moved to the native Cursor location
|
|
695
|
+
because it intercepted Codex's skill path and version selection; see
|
|
696
|
+
[Codex manifest compatibility](codex-setup.md#manifest-compatibility).
|
|
697
|
+
|
|
698
|
+
Codex has a separate generated surface: `scripts/generate-codex-skills.mjs` writes
|
|
699
|
+
`.codex-plugin/skills/` from the union of canonical command and skill names. Commands
|
|
700
|
+
win same-name overlaps, and each adapter reads the canonical document before dispatch.
|
|
701
|
+
The portable `.agents/skills/` mirrors continue to reference canonical skills directly;
|
|
702
|
+
they do not replace the installed Codex command entrypoints.
|
|
696
703
|
|
|
697
704
|
## Learnings Index (selected for your file scope)
|
|
698
705
|
|
package/docs/migration-v4.md
CHANGED
|
@@ -24,7 +24,7 @@ change list: [CHANGELOG.md](../CHANGELOG.md).
|
|
|
24
24
|
| `.claude/rules/` | 61 files (43 generated) | 26 files (43 generated → 8 thematic) |
|
|
25
25
|
| Turn-stop event | `orchestrator.session.stopped` | `orchestrator.turn.stopped` (both emitted until 2027-03-06) |
|
|
26
26
|
| Telemetry field | `fleet` | `fleet_self_declared` (both sent until 2027-03-06) |
|
|
27
|
-
| Cross-harness
|
|
27
|
+
| Cross-harness integration | native manifests | generated root `AGENTS.md` + `.agents/skills/`; separate Claude, Codex and Cursor manifests |
|
|
28
28
|
| Session shapes | `housekeeping` / `feature` / `deep` | unchanged, plus the `ultradeep` PROFILE over `deep` |
|
|
29
29
|
| Runtime | Node 24+, npm | unchanged |
|
|
30
30
|
|
|
@@ -126,6 +126,17 @@ New in 4.0.0 and relevant here: this repository now ships a **root `AGENTS.md`**
|
|
|
126
126
|
instructions from `AGENTS.md` found nothing in this repo. If you keep your own
|
|
127
127
|
`AGENTS.md`, nothing changes for you.
|
|
128
128
|
|
|
129
|
+
The Codex command integration uses generated skills: search for `go` or `close` in the
|
|
130
|
+
picker and select the **Session Orchestrator** entry, or invoke `$session-orchestrator:go` and
|
|
131
|
+
`$session-orchestrator:close`. Refresh the installed plugin as above and restart Codex if
|
|
132
|
+
the new entries do not appear. The native `/goal` command is separate.
|
|
133
|
+
|
|
134
|
+
The initial 4.0.0 root Agent Plugins `plugin.json` has been replaced by a native Cursor
|
|
135
|
+
manifest. Read-only probes on Codex 0.153.3 and desktop runtime 0.153.4 showed that the
|
|
136
|
+
standard root manifest overrides Codex's declared skill directory and cache version.
|
|
137
|
+
The separate native manifests avoid that conflict; details are in
|
|
138
|
+
[Codex manifest compatibility](codex-setup.md#manifest-compatibility).
|
|
139
|
+
|
|
129
140
|
### 3c. Cursor IDE
|
|
130
141
|
|
|
131
142
|
```bash
|
|
@@ -145,8 +156,12 @@ But the three retired commands do **not** disappear from `.cursor/commands/` on
|
|
|
145
156
|
`hooks.json` written before 4.0.0 is never synchronised with a new hook event automatically.
|
|
146
157
|
Both need the manual step in § 5 ("Cursor still shows the removed commands") below.
|
|
147
158
|
|
|
148
|
-
|
|
149
|
-
|
|
159
|
+
Cursor's plugin metadata now lives at `.cursor-plugin/plugin.json`, replacing the initial
|
|
160
|
+
4.0.0 standard root `plugin.json`. The native manifest retains the canonical skills and
|
|
161
|
+
MCP paths and explicitly disables additional component discovery; the installer above
|
|
162
|
+
continues to supply commands and hooks. The shape follows the
|
|
163
|
+
[official Cursor manifest reference](https://cursor.com/docs/reference/plugins); native
|
|
164
|
+
Cursor loading was not runtime-tested during this compatibility repair.
|
|
150
165
|
|
|
151
166
|
### 3d. Pi
|
|
152
167
|
|
|
@@ -260,6 +275,11 @@ for f in autopilot-multi contract-version-bump journey-audit; do
|
|
|
260
275
|
done
|
|
261
276
|
```
|
|
262
277
|
|
|
278
|
+
`[ -L "$p" ]` checks the destination's TYPE, not who created it — it removes any symlink at that
|
|
279
|
+
path regardless of origin. If you separately symlinked your own command under one of these three
|
|
280
|
+
names, this recipe deletes that symlink too; a regular (non-symlink) file is the only thing it
|
|
281
|
+
leaves untouched.
|
|
282
|
+
|
|
263
283
|
Then restart Cursor. Same story for `.cursor/hooks.json`: the installer skips it outright once
|
|
264
284
|
it exists (`:139-140`), so a `hooks.json` written before 4.0.0 is never re-synced with a new hook
|
|
265
285
|
event automatically — re-check it by hand (diff it against a fresh `node scripts/cursor-install.mjs`
|
|
@@ -317,12 +337,16 @@ What you get back, and what you do not:
|
|
|
317
337
|
- **The removed skills, commands and scripts come back with the checkout.** They were deleted
|
|
318
338
|
from the repository, not from your disk history.
|
|
319
339
|
- **What does NOT roll back automatically** is anything an installer wrote into YOUR project:
|
|
320
|
-
`.cursor/commands/`, `.cursor/hooks.json`, Pi settings.
|
|
321
|
-
`
|
|
322
|
-
(`scripts/cursor-install.mjs:69-73`; the `hooks.json` writer at `:139-140`) —
|
|
323
|
-
the
|
|
324
|
-
|
|
325
|
-
|
|
340
|
+
`.cursor/commands/`, `.cursor/hooks.json`, Pi settings. The two installers behave
|
|
341
|
+
differently: `cursor-install.mjs` skips any destination that already exists — a symlink or a
|
|
342
|
+
file (`scripts/cursor-install.mjs:69-73`; the `hooks.json` writer at `:139-140`) — and
|
|
343
|
+
re-creates only the ones that are MISSING, so re-running it from the 3.24.0 checkout only
|
|
344
|
+
**adds** command links missing from your project; it does not restore a link you removed
|
|
345
|
+
yourself and does not resync an existing `hooks.json`.
|
|
346
|
+
`pi-install.mjs --settings-only` **does** rewrite the Pi settings file: it reads it, upserts
|
|
347
|
+
this package's entry and writes it back (`scripts/pi-install.mjs` `upsertPackage` /
|
|
348
|
+
`writeSettings`), so re-running it from the 3.24.0 checkout re-points Pi at that checkout.
|
|
349
|
+
For Cursor, to get a removed link back: delete the stale file first (§ "Cursor still shows the
|
|
326
350
|
removed commands" has a safe, symlink-only removal recipe), then re-run the installer with
|
|
327
351
|
your project path, as shown above.
|
|
328
352
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generated_at": "2026-09-
|
|
3
|
-
"head": "
|
|
2
|
+
"generated_at": "2026-09-07T18:36:32.142Z",
|
|
3
|
+
"head": "a244b8707aa5bb650673fce2e6cf548564b43e58",
|
|
4
4
|
"entries": [
|
|
5
5
|
{
|
|
6
6
|
"file": "hooks/_lib/atomic-json.mjs",
|
|
@@ -1274,7 +1274,8 @@
|
|
|
1274
1274
|
"file": "scripts/lib/session-schema/constants.mjs",
|
|
1275
1275
|
"reachable_from": [
|
|
1276
1276
|
"on-session-end.mjs",
|
|
1277
|
-
"on-session-start.mjs"
|
|
1277
|
+
"on-session-start.mjs",
|
|
1278
|
+
"skill-invocation-telemetry.mjs"
|
|
1278
1279
|
]
|
|
1279
1280
|
},
|
|
1280
1281
|
{
|
package/hooks/hooks-codex.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"hooks": [
|
|
8
8
|
{
|
|
9
9
|
"type": "command",
|
|
10
|
-
"command": "echo '🎯 Session Orchestrator v4.
|
|
10
|
+
"command": "echo '🎯 Session Orchestrator v4.1.0 — /session [housekeeping|feature|deep] | /plan [new|feature|retro] | /discovery [scope] | /evolve [analyze|review|list]'",
|
|
11
11
|
"async": false
|
|
12
12
|
},
|
|
13
13
|
{
|
package/hooks/hooks.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "echo '🎯 Session Orchestrator v4.
|
|
9
|
+
"command": "echo '🎯 Session Orchestrator v4.1.0 — /session [housekeeping|feature|deep] | /plan [new|feature|retro] | /discovery [scope] | /evolve [analyze|review|list]'",
|
|
10
10
|
"async": false
|
|
11
11
|
},
|
|
12
12
|
{
|