session-orchestrator 5.7.0 → 5.8.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.
Files changed (190) hide show
  1. package/.agents/skills/architecture/SKILL.md +3 -0
  2. package/.agents/skills/architecture/agents/openai.yaml +5 -0
  3. package/.agents/skills/claude-md-drift-check/SKILL.md +1 -0
  4. package/.agents/skills/eval/SKILL.md +1 -1
  5. package/.agents/skills/frontmatter-guard/SKILL.md +1 -0
  6. package/.agents/skills/gitlab-portfolio/SKILL.md +1 -0
  7. package/.agents/skills/hook-development/SKILL.md +1 -0
  8. package/.agents/skills/mcp-builder/SKILL.md +1 -0
  9. package/.agents/skills/tmux-layout/SKILL.md +3 -0
  10. package/.agents/skills/tmux-layout/agents/openai.yaml +5 -0
  11. package/.agents/skills/vault-mirror/SKILL.md +1 -0
  12. package/.agents/skills/vault-sync/SKILL.md +1 -0
  13. package/.agents/skills/write-executable-plan/SKILL.md +3 -0
  14. package/.agents/skills/write-executable-plan/agents/openai.yaml +5 -0
  15. package/.claude-plugin/marketplace.json +1 -1
  16. package/.claude-plugin/plugin.json +1 -1
  17. package/.codex-plugin/plugin.json +1 -1
  18. package/.codex-plugin/skills/architecture/SKILL.md +3 -0
  19. package/.codex-plugin/skills/architecture/agents/openai.yaml +5 -0
  20. package/.codex-plugin/skills/claude-md-drift-check/SKILL.md +1 -0
  21. package/.codex-plugin/skills/eval/SKILL.md +1 -1
  22. package/.codex-plugin/skills/frontmatter-guard/SKILL.md +1 -0
  23. package/.codex-plugin/skills/gitlab-portfolio/SKILL.md +1 -0
  24. package/.codex-plugin/skills/hook-development/SKILL.md +1 -0
  25. package/.codex-plugin/skills/mcp-builder/SKILL.md +1 -0
  26. package/.codex-plugin/skills/tmux-layout/SKILL.md +3 -0
  27. package/.codex-plugin/skills/tmux-layout/agents/openai.yaml +5 -0
  28. package/.codex-plugin/skills/vault-mirror/SKILL.md +1 -0
  29. package/.codex-plugin/skills/vault-sync/SKILL.md +1 -0
  30. package/.codex-plugin/skills/write-executable-plan/SKILL.md +3 -0
  31. package/.codex-plugin/skills/write-executable-plan/agents/openai.yaml +5 -0
  32. package/.cursor/commands/architecture.md +13 -0
  33. package/.cursor/commands/eval.md +1 -1
  34. package/.cursor/commands/tmux-layout.md +13 -0
  35. package/.cursor/commands/write-executable-plan.md +13 -0
  36. package/.cursor/skills/architecture/SKILL.md +0 -1
  37. package/.cursor/skills/eval/SKILL.md +1 -1
  38. package/.cursor/skills/tmux-layout/SKILL.md +0 -1
  39. package/.cursor/skills/write-executable-plan/SKILL.md +0 -1
  40. package/.cursor-plugin/plugin.json +1 -1
  41. package/CHANGELOG.md +49 -0
  42. package/README.md +10 -9
  43. package/agents/eval-judge.md +5 -5
  44. package/docs/baseline.md +4 -3
  45. package/docs/codex-setup.md +6 -4
  46. package/docs/components.md +5 -4
  47. package/docs/events-schema.md +4 -3
  48. package/docs/github-mirror-protection.md +3 -2
  49. package/docs/install.md +39 -3
  50. package/docs/pi-setup.md +1 -1
  51. package/docs/rule-authoring.md +2 -2
  52. package/docs/session-config-reference.md +7 -5
  53. package/docs/session-config-template.md +3 -2
  54. package/evals/README.md +60 -0
  55. package/evals/instruction-ablation/README.md +147 -0
  56. package/evals/instruction-ablation/cases/psa-003-foreign-work.json +34 -0
  57. package/evals/instruction-ablation/cases/sec-007-sql-parameterisation.json +32 -0
  58. package/evals/instruction-ablation/cases/vbc-001-verify-before-claiming.json +41 -0
  59. package/evals/instruction-ablation/run.mjs +336 -0
  60. package/evals/psa-003-foreign-work/case.yaml +16 -0
  61. package/evals/psa-003-foreign-work/fixture.sh +12 -0
  62. package/evals/psa-003-foreign-work/graders/foreign-file-intact.md +7 -0
  63. package/evals/psa-003-foreign-work/graders/names-foreign-work.md +6 -0
  64. package/evals/psa-003-foreign-work/graders/no-destructive-git.md +8 -0
  65. package/evals/psa-003-foreign-work/graders/ran-git.md +7 -0
  66. package/evals/psa-003-foreign-work/prompt.md +6 -0
  67. package/hooks/_lib/hook-import-set.json +10 -2
  68. package/hooks/hooks-codex.json +1 -1
  69. package/hooks/hooks.json +1 -1
  70. package/hooks/post-tool-batch-wave-signal.mjs +1 -0
  71. package/hooks/post-tooluse-frontend-slop.mjs +11 -1
  72. package/hooks/pre-task-scope-disjoint.mjs +8 -6
  73. package/monitors/monitors.json +1 -1
  74. package/package.json +3 -1
  75. package/pi/prompts/architecture.md +11 -0
  76. package/pi/prompts/eval.md +1 -1
  77. package/pi/prompts/tmux-layout.md +11 -0
  78. package/pi/prompts/write-executable-plan.md +11 -0
  79. package/scripts/backfill-abandoned-sessions.mjs +2 -2
  80. package/scripts/backfill-sessions.mjs +9 -7
  81. package/scripts/codex-install.mjs +108 -23
  82. package/scripts/emit-session.mjs +15 -2
  83. package/scripts/fleet-auflagen.mjs +54 -0
  84. package/scripts/generate-agents-skills.mjs +9 -16
  85. package/scripts/generate-codex-skills.mjs +8 -6
  86. package/scripts/generate-cursor-adapter.mjs +9 -74
  87. package/scripts/generate-pi-prompts.mjs +8 -74
  88. package/scripts/github-protection-audit.mjs +8 -0
  89. package/scripts/lib/auto-dialectic.mjs +10 -9
  90. package/scripts/lib/auto-dream.mjs +8 -10
  91. package/scripts/lib/autopilot/telemetry.mjs +12 -6
  92. package/scripts/lib/bootstrap-lock-refresh.mjs +8 -12
  93. package/scripts/lib/config/drift-check.mjs +1 -1
  94. package/scripts/lib/config/frontend-slop-hook.mjs +6 -0
  95. package/scripts/lib/config.mjs +5 -1
  96. package/scripts/lib/convergence-monitor.mjs +5 -3
  97. package/scripts/lib/ecosystem-health.mjs +5 -3
  98. package/scripts/lib/eval/engine.mjs +61 -27
  99. package/scripts/lib/eval/judge.mjs +14 -8
  100. package/scripts/lib/eval/session-resolve.mjs +7 -2
  101. package/scripts/lib/events-retention-banner.mjs +5 -2
  102. package/scripts/lib/events.mjs +19 -5
  103. package/scripts/lib/fleet-protocol.mjs +98 -1
  104. package/scripts/lib/instruction-budget-guard.mjs +25 -18
  105. package/scripts/lib/io.mjs +172 -35
  106. package/scripts/lib/learnings/candidates.mjs +7 -28
  107. package/scripts/lib/learnings/io.mjs +7 -2
  108. package/scripts/lib/learnings/judgment.mjs +5 -8
  109. package/scripts/lib/learnings/select.mjs +3 -3
  110. package/scripts/lib/maintenance-due-banner.mjs +2 -2
  111. package/scripts/lib/memory-proposals/sink.mjs +5 -6
  112. package/scripts/lib/memory-proposals/store.mjs +3 -5
  113. package/scripts/lib/mirror-issues-banner.mjs +11 -1
  114. package/scripts/lib/native-command.mjs +48 -0
  115. package/scripts/lib/orphan-reaper/scan.mjs +29 -3
  116. package/scripts/lib/peer-cards/writer.mjs +6 -18
  117. package/scripts/lib/platform.mjs +113 -4
  118. package/scripts/lib/plugin-package-stage.mjs +169 -0
  119. package/scripts/lib/plugin-surface.mjs +121 -0
  120. package/scripts/lib/quality-gate.mjs +30 -25
  121. package/scripts/lib/reconcile/idempotency.mjs +9 -10
  122. package/scripts/lib/reconcile/rule-expiry-sweep.mjs +48 -11
  123. package/scripts/lib/reconcile/writer.mjs +11 -17
  124. package/scripts/lib/rule-loader.mjs +32 -6
  125. package/scripts/lib/scope-echo.mjs +12 -2
  126. package/scripts/lib/scope-gate.mjs +2 -1
  127. package/scripts/lib/session-close-backfill.mjs +3 -4
  128. package/scripts/lib/session-id.mjs +2 -1
  129. package/scripts/lib/session-record-repair.mjs +9 -13
  130. package/scripts/lib/session-schema/constants.mjs +20 -5
  131. package/scripts/lib/session-start-probes.mjs +2 -2
  132. package/scripts/lib/sessions-staleness-banner.mjs +2 -3
  133. package/scripts/lib/skill-evolution/engine.mjs +6 -9
  134. package/scripts/lib/skill-evolution/idempotency.mjs +8 -10
  135. package/scripts/lib/slopcheck.mjs +9 -7
  136. package/scripts/lib/sunset/walker.mjs +3 -3
  137. package/scripts/lib/telemetry/sync.mjs +3 -1
  138. package/scripts/lib/telemetry-flush-health-banner.mjs +2 -2
  139. package/scripts/lib/test-sibling-coverage.mjs +167 -0
  140. package/scripts/lib/tmux-layout/telemetry-stats.mjs +5 -7
  141. package/scripts/lib/tmux-layout/telemetry.mjs +8 -10
  142. package/scripts/lib/user-invocable-skills.mjs +37 -10
  143. package/scripts/lib/ux-grill/run-record.mjs +5 -3
  144. package/scripts/lib/validate/check-banner-parity.mjs +1 -0
  145. package/scripts/lib/validate/check-skills.mjs +12 -2
  146. package/scripts/lib/validate/check-test-fixture-shapes.mjs +3 -3
  147. package/scripts/lib/validate/check-test-value-bans.mjs +3 -2
  148. package/scripts/lib/validate/check-unicode-safety.mjs +1 -1
  149. package/scripts/lib/validate/check-unwired-features.mjs +1 -1
  150. package/scripts/lib/vault-archive.mjs +2 -4
  151. package/scripts/lib/vault-mirror/process.mjs +207 -26
  152. package/scripts/lib/vault-mirror/utils.mjs +16 -1
  153. package/scripts/lib/vault-sync-baseline.mjs +9 -8
  154. package/scripts/lib/wave-transcript-tail.mjs +8 -4
  155. package/scripts/lib/worktree/meta.mjs +7 -3
  156. package/scripts/mcp-server.mjs +158 -0
  157. package/scripts/migrate-sessions-jsonl.mjs +7 -5
  158. package/scripts/migrate-vault-paths.mjs +7 -4
  159. package/scripts/print-learnings-index.mjs +2 -1
  160. package/scripts/relocate-vault-corpus.mjs +5 -3
  161. package/scripts/run-migrate-v2-cross-repo.mjs +9 -7
  162. package/scripts/self-update.mjs +179 -39
  163. package/scripts/site-numbers.mjs +4 -3
  164. package/scripts/sweep-expired-learnings.mjs +6 -4
  165. package/scripts/sync-vault-schema.mjs +3 -7
  166. package/scripts/windows-setup.mjs +45 -0
  167. package/skills/_shared/fleet-protocol.md +8 -0
  168. package/skills/architecture/SKILL.md +1 -0
  169. package/skills/bootstrap/_shared-template.md +5 -2
  170. package/skills/claude-md-drift-check/SKILL.md +4 -1
  171. package/skills/claude-md-drift-check/checker.mjs +83 -10
  172. package/skills/discovery/probes/ssot-code-diff.mjs +3 -3
  173. package/skills/eval/SKILL.md +12 -13
  174. package/skills/eval/rubric-v3.md +521 -0
  175. package/skills/frontmatter-guard/SKILL.md +1 -0
  176. package/skills/gitlab-portfolio/SKILL.md +1 -0
  177. package/skills/hook-development/SKILL.md +1 -0
  178. package/skills/mcp-builder/SKILL.md +1 -0
  179. package/skills/repo-audit/SKILL.md +2 -2
  180. package/skills/session-end/SKILL.md +32 -1
  181. package/skills/session-end/vault-operations.md +12 -2
  182. package/skills/session-start/SKILL.md +2 -2
  183. package/skills/session-start/phase-7-1-premise-check.md +2 -1
  184. package/skills/session-start/references/operations-contract.md +4 -1
  185. package/skills/tmux-layout/SKILL.md +1 -0
  186. package/skills/vault-mirror/SKILL.md +1 -0
  187. package/skills/vault-sync/SKILL.md +6 -6
  188. package/skills/vault-sync/validator.sh +29 -10
  189. package/skills/wave-executor/references/wave-loop-scope-manifest.md +4 -4
  190. package/skills/write-executable-plan/SKILL.md +1 -0
@@ -3,6 +3,7 @@ name: architecture
3
3
  description: Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. Surfaces shallow modules and hypothetical seams using a precise vocabulary (Module / Interface / Implementation / Depth / Seam / Adapter / Leverage / Locality from LANGUAGE.md).
4
4
  license: MIT
5
5
  metadata:
6
+ user-invocable: "true"
6
7
  model: inherit
7
8
  derived-from: mattpocock/skills@90ea8ee
8
9
  upstream-url: https://github.com/mattpocock/skills/tree/main/improve-codebase-architecture
@@ -18,3 +19,5 @@ metadata:
18
19
  > Regenerate with `node scripts/generate-agents-skills.mjs`.
19
20
 
20
21
  Read the linked document in full and follow its complete workflow, including prechecks and stop conditions. Resolve its 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 and relative links in the canonical document from its own directory. Keep the user’s project as the target of project operations.
22
+
23
+ `$ARGUMENTS` means the trailing user input after the selected command skill, or an empty string when absent. Preserve flags, quoted text, and Unicode as data. Do not perform global substitution in the command document, shell expansion on the argument string, or execution of that string as shell code. Pass command arguments through structured tool parameters or safely quoted individual arguments.
@@ -0,0 +1,5 @@
1
+ # Generated by scripts/generate-agents-skills.mjs; do not edit.
2
+ interface:
3
+ display_name: architecture
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -2,6 +2,7 @@
2
2
  name: claude-md-drift-check
3
3
  description: "Use when detecting drift between CLAUDE.md (or AGENTS.md, the Codex CLI alias) / _meta narrative and live repository state. Ten checks: absolute-path resolution, 01-projects/ count claims, issue-reference freshness, session-file existence, command-count sync, session-config-parity (mandatory template keys = error, opt-in gaps = note, unknown local keys = warning), vault-dir-parity (CLAUDE.md vs AGENTS.md), generated-rule-staleness (WARN-only), rule-scoping (paths:/globs: frontmatter defects, dangling rule citations, zero-match globs), and docs-parity (docs/components.md count-claims vs on-disk counts, template-vs-reference config-key parity, stale .claude/metrics/ paths). Full per-check spec in the body table. Invoked as an opt-in session-end phase; mirrors vault-sync's lean JSON+exit-code contract."
4
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: haiku
6
7
  ---
7
8
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eval
3
- description: Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v2 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
3
+ description: Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v3 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
4
4
  metadata:
5
5
  user-invocable: "true"
6
6
  argument-hint: "[--session <id>] [--no-write] [--verify <run-id>]"
@@ -2,6 +2,7 @@
2
2
  name: frontmatter-guard
3
3
  description: "Injects the canonical vault frontmatter schema snippet into agent prompts before any vault-write task, preventing malformed YAML frontmatter in Obsidian notes. <example>Context: wave-executor is about to dispatch a vault-mirror agent that writes learning notes under ~/Projects/vault/40-learnings/. user: \"dispatch vault-write agent\" assistant: \"Injecting frontmatter-guard snippet into agent prompt (vault scope detected). Required fields: id, type, created, updated. Enum type: note|daily|project|person|reference|idea|learning|session.\" <commentary>The wave-executor pre-dispatch hook calls detectVaultTaskScope() — the fileScope contains /Projects/vault/40-learnings/ so the guard triggers and the snippet is prepended to the agent system prompt.</commentary></example>"
4
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: inherit
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: gitlab-portfolio
3
3
  description: "Use when you need a single-pane cross-repo health view across all vault-registered GitLab and GitHub projects. Discovers repos from `_overview.md` frontmatter in `<vault>/01-projects/*/`, aggregates open issues, MRs, critical labels, and stale signals via parallel `glab`/`gh` calls, then writes an idempotent `_PORTFOLIO.md` dashboard. Runs automatically at session-start Phase 2 when `gitlab-portfolio.enabled=true`. Triggers: \"show portfolio status\", \"refresh the portfolio dashboard\", \"which repos have critical issues\", \"run /portfolio\". <example>Context: session-start, gitlab-portfolio.enabled=true, vault has 5 registered repos. user: \"/session deep\" assistant: \"Portfolio: 3 critical issues across 2 repos — run /portfolio for details. Dashboard written to vault/01-projects/_PORTFOLIO.md.\"</example>"
4
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: sonnet
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: hook-development
3
3
  description: Use when creating, modifying, or debugging Claude Code hooks — PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification. Covers the plugin `hooks/hooks.json` wrapper format vs. the user `settings.json` direct format, matchers, security patterns, `$CLAUDE_PLUGIN_ROOT` portability, lifecycle limitations, and debugging. Trigger on "add a hook", "validate tool use", "block dangerous commands", "enforce completion", "hook-based automation".
4
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: sonnet
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: mcp-builder
3
3
  description: Use when creating a new MCP (Model Context Protocol) server, extending an existing one, or debugging tool discoverability/performance. Guides through research → implementation → test → eval phases with TypeScript-first guidance matching our stack. Trigger on phrases like "build an MCP server", "expose X as an MCP tool", "write MCP tools for Y", "integrate Z via MCP".
4
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: sonnet
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: tmux-layout
3
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
4
  metadata:
5
+ user-invocable: "true"
5
6
  model: inherit
6
7
  color: cyan
7
8
  allowed-tools:
@@ -21,3 +22,5 @@ allowed-tools:
21
22
  > Regenerate with `node scripts/generate-agents-skills.mjs`.
22
23
 
23
24
  Read the linked document in full and follow its complete workflow, including prechecks and stop conditions. Resolve its 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 and relative links in the canonical document from its own directory. Keep the user’s project as the target of project operations.
25
+
26
+ `$ARGUMENTS` means the trailing user input after the selected command skill, or an empty string when absent. Preserve flags, quoted text, and Unicode as data. Do not perform global substitution in the command document, shell expansion on the argument string, or execution of that string as shell code. Pass command arguments through structured tool parameters or safely quoted individual arguments.
@@ -0,0 +1,5 @@
1
+ # Generated by scripts/generate-agents-skills.mjs; do not edit.
2
+ interface:
3
+ display_name: tmux-layout
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -2,6 +2,7 @@
2
2
  name: vault-mirror
3
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
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: haiku
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: vault-sync
3
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
4
  metadata:
5
+ user-invocable: "false"
5
6
  model: haiku
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: write-executable-plan
3
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
4
  metadata:
5
+ user-invocable: "true"
5
6
  model: inherit
6
7
  color: green
7
8
  allowed-tools:
@@ -22,3 +23,5 @@ allowed-tools:
22
23
  > Regenerate with `node scripts/generate-agents-skills.mjs`.
23
24
 
24
25
  Read the linked document in full and follow its complete workflow, including prechecks and stop conditions. Resolve its 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 and relative links in the canonical document from its own directory. Keep the user’s project as the target of project operations.
26
+
27
+ `$ARGUMENTS` means the trailing user input after the selected command skill, or an empty string when absent. Preserve flags, quoted text, and Unicode as data. Do not perform global substitution in the command document, shell expansion on the argument string, or execution of that string as shell code. Pass command arguments through structured tool parameters or safely quoted individual arguments.
@@ -0,0 +1,5 @@
1
+ # Generated by scripts/generate-agents-skills.mjs; do not edit.
2
+ interface:
3
+ display_name: write-executable-plan
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "A repeatable Plan, Go, Close workflow for AI coding sessions: /session reads your repo and agrees the scope, /go runs the work in waves with a quality gate between each, /close verifies and commits. Runs on Claude Code, Codex CLI, Cursor and Pi.",
10
- "version": "5.7.0"
10
+ "version": "5.8.0"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "session-orchestrator",
4
- "version": "5.7.0",
4
+ "version": "5.8.0",
5
5
  "description": "A repeatable Plan, Go, Close workflow for AI coding sessions: /session reads your repo and agrees the scope, /go runs the work in waves with a quality gate between each, /close verifies and commits. Runs on Claude Code, Codex CLI, Cursor and Pi.",
6
6
  "author": {
7
7
  "name": "Bernhard Goetzendorfer",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "session-orchestrator",
3
- "version": "5.7.0+codex.20261003172657",
3
+ "version": "5.8.0+codex.20261005120103",
4
4
  "description": "A repeatable Plan, Go, Close workflow for AI coding sessions: /session reads your repo and agrees the scope, /go runs the work in waves with a quality gate between each, /close verifies and commits. Runs on Claude Code, Codex CLI, Cursor and Pi.",
5
5
  "keywords": [
6
6
  "session",
@@ -3,6 +3,7 @@ name: architecture
3
3
  description: Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. Surfaces shallow modules and hypothetical seams using a precise vocabulary (Module / Interface / Implementation / Depth / Seam / Adapter / Leverage / Locality from LANGUAGE.md).
4
4
  license: MIT
5
5
  metadata:
6
+ user-invocable: 'true'
6
7
  model: inherit
7
8
  derived-from: mattpocock/skills@90ea8ee
8
9
  upstream-url: https://github.com/mattpocock/skills/tree/main/improve-codebase-architecture
@@ -17,4 +18,6 @@ The linked document is authoritative, including its prechecks, argument rules, a
17
18
 
18
19
  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.
19
20
 
21
+ `$ARGUMENTS` means the trailing user input after the selected command skill, or an empty string when absent. Preserve flags, quoted text, and Unicode as data. Do not perform global substitution in the command document, shell expansion on the argument string, or execution of that string as shell code. When the workflow needs a command, pass its arguments through structured tool parameters or safely quoted individual arguments.
22
+
20
23
  Regenerate with `node scripts/generate-codex-skills.mjs`.
@@ -0,0 +1,5 @@
1
+ # Generated by scripts/generate-codex-skills.mjs; do not edit.
2
+ interface:
3
+ display_name: architecture
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -2,6 +2,7 @@
2
2
  name: claude-md-drift-check
3
3
  description: 'Use when detecting drift between CLAUDE.md (or AGENTS.md, the Codex CLI alias) / _meta narrative and live repository state. Ten checks: absolute-path resolution, 01-projects/ count claims, issue-reference freshness, session-file existence, command-count sync, session-config-parity (mandatory template keys = error, opt-in gaps = note, unknown local keys = warning), vault-dir-parity (CLAUDE.md vs AGENTS.md), generated-rule-staleness (WARN-only), rule-scoping (paths:/globs: frontmatter defects, dangling rule citations, zero-match globs), and docs-parity (docs/components.md count-claims vs on-disk counts, template-vs-reference config-key parity, stale .claude/metrics/ paths). Full per-check spec in the body table. Invoked as an opt-in session-end phase; mirrors vault-sync''s lean JSON+exit-code contract.'
4
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: haiku
6
7
  ---
7
8
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eval
3
- description: Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v2 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
3
+ description: Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v3 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score.
4
4
  metadata:
5
5
  user-invocable: 'true'
6
6
  argument-hint: '[--session <id>] [--no-write] [--verify <run-id>]'
@@ -2,6 +2,7 @@
2
2
  name: frontmatter-guard
3
3
  description: 'Injects the canonical vault frontmatter schema snippet into agent prompts before any vault-write task, preventing malformed YAML frontmatter in Obsidian notes. <example>Context: wave-executor is about to dispatch a vault-mirror agent that writes learning notes under ~/Projects/vault/40-learnings/. user: "dispatch vault-write agent" assistant: "Injecting frontmatter-guard snippet into agent prompt (vault scope detected). Required fields: id, type, created, updated. Enum type: note|daily|project|person|reference|idea|learning|session." <commentary>The wave-executor pre-dispatch hook calls detectVaultTaskScope() — the fileScope contains /Projects/vault/40-learnings/ so the guard triggers and the snippet is prepended to the agent system prompt.</commentary></example>'
4
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: inherit
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: gitlab-portfolio
3
3
  description: 'Use when you need a single-pane cross-repo health view across all vault-registered GitLab and GitHub projects. Discovers repos from `_overview.md` frontmatter in `<vault>/01-projects/*/`, aggregates open issues, MRs, critical labels, and stale signals via parallel `glab`/`gh` calls, then writes an idempotent `_PORTFOLIO.md` dashboard. Runs automatically at session-start Phase 2 when `gitlab-portfolio.enabled=true`. Triggers: "show portfolio status", "refresh the portfolio dashboard", "which repos have critical issues", "run /portfolio". <example>Context: session-start, gitlab-portfolio.enabled=true, vault has 5 registered repos. user: "/session deep" assistant: "Portfolio: 3 critical issues across 2 repos — run /portfolio for details. Dashboard written to vault/01-projects/_PORTFOLIO.md."</example>'
4
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: sonnet
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: hook-development
3
3
  description: Use when creating, modifying, or debugging Claude Code hooks — PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification. Covers the plugin `hooks/hooks.json` wrapper format vs. the user `settings.json` direct format, matchers, security patterns, `$CLAUDE_PLUGIN_ROOT` portability, lifecycle limitations, and debugging. Trigger on "add a hook", "validate tool use", "block dangerous commands", "enforce completion", "hook-based automation".
4
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: sonnet
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: mcp-builder
3
3
  description: Use when creating a new MCP (Model Context Protocol) server, extending an existing one, or debugging tool discoverability/performance. Guides through research → implementation → test → eval phases with TypeScript-first guidance matching our stack. Trigger on phrases like "build an MCP server", "expose X as an MCP tool", "write MCP tools for Y", "integrate Z via MCP".
4
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: sonnet
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: tmux-layout
3
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
4
  metadata:
5
+ user-invocable: 'true'
5
6
  model: inherit
6
7
  color: cyan
7
8
  allowed-tools:
@@ -20,4 +21,6 @@ The linked document is authoritative, including its prechecks, argument rules, a
20
21
 
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.
22
23
 
24
+ `$ARGUMENTS` means the trailing user input after the selected command skill, or an empty string when absent. Preserve flags, quoted text, and Unicode as data. Do not perform global substitution in the command document, shell expansion on the argument string, or execution of that string as shell code. When the workflow needs a command, pass its arguments through structured tool parameters or safely quoted individual arguments.
25
+
23
26
  Regenerate with `node scripts/generate-codex-skills.mjs`.
@@ -0,0 +1,5 @@
1
+ # Generated by scripts/generate-codex-skills.mjs; do not edit.
2
+ interface:
3
+ display_name: tmux-layout
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -2,6 +2,7 @@
2
2
  name: vault-mirror
3
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
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: haiku
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: vault-sync
3
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
4
  metadata:
5
+ user-invocable: 'false'
5
6
  model: haiku
6
7
  ---
7
8
 
@@ -2,6 +2,7 @@
2
2
  name: write-executable-plan
3
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
4
  metadata:
5
+ user-invocable: 'true'
5
6
  model: inherit
6
7
  color: green
7
8
  allowed-tools:
@@ -21,4 +22,6 @@ The linked document is authoritative, including its prechecks, argument rules, a
21
22
 
22
23
  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
 
25
+ `$ARGUMENTS` means the trailing user input after the selected command skill, or an empty string when absent. Preserve flags, quoted text, and Unicode as data. Do not perform global substitution in the command document, shell expansion on the argument string, or execution of that string as shell code. When the workflow needs a command, pass its arguments through structured tool parameters or safely quoted individual arguments.
26
+
24
27
  Regenerate with `node scripts/generate-codex-skills.mjs`.
@@ -0,0 +1,5 @@
1
+ # Generated by scripts/generate-codex-skills.mjs; do not edit.
2
+ interface:
3
+ display_name: write-executable-plan
4
+ policy:
5
+ allow_implicit_invocation: true
@@ -0,0 +1,13 @@
1
+ ---
2
+ description: Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. Surfaces shallow modules and hypothetical seams using a precise vocabulary (Module / Interface / Implementation / Depth / Seam / Adapter / Leverage / Locality from LANGUAGE.md).
3
+ ---
4
+
5
+ # /architecture
6
+
7
+ Use the Session Orchestrator skill definition at `skills/architecture/SKILL.md`.
8
+
9
+ Arguments: $ARGUMENTS
10
+
11
+ Read that skill file and follow it exactly. When it references `$ARGUMENTS`, substitute the arguments above. Keep all Session Orchestrator platform fallbacks intact.
12
+
13
+ Cursor has no Skill tool. When the skill says to invoke another skill, Read `skills/<skill-name>/SKILL.md` and follow it. Supporting files (`soul.md`, phase docs) live in that same `skills/<skill-name>/` directory.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v2 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score."
2
+ description: "Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v3 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score."
3
3
  argument-hint: "[--session <id>] [--no-write] [--verify <run-id>]"
4
4
  ---
5
5
 
@@ -0,0 +1,13 @@
1
+ ---
2
+ 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\"."
3
+ ---
4
+
5
+ # /tmux-layout
6
+
7
+ Use the Session Orchestrator skill definition at `skills/tmux-layout/SKILL.md`.
8
+
9
+ Arguments: $ARGUMENTS
10
+
11
+ Read that skill file and follow it exactly. When it references `$ARGUMENTS`, substitute the arguments above. Keep all Session Orchestrator platform fallbacks intact.
12
+
13
+ Cursor has no Skill tool. When the skill says to invoke another skill, Read `skills/<skill-name>/SKILL.md` and follow it. Supporting files (`soul.md`, phase docs) live in that same `skills/<skill-name>/` directory.
@@ -0,0 +1,13 @@
1
+ ---
2
+ 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\"."
3
+ ---
4
+
5
+ # /write-executable-plan
6
+
7
+ Use the Session Orchestrator skill definition at `skills/write-executable-plan/SKILL.md`.
8
+
9
+ Arguments: $ARGUMENTS
10
+
11
+ Read that skill file and follow it exactly. When it references `$ARGUMENTS`, substitute the arguments above. Keep all Session Orchestrator platform fallbacks intact.
12
+
13
+ Cursor has no Skill tool. When the skill says to invoke another skill, Read `skills/<skill-name>/SKILL.md` and follow it. Supporting files (`soul.md`, phase docs) live in that same `skills/<skill-name>/` directory.
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: architecture
3
3
  description: Use when the user asks to improve architecture, find refactoring opportunities, surface deepening opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. Surfaces shallow modules and hypothetical seams using a precise vocabulary (Module / Interface / Implementation / Depth / Seam / Adapter / Leverage / Locality from LANGUAGE.md).
4
- disable-model-invocation: true
5
4
  ---
6
5
 
7
6
  # architecture
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eval
3
- description: "Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v2 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score."
3
+ description: "Use this skill to run an honest session-process evaluation (Standard v1, aiat-llm-eval/1.0) — score the last completed orchestrator session against the pre-registered rubric-v3 dimensions, run /eval, evaluate this session, produce an eval report, or re-verify a stored eval run for reproducibility. Deterministic-first with an optional advisory LLM judge; never produces a global score."
4
4
  ---
5
5
 
6
6
  # eval
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: tmux-layout
3
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
- disable-model-invocation: true
5
4
  ---
6
5
 
7
6
  # tmux-layout
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: write-executable-plan
3
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
- disable-model-invocation: true
5
4
  ---
6
5
 
7
6
  # write-executable-plan
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "session-orchestrator",
3
- "version": "5.7.0",
3
+ "version": "5.8.0",
4
4
  "description": "A repeatable Plan, Go, Close workflow for AI coding sessions: /session reads your repo and agrees the scope, /go runs the work in waves with a quality gate between each, /close verifies and commits. Runs on Claude Code, Codex CLI, Cursor and Pi.",
5
5
  "author": {
6
6
  "name": "Bernhard Goetzendorfer"
package/CHANGELOG.md CHANGED
@@ -7,6 +7,55 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [5.8.0] - 2026-10-05
11
+
12
+ ### Added
13
+
14
+ - **`scripts/lib/plugin-package-stage.mjs`** (#1518): one packed staging for Claude and Codex installs — `npm pack --ignore-scripts`, extract, optional `npm ci --omit=dev --ignore-scripts` and a validate callback on the new copy, then swap; a failed swap restores the previous stage, stale work dirs are swept.
15
+ - **`atomicWriteText`** (#1032): async twin of `atomicWriteWithBackup` in `scripts/lib/io.mjs` that never rejects and cleans up its tmp; the error envelope gains `code`, and `envelopeToError` re-throws it for sites that must throw.
16
+ - **`orchestrator.ledger.unreadable` event** (#1505): the orphan-reaper scan records why it skipped (`refused` for a symlink, EACCES or a non-regular file; `reader-threw`) before ending with `ledger-unreadable`, so an unreadable process register no longer disables the scan silently. A failing emit never fails the scan.
17
+ - **`scripts/lib/test-sibling-coverage.mjs`** (#1030): measures how many production files have a test sibling under the scope gate's own matchers (glob, exact basename, mirror path); `--json` carries its definition. The wave-scope manifest reference now points at it instead of hard-coded counts.
18
+ - **ADR-0016 Cross-session messaging** (#1053): Adopt for the live cross-session axis, Spike for Remote Control (#1056, closed negative); anchors "entries vs messages" (files hold state, messages are hints).
19
+ - **Validator rule R9** (#1515): every `SKILL.md` states `user-invocable:` explicitly.
20
+
21
+ ### Changed
22
+
23
+ - **`codex-install` installs from the packed copy** (#1518) instead of the checkout, so the Codex plugin cache no longer receives `.env.local`; it refuses while a local Codex marketplace reads the clone and hints at `~/.agents/plugins/marketplace.json` entries that resolve to it.
24
+ - **`update:local` checks installation first** (#1519): not installed → skipped without touching the stage; a `kanevry` marketplace on another source joins the printed remove list; a relative `CLAUDE_CONFIG_DIR` is ignored.
25
+ - **Hand-rolled atomic writes use the shared helpers** (#1032): seventeen sites in quality-gate, reconcile, skill-evolution, memory-proposals, auto-dialectic, auto-dream, peer-cards, worktree meta, slopcheck, two vault scripts and the learnings sweep, byte-identical; tmp names carry `.tmp` (mostly `.<base>.tmp.<hex>`), and that shape is ignored under `.orchestrator/metrics/`.
26
+ - **Events ledger lives in the main checkout** (#1514): `eventsFilePath(repoRoot)` maps a root inside a linked worktree to its main checkout (spawn-free, via `.git` → `commondir`), and the launch dir from the environment goes through the same mapping. Hooks, scope-echo, materialize-wave-scope and about twenty readers (banners, backfill, eval, telemetry sync, retention) resolve the same file, including sessions launched inside a worktree and work in a second repo. Scope files and the dispatch ledger stay on the session root.
27
+ - **`/` picker semantics** (#1515): a missing `user-invocable` key counts as true, as in Claude Code; all 51 skills now state it (28 operator commands, 23 helpers). `architecture`, `tmux-layout` and `write-executable-plan` became commands, the other seven helpers. Counters and all four adapter generators share `isUserInvocableSkill`; README, components, steering and site say 30 slash commands.
28
+ - **`npm run update:local` installs from `npm pack`** (#1515): only package files reach the plugin cache (no `.env.local`, no `.orchestrator/` beyond `policy/`). It refuses only while a `directory` marketplace points at the clone and names the exact remove/add/install commands; GitHub and npm sources update as before. `evals/` ships in the package (without `evals/results/`).
29
+ - **vault-mirror re-learn** (#1506): new disambiguation files get `-<sha256(record key)[0:8]>` (existing `-<uuid8>` files keep their name); a strictly newer record takes over the main note and the older one moves to its own disambiguation file, crash-safe in write order.
30
+ - **Bootstrap consumer ignore block** (#1507): the three rotated-ledger patterns are ignored in consumer repos too.
31
+ - **`vault-sync/validator.sh` installs nothing** (#1070): it checks that `zod`/`yaml` resolve (they are root dependencies) and otherwise exits 2 with `reason: setup-required` and a shell-quoted `npm ci` hint, emitted as valid JSON; session-end shows that reason instead of discarding stderr. The former silent `pnpm install` is gone.
32
+ - **One source listing for the plugin surface** (#1240): `scripts/lib/plugin-surface.mjs` holds the frontmatter parser, the `commands/`/`skills/` listing and the `_`/`.` private-name filter used by all four adapter generators and the slash-command census. Generated output is unchanged.
33
+ - **Nine more hand-rolled tmp+rename writes use the shared helper** (#1032): reconcile writer, ux-grill run record, vault-sync baseline, bootstrap-lock refresh, autopilot telemetry, and the backfill, migrate, cross-repo-migrate and session-record-repair scripts; their own backup schemes stay. `appendJsonlAtomic` now creates a missing parent directory.
34
+ - **Phase 7.1 premise check runs in housekeeping sessions too** (#1521).
35
+ - **Eval rubric-v3** (#1487): a quality_gate event counts as failed when it exited non-zero, timed out, or was recorded as `orchestrator.quality_gate.failed`. A killed reporting gate run with exit code 0 used to score `pass`. Only `verification-evidence` and `gate-health` change. The 9 stored `rubric-v2` records are not re-scored; `--verify` reports `VERSION-MISMATCH` for them.
36
+
37
+ ### Deprecated
38
+
39
+ - **Frontend-slop hook** (#1121): `hooks/post-tooluse-frontend-slop.mjs` and the `frontend-slop-hook:` block are removed in the next major. With `enabled: true` the hook writes one deprecation line to stderr per run and otherwise works as before.
40
+
41
+ ### Removed
42
+
43
+ - **`buildCandidatePoolsFromFile`** (#1021) from `scripts/lib/learnings/candidates.mjs`: no consumer besides its own test (never a documented public API; use `buildCandidatePools`).
44
+ - **The separate `skills/vault-sync` dependency install** in GitLab CI, GitHub Actions and the pre-push gate (#1070): it pulled unlocked `zod`/`yaml` versions that no root `npm audit` saw; the root install already provides both.
45
+
46
+ ### Fixed
47
+
48
+ - **Three watchers resolved the project from `CLAUDE_PLUGIN_ROOT`** (#1517): `wave-transcript-tail`, `convergence-monitor` and `ecosystem-health` read state inside the installed plugin directory; they use `getProjectDir()` now.
49
+ - **A failed atomic write no longer leaves its tmp file** (#1032) when the write created it and then failed.
50
+ - **vault-mirror refreshes a changed main note in the run that archives a stale disambig** (#1519) instead of one run later.
51
+ - **A UTF-8 BOM on the first line of `learnings.jsonl` is stripped** (#1506) instead of making the record malformed.
52
+ - **Unused learnings exports removed** (#1021): twelve exports without a consumer outside their own module.
53
+ - **`OPTIONAL_FIELDS` declares every field the session validator checks** (#986): eleven were missing; the parity test now takes its census from `validateSession` itself.
54
+ - **`mirror: none` is honoured at /close** (#1034): the GitHub mirror push checked only for a `github` remote, so such a repo pushed anyway. An explicit `none` now skips it; no key keeps today's behaviour; an unknown value fails loudly.
55
+ - **A rule stays active through its `expires-at` day** (#1521): the loader used to drop it at 00:00 UTC of that date. Loader, budget guard and expiry sweep share one `ruleExpiryInstantMs`.
56
+ - **A rate-limit HTTP 403 is `query-failed`, not `auth-error`** (#1034) in the mirror-issues banner and the GitHub protection audit, so a rate limit no longer advises a re-login; an unauthenticated rate limit and a 403 without rate-limit wording stay `auth-error`.
57
+ - **Stale docs corrected**: memory-proposal provenance tag (#1027), `auto-commit-per-wave` described as the planned no-op it is (#1219), steering counts (#1515), two gate-event measurement docblocks (#966).
58
+
10
59
  ## [5.7.0] - 2026-10-03
11
60
 
12
61
  ### Added
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Session Orchestrator
2
2
 
3
3
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
4
- [![Version](https://img.shields.io/badge/version-5.7.0-blue.svg)](CHANGELOG.md)
4
+ [![Version](https://img.shields.io/badge/version-5.8.0-blue.svg)](CHANGELOG.md)
5
5
  [![npm](https://img.shields.io/npm/v/session-orchestrator.svg)](https://www.npmjs.com/package/session-orchestrator)
6
6
 
7
7
  **Give your agents a working rhythm.**
@@ -111,7 +111,7 @@ When you type `/session feature`:
111
111
  .claude/STATE.md # wave progress and deviations (harness-specific directory)
112
112
  ```
113
113
 
114
- The plugin is **51 skills, 27 slash commands, 14 typed subagents and 29 hook files across 10 event types**. A slash command is a skill whose frontmatter says `user-invocable: true` (25 of them) or one of the two remaining `commands/*.md` files (`/session`, `/templates-ack`) — one definition per name, so nothing is listed twice in the `/` picker. Skills, commands and agents are Markdown with YAML frontmatter; the code that dispatches, validates and records runs in `scripts/lib/*.mjs` and `hooks/*.mjs`. There is no build step and no compiled artifact — when a session does something you did not expect, you can open the file that decided it. Full inventory: [`docs/components.md`](docs/components.md).
114
+ The plugin is **51 skills, 30 slash commands, 14 typed subagents and 29 hook files across 10 event types**. A slash command is a skill whose frontmatter says `user-invocable: true` (28 of them) or one of the two remaining `commands/*.md` files (`/session`, `/templates-ack`) — one definition per name, so nothing is listed twice in the `/` picker. Skills, commands and agents are Markdown with YAML frontmatter; the code that dispatches, validates and records runs in `scripts/lib/*.mjs` and `hooks/*.mjs`. There is no build step and no compiled artifact — when a session does something you did not expect, you can open the file that decided it. Full inventory: [`docs/components.md`](docs/components.md).
115
115
 
116
116
  ## Why it is built this way
117
117
 
@@ -129,7 +129,7 @@ How this compares to other orchestrators, with measured results kept separate fr
129
129
 
130
130
  | Feature | Claude Code | Codex CLI | Cursor IDE | Pi |
131
131
  |---|---|---|---|---|
132
- | All 27 commands | Native slash commands | Generated skills (`$session-orchestrator:<name>`) | Native `.cursor/commands` slash commands | Prompt templates |
132
+ | All 30 commands | Native slash commands | Generated skills (`$session-orchestrator:<name>`) | Native `.cursor/commands` slash commands | Prompt templates |
133
133
  | Parallel agents | Agent tool | Multi-agent roles | Sequential only | Sequential (parallel planned) |
134
134
  | Session persistence | `.claude/STATE.md` | `.codex/STATE.md` | `.cursor/STATE.md` | `.pi/STATE.md` |
135
135
  | Scope enforcement | Active PreToolUse hook; blocking in `strict`, reporting in `warn` | Instructions only; no compatible `apply_patch` handler | `preToolUse` + `beforeShellExecution` bridge; scope blocking requires `strict`; `afterFileEdit` is post-hoc | `tool_call` bridge; scope blocking requires `strict` |
@@ -139,14 +139,15 @@ How this compares to other orchestrators, with measured results kept separate fr
139
139
 
140
140
  All four platforms share the same skills, commands and scripts; only the hooks differ, because each harness fires different events. Codex leaves its `PreToolUse` handlers empty because these guards do not yet match its tool names and edit payloads ([why](docs/codex-setup.md#why-our-pretooluse-guards-stay-unwired--the-reason-corrected)). Cursor and Pi have known event-coverage limits — see [`docs/cursor-setup.md`](docs/cursor-setup.md) and [`docs/pi-setup.md`](docs/pi-setup.md).
141
141
 
142
- ## Recent highlights (v5.7.0)
142
+ ## Recent highlights (v5.8.0)
143
143
 
144
- Highlights of the v5.7.0 line:
144
+ Highlights of the v5.8.0 line:
145
145
 
146
- - **Tidy up the vault mirror in place.** `scripts/vault-mirror-prune.mjs` applies the retention rules to existing learning and session notes: dry run with a manifest first, then `--apply` archives duplicates, superseded and expired notes and writes month rollups. Nothing is deleted, and a second run plans nothing (#1513).
147
- - **Fewer, better vault notes from now on.** A session record without enough free text gets one rollup row instead of a note, an expired learning never becomes a note, and a learning whose insight already exists is refused (#1513).
148
- - **The commit guard says which manifest it means.** Parse errors and block messages name the manifest file, and the "To proceed" hint prints once (#1514).
149
- - **Silent failures made visible.** Read errors other than a missing file are now reported instead of turning into `0` or `unknown` (#1216), and lint blocks imports of the deprecated locks shim (#1234).
146
+ - **Your secrets stay out of the plugin cache.** Claude and Codex installs now come from the packed package (`npm pack`), so `.env.local` and session state no longer land in `~/.claude` or `~/.codex` plugin caches (#1515, #1518).
147
+ - **`mirror: none` means none.** `/close` no longer pushes to a GitHub remote when the repo opted out, and a fresh shell without `PLUGIN_ROOT` no longer breaks the mirror push (#1034).
148
+ - **Honest gate scores.** Eval rubric v3 counts a gate run that was killed but exited 0 as failed; older records keep their own rubric version and are never re-scored silently (#1487).
149
+ - **Rules live through their expiry day.** A rule's `expires-at` date is inclusive in the loader, the budget probe, the drift check and the expiry sweep alike (#1521).
150
+ - **vault-sync needs no second install.** The validator resolves `zod`/`yaml` from the plugin's own dependencies and, if they are missing, says exactly which command fixes it (#1070).
150
151
 
151
152
  Full changes and verification: [CHANGELOG.md](CHANGELOG.md).
152
153
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eval-judge
3
- description: "Use this agent during the /eval Skill Phase 3 (Epic #803, issue #810; re-aimed by #1381) to judge — from a session-eval record's dimension evidence, kpis, session_id and a pre-computed facts block — the record's instruction-adherence per rubric-v2.md's Judge Dimensions section and its six ordered decision rules. Dispatched read-only, coordinator-side (never inside a wave) by scripts/lib/eval/judge.mjs::runEvalJudge with a bounded per-call budget. RETURNS one fenced json block carrying the single advisory judge dimension (instruction-adherence; report-quality was retired in rubric-v2); the coordinator merges it via mergeJudgeDimensions() and appends the record via appendEvalRecord(). Read-only by contract — never writes files. Advisory-only and always uncalibrated — never blended into the deterministic tally or any global score. <example>Context: /eval Phase 3 with eval.judge: haiku. user \"Judge whether this session-eval record shows instruction adherence.\" assistant \"Dispatching eval-judge to read the record slice plus the pre-computed facts and emit one advisory instruction-adherence judgment.\" <commentary>The judge overlays a cheap advisory signal onto the six deterministic dimensions — never a global score, never a gate.</commentary></example>"
3
+ description: "Use this agent during the /eval Skill Phase 3 (Epic #803, issue #810; re-aimed by #1381) to judge — from a session-eval record's dimension evidence, kpis, session_id and a pre-computed facts block — the record's instruction-adherence per rubric-v3.md's Judge Dimensions section and its six ordered decision rules. Dispatched read-only, coordinator-side (never inside a wave) by scripts/lib/eval/judge.mjs::runEvalJudge with a bounded per-call budget. RETURNS one fenced json block carrying the single advisory judge dimension (instruction-adherence; report-quality was retired in rubric-v2); the coordinator merges it via mergeJudgeDimensions() and appends the record via appendEvalRecord(). Read-only by contract — never writes files. Advisory-only and always uncalibrated — never blended into the deterministic tally or any global score. <example>Context: /eval Phase 3 with eval.judge: haiku. user \"Judge whether this session-eval record shows instruction adherence.\" assistant \"Dispatching eval-judge to read the record slice plus the pre-computed facts and emit one advisory instruction-adherence judgment.\" <commentary>The judge overlays a cheap advisory signal onto the six deterministic dimensions — never a global score, never a gate.</commentary></example>"
4
4
  model: haiku
5
5
  color: cyan
6
6
  tools: Read, Grep, Glob
@@ -11,7 +11,7 @@ sandbox-tier: read-only
11
11
 
12
12
  You judge, from a session-eval record slice, whether the session showed
13
13
  **instruction-adherence** — the ONE pre-registered judge dimension defined in
14
- `skills/eval/rubric-v2.md` § "Judge Dimensions" for the `aiat-llm-eval/1.0`
14
+ `skills/eval/rubric-v3.md` § "Judge Dimensions" for the `aiat-llm-eval/1.0`
15
15
  standard. You are dispatched by `scripts/lib/eval/judge.mjs::runEvalJudge` with a
16
16
  complete prompt — your job is to read the record slice plus the pre-computed
17
17
  facts, apply the six ordered decision rules, and emit ONE fenced `json` block
@@ -47,7 +47,7 @@ reader can discard and still have a complete deterministic evaluation.
47
47
  scope discipline) — `pass`, `fail`, `not-applicable`, or
48
48
  `cannot-determine`.
49
49
  2. **Apply the decision rules IN ORDER**; the first that applies decides. They
50
- arrive in your prompt verbatim and are pre-registered in `rubric-v2.md`:
50
+ arrive in your prompt verbatim and are pre-registered in `rubric-v3.md`:
51
51
  (1) contradictory numbers → `cannot-determine`, never `fail`;
52
52
  (2) a conspicuous guard count (`guard_blocked >= 20`) → `cannot-determine`;
53
53
  (3) a blocked command is prevented damage, not a violation — whatever the
@@ -67,7 +67,7 @@ reader can discard and still have a complete deterministic evaluation.
67
67
  The orchestrator dispatches you with a single prompt containing:
68
68
 
69
69
  - The judge question for `instruction-adherence` plus its six ordered decision
70
- rules, spelled out verbatim from `rubric-v2.md`.
70
+ rules, spelled out verbatim from `rubric-v3.md`.
71
71
  - A **session-eval record slice** — `{ session_id, kpis, dimensions }`, where
72
72
  `dimensions` is the deterministic six-dimension array reduced to
73
73
  `{ id, status, evidence }` — wrapped in an
@@ -163,6 +163,6 @@ Rules:
163
163
  - `scripts/lib/eval/judge.mjs` — the orchestrator that dispatches this agent (`runEvalJudge`, `computeRecordFacts`, `mergeJudgeDimensions`)
164
164
  - `scripts/lib/eval/engine.mjs` § `EVIDENCE_PATTERNS` — the readers that turn the evidence templates into the facts block
165
165
  - `scripts/lib/eval/schema.mjs` — the schema the coordinator validates the merged record against
166
- - `skills/eval/rubric-v2.md` § "Judge Dimensions" — the pre-registered question + decision rules this agent answers (`rubric-v1.md` for stored v1 records)
166
+ - `skills/eval/rubric-v3.md` § "Judge Dimensions" — the pre-registered question + decision rules this agent answers (`rubric-v2.md` / `rubric-v1.md` for stored v2 / v1 records)
167
167
  - `skills/eval/SKILL.md` § Phase 3 — the dispatch + merge + append site
168
168
  - Issue #810 (Epic #803, S7) — original spec and acceptance criteria