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.
- package/.claude-plugin/marketplace.json +29 -0
- package/.claude-plugin/plugin.json +18 -0
- package/.codex-plugin/agents/explorer.toml +14 -0
- package/.codex-plugin/agents/session-reviewer.toml +23 -0
- package/.codex-plugin/agents/wave-worker.toml +15 -0
- package/.codex-plugin/config.toml +20 -0
- package/.codex-plugin/plugin.json +37 -0
- package/.cursor/rules/000-session-orchestrator.mdc +73 -0
- package/.cursor/rules/010-session-workflow.mdc +170 -0
- package/.cursor/rules/020-quality-gates.mdc +128 -0
- package/.cursor/rules/030-wave-execution.mdc +216 -0
- package/.cursor/rules/040-discovery.mdc +242 -0
- package/.cursor/rules/050-plan.mdc +235 -0
- package/.cursor/rules/060-evolve.mdc +232 -0
- package/.cursor/rules/070-gitlab-ops.mdc +246 -0
- package/.cursor/rules/080-ecosystem-health.mdc +145 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +1544 -0
- package/LICENSE +21 -0
- package/NOTICE +64 -0
- package/README.md +242 -0
- package/SECURITY.md +90 -0
- package/agents/AGENTS.md +136 -0
- package/agents/analyst.md +99 -0
- package/agents/architect-reviewer.md +93 -0
- package/agents/code-implementer.md +106 -0
- package/agents/db-specialist.md +104 -0
- package/agents/dialectic-deriver.md +139 -0
- package/agents/docs-writer.md +113 -0
- package/agents/eval-judge.md +146 -0
- package/agents/memory-proposal-collector.md +297 -0
- package/agents/qa-strategist.md +102 -0
- package/agents/schemas/analyst.schema.json +46 -0
- package/agents/schemas/architect-reviewer.schema.json +50 -0
- package/agents/schemas/code-implementer.schema.json +61 -0
- package/agents/schemas/db-specialist.schema.json +80 -0
- package/agents/schemas/docs-writer.schema.json +56 -0
- package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
- package/agents/schemas/qa-strategist.schema.json +46 -0
- package/agents/schemas/security-reviewer.schema.json +86 -0
- package/agents/schemas/session-reviewer.schema.json +69 -0
- package/agents/schemas/test-writer.schema.json +69 -0
- package/agents/schemas/ui-developer.schema.json +90 -0
- package/agents/schemas/ux-evaluator.schema.json +51 -0
- package/agents/security-reviewer.md +236 -0
- package/agents/session-reviewer.md +201 -0
- package/agents/skill-applied-judge.md +122 -0
- package/agents/test-writer.md +123 -0
- package/agents/ui-developer.md +109 -0
- package/agents/ux-evaluator.md +161 -0
- package/assets/icon.svg +11 -0
- package/assets/og-card.png +0 -0
- package/assets/og-card.svg +47 -0
- package/commands/autopilot-multi.md +74 -0
- package/commands/autopilot.md +80 -0
- package/commands/bootstrap.md +56 -0
- package/commands/brainstorm.md +48 -0
- package/commands/close.md +24 -0
- package/commands/debug.md +36 -0
- package/commands/discovery.md +32 -0
- package/commands/dispatcher.md +59 -0
- package/commands/eval.md +28 -0
- package/commands/evolve.md +10 -0
- package/commands/go.md +41 -0
- package/commands/grill.md +45 -0
- package/commands/harness-audit.md +26 -0
- package/commands/memory-cleanup.md +25 -0
- package/commands/persona-panel.md +121 -0
- package/commands/plan.md +15 -0
- package/commands/portfolio.md +97 -0
- package/commands/reconcile.md +23 -0
- package/commands/repo-audit.md +24 -0
- package/commands/session.md +30 -0
- package/commands/spinout.md +15 -0
- package/commands/sunset-review.md +27 -0
- package/commands/templates-ack.md +96 -0
- package/commands/test.md +97 -0
- package/docs/README.md +105 -0
- package/docs/USER-GUIDE.md +1403 -0
- package/docs/ci-setup.md +81 -0
- package/docs/codex-setup.md +142 -0
- package/docs/components.md +74 -0
- package/docs/cursor-setup.md +104 -0
- package/docs/events-schema.md +81 -0
- package/docs/migration-v3.md +148 -0
- package/docs/owner-config-schema.md +154 -0
- package/docs/persona-panel.md +433 -0
- package/docs/pi-setup.md +115 -0
- package/docs/plugin-architecture-v3.md +296 -0
- package/docs/pm-skills-marketplace.md +114 -0
- package/docs/policy-cache-validation-2026-04-28.md +118 -0
- package/docs/rule-authoring.md +316 -0
- package/docs/session-config-reference.md +1439 -0
- package/docs/session-config-template.md +961 -0
- package/docs/vault-docs-architecture.md +297 -0
- package/hooks/_lib/lock-bootstrap.mjs +272 -0
- package/hooks/_lib/lock-reconcile.mjs +93 -0
- package/hooks/_lib/profile-gate.mjs +95 -0
- package/hooks/_lib/transcript-history.mjs +211 -0
- package/hooks/agent-teams-h3-test.sh +362 -0
- package/hooks/config-protection.mjs +0 -0
- package/hooks/cwd-change-restore.mjs +131 -0
- package/hooks/enforce-commands.mjs +179 -0
- package/hooks/enforce-scope.mjs +273 -0
- package/hooks/hooks-codex.json +60 -0
- package/hooks/hooks-cursor.json +15 -0
- package/hooks/hooks-pi.json +115 -0
- package/hooks/hooks.json +215 -0
- package/hooks/loop-guard.mjs +260 -0
- package/hooks/on-session-end.mjs +217 -0
- package/hooks/on-session-start.mjs +660 -0
- package/hooks/on-stop.mjs +294 -0
- package/hooks/operator-steer.mjs +64 -0
- package/hooks/post-edit-validate.mjs +225 -0
- package/hooks/post-subagent-discovery-validator.mjs +398 -0
- package/hooks/post-tool-batch-wave-signal.mjs +328 -0
- package/hooks/post-tool-failure-corrective-context.mjs +248 -0
- package/hooks/post-tooluse-frontend-slop.mjs +184 -0
- package/hooks/pre-bash-destructive-guard.mjs +515 -0
- package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
- package/hooks/pre-bash-staging-fence.mjs +223 -0
- package/hooks/pre-bash-templates-first.mjs +404 -0
- package/hooks/run-node.sh +72 -0
- package/hooks/skill-invocation-telemetry.mjs +99 -0
- package/hooks/subagent-telemetry.mjs +249 -0
- package/hooks/wave-scope-commit-guard.mjs +191 -0
- package/monitors/monitors.json +14 -0
- package/output-styles/finding-report.md +48 -0
- package/output-styles/session-report.md +53 -0
- package/output-styles/wave-summary.md +38 -0
- package/package.json +94 -0
- package/pi/extensions/session-orchestrator.ts +25 -0
- package/pi/prompts/autopilot-multi.md +12 -0
- package/pi/prompts/autopilot.md +12 -0
- package/pi/prompts/bootstrap.md +12 -0
- package/pi/prompts/brainstorm.md +12 -0
- package/pi/prompts/close.md +11 -0
- package/pi/prompts/debug.md +12 -0
- package/pi/prompts/discovery.md +12 -0
- package/pi/prompts/dispatcher.md +12 -0
- package/pi/prompts/eval.md +12 -0
- package/pi/prompts/evolve.md +12 -0
- package/pi/prompts/go.md +12 -0
- package/pi/prompts/grill.md +12 -0
- package/pi/prompts/harness-audit.md +12 -0
- package/pi/prompts/memory-cleanup.md +12 -0
- package/pi/prompts/persona-panel.md +12 -0
- package/pi/prompts/plan.md +12 -0
- package/pi/prompts/portfolio.md +12 -0
- package/pi/prompts/reconcile.md +12 -0
- package/pi/prompts/repo-audit.md +12 -0
- package/pi/prompts/session.md +12 -0
- package/pi/prompts/spinout.md +12 -0
- package/pi/prompts/sunset-review.md +12 -0
- package/pi/prompts/templates-ack.md +12 -0
- package/pi/prompts/test.md +12 -0
- package/rules/_index.md +51 -0
- package/rules/always-on/commit-discipline.md +26 -0
- package/rules/always-on/npm-quality-gates.md +26 -0
- package/rules/always-on/parallel-sessions.md +43 -0
- package/rules/opt-in-domain/prompt-caching.md +270 -0
- package/rules/opt-in-stack/backend-data.md +188 -0
- package/rules/opt-in-stack/backend.md +390 -0
- package/rules/opt-in-stack/frontend.md +98 -0
- package/rules/opt-in-stack/security-web.md +194 -0
- package/rules/opt-in-stack/swift.md +65 -0
- package/scripts/archive-closed-prds.mjs +416 -0
- package/scripts/autopilot-multi.mjs +802 -0
- package/scripts/autopilot.mjs +383 -0
- package/scripts/backfill-abandoned-sessions.mjs +265 -0
- package/scripts/backfill-learnings-expires.mjs +196 -0
- package/scripts/backfill-learnings.mjs +203 -0
- package/scripts/backfill-sessions.mjs +282 -0
- package/scripts/check-doc-consistency.sh +279 -0
- package/scripts/check-package-manager.mjs +445 -0
- package/scripts/ci/assert-vitest-green.mjs +267 -0
- package/scripts/codex-install.mjs +435 -0
- package/scripts/compute-grounding-injection.sh +186 -0
- package/scripts/cursor-install.mjs +113 -0
- package/scripts/dialectic-deriver.mjs +573 -0
- package/scripts/emit-event.mjs +160 -0
- package/scripts/emit-session.mjs +212 -0
- package/scripts/eval-session.mjs +262 -0
- package/scripts/export-hw-learnings.mjs +437 -0
- package/scripts/gc-stale-worktrees.mjs +666 -0
- package/scripts/generate-pi-prompts.mjs +127 -0
- package/scripts/harness-audit.mjs +287 -0
- package/scripts/lib/agent-frontmatter.mjs +266 -0
- package/scripts/lib/agent-output-schema.mjs +166 -0
- package/scripts/lib/agent-status.mjs +303 -0
- package/scripts/lib/ajv-loader.mjs +34 -0
- package/scripts/lib/auto-dialectic.mjs +382 -0
- package/scripts/lib/auto-dream.mjs +471 -0
- package/scripts/lib/autonomy/suitability.mjs +212 -0
- package/scripts/lib/autopilot/dep-graph.mjs +417 -0
- package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
- package/scripts/lib/autopilot/flags.mjs +104 -0
- package/scripts/lib/autopilot/kill-switches.mjs +174 -0
- package/scripts/lib/autopilot/loop.mjs +320 -0
- package/scripts/lib/autopilot/mr-draft.mjs +520 -0
- package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
- package/scripts/lib/autopilot/recent-runs.mjs +106 -0
- package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
- package/scripts/lib/autopilot/telemetry.mjs +224 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
- package/scripts/lib/autopilot-telemetry.mjs +11 -0
- package/scripts/lib/autopilot.mjs +39 -0
- package/scripts/lib/backlog-scan.mjs +179 -0
- package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
- package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
- package/scripts/lib/build-live-signals.mjs +150 -0
- package/scripts/lib/ci-status-banner.mjs +425 -0
- package/scripts/lib/claude-md-budget-lint.mjs +246 -0
- package/scripts/lib/cli-flags.mjs +158 -0
- package/scripts/lib/codex/plugin-contract.mjs +610 -0
- package/scripts/lib/cold-start-detector.mjs +240 -0
- package/scripts/lib/command-blocker.mjs +458 -0
- package/scripts/lib/common.mjs +333 -0
- package/scripts/lib/config/auto-dream.mjs +77 -0
- package/scripts/lib/config/block-header.mjs +94 -0
- package/scripts/lib/config/broken-window.mjs +114 -0
- package/scripts/lib/config/coercers.mjs +248 -0
- package/scripts/lib/config/cold-start.mjs +92 -0
- package/scripts/lib/config/config-protection.mjs +120 -0
- package/scripts/lib/config/cross-repo.mjs +104 -0
- package/scripts/lib/config/custom-phases.mjs +213 -0
- package/scripts/lib/config/dialectic.mjs +92 -0
- package/scripts/lib/config/discovery-validator.mjs +75 -0
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
- package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
- package/scripts/lib/config/docs-orchestrator.mjs +90 -0
- package/scripts/lib/config/docs-staleness.mjs +96 -0
- package/scripts/lib/config/drift-check.mjs +155 -0
- package/scripts/lib/config/eval.mjs +130 -0
- package/scripts/lib/config/events-rotation.mjs +74 -0
- package/scripts/lib/config/evolve.mjs +308 -0
- package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
- package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
- package/scripts/lib/config/handover-gate.mjs +106 -0
- package/scripts/lib/config/host-paths.mjs +76 -0
- package/scripts/lib/config/io.mjs +54 -0
- package/scripts/lib/config/loop-guard.mjs +117 -0
- package/scripts/lib/config/memory.mjs +150 -0
- package/scripts/lib/config/persona-gate-wave.mjs +258 -0
- package/scripts/lib/config/reconcile.mjs +205 -0
- package/scripts/lib/config/section-extractor.mjs +100 -0
- package/scripts/lib/config/skill-evolution.mjs +112 -0
- package/scripts/lib/config/slopcheck.mjs +99 -0
- package/scripts/lib/config/state-md-lock.mjs +83 -0
- package/scripts/lib/config/templates-first.mjs +94 -0
- package/scripts/lib/config/test.mjs +113 -0
- package/scripts/lib/config/vault-integration.mjs +201 -0
- package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
- package/scripts/lib/config/vault-staleness.mjs +84 -0
- package/scripts/lib/config/vault-sync.mjs +96 -0
- package/scripts/lib/config/verification-auto-fix.mjs +84 -0
- package/scripts/lib/config/wave-reviewers.mjs +133 -0
- package/scripts/lib/config-schema.mjs +345 -0
- package/scripts/lib/config.mjs +474 -0
- package/scripts/lib/convergence-monitor.mjs +389 -0
- package/scripts/lib/coordinator-snapshot.mjs +371 -0
- package/scripts/lib/crypto-digest-utils.mjs +91 -0
- package/scripts/lib/discovery/helpers.mjs +127 -0
- package/scripts/lib/discovery/triage-state.mjs +279 -0
- package/scripts/lib/dispatcher/cli.mjs +257 -0
- package/scripts/lib/dispatcher/enumerate.mjs +243 -0
- package/scripts/lib/dispatcher/rank.mjs +363 -0
- package/scripts/lib/ecosystem-health.mjs +224 -0
- package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
- package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
- package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
- package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
- package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
- package/scripts/lib/ecosystem-wizard.mjs +48 -0
- package/scripts/lib/env-check.mjs +89 -0
- package/scripts/lib/eval/engine.mjs +605 -0
- package/scripts/lib/eval/judge.mjs +433 -0
- package/scripts/lib/eval/report.mjs +367 -0
- package/scripts/lib/eval/schema.mjs +618 -0
- package/scripts/lib/eval/session-resolve.mjs +137 -0
- package/scripts/lib/eval/sink.mjs +77 -0
- package/scripts/lib/events-rotation.mjs +86 -0
- package/scripts/lib/events-schema.mjs +81 -0
- package/scripts/lib/events.mjs +80 -0
- package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
- package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
- package/scripts/lib/exclusivity-matrix.mjs +68 -0
- package/scripts/lib/fetch-baseline.mjs +311 -0
- package/scripts/lib/file-lock.mjs +512 -0
- package/scripts/lib/frontend-detect/detect.mjs +138 -0
- package/scripts/lib/frontend-detect/rules.mjs +295 -0
- package/scripts/lib/frontmatter-guard.mjs +241 -0
- package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
- package/scripts/lib/gates/gate-baseline.mjs +42 -0
- package/scripts/lib/gates/gate-full.mjs +85 -0
- package/scripts/lib/gates/gate-helpers.mjs +231 -0
- package/scripts/lib/gates/gate-incremental.mjs +76 -0
- package/scripts/lib/gates/gate-per-file.mjs +55 -0
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
- package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
- package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
- package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
- package/scripts/lib/handover-gate.mjs +222 -0
- package/scripts/lib/hardening.mjs +43 -0
- package/scripts/lib/hardware-pattern-detector.mjs +238 -0
- package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
- package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
- package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
- package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
- package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
- package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
- package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
- package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
- package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
- package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
- package/scripts/lib/harness-audit/categories.mjs +19 -0
- package/scripts/lib/historical-guard.mjs +15 -0
- package/scripts/lib/host-identity.mjs +262 -0
- package/scripts/lib/instruction-budget-guard.mjs +332 -0
- package/scripts/lib/io.mjs +304 -0
- package/scripts/lib/issue-close-strip-labels.mjs +161 -0
- package/scripts/lib/language-mappers/README.md +57 -0
- package/scripts/lib/language-mappers/index.mjs +165 -0
- package/scripts/lib/language-mappers/markdown.mjs +149 -0
- package/scripts/lib/language-mappers/python.mjs +249 -0
- package/scripts/lib/language-mappers/swift.mjs +201 -0
- package/scripts/lib/language-mappers/typescript.mjs +433 -0
- package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
- package/scripts/lib/learnings/filters.mjs +43 -0
- package/scripts/lib/learnings/io.mjs +255 -0
- package/scripts/lib/learnings/schema.mjs +518 -0
- package/scripts/lib/learnings/surface.mjs +207 -0
- package/scripts/lib/learnings.mjs +42 -0
- package/scripts/lib/lock-reaper.mjs +648 -0
- package/scripts/lib/locks/index.mjs +31 -0
- package/scripts/lib/locks/lock-body.mjs +62 -0
- package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
- package/scripts/lib/locks/state-md-lock.mjs +351 -0
- package/scripts/lib/loop-readiness-banner.mjs +144 -0
- package/scripts/lib/memory-banner.mjs +478 -0
- package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
- package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
- package/scripts/lib/memory-paths.mjs +31 -0
- package/scripts/lib/memory-proposals/collector.mjs +334 -0
- package/scripts/lib/memory-proposals/schema.mjs +289 -0
- package/scripts/lib/memory-proposals/sink.mjs +507 -0
- package/scripts/lib/memory-proposals/store.mjs +441 -0
- package/scripts/lib/mission-status-schema.mjs +114 -0
- package/scripts/lib/mode-selector/alternatives.mjs +64 -0
- package/scripts/lib/mode-selector/constants.mjs +29 -0
- package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
- package/scripts/lib/mode-selector/rationale.mjs +55 -0
- package/scripts/lib/mode-selector/scoring.mjs +221 -0
- package/scripts/lib/mode-selector-accuracy.mjs +121 -0
- package/scripts/lib/mode-selector.mjs +160 -0
- package/scripts/lib/multi-provider-build/providers.mjs +64 -0
- package/scripts/lib/multi-provider-build/templating.mjs +130 -0
- package/scripts/lib/named-baseline-resolver.mjs +233 -0
- package/scripts/lib/named-vault-resolver.mjs +433 -0
- package/scripts/lib/owner-config/coerce.mjs +29 -0
- package/scripts/lib/owner-config/constants.mjs +21 -0
- package/scripts/lib/owner-config/defaults.mjs +50 -0
- package/scripts/lib/owner-config/error.mjs +19 -0
- package/scripts/lib/owner-config/index.mjs +13 -0
- package/scripts/lib/owner-config/merge.mjs +52 -0
- package/scripts/lib/owner-config/validate.mjs +259 -0
- package/scripts/lib/owner-config-banner.mjs +126 -0
- package/scripts/lib/owner-config-loader.mjs +159 -0
- package/scripts/lib/owner-config.example.yaml +72 -0
- package/scripts/lib/owner-config.mjs +28 -0
- package/scripts/lib/owner-interview.mjs +243 -0
- package/scripts/lib/owner-yaml.mjs +571 -0
- package/scripts/lib/package-manager.mjs +160 -0
- package/scripts/lib/path-utils.mjs +217 -0
- package/scripts/lib/peer-cards/merger.mjs +310 -0
- package/scripts/lib/peer-cards/reader.mjs +125 -0
- package/scripts/lib/peer-cards/schema.mjs +230 -0
- package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
- package/scripts/lib/peer-cards/writer.mjs +138 -0
- package/scripts/lib/peer-discovery.mjs +200 -0
- package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
- package/scripts/lib/persona-panel/consolidator.mjs +370 -0
- package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
- package/scripts/lib/persona-panel/threshold.mjs +130 -0
- package/scripts/lib/pi-hook-bridge.mjs +328 -0
- package/scripts/lib/platform.mjs +266 -0
- package/scripts/lib/playwright-driver/runner.mjs +297 -0
- package/scripts/lib/plugin-root.mjs +210 -0
- package/scripts/lib/pre-dispatch-check.mjs +126 -0
- package/scripts/lib/product-repo-detect.mjs +121 -0
- package/scripts/lib/profiles/registry.mjs +176 -0
- package/scripts/lib/profiles/schema.mjs +209 -0
- package/scripts/lib/qg-command-drift-banner.mjs +88 -0
- package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
- package/scripts/lib/quality-gate.mjs +536 -0
- package/scripts/lib/quality-gates-cache.mjs +228 -0
- package/scripts/lib/quality-gates-policy.mjs +95 -0
- package/scripts/lib/recommendations-v0.mjs +156 -0
- package/scripts/lib/reconcile/eligibility.mjs +203 -0
- package/scripts/lib/reconcile/emitter.mjs +244 -0
- package/scripts/lib/reconcile/engine.mjs +412 -0
- package/scripts/lib/reconcile/idempotency.mjs +239 -0
- package/scripts/lib/reconcile/renderer.mjs +211 -0
- package/scripts/lib/reconcile/writer.mjs +293 -0
- package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
- package/scripts/lib/resource-probe/evaluate.mjs +190 -0
- package/scripts/lib/resource-probe/parsers.mjs +181 -0
- package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
- package/scripts/lib/resource-probe.mjs +95 -0
- package/scripts/lib/rule-loader.mjs +552 -0
- package/scripts/lib/rules-sync.mjs +439 -0
- package/scripts/lib/scope-gate.mjs +496 -0
- package/scripts/lib/session-close-backfill.mjs +539 -0
- package/scripts/lib/session-discovery.mjs +256 -0
- package/scripts/lib/session-end/phase-skip.mjs +357 -0
- package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
- package/scripts/lib/session-id.mjs +362 -0
- package/scripts/lib/session-lock.mjs +703 -0
- package/scripts/lib/session-registry.mjs +355 -0
- package/scripts/lib/session-schema/aliases.mjs +71 -0
- package/scripts/lib/session-schema/constants.mjs +115 -0
- package/scripts/lib/session-schema/normalizer.mjs +66 -0
- package/scripts/lib/session-schema/timestamps.mjs +64 -0
- package/scripts/lib/session-schema/validator.mjs +453 -0
- package/scripts/lib/session-schema.mjs +71 -0
- package/scripts/lib/session-token-rollup.mjs +137 -0
- package/scripts/lib/sessions-staleness-banner.mjs +247 -0
- package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
- package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
- package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
- package/scripts/lib/skill-evolution/engine.mjs +719 -0
- package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
- package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
- package/scripts/lib/skill-health/join.mjs +181 -0
- package/scripts/lib/skill-health/score.mjs +123 -0
- package/scripts/lib/skill-invocations-schema.mjs +214 -0
- package/scripts/lib/skill-judge.mjs +348 -0
- package/scripts/lib/skill-judgments-schema.mjs +264 -0
- package/scripts/lib/slopcheck.mjs +501 -0
- package/scripts/lib/soul-resolve.mjs +118 -0
- package/scripts/lib/spiral-carryover.mjs +495 -0
- package/scripts/lib/state-md/body-sections.mjs +851 -0
- package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
- package/scripts/lib/state-md/mission-status.mjs +247 -0
- package/scripts/lib/state-md/recommendations.mjs +57 -0
- package/scripts/lib/state-md/yaml-parser.mjs +234 -0
- package/scripts/lib/state-md-peer-guard.mjs +232 -0
- package/scripts/lib/state-md.mjs +53 -0
- package/scripts/lib/subagents-schema.mjs +309 -0
- package/scripts/lib/sunset/walker.mjs +1192 -0
- package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
- package/scripts/lib/test-runner/fingerprint.mjs +33 -0
- package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
- package/scripts/lib/tmux-layout/layouts.mjs +224 -0
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
- package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
- package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
- package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
- package/scripts/lib/validate/check-agents.mjs +457 -0
- package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
- package/scripts/lib/validate/check-commands.mjs +148 -0
- package/scripts/lib/validate/check-component-paths.mjs +112 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
- package/scripts/lib/validate/check-json-files.mjs +116 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
- package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
- package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
- package/scripts/lib/validate/check-pi-package.mjs +110 -0
- package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
- package/scripts/lib/validate/check-plugin-json.mjs +96 -0
- package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
- package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
- package/scripts/lib/validate/check-rules.mjs +143 -0
- package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
- package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
- package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
- package/scripts/lib/validate/confidential-names.mjs +169 -0
- package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
- package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
- package/scripts/lib/validate/tier-inference.mjs +100 -0
- package/scripts/lib/validate-vendored-rules.mjs +519 -0
- package/scripts/lib/vault-archive.mjs +404 -0
- package/scripts/lib/vault-backfill/glab.mjs +164 -0
- package/scripts/lib/vault-backfill/manifest.mjs +75 -0
- package/scripts/lib/vault-backfill/template.mjs +130 -0
- package/scripts/lib/vault-consolidate-fs.mjs +331 -0
- package/scripts/lib/vault-migration-rules.mjs +155 -0
- package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
- package/scripts/lib/vault-mirror/namespace.mjs +152 -0
- package/scripts/lib/vault-mirror/process.mjs +567 -0
- package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
- package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
- package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
- package/scripts/lib/vault-mirror/render.mjs +8 -0
- package/scripts/lib/vault-mirror/utils.mjs +217 -0
- package/scripts/lib/vault-relocation-rules.mjs +555 -0
- package/scripts/lib/vault-repo-backfill.mjs +235 -0
- package/scripts/lib/vault-staleness-banner.mjs +142 -0
- package/scripts/lib/vault-status/board-writer.mjs +769 -0
- package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
- package/scripts/lib/vault-sync-baseline.mjs +152 -0
- package/scripts/lib/wave-context.mjs +29 -0
- package/scripts/lib/wave-executor/pool.mjs +248 -0
- package/scripts/lib/wave-resource-gate.mjs +204 -0
- package/scripts/lib/wave-sizing.mjs +75 -0
- package/scripts/lib/webhook-url.mjs +105 -0
- package/scripts/lib/workspace.mjs +198 -0
- package/scripts/lib/worktree/constants.mjs +35 -0
- package/scripts/lib/worktree/index.mjs +17 -0
- package/scripts/lib/worktree/lifecycle.mjs +287 -0
- package/scripts/lib/worktree/listing.mjs +118 -0
- package/scripts/lib/worktree/meta.mjs +64 -0
- package/scripts/lib/worktree-freshness.mjs +313 -0
- package/scripts/lib/worktree.mjs +15 -0
- package/scripts/lifecycle-sim-v6.mjs +347 -0
- package/scripts/lock-reaper.mjs +185 -0
- package/scripts/mcp-server.sh +241 -0
- package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
- package/scripts/memory-propose.mjs +464 -0
- package/scripts/migrate-cold-start-seed.mjs +404 -0
- package/scripts/migrate-learnings-jsonl.mjs +189 -0
- package/scripts/migrate-legacy-learnings.sh +61 -0
- package/scripts/migrate-sessions-jsonl.mjs +448 -0
- package/scripts/migrate-subagents-jsonl.mjs +196 -0
- package/scripts/migrate-vault-paths.mjs +796 -0
- package/scripts/parse-config.mjs +149 -0
- package/scripts/pi-install.mjs +117 -0
- package/scripts/print-applicable-rules.mjs +247 -0
- package/scripts/promote-vault-strict.mjs +496 -0
- package/scripts/relocate-vault-corpus.mjs +1178 -0
- package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
- package/scripts/run-quality-gate.mjs +216 -0
- package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
- package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
- package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
- package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
- package/scripts/sweep-expired-learnings.mjs +135 -0
- package/scripts/sync-vault-schema.mjs +376 -0
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
- package/scripts/tmux-layout.mjs +245 -0
- package/scripts/token-audit.sh +191 -0
- package/scripts/typecheck.mjs +42 -0
- package/scripts/upload-social-preview.mjs +316 -0
- package/scripts/validate-config.mjs +46 -0
- package/scripts/validate-plugin-manifests.mjs +163 -0
- package/scripts/validate-plugin.mjs +264 -0
- package/scripts/validate-wave-scope.mjs +289 -0
- package/scripts/vault-backfill.mjs +404 -0
- package/scripts/vault-consolidate.mjs +596 -0
- package/scripts/vault-integration-watcher.mjs +394 -0
- package/scripts/vault-mirror.mjs +430 -0
- package/skills/_shared/bootstrap-gate.md +111 -0
- package/skills/_shared/config-reading.md +226 -0
- package/skills/_shared/instruction-file-resolution.md +79 -0
- package/skills/_shared/model-selection.md +64 -0
- package/skills/_shared/monitor-patterns.md +300 -0
- package/skills/_shared/parallel-aware-auq.md +121 -0
- package/skills/_shared/parallel-aware-preamble.md +185 -0
- package/skills/_shared/platform-tools.md +96 -0
- package/skills/_shared/state-ownership.md +221 -0
- package/skills/architecture/DEEPENING.md +37 -0
- package/skills/architecture/INTERFACE-DESIGN.md +44 -0
- package/skills/architecture/LANGUAGE.md +53 -0
- package/skills/architecture/SKILL.md +92 -0
- package/skills/autopilot/SKILL.md +419 -0
- package/skills/bootstrap/SKILL.md +592 -0
- package/skills/bootstrap/STATE.md.template +24 -0
- package/skills/bootstrap/_shared-template.md +243 -0
- package/skills/bootstrap/deep-template.md +659 -0
- package/skills/bootstrap/fast-template.md +251 -0
- package/skills/bootstrap/intensity-heuristic.md +80 -0
- package/skills/bootstrap/public-fallback.md +342 -0
- package/skills/bootstrap/standard-template.md +736 -0
- package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
- package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
- package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
- package/skills/brainstorm/SKILL.md +268 -0
- package/skills/brainstorm/soul.md +49 -0
- package/skills/claude-md-drift-check/SKILL.md +186 -0
- package/skills/claude-md-drift-check/checker.mjs +1380 -0
- package/skills/claude-md-drift-check/checker.sh +37 -0
- package/skills/claude-md-drift-check/package.json +16 -0
- package/skills/convergence-monitoring/README.md +39 -0
- package/skills/convergence-monitoring/SIGNALS.md +246 -0
- package/skills/convergence-monitoring/SKILL.md +285 -0
- package/skills/daily/SKILL.md +222 -0
- package/skills/daily/generate.sh +92 -0
- package/skills/daily/templates/daily.md.tpl +36 -0
- package/skills/debug/SKILL.md +188 -0
- package/skills/debug/soul.md +35 -0
- package/skills/discovery/SKILL.md +567 -0
- package/skills/discovery/issue-templates.md +237 -0
- package/skills/discovery/probes/docs-staleness.mjs +195 -0
- package/skills/discovery/probes/frontend-slop.mjs +186 -0
- package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
- package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
- package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
- package/skills/discovery/probes/vault-staleness.mjs +272 -0
- package/skills/discovery/probes-arch.md +252 -0
- package/skills/discovery/probes-audit.md +95 -0
- package/skills/discovery/probes-code.md +329 -0
- package/skills/discovery/probes-docs.md +76 -0
- package/skills/discovery/probes-feature.md +150 -0
- package/skills/discovery/probes-infra.md +138 -0
- package/skills/discovery/probes-intro.md +25 -0
- package/skills/discovery/probes-session.md +495 -0
- package/skills/discovery/probes-supply-chain.md +94 -0
- package/skills/discovery/probes-ui.md +147 -0
- package/skills/discovery/probes-vault.md +64 -0
- package/skills/discovery/slop-patterns.md +115 -0
- package/skills/dispatcher/SKILL.md +173 -0
- package/skills/docs-orchestrator/SKILL.md +362 -0
- package/skills/docs-orchestrator/audience-mapping.md +140 -0
- package/skills/domain-model/ADR-FORMAT.md +47 -0
- package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
- package/skills/domain-model/SKILL.md +85 -0
- package/skills/ecosystem-health/SKILL.md +119 -0
- package/skills/ecosystem-health/wizard.md +193 -0
- package/skills/eval/SKILL.md +293 -0
- package/skills/eval/rubric-v1.md +218 -0
- package/skills/evolve/SKILL.md +546 -0
- package/skills/frontmatter-guard/SKILL.md +126 -0
- package/skills/gitlab-ops/SKILL.md +368 -0
- package/skills/gitlab-portfolio/SKILL.md +196 -0
- package/skills/grill/SKILL.md +185 -0
- package/skills/grill/soul.md +55 -0
- package/skills/hook-development/SKILL.md +413 -0
- package/skills/mcp-builder/SKILL.md +260 -0
- package/skills/memory-cleanup/SKILL.md +310 -0
- package/skills/mode-selector/SKILL.md +226 -0
- package/skills/peekaboo-driver/SKILL.md +237 -0
- package/skills/peekaboo-driver/soul.md +32 -0
- package/skills/persona-panel/SKILL.md +365 -0
- package/skills/persona-panel/persona-format.md +205 -0
- package/skills/persona-panel/presets/designer-lens.md +87 -0
- package/skills/persona-panel/presets/engineer-lens.md +88 -0
- package/skills/persona-panel/presets/pm-lens.md +86 -0
- package/skills/plan/SKILL.md +496 -0
- package/skills/plan/mode-feature.md +141 -0
- package/skills/plan/mode-new.md +297 -0
- package/skills/plan/mode-retro.md +271 -0
- package/skills/plan/prd-feature-template.md +132 -0
- package/skills/plan/prd-full-template.md +151 -0
- package/skills/plan/prd-reviewer-prompt.md +103 -0
- package/skills/plan/retro-template.md +75 -0
- package/skills/plan/soul.md +62 -0
- package/skills/playwright-driver/SKILL.md +226 -0
- package/skills/playwright-driver/soul.md +30 -0
- package/skills/quality-gates/SKILL.md +212 -0
- package/skills/reconcile/SKILL.md +324 -0
- package/skills/repo-audit/SKILL.md +272 -0
- package/skills/session-end/SKILL.md +1044 -0
- package/skills/session-end/discovery-scan.md +37 -0
- package/skills/session-end/drift-operations.md +97 -0
- package/skills/session-end/learning-patterns.md +78 -0
- package/skills/session-end/metrics-collection.md +175 -0
- package/skills/session-end/phase-3-2-docs-verification.md +148 -0
- package/skills/session-end/phase-3-6-tail.md +344 -0
- package/skills/session-end/phase-3-7a-recommendations.md +86 -0
- package/skills/session-end/plan-verification.md +288 -0
- package/skills/session-end/session-metrics-write.md +223 -0
- package/skills/session-end/vault-operations.md +50 -0
- package/skills/session-end/verification-checklist.md +20 -0
- package/skills/session-plan/SKILL.md +554 -0
- package/skills/session-plan/wave-template.md +37 -0
- package/skills/session-start/SKILL.md +1043 -0
- package/skills/session-start/phase-2-5-docs-planning.md +119 -0
- package/skills/session-start/phase-4-5-resource-health.md +49 -0
- package/skills/session-start/phase-7-1-premise-check.md +47 -0
- package/skills/session-start/phase-7-5-mode-selector.md +237 -0
- package/skills/session-start/phase-8-5-express-path.md +61 -0
- package/skills/session-start/presentation-format.md +81 -0
- package/skills/session-start/soul.md +57 -0
- package/skills/skill-creator/SKILL.md +168 -0
- package/skills/spinout/SKILL.md +76 -0
- package/skills/sunset-review/SKILL.md +96 -0
- package/skills/test-runner/SKILL.md +362 -0
- package/skills/test-runner/rubric-v1.md +388 -0
- package/skills/test-runner/soul.md +46 -0
- package/skills/tmux-layout/SKILL.md +104 -0
- package/skills/ubiquitous-language/SKILL.md +97 -0
- package/skills/using-orchestrator/SKILL.md +144 -0
- package/skills/vault-mirror/SKILL.md +234 -0
- package/skills/vault-sync/SKILL.md +319 -0
- package/skills/vault-sync/package-lock.json +40 -0
- package/skills/vault-sync/package.json +11 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +9 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
- package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +7 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +11 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
- package/skills/vault-sync/validator.mjs +658 -0
- package/skills/vault-sync/validator.sh +55 -0
- package/skills/wave-executor/SKILL.md +496 -0
- package/skills/wave-executor/circuit-breaker.md +169 -0
- package/skills/wave-executor/wave-loop.md +1043 -0
- package/skills/write-executable-plan/SKILL.md +237 -0
- package/skills/write-executable-plan/plan-template.md +154 -0
- package/templates/_minimal/CLAUDE.md.tmpl +41 -0
- package/templates/_minimal/README.md.tmpl +15 -0
- package/templates/_minimal/gitignore.tmpl +47 -0
- package/templates/_shared/harte-regeln.md +16 -0
- package/templates/_shared/loop.md +90 -0
- package/templates/_shared/rules/parallel-sessions.md +77 -0
- package/templates/nextjs-minimal/README.md +30 -0
- package/templates/nextjs-minimal/app/layout.tsx +18 -0
- package/templates/nextjs-minimal/app/page.tsx +7 -0
- package/templates/nextjs-minimal/eslint.config.mjs +16 -0
- package/templates/nextjs-minimal/next.config.mjs +4 -0
- package/templates/nextjs-minimal/package.json +27 -0
- package/templates/nextjs-minimal/tsconfig.json +23 -0
- package/templates/node-minimal/README.md +33 -0
- package/templates/node-minimal/eslint.config.mjs +10 -0
- package/templates/node-minimal/package.json +21 -0
- package/templates/node-minimal/src/index.ts +1 -0
- package/templates/node-minimal/tests/sanity.test.ts +5 -0
- package/templates/node-minimal/tsconfig.json +17 -0
- package/templates/personas/README.md +150 -0
- package/templates/personas/accounting-compliance.v1.md +120 -0
- package/templates/personas/accounting-tax-advisor.v1.md +116 -0
- package/templates/personas/buyer-p1-cto.v1.md +125 -0
- package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
- package/templates/personas/buyer-p3-build.v1.md +130 -0
- package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
- package/templates/personas/buyer-p5-solo.v1.md +132 -0
- package/templates/personas/buyer-p6-ld.v1.md +130 -0
- package/templates/personas/klima-ai-expert.v1.md +114 -0
- package/templates/personas/klima-physicist.v1.md +117 -0
- package/templates/python-uv/README.md +28 -0
- package/templates/python-uv/pyproject.toml +32 -0
- package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
- package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
- package/templates/python-uv/tests/test_sanity.py +2 -0
- package/templates/static-html/README.md +19 -0
- package/templates/static-html/index.html +15 -0
- package/templates/static-html/script.js +1 -0
- package/templates/static-html/styles.css +26 -0
|
@@ -0,0 +1,961 @@
|
|
|
1
|
+
# Session Config Template (Baseline)
|
|
2
|
+
|
|
3
|
+
> Project-instruction file: this lives under `## Session Config` in CLAUDE.md (Claude Code / Cursor) or AGENTS.md (Codex CLI). See [skills/_shared/instruction-file-resolution.md](../skills/_shared/instruction-file-resolution.md) for the alias resolution rule.
|
|
4
|
+
|
|
5
|
+
> Canonical field reference (types, defaults, edge cases): [docs/session-config-reference.md](./session-config-reference.md). This template is the **adopter-facing** companion: copy-paste blocks plus a structural walk-through of every field.
|
|
6
|
+
|
|
7
|
+
## How to use this template
|
|
8
|
+
|
|
9
|
+
1. Pick the host file: `CLAUDE.md (or AGENTS.md on Codex CLI)`. Never both.
|
|
10
|
+
2. Add a single `## Session Config` H2. The header must match exactly — `skills/_shared/config-reading.md` parses the block under that heading.
|
|
11
|
+
3. Start from the [Full minimal baseline](#full-minimal-baseline-copy-paste) at the bottom of this document. Add opt-in blocks one at a time as you adopt features.
|
|
12
|
+
4. Run `/bootstrap --retroactive` to schema-validate the result.
|
|
13
|
+
5. Validate at any time with `node scripts/parse-config.mjs --json`.
|
|
14
|
+
|
|
15
|
+
The format is the same on every platform. Fields not listed here are silently ignored — typos do **not** raise.
|
|
16
|
+
|
|
17
|
+
## Where this file lives
|
|
18
|
+
|
|
19
|
+
The session-orchestrator plugin reads its Session Config from the per-repo project-instruction file. Exactly which file it picks depends on the platform:
|
|
20
|
+
|
|
21
|
+
### CLAUDE.md (Claude Code, Cursor IDE)
|
|
22
|
+
|
|
23
|
+
Claude Code and Cursor IDE both read `CLAUDE.md` natively. Add the `## Session Config` H2 anywhere in that file.
|
|
24
|
+
|
|
25
|
+
### AGENTS.md (Codex CLI)
|
|
26
|
+
|
|
27
|
+
Codex CLI uses `AGENTS.md` as its canonical instruction file. Same `## Session Config` H2, same field set.
|
|
28
|
+
|
|
29
|
+
The plugin resolves the file via [`scripts/lib/common.mjs::resolveInstructionFile`](../scripts/lib/common.mjs); the rule is documented in [`skills/_shared/instruction-file-resolution.md`](../skills/_shared/instruction-file-resolution.md). `CLAUDE.md` always wins ties when both files exist.
|
|
30
|
+
|
|
31
|
+
## Mandatory fields (schema-validated)
|
|
32
|
+
|
|
33
|
+
These seven fields are enforced by `scripts/lib/config-schema.mjs`. Validation is gated by the `enforcement` field itself: `off` skips, `warn` reports + emits, `strict` reports + exits 1.
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
test-command: npm test # non-empty string — quality-gate test runner
|
|
37
|
+
typecheck-command: npm run typecheck # non-empty string — canonical typecheck runner
|
|
38
|
+
lint-command: npm run lint # non-empty string — Full Gate lint runner
|
|
39
|
+
agents-per-wave: 6 # integer ≥ 2 (or { default: 6, deep: 18 })
|
|
40
|
+
waves: 5 # integer ≥ 3 — execution wave count
|
|
41
|
+
persistence: true # boolean — STATE.md + memory file resumption
|
|
42
|
+
enforcement: warn # strict | warn | off — hook strictness AND validator gate
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Read by: `scripts/parse-config.mjs`, `scripts/validate-config.mjs`, `skills/_shared/config-reading.md`, every quality-gate skill.
|
|
46
|
+
|
|
47
|
+
## Session Structure
|
|
48
|
+
|
|
49
|
+
Controls wave count, parallelism, and freeform per-repo notes the orchestrator must follow.
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
agents-per-wave: 6 # integer or "6 (deep: 18)" override syntax
|
|
53
|
+
waves: 5 # integer ≥ 3
|
|
54
|
+
recent-commits: 20 # how many commits to display at session-start
|
|
55
|
+
special: "any repo-specific instructions" # freeform — orchestrator reads + obeys
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Read by: `skills/session-start/SKILL.md` (Phase 4.5), `skills/session-plan/SKILL.md`, `skills/wave-executor/wave-loop.md`.
|
|
59
|
+
|
|
60
|
+
## VCS & Infrastructure
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
vcs: gitlab # github | gitlab — auto-detected from remote when unset
|
|
64
|
+
gitlab-host: gitlab.example.com # only if remote URL doesn't expose it
|
|
65
|
+
mirror: github # auto-push to mirror after every commit (none | github)
|
|
66
|
+
cross-repos: [related-repo-1] # repos under ~/Projects/ to snapshot at session-start
|
|
67
|
+
pencil: path/to/design.pen # design-code alignment input
|
|
68
|
+
ecosystem-health: true # toggle health-endpoint probes
|
|
69
|
+
health-endpoints:
|
|
70
|
+
- { name: API, url: https://api.example.com/health }
|
|
71
|
+
issue-limit: 50 # max issues fetched at session-start
|
|
72
|
+
stale-branch-days: 7 # branch-age threshold for stale flag
|
|
73
|
+
stale-issue-days: 30 # issue-age threshold for triage flag
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Read by: `skills/session-start/SKILL.md`, `skills/ecosystem-health/SKILL.md`, `skills/gitlab-ops/SKILL.md`.
|
|
77
|
+
|
|
78
|
+
## Quality Gates
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
test-command: npm test # mandatory
|
|
82
|
+
typecheck-command: npm run typecheck # mandatory; `skip` for non-TS projects
|
|
83
|
+
lint-command: npm run lint # mandatory
|
|
84
|
+
ssot-files: [STATUS.md, STATE.md] # files watched for staleness
|
|
85
|
+
ssot-freshness-days: 5 # days before SSOT flagged
|
|
86
|
+
plugin-freshness-days: 30 # days before the plugin itself flagged
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Read by: `skills/quality-gates/SKILL.md`, `skills/session-end/SKILL.md`. The three `*-command` fields are overridden by `.orchestrator/policy/quality-gates.json` when that file exists (#183).
|
|
90
|
+
|
|
91
|
+
## Discovery
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
discovery-on-close: auto # session-type aware: housekeeping=false, feature/deep=true (#264)
|
|
95
|
+
discovery-probes: [all] # all | code | infra | ui | arch | session | audit | vault | feature
|
|
96
|
+
discovery-exclude-paths: [] # globs (e.g. "vendor/**", "dist/**")
|
|
97
|
+
discovery-severity-threshold: low # critical | high | medium | low
|
|
98
|
+
discovery-confidence-threshold: 60 # 0–100; below this auto-defers
|
|
99
|
+
discovery-parallelism: 5 # 1..16 probe agents in parallel
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Read by: `skills/discovery/SKILL.md` and the probe modules under `skills/discovery/probes-*.md`.
|
|
103
|
+
|
|
104
|
+
## Persistence & Safety
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
persistence: true # mandatory
|
|
108
|
+
memory-cleanup-threshold: 5 # recommend /memory-cleanup after N memory files
|
|
109
|
+
memory-cleanup-soft-limit: 180 # hard ceiling on memory file count before nudge (#502)
|
|
110
|
+
learning-expiry-days: 30 # learnings auto-expire after N days untouched
|
|
111
|
+
learnings-surface-top-n: 15 # how many learnings appear in Project Intelligence
|
|
112
|
+
learning-decay-rate: 0.05 # 0.0..<1.0 untouched-learning confidence decay
|
|
113
|
+
enforcement: warn # mandatory; strict | warn | off
|
|
114
|
+
enforcement-gates:
|
|
115
|
+
path-guard: true
|
|
116
|
+
command-guard: true
|
|
117
|
+
post-edit-validate: true
|
|
118
|
+
allow-destructive-ops: false # disables destructive-command guard when true
|
|
119
|
+
reasoning-output: false # opt-in STATE:/PLAN: agent transparency markers
|
|
120
|
+
grounding-check: true # session-end Phase 1.1a planned-vs-touched diff
|
|
121
|
+
grounding-injection-max-files: 3 # 0 disables (#85)
|
|
122
|
+
isolation: auto # worktree | none | auto (graduated default #194)
|
|
123
|
+
max-turns: auto # housekeeping=8, feature=15, deep=25
|
|
124
|
+
auto-commit-per-wave: false # opt-in: commit after each wave's Quality-Lite PASS (default false; V3.6 plumbing)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Read by: `skills/session-start/SKILL.md`, `skills/session-end/SKILL.md`, `hooks/pre-edit-scope.mjs`, `hooks/pre-bash-destructive-guard.mjs`, `hooks/pre-bash-enforce-commands.mjs`, `hooks/post-edit-validate.mjs`.
|
|
128
|
+
|
|
129
|
+
## Resource Awareness (env-aware)
|
|
130
|
+
|
|
131
|
+
Introduced by Epic #157. Lets session-start sense host RAM/CPU/SSH/peers and adapt wave planning. Safe to omit — defaults are conservative.
|
|
132
|
+
|
|
133
|
+
```yaml
|
|
134
|
+
resource-awareness: true # master toggle for env-aware runtime
|
|
135
|
+
enable-host-banner: true # emit host + resource banner at session-start
|
|
136
|
+
resource-thresholds:
|
|
137
|
+
ram-free-min-gb: 4 # below: cap agents-per-wave at 2
|
|
138
|
+
ram-free-critical-gb: 2 # below: recommend coordinator-direct
|
|
139
|
+
cpu-load-max-pct: 80 # sustained above: cap agents-per-wave at 2
|
|
140
|
+
concurrent-sessions-warn: 5 # warn at this many peer Claude sessions
|
|
141
|
+
ssh-no-docker: true # SSH session: avoid Docker-based tests
|
|
142
|
+
zombie-threshold-min: 30 # min idle time before stale-process flag (#178)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Read by: `hooks/on-session-start.mjs`, `scripts/lib/resource-probe.mjs`, `scripts/lib/wave-sizing.mjs`.
|
|
146
|
+
|
|
147
|
+
## Planning
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
baseline-ref: null # git ref on baseline project (or null = legacy MR sync)
|
|
151
|
+
baseline-project-id: "52" # GitLab project ID of baseline (default: infrastructure/projects-baseline)
|
|
152
|
+
plan-baseline-path: ~/Projects/projects-baseline # local baseline clone for /plan new
|
|
153
|
+
plan-default-visibility: internal # internal | private | public — for /plan new
|
|
154
|
+
plan-prd-location: docs/prd # PRD output directory
|
|
155
|
+
plan-retro-location: docs/retro # retro output directory
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Read by: `skills/plan/SKILL.md` and the three plan modes (`mode-new`, `mode-feature`, `mode-retro`).
|
|
159
|
+
|
|
160
|
+
## Vault Sync
|
|
161
|
+
|
|
162
|
+
Quality gate at session-end Phase 2 that validates YAML frontmatter against `vaultFrontmatterSchema` and flags dangling wiki-links. Opt-in.
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
vault-sync:
|
|
166
|
+
enabled: false # opt-in
|
|
167
|
+
mode: warn # warn | hard | off — `hard` blocks session close
|
|
168
|
+
vault-dir: . # absolute or repo-relative
|
|
169
|
+
exclude:
|
|
170
|
+
- "**/_MOC.md"
|
|
171
|
+
- "**/_overview.md"
|
|
172
|
+
- "**/README.md"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Read by: `skills/vault-sync/SKILL.md` + `skills/vault-sync/validator.mjs`.
|
|
176
|
+
|
|
177
|
+
## Vault Integration
|
|
178
|
+
|
|
179
|
+
Auto-sync that writes learnings + session summaries into a Meta-Vault after each session, and (with `--session-id`) auto-commits the result.
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
vault-integration:
|
|
183
|
+
enabled: false # opt-in
|
|
184
|
+
vault-dir: ~/Projects/vault # absolute path to vault repo
|
|
185
|
+
mode: warn # warn | strict | off
|
|
186
|
+
vault-name: # optional (#660) — overrides git-derived repo slug for per-project vault namespacing; null/absent → deriveRepo()
|
|
187
|
+
gitlab-groups: # optional — for /plan retro vault-backfill sub-mode
|
|
188
|
+
- infrastructure
|
|
189
|
+
- clients
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Read by: `scripts/vault-mirror.mjs`, `scripts/vault-backfill.mjs`, `skills/session-end/session-metrics-write.md`, `skills/evolve/SKILL.md`, `skills/plan/mode-retro.md`.
|
|
193
|
+
|
|
194
|
+
> **Host-local override (#653).** `vault-dir` (and `plan-baseline-path`) resolve host-locally with precedence: env-var (`SO_VAULT_DIR` / `SO_BASELINE_PATH`) > `owner.yaml` `paths:` section (`vault-dir` / `baseline-path`) > the committed default shown above. This keeps maintainer-specific absolute paths out of version control. Resolver: `scripts/lib/config/host-paths.mjs`.
|
|
195
|
+
|
|
196
|
+
## Vault Mirror Quality
|
|
197
|
+
|
|
198
|
+
Quality thresholds applied by `scripts/vault-mirror.mjs` before mirroring a learning or session note to the Meta-Vault. Notes below the thresholds are skipped (not an error). PRD F1.2 / issue #504.
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
vault-mirror:
|
|
202
|
+
quality:
|
|
203
|
+
min-narrative-chars: 400 # integer ≥ 0 — minimum body length to mirror
|
|
204
|
+
min-confidence: 0.5 # float 0.0..1.0 — minimum learning confidence to mirror
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Read by: `scripts/vault-mirror.mjs`.
|
|
208
|
+
|
|
209
|
+
## Cold Start
|
|
210
|
+
|
|
211
|
+
Cold-start detector that nudges the operator when sessions go silent (no commits, no learnings, long wall-clock idle). PRD F1.3 / issue #500.
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
cold-start:
|
|
215
|
+
enabled: true # opt-out master toggle; default true
|
|
216
|
+
nudge-after-hours: 1 # integer ≥ 0 — hours of wall-clock idle before nudge
|
|
217
|
+
silence-after-sessions: 1 # integer ≥ 0 — consecutive silent sessions before nudge
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Read by: `scripts/lib/cold-start-detector.mjs`.
|
|
221
|
+
|
|
222
|
+
## Memory Banner
|
|
223
|
+
|
|
224
|
+
Controls the session-start "📚 Loaded from memory" banner that surfaces top learnings and peer-card excerpts at the start of every session. PRD F2.3 / issue #505.
|
|
225
|
+
|
|
226
|
+
```yaml
|
|
227
|
+
memory:
|
|
228
|
+
banner:
|
|
229
|
+
enabled: true # PRD F2.3 (#505) — silence the session-start "📚 Loaded from memory" banner when false
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Read by: `scripts/lib/config/memory.mjs`; consumed in Phase 6.7 of `skills/session-start/SKILL.md`.
|
|
233
|
+
|
|
234
|
+
## Memory Proposals (#501)
|
|
235
|
+
|
|
236
|
+
Agent-writable memory tool. During a wave, an agent may call `node scripts/memory-propose.mjs --type … --subject … --insight … --evidence … --confidence …` to queue a learning proposal. At session-end Phase 3.6.3, the coordinator surfaces queued proposals via `AskUserQuestion` for accept/reject/edit. PRD F2.1 / issue #501.
|
|
237
|
+
|
|
238
|
+
```yaml
|
|
239
|
+
memory:
|
|
240
|
+
proposals:
|
|
241
|
+
enabled: true # PRD F2.1 (#501) — agent-writable memory tool; gates the propose() CLI + session-end AUQ
|
|
242
|
+
quota-per-wave: 5 # max proposals one agent can queue per wave (exit 1 / quota-exceeded when exceeded)
|
|
243
|
+
confidence-floor: 0.5 # proposals below this are rejected (exit 2 / rejected-low-confidence)
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Agents invoke via `SO_WAVE_AGENT=1 node scripts/memory-propose.mjs …`. The `SO_WAVE_AGENT=1` env-var is set automatically by the wave-executor boilerplate; direct CLI calls without it exit `3` (`rejected-wrong-context`).
|
|
247
|
+
|
|
248
|
+
Read by: `scripts/lib/memory-proposals/{schema,store,collector,sink}.mjs`, `scripts/memory-propose.mjs`, `agents/memory-proposal-collector.md`, `hooks/pre-bash-memory-propose-audit.mjs`, `skills/session-end/SKILL.md` Phase 3.6.3.
|
|
249
|
+
|
|
250
|
+
## Auto-Dream Proposal Filter (#566)
|
|
251
|
+
|
|
252
|
+
Collect-emit confidence floor applied at session-end Phase 3.6.3 by `collectProposals()` (`scripts/lib/memory-proposals/collector.mjs`). This is a SECOND gate above the write-time `memory.proposals.confidence-floor` enforced by `scripts/memory-propose.mjs`: the per-record write-floor runs first when an agent calls the CLI; the collect-emit floor here filters what surfaces to the operator's AUQ at session-end. Issue #566.
|
|
253
|
+
|
|
254
|
+
```yaml
|
|
255
|
+
auto-dream:
|
|
256
|
+
min-confidence: 0.5 # float 0.0..1.0 — collect-emit floor for proposals surfaced to AUQ
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Read by: `scripts/lib/config/auto-dream.mjs` (parser), `scripts/lib/memory-proposals/collector.mjs` (filter applied at session-end Phase 3.6.3 inside `collectProposals()`).
|
|
260
|
+
|
|
261
|
+
## STATE.md Lock
|
|
262
|
+
|
|
263
|
+
Mechanical write-lock around STATE.md to prevent race conditions between parallel worker sessions writing the same file (PRD gsd Pattern 1 / issue #518). When enabled, `withStateMdLock(fn)` acquires `.orchestrator/state.lock` before invoking `fn` and releases on completion or throw. Stale-lock override via PID-liveness mirrors the existing `session.lock` design.
|
|
264
|
+
|
|
265
|
+
```yaml
|
|
266
|
+
state-md-lock:
|
|
267
|
+
enabled: true # default true; mechanical guard against PSA-003/PSA-004 violations
|
|
268
|
+
timeout-ms: 10000 # integer ≥ 0 — acquire timeout in milliseconds
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Read by: `scripts/lib/session-lock.mjs` (new `acquireStateLock`/`releaseStateLock`/`withStateMdLock` helpers), every STATE.md writer under `scripts/lib/state-md/`.
|
|
272
|
+
|
|
273
|
+
## Handover Alignment Gate
|
|
274
|
+
|
|
275
|
+
Interactive gate in `/close` (session-end) that surfaces open questions before carryover issues are filed — giving the operator a chance to align on scope/expectations before the session's incomplete work is handed off (issue #769). Fail-open by design: the gate is skipped entirely when disabled, when running headless, or under `/autopilot` — it never blocks an unattended run.
|
|
276
|
+
|
|
277
|
+
```yaml
|
|
278
|
+
handover-gate:
|
|
279
|
+
enabled: true # default true; skips when disabled/headless/autopilot (fail-open)
|
|
280
|
+
max-open-questions: 3 # integer ≥ 0 — max open questions surfaced in the gate's triage AUQ (0 = none; channel stays active)
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Read by: `scripts/lib/config/handover-gate.mjs`, `skills/session-end/SKILL.md` Phase 1.65.
|
|
284
|
+
|
|
285
|
+
## Broken-Window Budget
|
|
286
|
+
|
|
287
|
+
Opt-in gate in `/close` (session-end Phase 2.6). When enabled, it aggregates THIS session's "knowingly-broken shipments" (echo-stubs shipped under `enforcement: warn`, Phase 2.3/2.5 "Override and close" choices, MED/LOW findings routed to "Unresolved Review Findings", wave-level overridden findings) and files ONE hard-terminated closure issue per item (labels `broken-window` + `priority:high`, hard due-date). Non-blocking and idempotent (issue #730, Epic H / H5).
|
|
288
|
+
|
|
289
|
+
```yaml
|
|
290
|
+
broken-window-budget:
|
|
291
|
+
enabled: false # opt-in; session-end Phase 2.6 files hard-due-date closure issues for knowingly-broken shipments
|
|
292
|
+
due-days: 7 # integer ≥ 1 — hard due-date horizon (glab native --due-date; gh Due: <date> body line)
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Read by: `scripts/lib/config/broken-window.mjs`, `skills/session-end/SKILL.md` Phase 2.6.
|
|
296
|
+
|
|
297
|
+
## Slopcheck (Package Legitimacy Gate)
|
|
298
|
+
|
|
299
|
+
Opt-in defense against LLM-hallucinated package names ("slopsquatting"). When enabled, `classifyPackages(pkgs)` consults the registry and returns `LEGITIMATE` / `ASSUMED` / `SUS` / `SLOP` per package. Hooked into `/plan` PRD generation and `/discovery` supply-chain probes. PRD gsd Pattern 2 / issue #520.
|
|
300
|
+
|
|
301
|
+
```yaml
|
|
302
|
+
slopcheck:
|
|
303
|
+
enabled: false # opt-in; defaults to off so existing sessions are unaffected
|
|
304
|
+
sources: [plan, discovery] # array of "plan" | "discovery" — where classifyPackages is invoked
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Read by: `scripts/lib/slopcheck.mjs` (Wave 3 module — `classifyPackages`), `skills/plan/SKILL.md` Phase 3.5, `skills/discovery/probes/supply-chain-slopcheck.mjs`.
|
|
308
|
+
|
|
309
|
+
## Templates-First Hook
|
|
310
|
+
|
|
311
|
+
PreToolUse `Bash` hook that blocks `gh|glab pr|mr|issue create` calls unless the matching repo template (`.github/PULL_REQUEST_TEMPLATE*`, `.github/ISSUE_TEMPLATE*`, `.gitlab/merge_request_templates/*`, `.gitlab/issue_templates/*`) was Read in the current session. Per-session acknowledgement via `.orchestrator/runtime/templates-acknowledged.json`. PRD gsd Pattern 3 / issue #519.
|
|
312
|
+
|
|
313
|
+
```yaml
|
|
314
|
+
templates-first:
|
|
315
|
+
enabled: true # default true; mechanical replacement for gitlab-ops template advice
|
|
316
|
+
hosts: [github, gitlab] # array of "github" | "gitlab" — host allow-list
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Read by: `hooks/pre-bash-templates-first.mjs`, `.orchestrator/policy/templates-policy.json`.
|
|
320
|
+
|
|
321
|
+
## Verification Auto-Fix Loop
|
|
322
|
+
|
|
323
|
+
Opt-in retry loop that dispatches a `code-implementer` fixer-agent after an inter-wave Quality-Gate failure, supplying failure output + `corrective_context` + changed file paths. Bounded by `max-retries` (default 2). When disabled (default), the wave-executor aborts on first gate failure — preserving today's behaviour. PRD gsd Pattern 4 / issue #521.
|
|
324
|
+
|
|
325
|
+
```yaml
|
|
326
|
+
verification-auto-fix:
|
|
327
|
+
enabled: false # opt-in; default false preserves current abort-on-fail behaviour
|
|
328
|
+
max-retries: 2 # integer ≥ 0 — bounded fixer-agent retries before hard abort
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Read by: `scripts/lib/quality-gate.mjs` (`runQualityGateWithRetry`), `skills/wave-executor/SKILL.md` inter-wave checkpoint.
|
|
332
|
+
|
|
333
|
+
## Custom Phases (#637)
|
|
334
|
+
|
|
335
|
+
Opt-in, repo-declared deterministic phases that run as their own phase during session close (and/or housekeeping). This is a **contract**, not a convention: each phase has a `command` executed via Bash with exit-code gating, plus summary reporting in the Final Report. Empty/absent ⇒ no custom phases run.
|
|
336
|
+
|
|
337
|
+
```yaml
|
|
338
|
+
custom-phases:
|
|
339
|
+
- name: eval-learn-aggregate # required, non-empty, SAFE slug ([A-Za-z0-9._-])
|
|
340
|
+
when: housekeeping # housekeeping | session-end | both (default: session-end)
|
|
341
|
+
command: npm run eval:aggregate # required; run verbatim — NO interpolation from records
|
|
342
|
+
mode: hard # warn | hard | off (default: warn)
|
|
343
|
+
review: docs/eval/last-run.md # optional; SAFE-path; coordinator reads it after the command (default: null)
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Field semantics:
|
|
347
|
+
- **`when`** — `housekeeping` phases run only on housekeeping sessions; `session-end` (default) runs on every non-housekeeping session-type; `both` runs on all.
|
|
348
|
+
- **`mode`** — `off` skips the phase; `warn` (default) runs + reports but never blocks; `hard` + non-zero exit code BLOCKS the close (AskUserQuestion: Fix / Override+log Deviation / Abort).
|
|
349
|
+
- **`review`** — when set, the coordinator reads that file as a review step after the command completes.
|
|
350
|
+
|
|
351
|
+
Security: `command` and `review` reject shell metacharacters; records failing validation (missing `name`/`command`, unsafe value) are dropped with a stderr WARN. Like `test-command`, a `command` is commit-gated and trusted under the same VCS-trust-anchor model — see `.claude/rules/quality-gates-autofix.md` § "Session Config Command Injection".
|
|
352
|
+
|
|
353
|
+
Read by: `scripts/lib/config/custom-phases.mjs`, `skills/session-end/SKILL.md` Phase 2.5.
|
|
354
|
+
|
|
355
|
+
## Evolve Extra Sources (#638)
|
|
356
|
+
|
|
357
|
+
Opt-in EXTRA learning sources for `/evolve`. A `domain-regression` measurement (e.g. an eval-learn harness) runs OUT-OF-BAND and writes a sidecar JSON; `/evolve` then READS each declared sidecar and emits a `domain-regression` learning candidate per persistent regression flag. `/evolve` NEVER runs the measurement itself — this is a strict read-only consumption contract. Absent/empty ⇒ `[]` ⇒ no extra sources are read.
|
|
358
|
+
|
|
359
|
+
```yaml
|
|
360
|
+
evolve:
|
|
361
|
+
extra-sources:
|
|
362
|
+
- path: eval/learn/reports/latest.json # required; SAFE path (no shell metacharacters)
|
|
363
|
+
kind: regression-flags # enum: regression-flags (only value; unknown ⇒ entry dropped + WARN)
|
|
364
|
+
learning-type: domain-regression # enum: domain-regression (only value; unknown ⇒ entry dropped + WARN)
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Field semantics:
|
|
368
|
+
- **`path`** — repo-relative or absolute path to a sidecar JSON. Schema gate: `{ flags: [{ metric, baseline, recent, delta }] }`. An unknown/missing sidecar schema ⇒ skip + WARN.
|
|
369
|
+
- **`kind`** — selects the sidecar parser. Only `regression-flags` is defined; an unknown value DROPS the entry with a stderr WARN (schema gate — `/evolve` never guesses a parser).
|
|
370
|
+
- **`learning-type`** — stamps the emitted learning candidate. Only `domain-regression` is registered (in both the learnings TTL schema and the memory-proposals type enum); an unknown value DROPS the entry with a stderr WARN.
|
|
371
|
+
|
|
372
|
+
Security: `path` rejects shell metacharacters; confinement at the read sink is the path-traversal guard. Like all command/path-bearing config, changes are commit-gated under the VCS-trust-anchor model.
|
|
373
|
+
|
|
374
|
+
Read by: `scripts/lib/config/evolve.mjs` (parser), `skills/evolve/SKILL.md` Step 3.1b (read + emit).
|
|
375
|
+
|
|
376
|
+
## Reconcile Engine (#696 / #697)
|
|
377
|
+
|
|
378
|
+
Opt-in config foundation for the FA3 (#696) advisory rule-proposal delivery at session-end Phase 3.6.8. When `enabled: true`, the session-end coordinator reads learning candidates from the reconcile engine (FA2 — `scripts/lib/reconcile/`) and surfaces approved rule proposals via `AskUserQuestion`. Rules are **never auto-applied** — every write is operator-AUQ-gated. The `mode: warn` default means proposals are surfaced as advisory banners; `mode: off` silences them entirely. The `rule-expiry-days` key defaults to `null` so the engine falls back to per-type TTL (default 60d in `emitter.mjs`); a non-null committed default would force flat expiry and change FA2 behaviour.
|
|
379
|
+
|
|
380
|
+
```yaml
|
|
381
|
+
reconcile:
|
|
382
|
+
enabled: false # opt-in; FA3 reads this to gate session-end Phase 3.6.8
|
|
383
|
+
mode: warn # off | warn — advisory only; rules NEVER auto-applied (#696)
|
|
384
|
+
targets: [repo-local] # where approved rules are written; repo-local = .claude/rules/ in v1
|
|
385
|
+
rule-expiry-days: null # null = per-type TTL (default 60d); set positive integer for flat override (#697)
|
|
386
|
+
confidence-floor: 0.5 # float 0.0..1.0 — min learning confidence for rule proposal eligibility
|
|
387
|
+
min-rule-days: 7 # #741.1 — floor for emitted rule expires-at: max(derived, now + N days); prevents born-dead rules
|
|
388
|
+
min-insight-chars: 24 # #741.2 — reject a learning whose trimmed insight is shorter than N chars before rule conversion
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Field semantics:
|
|
392
|
+
- **`enabled`** — master toggle. `false` (default) means session-end Phase 3.6.8 is a no-op.
|
|
393
|
+
- **`mode`** — `warn` surfaces proposals as an advisory AUQ at session-end; `off` silences all output. No `strict` mode — rules are never auto-applied in v1.
|
|
394
|
+
- **`targets`** — list of write locations for approved rules. `repo-local` writes to `.claude/rules/` in the current repo.
|
|
395
|
+
- **`rule-expiry-days`** — `null` (default) lets the reconcile engine use per-type TTL (fragile-pattern=30d, anti-pattern=90d, etc.). Set a positive integer to override all types with a flat expiry window.
|
|
396
|
+
- **`confidence-floor`** — learnings below this confidence level are not eligible for rule proposals. Default 0.5 matches `memory.proposals.confidence-floor`.
|
|
397
|
+
- **`min-rule-days`** — floor window (days) applied to a proposed rule's `expires-at` so a near-dead or already-elapsed natural expiry never produces a born-dead rule. Positive integer; malformed or ≤0 falls back to 7 (issue #741.1).
|
|
398
|
+
- **`min-insight-chars`** — opt-in minimum insight length gating the eligibility placeholder-insight check; rejects a learning whose trimmed insight is shorter than N characters before rule conversion. Integer ≥ 0; `0` disables the check (issue #741.2).
|
|
399
|
+
|
|
400
|
+
Read by: `scripts/lib/config/reconcile.mjs` (parser), `skills/session-end/SKILL.md` Phase 3.6.8 (FA3 delivery). FA2 engine: `scripts/lib/reconcile/`.
|
|
401
|
+
|
|
402
|
+
## Discovery-Validator (PSA-006 Enforcement)
|
|
403
|
+
|
|
404
|
+
Non-blocking `SubagentStop` hook that mechanically enforces PSA-006: distributional claims ("N of M", "100% of", "all N", "no remaining", "every X", "none of") in a subagent's transcript tail must carry an adjacent fenced grep/rg/find transcript. When a claim lacks one, the hook records a `discovery_validator_violation` event in `.orchestrator/metrics/events.jsonl` and emits a stderr WARN. v1 is log + warn only (exit 0 always — never blocks an agent) — a blocking hard-gate is reserved for a future iteration. ON by default (flip risk is near-zero; generates real telemetry). Issue #567.
|
|
405
|
+
|
|
406
|
+
```yaml
|
|
407
|
+
discovery-validator:
|
|
408
|
+
enabled: true # on by default; log+warn-only, exit-0-always — set false to silence
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
Read by: `scripts/lib/config/discovery-validator.mjs`, `hooks/post-subagent-discovery-validator.mjs`.
|
|
412
|
+
|
|
413
|
+
## Dialectic-Deriver
|
|
414
|
+
|
|
415
|
+
Opt-in mode for `/evolve --dialectic` and session-end Phase 3.6.7 auto-trigger. When `cadence > 0`, session-end auto-dispatches `/evolve --dialectic --dry-run` after every N sessions to produce a proposed update to peer cards (#503). Set `cadence: 0` as a kill-switch to permanently disable auto-dispatch (manual `/evolve --dialectic` always works regardless). PRD F2.5 / issue #506.
|
|
416
|
+
|
|
417
|
+
```yaml
|
|
418
|
+
dialectic:
|
|
419
|
+
cadence: 5 # integer ≥ 0; 0 = kill-switch (no critique dispatches)
|
|
420
|
+
model: haiku # haiku | sonnet | opus — fail-fast on unknown value
|
|
421
|
+
budget-tokens: 8000 # integer ≥ 0 — input token budget per critique call
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Read by: `scripts/lib/config/dialectic.mjs`, `scripts/lib/auto-dialectic.mjs`, `skills/session-end/SKILL.md` Phase 3.6.7, `skills/evolve/SKILL.md` Phase 6.
|
|
425
|
+
|
|
426
|
+
## Eval (#803)
|
|
427
|
+
|
|
428
|
+
Opt-in configuration for the Standard v1 evaluation harness and the forthcoming `/eval` skill (Session-Prozess-Eval — PRD `docs/prd/2026-07-16-aiat-llm-eval.md` §S6, follow-up wave of Epic #803). This section documents the config surface only; the skill consumer lands in a later wave.
|
|
429
|
+
|
|
430
|
+
```yaml
|
|
431
|
+
eval:
|
|
432
|
+
enabled: false # opt-in
|
|
433
|
+
mode: warn # warn | off
|
|
434
|
+
judge: off # off | haiku | sonnet
|
|
435
|
+
report: html # html | none
|
|
436
|
+
handle: # optional string — null/absent → null
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**Gotcha:** the `eval:` key-line itself must carry NO inline comment (strict `/^eval:\s*$/` block-open match — same restriction as `dialectic:` and `custom-phases:` above). A trailing `# comment` on that exact line silently disables the whole block; defaults apply with no warning.
|
|
440
|
+
|
|
441
|
+
Read by: `scripts/lib/config/eval.mjs`. Skill consumer: `skills/eval/SKILL.md` (not yet shipped as of this parser).
|
|
442
|
+
|
|
443
|
+
## Vault Staleness
|
|
444
|
+
|
|
445
|
+
Vault-drift discovery probes. Used by `/discovery vault` and (when `enabled`) session-end Phase 2.3.
|
|
446
|
+
|
|
447
|
+
```yaml
|
|
448
|
+
vault-staleness:
|
|
449
|
+
enabled: false # opt-in
|
|
450
|
+
mode: warn # warn | strict | off (NOT 'hard'; canonical per #217)
|
|
451
|
+
thresholds:
|
|
452
|
+
top: 30 # tier=top narrative staleness (days)
|
|
453
|
+
active: 60 # tier=active
|
|
454
|
+
archived: 180 # tier=archived
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Read by: `skills/discovery/probes/vault-staleness.mjs`, `skills/discovery/probes/vault-narrative-staleness.mjs`, `skills/session-end/SKILL.md` Phase 2.3.
|
|
458
|
+
|
|
459
|
+
## Docs Staleness
|
|
460
|
+
|
|
461
|
+
Filesystem-mtime staleness probe for living reference docs (`docs/*.md` root-level + `docs/examples/*.md`; excludes `docs/adr/` — historically stable — and `docs/prd/` — active work-in-progress). Used by `/discovery` when enabled (#781, Epic #774).
|
|
462
|
+
|
|
463
|
+
```yaml
|
|
464
|
+
docs-staleness:
|
|
465
|
+
enabled: false # opt-in
|
|
466
|
+
mode: warn # strict | warn | off
|
|
467
|
+
thresholds:
|
|
468
|
+
living: 90 # days — single tier; severity escalates at 1×/2×/3× threshold
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
Read by: `skills/discovery/probes/docs-staleness.mjs`, `scripts/lib/config/docs-staleness.mjs`.
|
|
472
|
+
|
|
473
|
+
## CLAUDE.md Drift Check
|
|
474
|
+
|
|
475
|
+
Narrative-drift gate at session-end Phase 2.2. Ten checks (see `skills/claude-md-drift-check/SKILL.md` for the full spec):
|
|
476
|
+
|
|
477
|
+
1. `path-resolver` — absolute-path resolution
|
|
478
|
+
2. `project-count-sync` — `01-projects/` count claims
|
|
479
|
+
3. `issue-reference-freshness` — closed refs in forward-looking sections
|
|
480
|
+
4. `session-file-existence` — `50-sessions/YYYY-MM-DD-*.md` references
|
|
481
|
+
5. `command-count` — claimed "N commands" vs actual `commands/*.md`
|
|
482
|
+
6. `session-config-parity` — top-level keys diffed against `docs/session-config-template.md`
|
|
483
|
+
7. `vault-dir-parity` — `CLAUDE.md` vs `AGENTS.md` agreement on `vault-integration.vault-dir`
|
|
484
|
+
8. `generated-rule-staleness` (WARN-only) — auto-generated rules whose `learning-key` is absent or expired
|
|
485
|
+
9. `rule-scoping` — `.claude/rules/*.md` `paths:`/`globs:` frontmatter defects, cited-but-missing rule citations, zero-match globs, foreign glob tokens
|
|
486
|
+
10. `docs-parity` — `docs/components.md` count-claims vs actual on-disk counts, Session Config key parity between `docs/session-config-template.md` and `docs/session-config-reference.md`, and legacy pre-`.orchestrator/metrics/` path references in the docs tree
|
|
487
|
+
|
|
488
|
+
```yaml
|
|
489
|
+
drift-check:
|
|
490
|
+
enabled: false # opt-in
|
|
491
|
+
mode: warn # warn | hard | off
|
|
492
|
+
include-paths:
|
|
493
|
+
- CLAUDE.md
|
|
494
|
+
- AGENTS.md
|
|
495
|
+
- _meta/**/*.md
|
|
496
|
+
check-path-resolver: true
|
|
497
|
+
check-project-count-sync: true
|
|
498
|
+
check-issue-reference-freshness: true
|
|
499
|
+
check-session-file-existence: true
|
|
500
|
+
check-command-count: true
|
|
501
|
+
check-session-config-parity: true
|
|
502
|
+
check-vault-dir-parity: true
|
|
503
|
+
check-generated-rule-staleness: true
|
|
504
|
+
check-rule-scoping: true
|
|
505
|
+
check-docs-parity: true
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
Read by: `skills/claude-md-drift-check/SKILL.md`, `skills/claude-md-drift-check/checker.mjs`.
|
|
509
|
+
|
|
510
|
+
## Docs Orchestrator
|
|
511
|
+
|
|
512
|
+
Audience-split (User / Dev / Vault) doc generation, hooked into session-start Phase 2.5, session-plan Step 1.5/1.8, session-end Phase 3.2.
|
|
513
|
+
|
|
514
|
+
```yaml
|
|
515
|
+
docs-orchestrator:
|
|
516
|
+
enabled: false # opt-in; activates the docs-writer agent
|
|
517
|
+
audiences: [user, dev, vault] # subset allowed
|
|
518
|
+
mode: warn # warn | strict | off
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
Read by: `skills/docs-orchestrator/SKILL.md`, `skills/session-start/phase-2-5-docs-planning.md`, `skills/session-end/phase-3-2-docs-verification.md`, `agents/docs-writer.md`.
|
|
522
|
+
|
|
523
|
+
## Events Rotation
|
|
524
|
+
|
|
525
|
+
Size-based rotation of `.orchestrator/metrics/events.jsonl` (#251). Fires only at session-start.
|
|
526
|
+
|
|
527
|
+
```yaml
|
|
528
|
+
events-rotation:
|
|
529
|
+
enabled: true # default true
|
|
530
|
+
max-size-mb: 10 # 1..1024
|
|
531
|
+
max-backups: 5 # 1..20
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
Read by: `hooks/on-session-start.mjs`, `scripts/lib/events-rotation.mjs`.
|
|
535
|
+
|
|
536
|
+
## Express Path
|
|
537
|
+
|
|
538
|
+
Codified coordinator-direct flow for housekeeping + simple single-issue sessions (#214). Activates when session-type=housekeeping AND issues ≤ 3 AND no parallel agents.
|
|
539
|
+
|
|
540
|
+
```yaml
|
|
541
|
+
express-path:
|
|
542
|
+
enabled: true # default true; set false to always use full 5-wave flow
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
Read by: `skills/session-start/phase-8-5-express-path.md`, `skills/session-plan/SKILL.md` (express-path short-circuit).
|
|
546
|
+
|
|
547
|
+
## Webhooks
|
|
548
|
+
|
|
549
|
+
Opt-in webhook notifications. The `scripts/lib/webhook-url.mjs` resolver checks env first (`SO_WEBHOOK_<KIND>_URL`), then this Session Config block. **No personal-domain default** — callers must supply a URL or the resolver throws.
|
|
550
|
+
|
|
551
|
+
```yaml
|
|
552
|
+
webhooks:
|
|
553
|
+
slack:
|
|
554
|
+
url: https://hooks.slack.com/services/REDACTED/REDACTED/REDACTED
|
|
555
|
+
discord:
|
|
556
|
+
url: https://discord.com/api/webhooks/REDACTED/REDACTED
|
|
557
|
+
generic:
|
|
558
|
+
url: https://example.com/hooks/session-events
|
|
559
|
+
gitlab-pipeline-status:
|
|
560
|
+
url: https://gitlab.example.com/hooks/pipeline
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
Read by: `scripts/lib/webhook-url.mjs`, hooks that emit events (`hooks/on-stop.mjs`, `hooks/on-subagent-stop.mjs`).
|
|
564
|
+
|
|
565
|
+
The internal Clank Event Bus uses two separate env vars (`CLANK_EVENT_SECRET`, `CLANK_EVENT_URL`) — both required for the fire-and-forget POST.
|
|
566
|
+
|
|
567
|
+
## Hook Runtime Profile (env-only, not config)
|
|
568
|
+
|
|
569
|
+
`SO_HOOK_PROFILE` and `SO_DISABLED_HOOKS` are environment variables, **not Session Config fields**. They control hook execution at runtime without editing `hooks.json`.
|
|
570
|
+
|
|
571
|
+
| Variable | Values | Default | Effect |
|
|
572
|
+
|----------|--------|---------|--------|
|
|
573
|
+
| `SO_HOOK_PROFILE` | `full` \| `minimal` \| `off` | `full` | Preset bundle — `minimal` keeps only `on-session-start` + `pre-bash-destructive-guard`. |
|
|
574
|
+
| `SO_DISABLED_HOOKS` | comma-separated hook names | _(none)_ | Per-hook override; takes precedence over the profile. |
|
|
575
|
+
|
|
576
|
+
Read by: `hooks/_lib/profile-gate.mjs`. See [docs/session-config-reference.md § Hook Runtime Profile Control](./session-config-reference.md#hook-runtime-profile-control-211).
|
|
577
|
+
|
|
578
|
+
## Agent Mapping
|
|
579
|
+
|
|
580
|
+
Explicit role-to-agent binding. Without this block, session-plan auto-matches tasks to agents based on description content.
|
|
581
|
+
|
|
582
|
+
```yaml
|
|
583
|
+
agent-mapping:
|
|
584
|
+
impl: code-implementer
|
|
585
|
+
test: test-writer
|
|
586
|
+
ui: ui-developer
|
|
587
|
+
db: db-specialist
|
|
588
|
+
security: security-reviewer
|
|
589
|
+
docs: docs-writer
|
|
590
|
+
perf: code-implementer
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
Read by: `skills/session-plan/SKILL.md`, `skills/wave-executor/wave-loop.md`.
|
|
594
|
+
|
|
595
|
+
The dispatch resolution is three-tier: project agents (`.claude/agents/`) > plugin agents (`session-orchestrator:*`) > `general-purpose`.
|
|
596
|
+
|
|
597
|
+
## Full minimal baseline (copy-paste)
|
|
598
|
+
|
|
599
|
+
The smallest valid Session Config — passes `validate-config` without warnings on a typical Node/TS repo:
|
|
600
|
+
|
|
601
|
+
```yaml
|
|
602
|
+
## Session Config
|
|
603
|
+
|
|
604
|
+
test-command: npm test
|
|
605
|
+
typecheck-command: npm run typecheck
|
|
606
|
+
lint-command: npm run lint
|
|
607
|
+
agents-per-wave: 6
|
|
608
|
+
waves: 5
|
|
609
|
+
persistence: true
|
|
610
|
+
enforcement: warn
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
That's enough for `/session feature` → `/go` → `/close` to work end-to-end. Every other field falls back to documented defaults.
|
|
614
|
+
|
|
615
|
+
## Full opt-in baseline (copy-paste)
|
|
616
|
+
|
|
617
|
+
Everything turned on for a project that wants the full feature surface (vault, docs, drift checks, env-aware sizing, webhooks). Trim to taste:
|
|
618
|
+
|
|
619
|
+
```yaml
|
|
620
|
+
## Session Config
|
|
621
|
+
|
|
622
|
+
# Mandatory
|
|
623
|
+
test-command: npm test
|
|
624
|
+
typecheck-command: npm run typecheck
|
|
625
|
+
lint-command: npm run lint
|
|
626
|
+
agents-per-wave: 6 (deep: 18)
|
|
627
|
+
waves: 5
|
|
628
|
+
persistence: true
|
|
629
|
+
enforcement: warn
|
|
630
|
+
|
|
631
|
+
# Session structure
|
|
632
|
+
recent-commits: 20
|
|
633
|
+
special: "follow .claude/rules/parallel-sessions.md"
|
|
634
|
+
|
|
635
|
+
# VCS & infrastructure
|
|
636
|
+
vcs: gitlab
|
|
637
|
+
mirror: github
|
|
638
|
+
cross-repos: []
|
|
639
|
+
ecosystem-health: true
|
|
640
|
+
health-endpoints: []
|
|
641
|
+
issue-limit: 50
|
|
642
|
+
stale-branch-days: 7
|
|
643
|
+
stale-issue-days: 30
|
|
644
|
+
|
|
645
|
+
# Quality
|
|
646
|
+
ssot-files: [STATE.md]
|
|
647
|
+
ssot-freshness-days: 5
|
|
648
|
+
plugin-freshness-days: 30
|
|
649
|
+
|
|
650
|
+
# Discovery
|
|
651
|
+
discovery-on-close: auto
|
|
652
|
+
discovery-probes: [all]
|
|
653
|
+
discovery-exclude-paths: ["vendor/**", "dist/**", "node_modules/**"]
|
|
654
|
+
discovery-severity-threshold: low
|
|
655
|
+
discovery-confidence-threshold: 60
|
|
656
|
+
discovery-parallelism: 5
|
|
657
|
+
|
|
658
|
+
# Persistence & safety
|
|
659
|
+
memory-cleanup-threshold: 5
|
|
660
|
+
memory-cleanup-soft-limit: 180
|
|
661
|
+
learning-expiry-days: 30
|
|
662
|
+
learnings-surface-top-n: 15
|
|
663
|
+
learning-decay-rate: 0.05
|
|
664
|
+
enforcement-gates:
|
|
665
|
+
path-guard: true
|
|
666
|
+
command-guard: true
|
|
667
|
+
post-edit-validate: true
|
|
668
|
+
allow-destructive-ops: false
|
|
669
|
+
reasoning-output: false
|
|
670
|
+
grounding-check: true
|
|
671
|
+
grounding-injection-max-files: 3
|
|
672
|
+
isolation: auto
|
|
673
|
+
max-turns: auto
|
|
674
|
+
auto-commit-per-wave: false # opt-in: commit after each wave's Quality-Lite PASS (V3.6 plumbing)
|
|
675
|
+
|
|
676
|
+
# Env-aware
|
|
677
|
+
resource-awareness: true
|
|
678
|
+
enable-host-banner: true
|
|
679
|
+
resource-thresholds:
|
|
680
|
+
ram-free-min-gb: 4
|
|
681
|
+
ram-free-critical-gb: 2
|
|
682
|
+
cpu-load-max-pct: 80
|
|
683
|
+
concurrent-sessions-warn: 5
|
|
684
|
+
ssh-no-docker: true
|
|
685
|
+
zombie-threshold-min: 30
|
|
686
|
+
|
|
687
|
+
# Planning
|
|
688
|
+
baseline-ref: main
|
|
689
|
+
baseline-project-id: "52"
|
|
690
|
+
plan-baseline-path: ~/Projects/projects-baseline
|
|
691
|
+
plan-default-visibility: internal
|
|
692
|
+
plan-prd-location: docs/prd
|
|
693
|
+
plan-retro-location: docs/retro
|
|
694
|
+
|
|
695
|
+
# Vault sync
|
|
696
|
+
vault-sync:
|
|
697
|
+
enabled: true
|
|
698
|
+
mode: warn
|
|
699
|
+
vault-dir: .
|
|
700
|
+
exclude: ["**/_MOC.md", "**/_overview.md", "**/README.md"]
|
|
701
|
+
|
|
702
|
+
# Vault integration
|
|
703
|
+
vault-integration:
|
|
704
|
+
enabled: true
|
|
705
|
+
vault-dir: ~/Projects/vault
|
|
706
|
+
mode: warn
|
|
707
|
+
vault-name: # optional (#660) — per-project vault namespace override; null/absent → deriveRepo()
|
|
708
|
+
gitlab-groups: []
|
|
709
|
+
|
|
710
|
+
# Vault mirror quality thresholds
|
|
711
|
+
vault-mirror:
|
|
712
|
+
quality:
|
|
713
|
+
min-narrative-chars: 400
|
|
714
|
+
min-confidence: 0.5
|
|
715
|
+
|
|
716
|
+
# Cold-start detector
|
|
717
|
+
cold-start:
|
|
718
|
+
enabled: true
|
|
719
|
+
nudge-after-hours: 1
|
|
720
|
+
silence-after-sessions: 1
|
|
721
|
+
|
|
722
|
+
# Memory banner (PRD F2.3 / #505) + Memory proposals (PRD F2.1 / #501)
|
|
723
|
+
memory:
|
|
724
|
+
banner:
|
|
725
|
+
enabled: true # PRD F2.3 (#505) — silence the session-start "📚 Loaded from memory" banner when false
|
|
726
|
+
proposals:
|
|
727
|
+
enabled: true # PRD F2.1 (#501) — agent-writable memory tool (memory.propose CLI + session-end AUQ)
|
|
728
|
+
quota-per-wave: 5 # max proposals one agent can queue per wave (exit 1 / quota-exceeded when exceeded)
|
|
729
|
+
confidence-floor: 0.5 # proposals below this are rejected (exit 2 / rejected-low-confidence)
|
|
730
|
+
|
|
731
|
+
# Auto-Dream proposal filter (#566) — SECOND gate above memory.proposals.confidence-floor
|
|
732
|
+
auto-dream:
|
|
733
|
+
min-confidence: 0.5 # collect-emit floor applied by collectProposals() at session-end Phase 3.6.3
|
|
734
|
+
|
|
735
|
+
# STATE.md lock (PRD gsd Pattern 1 / #518)
|
|
736
|
+
state-md-lock:
|
|
737
|
+
enabled: true
|
|
738
|
+
timeout-ms: 10000
|
|
739
|
+
|
|
740
|
+
# Handover Alignment Gate (#769)
|
|
741
|
+
handover-gate:
|
|
742
|
+
enabled: true
|
|
743
|
+
max-open-questions: 3
|
|
744
|
+
|
|
745
|
+
# Broken-Window Budget (#730/H5)
|
|
746
|
+
broken-window-budget:
|
|
747
|
+
enabled: false
|
|
748
|
+
due-days: 7
|
|
749
|
+
|
|
750
|
+
# Slopcheck (PRD gsd Pattern 2 / #520)
|
|
751
|
+
slopcheck:
|
|
752
|
+
enabled: false
|
|
753
|
+
sources: [plan, discovery]
|
|
754
|
+
|
|
755
|
+
# Templates-first hook (PRD gsd Pattern 3 / #519)
|
|
756
|
+
templates-first:
|
|
757
|
+
enabled: true
|
|
758
|
+
hosts: [github, gitlab]
|
|
759
|
+
|
|
760
|
+
# Verification auto-fix loop (PRD gsd Pattern 4 / #521)
|
|
761
|
+
verification-auto-fix:
|
|
762
|
+
enabled: false
|
|
763
|
+
max-retries: 2
|
|
764
|
+
|
|
765
|
+
# Custom phases — repo-declared deterministic close/housekeeping phases (#637)
|
|
766
|
+
custom-phases:
|
|
767
|
+
- name: eval-learn-aggregate # required, SAFE slug
|
|
768
|
+
when: housekeeping # housekeeping | session-end | both (default: session-end)
|
|
769
|
+
command: npm run eval:aggregate # required; run verbatim — no record interpolation
|
|
770
|
+
mode: hard # warn | hard | off (default: warn)
|
|
771
|
+
review: docs/eval/last-run.md # optional SAFE path read after the command (default: null)
|
|
772
|
+
|
|
773
|
+
# Evolve extra-sources — opt-in EXTRA /evolve learning sources (#638)
|
|
774
|
+
evolve:
|
|
775
|
+
extra-sources:
|
|
776
|
+
- path: eval/learn/reports/latest.json # required; SAFE path to a sidecar JSON
|
|
777
|
+
kind: regression-flags # enum: regression-flags (only value)
|
|
778
|
+
learning-type: domain-regression # enum: domain-regression (only value)
|
|
779
|
+
|
|
780
|
+
# Reconcile engine — FA3 advisory rule-proposal delivery (#696 / #697)
|
|
781
|
+
reconcile:
|
|
782
|
+
enabled: false # opt-in; FA3 reads this to gate session-end Phase 3.6.8
|
|
783
|
+
mode: warn # off | warn — advisory only; rules NEVER auto-applied
|
|
784
|
+
targets: [repo-local] # rule-write location; repo-local = .claude/rules/ in v1
|
|
785
|
+
rule-expiry-days: null # null = per-type TTL (default 60d); set integer to override
|
|
786
|
+
confidence-floor: 0.5 # float 0.0..1.0 — min confidence for rule proposal eligibility
|
|
787
|
+
min-rule-days: 7 # #741.1 — floor for emitted rule expires-at (prevents born-dead rules)
|
|
788
|
+
min-insight-chars: 24 # #741.2 — reject a learning whose trimmed insight is shorter than N chars
|
|
789
|
+
|
|
790
|
+
# Discovery-validator — PSA-006 enforcement (#567)
|
|
791
|
+
discovery-validator:
|
|
792
|
+
enabled: true
|
|
793
|
+
|
|
794
|
+
# Dialectic-Deriver (#506)
|
|
795
|
+
dialectic:
|
|
796
|
+
cadence: 5 # integer ≥ 0; 0 = kill-switch (no critique dispatches)
|
|
797
|
+
model: haiku # haiku | sonnet | opus — fail-fast on unknown value
|
|
798
|
+
budget-tokens: 8000 # integer ≥ 0 — input token budget per critique call
|
|
799
|
+
|
|
800
|
+
# Eval — Standard v1 harness config surface (#809 / Epic #803)
|
|
801
|
+
eval:
|
|
802
|
+
enabled: false # opt-in
|
|
803
|
+
mode: warn # warn | off — fail-fast on unknown value
|
|
804
|
+
judge: off # off | haiku | sonnet — fail-fast on unknown value
|
|
805
|
+
report: html # html | none — fail-fast on unknown value
|
|
806
|
+
handle: # optional string — null/absent → null
|
|
807
|
+
|
|
808
|
+
# Vault staleness
|
|
809
|
+
vault-staleness:
|
|
810
|
+
enabled: true
|
|
811
|
+
mode: warn
|
|
812
|
+
thresholds:
|
|
813
|
+
top: 30
|
|
814
|
+
active: 60
|
|
815
|
+
archived: 180
|
|
816
|
+
|
|
817
|
+
# Docs staleness (#781)
|
|
818
|
+
docs-staleness:
|
|
819
|
+
enabled: false
|
|
820
|
+
mode: warn
|
|
821
|
+
thresholds:
|
|
822
|
+
living: 90
|
|
823
|
+
|
|
824
|
+
# CLAUDE.md drift check
|
|
825
|
+
drift-check:
|
|
826
|
+
enabled: true
|
|
827
|
+
mode: warn
|
|
828
|
+
include-paths: [CLAUDE.md, AGENTS.md, "_meta/**/*.md"]
|
|
829
|
+
check-path-resolver: true
|
|
830
|
+
check-project-count-sync: true
|
|
831
|
+
check-issue-reference-freshness: true
|
|
832
|
+
check-session-file-existence: true
|
|
833
|
+
check-command-count: true
|
|
834
|
+
check-session-config-parity: true
|
|
835
|
+
check-vault-dir-parity: true
|
|
836
|
+
check-generated-rule-staleness: true
|
|
837
|
+
check-rule-scoping: true
|
|
838
|
+
check-docs-parity: true
|
|
839
|
+
|
|
840
|
+
# Docs orchestrator
|
|
841
|
+
docs-orchestrator:
|
|
842
|
+
enabled: true
|
|
843
|
+
audiences: [user, dev, vault]
|
|
844
|
+
mode: warn
|
|
845
|
+
|
|
846
|
+
# Events rotation
|
|
847
|
+
events-rotation:
|
|
848
|
+
enabled: true
|
|
849
|
+
max-size-mb: 10
|
|
850
|
+
max-backups: 5
|
|
851
|
+
|
|
852
|
+
# Express path
|
|
853
|
+
express-path:
|
|
854
|
+
enabled: true
|
|
855
|
+
|
|
856
|
+
# Frontend-slop PostToolUse hook (#684) — opt-in, warn-only, non-blocking
|
|
857
|
+
frontend-slop-hook:
|
|
858
|
+
enabled: false # PostToolUse frontend-slop detector after UI-file edits; profile-gate also gates it
|
|
859
|
+
|
|
860
|
+
# Runaway tool-loop guard (ecc-analysis / #619)
|
|
861
|
+
loop-guard:
|
|
862
|
+
enabled: true # PostToolUse warn-only loop detector; profile-gate also gates it
|
|
863
|
+
threshold: 3 # identical (tool+argsHash) calls within window before warn
|
|
864
|
+
window: 5 # ring-buffer size
|
|
865
|
+
|
|
866
|
+
# Always-on instruction-budget guard (#687) — session-start Phase 4, warn-only, growth-ratchet
|
|
867
|
+
instruction-budget:
|
|
868
|
+
enabled: true # always-on directive-budget banner; off-by-config silences it
|
|
869
|
+
ceiling: 480 # structural-directive ceiling (baseline ~457; ratchet guards growth)
|
|
870
|
+
mode: warn # warn (surface banner) | off (silent no-op)
|
|
871
|
+
|
|
872
|
+
# Config-protection guard (ecc-analysis / #622)
|
|
873
|
+
config-protection:
|
|
874
|
+
enabled: true # PreToolUse: warn on gate-weakening Edit/Write
|
|
875
|
+
mode: warn # warn | strict (strict blocks loosening, exit 2)
|
|
876
|
+
allow-config-weakening: false # per-session bypass (mirrors allow-destructive-ops)
|
|
877
|
+
|
|
878
|
+
# Strategic compact-nudge (ecc-analysis / #620)
|
|
879
|
+
compact-nudge:
|
|
880
|
+
enabled: false # opt-in advisory /compact nudge at inter-wave checkpoints
|
|
881
|
+
after: [discovery, impl] # subset of {discovery, impl, failed-wave}
|
|
882
|
+
# NOTE: `discovery` / `impl` are wave ROLES — the §3c gate matches them against
|
|
883
|
+
# the wave's role string. `failed-wave` is NOT a role; it keys off the wave's
|
|
884
|
+
# failure OUTCOME (any wave that did not pass its quality gate), so it can fire
|
|
885
|
+
# after a wave of any role.
|
|
886
|
+
mode: warn # warn | off
|
|
887
|
+
|
|
888
|
+
# /goal continuation anchor at named seams (Lever 5 / #636)
|
|
889
|
+
goal-integration:
|
|
890
|
+
enabled: false # opt-in advisory; default off — zero behaviour change when absent
|
|
891
|
+
seams: [session-end-backlog, inter-wave-fixloop] # subset of {session-end-backlog, inter-wave-fixloop}
|
|
892
|
+
# ADVISORY ONLY. Surfaces ONE suggested /goal command at the named seam(s);
|
|
893
|
+
# never auto-invokes /goal, never blocks. /goal = Adapter (ADR-0010): the
|
|
894
|
+
# evaluator reads the transcript and runs NO tools — it anchors CONTINUATION,
|
|
895
|
+
# never JUDGMENT. Deterministic exit-code gates (npm test/typecheck/lint) stay
|
|
896
|
+
# the completion authority. ONE goal per session — the two seams cannot both
|
|
897
|
+
# hold an active goal; the operator picks one. See `.claude/rules/loop-and-monitor.md`
|
|
898
|
+
# § LM-008, `skills/session-end/SKILL.md § 1.3a`, and
|
|
899
|
+
# `skills/wave-executor/wave-loop.md § /goal Continuation Anchor`.
|
|
900
|
+
|
|
901
|
+
# Webhooks (URLs are required when used — no defaults)
|
|
902
|
+
# webhooks:
|
|
903
|
+
# slack:
|
|
904
|
+
# url: https://hooks.slack.com/services/...
|
|
905
|
+
# gitlab-pipeline-status:
|
|
906
|
+
# url: https://gitlab.example.com/hooks/pipeline
|
|
907
|
+
|
|
908
|
+
# Agent mapping
|
|
909
|
+
agent-mapping:
|
|
910
|
+
impl: code-implementer
|
|
911
|
+
test: test-writer
|
|
912
|
+
ui: ui-developer
|
|
913
|
+
db: db-specialist
|
|
914
|
+
security: security-reviewer
|
|
915
|
+
docs: docs-writer
|
|
916
|
+
perf: code-implementer
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
## Validation & Bootstrap
|
|
920
|
+
|
|
921
|
+
- **Validate manually:** `node scripts/parse-config.mjs --json` (writes to stdout) or `node scripts/validate-config.mjs` (mandatory-field check).
|
|
922
|
+
- **Auto-validate at session-start:** Always runs. Behavior is gated by `enforcement` (`off`/`warn`/`strict`).
|
|
923
|
+
- **Bypass:** `SO_SKIP_CONFIG_VALIDATION=1`.
|
|
924
|
+
- **Patch missing fields:** `/bootstrap --retroactive` adds the seven mandatory fields to an existing config without overwriting custom values.
|
|
925
|
+
|
|
926
|
+
## Cross-reference
|
|
927
|
+
|
|
928
|
+
- [docs/session-config-reference.md](./session-config-reference.md) — full canonical reference, types, edge cases.
|
|
929
|
+
- [skills/_shared/instruction-file-resolution.md](../skills/_shared/instruction-file-resolution.md) — CLAUDE.md ↔ AGENTS.md alias rule.
|
|
930
|
+
- [skills/_shared/config-reading.md](../skills/_shared/config-reading.md) — runtime parser used by every skill.
|
|
931
|
+
- [docs/USER-GUIDE.md](./USER-GUIDE.md) — adopter walk-through with examples.
|
|
932
|
+
- [docs/examples/](./examples/) — Session Config samples for Next.js, Express, Swift.
|
|
933
|
+
|
|
934
|
+
## Skill Evolution
|
|
935
|
+
|
|
936
|
+
> **Parity-exempt section.** This H2 is intentionally placed outside the `## Session Config` block so that the `claude-md-drift-check` Check-6 parity scanner (which extracts only column-0 keys inside the `## Session Config` block) does not flag repos that have not yet adopted this feature. Adding `skill-evolution:` as a column-0 key *inside* `## Session Config` would cause every repo running `drift-check.mode: hard` that lacks the key to hard-fail at session-end — portfolio-wide breakage. Issue #646.
|
|
937
|
+
|
|
938
|
+
Opt-in configuration for the Skill Self-Evolution Foundation (Epic #643, Sub-issue #646). When `autonomy: advisory`, the `/evolve` skill surfaces a session-end summary of skill health signals (D-token rollup, telemetry gaps, A/B experiment deltas) for operator review — no automated edits. When `autonomy: autonomous-gated`, a deterministic evidence gate is checked first; only repairs that clear the gate AND belong to the repo's own local config artifacts (e.g., Session Config fields, local skill overrides) are applied automatically. **Plugin-level and remote skill repairs are always MR-only, regardless of autonomy setting.** The default is `off` — no behavior change for repos that omit this block.
|
|
939
|
+
|
|
940
|
+
```yaml
|
|
941
|
+
skill-evolution:
|
|
942
|
+
autonomy: off # off | advisory | autonomous-gated — default off (opt-in)
|
|
943
|
+
evidence-floor: 0.5 # float 0.0..1.0 — min evidence before an autonomous-gated repair acts
|
|
944
|
+
judge: off # opt-in session-end LLM-judge for A's L3 (advisory only); default off
|
|
945
|
+
```
|
|
946
|
+
|
|
947
|
+
Read by: `skills/evolve/SKILL.md` (skill-health summary), `scripts/lib/config/skill-evolution.mjs` (parser). PRD: "Skill Self-Evolution Foundation" (#643; archived in the private Meta-Vault). Issue: #646.
|
|
948
|
+
|
|
949
|
+
## Dispatcher Autonomy
|
|
950
|
+
|
|
951
|
+
> **Parity-exempt section.** This H2 is intentionally placed outside the `## Session Config` block so that the `claude-md-drift-check` Check-6 parity scanner (which extracts only column-0 keys inside the `## Session Config` block) does not flag repos that have not yet adopted this feature. Adding `dispatcher-autonomy:` as a column-0 key *inside* `## Session Config` would cause every repo running `drift-check.mode: hard` that lacks the key to hard-fail at session-end — portfolio-wide breakage. Issue #679.
|
|
952
|
+
|
|
953
|
+
Opt-in configuration for the cross-repo free-repo dispatcher autonomy gate (Epic #673, Sub-issue #679). When `autonomy: advisory`, the `/dispatcher` flow surfaces ranked free-repo candidates for operator review — no automated dispatch. When `autonomy: autonomous-gated`, a deterministic confidence gate is checked first; only dispatches that clear the `confidence-floor` are routed automatically. The default is `off` — fail-closed, no behavior change for repos that omit this block. The effective `autonomy` resolves with host-local precedence `SO_DISPATCHER_AUTONOMY` env > `owner.yaml` `dispatcher.autonomy` > committed > `off` (#653 pattern).
|
|
954
|
+
|
|
955
|
+
```yaml
|
|
956
|
+
dispatcher-autonomy:
|
|
957
|
+
autonomy: off # off | advisory | autonomous-gated — default off (fail-closed)
|
|
958
|
+
confidence-floor: 0.5 # float 0.0..1.0
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
Read by: `scripts/lib/config/dispatcher-autonomy.mjs` (parser + resolver), `skills/dispatcher/SKILL.md` (cross-repo dispatch flow). PRD: "Cross-Repo Vault-Status / Autopilot Dispatcher" (#673; archived in the private Meta-Vault). Issue: #679.
|