session-orchestrator 3.21.0 → 3.23.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 +1 -1
- package/.cursor/commands/autopilot-multi.md +14 -0
- package/.cursor/commands/autopilot.md +14 -0
- package/.cursor/commands/bootstrap.md +14 -0
- package/.cursor/commands/brainstorm.md +14 -0
- package/.cursor/commands/close.md +13 -0
- package/.cursor/commands/contract-version-bump.md +14 -0
- package/.cursor/commands/debug.md +14 -0
- package/.cursor/commands/discovery.md +14 -0
- package/.cursor/commands/dispatcher.md +14 -0
- package/.cursor/commands/eli5.md +14 -0
- package/.cursor/commands/eval.md +14 -0
- package/.cursor/commands/evolve.md +14 -0
- package/.cursor/commands/go.md +14 -0
- package/.cursor/commands/grill.md +14 -0
- package/.cursor/commands/harness-audit.md +13 -0
- package/.cursor/commands/journey-audit.md +14 -0
- package/.cursor/commands/memory-cleanup.md +14 -0
- package/.cursor/commands/persona-panel.md +14 -0
- package/.cursor/commands/plan.md +14 -0
- package/.cursor/commands/portfolio.md +14 -0
- package/.cursor/commands/reconcile.md +14 -0
- package/.cursor/commands/release.md +14 -0
- package/.cursor/commands/repo-audit.md +13 -0
- package/.cursor/commands/session.md +14 -0
- package/.cursor/commands/spinout.md +14 -0
- package/.cursor/commands/sunset-review.md +14 -0
- package/.cursor/commands/templates-ack.md +14 -0
- package/.cursor/commands/test.md +14 -0
- package/.cursor/hooks.json +60 -0
- package/.cursor/rules/000-session-orchestrator.mdc +11 -2
- package/.cursor/rules/010-session-workflow.mdc +9 -1
- package/.cursor/rules/020-quality-gates.mdc +1 -1
- package/.cursor/rules/030-wave-execution.mdc +1 -1
- package/.cursor/rules/040-discovery.mdc +6 -6
- package/.cursor/rules/050-plan.mdc +10 -10
- package/.cursor/rules/070-gitlab-ops.mdc +73 -57
- package/.cursor/rules/080-ecosystem-health.mdc +7 -7
- package/.cursor/skills/architecture/SKILL.md +13 -0
- package/.cursor/skills/autopilot/SKILL.md +12 -0
- package/.cursor/skills/bootstrap/SKILL.md +12 -0
- package/.cursor/skills/brainstorm/SKILL.md +13 -0
- package/.cursor/skills/claude-md-drift-check/SKILL.md +13 -0
- package/.cursor/skills/contract-version-bump/SKILL.md +12 -0
- package/.cursor/skills/convergence-monitoring/SKILL.md +12 -0
- package/.cursor/skills/daily/SKILL.md +12 -0
- package/.cursor/skills/debug/SKILL.md +13 -0
- package/.cursor/skills/discovery/SKILL.md +13 -0
- package/.cursor/skills/dispatcher/SKILL.md +13 -0
- package/.cursor/skills/docs-orchestrator/SKILL.md +13 -0
- package/.cursor/skills/domain-model/SKILL.md +13 -0
- package/.cursor/skills/ecosystem-health/SKILL.md +13 -0
- package/.cursor/skills/eli5/SKILL.md +13 -0
- package/.cursor/skills/eval/SKILL.md +12 -0
- package/.cursor/skills/evolve/SKILL.md +13 -0
- package/.cursor/skills/frontmatter-guard/SKILL.md +13 -0
- package/.cursor/skills/gitlab-ops/SKILL.md +13 -0
- package/.cursor/skills/gitlab-portfolio/SKILL.md +13 -0
- package/.cursor/skills/grill/SKILL.md +13 -0
- package/.cursor/skills/hook-development/SKILL.md +13 -0
- package/.cursor/skills/journey-audit/SKILL.md +13 -0
- package/.cursor/skills/mcp-builder/SKILL.md +13 -0
- package/.cursor/skills/memory-cleanup/SKILL.md +12 -0
- package/.cursor/skills/mode-selector/SKILL.md +13 -0
- package/.cursor/skills/npm-publish/SKILL.md +12 -0
- package/.cursor/skills/peekaboo-driver/SKILL.md +13 -0
- package/.cursor/skills/persona-panel/SKILL.md +12 -0
- package/.cursor/skills/plan/SKILL.md +13 -0
- package/.cursor/skills/playwright-driver/SKILL.md +13 -0
- package/.cursor/skills/quality-gates/SKILL.md +13 -0
- package/.cursor/skills/reconcile/SKILL.md +12 -0
- package/.cursor/skills/repo-audit/SKILL.md +13 -0
- package/.cursor/skills/session-end/SKILL.md +13 -0
- package/.cursor/skills/session-plan/SKILL.md +13 -0
- package/.cursor/skills/session-start/SKILL.md +13 -0
- package/.cursor/skills/skill-creator/SKILL.md +13 -0
- package/.cursor/skills/spinout/SKILL.md +12 -0
- package/.cursor/skills/sunset-review/SKILL.md +13 -0
- package/.cursor/skills/test-runner/SKILL.md +13 -0
- package/.cursor/skills/tmux-layout/SKILL.md +13 -0
- package/.cursor/skills/ubiquitous-language/SKILL.md +13 -0
- package/.cursor/skills/using-orchestrator/SKILL.md +13 -0
- package/.cursor/skills/vault-mirror/SKILL.md +13 -0
- package/.cursor/skills/vault-sync/SKILL.md +13 -0
- package/.cursor/skills/wave-executor/SKILL.md +13 -0
- package/.cursor/skills/write-executable-plan/SKILL.md +13 -0
- package/.mcp.json +4 -1
- package/CHANGELOG.md +269 -0
- package/README.md +18 -15
- package/agents/AGENTS.md +23 -4
- package/agents/code-implementer.md +2 -1
- package/agents/db-specialist.md +2 -1
- package/agents/docs-writer.md +3 -1
- package/agents/eval-judge.md +1 -1
- package/agents/memory-proposal-collector.md +6 -4
- package/agents/session-reviewer.md +7 -1
- package/agents/test-writer.md +2 -1
- package/agents/ui-developer.md +2 -1
- package/commands/bootstrap.md +2 -2
- package/commands/close.md +3 -1
- package/commands/eli5.md +33 -0
- package/commands/go.md +1 -1
- package/commands/journey-audit.md +43 -0
- package/commands/release.md +5 -3
- package/commands/test.md +2 -2
- package/docs/USER-GUIDE.md +2 -2
- package/docs/ci-setup.md +14 -0
- package/docs/codex-setup.md +64 -0
- package/docs/components.md +7 -6
- package/docs/cursor-setup.md +26 -47
- package/docs/events-schema.md +76 -4
- package/docs/github-mirror-protection.md +197 -0
- package/docs/pi-setup.md +2 -0
- package/docs/rule-authoring.md +3 -1
- package/docs/scope-collision-guard.md +52 -5
- package/docs/session-config-reference.md +57 -12
- package/docs/session-config-template.md +4 -3
- package/docs/telemetry.md +22 -0
- package/hooks/_lib/lock-bootstrap.mjs +26 -16
- package/hooks/_lib/vcs-create-matcher.mjs +397 -38
- package/hooks/enforce-scope.mjs +64 -0
- package/hooks/hooks-codex.json +1 -1
- package/hooks/hooks-cursor.json +201 -20
- package/hooks/hooks-pi.json +1 -1
- package/hooks/hooks.json +12 -2
- package/hooks/on-session-end.mjs +237 -104
- package/hooks/on-session-start.mjs +404 -110
- package/hooks/on-stop.mjs +48 -9
- package/hooks/post-subagent-discovery-validator.mjs +34 -3
- package/hooks/post-tool-batch-wave-signal.mjs +11 -2
- package/hooks/pre-auq-clarity.mjs +787 -0
- package/hooks/pre-bash-issue-budget.mjs +133 -21
- package/hooks/pre-bash-sessions-ledger-guard.mjs +159 -0
- package/hooks/pre-bash-staging-fence.mjs +4 -0
- package/hooks/pre-task-scope-disjoint.mjs +368 -35
- package/hooks/skill-invocation-telemetry.mjs +21 -10
- package/monitors/monitors.json +6 -0
- package/package.json +3 -1
- package/pi/prompts/eli5.md +12 -0
- package/pi/prompts/journey-audit.md +12 -0
- package/rules/_index.md +9 -1
- package/rules/always-on/ask-via-tool.md +62 -0
- package/rules/always-on/bash-harness-pitfalls.md +168 -0
- package/rules/always-on/build-value.md +47 -0
- package/rules/always-on/cross-session-messaging.md +59 -0
- package/rules/always-on/loop-and-monitor.md +221 -0
- package/rules/always-on/parallel-sessions.md +142 -12
- package/rules/always-on/receiving-review.md +108 -0
- package/rules/always-on/test-value.md +40 -0
- package/rules/always-on/verification-before-completion.md +77 -0
- package/scripts/archive-closed-prds.mjs +258 -18
- package/scripts/auq-audit.mjs +825 -0
- package/scripts/autopilot.mjs +12 -8
- package/scripts/backfill-evidence-digest.mjs +376 -0
- package/scripts/cursor-install.mjs +89 -48
- package/scripts/export-hw-learnings.mjs +143 -2
- package/scripts/express-path.mjs +299 -0
- package/scripts/generate-cursor-adapter.mjs +253 -0
- package/scripts/github-protection-audit.mjs +358 -0
- package/scripts/lib/auq/clarity.mjs +1314 -0
- package/scripts/lib/auq/parse.mjs +1006 -0
- package/scripts/lib/auq/schema.mjs +1457 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +240 -16
- package/scripts/lib/build-live-signals.mjs +24 -5
- package/scripts/lib/ci-status-banner.mjs +221 -68
- package/scripts/lib/command-blocker.mjs +70 -0
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +32 -9
- package/scripts/lib/config/reconcile.mjs +79 -4
- package/scripts/lib/config/section-extractor.mjs +235 -36
- package/scripts/lib/config/vault-integration.mjs +12 -1
- package/scripts/lib/config-schema.mjs +9 -1
- package/scripts/lib/config.mjs +57 -6
- package/scripts/lib/convergence-monitor.mjs +13 -2
- package/scripts/lib/cursor-hook-bridge.mjs +443 -0
- package/scripts/lib/dispatcher/cli.mjs +2 -2
- package/scripts/lib/dispatcher/rank.mjs +4 -7
- package/scripts/lib/express-path.mjs +327 -0
- package/scripts/lib/file-lock.mjs +22 -4
- package/scripts/lib/gates/gate-full.mjs +84 -11
- package/scripts/lib/gates/gate-helpers.mjs +93 -21
- package/scripts/lib/git-config-drift.mjs +134 -5
- package/scripts/lib/host-identity.mjs +247 -2
- package/scripts/lib/instruction-budget-guard.mjs +31 -1
- package/scripts/lib/io.mjs +239 -0
- package/scripts/lib/issue-budget.mjs +284 -31
- package/scripts/lib/learnings/io.mjs +55 -10
- package/scripts/lib/learnings/schema.mjs +95 -28
- package/scripts/lib/lock-reaper.mjs +7 -1
- package/scripts/lib/locks/staging-fence-lock.mjs +5 -1
- package/scripts/lib/locks/state-md-lock.mjs +8 -1
- package/scripts/lib/memory-banner.mjs +5 -2
- package/scripts/lib/memory-paths.mjs +15 -6
- package/scripts/lib/mode-selector/scoring.mjs +53 -6
- package/scripts/lib/owner-interview.mjs +78 -32
- package/scripts/lib/peer-discovery.mjs +73 -22
- package/scripts/lib/platform.mjs +72 -9
- package/scripts/lib/plugin-root.mjs +143 -19
- package/scripts/lib/project-hygiene.mjs +104 -4
- package/scripts/lib/quality-gate.mjs +271 -13
- package/scripts/lib/reconcile/emitter.mjs +87 -19
- package/scripts/lib/reconcile/engine.mjs +281 -13
- package/scripts/lib/reconcile/idempotency.mjs +102 -1
- package/scripts/lib/reconcile/renderer.mjs +165 -7
- package/scripts/lib/reconcile/sanitize.mjs +40 -17
- package/scripts/lib/reconcile/writer.mjs +415 -84
- package/scripts/lib/resource-probe/evaluate.mjs +330 -149
- package/scripts/lib/resource-probe/probe-platform.mjs +35 -0
- package/scripts/lib/resource-probe.mjs +18 -2
- package/scripts/lib/rule-loader.mjs +37 -2
- package/scripts/lib/rules-sync.mjs +51 -8
- package/scripts/lib/scope-gate.mjs +90 -0
- package/scripts/lib/session-close-backfill.mjs +369 -28
- package/scripts/lib/session-discovery.mjs +13 -3
- package/scripts/lib/session-end/phase-skip.mjs +37 -4
- package/scripts/lib/session-end/worktree-cleanup.mjs +154 -7
- package/scripts/lib/session-id.mjs +30 -14
- package/scripts/lib/session-identity/own-session.mjs +159 -0
- package/scripts/lib/session-lock.mjs +85 -30
- package/scripts/lib/session-schema/normalizer.mjs +70 -3
- package/scripts/lib/session-schema/validator.mjs +40 -0
- package/scripts/lib/session-start-probes.mjs +608 -0
- package/scripts/lib/session-transition.mjs +277 -0
- package/scripts/lib/sessions-staleness-banner.mjs +124 -57
- package/scripts/lib/spiral-carryover.mjs +111 -9
- package/scripts/lib/state-md/frontmatter-mutators.mjs +41 -8
- package/scripts/lib/state-md/mission-status.mjs +467 -72
- package/scripts/lib/state-md/yaml-parser.mjs +145 -16
- package/scripts/lib/state-md.mjs +12 -2
- package/scripts/lib/telemetry/sync.mjs +46 -8
- package/scripts/lib/validate/check-agents.mjs +66 -0
- package/scripts/lib/validate/check-auq-clarity.mjs +274 -0
- package/scripts/lib/validate/check-cursor-adapter.mjs +102 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +24 -2
- package/scripts/lib/validate/check-doc-cli-commands.mjs +16 -32
- package/scripts/lib/validate/check-hooks-symmetry.mjs +59 -63
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +13 -22
- package/scripts/lib/validate/check-plugin-monitors.mjs +10 -4
- package/scripts/lib/validate/check-rules.mjs +153 -9
- package/scripts/lib/validate/check-test-value-bans.mjs +165 -17
- package/scripts/lib/validate/check-unwired-features.mjs +340 -32
- package/scripts/lib/validate/repo-files.mjs +275 -0
- package/scripts/lib/validate-vendored-rules.mjs +229 -7
- package/scripts/lib/vault-backfill/glab.mjs +91 -58
- package/scripts/lib/vault-backfill/manifest.mjs +28 -8
- package/scripts/lib/vault-mirror/process.mjs +99 -43
- package/scripts/lib/vault-mirror/telemetry.mjs +210 -0
- package/scripts/lib/vault-staleness-banner.mjs +76 -6
- package/scripts/lib/vault-status/board-writer.mjs +211 -10
- package/scripts/lib/vault-status/narrative-mirror.mjs +188 -8
- package/scripts/lib/vcs-repo-spec.mjs +182 -13
- package/scripts/lib/wave-executor/foreign-dispatch.mjs +832 -0
- package/scripts/lib/wave-resource-gate.mjs +67 -73
- package/scripts/lib/wave-transcript-tail.mjs +869 -0
- package/scripts/materialize-wave-scope.mjs +478 -0
- package/scripts/mcp-server.sh +11 -2
- package/scripts/parse-config.mjs +65 -0
- package/scripts/release.mjs +443 -122
- package/scripts/run-quality-gate.mjs +14 -0
- package/scripts/token-audit.sh +9 -2
- package/scripts/validate-plugin.mjs +6 -0
- package/scripts/validate-wave-scope.mjs +73 -1
- package/scripts/vault-backfill.mjs +32 -5
- package/scripts/vault-mirror.mjs +203 -34
- package/skills/_shared/monitor-patterns.md +31 -5
- package/skills/_shared/parallel-aware-auq.md +31 -25
- package/skills/_shared/parallel-aware-preamble.md +35 -4
- package/skills/_shared/platform-tools.md +11 -5
- package/skills/_shared/state-ownership.md +61 -8
- package/skills/autopilot/SKILL.md +5 -1
- package/skills/bootstrap/SKILL.md +5 -4
- package/skills/bootstrap/_shared-template.md +18 -10
- package/skills/bootstrap/deep-template.md +10 -6
- package/skills/bootstrap/fast-template.md +15 -8
- package/skills/bootstrap/standard-template.md +10 -6
- package/skills/brainstorm/SKILL.md +18 -18
- package/skills/brainstorm/soul.md +12 -0
- package/skills/claude-md-drift-check/checker.mjs +39 -11
- package/skills/discovery/SKILL.md +28 -24
- package/skills/dispatcher/SKILL.md +1 -1
- package/skills/eli5/SKILL.md +43 -0
- package/skills/evolve/SKILL.md +8 -9
- package/skills/gitlab-ops/SKILL.md +30 -26
- package/skills/grill/SKILL.md +6 -6
- package/skills/grill/soul.md +16 -0
- package/skills/journey-audit/SKILL.md +269 -0
- package/skills/memory-cleanup/SKILL.md +2 -2
- package/skills/npm-publish/SKILL.md +4 -4
- package/skills/peekaboo-driver/SKILL.md +18 -6
- package/skills/persona-panel/SKILL.md +1 -1
- package/skills/plan/SKILL.md +18 -16
- package/skills/plan/mode-feature.md +1 -1
- package/skills/plan/mode-new.md +35 -23
- package/skills/plan/soul.md +12 -0
- package/skills/reconcile/SKILL.md +44 -4
- package/skills/session-end/SKILL.md +70 -24
- package/skills/session-end/metrics-collection.md +7 -4
- package/skills/session-end/phase-3-6-tail.md +48 -5
- package/skills/session-end/phase-3-7a-recommendations.md +16 -2
- package/skills/session-plan/SKILL.md +6 -1
- package/skills/session-plan/wave-template.md +1 -0
- package/skills/session-start/SKILL.md +96 -48
- package/skills/session-start/phase-2-5-docs-planning.md +8 -8
- package/skills/session-start/phase-4-5-resource-health.md +82 -19
- package/skills/session-start/phase-7-5-mode-selector.md +15 -3
- package/skills/session-start/phase-8-5-express-path.md +77 -12
- package/skills/session-start/soul.md +110 -0
- package/skills/test-runner/SKILL.md +2 -2
- package/skills/using-orchestrator/SKILL.md +1 -1
- package/skills/vault-sync/validator.mjs +31 -0
- package/skills/wave-executor/SKILL.md +4 -2
- package/skills/wave-executor/circuit-breaker.md +34 -9
- package/skills/wave-executor/wave-loop.md +129 -24
- package/skills/write-executable-plan/SKILL.md +6 -6
- package/templates/_shared/journey-manifest.md +110 -0
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +0 -8
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +0 -8
- package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +0 -8
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +0 -8
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +0 -8
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +0 -8
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +0 -10
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +0 -8
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +0 -3
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +0 -11
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +0 -9
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +0 -8
- package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +0 -7
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +0 -9
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +0 -11
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +0 -3
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +0 -3
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +0 -11
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +0 -11
- package/skills/vault-sync/tests/schema-drift.test.mjs +0 -133
- package/templates/_shared/rules/parallel-sessions.md +0 -77
package/commands/bootstrap.md
CHANGED
|
@@ -6,7 +6,7 @@ argument-hint: "[--upgrade <tier>]"
|
|
|
6
6
|
|
|
7
7
|
# Bootstrap
|
|
8
8
|
|
|
9
|
-
**TL;DR — for first-time users:** Run `/bootstrap` with no flags. The skill auto-detects the right tier (fast/standard/deep) from your repo, recommends one with a one-line reason,
|
|
9
|
+
**TL;DR — for first-time users:** Run `/bootstrap` with no flags. The skill auto-detects the right tier (fast/standard/deep) from your repo, recommends one with a one-line reason, then walks a **fixed questionnaire** — tier/stack (1–2 prompts), owner persona (5), dispatcher autonomy (1); **7–9 prompts** on a first-run full bootstrap. Bestätigen → fertig. Keine weiteren Schritte.
|
|
10
10
|
|
|
11
11
|
The flags below cover special cases (re-adopting an existing repo, upgrading a tier, syncing rules). If you don't recognize the case in the description, you don't need the flag.
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@ This is the path 95 % of users want.
|
|
|
22
22
|
|
|
23
23
|
| Invocation | Behavior |
|
|
24
24
|
|------------|----------|
|
|
25
|
-
| `/bootstrap` | Auto-detect tier (fast / standard / deep) from repo context. Present recommendation via `AskUserQuestion` with options to confirm or override.
|
|
25
|
+
| `/bootstrap` | Auto-detect tier (fast / standard / deep) from repo context. Present recommendation via `AskUserQuestion` with options to confirm or override. Tier/stack: 1–2 questions; first-run full bootstrap adds owner interview (5, `owner-interview.mjs`) + dispatcher-autonomy capture (1). Then scaffold files + commit. |
|
|
26
26
|
|
|
27
27
|
What the user sees:
|
|
28
28
|
|
package/commands/close.md
CHANGED
|
@@ -10,7 +10,9 @@ The user wants to end the current session.
|
|
|
10
10
|
**Pre-check before invoking session-end:** Determine `<state-dir>` from the current platform (`.claude/`, `.codex/`, `.cursor/`, or `.pi/`). Check if `<state-dir>/STATE.md` exists and read its `status` field. Three exit conditions:
|
|
11
11
|
|
|
12
12
|
1. **STATE.md does not exist:** Read Session Config to check `persistence`. If `persistence: false`, inform the user: "Session completed (persistence is off — STATE.md was never created). Use `/session` to start a new session." If `persistence: true` (or Session Config unavailable), inform the user: "No active session found. Use `/session` to start a session first." Either way, stop.
|
|
13
|
-
2. **STATE.md exists and `status: completed`:**
|
|
13
|
+
2. **STATE.md exists and `status: completed`:** `status: completed` alone is NOT proof that session-end's Phase 3.7 writer ever ran (#429) — the field can be set by hand, or by any path that stops short of that write. Before treating the prior close as final, read STATE.md frontmatter's `session` field (the semantic session id, e.g. `main-2026-05-27-session-1`; see `skills/_shared/state-ownership.md`) and check whether `.orchestrator/metrics/sessions.jsonl` contains a record whose `session_id` equals it (`grep -c` for the literal id, or parse each line as JSON and compare `session_id`).
|
|
14
|
+
- **A matching record exists:** Inform the user: "Previous session was already finalized by session-end. Start a new session with `/session`, or inspect `<state-dir>/STATE.md` to review the prior close. (Note: if this is unexpected after an Express Path session, `commands/go.md` should have auto-invoked /close — check that STATE.md `## Deviations` contains an `Express path:` entry.)" and stop.
|
|
15
|
+
- **No `session` field is present in STATE.md frontmatter, OR no matching record exists:** Warn the user: "STATE.md completed ohne Ledger-Record — session-end wurde vorher nie ausgeführt (#429)." Do NOT stop — proceed to invoke the session-end skill exactly as in exit condition 3, so the missing record gets written this time. (The SessionEnd hook's `backfillCompletedFromStateMd` — `scripts/lib/session-close-backfill.mjs` — independently self-heals this same gap on a later session's teardown; this Pre-Check branch covers the case where /close is re-run before that hook has had a chance to fire.)
|
|
14
16
|
3. **STATE.md exists and `status: active` or `status: paused`:** Proceed to invoke the session-end skill.
|
|
15
17
|
|
|
16
18
|
For any other `status` value (e.g., `idle`), warn the user: "Unexpected session status `<value>`. Inspect `<state-dir>/STATE.md` and use `/session` to reset if needed." and stop.
|
package/commands/eli5.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Say the last answer again in plain words — same facts, in the order the operator needs them. Optional topic argument.
|
|
3
|
+
argument-hint: "[topic]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# eli5
|
|
7
|
+
|
|
8
|
+
Invokes the `eli5` skill (`skills/eli5/SKILL.md`). Restates my last substantial output — or the named topic — for someone who knows this project but did not watch the last ten minutes of it.
|
|
9
|
+
|
|
10
|
+
## Argument Validation
|
|
11
|
+
|
|
12
|
+
The optional argument is a topic, in prose. If absent, the target is my own last substantial output in this conversation; if there is none yet, say so rather than picking a topic for him.
|
|
13
|
+
|
|
14
|
+
Examples:
|
|
15
|
+
- `/eli5` — restate what I just said
|
|
16
|
+
- `/eli5 warum ist der Regel-Korpus voll?` — explain that, grounded in what this session measured
|
|
17
|
+
|
|
18
|
+
## Behavior
|
|
19
|
+
|
|
20
|
+
1. **Resolve the target** — last output, or `$ARGUMENTS`.
|
|
21
|
+
2. **Ground it** — prefer what this session already measured over recall, and name where it came from. Never measured here → say so.
|
|
22
|
+
3. **Restate** — consequence first (*must I act, and what if I don't?*), then the facts in the order he needs them.
|
|
23
|
+
4. **Check before sending** — every greppable token from the original still present; every noun the system does not contain gone.
|
|
24
|
+
|
|
25
|
+
## The limit that outranks the command
|
|
26
|
+
|
|
27
|
+
**Simplifying removes words, never facts.** A dropped path, number, error code, identifier, or instruction to act is data loss, not simplification — `skills/session-start/soul.md` § "Never traded for brevity" outranks brevity here as everywhere. And no invented pictures: say what happens, never what it is "like".
|
|
28
|
+
|
|
29
|
+
## Related
|
|
30
|
+
|
|
31
|
+
- `skills/eli5/SKILL.md` — the skill, in full
|
|
32
|
+
- `.claude/rules/ask-via-tool.md` § AUQ-006 — plain words, real things
|
|
33
|
+
- `skills/session-start/soul.md` § Register — the canonical register statement
|
package/commands/go.md
CHANGED
|
@@ -10,7 +10,7 @@ The user has approved the session plan. Begin execution immediately.
|
|
|
10
10
|
|
|
11
11
|
## Express Path Detection
|
|
12
12
|
|
|
13
|
-
Before invoking the wave-executor, check the conversation context for the Express Path activation banner
|
|
13
|
+
Before invoking the wave-executor, check the conversation context for the Express Path activation banner — printed by `node scripts/express-path.mjs` in session-start Phase 8.5, and carried through session-plan's Short-Circuit (#1146):
|
|
14
14
|
|
|
15
15
|
```
|
|
16
16
|
Express path activated — <N> tasks, coordinator-direct, no inter-wave checks.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Outside-in product audit as a deep session — 7 read-only roles check what the site promises against what the code does, what a user experiences, what arrives by mail, and what the data says is used. Writes a dossier; needs a per-repo journey-manifest.
|
|
3
|
+
argument-hint: "[manifest-path]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Journey Audit
|
|
7
|
+
|
|
8
|
+
Invokes the `journey-audit` skill (`skills/journey-audit/SKILL.md`). Dispatches roles R1–R7 against
|
|
9
|
+
the repo's journey manifest, re-verifies every P0 claim in the coordinator thread, and writes
|
|
10
|
+
`docs/audits/YYYY-MM-DD-user-journey-audit.md`.
|
|
11
|
+
|
|
12
|
+
Complements `/discovery` rather than replacing it: discovery checks code quality inside-out,
|
|
13
|
+
journey-audit checks product truth outside-in.
|
|
14
|
+
|
|
15
|
+
## Argument Validation
|
|
16
|
+
|
|
17
|
+
The optional argument is a path to the manifest, overriding the default
|
|
18
|
+
`.orchestrator/journey-manifest.md`. Use it for a second manifest (e.g. a staging variant) or when
|
|
19
|
+
the repo keeps it elsewhere.
|
|
20
|
+
|
|
21
|
+
- `/journey-audit` — uses `.orchestrator/journey-manifest.md`
|
|
22
|
+
- `/journey-audit .orchestrator/journey-manifest.staging.md` — uses that file instead
|
|
23
|
+
|
|
24
|
+
If the argument names a file that does not exist, say so and stop — do NOT silently fall back to
|
|
25
|
+
the default path, because auditing the wrong manifest produces findings that look valid and are not.
|
|
26
|
+
|
|
27
|
+
## Behavior
|
|
28
|
+
|
|
29
|
+
1. **Gates** — bootstrap gate, then the manifest HARD-GATE: no manifest → refuse and point at
|
|
30
|
+
`templates/_shared/journey-manifest.md`; no filled `## SAFETY` block → run without R5 and say so.
|
|
31
|
+
2. **Peer-session check** — announce the audit before dispatching (`.claude/rules/parallel-sessions.md`).
|
|
32
|
+
3. **Wave** — R1–R7 in parallel, all read-only except R5, each fed from the manifest.
|
|
33
|
+
4. **Coordinator re-verification** — every P0 re-checked with the coordinator's own command before
|
|
34
|
+
it enters the dossier. This step is not optional and not delegable.
|
|
35
|
+
5. **Dossier + closing AUQ** — fixed section order, then fix-wave packages (multiSelect) and an
|
|
36
|
+
optional issue batch via `skills/gitlab-ops/SKILL.md` label taxonomy.
|
|
37
|
+
|
|
38
|
+
## Related
|
|
39
|
+
|
|
40
|
+
- `skills/journey-audit/SKILL.md` — the skill, in full
|
|
41
|
+
- `templates/_shared/journey-manifest.md` — the per-repo manifest template (SAFETY block gates R5)
|
|
42
|
+
- `docs/prd/2026-08-28-journey-audit-skill.md` — the PRD, incl. the first-run evidence
|
|
43
|
+
- `commands/discovery.md` — the inside-out counterpart
|
package/commands/release.md
CHANGED
|
@@ -32,13 +32,13 @@ The same reading shows the other half: the GitHub releases for 3.15/3.18/3.19/3.
|
|
|
32
32
|
4. **Preflight.** `node scripts/release.mjs --check --json` — every row green. This runs *after* step 2, never before: `--check` derives its target from `package.json`, so on the pre-bump version the registry- and tag-collision rows are red by construction.
|
|
33
33
|
5. **Gate, commit, push.** Full quality gate, then commit and push to **both** remotes.
|
|
34
34
|
6. **CI green — on the commit that will be published.** Not on its predecessor. A green pipeline from before step 5's commit is evidence about a different tree.
|
|
35
|
-
7. **Publish.** `node scripts/release.mjs --publish` —
|
|
35
|
+
7. **Publish.** `node scripts/release.mjs --publish` — 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.
|
|
36
36
|
|
|
37
37
|
Steps 2–7 are one continuous act. A release left parked between step 5 and step 7 is exactly the `3.18.0` state: every surface says released, the registry disagrees.
|
|
38
38
|
|
|
39
39
|
## Abort criteria
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
**Before a target-confirmed npm publish receipt:** stop and report. Do not work around, do not "fix it after the publish" — an npm publish is not revocable.
|
|
42
42
|
|
|
43
43
|
| Signal | Why it stops the release |
|
|
44
44
|
|---|---|
|
|
@@ -51,7 +51,9 @@ Stop and report. Do not work around, do not "fix it after the publish" — an np
|
|
|
51
51
|
|
|
52
52
|
## After
|
|
53
53
|
|
|
54
|
-
`--publish`
|
|
54
|
+
`--publish` reports either **Release complete** or **Post-publish reconciliation required**. The latter means npm accepted the target release but registry propagation, tag/push, GitHub-release handling, or the live-site check still needs repair; a tag/push failure explicitly skips its dependent GitHub-release and site steps. **Do not rerun `--publish`**: reconcile the listed state directly, because a second publish cannot replace the immutable version. Exit `1` means a preflight/check failure or post-publish reconciliation is required; exit `2` remains a system/usage failure before the receipt.
|
|
55
|
+
|
|
56
|
+
After a complete release, `--publish` prints the remaining manual items (token rotation, async gallery indexing). Rotate the npm token — write tokens are short-lived by policy, and a token that transited a log or a chat is burned.
|
|
55
57
|
|
|
56
58
|
## See Also
|
|
57
59
|
|
package/commands/test.md
CHANGED
|
@@ -59,9 +59,9 @@ Present the user with a structured choice via `AskUserQuestion`:
|
|
|
59
59
|
AskUserQuestion({
|
|
60
60
|
questions: [{
|
|
61
61
|
question: "Which test profile should be run?",
|
|
62
|
-
header: "
|
|
62
|
+
header: "Profil",
|
|
63
63
|
options: [
|
|
64
|
-
{ label: "smoke (Recommended)", description: "Quick sanity pass — key flows, axe critical/serious, console errors." },
|
|
64
|
+
{ label: "smoke (Recommended)", description: "Quick sanity pass — key flows, axe critical/serious, console errors. The fastest of the four; run it first." },
|
|
65
65
|
{ label: "full", description: "All checks at full depth — slower, used before release." },
|
|
66
66
|
{ label: "a11y", description: "Accessibility-focused pass — axe-core exhaustive scan." },
|
|
67
67
|
{ label: "onboarding", description: "Onboarding step-count + Liquid Glass conformance checks." }
|
package/docs/USER-GUIDE.md
CHANGED
|
@@ -36,7 +36,7 @@ Session Orchestrator is a Claude Code and Codex plugin that brings structured, w
|
|
|
36
36
|
|
|
37
37
|
#### Claude Code
|
|
38
38
|
|
|
39
|
-
Claude Code
|
|
39
|
+
Claude Code also has a `claude plugin` shell CLI (`claude plugin --help` lists subcommands). For end-user installation, use the slash commands inside a running session — run these in the Claude Code prompt:
|
|
40
40
|
|
|
41
41
|
**From GitHub (recommended for end users):**
|
|
42
42
|
|
|
@@ -992,7 +992,7 @@ Enforcement levels (configured via `enforcement`):
|
|
|
992
992
|
|
|
993
993
|
### Prerequisites
|
|
994
994
|
|
|
995
|
-
|
|
995
|
+
The enforcement hooks (`hooks/enforce-scope.mjs`, `hooks/enforce-commands.mjs`) do not call `requireJq()` — they run without `jq`. `jq` is required by `scripts/validate-plugin.mjs` and by the wave-scope shell snippets in `skills/wave-executor/` (e.g. deriving `blockedCommands` and reading Session Config). Install `jq` when you run those tools or snippets:
|
|
996
996
|
|
|
997
997
|
- **macOS**: `brew install jq`
|
|
998
998
|
- **Ubuntu/Debian**: `sudo apt-get install jq`
|
package/docs/ci-setup.md
CHANGED
|
@@ -14,6 +14,20 @@ project-level Job Token allowlists are explicitly configured — an admin action
|
|
|
14
14
|
in the foreign project that cannot be scripted from here. The fix is a deploy
|
|
15
15
|
token or PAT stored as the masked CI variable `SCHEMA_DRIFT_TOKEN`.
|
|
16
16
|
|
|
17
|
+
> **Current decision (2026-08-28, #1062): amber is the accepted normal state.**
|
|
18
|
+
> `glab variable list` on this project returns zero CI variables — no
|
|
19
|
+
> `SCHEMA_DRIFT_TOKEN` is set — so every pipeline runs the job to exit 3
|
|
20
|
+
> (`NOT VERIFIED`) and `pipeline-gate` prints the amber line. This is a
|
|
21
|
+
> deliberate operator choice, not a defect: the job is correctly fail-loud
|
|
22
|
+
> (exit taxonomy below), the vendored schema is compared manually at each
|
|
23
|
+
> baseline refresh (#1100), and no token is rotated for a check that runs
|
|
24
|
+
> against a private project of our own. Session-start's CI banner keeps
|
|
25
|
+
> reporting the soft failure on purpose (`allow_failure` jobs are invisible
|
|
26
|
+
> at pipeline level, which is what that banner exists to surface). Revisit
|
|
27
|
+
> trigger: the first time a vendored-schema drift ships unnoticed, or when
|
|
28
|
+
> the baseline gains a public mirror — then set the token (Option A below)
|
|
29
|
+
> and flip `SCHEMA_DRIFT_OPTIONAL` at both sites.
|
|
30
|
+
|
|
17
31
|
### Required CI variable
|
|
18
32
|
|
|
19
33
|
| Variable | Type | Mask | Protect | Value |
|
package/docs/codex-setup.md
CHANGED
|
@@ -30,6 +30,42 @@ codex plugin list --available --json
|
|
|
30
30
|
|
|
31
31
|
It operates only through public Codex plugin commands; hook trust remains untouched.
|
|
32
32
|
|
|
33
|
+
### Short-Form Marketplace Add (Verified 2026-08-28, codex-cli 0.141.0)
|
|
34
|
+
|
|
35
|
+
`codex plugin marketplace add --help` documents a short remote form:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
codex plugin marketplace add owner/repo --ref main
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Tested against this repo in a scoped throwaway `CODEX_HOME` (2026-08-28, codex-cli 0.141.0):
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
$ codex plugin marketplace add Kanevry/session-orchestrator --json
|
|
45
|
+
{
|
|
46
|
+
"marketplaceName": "kanevry",
|
|
47
|
+
"installedRoot": ".../.tmp/marketplaces/kanevry",
|
|
48
|
+
"alreadyAdded": false
|
|
49
|
+
}
|
|
50
|
+
$ echo $?
|
|
51
|
+
0
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This succeeds and clones the repo via git — no `--ref`/`owner/repo` string is needed beyond the short form; the resulting marketplace name (`kanevry`) is read from `.claude-plugin/marketplace.json`'s `name` field, not from the `owner/repo` argument.
|
|
55
|
+
|
|
56
|
+
**However**, the subsequent install step fails identically for both this short remote form *and* the long-form local install documented above (`codex plugin marketplace add "$PWD"`, same as `scripts/codex-install.mjs` runs):
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
$ codex plugin add session-orchestrator@kanevry --json
|
|
60
|
+
Error: plugin `session-orchestrator` was not found in marketplace `kanevry`
|
|
61
|
+
$ echo $?
|
|
62
|
+
1
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`codex plugin list --available --json --marketplace kanevry` returns `{"installed": [], "available": []}` for both forms — the marketplace is configured, but no plugin is discoverable inside it, contradicting item 1 under "Understand the Three States" below. A synthetic marketplace root mirroring this repo's exact layout (`.codex-plugin/plugin.json` directly at root, no `.claude-plugin/marketplace.json`) reproduces the same empty discovery; by contrast, a directory scanned via a `<root>/plugins/<name>/.codex-plugin/plugin.json` layout (the shape `codex plugin marketplace add --help`'s `--sparse plugins/foo` example implies, and the shape this host's own pre-existing `local` marketplace uses via `~/plugins/session-orchestrator`) resolves correctly. This suggests codex's own plugin-discovery convention expects a `plugins/<name>/` marketplace layout that this repo's flat root does not provide, though `.claude-plugin/marketplace.json` (Claude Code's schema) is independently accepted as "a supported manifest" at the `marketplace add` step, without resolving to a discoverable Codex plugin at `list` time.
|
|
66
|
+
|
|
67
|
+
**Caveat that limits this finding:** this host's installed codex-cli is **0.141.0**, older than the "0.144.4 or newer" prerequisite this guide states above. This failure was not re-verified against 0.144.4+, so it may be specific to running below the documented minimum rather than a defect in this repo's layout on a supported version. Until re-verified on 0.144.4+, treat both the short remote form and the long-form local install (`node scripts/codex-install.mjs`) as **unconfirmed end-to-end on this host** — the `marketplace add` step succeeds either way, but `plugin add` does not, on 0.141.0. Do not elevate either form to a README-level recommended command until a `plugin add` success is measured and dated.
|
|
68
|
+
|
|
33
69
|
## Understand the Three States
|
|
34
70
|
|
|
35
71
|
Codex reports three distinct states that must not be conflated:
|
|
@@ -115,9 +151,12 @@ After installation and hook review, start a fresh task. Session Orchestrator exp
|
|
|
115
151
|
| Config file | `CLAUDE.md` | `AGENTS.md` |
|
|
116
152
|
| Task tracking | TaskCreate/TaskUpdate | Text-based checklists |
|
|
117
153
|
| Hook root | `$CLAUDE_PLUGIN_ROOT` | native `${PLUGIN_ROOT}` plus `CODEX_PLUGIN_ROOT` compatibility export |
|
|
154
|
+
| MCP server root | `$CLAUDE_PLUGIN_ROOT`, injected into the server process | resolved by `.mcp.json` itself — Codex expands no root variable inside `mcpServers.args` and injects none into the MCP child's environment |
|
|
118
155
|
|
|
119
156
|
Both platforms share session history and learnings through `.orchestrator/metrics/`.
|
|
120
157
|
|
|
158
|
+
`CODEX_PLUGIN_ROOT` is **session-orchestrator's own compatibility export, not a variable Codex provides.** The hook wrapper in `hooks/hooks-codex.json` assigns it from Codex's native `${PLUGIN_ROOT}` so that shared code (`scripts/lib/plugin-root.mjs`) can read one name on every harness. Nothing outside a hook command string sets it — in particular an MCP server started by Codex inherits neither `CODEX_PLUGIN_ROOT` nor `PLUGIN_ROOT`. That is why `.mcp.json` resolves the plugin root on its own instead of relying on a harness-provided variable: it tries `CLAUDE_PLUGIN_ROOT`, `CODEX_PLUGIN_ROOT`, `PLUGIN_ROOT`, then `git rev-parse --show-toplevel`, then asks Node to resolve the installed `session-orchestrator` package (which reaches `resolvePluginRoot()` and with it the `CURSOR_RULES_DIR` / `PI_PLUGIN_ROOT` roots too), and as the last tier scans the client plugin caches (`${CODEX_HOME:-$HOME/.codex}` and `$HOME/.claude` under `plugins/cache/*/session-orchestrator/*`, accepted only when the copy's `package.json` names `session-orchestrator`; newest by mtime wins). The tier order is documented once, in `scripts/lib/plugin-root.mjs` § TIER ORDER, and `.mcp.json` mirrors it. Each candidate must actually contain `scripts/mcp-server.sh` before it is used.
|
|
159
|
+
|
|
121
160
|
## Platform Limitations
|
|
122
161
|
|
|
123
162
|
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.
|
|
@@ -140,3 +179,28 @@ codex plugin list --available --json
|
|
|
140
179
|
- **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.
|
|
141
180
|
- **Agent dispatch fails:** verify Codex multi-agent support and inspect the bundled or project-level role TOMLs.
|
|
142
181
|
- **Hooks report that Node is unavailable:** expose Node 24+ on the Codex hook PATH or set `SO_NODE_BIN` to the absolute Node executable.
|
|
182
|
+
- **`MCP startup failed: handshaking with MCP server failed: connection closed: initialize response`:** the MCP entrypoint could not locate the plugin, or could not run. Read the server's **stderr** — since GH#64 it names itself. Two diagnostics exist:
|
|
183
|
+
- `session-orchestrator: cannot locate the plugin root` — no plugin-root variable was set, the working directory was outside any git checkout, no cached copy of the plugin was found, and Node could not resolve an installed `session-orchestrator` package. Fix: reinstall the plugin so a cached copy exists (see *Where the plugin actually lives* below), or add `CODEX_PLUGIN_ROOT` (or `CLAUDE_PLUGIN_ROOT`) pointing at the plugin directory to that server's `env` block. Do not expect Codex to supply the variable — see the note under *Key Differences* above.
|
|
184
|
+
- `session-orchestrator: 'jq' not found in PATH` — the plugin was found but `jq` is missing. Fix: install `jq` and restart Codex. (Before GH#64 this case wrote a JSON-RPC error to *stdout* with `id: null`, which is not a valid `initialize` response either, so a missing `jq` and a missing plugin were indistinguishable from the client side.)
|
|
185
|
+
- **The MCP tools answer `Error: not inside a git repository`:** expected, not a failure. The handshake succeeded; `session_config` and `session_metrics` read the *project* you are working in, so they need Codex's working directory to be inside a git repository. Start Codex from the project, or `cd` into it.
|
|
186
|
+
- **"another session holds the lock" right after `resume`/`compact` in Codex:** the session lock appears to be self-collision across a resume/compact boundary rather than a real second session. Cause: before v3.23.0 (unreleased at time of writing), `parseSessionId()`'s UUID matcher was pinned to version nibble `4` (Claude Code's format), so every native session id Codex CLI mints — UUIDv7 — failed to parse; `hooks/on-session-start.mjs` fell through to a freshly generated `randomUUID()` on each `SessionStart`, and the new mint then collided with the lock the previous mint still held (Kanevry#66 / #1091). Fixed in v3.23.0 by widening `UUID_RE` in `scripts/lib/session-id.mjs` to accept any RFC 9562 UUID version 1–8, not only `4`. Check: `node -e "import('./scripts/lib/session-id.mjs').then(m=>console.log(m.parseSessionId('017f22e2-79b0-7cc3-98c4-dc0c0c07398f')))"` must print `format: 'uuid'` and `version: 7` (verified 2026-08-28 @ 30940cb — it does).
|
|
187
|
+
|
|
188
|
+
### Where the plugin actually lives (measured 2026-08-28, codex-cli 0.141.0)
|
|
189
|
+
|
|
190
|
+
Three facts explain why launching Codex from `$HOME` used to kill the MCP server before `initialize` (GH Kanevry/session-orchestrator#64), and none of them is guessable from the docs:
|
|
191
|
+
|
|
192
|
+
1. **Codex copies the plugin; it does not run it from your clone.** A marketplace install lands at `<CODEX_HOME>/plugins/cache/<marketplace>/<plugin>/<version>/` — measured here as `~/.codex/plugins/cache/local/session-orchestrator/3.22.0+codex.20260822193811/`, a full self-contained tree with its own `.mcp.json`, `package.json` and `scripts/mcp-server.sh`. Claude Code uses the same shape under `~/.claude/plugins/cache/`.
|
|
193
|
+
2. **The MCP child gets no plugin-root variable and no working directory of its own.** Probing a registered MCP server launched from `/tmp` showed `PWD=/private/tmp` (the launch directory, verbatim) and `CLAUDE_PLUGIN_ROOT`, `CODEX_PLUGIN_ROOT`, `PLUGIN_ROOT` and `CODEX_HOME` **all unset**; `codex mcp list` prints `Env: -` and `Cwd: -` for the entry. `HOME` *is* set. So from `$HOME` — not a git repository — every locator the entrypoint had was blind, and `$(git rev-parse --show-toplevel)` collapsed the path to `/scripts/mcp-server.sh`.
|
|
194
|
+
3. **Codex does not expand `${...}` in the registered command, and the registration is a snapshot.** `codex mcp list` shows the launch string verbatim, `${CLAUDE_PLUGIN_ROOT:-…}` and all — bash expands it, not Codex. It comes from the *cached* `.mcp.json`, taken at install time: a fix committed to this repo reaches an existing install only after a reinstall.
|
|
195
|
+
|
|
196
|
+
The entrypoint therefore scans those cache roots itself, matching on `package.json` `"name": "session-orchestrator"` rather than on the directory name, and preferring the most recently installed copy. A directory that merely *sits* under a `session-orchestrator/` marketplace folder is rejected.
|
|
197
|
+
|
|
198
|
+
**If your install predates this fix, reinstall — the fix cannot reach a cached copy on its own:**
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
codex plugin marketplace add Kanevry/session-orchestrator
|
|
202
|
+
codex mcp list | grep session-orchestrator # the launch string should mention plugins/cache
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
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.
|
|
206
|
+
|
package/docs/components.md
CHANGED
|
@@ -7,8 +7,8 @@ Detailed component inventory and architecture reference for Session Orchestrator
|
|
|
7
7
|
```mermaid
|
|
8
8
|
flowchart LR
|
|
9
9
|
USER([Operator]) -->|invokes /session| COORD[Coordinator]
|
|
10
|
-
COORD -->|reads| SK[Skills<br/>
|
|
11
|
-
COORD -->|invokes| CMD[Commands<br/>
|
|
10
|
+
COORD -->|reads| SK[Skills<br/>48 user-facing]
|
|
11
|
+
COORD -->|invokes| CMD[Commands<br/>28 slash-cmds]
|
|
12
12
|
COORD -->|dispatches| AG[Agents<br/>15 typed sub-agents]
|
|
13
13
|
AG -.->|parallel waves| W1[code-implementer]
|
|
14
14
|
AG -.-> W2[test-writer]
|
|
@@ -18,22 +18,23 @@ flowchart LR
|
|
|
18
18
|
COORD -->|writes| METRIC[.orchestrator/metrics/<br/>sessions · learnings · events]
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
## Skills (
|
|
21
|
+
## Skills (48 user-facing)
|
|
22
22
|
|
|
23
23
|
- **Lifecycle:** `session-start`, `session-plan`, `wave-executor`, `session-end`, `quality-gates`, `using-orchestrator`
|
|
24
24
|
- **Authoring:** `skill-creator`, `mcp-builder`, `hook-development`, `frontmatter-guard`, `contract-version-bump`
|
|
25
|
-
- **Planning & discovery:** `plan`, `discovery`, `repo-audit`, `brainstorm`, `write-executable-plan`, `debug`, `claude-md-drift-check`, `grill`
|
|
25
|
+
- **Planning & discovery:** `plan`, `discovery`, `journey-audit`, `repo-audit`, `brainstorm`, `write-executable-plan`, `debug`, `claude-md-drift-check`, `grill`
|
|
26
26
|
- **Architecture:** `architecture`, `domain-model`, `ubiquitous-language`
|
|
27
27
|
- **Cross-session:** `evolve`, `convergence-monitoring`, `memory-cleanup`, `reconcile`, `sunset-review`, `eval`
|
|
28
28
|
- **Vault & docs:** `vault-sync`, `vault-mirror`, `daily`, `docs-orchestrator`
|
|
29
29
|
- **Ecosystem:** `bootstrap`, `gitlab-ops`, `gitlab-portfolio`, `ecosystem-health`, `mode-selector`, `autopilot`, `dispatcher`, `spinout`, `npm-publish`
|
|
30
30
|
- **Testing:** `test-runner`, `playwright-driver`, `peekaboo-driver`
|
|
31
31
|
- **Content review:** `persona-panel`
|
|
32
|
+
- **Operator ergonomics:** `eli5` (plain-language restatement of the last answer)
|
|
32
33
|
- **Visualization:** `tmux-layout` (opt-in operator side-channel — [ADR-0007](adr/0007-tmux-visualization-substrate.md))
|
|
33
34
|
|
|
34
|
-
## Commands (
|
|
35
|
+
## Commands (28)
|
|
35
36
|
|
|
36
|
-
`/session`, `/go`, `/close`, `/discovery`, `/plan`, `/evolve`, `/bootstrap`, `/harness-audit`, `/autopilot`, `/autopilot-multi`, `/repo-audit`, `/test`, `/memory-cleanup`, `/portfolio`, `/brainstorm`, `/debug`, `/persona-panel`, `/grill`, `/sunset-review`, `/templates-ack`, `/dispatcher`, `/reconcile`, `/spinout`, `/eval`, `/contract-version-bump`.
|
|
37
|
+
`/session`, `/go`, `/close`, `/discovery`, `/plan`, `/evolve`, `/bootstrap`, `/harness-audit`, `/autopilot`, `/autopilot-multi`, `/repo-audit`, `/test`, `/memory-cleanup`, `/portfolio`, `/brainstorm`, `/debug`, `/persona-panel`, `/grill`, `/sunset-review`, `/templates-ack`, `/dispatcher`, `/reconcile`, `/spinout`, `/eval`, `/release`, `/contract-version-bump`, `/eli5`, `/journey-audit`.
|
|
37
38
|
|
|
38
39
|
## Agents (15 typed sub-agents)
|
|
39
40
|
|
package/docs/cursor-setup.md
CHANGED
|
@@ -5,32 +5,31 @@ Guide for using Session Orchestrator with Cursor IDE.
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
7
|
- [Cursor IDE](https://cursor.com) installed (version 1.7+ recommended for hooks support)
|
|
8
|
-
-
|
|
8
|
+
- Node.js 24+
|
|
9
9
|
- A project repository with git initialized
|
|
10
10
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
13
|
-
### Option 1: Clone and symlink (recommended)
|
|
14
13
|
```bash
|
|
15
|
-
# 1. Clone the session-orchestrator repo and install its dependencies
|
|
16
14
|
git clone https://github.com/Kanevry/session-orchestrator.git ~/Projects/session-orchestrator
|
|
17
15
|
cd ~/Projects/session-orchestrator && npm install
|
|
18
|
-
|
|
19
|
-
# 2. Symlink Cursor rules into your project
|
|
20
|
-
node ~/Projects/session-orchestrator/scripts/cursor-install.mjs /path/to/your/project
|
|
16
|
+
node ~/Projects/session-orchestrator/scripts/cursor-install.mjs /path/to/your-project
|
|
21
17
|
```
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# Copy .cursor/rules/ into your project
|
|
26
|
-
cp -r path/to/session-orchestrator/.cursor/rules/ .cursor/rules/
|
|
27
|
-
```
|
|
19
|
+
The installer links four Cursor-native surfaces into the target project:
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
| Surface | Path | What Cursor does with it |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| Rules | `.cursor/rules/*.mdc` | Always-on + intelligent-apply guidance |
|
|
24
|
+
| Commands | `.cursor/commands/*.md` | Slash commands (`/session`, `/go`, `/close`, …) |
|
|
25
|
+
| Skills | `.cursor/skills/<name>/SKILL.md` | Skill discovery; wrappers point at canonical `skills/` |
|
|
26
|
+
| Hooks | `.cursor/hooks.json` | Native hooks via `scripts/lib/cursor-hook-bridge.mjs` |
|
|
27
|
+
|
|
28
|
+
Working **in this repo** does not need the installer — those paths are committed. Reload Cursor (or start a new agent chat) after a pull so `/session` appears.
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
## Configuration
|
|
32
31
|
|
|
33
|
-
Cursor reads CLAUDE.md natively
|
|
32
|
+
Cursor reads CLAUDE.md natively. Add a `## Session Config` section:
|
|
34
33
|
|
|
35
34
|
```markdown
|
|
36
35
|
## Session Config
|
|
@@ -45,33 +44,10 @@ enforcement: warn
|
|
|
45
44
|
vcs: github
|
|
46
45
|
```
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### Hooks (Optional — not yet enforcing)
|
|
51
|
-
|
|
52
|
-
> **The hook handlers do not currently fire on Cursor (#919).** Both are written
|
|
53
|
-
> against Claude Code's `PreToolUse` payload — they require `tool_name === "Bash"`
|
|
54
|
-
> plus `tool_input.command`, and they signal a decision with a Claude Code
|
|
55
|
-
> `hookSpecificOutput` envelope. Fed a Cursor `beforeShellExecution` payload,
|
|
56
|
-
> `hooks/enforce-commands.mjs` short-circuits at its first gate and writes **0
|
|
57
|
-
> bytes to stdout and 0 bytes to stderr, exit 0** — so the harness sees no
|
|
58
|
-
> decision and **the command runs**. It is a silent no-op, not a block and not
|
|
59
|
-
> even a warning. Making this real needs a Cursor input/output adapter, the way
|
|
60
|
-
> Pi has `scripts/lib/pi-hook-bridge.mjs`; no such adapter exists yet.
|
|
61
|
-
>
|
|
62
|
-
> Until then, treat `hooks/hooks-cursor.json` as the *intended* mapping and do
|
|
63
|
-
> not rely on it for command or scope enforcement on Cursor.
|
|
64
|
-
|
|
65
|
-
Cursor supports hooks via Settings > Hooks. The intended mapping is:
|
|
66
|
-
|
|
67
|
-
- **afterFileEdit**: `hooks/enforce-scope.mjs` for scope enforcement (post-hoc warning)
|
|
68
|
-
- **beforeShellExecution**: `hooks/enforce-commands.mjs` for dangerous-command enforcement
|
|
69
|
-
|
|
70
|
-
See `hooks/hooks-cursor.json` for the hook mapping reference.
|
|
47
|
+
`agents-per-wave` is ignored on Cursor — tasks execute sequentially (no parallel Agent dispatch).
|
|
71
48
|
|
|
72
49
|
## Usage
|
|
73
50
|
|
|
74
|
-
Commands work the same as in Claude Code:
|
|
75
51
|
- `/session [housekeeping|feature|deep]` — Start a session
|
|
76
52
|
- `/go` — Execute the agreed plan
|
|
77
53
|
- `/close` — End session with verification
|
|
@@ -79,6 +55,8 @@ Commands work the same as in Claude Code:
|
|
|
79
55
|
- `/discovery [scope]` — Run quality probes
|
|
80
56
|
- `/evolve [analyze|review|list]` — Manage learnings
|
|
81
57
|
|
|
58
|
+
Cursor has no Skill tool. Commands tell the agent to **Read** `skills/<name>/SKILL.md` and follow it.
|
|
59
|
+
|
|
82
60
|
## Key Differences from Claude Code
|
|
83
61
|
|
|
84
62
|
| Aspect | Claude Code | Cursor IDE |
|
|
@@ -88,17 +66,18 @@ Commands work the same as in Claude Code:
|
|
|
88
66
|
| State directory | .claude/ | .cursor/ |
|
|
89
67
|
| Config file | CLAUDE.md | CLAUDE.md (same!) |
|
|
90
68
|
| Task tracking | TaskCreate/TaskUpdate | Text-based checklists |
|
|
91
|
-
| Pre-edit enforcement | PreToolUse hook (blocks) |
|
|
92
|
-
| Command enforcement | PreToolUse hook (blocks) |
|
|
69
|
+
| Pre-edit enforcement | PreToolUse hook (blocks) | `preToolUse` via cursor-hook-bridge (blocks) |
|
|
70
|
+
| Command enforcement | PreToolUse hook (blocks) | `beforeShellExecution` via cursor-hook-bridge (blocks) |
|
|
71
|
+
| Post-edit | PostToolUse | `afterFileEdit` is post-hoc (cannot unwrite) |
|
|
93
72
|
| Model | Claude via API | Model selected in Cursor settings |
|
|
94
73
|
| Plan mode | EnterPlanMode tool | Instruction-based |
|
|
95
74
|
|
|
96
75
|
## Limitations
|
|
97
76
|
|
|
98
77
|
1. **No parallel agents** — All wave tasks execute sequentially. Sessions take longer than in Claude Code.
|
|
99
|
-
2. **
|
|
78
|
+
2. **afterFileEdit cannot prevent an edit** — it fires after the write. Scope blocking belongs on `preToolUse`.
|
|
100
79
|
3. **Model preference advisory** — The `model-preference-cursor` frontmatter in skills is advisory only. Select your model in Cursor settings.
|
|
101
|
-
4. **No
|
|
80
|
+
4. **No Agent/Skill tools** — `pre-task-scope-disjoint` and `skill-invocation-telemetry` are not wired; commands Read skill files directly.
|
|
102
81
|
|
|
103
82
|
## Shared Knowledge
|
|
104
83
|
|
|
@@ -110,8 +89,8 @@ Switch freely between Claude Code, Codex, and Cursor on the same project — all
|
|
|
110
89
|
|
|
111
90
|
## Troubleshooting
|
|
112
91
|
|
|
113
|
-
-
|
|
114
|
-
- **
|
|
115
|
-
- **Hooks not firing**:
|
|
116
|
-
-
|
|
117
|
-
- **State files not created**: Check `.cursor/`
|
|
92
|
+
- **`/session` missing**: Confirm `.cursor/commands/session.md` exists. Reload Cursor. If this is another project, re-run `node scripts/cursor-install.mjs .`
|
|
93
|
+
- **Rules not loading**: Ensure `.cursor/rules/` exists with `.mdc` files; `000-session-orchestrator.mdc` has `alwaysApply: true`
|
|
94
|
+
- **Hooks not firing**: Confirm `.cursor/hooks.json` exists. Open Cursor Settings → Hooks. Restart Cursor if it was open during install.
|
|
95
|
+
- **`'node' not found` in hook PATH**: See README troubleshooting. `hooks/run-node.sh` resolves Homebrew/nvm Node.
|
|
96
|
+
- **State files not created**: Check `.cursor/` is writable
|