session-orchestrator 4.0.0 → 4.0.1
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 +190 -1
- package/README.md +26 -18
- 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/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/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/reconcile/engine.mjs +38 -7
- 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 +91 -55
- 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/release.mjs +109 -18
- 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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-runner
|
|
3
|
+
description: 'Use this skill when orchestrating agentic end-to-end tests. Resolves target + profile, dispatches the right driver(s) (playwright for web today, peekaboo for macOS (issue #381)), invokes the ux-evaluator agent (opus, read-only) against driver artifacts, reconciles findings with the open issue tracker via scripts/lib/test-runner/issue-reconcile.mjs, and writes report.md + JSONL roll-up. Wraps upstream tools (no forks). Hard-gates Playwright MCP for browser drive (4× token cost vs CLI per Microsoft''s own benchmark).'
|
|
4
|
+
metadata:
|
|
5
|
+
user-invocable: 'false'
|
|
6
|
+
tags: test, orchestrator, e2e, ux
|
|
7
|
+
model: sonnet
|
|
8
|
+
model-preference: sonnet
|
|
9
|
+
model-preference-codex: gpt-5.4
|
|
10
|
+
model-preference-cursor: claude-sonnet-4-6
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
14
|
+
|
|
15
|
+
# test-runner
|
|
16
|
+
|
|
17
|
+
Read [`skills/test-runner/SKILL.md`](../../../skills/test-runner/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
18
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
19
|
+
|
|
20
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
21
|
+
|
|
22
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tmux-layout
|
|
3
|
+
description: 'Use this skill when the operator wants a prepared tmux visualization layout for the session''s side-channels (STATE.md tail, CI-watch, events.jsonl tail). Renders a 4-pane default layout or debug layout. Read-only side-channel observability — the coordinator chat stays in the operator''s original terminal. Trigger phrases: "tmux layout", "split panes for ci watch", "visualize session side-channels", "show me state-md tail and ci".'
|
|
4
|
+
metadata:
|
|
5
|
+
model: inherit
|
|
6
|
+
color: cyan
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Bash
|
|
10
|
+
- Grep
|
|
11
|
+
- Glob
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
15
|
+
|
|
16
|
+
# tmux-layout
|
|
17
|
+
|
|
18
|
+
Read [`skills/tmux-layout/SKILL.md`](../../../skills/tmux-layout/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
19
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
20
|
+
|
|
21
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
22
|
+
|
|
23
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: using-orchestrator
|
|
3
|
+
description: 'Use this skill when dispatching implicit slash-command intent from the user''s first message. Inspects the user''s first message for implicit slash-command intent and dispatches to the highest-confidence matching entry-point skill via the Skill tool. Only active when `auto-skill-dispatch: true` in Session Config. Silent no-op otherwise.'
|
|
4
|
+
metadata:
|
|
5
|
+
user-invocable: 'false'
|
|
6
|
+
tags: dispatch, meta, routing, auto-skill
|
|
7
|
+
model: haiku
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
11
|
+
|
|
12
|
+
# using-orchestrator
|
|
13
|
+
|
|
14
|
+
Read [`skills/using-orchestrator/SKILL.md`](../../../skills/using-orchestrator/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
15
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
16
|
+
|
|
17
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
18
|
+
|
|
19
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vault-mirror
|
|
3
|
+
description: 'Use when you need to populate the Meta-Vault with machine-generated notes derived from session-orchestrator JSONL records. Converts entries from `.orchestrator/metrics/sessions.jsonl` and `.orchestrator/metrics/learnings.jsonl` into vault-conformant Markdown under `50-sessions/` and `40-learnings/`. Called automatically at session-end Phase 3.7 and after evolve Phase 3.5 — only when `vault-integration.enabled=true` and `vault-integration.mode != "off"`. Idempotent: re-runs safely; skips hand-authored notes. Triggers: "mirror to vault", "sync session notes to vault", "write learning notes to vault", "vault-mirror failed at session close". <example>Context: session-end is finalizing, vault-integration.mode is "warn". user: "/close" assistant: "Running vault-mirror to write 50-sessions/session-2026-05-17.md from the closing session record — 1 created, 0 skipped."</example>'
|
|
4
|
+
metadata:
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
9
|
+
|
|
10
|
+
# vault-mirror
|
|
11
|
+
|
|
12
|
+
Read [`skills/vault-mirror/SKILL.md`](../../../skills/vault-mirror/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
13
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
14
|
+
|
|
15
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
16
|
+
|
|
17
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vault-sync
|
|
3
|
+
description: 'Use when you need to validate the Meta-Vault''s Markdown frontmatter and wiki-link integrity before closing a session or after vault edits. Runs as a hard gate at session-end Phase 1 — blocks close if any `.md` file fails the Zod frontmatter schema or has dangling `[[wiki-links]]`. Supports three modes: `hard` (blocks on errors), `warn` (reports without blocking), `off` (skip). Reads `vault-sync.*` from Session Config; respects per-vault exclude globs from `CLAUDE.md`. Triggers: "vault validation failed at session close", "fix vault frontmatter errors", "check vault wiki-links", "why is session-end blocked by vault-sync". <example>Context: session-end Phase 1 quality gate, vault-sync.enabled=true, vault-sync.mode="hard". user: "/close" assistant: "vault-sync found 2 frontmatter errors in vault/40-learnings/ml-notes.md — missing required `id` field. Fixing before close."</example>'
|
|
4
|
+
metadata:
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
9
|
+
|
|
10
|
+
# vault-sync
|
|
11
|
+
|
|
12
|
+
Read [`skills/vault-sync/SKILL.md`](../../../skills/vault-sync/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
13
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
14
|
+
|
|
15
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
16
|
+
|
|
17
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wave-executor
|
|
3
|
+
description: Use this skill when executing the agreed session plan in waves with role-based execution and parallel subagents. Handles inter-wave quality checks, plan adaptation, and progress tracking. Core orchestration engine for feature and deep sessions. Triggered by /go command.
|
|
4
|
+
metadata:
|
|
5
|
+
user-invocable: 'false'
|
|
6
|
+
tags: orchestration, execution, agents, waves
|
|
7
|
+
model: inherit
|
|
8
|
+
model-preference: opus
|
|
9
|
+
model-preference-codex: gpt-5.4-mini
|
|
10
|
+
model-preference-cursor: claude-sonnet-4-6
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
14
|
+
|
|
15
|
+
# wave-executor
|
|
16
|
+
|
|
17
|
+
Read [`skills/wave-executor/SKILL.md`](../../../skills/wave-executor/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
18
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
19
|
+
|
|
20
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
21
|
+
|
|
22
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-executable-plan
|
|
3
|
+
description: Use when you have a PRD or design spec and need a bite-sized, executable implementation plan that any agent can follow without re-deriving structure. Produces `docs/plans/YYYY-MM-DD-<feature>.md` with per-task Files block, complete code per step (no placeholders), and exact verification commands. Rejects "TBD", "TODO", "add error handling", "similar to Task N".
|
|
4
|
+
metadata:
|
|
5
|
+
model: inherit
|
|
6
|
+
color: green
|
|
7
|
+
allowed-tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
- Bash
|
|
12
|
+
- Write
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- Generated by scripts/generate-codex-skills.mjs; do not edit. -->
|
|
16
|
+
|
|
17
|
+
# write-executable-plan
|
|
18
|
+
|
|
19
|
+
Read [`skills/write-executable-plan/SKILL.md`](../../../skills/write-executable-plan/SKILL.md) in full before taking any action, then follow its complete workflow.
|
|
20
|
+
The linked document is authoritative, including its prechecks, argument rules, and stop conditions.
|
|
21
|
+
|
|
22
|
+
Resolve this link relative to this SKILL.md, not the project working directory. The plugin root is three directories above this file. Resolve package paths such as `skills/` and `scripts/` from that root; resolve relative links inside the canonical document from its own directory. Keep the user’s project as the target of project operations.
|
|
23
|
+
|
|
24
|
+
Regenerate with `node scripts/generate-codex-skills.mjs`.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
2
|
"name": "session-orchestrator",
|
|
4
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
5
4
|
"description": "Loop engineering for AI coding agents — turn ad-hoc sessions into a repeatable research → plan → wave-execute → close loop with verification gates. Runs on Claude Code, Codex CLI, Cursor, and Pi.",
|
|
6
5
|
"author": {
|
|
7
6
|
"name": "Bernhard Goetzendorfer"
|
|
@@ -23,5 +22,9 @@
|
|
|
23
22
|
"pi"
|
|
24
23
|
],
|
|
25
24
|
"skills": "./skills/",
|
|
25
|
+
"rules": [],
|
|
26
|
+
"agents": [],
|
|
27
|
+
"commands": [],
|
|
28
|
+
"hooks": { "hooks": {} },
|
|
26
29
|
"mcpServers": "./.mcp.json"
|
|
27
30
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,194 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [4.0.1] - 2026-09-07
|
|
11
|
+
|
|
12
|
+
A PATCH release, two work streams. Codex CLI command entrypoints (closing Epic #1263 and
|
|
13
|
+
sub-issues #1264/#1265/#1266) make every `commands/*.md` and `skills/*/SKILL.md` entry
|
|
14
|
+
discoverable and selectable inside Codex. A 5-wave mechanical-fix session (7 Discovery + 12
|
|
15
|
+
Impl-Core + 5 Impl-Polish + a 4-reviewer/Codex-gpt-6-astra Quality panel with 5 fixers) closes
|
|
16
|
+
16 follow-up issues surfaced by the `4.0.0` 360° audit. The site redesign already staged in
|
|
17
|
+
`[Unreleased]` (session-orchestrator.com relaunch, closing GitLab #1237 and #1080 points
|
|
18
|
+
1/3/5/6/7) folds in unchanged below as `### Changed`.
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **Codex command workflows are now discoverable and selectable skills — 51 unique generated
|
|
23
|
+
entries (25 command-backed, 26 skill-backed), closing an 8-command discovery gap (`close`,
|
|
24
|
+
`go`, `harness-audit`, `portfolio`, `release`, `session`, `templates-ack`, `test`) and
|
|
25
|
+
resolving 17 same-name command/skill overlaps in the command's favor (`cf0876c3`, Refs
|
|
26
|
+
#1263/#1264/#1265/#1266).** `scripts/generate-codex-skills.mjs` builds `.codex-plugin/skills/`
|
|
27
|
+
as the union of `commands/` and `skills/` names; each generated entry links via a
|
|
28
|
+
package-relative path to its canonical `commands/<name>.md` or `skills/<name>/SKILL.md`, so it
|
|
29
|
+
resolves from the installed bundle, not only the source checkout. Command adapters read the
|
|
30
|
+
full canonical command before resolving any internal skill call directly, avoiding recursive
|
|
31
|
+
dispatch back to the public entry. Trailing prompt text passes through as `$ARGUMENTS` — no
|
|
32
|
+
shell expansion, no global substitution.
|
|
33
|
+
- **`disable-model-invocation: true` now maps to `agents/openai.yaml`
|
|
34
|
+
`policy.allow_implicit_invocation: false`, so `go`, `close`, `bootstrap`, `brainstorm`, `plan`,
|
|
35
|
+
and `release` keep requiring explicit selection under Codex too (`cf0876c3`, Refs
|
|
36
|
+
#1263/#1264).** All other commands retain their source setting.
|
|
37
|
+
- **`scripts/lib/validate/check-codex-skills.mjs` independently re-derives the expected Codex
|
|
38
|
+
surface from the emitted artifacts, not from the generator's own expected text, and is wired
|
|
39
|
+
into `scripts/validate-plugin.mjs` (`cf0876c3`, Refs #1263/#1265).** It checks source-name
|
|
40
|
+
coverage, manifest registration, frontmatter/metadata types, invocation-policy booleans, and
|
|
41
|
+
canonical-link targets; its CLI also re-runs `generate-codex-skills.mjs --check`.
|
|
42
|
+
- **Native Codex `commands: []` now suppresses the installer's automatic `commands/` migration
|
|
43
|
+
(`ae16dfcb`, Refs #1263/#1265/#1266).** Without it, a real install on Codex 0.153.3 added nine
|
|
44
|
+
`source-command-*` aliases (including `source-command-close`) beside the generated entries,
|
|
45
|
+
with no invocation policy attached. `scripts/lib/codex/plugin-contract.mjs` now requires
|
|
46
|
+
`commands` to be an empty array when present.
|
|
47
|
+
- **The root `plugin.json` (added in 4.0.0) is replaced by `.cursor-plugin/plugin.json`,
|
|
48
|
+
Cursor's native manifest format (`cf0876c3`, Refs #1263/#1264).** Read-only `plugin/read`
|
|
49
|
+
probes on Codex CLI 0.153.3 and desktop 0.153.4 found the root Agent Plugins manifest
|
|
50
|
+
overrides Codex's own declared skill path (fixing it to `./skills`) and root version —
|
|
51
|
+
silently defeating the generated `.codex-plugin/skills/` surface even though every adapter
|
|
52
|
+
unit test passed. `package.json` `files[]` and `scripts/release.mjs`'s version-surface table
|
|
53
|
+
are updated accordingly (`.cursor-plugin/` added, root `plugin.json` removed).
|
|
54
|
+
- **Installed acceptance verified end to end (`3862505c`, `a244b870`, Refs #1263/#1266).**
|
|
55
|
+
Public `codex plugin add session-orchestrator@local --json` produced enabled version
|
|
56
|
+
`4.0.0+codex.20260907174300`; Codex desktop 0.153.4 returns exactly 51 unique enabled skills
|
|
57
|
+
via both `plugin/read` and `skills/list`, no migration aliases, and all six explicit-only
|
|
58
|
+
commands retain `allow_implicit_invocation: false`. Visible-picker selection is **not yet
|
|
59
|
+
confirmed** — Computer Use cannot drive the Codex desktop app — and remains open under #1266
|
|
60
|
+
(see Notes).
|
|
61
|
+
- **Documented the Codex command entrypoints across `README.md`, `docs/codex-setup.md`,
|
|
62
|
+
`docs/components.md`, `docs/migration-v4.md`, and `docs/instruction-delivery.md` (`cf0876c3`,
|
|
63
|
+
Refs #1263/#1266).**
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- Public website redesigned (session-orchestrator.com): light-first design in the family look of the author's personal site (Bricolage Grotesque, Source Sans 3, IBM Plex Mono, all self-hosted; Archivo removed).
|
|
68
|
+
- Two reading layers on the landing page: a plain-words layer for non-developers above a developer layer with install commands, the wave schedule, and the measured-claims table.
|
|
69
|
+
- German landing page at `/de` with `hreflang` alternates (`en`, `de`, `x-default`), same section ids and census spans as the English page.
|
|
70
|
+
- three.js hero (vendored `three@0.185.1`, two files: `three.module.min.js` + `three.core.min.js`), loaded via a lazy dynamic import skipped under `prefers-reduced-motion`, which renders the static `hero-fallback.svg` instead.
|
|
71
|
+
- Six AI-generated illustrations (gpt-image-2), each captioned "AI-generated illustration (gpt-image-2)" in EN/DE.
|
|
72
|
+
- FAQ section with `FAQPage` JSON-LD on both the EN and DE landing pages.
|
|
73
|
+
- Author block linking to the personal site (root + `utm_source=session-orchestrator`), closing GitLab #1237.
|
|
74
|
+
- `scripts/site-numbers.mjs` gained `npm-downloads-30d` and `github-stars`: fetched only under `--write` (5 s timeout, snapshot kept on failure), answered from the `site/_census.json` snapshot under `--check`; `SO_SITE_NUMBERS_OFFLINE=1` skips both metrics. Marker-bounded census blocks (`<!-- census:start -->` / `<!-- census:end -->`) added to `site/llms.txt` and `site/llms-full.txt` (GitLab #1080, points 1/3/5/6/7).
|
|
75
|
+
- New tests: `tests/site/voice-gate.test.mjs` (em-dash, superlative, "we", emoji gate) and `tests/site/structure.test.mjs` (EN/DE parity, hreflang, asset presence, AI-illustration disclosure).
|
|
76
|
+
- `vercel.json` cache headers for `/assets`, `/img`, `/vendor`; ESLint now ignores `site/vendor/**` (vendored three.js) and declares browser globals for `site/assets/**`.
|
|
77
|
+
|
|
78
|
+
### Fixed
|
|
79
|
+
|
|
80
|
+
- **`CHANGELOG.md`'s `[4.0.0]` entry and `docs/migration-v4.md` corrected two overclaims found
|
|
81
|
+
by post-tag review (`a4315993`).** `package.json` `files[]` admits the whole
|
|
82
|
+
`.orchestrator/policy/` directory, not a curated file list — the packlist test, not npm, is
|
|
83
|
+
what pins the shipped set to the tracked set. `pi-install.mjs --settings-only` actually
|
|
84
|
+
**rewrites** an existing Pi settings file (upsert), unlike `cursor-install.mjs`, which skips
|
|
85
|
+
existing destinations. Note for readers of the published `v4.0.0` tag: this correction lands
|
|
86
|
+
after that tag, so the tagged CHANGELOG text still carries the two overclaims — only `main`
|
|
87
|
+
and `4.0.1` have the corrected wording.
|
|
88
|
+
- **`tests/scripts/site-numbers.test.mjs` fixtures run offline
|
|
89
|
+
(`SO_SITE_NUMBERS_OFFLINE=1`) (`4ea84d3e`).** Without it, the census-block tests fetched live
|
|
90
|
+
npm download counts and went red whenever the live count moved past the fixture snapshot
|
|
91
|
+
(measured in CI 2026-09-07: 1237 vs. 1165).
|
|
92
|
+
- **`tests/lib/validate/check-auq-clarity.test.mjs` gets a 120 s hook timeout for its
|
|
93
|
+
`validate-plugin.mjs` spawn in `beforeAll` (`19b66e6e`).** GitLab pipelines 8790 and 8791
|
|
94
|
+
(2026-09-07) failed only here: the shared runner exceeded vitest's default 30 s `hookTimeout`
|
|
95
|
+
running the full validator (~12 s locally). Aligns with the sibling
|
|
96
|
+
`tests/scripts/validate-plugin.test.mjs`.
|
|
97
|
+
|
|
98
|
+
#### 4.0.1 — mechanical-fix session (16 follow-up issues from the 4.0.0 audit)
|
|
99
|
+
|
|
100
|
+
- **Reconcile-idempotency now has a contract and a regression test, not just a claim (#1242).**
|
|
101
|
+
Discovery found the acceptance criterion already held — tracked Provenance markers already
|
|
102
|
+
dedupe re-runs, a fresh-clone simulation regenerated 0 of 30 keys — so the delivered fix is a
|
|
103
|
+
contract doc (the scan is authoritative, the sidecar is a cache) plus a mutation-proven
|
|
104
|
+
fresh-clone consolidated-shape test, not new production code.
|
|
105
|
+
- **`check-unwired-features.mjs`'s Category S4 no longer conflates "genuinely unreachable" with
|
|
106
|
+
"reachable only via coordinator dispatch" (#1239).** Discovery measured 52 raw S4 findings, 46
|
|
107
|
+
of them (88.5%) false positives — modules invoked only through a coordinator `Task`/skill
|
|
108
|
+
dispatch, never a static import. S4 now splits into 5 truly-unreachable findings and 46
|
|
109
|
+
coordinator-invoked findings reported as advisory rather than blocking, with `skills/`
|
|
110
|
+
recognised as a first-class reachability edge source; a same-wave fix-pass tightened the
|
|
111
|
+
coordinator-invoked match to token boundaries (a Codex-repro case where a bare substring match
|
|
112
|
+
over-matched) and dropped the advisory line's WARN severity per `host-resources.md` HR-101.
|
|
113
|
+
The check's exit code is unchanged.
|
|
114
|
+
- **`inspectConfidentialNames()` is a new function; `loadConfidentialNames()` keeps its 4.0.0
|
|
115
|
+
`string[] | null` public contract (#1250).** This session's own Wave-2 refactor had changed
|
|
116
|
+
`loadConfidentialNames()`'s return shape to an object — a semver-breaking change the Wave-4
|
|
117
|
+
review panel and Codex gpt-6-astra both caught before the cut, not after. The fix reinstates
|
|
118
|
+
`loadConfidentialNames()` as a thin wrapper over the richer `inspectConfidentialNames()`. A new
|
|
119
|
+
`'all-dropped'` status (every entry in the confidential-names file invalid) now fails closed
|
|
120
|
+
instead of silently returning an empty list, and the loader's WARN on a missing/malformed file
|
|
121
|
+
is redacted to the file's basename — the same fix-pass had regressed the full path into
|
|
122
|
+
stderr, reopening the class of leak `check-owner-leakage.mjs` exists to prevent; found and
|
|
123
|
+
fixed inside this session's own review cycle, before release.
|
|
124
|
+
- **`loadHostPaths()` no longer loads `owner.yaml` twice (#1251).** Health-check state now
|
|
125
|
+
passes through from the caller's single load instead of triggering a second read.
|
|
126
|
+
- **Four small fixes under #1262: an env-configured standalone confidential-names copy now fails
|
|
127
|
+
closed instead of passing through silently (point 2); `docs/migration-v4.md` gained rollback
|
|
128
|
+
prose (point 3); `OPTIONAL_OBJECT_SECTIONS` is now an exported constant with a parity test,
|
|
129
|
+
replacing a duplicated mirror list (point 4); a stale comment on the full quality-gate path was
|
|
130
|
+
corrected (point 5).** Point 1 (a Codex-surface regeneration check) was dropped — Discovery
|
|
131
|
+
measured the existing set-equality pack test as the stronger pin, so no code change was needed.
|
|
132
|
+
- **`VALID_SESSION_PROFILES` moved to a single source of truth in
|
|
133
|
+
`scripts/lib/session-schema/constants.mjs`, with `SHARED_LIST_BOUNDS`/`INGEST_LIST_BOUNDS`
|
|
134
|
+
parity enforced (#1252).** A re-export shim stayed at the old location for compatibility,
|
|
135
|
+
pinned by an identity test.
|
|
136
|
+
- **Four git-fixture files and the two largest `rmSync` call sites now route through a shared
|
|
137
|
+
tmp-fixture helper instead of ad hoc cleanup; `listRepoFiles()` now swallows only
|
|
138
|
+
`ENOENT`/`ENOTDIR`, not every error (#1253).** This is a partial pass, not a sweep: 501 bare
|
|
139
|
+
**recursive** `rmSync` call sites remain unrouted (574 claimed → 524 measured → 501 after this
|
|
140
|
+
session) and are carried forward as #1268 with a Revisit-Trigger, not silently left
|
|
141
|
+
unmentioned.
|
|
142
|
+
- **`check-skill-links.mjs` now scans `docs/` (previously skill/command files only), takes a
|
|
143
|
+
`dirs` option, and right-anchors its GitLab `-/issues` carve-out (#1258).** The carve-out was
|
|
144
|
+
previously unanchored and could match a URL fragment elsewhere in a line. Two dangling
|
|
145
|
+
documentation links were repaired, both pointing at content that had moved to the vault
|
|
146
|
+
archive.
|
|
147
|
+
- **An unknown or valueless CLI flag on `generate-hook-import-set.mjs` now exits 2 with a usage
|
|
148
|
+
message instead of triggering the write (#1249).** `--out --check` no longer writes a file
|
|
149
|
+
literally named `--check` — the argv loop had read `--check` as `--out`'s value.
|
|
150
|
+
- **A platform allowlist check now uses `Object.hasOwn()` (#1256).** Discovery's companion claim
|
|
151
|
+
in the same issue — that a related export was dead code — was checked against real call sites
|
|
152
|
+
and refuted; that half closes as "working as designed".
|
|
153
|
+
- **Desktop notifications now carry a platform-aware label (#1254).** `detectPlatform()` drives
|
|
154
|
+
the OSC notify text so a Codex CLI session's notification reads differently from a Claude Code
|
|
155
|
+
session's.
|
|
156
|
+
- **A new session-start probe, `telemetry-flush-health`, surfaces telemetry-sender problems that
|
|
157
|
+
were previously silent (#1255).** It tail-reads the last `orchestrator.telemetry.flush` event:
|
|
158
|
+
a `sandbox:*` refusal reason now renders as a WARN banner instead of nothing, and an
|
|
159
|
+
unreadable ledger renders explicitly as `ledger-unreadable` rather than falling through to
|
|
160
|
+
silence. The reason string is bounded to 120 characters with control characters stripped.
|
|
161
|
+
- **The tests:src ratio census now resolves calls made through `fixtureGit`/`fixtureGitSpawn`
|
|
162
|
+
wrappers, including the `NO_BACKGROUND_WRITER` spread pattern, and strips comments before
|
|
163
|
+
reading a wrapped call's second positional argument (#1259).** Applicable call sites rose from
|
|
164
|
+
17 to 200 (measured 2026-09-07 on the release tree with
|
|
165
|
+
`node scripts/lib/validate/check-test-git-config-target.mjs .`) — the tokenizer previously
|
|
166
|
+
couldn't see wrapper calls at all — and the reporting floor was raised from 20 to 100 to match.
|
|
167
|
+
- **Four tests now pin Node 24's `err.url` behaviour using a real spawned `node` child process,
|
|
168
|
+
not an in-process `vitest` failure (#1260).** An in-process `ERR_MODULE_NOT_FOUND` never
|
|
169
|
+
carries a `url` field, so the previous test could not observe the behaviour it claimed to pin.
|
|
170
|
+
The standalone single-file copy path is confirmed inert / fails closed for the same case.
|
|
171
|
+
- **A Discovery premise was refuted before any code changed (#1257).** `vault-sync`'s
|
|
172
|
+
sub-package dependency pins looked accidental; they are intentional, because CI already
|
|
173
|
+
installs the sub-package separately. Documented in `skills/vault-sync/SKILL.md` §
|
|
174
|
+
Dependencies instead of "fixed".
|
|
175
|
+
- **`release.mjs`'s drift sweep now judges version literals as whole tokens and skips comment
|
|
176
|
+
prose and lockfile dependency rows; its history allowlist admits nine files whose only literal
|
|
177
|
+
is prose history of the 4.0.0 major (`CLAUDE.md`, its generated twin `AGENTS.md`,
|
|
178
|
+
`CONTRIBUTING.md`, `NOTICE`, `.husky/pre-push`, `site/llms-full.txt`,
|
|
179
|
+
`skills/architecture/references/domain-model.md`, `skills/autopilot/SKILL.md`,
|
|
180
|
+
`templates/_shared/journey-manifest.md`).** Measured 2026-09-07 mid-release: `4.0.0` matched
|
|
181
|
+
inside `>=24.0.0` in package.json, 72 third-party rows in package-lock.json, and `// pre-4.0.0`
|
|
182
|
+
comments — none a version surface. The sweep's detail line now carries the total hit count
|
|
183
|
+
instead of truncating at five, which is how the last four files had stayed hidden.
|
|
184
|
+
|
|
185
|
+
### Notes
|
|
186
|
+
|
|
187
|
+
- **4.0.1 is a PATCH: no public export changed shape.** `loadConfidentialNames()` keeps its
|
|
188
|
+
`string[] | null` contract; the new exports (`inspectConfidentialNames`, `SHARED_LIST_BOUNDS`,
|
|
189
|
+
`INGEST_LIST_BOUNDS`, `OPTIONAL_OBJECT_SECTIONS`, `stripComments`, `wrapperHasCwd`,
|
|
190
|
+
`checkTelemetryFlushHealth`, `renderBanner`, `TAIL_BYTES`, and `VALID_SESSION_PROFILES` in
|
|
191
|
+
`constants.mjs`) are additive. Reviewed by a 4-reviewer panel plus Codex gpt-6-astra on the
|
|
192
|
+
packed tarball; 2 P1 + 3 P2 Codex findings were fixed before the cut, not after.
|
|
193
|
+
- **Visible Codex picker confirmation (#1266) remains an operator step; not a release gate.**
|
|
194
|
+
- **The telemetry ingest server was redeployed for this release (#1261).** Operational step, not
|
|
195
|
+
a code change — rollback tag `telemetry-ingest:1.0.0-pre401` kept in place; health confirmed
|
|
196
|
+
post-restart.
|
|
197
|
+
|
|
10
198
|
## [4.0.0] - 2026-09-06
|
|
11
199
|
|
|
12
200
|
> **A MAJOR, because public surfaces are REMOVED** (see *Removed (BREAKING)* below).
|
|
@@ -978,7 +1166,8 @@ manual cleanup steps: [`docs/migration-v4.md`](docs/migration-v4.md).
|
|
|
978
1166
|
`npm pack --dry-run`, not a mock). The release leakage gate's `.orchestrator/`
|
|
979
1167
|
exclusion is narrowed to carve THIS directory back IN (`scripts/release.mjs`
|
|
980
1168
|
around line 319) — the operator's own `metrics/`, `debug/` artefacts and live
|
|
981
|
-
`*.lock` files stay excluded
|
|
1169
|
+
`*.lock` files stay excluded. `files[]` admits the directory, not a file list — what
|
|
1170
|
+
keeps the shipped set equal to the TRACKED policy set is the packlist test below, not npm. **The
|
|
982
1171
|
Wave-4 review panel found this test asserted only a FLOOR (≥ 6 files) while
|
|
983
1172
|
`package.json`'s `files[]` admits the WHOLE `.orchestrator/policy/` directory
|
|
984
1173
|
and the carve-out above matched the path anywhere in the string, not just at
|
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
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
|
Loop engineering for AI coding agents — turn ad-hoc sessions into a repeatable research → plan → wave-execute → close loop with verification gates. Runs on **Claude Code, Codex CLI, Cursor IDE, and [Pi](docs/pi-setup.md)**, as a community plugin (MIT, community-maintained) for solo devs and small teams.
|
|
9
9
|
|
|
10
|
-
The same
|
|
10
|
+
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
11
|
|
|
12
12
|
## Requirements
|
|
13
13
|
|
|
@@ -46,7 +46,7 @@ Setup guides: [Codex](docs/codex-setup.md) · [Cursor IDE](docs/cursor-setup.md)
|
|
|
46
46
|
/plugin update session-orchestrator@kanevry # Claude Code
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
Restart the harness afterwards, and re-run `npm install` in the plugin directory when the release adds dependencies. On
|
|
49
|
+
Restart the harness afterwards, and re-run `npm install` in the plugin directory when the release adds dependencies. On Cursor and Pi the upgrade is `git pull` in your clone followed by the same install script you originally ran. 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.
|
|
50
50
|
|
|
51
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
52
|
|
|
@@ -67,6 +67,8 @@ Deleting `.orchestrator/metrics/` deletes your session history. Nothing is sent
|
|
|
67
67
|
|
|
68
68
|
## Quick Start
|
|
69
69
|
|
|
70
|
+
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).
|
|
71
|
+
|
|
70
72
|
**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
73
|
|
|
72
74
|
**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 +107,15 @@ Everything else is opt-in. Full template: [`docs/session-config-template.md`](do
|
|
|
105
107
|
/close # verify every item, commit cleanly, file carryover issues for the rest
|
|
106
108
|
```
|
|
107
109
|
|
|
108
|
-
|
|
110
|
+
In Codex, invoke the same loop through the generated command skills:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
$session-orchestrator:session feature
|
|
114
|
+
$session-orchestrator:go
|
|
115
|
+
$session-orchestrator:close
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
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.
|
|
109
119
|
|
|
110
120
|
## Lifecycle and waves
|
|
111
121
|
|
|
@@ -161,16 +171,16 @@ The system is markdown-driven config plus a thin Node runtime — skills, comman
|
|
|
161
171
|
|
|
162
172
|
## What you get
|
|
163
173
|
|
|
164
|
-
Counts measured on 2026-09-
|
|
174
|
+
Counts measured on 2026-09-07 with the command in brackets:
|
|
165
175
|
|
|
166
176
|
- **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
177
|
- **25 slash commands** (`/session`, `/go`, `/close`, `/discovery`, `/plan`, `/grill`, `/evolve`, `/autopilot`, `/dispatcher`, `/reconcile`, `/eval`, `/test`, `/debug`, …) (`ls commands/*.md | wc -l`)
|
|
168
178
|
- **14 typed subagents** (code-implementer, test-writer, security-reviewer, session-reviewer, qa-strategist, architect-reviewer, …) (`ls agents/*.md | wc -l`)
|
|
169
179
|
- **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
180
|
- **26 always-on rule files** and **18 ADRs** carrying the reasoning behind the mechanisms (`ls .claude/rules/*.md | wc -l`, `ls docs/adr/*.md | wc -l`)
|
|
171
|
-
- **
|
|
181
|
+
- **667 vitest test files** run on every commit — 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
182
|
|
|
173
|
-
**Portable across harnesses by construction.**
|
|
183
|
+
**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
184
|
|
|
175
185
|
Full component inventory: [`docs/components.md`](docs/components.md). Version history and per-release detail: [CHANGELOG.md](CHANGELOG.md).
|
|
176
186
|
|
|
@@ -186,17 +196,15 @@ Full component inventory: [`docs/components.md`](docs/components.md). Version hi
|
|
|
186
196
|
|
|
187
197
|
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
198
|
|
|
189
|
-
## Recent highlights (v4.0.
|
|
199
|
+
## Recent highlights (v4.0.1)
|
|
190
200
|
|
|
191
|
-
|
|
201
|
+
4.0.1 is a patch on top of 4.0.0 — if you're upgrading from before 4.0, read [docs/migration-v4.md](docs/migration-v4.md) first; nothing below removes anything further. Highlights of the v4.0.1 line: Codex command entrypoints, a redesigned public site, and a review-hardened owner-privacy scanner — plus the sixteen follow-ups the 4.0.0 review left open:
|
|
192
202
|
|
|
193
|
-
- **Five skills, three commands and eight top-level scripts
|
|
194
|
-
-
|
|
195
|
-
- **
|
|
196
|
-
-
|
|
197
|
-
- **
|
|
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.
|
|
203
|
+
- **4.0.0 removed public surfaces and split the largest instruction files.** Five skills, three commands and eight top-level scripts were dropped on a measured two-signal rule (0 telemetry ∧ 0 fleet invocation over 90 days ∧ no runtime consumer, never a judgement call); `.claude/rules/` went 61 → 26 files; `session-start`, `session-end` and the wave loop keep every phase, with bodies moved into per-phase `references/` files. Full detail and upgrade steps: [docs/migration-v4.md](docs/migration-v4.md).
|
|
204
|
+
- **Codex command workflows are now selectable skills.** `scripts/generate-codex-skills.mjs` generates 51 entries (25 command-backed, 26 skill-backed); `go`, `close`, and 6 others that were previously absent from the skill surface (`harness-audit`, `portfolio`, `release`, `session`, `templates-ack`, `test`) are now discoverable and invocable as `$session-orchestrator:<name>`. Native `commands: []` stops the installer from separately aliasing the source commands into policy-less duplicates. The intercepting standard root manifest moved to [`.cursor-plugin/plugin.json`](.cursor-plugin/plugin.json) so it no longer shadows Codex's own manifest resolution (Refs #1263).
|
|
205
|
+
- **Public website redesigned**, including a German `/de` landing page.
|
|
206
|
+
- **Review-driven hardening.** The owner-privacy scanner (CP11) now fails CLOSED on a corrupted or env-configured-but-unresolvable confidential-names list instead of silently degrading to allow, and no longer prints the names-file path into logs; `check-unwired-features` splits 46 coordinator-invoked modules out of its actionable finding set (52 → 5 unreachable), so the report names what an operator can actually act on; a new session-start probe (`telemetry-flush-health`) surfaces when the sandbox refused a telemetry flush instead of that failure staying silent.
|
|
207
|
+
- **Sixteen follow-ups from the 4.0.0 review closed, and the patch itself was reviewed before the cut.** A four-reviewer panel plus an external Codex gpt-6-astra pass over the packed npm tarball found two P1 and three P2 defects in this session's own changes — a names-file path printed into the scanner's failing output, a deep-import contract change, a flag swallowed as a value, a substring match that hid a real finding, a comment that counted as a target — all fixed before publishing. The residual list lives in GitLab #1268–#1273.
|
|
200
208
|
|
|
201
209
|
Full list, with the evidence for each claim: [CHANGELOG.md](CHANGELOG.md).
|
|
202
210
|
|
|
@@ -204,7 +212,7 @@ Full list, with the evidence for each claim: [CHANGELOG.md](CHANGELOG.md).
|
|
|
204
212
|
|
|
205
213
|
| Feature | Claude Code | Codex CLI | Cursor IDE | Pi |
|
|
206
214
|
|---|---|---|---|---|
|
|
207
|
-
| All 25 commands | Native slash commands |
|
|
215
|
+
| All 25 commands | Native slash commands | Generated skills (`$session-orchestrator:<name>`) | Native `.cursor/commands` slash commands | Prompt templates |
|
|
208
216
|
| Parallel agents | Agent tool | Multi-agent roles | Sequential only | Sequential (parallel planned) |
|
|
209
217
|
| Session persistence | `.claude/STATE.md` | `.codex/STATE.md` | `.cursor/STATE.md` | `.pi/STATE.md` |
|
|
210
218
|
| Scope enforcement | PreToolUse hooks | Unavailable — pending a real `apply_patch` adapter | `preToolUse` + `beforeShellExecution` via cursor-hook-bridge; `afterFileEdit` post-hoc | `tool_call` bridge |
|
|
@@ -283,7 +291,7 @@ This plugin is a methodology turned into code. The reasoning behind it — why e
|
|
|
283
291
|
|
|
284
292
|
## Links
|
|
285
293
|
|
|
286
|
-
[Homepage](https://session-orchestrator.com) · [Privacy Policy](https://gotzendorfer.at/en/session-orchestrator/privacy) · [npm](https://www.npmjs.com/package/session-orchestrator)
|
|
294
|
+
[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
295
|
|
|
288
296
|
## License
|
|
289
297
|
|
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
|
-
|