session-orchestrator 3.16.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 (762) hide show
  1. package/.claude-plugin/marketplace.json +29 -0
  2. package/.claude-plugin/plugin.json +18 -0
  3. package/.codex-plugin/agents/explorer.toml +14 -0
  4. package/.codex-plugin/agents/session-reviewer.toml +23 -0
  5. package/.codex-plugin/agents/wave-worker.toml +15 -0
  6. package/.codex-plugin/config.toml +20 -0
  7. package/.codex-plugin/plugin.json +37 -0
  8. package/.cursor/rules/000-session-orchestrator.mdc +73 -0
  9. package/.cursor/rules/010-session-workflow.mdc +170 -0
  10. package/.cursor/rules/020-quality-gates.mdc +128 -0
  11. package/.cursor/rules/030-wave-execution.mdc +216 -0
  12. package/.cursor/rules/040-discovery.mdc +242 -0
  13. package/.cursor/rules/050-plan.mdc +235 -0
  14. package/.cursor/rules/060-evolve.mdc +232 -0
  15. package/.cursor/rules/070-gitlab-ops.mdc +246 -0
  16. package/.cursor/rules/080-ecosystem-health.mdc +145 -0
  17. package/.mcp.json +8 -0
  18. package/CHANGELOG.md +1544 -0
  19. package/LICENSE +21 -0
  20. package/NOTICE +64 -0
  21. package/README.md +242 -0
  22. package/SECURITY.md +90 -0
  23. package/agents/AGENTS.md +136 -0
  24. package/agents/analyst.md +99 -0
  25. package/agents/architect-reviewer.md +93 -0
  26. package/agents/code-implementer.md +106 -0
  27. package/agents/db-specialist.md +104 -0
  28. package/agents/dialectic-deriver.md +139 -0
  29. package/agents/docs-writer.md +113 -0
  30. package/agents/eval-judge.md +146 -0
  31. package/agents/memory-proposal-collector.md +297 -0
  32. package/agents/qa-strategist.md +102 -0
  33. package/agents/schemas/analyst.schema.json +46 -0
  34. package/agents/schemas/architect-reviewer.schema.json +50 -0
  35. package/agents/schemas/code-implementer.schema.json +61 -0
  36. package/agents/schemas/db-specialist.schema.json +80 -0
  37. package/agents/schemas/docs-writer.schema.json +56 -0
  38. package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
  39. package/agents/schemas/qa-strategist.schema.json +46 -0
  40. package/agents/schemas/security-reviewer.schema.json +86 -0
  41. package/agents/schemas/session-reviewer.schema.json +69 -0
  42. package/agents/schemas/test-writer.schema.json +69 -0
  43. package/agents/schemas/ui-developer.schema.json +90 -0
  44. package/agents/schemas/ux-evaluator.schema.json +51 -0
  45. package/agents/security-reviewer.md +236 -0
  46. package/agents/session-reviewer.md +201 -0
  47. package/agents/skill-applied-judge.md +122 -0
  48. package/agents/test-writer.md +123 -0
  49. package/agents/ui-developer.md +109 -0
  50. package/agents/ux-evaluator.md +161 -0
  51. package/assets/icon.svg +11 -0
  52. package/assets/og-card.png +0 -0
  53. package/assets/og-card.svg +47 -0
  54. package/commands/autopilot-multi.md +74 -0
  55. package/commands/autopilot.md +80 -0
  56. package/commands/bootstrap.md +56 -0
  57. package/commands/brainstorm.md +48 -0
  58. package/commands/close.md +24 -0
  59. package/commands/debug.md +36 -0
  60. package/commands/discovery.md +32 -0
  61. package/commands/dispatcher.md +59 -0
  62. package/commands/eval.md +28 -0
  63. package/commands/evolve.md +10 -0
  64. package/commands/go.md +41 -0
  65. package/commands/grill.md +45 -0
  66. package/commands/harness-audit.md +26 -0
  67. package/commands/memory-cleanup.md +25 -0
  68. package/commands/persona-panel.md +121 -0
  69. package/commands/plan.md +15 -0
  70. package/commands/portfolio.md +97 -0
  71. package/commands/reconcile.md +23 -0
  72. package/commands/repo-audit.md +24 -0
  73. package/commands/session.md +30 -0
  74. package/commands/spinout.md +15 -0
  75. package/commands/sunset-review.md +27 -0
  76. package/commands/templates-ack.md +96 -0
  77. package/commands/test.md +97 -0
  78. package/docs/README.md +105 -0
  79. package/docs/USER-GUIDE.md +1403 -0
  80. package/docs/ci-setup.md +81 -0
  81. package/docs/codex-setup.md +142 -0
  82. package/docs/components.md +74 -0
  83. package/docs/cursor-setup.md +104 -0
  84. package/docs/events-schema.md +81 -0
  85. package/docs/migration-v3.md +148 -0
  86. package/docs/owner-config-schema.md +154 -0
  87. package/docs/persona-panel.md +433 -0
  88. package/docs/pi-setup.md +115 -0
  89. package/docs/plugin-architecture-v3.md +296 -0
  90. package/docs/pm-skills-marketplace.md +114 -0
  91. package/docs/policy-cache-validation-2026-04-28.md +118 -0
  92. package/docs/rule-authoring.md +316 -0
  93. package/docs/session-config-reference.md +1439 -0
  94. package/docs/session-config-template.md +961 -0
  95. package/docs/vault-docs-architecture.md +297 -0
  96. package/hooks/_lib/lock-bootstrap.mjs +272 -0
  97. package/hooks/_lib/lock-reconcile.mjs +93 -0
  98. package/hooks/_lib/profile-gate.mjs +95 -0
  99. package/hooks/_lib/transcript-history.mjs +211 -0
  100. package/hooks/agent-teams-h3-test.sh +362 -0
  101. package/hooks/config-protection.mjs +0 -0
  102. package/hooks/cwd-change-restore.mjs +131 -0
  103. package/hooks/enforce-commands.mjs +179 -0
  104. package/hooks/enforce-scope.mjs +273 -0
  105. package/hooks/hooks-codex.json +60 -0
  106. package/hooks/hooks-cursor.json +15 -0
  107. package/hooks/hooks-pi.json +115 -0
  108. package/hooks/hooks.json +215 -0
  109. package/hooks/loop-guard.mjs +260 -0
  110. package/hooks/on-session-end.mjs +217 -0
  111. package/hooks/on-session-start.mjs +660 -0
  112. package/hooks/on-stop.mjs +294 -0
  113. package/hooks/operator-steer.mjs +64 -0
  114. package/hooks/post-edit-validate.mjs +225 -0
  115. package/hooks/post-subagent-discovery-validator.mjs +398 -0
  116. package/hooks/post-tool-batch-wave-signal.mjs +328 -0
  117. package/hooks/post-tool-failure-corrective-context.mjs +248 -0
  118. package/hooks/post-tooluse-frontend-slop.mjs +184 -0
  119. package/hooks/pre-bash-destructive-guard.mjs +515 -0
  120. package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
  121. package/hooks/pre-bash-staging-fence.mjs +223 -0
  122. package/hooks/pre-bash-templates-first.mjs +404 -0
  123. package/hooks/run-node.sh +72 -0
  124. package/hooks/skill-invocation-telemetry.mjs +99 -0
  125. package/hooks/subagent-telemetry.mjs +249 -0
  126. package/hooks/wave-scope-commit-guard.mjs +191 -0
  127. package/monitors/monitors.json +14 -0
  128. package/output-styles/finding-report.md +48 -0
  129. package/output-styles/session-report.md +53 -0
  130. package/output-styles/wave-summary.md +38 -0
  131. package/package.json +94 -0
  132. package/pi/extensions/session-orchestrator.ts +25 -0
  133. package/pi/prompts/autopilot-multi.md +12 -0
  134. package/pi/prompts/autopilot.md +12 -0
  135. package/pi/prompts/bootstrap.md +12 -0
  136. package/pi/prompts/brainstorm.md +12 -0
  137. package/pi/prompts/close.md +11 -0
  138. package/pi/prompts/debug.md +12 -0
  139. package/pi/prompts/discovery.md +12 -0
  140. package/pi/prompts/dispatcher.md +12 -0
  141. package/pi/prompts/eval.md +12 -0
  142. package/pi/prompts/evolve.md +12 -0
  143. package/pi/prompts/go.md +12 -0
  144. package/pi/prompts/grill.md +12 -0
  145. package/pi/prompts/harness-audit.md +12 -0
  146. package/pi/prompts/memory-cleanup.md +12 -0
  147. package/pi/prompts/persona-panel.md +12 -0
  148. package/pi/prompts/plan.md +12 -0
  149. package/pi/prompts/portfolio.md +12 -0
  150. package/pi/prompts/reconcile.md +12 -0
  151. package/pi/prompts/repo-audit.md +12 -0
  152. package/pi/prompts/session.md +12 -0
  153. package/pi/prompts/spinout.md +12 -0
  154. package/pi/prompts/sunset-review.md +12 -0
  155. package/pi/prompts/templates-ack.md +12 -0
  156. package/pi/prompts/test.md +12 -0
  157. package/rules/_index.md +51 -0
  158. package/rules/always-on/commit-discipline.md +26 -0
  159. package/rules/always-on/npm-quality-gates.md +26 -0
  160. package/rules/always-on/parallel-sessions.md +43 -0
  161. package/rules/opt-in-domain/prompt-caching.md +270 -0
  162. package/rules/opt-in-stack/backend-data.md +188 -0
  163. package/rules/opt-in-stack/backend.md +390 -0
  164. package/rules/opt-in-stack/frontend.md +98 -0
  165. package/rules/opt-in-stack/security-web.md +194 -0
  166. package/rules/opt-in-stack/swift.md +65 -0
  167. package/scripts/archive-closed-prds.mjs +416 -0
  168. package/scripts/autopilot-multi.mjs +802 -0
  169. package/scripts/autopilot.mjs +383 -0
  170. package/scripts/backfill-abandoned-sessions.mjs +265 -0
  171. package/scripts/backfill-learnings-expires.mjs +196 -0
  172. package/scripts/backfill-learnings.mjs +203 -0
  173. package/scripts/backfill-sessions.mjs +282 -0
  174. package/scripts/check-doc-consistency.sh +279 -0
  175. package/scripts/check-package-manager.mjs +445 -0
  176. package/scripts/ci/assert-vitest-green.mjs +267 -0
  177. package/scripts/codex-install.mjs +435 -0
  178. package/scripts/compute-grounding-injection.sh +186 -0
  179. package/scripts/cursor-install.mjs +113 -0
  180. package/scripts/dialectic-deriver.mjs +573 -0
  181. package/scripts/emit-event.mjs +160 -0
  182. package/scripts/emit-session.mjs +212 -0
  183. package/scripts/eval-session.mjs +262 -0
  184. package/scripts/export-hw-learnings.mjs +437 -0
  185. package/scripts/gc-stale-worktrees.mjs +666 -0
  186. package/scripts/generate-pi-prompts.mjs +127 -0
  187. package/scripts/harness-audit.mjs +287 -0
  188. package/scripts/lib/agent-frontmatter.mjs +266 -0
  189. package/scripts/lib/agent-output-schema.mjs +166 -0
  190. package/scripts/lib/agent-status.mjs +303 -0
  191. package/scripts/lib/ajv-loader.mjs +34 -0
  192. package/scripts/lib/auto-dialectic.mjs +382 -0
  193. package/scripts/lib/auto-dream.mjs +471 -0
  194. package/scripts/lib/autonomy/suitability.mjs +212 -0
  195. package/scripts/lib/autopilot/dep-graph.mjs +417 -0
  196. package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
  197. package/scripts/lib/autopilot/flags.mjs +104 -0
  198. package/scripts/lib/autopilot/kill-switches.mjs +174 -0
  199. package/scripts/lib/autopilot/loop.mjs +320 -0
  200. package/scripts/lib/autopilot/mr-draft.mjs +520 -0
  201. package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
  202. package/scripts/lib/autopilot/recent-runs.mjs +106 -0
  203. package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
  204. package/scripts/lib/autopilot/telemetry.mjs +224 -0
  205. package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
  206. package/scripts/lib/autopilot-telemetry.mjs +11 -0
  207. package/scripts/lib/autopilot.mjs +39 -0
  208. package/scripts/lib/backlog-scan.mjs +179 -0
  209. package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
  210. package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
  211. package/scripts/lib/build-live-signals.mjs +150 -0
  212. package/scripts/lib/ci-status-banner.mjs +425 -0
  213. package/scripts/lib/claude-md-budget-lint.mjs +246 -0
  214. package/scripts/lib/cli-flags.mjs +158 -0
  215. package/scripts/lib/codex/plugin-contract.mjs +610 -0
  216. package/scripts/lib/cold-start-detector.mjs +240 -0
  217. package/scripts/lib/command-blocker.mjs +458 -0
  218. package/scripts/lib/common.mjs +333 -0
  219. package/scripts/lib/config/auto-dream.mjs +77 -0
  220. package/scripts/lib/config/block-header.mjs +94 -0
  221. package/scripts/lib/config/broken-window.mjs +114 -0
  222. package/scripts/lib/config/coercers.mjs +248 -0
  223. package/scripts/lib/config/cold-start.mjs +92 -0
  224. package/scripts/lib/config/config-protection.mjs +120 -0
  225. package/scripts/lib/config/cross-repo.mjs +104 -0
  226. package/scripts/lib/config/custom-phases.mjs +213 -0
  227. package/scripts/lib/config/dialectic.mjs +92 -0
  228. package/scripts/lib/config/discovery-validator.mjs +75 -0
  229. package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
  230. package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
  231. package/scripts/lib/config/docs-orchestrator.mjs +90 -0
  232. package/scripts/lib/config/docs-staleness.mjs +96 -0
  233. package/scripts/lib/config/drift-check.mjs +155 -0
  234. package/scripts/lib/config/eval.mjs +130 -0
  235. package/scripts/lib/config/events-rotation.mjs +74 -0
  236. package/scripts/lib/config/evolve.mjs +308 -0
  237. package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
  238. package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
  239. package/scripts/lib/config/handover-gate.mjs +106 -0
  240. package/scripts/lib/config/host-paths.mjs +76 -0
  241. package/scripts/lib/config/io.mjs +54 -0
  242. package/scripts/lib/config/loop-guard.mjs +117 -0
  243. package/scripts/lib/config/memory.mjs +150 -0
  244. package/scripts/lib/config/persona-gate-wave.mjs +258 -0
  245. package/scripts/lib/config/reconcile.mjs +205 -0
  246. package/scripts/lib/config/section-extractor.mjs +100 -0
  247. package/scripts/lib/config/skill-evolution.mjs +112 -0
  248. package/scripts/lib/config/slopcheck.mjs +99 -0
  249. package/scripts/lib/config/state-md-lock.mjs +83 -0
  250. package/scripts/lib/config/templates-first.mjs +94 -0
  251. package/scripts/lib/config/test.mjs +113 -0
  252. package/scripts/lib/config/vault-integration.mjs +201 -0
  253. package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
  254. package/scripts/lib/config/vault-staleness.mjs +84 -0
  255. package/scripts/lib/config/vault-sync.mjs +96 -0
  256. package/scripts/lib/config/verification-auto-fix.mjs +84 -0
  257. package/scripts/lib/config/wave-reviewers.mjs +133 -0
  258. package/scripts/lib/config-schema.mjs +345 -0
  259. package/scripts/lib/config.mjs +474 -0
  260. package/scripts/lib/convergence-monitor.mjs +389 -0
  261. package/scripts/lib/coordinator-snapshot.mjs +371 -0
  262. package/scripts/lib/crypto-digest-utils.mjs +91 -0
  263. package/scripts/lib/discovery/helpers.mjs +127 -0
  264. package/scripts/lib/discovery/triage-state.mjs +279 -0
  265. package/scripts/lib/dispatcher/cli.mjs +257 -0
  266. package/scripts/lib/dispatcher/enumerate.mjs +243 -0
  267. package/scripts/lib/dispatcher/rank.mjs +363 -0
  268. package/scripts/lib/ecosystem-health.mjs +224 -0
  269. package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
  270. package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
  271. package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
  272. package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
  273. package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
  274. package/scripts/lib/ecosystem-wizard.mjs +48 -0
  275. package/scripts/lib/env-check.mjs +89 -0
  276. package/scripts/lib/eval/engine.mjs +605 -0
  277. package/scripts/lib/eval/judge.mjs +433 -0
  278. package/scripts/lib/eval/report.mjs +367 -0
  279. package/scripts/lib/eval/schema.mjs +618 -0
  280. package/scripts/lib/eval/session-resolve.mjs +137 -0
  281. package/scripts/lib/eval/sink.mjs +77 -0
  282. package/scripts/lib/events-rotation.mjs +86 -0
  283. package/scripts/lib/events-schema.mjs +81 -0
  284. package/scripts/lib/events.mjs +80 -0
  285. package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
  286. package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
  287. package/scripts/lib/exclusivity-matrix.mjs +68 -0
  288. package/scripts/lib/fetch-baseline.mjs +311 -0
  289. package/scripts/lib/file-lock.mjs +512 -0
  290. package/scripts/lib/frontend-detect/detect.mjs +138 -0
  291. package/scripts/lib/frontend-detect/rules.mjs +295 -0
  292. package/scripts/lib/frontmatter-guard.mjs +241 -0
  293. package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
  294. package/scripts/lib/gates/gate-baseline.mjs +42 -0
  295. package/scripts/lib/gates/gate-full.mjs +85 -0
  296. package/scripts/lib/gates/gate-helpers.mjs +231 -0
  297. package/scripts/lib/gates/gate-incremental.mjs +76 -0
  298. package/scripts/lib/gates/gate-per-file.mjs +55 -0
  299. package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
  300. package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
  301. package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
  302. package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
  303. package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
  304. package/scripts/lib/handover-gate.mjs +222 -0
  305. package/scripts/lib/hardening.mjs +43 -0
  306. package/scripts/lib/hardware-pattern-detector.mjs +238 -0
  307. package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
  308. package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
  309. package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
  310. package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
  311. package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
  312. package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
  313. package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
  314. package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
  315. package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
  316. package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
  317. package/scripts/lib/harness-audit/categories.mjs +19 -0
  318. package/scripts/lib/historical-guard.mjs +15 -0
  319. package/scripts/lib/host-identity.mjs +262 -0
  320. package/scripts/lib/instruction-budget-guard.mjs +332 -0
  321. package/scripts/lib/io.mjs +304 -0
  322. package/scripts/lib/issue-close-strip-labels.mjs +161 -0
  323. package/scripts/lib/language-mappers/README.md +57 -0
  324. package/scripts/lib/language-mappers/index.mjs +165 -0
  325. package/scripts/lib/language-mappers/markdown.mjs +149 -0
  326. package/scripts/lib/language-mappers/python.mjs +249 -0
  327. package/scripts/lib/language-mappers/swift.mjs +201 -0
  328. package/scripts/lib/language-mappers/typescript.mjs +433 -0
  329. package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
  330. package/scripts/lib/learnings/filters.mjs +43 -0
  331. package/scripts/lib/learnings/io.mjs +255 -0
  332. package/scripts/lib/learnings/schema.mjs +518 -0
  333. package/scripts/lib/learnings/surface.mjs +207 -0
  334. package/scripts/lib/learnings.mjs +42 -0
  335. package/scripts/lib/lock-reaper.mjs +648 -0
  336. package/scripts/lib/locks/index.mjs +31 -0
  337. package/scripts/lib/locks/lock-body.mjs +62 -0
  338. package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
  339. package/scripts/lib/locks/state-md-lock.mjs +351 -0
  340. package/scripts/lib/loop-readiness-banner.mjs +144 -0
  341. package/scripts/lib/memory-banner.mjs +478 -0
  342. package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
  343. package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
  344. package/scripts/lib/memory-paths.mjs +31 -0
  345. package/scripts/lib/memory-proposals/collector.mjs +334 -0
  346. package/scripts/lib/memory-proposals/schema.mjs +289 -0
  347. package/scripts/lib/memory-proposals/sink.mjs +507 -0
  348. package/scripts/lib/memory-proposals/store.mjs +441 -0
  349. package/scripts/lib/mission-status-schema.mjs +114 -0
  350. package/scripts/lib/mode-selector/alternatives.mjs +64 -0
  351. package/scripts/lib/mode-selector/constants.mjs +29 -0
  352. package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
  353. package/scripts/lib/mode-selector/rationale.mjs +55 -0
  354. package/scripts/lib/mode-selector/scoring.mjs +221 -0
  355. package/scripts/lib/mode-selector-accuracy.mjs +121 -0
  356. package/scripts/lib/mode-selector.mjs +160 -0
  357. package/scripts/lib/multi-provider-build/providers.mjs +64 -0
  358. package/scripts/lib/multi-provider-build/templating.mjs +130 -0
  359. package/scripts/lib/named-baseline-resolver.mjs +233 -0
  360. package/scripts/lib/named-vault-resolver.mjs +433 -0
  361. package/scripts/lib/owner-config/coerce.mjs +29 -0
  362. package/scripts/lib/owner-config/constants.mjs +21 -0
  363. package/scripts/lib/owner-config/defaults.mjs +50 -0
  364. package/scripts/lib/owner-config/error.mjs +19 -0
  365. package/scripts/lib/owner-config/index.mjs +13 -0
  366. package/scripts/lib/owner-config/merge.mjs +52 -0
  367. package/scripts/lib/owner-config/validate.mjs +259 -0
  368. package/scripts/lib/owner-config-banner.mjs +126 -0
  369. package/scripts/lib/owner-config-loader.mjs +159 -0
  370. package/scripts/lib/owner-config.example.yaml +72 -0
  371. package/scripts/lib/owner-config.mjs +28 -0
  372. package/scripts/lib/owner-interview.mjs +243 -0
  373. package/scripts/lib/owner-yaml.mjs +571 -0
  374. package/scripts/lib/package-manager.mjs +160 -0
  375. package/scripts/lib/path-utils.mjs +217 -0
  376. package/scripts/lib/peer-cards/merger.mjs +310 -0
  377. package/scripts/lib/peer-cards/reader.mjs +125 -0
  378. package/scripts/lib/peer-cards/schema.mjs +230 -0
  379. package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
  380. package/scripts/lib/peer-cards/writer.mjs +138 -0
  381. package/scripts/lib/peer-discovery.mjs +200 -0
  382. package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
  383. package/scripts/lib/persona-panel/consolidator.mjs +370 -0
  384. package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
  385. package/scripts/lib/persona-panel/threshold.mjs +130 -0
  386. package/scripts/lib/pi-hook-bridge.mjs +328 -0
  387. package/scripts/lib/platform.mjs +266 -0
  388. package/scripts/lib/playwright-driver/runner.mjs +297 -0
  389. package/scripts/lib/plugin-root.mjs +210 -0
  390. package/scripts/lib/pre-dispatch-check.mjs +126 -0
  391. package/scripts/lib/product-repo-detect.mjs +121 -0
  392. package/scripts/lib/profiles/registry.mjs +176 -0
  393. package/scripts/lib/profiles/schema.mjs +209 -0
  394. package/scripts/lib/qg-command-drift-banner.mjs +88 -0
  395. package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
  396. package/scripts/lib/quality-gate.mjs +536 -0
  397. package/scripts/lib/quality-gates-cache.mjs +228 -0
  398. package/scripts/lib/quality-gates-policy.mjs +95 -0
  399. package/scripts/lib/recommendations-v0.mjs +156 -0
  400. package/scripts/lib/reconcile/eligibility.mjs +203 -0
  401. package/scripts/lib/reconcile/emitter.mjs +244 -0
  402. package/scripts/lib/reconcile/engine.mjs +412 -0
  403. package/scripts/lib/reconcile/idempotency.mjs +239 -0
  404. package/scripts/lib/reconcile/renderer.mjs +211 -0
  405. package/scripts/lib/reconcile/writer.mjs +293 -0
  406. package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
  407. package/scripts/lib/resource-probe/evaluate.mjs +190 -0
  408. package/scripts/lib/resource-probe/parsers.mjs +181 -0
  409. package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
  410. package/scripts/lib/resource-probe.mjs +95 -0
  411. package/scripts/lib/rule-loader.mjs +552 -0
  412. package/scripts/lib/rules-sync.mjs +439 -0
  413. package/scripts/lib/scope-gate.mjs +496 -0
  414. package/scripts/lib/session-close-backfill.mjs +539 -0
  415. package/scripts/lib/session-discovery.mjs +256 -0
  416. package/scripts/lib/session-end/phase-skip.mjs +357 -0
  417. package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
  418. package/scripts/lib/session-id.mjs +362 -0
  419. package/scripts/lib/session-lock.mjs +703 -0
  420. package/scripts/lib/session-registry.mjs +355 -0
  421. package/scripts/lib/session-schema/aliases.mjs +71 -0
  422. package/scripts/lib/session-schema/constants.mjs +115 -0
  423. package/scripts/lib/session-schema/normalizer.mjs +66 -0
  424. package/scripts/lib/session-schema/timestamps.mjs +64 -0
  425. package/scripts/lib/session-schema/validator.mjs +453 -0
  426. package/scripts/lib/session-schema.mjs +71 -0
  427. package/scripts/lib/session-token-rollup.mjs +137 -0
  428. package/scripts/lib/sessions-staleness-banner.mjs +247 -0
  429. package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
  430. package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
  431. package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
  432. package/scripts/lib/skill-evolution/engine.mjs +719 -0
  433. package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
  434. package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
  435. package/scripts/lib/skill-health/join.mjs +181 -0
  436. package/scripts/lib/skill-health/score.mjs +123 -0
  437. package/scripts/lib/skill-invocations-schema.mjs +214 -0
  438. package/scripts/lib/skill-judge.mjs +348 -0
  439. package/scripts/lib/skill-judgments-schema.mjs +264 -0
  440. package/scripts/lib/slopcheck.mjs +501 -0
  441. package/scripts/lib/soul-resolve.mjs +118 -0
  442. package/scripts/lib/spiral-carryover.mjs +495 -0
  443. package/scripts/lib/state-md/body-sections.mjs +851 -0
  444. package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
  445. package/scripts/lib/state-md/mission-status.mjs +247 -0
  446. package/scripts/lib/state-md/recommendations.mjs +57 -0
  447. package/scripts/lib/state-md/yaml-parser.mjs +234 -0
  448. package/scripts/lib/state-md-peer-guard.mjs +232 -0
  449. package/scripts/lib/state-md.mjs +53 -0
  450. package/scripts/lib/subagents-schema.mjs +309 -0
  451. package/scripts/lib/sunset/walker.mjs +1192 -0
  452. package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
  453. package/scripts/lib/test-runner/fingerprint.mjs +33 -0
  454. package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
  455. package/scripts/lib/tmux-layout/layouts.mjs +224 -0
  456. package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
  457. package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
  458. package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
  459. package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
  460. package/scripts/lib/validate/check-agents.mjs +457 -0
  461. package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
  462. package/scripts/lib/validate/check-commands.mjs +148 -0
  463. package/scripts/lib/validate/check-component-paths.mjs +112 -0
  464. package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
  465. package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
  466. package/scripts/lib/validate/check-json-files.mjs +116 -0
  467. package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
  468. package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
  469. package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
  470. package/scripts/lib/validate/check-pi-package.mjs +110 -0
  471. package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
  472. package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
  473. package/scripts/lib/validate/check-plugin-json.mjs +96 -0
  474. package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
  475. package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
  476. package/scripts/lib/validate/check-rules.mjs +143 -0
  477. package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
  478. package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
  479. package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
  480. package/scripts/lib/validate/confidential-names.mjs +169 -0
  481. package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
  482. package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
  483. package/scripts/lib/validate/tier-inference.mjs +100 -0
  484. package/scripts/lib/validate-vendored-rules.mjs +519 -0
  485. package/scripts/lib/vault-archive.mjs +404 -0
  486. package/scripts/lib/vault-backfill/glab.mjs +164 -0
  487. package/scripts/lib/vault-backfill/manifest.mjs +75 -0
  488. package/scripts/lib/vault-backfill/template.mjs +130 -0
  489. package/scripts/lib/vault-consolidate-fs.mjs +331 -0
  490. package/scripts/lib/vault-migration-rules.mjs +155 -0
  491. package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
  492. package/scripts/lib/vault-mirror/namespace.mjs +152 -0
  493. package/scripts/lib/vault-mirror/process.mjs +567 -0
  494. package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
  495. package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
  496. package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
  497. package/scripts/lib/vault-mirror/render.mjs +8 -0
  498. package/scripts/lib/vault-mirror/utils.mjs +217 -0
  499. package/scripts/lib/vault-relocation-rules.mjs +555 -0
  500. package/scripts/lib/vault-repo-backfill.mjs +235 -0
  501. package/scripts/lib/vault-staleness-banner.mjs +142 -0
  502. package/scripts/lib/vault-status/board-writer.mjs +769 -0
  503. package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
  504. package/scripts/lib/vault-sync-baseline.mjs +152 -0
  505. package/scripts/lib/wave-context.mjs +29 -0
  506. package/scripts/lib/wave-executor/pool.mjs +248 -0
  507. package/scripts/lib/wave-resource-gate.mjs +204 -0
  508. package/scripts/lib/wave-sizing.mjs +75 -0
  509. package/scripts/lib/webhook-url.mjs +105 -0
  510. package/scripts/lib/workspace.mjs +198 -0
  511. package/scripts/lib/worktree/constants.mjs +35 -0
  512. package/scripts/lib/worktree/index.mjs +17 -0
  513. package/scripts/lib/worktree/lifecycle.mjs +287 -0
  514. package/scripts/lib/worktree/listing.mjs +118 -0
  515. package/scripts/lib/worktree/meta.mjs +64 -0
  516. package/scripts/lib/worktree-freshness.mjs +313 -0
  517. package/scripts/lib/worktree.mjs +15 -0
  518. package/scripts/lifecycle-sim-v6.mjs +347 -0
  519. package/scripts/lock-reaper.mjs +185 -0
  520. package/scripts/mcp-server.sh +241 -0
  521. package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
  522. package/scripts/memory-propose.mjs +464 -0
  523. package/scripts/migrate-cold-start-seed.mjs +404 -0
  524. package/scripts/migrate-learnings-jsonl.mjs +189 -0
  525. package/scripts/migrate-legacy-learnings.sh +61 -0
  526. package/scripts/migrate-sessions-jsonl.mjs +448 -0
  527. package/scripts/migrate-subagents-jsonl.mjs +196 -0
  528. package/scripts/migrate-vault-paths.mjs +796 -0
  529. package/scripts/parse-config.mjs +149 -0
  530. package/scripts/pi-install.mjs +117 -0
  531. package/scripts/print-applicable-rules.mjs +247 -0
  532. package/scripts/promote-vault-strict.mjs +496 -0
  533. package/scripts/relocate-vault-corpus.mjs +1178 -0
  534. package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
  535. package/scripts/run-quality-gate.mjs +216 -0
  536. package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
  537. package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
  538. package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
  539. package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
  540. package/scripts/sweep-expired-learnings.mjs +135 -0
  541. package/scripts/sync-vault-schema.mjs +376 -0
  542. package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
  543. package/scripts/tmux-layout.mjs +245 -0
  544. package/scripts/token-audit.sh +191 -0
  545. package/scripts/typecheck.mjs +42 -0
  546. package/scripts/upload-social-preview.mjs +316 -0
  547. package/scripts/validate-config.mjs +46 -0
  548. package/scripts/validate-plugin-manifests.mjs +163 -0
  549. package/scripts/validate-plugin.mjs +264 -0
  550. package/scripts/validate-wave-scope.mjs +289 -0
  551. package/scripts/vault-backfill.mjs +404 -0
  552. package/scripts/vault-consolidate.mjs +596 -0
  553. package/scripts/vault-integration-watcher.mjs +394 -0
  554. package/scripts/vault-mirror.mjs +430 -0
  555. package/skills/_shared/bootstrap-gate.md +111 -0
  556. package/skills/_shared/config-reading.md +226 -0
  557. package/skills/_shared/instruction-file-resolution.md +79 -0
  558. package/skills/_shared/model-selection.md +64 -0
  559. package/skills/_shared/monitor-patterns.md +300 -0
  560. package/skills/_shared/parallel-aware-auq.md +121 -0
  561. package/skills/_shared/parallel-aware-preamble.md +185 -0
  562. package/skills/_shared/platform-tools.md +96 -0
  563. package/skills/_shared/state-ownership.md +221 -0
  564. package/skills/architecture/DEEPENING.md +37 -0
  565. package/skills/architecture/INTERFACE-DESIGN.md +44 -0
  566. package/skills/architecture/LANGUAGE.md +53 -0
  567. package/skills/architecture/SKILL.md +92 -0
  568. package/skills/autopilot/SKILL.md +419 -0
  569. package/skills/bootstrap/SKILL.md +592 -0
  570. package/skills/bootstrap/STATE.md.template +24 -0
  571. package/skills/bootstrap/_shared-template.md +243 -0
  572. package/skills/bootstrap/deep-template.md +659 -0
  573. package/skills/bootstrap/fast-template.md +251 -0
  574. package/skills/bootstrap/intensity-heuristic.md +80 -0
  575. package/skills/bootstrap/public-fallback.md +342 -0
  576. package/skills/bootstrap/standard-template.md +736 -0
  577. package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
  578. package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
  579. package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
  580. package/skills/brainstorm/SKILL.md +268 -0
  581. package/skills/brainstorm/soul.md +49 -0
  582. package/skills/claude-md-drift-check/SKILL.md +186 -0
  583. package/skills/claude-md-drift-check/checker.mjs +1380 -0
  584. package/skills/claude-md-drift-check/checker.sh +37 -0
  585. package/skills/claude-md-drift-check/package.json +16 -0
  586. package/skills/convergence-monitoring/README.md +39 -0
  587. package/skills/convergence-monitoring/SIGNALS.md +246 -0
  588. package/skills/convergence-monitoring/SKILL.md +285 -0
  589. package/skills/daily/SKILL.md +222 -0
  590. package/skills/daily/generate.sh +92 -0
  591. package/skills/daily/templates/daily.md.tpl +36 -0
  592. package/skills/debug/SKILL.md +188 -0
  593. package/skills/debug/soul.md +35 -0
  594. package/skills/discovery/SKILL.md +567 -0
  595. package/skills/discovery/issue-templates.md +237 -0
  596. package/skills/discovery/probes/docs-staleness.mjs +195 -0
  597. package/skills/discovery/probes/frontend-slop.mjs +186 -0
  598. package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
  599. package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
  600. package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
  601. package/skills/discovery/probes/vault-staleness.mjs +272 -0
  602. package/skills/discovery/probes-arch.md +252 -0
  603. package/skills/discovery/probes-audit.md +95 -0
  604. package/skills/discovery/probes-code.md +329 -0
  605. package/skills/discovery/probes-docs.md +76 -0
  606. package/skills/discovery/probes-feature.md +150 -0
  607. package/skills/discovery/probes-infra.md +138 -0
  608. package/skills/discovery/probes-intro.md +25 -0
  609. package/skills/discovery/probes-session.md +495 -0
  610. package/skills/discovery/probes-supply-chain.md +94 -0
  611. package/skills/discovery/probes-ui.md +147 -0
  612. package/skills/discovery/probes-vault.md +64 -0
  613. package/skills/discovery/slop-patterns.md +115 -0
  614. package/skills/dispatcher/SKILL.md +173 -0
  615. package/skills/docs-orchestrator/SKILL.md +362 -0
  616. package/skills/docs-orchestrator/audience-mapping.md +140 -0
  617. package/skills/domain-model/ADR-FORMAT.md +47 -0
  618. package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
  619. package/skills/domain-model/SKILL.md +85 -0
  620. package/skills/ecosystem-health/SKILL.md +119 -0
  621. package/skills/ecosystem-health/wizard.md +193 -0
  622. package/skills/eval/SKILL.md +293 -0
  623. package/skills/eval/rubric-v1.md +218 -0
  624. package/skills/evolve/SKILL.md +546 -0
  625. package/skills/frontmatter-guard/SKILL.md +126 -0
  626. package/skills/gitlab-ops/SKILL.md +368 -0
  627. package/skills/gitlab-portfolio/SKILL.md +196 -0
  628. package/skills/grill/SKILL.md +185 -0
  629. package/skills/grill/soul.md +55 -0
  630. package/skills/hook-development/SKILL.md +413 -0
  631. package/skills/mcp-builder/SKILL.md +260 -0
  632. package/skills/memory-cleanup/SKILL.md +310 -0
  633. package/skills/mode-selector/SKILL.md +226 -0
  634. package/skills/peekaboo-driver/SKILL.md +237 -0
  635. package/skills/peekaboo-driver/soul.md +32 -0
  636. package/skills/persona-panel/SKILL.md +365 -0
  637. package/skills/persona-panel/persona-format.md +205 -0
  638. package/skills/persona-panel/presets/designer-lens.md +87 -0
  639. package/skills/persona-panel/presets/engineer-lens.md +88 -0
  640. package/skills/persona-panel/presets/pm-lens.md +86 -0
  641. package/skills/plan/SKILL.md +496 -0
  642. package/skills/plan/mode-feature.md +141 -0
  643. package/skills/plan/mode-new.md +297 -0
  644. package/skills/plan/mode-retro.md +271 -0
  645. package/skills/plan/prd-feature-template.md +132 -0
  646. package/skills/plan/prd-full-template.md +151 -0
  647. package/skills/plan/prd-reviewer-prompt.md +103 -0
  648. package/skills/plan/retro-template.md +75 -0
  649. package/skills/plan/soul.md +62 -0
  650. package/skills/playwright-driver/SKILL.md +226 -0
  651. package/skills/playwright-driver/soul.md +30 -0
  652. package/skills/quality-gates/SKILL.md +212 -0
  653. package/skills/reconcile/SKILL.md +324 -0
  654. package/skills/repo-audit/SKILL.md +272 -0
  655. package/skills/session-end/SKILL.md +1044 -0
  656. package/skills/session-end/discovery-scan.md +37 -0
  657. package/skills/session-end/drift-operations.md +97 -0
  658. package/skills/session-end/learning-patterns.md +78 -0
  659. package/skills/session-end/metrics-collection.md +175 -0
  660. package/skills/session-end/phase-3-2-docs-verification.md +148 -0
  661. package/skills/session-end/phase-3-6-tail.md +344 -0
  662. package/skills/session-end/phase-3-7a-recommendations.md +86 -0
  663. package/skills/session-end/plan-verification.md +288 -0
  664. package/skills/session-end/session-metrics-write.md +223 -0
  665. package/skills/session-end/vault-operations.md +50 -0
  666. package/skills/session-end/verification-checklist.md +20 -0
  667. package/skills/session-plan/SKILL.md +554 -0
  668. package/skills/session-plan/wave-template.md +37 -0
  669. package/skills/session-start/SKILL.md +1043 -0
  670. package/skills/session-start/phase-2-5-docs-planning.md +119 -0
  671. package/skills/session-start/phase-4-5-resource-health.md +49 -0
  672. package/skills/session-start/phase-7-1-premise-check.md +47 -0
  673. package/skills/session-start/phase-7-5-mode-selector.md +237 -0
  674. package/skills/session-start/phase-8-5-express-path.md +61 -0
  675. package/skills/session-start/presentation-format.md +81 -0
  676. package/skills/session-start/soul.md +57 -0
  677. package/skills/skill-creator/SKILL.md +168 -0
  678. package/skills/spinout/SKILL.md +76 -0
  679. package/skills/sunset-review/SKILL.md +96 -0
  680. package/skills/test-runner/SKILL.md +362 -0
  681. package/skills/test-runner/rubric-v1.md +388 -0
  682. package/skills/test-runner/soul.md +46 -0
  683. package/skills/tmux-layout/SKILL.md +104 -0
  684. package/skills/ubiquitous-language/SKILL.md +97 -0
  685. package/skills/using-orchestrator/SKILL.md +144 -0
  686. package/skills/vault-mirror/SKILL.md +234 -0
  687. package/skills/vault-sync/SKILL.md +319 -0
  688. package/skills/vault-sync/package-lock.json +40 -0
  689. package/skills/vault-sync/package.json +11 -0
  690. package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
  691. package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
  692. package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +8 -0
  693. package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
  694. package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +8 -0
  695. package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
  696. package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
  697. package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
  698. package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
  699. package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
  700. package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
  701. package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
  702. package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +9 -0
  703. package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
  704. package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
  705. package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
  706. package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +7 -0
  707. package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
  708. package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
  709. package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +11 -0
  710. package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
  711. package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
  712. package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
  713. package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
  714. package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
  715. package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +11 -0
  716. package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
  717. package/skills/vault-sync/validator.mjs +658 -0
  718. package/skills/vault-sync/validator.sh +55 -0
  719. package/skills/wave-executor/SKILL.md +496 -0
  720. package/skills/wave-executor/circuit-breaker.md +169 -0
  721. package/skills/wave-executor/wave-loop.md +1043 -0
  722. package/skills/write-executable-plan/SKILL.md +237 -0
  723. package/skills/write-executable-plan/plan-template.md +154 -0
  724. package/templates/_minimal/CLAUDE.md.tmpl +41 -0
  725. package/templates/_minimal/README.md.tmpl +15 -0
  726. package/templates/_minimal/gitignore.tmpl +47 -0
  727. package/templates/_shared/harte-regeln.md +16 -0
  728. package/templates/_shared/loop.md +90 -0
  729. package/templates/_shared/rules/parallel-sessions.md +77 -0
  730. package/templates/nextjs-minimal/README.md +30 -0
  731. package/templates/nextjs-minimal/app/layout.tsx +18 -0
  732. package/templates/nextjs-minimal/app/page.tsx +7 -0
  733. package/templates/nextjs-minimal/eslint.config.mjs +16 -0
  734. package/templates/nextjs-minimal/next.config.mjs +4 -0
  735. package/templates/nextjs-minimal/package.json +27 -0
  736. package/templates/nextjs-minimal/tsconfig.json +23 -0
  737. package/templates/node-minimal/README.md +33 -0
  738. package/templates/node-minimal/eslint.config.mjs +10 -0
  739. package/templates/node-minimal/package.json +21 -0
  740. package/templates/node-minimal/src/index.ts +1 -0
  741. package/templates/node-minimal/tests/sanity.test.ts +5 -0
  742. package/templates/node-minimal/tsconfig.json +17 -0
  743. package/templates/personas/README.md +150 -0
  744. package/templates/personas/accounting-compliance.v1.md +120 -0
  745. package/templates/personas/accounting-tax-advisor.v1.md +116 -0
  746. package/templates/personas/buyer-p1-cto.v1.md +125 -0
  747. package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
  748. package/templates/personas/buyer-p3-build.v1.md +130 -0
  749. package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
  750. package/templates/personas/buyer-p5-solo.v1.md +132 -0
  751. package/templates/personas/buyer-p6-ld.v1.md +130 -0
  752. package/templates/personas/klima-ai-expert.v1.md +114 -0
  753. package/templates/personas/klima-physicist.v1.md +117 -0
  754. package/templates/python-uv/README.md +28 -0
  755. package/templates/python-uv/pyproject.toml +32 -0
  756. package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
  757. package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
  758. package/templates/python-uv/tests/test_sanity.py +2 -0
  759. package/templates/static-html/README.md +19 -0
  760. package/templates/static-html/index.html +15 -0
  761. package/templates/static-html/script.js +1 -0
  762. package/templates/static-html/styles.css +26 -0
@@ -0,0 +1,154 @@
1
+ # Owner Persona Schema (`owner.yaml`)
2
+
3
+ > Per-user configuration for the session-orchestrator plugin. Lives at
4
+ > `~/.config/session-orchestrator/owner.yaml`. Never committed to a project repo.
5
+ >
6
+ > Issue [#174](../../../-/issues/174) — D1 of Sub-Epic [#161](../../../-/issues/161) (Owner Persona Layer).
7
+ > Parent epic: [#157](../../../-/issues/157) (v3.1.0 Environment-Aware Sessions).
8
+
9
+ ## Path Resolution
10
+
11
+ The loader (`scripts/lib/owner-config-loader.mjs`) resolves the canonical path as:
12
+
13
+ ```
14
+ ${XDG_CONFIG_HOME ?? <homedir>/.config}/session-orchestrator/owner.yaml
15
+ ```
16
+
17
+ | Platform | Default path |
18
+ |------------|---------------------------------------------------------|
19
+ | macOS | `~/.config/session-orchestrator/owner.yaml` |
20
+ | Linux | `${XDG_CONFIG_HOME:-~/.config}/session-orchestrator/owner.yaml` |
21
+ | Windows | `%USERPROFILE%\.config\session-orchestrator\owner.yaml` |
22
+
23
+ A missing file is **not an error** — it signals the user has not opted in.
24
+ The loader returns `{ok: false, source: 'missing'}` in that case and consumers
25
+ fall back to plugin defaults.
26
+
27
+ ## Schema (`schema-version: 1`)
28
+
29
+ | Section / Field | Type | Required | Default | Notes |
30
+ |------------------------------------------|-------------------------------|----------|---------------|----------------------------------------------------|
31
+ | `schema-version` | integer | yes | — | Must equal `1`. |
32
+ | `owner.name` | string (1-100) | yes | — | Display name. |
33
+ | `owner.email-hash` | hex (64 chars) or `null` | no | `null` | SHA256 of email; cross-host identity correlation. |
34
+ | `owner.language` | ISO-639-1 (`de`, `en`, ...) | yes | — | Drives soul.md default language. |
35
+ | `tone.style` | `direct\|neutral\|friendly` | no | `neutral` | |
36
+ | `tone.tonality` | string (≤200) or `null` | no | `null` | Free-form descriptor. |
37
+ | `efficiency.output-level` | `lite\|full\|ultra` | no | `full` | Caveman-inspired token dial. |
38
+ | `efficiency.preamble` | `minimal\|verbose` | no | `minimal` | Pre-tool-call narration. |
39
+ | `efficiency.comments-in-code` | `minimal\|full` | no | `minimal` | Inline code comments. |
40
+ | `hardware-sharing.enabled` | boolean | no | `false` | Consent gate for hardware-pattern export. |
41
+ | `hardware-sharing.hash-salt` | hex (64 chars) or `null` | no | `null` | Per-host random salt. Required when `enabled=true`.|
42
+ | `defaults.preferred-test-command` | string (≤200) or `null` | no | `null` | Override CLAUDE.md `test-command`. |
43
+ | `defaults.preferred-editor` | string (≤50) or `null` | no | `null` | |
44
+ | `metadata.created_at` | ISO 8601 string or `null` | no | `null` | Auto-set on first write. |
45
+ | `metadata.updated_at` | ISO 8601 string or `null` | no | `null` | Auto-bumped on every save. |
46
+
47
+ ### Privacy Contract
48
+
49
+ - `hardware-sharing.enabled = true` **requires** `hardware-sharing.hash-salt`
50
+ to be a valid 64-char hex string. The validator rejects `enabled=true` with
51
+ `hash-salt=null` so consent is never recorded without the means to
52
+ anonymise per-host learnings.
53
+ - `owner.email-hash` is the only field carrying potential cross-host identity;
54
+ it is hashed (never plaintext email) and remains optional.
55
+
56
+ ## Example
57
+
58
+ See [`scripts/lib/owner-config.example.yaml`](../scripts/lib/owner-config.example.yaml)
59
+ for an annotated, copyable example.
60
+
61
+ ## API Surface
62
+
63
+ `scripts/lib/owner-config.mjs` (pure, no I/O):
64
+
65
+ ```js
66
+ import { validate, coerce, defaults, merge } from './scripts/lib/owner-config.mjs';
67
+
68
+ // Defensive, never throws. Use this in skill code paths.
69
+ const result = validate(rawObj);
70
+ // → { ok: true, value: <normalized>, errors: [] }
71
+ // → { ok: false, value: null, errors: ["owner.name must be ..."] }
72
+
73
+ // Strict mode: throws OwnerConfigError on failure. Use in tests / CLI.
74
+ const value = coerce(rawObj);
75
+
76
+ // Default-filled config. owner.name and owner.language remain blank
77
+ // (the bootstrap interview in D2 fills them in).
78
+ const def = defaults();
79
+
80
+ // Deep-merge two configs. `override` wins on every defined leaf.
81
+ const merged = merge(baseFromOwnerYaml, perSessionOverrides);
82
+ ```
83
+
84
+ `scripts/lib/owner-config-loader.mjs` (filesystem I/O):
85
+
86
+ ```js
87
+ import { loadOwnerConfig, resolveOwnerConfigPath } from './scripts/lib/owner-config-loader.mjs';
88
+
89
+ const result = await loadOwnerConfig();
90
+ // {
91
+ // ok: true|false,
92
+ // value: <normalized> | null,
93
+ // errors: string[],
94
+ // source: 'file' | 'missing' | 'parse-error' | 'validation-error',
95
+ // path: '<absolute path>',
96
+ // }
97
+
98
+ // Test override
99
+ const result2 = await loadOwnerConfig({ path: '/tmp/test-owner.yaml' });
100
+ ```
101
+
102
+ ## Where this gets read
103
+
104
+ D1 only ships the schema + validator + loader. The downstream tasks consume
105
+ these primitives:
106
+
107
+ - **[#175 D2](../../../-/issues/175) — bootstrap interview**: writes the file via
108
+ `coerce()` then a YAML serializer, stamping `metadata.created_at` /
109
+ `metadata.updated_at`.
110
+ - **[#176 D3](../../../-/issues/176) — `soul.md` runtime-merge**: calls
111
+ `loadOwnerConfig()` from the session-start hook, then `merge()` with any
112
+ per-session overrides, then resolves `{{tone.style}}` /
113
+ `{{efficiency.output-level}}` / `{{owner.language}}` template slots.
114
+ - **#177 D4 — projects-baseline propagation**: stamps a
115
+ reference to the canonical path into every consumer repo's CLAUDE.md
116
+ frontmatter (path reference only — never the content).
117
+ - **[#168 C4](../../../-/issues/168) — hardware-sharing consent prompt**: writes
118
+ `hardware-sharing.enabled = true` + a freshly-generated `hash-salt` after
119
+ the user accepts the consent dialogue.
120
+
121
+ ## Validation Rules (rejection examples)
122
+
123
+ ```yaml
124
+ # REJECTED — schema-version missing
125
+ owner: { name: x, language: en }
126
+
127
+ # REJECTED — schema-version mismatch (refuses to load future versions)
128
+ schema-version: 2
129
+ owner: { name: x, language: en }
130
+
131
+ # REJECTED — name empty
132
+ schema-version: 1
133
+ owner: { name: "", language: en }
134
+
135
+ # REJECTED — language not ISO-639-1
136
+ schema-version: 1
137
+ owner: { name: x, language: "english" }
138
+
139
+ # REJECTED — enum violation
140
+ schema-version: 1
141
+ owner: { name: x, language: en }
142
+ tone: { style: "snarky" }
143
+
144
+ # REJECTED — privacy contract: enabled=true without hash-salt
145
+ schema-version: 1
146
+ owner: { name: x, language: en }
147
+ hardware-sharing: { enabled: true }
148
+
149
+ # ACCEPTED — minimal valid config
150
+ schema-version: 1
151
+ owner:
152
+ name: Bernhard
153
+ language: de
154
+ ```
@@ -0,0 +1,433 @@
1
+ # /persona-panel — Multi-Persona Content Review
2
+
3
+ > Standalone skill + command for running N domain-expert, buyer-persona, or compliance personas
4
+ > against a target artifact in parallel, with deterministic consolidation, hard-gate semantics,
5
+ > and timestamped sidecar records for audit and trend-tracking.
6
+
7
+ ## When to use
8
+
9
+ - Reviewing a research statement or technical document from multiple expert angles simultaneously
10
+ (e.g. a climate-research brief reviewed by a physicist and an AI expert)
11
+ - Validating AI-generated accountant output from a domain-expert lens plus a compliance lens
12
+ before presenting it to a client
13
+ - Running a Buyer-Panel Hard-Gate on a B2B product landing page: all N buyer personas must PASS
14
+ before the page goes live
15
+ - Any "Multi-Pair-of-Eyes" review where you want structured, auditable output from N perspectives
16
+ without manually prompting each reviewer in turn
17
+
18
+ The panel runs personas **in parallel** — wall-clock time is roughly the slowest single persona,
19
+ not N times the slowest.
20
+
21
+ ---
22
+
23
+ ## Quick Start
24
+
25
+ ### 1. Create the catalog directory
26
+
27
+ ```bash
28
+ mkdir -p .claude/personas
29
+ ```
30
+
31
+ ### 2. Copy a starter template
32
+
33
+ Templates ship with the plugin at `templates/personas/`. Copy one as a starting point:
34
+
35
+ ```bash
36
+ cp "$(claude plugin dir session-orchestrator)/templates/personas/klima-physicist.v1.md" \
37
+ .claude/personas/klima-physicist.md
38
+ ```
39
+
40
+ Edit the file: update `name`, `role`, `evaluation_criteria`, and the `## Mission` body section
41
+ to match your reviewer's perspective.
42
+
43
+ ### 3. Confirm the catalog loads
44
+
45
+ ```bash
46
+ /persona-panel docs/research/my-draft.md --dry-run
47
+ ```
48
+
49
+ `--dry-run` resolves the catalog and prints the planned dispatch list without making any Agent
50
+ calls or writing any sidecar. Use it to verify setup before a real run.
51
+
52
+ ### 4. Run the panel
53
+
54
+ ```bash
55
+ /persona-panel docs/research/my-draft.md
56
+ ```
57
+
58
+ The command dispatches one agent per persona in parallel, consolidates verdicts using the
59
+ default voting mode, and prints a Markdown table summary to stdout. A timestamped sidecar is
60
+ written to `.orchestrator/persona-panel/`.
61
+
62
+ ---
63
+
64
+ ## Reference Examples
65
+
66
+ ### Example 1 — Research Statement Review (klima, 2-persona panel)
67
+
68
+ **Scenario:** A climate-research brief (`wfk-2.1.5.md`) needs sign-off from a domain physicist
69
+ and an AI/ML expert before it is submitted. Both must agree.
70
+
71
+ **Catalog files:** `.claude/personas/klima-physicist.md`,
72
+ `.claude/personas/klima-ai-expert.md`
73
+
74
+ ```bash
75
+ /persona-panel docs/research/wfk-2.1.5.md \
76
+ --personas klima-physicist,klima-ai-expert \
77
+ --mode voting \
78
+ --threshold 2-of-2
79
+ ```
80
+
81
+ The `2-of-2` threshold means both personas must return `pass`. A single `fail` or `warn` from
82
+ either produces a final `fail` verdict.
83
+
84
+ **Typical stdout output:**
85
+
86
+ ```
87
+ Dispatching 2 persona agents in parallel. Target: .../docs/research/wfk-2.1.5.md. Mode: voting.
88
+
89
+ ## Persona Panel Report
90
+
91
+ Target: docs/research/wfk-2.1.5.md
92
+ Personas: 2 invoked | Mode: voting (threshold: 2-of-2)
93
+ Final verdict: PASS
94
+
95
+ | Persona | Tier | Verdict | Rationale (excerpt) |
96
+ |------------------|---------------|---------|----------------------------------------------|
97
+ | klima-physicist | domain-expert | pass | Physical assumptions consistent with AR6 ... |
98
+ | klima-ai-expert | domain-expert | pass | Model claims grounded, no hallucinated ... |
99
+
100
+ Dissenting: none
101
+ Sidecar: .orchestrator/persona-panel/2026-05-20T14-30-00Z-a1b2c3d4.json
102
+ ```
103
+
104
+ **Sidecar excerpt:**
105
+
106
+ ```json
107
+ {
108
+ "run_id": "a1b2c3d4",
109
+ "target": "/abs/path/docs/research/wfk-2.1.5.md",
110
+ "personas_invoked": [
111
+ { "name": "klima-physicist", "version": "2", "model": "claude-opus-4-7", ... },
112
+ { "name": "klima-ai-expert", "version": "1", "model": "claude-opus-4-7", ... }
113
+ ],
114
+ "consolidation": {
115
+ "mode": "voting-quorum",
116
+ "final_verdict": "pass",
117
+ "pass_count": 2,
118
+ "fail_count": 0,
119
+ "dissenting_personas": []
120
+ }
121
+ }
122
+ ```
123
+
124
+ ---
125
+
126
+ ### Example 2 — Buyer-Panel Hard-Gate (products/example-app)
127
+
128
+ **Scenario:** A landing page component must pass review from all 6 buyer personas before the
129
+ copy is considered launch-ready. One `fail` blocks the whole gate.
130
+
131
+ **Catalog files:** `.claude/personas/` contains
132
+ `buyer-p1-cto.md` through `buyer-p6-*.md`.
133
+
134
+ ```bash
135
+ /persona-panel src/landing-page.tsx --mode hard-gate --threshold all
136
+ ```
137
+
138
+ Because `--threshold all` is the default for `hard-gate`, this is equivalent to:
139
+
140
+ ```bash
141
+ /persona-panel src/landing-page.tsx --mode hard-gate
142
+ ```
143
+
144
+ **If 5 of 6 personas pass (one fails):**
145
+
146
+ ```
147
+ Consolidation (hard-gate-threshold): 5 pass / 1 fail / 0 warn — Final: FAIL
148
+ Dissenting: buyer-p3-kanzlei
149
+
150
+ ## Persona Panel Report
151
+
152
+ Target: src/landing-page.tsx
153
+ Personas: 6 invoked | Mode: hard-gate (threshold: all)
154
+ Final verdict: FAIL
155
+
156
+ | Persona | Tier | Verdict | Rationale (excerpt) |
157
+ |-------------------------------|---------------|---------|----------------------------------------|
158
+ | buyer-p1-cto | buyer-persona | pass | Value proposition clear for CTO ... |
159
+ | buyer-p2-kanzlei | buyer-persona | pass | Compliance language acceptable ... |
160
+ | buyer-p3-kanzlei | buyer-persona | fail | DSGVO section too vague for ... |
161
+ | ... | ... | pass | ... |
162
+
163
+ Dissenting: buyer-p3-kanzlei
164
+ Sidecar: .orchestrator/persona-panel/2026-05-20T16-00-00Z-b2c3d4e5.json
165
+ ```
166
+
167
+ The command exits with code 1. CI pipelines and wave-executor hooks can gate on this exit code.
168
+
169
+ **To re-run after revisions:**
170
+
171
+ ```bash
172
+ # After fixing the DSGVO section:
173
+ /persona-panel src/landing-page.tsx --mode hard-gate --threshold all
174
+ ```
175
+
176
+ ---
177
+
178
+ ### Example 3 — AI Accountant Output Compliance Review (accounting)
179
+
180
+ **Scenario:** An AI accountant (Sophie) produces invoice analysis JSON. A tax-advisor persona
181
+ and a DSGVO-compliance persona must both approve before the output is delivered to the client.
182
+
183
+ **Catalog files:** `.claude/personas/accounting-tax-advisor.md`,
184
+ `.claude/personas/accounting-compliance.md`
185
+
186
+ ```bash
187
+ /persona-panel sophie-outputs/2026-05-19/invoice-12345.json \
188
+ --personas accounting-tax-advisor,accounting-compliance \
189
+ --mode voting \
190
+ --threshold 2-of-2
191
+ ```
192
+
193
+ If the compliance persona returns `warn` (not `fail`), the tax-advisor returns `pass`, and the
194
+ threshold is `2-of-2` (pass-only):
195
+
196
+ ```
197
+ Consolidation (voting-quorum): 1 pass / 0 fail / 1 warn — Final: FAIL
198
+ Dissenting: accounting-compliance (warn treated as non-pass under 2-of-2 threshold)
199
+ ```
200
+
201
+ `warn` counts as a non-pass vote for quorum purposes. The sidecar records the full rationale
202
+ and recommendations from the compliance persona so the issue can be addressed specifically.
203
+
204
+ **Dry-run before dispatching (recommended for expensive Opus calls):**
205
+
206
+ ```bash
207
+ /persona-panel sophie-outputs/2026-05-19/invoice-12345.json \
208
+ --personas accounting-tax-advisor,accounting-compliance \
209
+ --dry-run
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Configuration
215
+
216
+ ### Catalog directory structure
217
+
218
+ ```
219
+ .claude/personas/
220
+ klima-physicist.md
221
+ klima-ai-expert.md
222
+ accounting-tax-advisor.md
223
+ accounting-compliance.md
224
+ buyer-p1-cto.md
225
+ buyer-p2-kanzlei.md
226
+ ```
227
+
228
+ Each file is a Markdown document with YAML frontmatter. All six frontmatter fields are required.
229
+
230
+ ### Persona file structure
231
+
232
+ Full specification: `skills/persona-panel/persona-format.md`. Minimum shape:
233
+
234
+ ```yaml
235
+ ---
236
+ name: my-reviewer
237
+ schema_version: 1
238
+ version: "1"
239
+ role: "Domain expert in [field] — evaluates [aspect] of the target"
240
+ model: claude-opus-4-7
241
+ tier: domain-expert
242
+ output_contract:
243
+ type: object
244
+ required: [verdict, rationale]
245
+ properties:
246
+ verdict:
247
+ type: string
248
+ enum: [pass, fail, warn]
249
+ rationale:
250
+ type: string
251
+ maxLength: 4096
252
+ recommendations:
253
+ type: array
254
+ items:
255
+ type: string
256
+ evaluation_criteria:
257
+ - "Claim X is accurate and verifiable"
258
+ - "No contradictions with established standard Y"
259
+ ---
260
+
261
+ ## Mission
262
+
263
+ You are [role]. Your goal is to review the target and determine whether it meets the standards
264
+ defined in your evaluation criteria. Return a structured verdict.
265
+
266
+ ## Context Files
267
+
268
+ None.
269
+
270
+ ## Evaluation Criteria
271
+
272
+ [Expanded prose descriptions matching the frontmatter criteria.]
273
+
274
+ ## Output Template
275
+
276
+ \```json
277
+ {
278
+ "verdict": "pass|fail|warn",
279
+ "rationale": "Detailed rationale (max 4096 chars).",
280
+ "recommendations": []
281
+ }
282
+ \```
283
+ ```
284
+
285
+ ### Tier values
286
+
287
+ | Tier | Typical use |
288
+ |---|---|
289
+ | `domain-expert` | Technical reviewers: physicist, AI expert, legal, medical |
290
+ | `buyer-persona` | Buyer-panel hard-gates: CTO, procurement, compliance officer |
291
+ | `compliance` | DSGVO, SEC, HIPAA, ISO reviewers |
292
+ | `custom` | Any other structured reviewer |
293
+
294
+ `domain-expert` and `compliance` tiers default to `claude-opus-4-7` for model selection
295
+ (Opus finds real issues Sonnet misses — see vault learning `[[persona-opus-finds-real-failing-cibadge]]`).
296
+
297
+ ### output_contract security rules
298
+
299
+ The `output_contract` field in each persona's YAML frontmatter is compiled by AJV at catalog
300
+ load time. Three structural rules are enforced before compilation:
301
+
302
+ - `$ref`, `$defs`, `allOf`, `anyOf` are **forbidden** — they enable attacker-controlled schema
303
+ complexity attacks (ReDoS via pathological schemas)
304
+ - The schema MUST declare `verdict` in its `required` array
305
+ - The AJV compile call is wrapped in a 2-second AbortSignal timeout
306
+
307
+ A persona with a forbidden key in `output_contract` is rejected at Phase 1 (catalog load) with
308
+ an informative error. Fix the frontmatter before running the panel.
309
+
310
+ ---
311
+
312
+ ## Consolidation Modes
313
+
314
+ Three modes are available via `--mode`:
315
+
316
+ | Mode | Flag | Deterministic | Extra LLM call |
317
+ |---|---|---|---|
318
+ | `voting` | `--mode voting` | Yes | No |
319
+ | `hard-gate` | `--mode hard-gate` | Yes | No |
320
+ | `summary` | `--mode summary` | No | Yes (coordinator aggregate) |
321
+
322
+ **`voting` (default):** Counts PASS verdicts against `--threshold`. Suitable for panels where
323
+ a majority or supermajority is sufficient.
324
+
325
+ **`hard-gate`:** All N personas must return PASS. Any single FAIL (or WARN) produces FAIL.
326
+ Exit code 1 on FAIL — suitable for CI gates and wave-executor integration.
327
+
328
+ **`summary`:** Coordinator LLM aggregates heterogeneous outputs into a narrative. Emits a
329
+ warning before dispatch: `summary mode adds one additional LLM call`. Use voting or hard-gate
330
+ for cost-sensitive pipelines.
331
+
332
+ ### Threshold spec
333
+
334
+ The `--threshold` flag accepts:
335
+
336
+ - `M-of-N` — e.g. `2-of-3`, `5-of-6`. M and N are integers 1..20.
337
+ - `all` — equivalent to `N-of-N`. Default for `hard-gate`.
338
+ - `any` — first PASS is sufficient. Unusual; use with care.
339
+
340
+ Default when omitted: `all`.
341
+
342
+ ---
343
+
344
+ ## Wave-Gate Integration (Issue #458)
345
+
346
+ After issue #458 ships, `persona-panel` can be configured as an inter-wave gate inside
347
+ `wave-executor`. A `persona-gate-wave` block in Session Config (in `CLAUDE.md` or `AGENTS.md`)
348
+ will run the panel automatically after the Quality wave:
349
+
350
+ ```yaml
351
+ persona-gate-wave:
352
+ enabled: true
353
+ after: quality
354
+ threshold: all
355
+ mode: strict
356
+ ```
357
+
358
+ Cross-reference: `docs/session-config-reference.md` will gain a `persona-gate-wave` section
359
+ when #458 is implemented. Until then, run `/persona-panel` manually between waves or at
360
+ session-end.
361
+
362
+ ---
363
+
364
+ ## Security Notes
365
+
366
+ **Per-repo catalog only.** The `.claude/personas/` directory is per-repo and never stored in
367
+ the plugin. This is intentional: climate-research repos need physicists; SaaS repos need buyer
368
+ personas; compliance repos need auditors. A plugin-central catalog would block that diversity.
369
+
370
+ **Flat output_contract schemas.** The `output_contract` in each persona's YAML frontmatter must
371
+ be a flat inline JSON Schema Draft 2020-12 object. The keywords `$ref`, `$defs`, `allOf`, and
372
+ `anyOf` are forbidden. This guards against pathological schemas that could cause the AJV
373
+ compiler to hang (schema-complexity DoS).
374
+
375
+ **Sidecar path confinement.** Sidecar files are written exclusively to
376
+ `.orchestrator/persona-panel/` inside the project root. The path is validated via
377
+ `validatePathInsideProject` from `scripts/lib/path-utils.mjs` before any write. Sidecars
378
+ cannot be written outside the repo boundary.
379
+
380
+ **Model field validation.** Each persona's `model:` field is validated at catalog load time
381
+ against `MODEL_ID_RE` and `ALLOWED_MODEL_ALIASES` from `scripts/lib/agent-frontmatter.mjs`. A
382
+ persona declaring an unrecognized model string is rejected with an informative error.
383
+
384
+ **Concurrency cap.** A maximum of 20 personas can run in a single panel invocation. If the
385
+ active set exceeds 20, the run is truncated alphabetically and a warning is emitted.
386
+
387
+ ---
388
+
389
+ ## Trend Tracking (Future — Issue #459)
390
+
391
+ Issue #459 will add a `--trend` sub-command that compares sidecar records across runs and flags
392
+ verdict drift (a persona that was passing now fails, or vice versa). The `prompt_hash` field in
393
+ each sidecar entry — a sha256 over the canonicalized persona inputs — enables detecting whether
394
+ a change in persona content or model caused the drift, or whether the target artifact changed.
395
+
396
+ Trend tracking is data-gated on at least 3 runs against the same target with the same persona
397
+ set. It will not be useful before that threshold.
398
+
399
+ ---
400
+
401
+ ## Sidecar Location
402
+
403
+ All runs write a JSON sidecar to:
404
+
405
+ ```
406
+ .orchestrator/persona-panel/<isoTimestamp>-<runId>.json
407
+ ```
408
+
409
+ Example: `.orchestrator/persona-panel/2026-05-20T14-30-00Z-a1b2c3d4.json`
410
+
411
+ The sidecar schema is at `agents/schemas/persona-panel-sidecar.schema.json` (AJV Draft
412
+ 2020-12). The file is written atomically via `writeJsonAtomic()` from `scripts/lib/io.mjs`
413
+ (tmp-then-rename, prevents partial writes). Schema validation runs against the sidecar object
414
+ before write — an invalid sidecar causes exit 1, nothing is written.
415
+
416
+ Add `.orchestrator/persona-panel/` to `.gitignore` to keep run records out of version control,
417
+ or commit them if you want an auditable history.
418
+
419
+ ---
420
+
421
+ ## See Also
422
+
423
+ - `commands/persona-panel.md` — command reference: argument syntax, flag validation, examples
424
+ - `skills/persona-panel/SKILL.md` — full skill spec: 6 phases, catalog format, dispatch
425
+ mechanics, consolidation logic, sidecar schema
426
+ - `skills/persona-panel/persona-format.md` — persona file format specification: frontmatter
427
+ fields, body sections, verdict contract, security rationale for criteria delimiters
428
+ - `templates/personas/*.v1.md` — 6 catalog templates: `klima-physicist`, `klima-ai-expert`,
429
+ `accounting-tax-advisor`, `accounting-compliance`, `buyer-p1-cto`,
430
+ `buyer-p2-kanzlei`
431
+ - `agents/schemas/persona-panel-sidecar.schema.json` — sidecar JSON Schema (Draft 2020-12)
432
+ - Issue #457 (foundation), #458 (wave-hook integration), #459 (trend tracking), #460 (catalog
433
+ templates)
@@ -0,0 +1,115 @@
1
+ # Pi Setup Guide
2
+
3
+ Guide for using Session Orchestrator with [Pi](https://pi.dev/docs/latest).
4
+
5
+ ## Prerequisites
6
+
7
+ - Pi installed: `npm install -g --ignore-scripts @earendil-works/pi-coding-agent`
8
+ - Node.js 24 or later for this repository's hook/runtime scripts
9
+ - A project repository with git initialized
10
+
11
+ ## Installation
12
+
13
+ ### Option 1: npm package (primary, once published)
14
+
15
+ ```bash
16
+ pi install npm:session-orchestrator
17
+ ```
18
+
19
+ This is the primary install path once the package has been published to npm and indexed by the [Pi packages gallery](https://pi.dev/packages) via its `pi-package` keyword — no local checkout required. Not yet available: the package has not been published to npm yet (see `docs/distribution/npm-publish-checklist.md` for the operator publish runbook). Until then, use one of the dev-fallback options below.
20
+
21
+ ### Option 2: Project-local registration (dev fallback)
22
+
23
+ ```bash
24
+ git clone https://github.com/Kanevry/session-orchestrator.git ~/Projects/session-orchestrator
25
+ cd ~/Projects/session-orchestrator
26
+ npm install
27
+ node scripts/pi-install.mjs /path/to/your/project --settings-only
28
+ ```
29
+
30
+ This writes `/path/to/your/project/.pi/settings.json` with a `packages` entry pointing at the local checkout. Restart or reload Pi after registration.
31
+
32
+ If you want Pi's native package installer to do the registration as well:
33
+
34
+ ```bash
35
+ cd /path/to/your/project
36
+ pi install ~/Projects/session-orchestrator -l
37
+ ```
38
+
39
+ ### Option 3: Global registration (dev fallback)
40
+
41
+ ```bash
42
+ cd ~/Projects/session-orchestrator
43
+ node scripts/pi-install.mjs --global --settings-only
44
+ ```
45
+
46
+ Global mode writes `~/.pi/agent/settings.json`.
47
+
48
+ ## Configuration
49
+
50
+ Pi reads `AGENTS.md` and `CLAUDE.md` natively. For Session Orchestrator on Pi, prefer `AGENTS.md` when creating a new project file; existing `CLAUDE.md` files continue to work via the shared alias rule.
51
+
52
+ Add a `## Session Config` section:
53
+
54
+ ```markdown
55
+ ## Session Config
56
+
57
+ agents-per-wave: 6
58
+ waves: 5
59
+ persistence: true
60
+ enforcement: warn
61
+ test-command: npm test
62
+ typecheck-command: npm run typecheck
63
+ lint-command: npm run lint
64
+ ```
65
+
66
+ ## What Loads
67
+
68
+ The package manifest in `package.json` exposes:
69
+
70
+ - `pi.extensions`: `./pi/extensions/session-orchestrator.ts`
71
+ - `pi.skills`: `./skills`
72
+ - `pi.prompts`: `./pi/prompts/*.md` generated from `commands/*.md`
73
+
74
+ The extension uses `hooks/hooks-pi.json` and `scripts/lib/pi-hook-bridge.mjs` to translate Pi events into the existing hook stdin contract.
75
+
76
+ ## Hook Coverage
77
+
78
+ | Pi event | Session Orchestrator equivalent | Status |
79
+ |---|---|---|
80
+ | `session_start` | `SessionStart` | enabled |
81
+ | `session_shutdown` | `SessionEnd` | enabled |
82
+ | `tool_call` | `PreToolUse` | enabled for `bash`, `edit`, `write` |
83
+ | `tool_result` | `PostToolUse` | enabled |
84
+ | `agent_end` | `Stop` | enabled |
85
+
86
+ Not yet mapped in v1: `PostToolUseFailure`, `PostToolBatch`, `SubagentStart`, `SubagentStop`, and `CwdChanged`.
87
+
88
+ ## Usage
89
+
90
+ After reload, use the same commands:
91
+
92
+ - `/session [housekeeping|feature|deep]`
93
+ - `/go`
94
+ - `/close`
95
+ - `/plan [new|feature|retro]`
96
+ - `/discovery [scope]`
97
+ - `/evolve [analyze|review|list]`
98
+
99
+ ## Differences From Claude Code And Codex
100
+
101
+ | Aspect | Claude Code | Codex | Pi |
102
+ |---|---|---|---|
103
+ | Package format | Claude plugin manifest | Codex plugin manifest | `package.json.pi` package |
104
+ | Config file | `CLAUDE.md` | `AGENTS.md` | `AGENTS.md` preferred; `CLAUDE.md` supported |
105
+ | State directory | `.claude/` | `.codex/` | `.pi/` |
106
+ | Tool guard event | `PreToolUse` | `PreToolUse` | `tool_call` bridge |
107
+ | Agent dispatch | Native Agent tool | Codex subagents / typed roles | Sequential v1 |
108
+
109
+ ## Troubleshooting
110
+
111
+ - **Prompts or skills not visible**: verify the project is trusted in Pi, then restart or reload.
112
+ - **Package not loaded**: confirm `.pi/settings.json` or `~/.pi/agent/settings.json` contains the local checkout path under `packages`.
113
+ - **Hooks not firing**: confirm `package.json` still has the `pi.extensions` entry and `hooks/hooks-pi.json` exists.
114
+ - **Config ignored**: ensure the file has a `## Session Config` header in `AGENTS.md` or `CLAUDE.md`.
115
+ - **Runtime error from hooks**: run `npm install` in the Session Orchestrator checkout so hook dependencies are present.