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,419 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: autopilot
|
|
3
|
+
description: >
|
|
4
|
+
Use this skill when running an autonomous session-orchestration loop. Chains session-start → session-plan →
|
|
5
|
+
wave-executor → session-end for N iterations with all 10 kill-switches (SPIRAL, FAILED
|
|
6
|
+
wave, carryover > 50%, max-hours, max-sessions, resource-overload, token-budget,
|
|
7
|
+
stall-timeout, sub-threshold confidence, user-abort). Reads Mode-Selector
|
|
8
|
+
output (Phase B) to decide auto-execute vs. fallback. Writes one autopilot.jsonl
|
|
9
|
+
record per loop run. Phase C scaffold (issue #277); implementation lives in
|
|
10
|
+
scripts/lib/autopilot.mjs (Phase C-1 follow-up).
|
|
11
|
+
user-invocable: true
|
|
12
|
+
tags: [phase-c, autopilot, autonomous, loop]
|
|
13
|
+
model: sonnet
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Autopilot Skill
|
|
17
|
+
|
|
18
|
+
## Phase 0.5: Parallel-Aware Preamble
|
|
19
|
+
|
|
20
|
+
> Skip silently when `persistence: false` in Session Config.
|
|
21
|
+
|
|
22
|
+
Before any Phase 1 work, run the parallel-aware preamble per `skills/_shared/parallel-aware-preamble.md`. The preamble detects other active sessions in the worktree-family via `findPeers(repoRoot, { mySessionId })`, classifies the caller's mode via `classifyMode(callerMode)` against the exclusivity-matrix, and either:
|
|
23
|
+
|
|
24
|
+
- Returns `PASS_THROUGH` (no other session / `always-ok` mode) → continue to Phase 1
|
|
25
|
+
- Returns `EXCLUSIVE_BLOCKED` → fires Exclusive-Conflict AUQ from `skills/_shared/parallel-aware-auq.md`
|
|
26
|
+
- Returns `PROMOTION_OFFER` → fires Worktree-Promotion AUQ (via `enterWorktree()` from `scripts/lib/autopilot/worktree-pipeline.mjs` — see `parallel-aware-auq.md` outcome-handling)
|
|
27
|
+
|
|
28
|
+
On any non-PASS_THROUGH outcome that does not result in immediate exit, append a Deviation to STATE.md via `appendDeviationOnDisk(repoRoot, isoTimestamp, message)` from `scripts/lib/state-md.mjs`.
|
|
29
|
+
|
|
30
|
+
**Implementation reference:** `skills/_shared/parallel-aware-preamble.md § Implementation`.
|
|
31
|
+
**AUQ reference:** `skills/_shared/parallel-aware-auq.md`.
|
|
32
|
+
|
|
33
|
+
## Status
|
|
34
|
+
|
|
35
|
+
**Phase C-1.b complete (2026-04-25, issues #295 + #300).** Runtime at
|
|
36
|
+
`scripts/lib/autopilot/kill-switches.mjs:18-32` (the frozen `KILL_SWITCHES` enum is
|
|
37
|
+
SSOT) enforces all 10 kill-switches:
|
|
38
|
+
|
|
39
|
+
- **Pre-iteration (6, #295 + #355):** `max-sessions-reached`, `max-hours-exceeded`,
|
|
40
|
+
`resource-overload`, `low-confidence-fallback` (with iter-1-fallback /
|
|
41
|
+
iter-2+-exit asymmetry), `user-abort`, `token-budget-exceeded` (cumulative tokens
|
|
42
|
+
≥ `--max-tokens`).
|
|
43
|
+
- **Post-iteration (1, ADR-364 §3):** `stall-timeout` — no progress marker in
|
|
44
|
+
`autopilot.jsonl` within the threshold (default 600s; missing file → no kill).
|
|
45
|
+
- **Post-session (3, #300):** `spiral`, `failed-wave`, `carryover-too-high`.
|
|
46
|
+
Read schema-canonical fields off the `sessionRunner` return shape:
|
|
47
|
+
`agent_summary.{spiral, failed}` (numeric counts) and `effectiveness.{carryover,
|
|
48
|
+
planned_issues}`. Absent fields → no kill (forward-compatible: a `sessionRunner`
|
|
49
|
+
that does not yet emit those fields silently no-ops the post-session gates).
|
|
50
|
+
|
|
51
|
+
Atomic `autopilot.jsonl` writer (tmp+rename, schema_version 1) and silent-clamp
|
|
52
|
+
`parseFlags` shipped in C-1. `autopilot_run_id` is passed into `sessionRunner`
|
|
53
|
+
via `args.autopilotRunId`; production callers MUST persist it into the per-iteration
|
|
54
|
+
`sessions.jsonl` record (additive optional field, schema_version 1 compatible).
|
|
55
|
+
See `skills/wave-executor/SKILL.md § Return Shape Contract` and
|
|
56
|
+
`skills/session-end/SKILL.md § Phase 3.7`.
|
|
57
|
+
|
|
58
|
+
## Purpose
|
|
59
|
+
|
|
60
|
+
Autopilot collapses the per-session attention cost when Mode-Selector is confident enough
|
|
61
|
+
to make routine decisions autonomously. A productive day commonly ships 3–7 sessions; each
|
|
62
|
+
manual session-start costs the user 10–60 seconds of context-switch attention. When the
|
|
63
|
+
session is genuinely routine (mechanical refactor, post-merge housekeeping, repeated
|
|
64
|
+
follow-ups from a planned epic), that attention cost is pure overhead.
|
|
65
|
+
|
|
66
|
+
`/autopilot` reads the Mode-Selector recommendation, executes the recommended session if
|
|
67
|
+
confidence clears the threshold, then loops — checking kill-switches between iterations.
|
|
68
|
+
The user invokes the loop once and walks away; autopilot stops itself when work runs out
|
|
69
|
+
or quality degrades.
|
|
70
|
+
|
|
71
|
+
This is **opt-in by design**: autopilot never starts itself. The user must run
|
|
72
|
+
`/autopilot` explicitly. Configuration thresholds (`--max-sessions`, `--max-hours`,
|
|
73
|
+
`--confidence-threshold`) are CLI flags, not Session Config defaults — the user signals
|
|
74
|
+
intent for THIS run, not a standing policy.
|
|
75
|
+
|
|
76
|
+
## Command Surface
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
/autopilot [--max-sessions=N] [--max-hours=H] [--confidence-threshold=0.X] [--dry-run]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
| Flag | Default | Bounds | Meaning |
|
|
83
|
+
|------|---------|--------|---------|
|
|
84
|
+
| `--max-sessions` | `5` | 1..50 | Iteration cap (graceful exit when reached) |
|
|
85
|
+
| `--max-hours` | `4.0` | 0.5..24.0 | Wall-clock budget for entire loop |
|
|
86
|
+
| `--confidence-threshold` | `0.85` | 0.0..1.0 | Minimum `selectMode` confidence for auto-execute |
|
|
87
|
+
| `--dry-run` | `false` | — | Print planned iterations without executing |
|
|
88
|
+
|
|
89
|
+
Out-of-range values silently clamp to bounds. `--dry-run` exits after printing — never
|
|
90
|
+
invokes session lifecycle.
|
|
91
|
+
|
|
92
|
+
## Loop Semantics
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
state := { iterations_completed: 0, started_at: now(), kill_switch: null, sessions: [] }
|
|
96
|
+
|
|
97
|
+
WHILE state.iterations_completed < max-sessions:
|
|
98
|
+
# Pre-iteration kill-switches (6)
|
|
99
|
+
IF aborted: kill_switch := 'user-abort'; break
|
|
100
|
+
IF state.iterations_completed >= max-sessions:
|
|
101
|
+
kill_switch := 'max-sessions-reached'; break
|
|
102
|
+
IF (now() - state.started_at) > max-hours:
|
|
103
|
+
kill_switch := 'max-hours-exceeded'; break
|
|
104
|
+
IF cumulative_tokens_used >= max-tokens:
|
|
105
|
+
kill_switch := 'token-budget-exceeded'; break
|
|
106
|
+
IF resource_verdict() == 'critical' AND peer_count() > autopilot-peer-abort:
|
|
107
|
+
kill_switch := 'resource-overload'; break
|
|
108
|
+
|
|
109
|
+
recommendation := mode-selector.selectMode(<live signals from session-start Phase 7.5>)
|
|
110
|
+
|
|
111
|
+
IF recommendation.confidence < confidence-threshold:
|
|
112
|
+
IF state.iterations_completed == 0:
|
|
113
|
+
fallback_to_manual() # iteration 1: hand off cleanly to manual /session flow
|
|
114
|
+
ELSE:
|
|
115
|
+
kill_switch := 'low-confidence-fallback' # iteration 2+: exit, let user decide
|
|
116
|
+
break
|
|
117
|
+
|
|
118
|
+
cap := resource_adaptive_cap()
|
|
119
|
+
session_result := run_session(mode=recommendation.mode, agents_per_wave_cap=cap)
|
|
120
|
+
state.sessions.append(session_result.session_id)
|
|
121
|
+
|
|
122
|
+
# Post-iteration kill-switch (1)
|
|
123
|
+
IF stalled(autopilot.jsonl) >= stall-timeout: kill_switch := 'stall-timeout'; break
|
|
124
|
+
# Post-session kill-switches (3)
|
|
125
|
+
IF session_result.spiral_detected: kill_switch := 'spiral'; break
|
|
126
|
+
IF session_result.failed_waves > 0: kill_switch := 'failed-wave'; break
|
|
127
|
+
IF session_result.carryover_ratio > 0.50: kill_switch := 'carryover-too-high'; break
|
|
128
|
+
|
|
129
|
+
state.iterations_completed += 1
|
|
130
|
+
|
|
131
|
+
write_autopilot_jsonl(state, kill_switch)
|
|
132
|
+
print_summary(state, kill_switch)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Atomicity rule:** iteration boundaries are atomic. A session must complete (`/close`
|
|
136
|
+
including the post-session writes) before the next iteration starts. Autopilot does NOT
|
|
137
|
+
abort sessions mid-flight; kill-switches are checked AFTER each session completes.
|
|
138
|
+
|
|
139
|
+
## Kill-Switches
|
|
140
|
+
|
|
141
|
+
All 10 kill-switches, grouped by check phase (mirrors the `KILL_SWITCHES` enum in
|
|
142
|
+
`scripts/lib/autopilot/kill-switches.mjs:18-32`):
|
|
143
|
+
|
|
144
|
+
| Kill-switch | Phase | Trigger | Recovery hint |
|
|
145
|
+
|-------------|-------|---------|---------------|
|
|
146
|
+
| `max-sessions-reached` | pre-iteration | `iterations_completed >= --max-sessions` | Graceful — not an error. |
|
|
147
|
+
| `max-hours-exceeded` | pre-iteration | Wall-clock exceeds `--max-hours` | Re-run with higher `--max-hours` or address slow waves. |
|
|
148
|
+
| `resource-overload` | pre-iteration | `verdict==critical AND peers > autopilot-peer-abort` | Wait for peer sessions to complete or close them. |
|
|
149
|
+
| `low-confidence-fallback` | pre-iteration | `confidence < threshold` (iteration 2+) | Re-run with lower `--confidence-threshold` or run next session manually. |
|
|
150
|
+
| `user-abort` | pre-iteration | Ctrl+C / Esc (AbortSignal) | Re-run when ready. |
|
|
151
|
+
| `token-budget-exceeded` | pre-iteration | `cumulative_tokens >= --max-tokens` (#355) | Re-run with a higher `--max-tokens` budget or split the work. |
|
|
152
|
+
| `stall-timeout` | post-iteration | No progress marker in `autopilot.jsonl` within threshold (ADR-364 §3; default 600s) | Inspect the stalled iteration; missing telemetry file is NOT a kill. |
|
|
153
|
+
| `spiral` | post-session | wave-executor spiral detection fires (`agent_summary.spiral > 0`) | Triage the spiraling wave manually; autopilot will not retry. |
|
|
154
|
+
| `failed-wave` | post-session | Any wave reports `agent_summary.failed > 0` | Investigate failure mode (test contract drift, env issue). Re-run after fix. |
|
|
155
|
+
| `carryover-too-high` | post-session | `carryover/planned > 0.50` | Last session under-delivered. Reduce scope or split issues before resuming. |
|
|
156
|
+
|
|
157
|
+
## Resource-Adaptive Concurrency
|
|
158
|
+
|
|
159
|
+
Autopilot does NOT hard-block on peer Claude processes. It adapts `agents-per-wave` cap
|
|
160
|
+
per iteration based on the most-restrictive resource signal.
|
|
161
|
+
|
|
162
|
+
| Tier | RAM free | Swap | Peers | macOS memory_pressure | cap |
|
|
163
|
+
|------|----------|------|-------|------------------------|-----|
|
|
164
|
+
| green | ≥ 6 GB | < 1 GB | ≤ 2 | ≥ 30% free | Session Config default |
|
|
165
|
+
| warn | 4–6 GB | 1–2 GB | 3–4 | 15–30% free | 4 |
|
|
166
|
+
| degraded | 2–4 GB | 2–3 GB | 5–6 | 5–15% free | 2 |
|
|
167
|
+
| critical | < 2 GB | > 3 GB | > 6 | < 5% free | 0 (coord-direct) |
|
|
168
|
+
|
|
169
|
+
**Most-restrictive-signal-wins:** `[ram=8GB, swap=0, peers=7]` → critical (peer rule wins).
|
|
170
|
+
|
|
171
|
+
Defaults are conservative initial estimates. Phase C-3 follow-up calibrates the swap and
|
|
172
|
+
memory_pressure thresholds against real autopilot-run effectiveness data.
|
|
173
|
+
|
|
174
|
+
## Production Wiring
|
|
175
|
+
|
|
176
|
+
Phase C-1 ships `runLoop` as a pure controller. Phase C-1.c ships `buildLiveSignals` as
|
|
177
|
+
the canonical signals-assembly helper. This section documents the **in-process driver
|
|
178
|
+
protocol** (Option B from #301): how Claude — running as the coordinator in a chat
|
|
179
|
+
session — drives `runLoop` between manual `/session` invocations. The headless wrapper
|
|
180
|
+
(Option A, `scripts/autopilot.mjs` CLI spawning `claude -p`) is reserved for Phase C-5.
|
|
181
|
+
|
|
182
|
+
### Dependency-Injection Contract
|
|
183
|
+
|
|
184
|
+
`runLoop` requires four injected dependencies:
|
|
185
|
+
|
|
186
|
+
| Field | Signature | Source |
|
|
187
|
+
|---|---|---|
|
|
188
|
+
| `modeSelector` | `() => Promise<{mode, confidence, rationale?}>` | wraps `selectMode(await buildLiveSignals())` |
|
|
189
|
+
| `sessionRunner` | `({mode, autopilotRunId}) => Promise<{session_id, agent_summary?, effectiveness?}>` | wraps a `/session <mode>` invocation; reads `sessions.jsonl` tail to construct return value |
|
|
190
|
+
| `resourceEvaluator` | `() => {verdict}` | wraps `evaluate(await probe(), thresholds)` from `resource-probe.mjs` |
|
|
191
|
+
| `peerCounter` | `() => number` | reads `claude_processes_count` from a fresh `probe()` snapshot |
|
|
192
|
+
|
|
193
|
+
`abortSignal` is optional (Ctrl+C / Esc → `user-abort` kill-switch).
|
|
194
|
+
|
|
195
|
+
### In-Process Driver Skeleton
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
import { runLoop, parseFlags } from '$PLUGIN_ROOT/scripts/lib/autopilot.mjs';
|
|
199
|
+
import { buildLiveSignals } from '$PLUGIN_ROOT/scripts/lib/build-live-signals.mjs';
|
|
200
|
+
import { selectMode } from '$PLUGIN_ROOT/scripts/lib/mode-selector.mjs';
|
|
201
|
+
import { probe, evaluate } from '$PLUGIN_ROOT/scripts/lib/resource-probe.mjs';
|
|
202
|
+
|
|
203
|
+
const flags = parseFlags(process.argv.slice(2));
|
|
204
|
+
|
|
205
|
+
const modeSelector = async () => {
|
|
206
|
+
// Each iteration rebuilds signals from current disk state. STATE.md will be
|
|
207
|
+
// freshly idle-reset by the previous /close, sessions.jsonl will have the
|
|
208
|
+
// new tail entry, etc. This is the contract: live signals every iteration.
|
|
209
|
+
const signals = await buildLiveSignals({ backlogLimit: 50 });
|
|
210
|
+
return selectMode(signals);
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
const resourceEvaluator = () => {
|
|
214
|
+
const snapshot = probeSync(); // or cached snapshot if probe is async
|
|
215
|
+
return evaluate(snapshot, thresholds);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
const peerCounter = () => {
|
|
219
|
+
// Synchronous-friendly count from a recent probe snapshot.
|
|
220
|
+
return latestSnapshot.claude_processes_count ?? 0;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
const sessionRunner = async ({ mode, autopilotRunId }) => {
|
|
224
|
+
// The coordinator (Claude) invokes /session <mode> manually here. After the
|
|
225
|
+
// session completes (/close runs, sessions.jsonl appended), this function
|
|
226
|
+
// reads the tail entry and projects it into the runLoop return-shape.
|
|
227
|
+
const tail = readSessionsJsonlTail(1); // last line, normalized
|
|
228
|
+
return {
|
|
229
|
+
session_id: tail.session_id,
|
|
230
|
+
agent_summary: tail.agent_summary, // {complete, partial, failed, spiral}
|
|
231
|
+
effectiveness: tail.effectiveness, // {planned_issues, carryover, completion_rate, ...}
|
|
232
|
+
};
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const result = await runLoop({
|
|
236
|
+
...flags,
|
|
237
|
+
modeSelector,
|
|
238
|
+
sessionRunner,
|
|
239
|
+
resourceEvaluator,
|
|
240
|
+
peerCounter,
|
|
241
|
+
});
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Why In-Process First
|
|
245
|
+
|
|
246
|
+
The in-process driver has Claude (the coordinator) call `/session <mode>` between
|
|
247
|
+
`runLoop` iterations, with `runLoop` orchestrating the kill-switches. Trade-offs:
|
|
248
|
+
|
|
249
|
+
- **Pro:** zero new infra. Reuses canonical kill-switch logic. Validates `buildLiveSignals`
|
|
250
|
+
against real Phase 7.5 swap before headless complexity. Each iteration carries
|
|
251
|
+
inter-session memory through STATE.md / sessions.jsonl / learnings.
|
|
252
|
+
- **Con:** not truly autonomous — Claude must stay in the chat. Doesn't deliver
|
|
253
|
+
walk-away UX. That's Phase C-5's job.
|
|
254
|
+
|
|
255
|
+
### `autopilot_run_id` Propagation
|
|
256
|
+
|
|
257
|
+
When `runLoop` invokes `sessionRunner({mode, autopilotRunId})`, the per-iteration
|
|
258
|
+
`sessions.jsonl` record MUST carry `autopilot_run_id: <id>`. session-end Phase 3.7
|
|
259
|
+
writes this field. Manual sessions write `null` or omit it — readers treat both
|
|
260
|
+
identically per the v1 schema additive convention. See
|
|
261
|
+
`skills/session-end/session-metrics-write.md`.
|
|
262
|
+
|
|
263
|
+
### Acceptance Signals
|
|
264
|
+
|
|
265
|
+
A live `/autopilot` invocation against this wiring produces a non-zero `confidence`
|
|
266
|
+
recommendation when at least one signal source is populated (state-md rec fields,
|
|
267
|
+
sessions.jsonl tail, learnings, or backlog). Confidence at 0.0 with all four sources
|
|
268
|
+
populated is a Mode-Selector heuristic bug (file as `[Mode-Selector v1.x quirk]` issue),
|
|
269
|
+
not an autopilot bug.
|
|
270
|
+
|
|
271
|
+
## Pre-Loop Verdict Gate (dispatcher → autopilot handoff — #682)
|
|
272
|
+
|
|
273
|
+
When the cross-repo dispatcher (`skills/dispatcher/SKILL.md`) routes into an autopilot
|
|
274
|
+
launch, a **pre-loop suitability verdict** decides whether the launch may proceed WITHOUT
|
|
275
|
+
per-selection operator confirmation. This is distinct from — and runs BEFORE — the loop's
|
|
276
|
+
10 kill-switches:
|
|
277
|
+
|
|
278
|
+
- **The verdict gate is a PRE-LAUNCH decision.** It is computed ONCE, at the
|
|
279
|
+
dispatcher → `runLoop` handoff, before the first iteration starts. It answers "may I
|
|
280
|
+
launch this repo autonomously, or must I ask first?" — NOT "should I stop the running
|
|
281
|
+
loop?"
|
|
282
|
+
- **The 10 kill-switches are PER-ITERATION and reused UNCHANGED.** Once `runLoop` starts,
|
|
283
|
+
the frozen `KILL_SWITCHES` enum (`scripts/lib/autopilot/kill-switches.mjs:18-32`)
|
|
284
|
+
governs when the loop stops, exactly as documented above. The verdict gate adds NO new
|
|
285
|
+
kill-switch, modifies NONE of the existing 10, and does not re-implement any of them.
|
|
286
|
+
- **The gate engine is `computeSuitabilityVerdict(deps)`** from
|
|
287
|
+
`scripts/lib/autonomy/suitability.mjs` — a pure four-gate AND (confidence ≥ floor;
|
|
288
|
+
kill-switch fired-rate < 0.2 over the recent runs, omitted below 5 runs; CI ≠ red;
|
|
289
|
+
resource ≠ critical). The dispatcher gathers every signal and passes it in (DI); the
|
|
290
|
+
engine reads no files.
|
|
291
|
+
- **Kill-switch history feeds G2 via `readRecentAutopilotRuns`** from
|
|
292
|
+
`scripts/lib/autopilot/recent-runs.mjs`, which reads THIS repo's
|
|
293
|
+
`.orchestrator/metrics/autopilot.jsonl` (newest-last, never throws). The verdict's G2
|
|
294
|
+
gate counts those records and reads each one's persisted `kill_switch` field — it never
|
|
295
|
+
re-enumerates or re-derives the switches; it reads the history the loop already wrote.
|
|
296
|
+
- **FAIL-CLOSED launch wiring:** the dispatcher launches without confirmation ONLY when
|
|
297
|
+
`autonomy === 'autonomous-gated'` AND `verdict.suitable === true`. Every other case
|
|
298
|
+
(any non-`autonomous-gated` dial, a CI-red / resource-critical / low-confidence verdict)
|
|
299
|
+
informs the operator and asks before launch. `resolveDispatcherAutonomy` defaults to
|
|
300
|
+
`'off'` when unconfigured, so an absent config forces inform + ask. See
|
|
301
|
+
`skills/dispatcher/SKILL.md § Phase 1.5` for the full sourcing table and invariant.
|
|
302
|
+
- **`null` signals are honest, not failures (NICE-b).** On a CI-fetch or resource-probe
|
|
303
|
+
failure the dispatcher passes `ci = null` / `resourceVerdict = null` (not a synthesized
|
|
304
|
+
`{ status: undefined }` or a fabricated `'green'`). Each `null` ⇒ the gate passes + warns
|
|
305
|
+
— it surfaces a warning the operator sees, it does not block on its own.
|
|
306
|
+
- **forcedFail is reachable end-to-end (NICE-c).** When CI is red OR resource is critical,
|
|
307
|
+
`verdict.suitable === false` REGARDLESS of confidence (the engine words the rationale
|
|
308
|
+
`FORCED: CI red` / `FORCED: resource critical`), so even under `autonomous-gated` the launch
|
|
309
|
+
falls to inform + ask. Reachability depends on the dispatcher wiring the live signals
|
|
310
|
+
through (CI wrapped as `{ status }`, the real resource verdict string) rather than masking
|
|
311
|
+
them — see `skills/dispatcher/SKILL.md § Phase 1.5`.
|
|
312
|
+
|
|
313
|
+
This gate does NOT change the loop. Autopilot remains opt-in, and the kill-switch contract
|
|
314
|
+
is unchanged — the verdict gate only governs HOW the loop is entered (auto vs. confirm).
|
|
315
|
+
|
|
316
|
+
## Telemetry
|
|
317
|
+
|
|
318
|
+
One record per `/autopilot` invocation, written to `.orchestrator/metrics/autopilot.jsonl`
|
|
319
|
+
via atomic tmp + rename. See "Autopilot Loop" (#277; archived in the private Meta-Vault) § Output for the
|
|
320
|
+
full schema.
|
|
321
|
+
|
|
322
|
+
Each iteration's `sessions.jsonl` entry gets an additional optional field
|
|
323
|
+
`autopilot_run_id` (string or null) so retros can join across the two files without
|
|
324
|
+
schema changes.
|
|
325
|
+
|
|
326
|
+
Manual sessions write `autopilot_run_id: null` (or omit the field — both treated
|
|
327
|
+
identically by readers per the v1 schema additive convention).
|
|
328
|
+
|
|
329
|
+
## Integration with Other Skills
|
|
330
|
+
|
|
331
|
+
- **`mode-selector.mjs::selectMode`** — sole source of mode + confidence per iteration.
|
|
332
|
+
Autopilot does not implement its own mode logic; v1.x quirks affect autopilot exactly
|
|
333
|
+
as they affect manual session-start.
|
|
334
|
+
- **`resource-probe.mjs::probe + evaluate`** — extended in Phase C-2 with swap and
|
|
335
|
+
memory_pressure signals. Existing consumers (manual session-start, wave-executor)
|
|
336
|
+
benefit from the new signals automatically.
|
|
337
|
+
- **`session-start` / `session-plan` / `wave-executor` / `session-end`** — invoked
|
|
338
|
+
unmodified. Autopilot is a controller around the existing session lifecycle, not a
|
|
339
|
+
replacement.
|
|
340
|
+
- **`session-registry.mjs`** — peer-count signal source. Autopilot reads but does not
|
|
341
|
+
write to the registry beyond the standard hook.
|
|
342
|
+
- **`mode-selector-accuracy`** — autopilot iterations write accuracy learnings exactly
|
|
343
|
+
like manual sessions (Phase B-4 contract). The `chosen` field reflects autopilot's
|
|
344
|
+
auto-execute decision, which equals `recommendation.mode` when confidence ≥ threshold.
|
|
345
|
+
|
|
346
|
+
## Critical Rules
|
|
347
|
+
|
|
348
|
+
- **Never auto-merge or auto-push beyond `/close` defaults.** `/close` already pushes to
|
|
349
|
+
origin; autopilot does not add PR creation, merge, or force-push behavior.
|
|
350
|
+
- **Iteration boundaries are atomic.** Never abort a running session to start a new one.
|
|
351
|
+
- **Kill-switches checked AFTER each session.** Even if a kill-switch will fire after
|
|
352
|
+
iteration N, iteration N completes cleanly first.
|
|
353
|
+
- **Iteration 1 sub-threshold falls back to manual; iteration 2+ exits with kill-switch.**
|
|
354
|
+
This asymmetry is intentional — see PRD Q8.
|
|
355
|
+
- **`autopilot.jsonl` is the SOLE writer's responsibility of `autopilot.mjs`.** Other
|
|
356
|
+
skills must not append to or rewrite this file.
|
|
357
|
+
- **Mode-Selector contract is read-only here.** Autopilot does not modify `selectMode`
|
|
358
|
+
output, does not re-rank alternatives, does not patch confidence values.
|
|
359
|
+
|
|
360
|
+
## Anti-Patterns
|
|
361
|
+
|
|
362
|
+
- Do not invoke `/autopilot` from inside a running session. The skill is a top-level
|
|
363
|
+
command; nested invocation is undefined behavior.
|
|
364
|
+
- Do not modify `autopilot.jsonl` schema additively without bumping `schema_version`.
|
|
365
|
+
Readers MUST treat unknown fields as a forward-compat signal, not as corruption.
|
|
366
|
+
- Do not bypass `selectMode` to force-run a specific mode. If you want to run a specific
|
|
367
|
+
mode, use `/session [mode]` manually — that is autopilot's fallback path.
|
|
368
|
+
- Do not lower `--confidence-threshold` below 0.5 in production. The Mode-Selector
|
|
369
|
+
fallback table treats `< 0.5` as suggestion-only; autopilot at that threshold becomes
|
|
370
|
+
a random-walk over modes.
|
|
371
|
+
- Do not implement kill-switch logic in this skill. Kill-switch enforcement is in
|
|
372
|
+
`scripts/lib/autopilot.mjs`. The skill documents the contract; the runtime enforces it.
|
|
373
|
+
|
|
374
|
+
## Configuration
|
|
375
|
+
|
|
376
|
+
The `autopilot` block in Session Config (`CLAUDE.md` / `AGENTS.md`) accepts the following fields. All fields are optional; omitting a field applies the documented default.
|
|
377
|
+
|
|
378
|
+
```yaml
|
|
379
|
+
autopilot:
|
|
380
|
+
bg-isolation: worktree # worktree | none (default: worktree) — see #431
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### bg-isolation
|
|
384
|
+
|
|
385
|
+
**Type:** `worktree` | `none` — **Default:** `worktree`
|
|
386
|
+
|
|
387
|
+
Controls whether `autopilot --multi-story` creates a per-story git worktree before spawning sub-sessions.
|
|
388
|
+
|
|
389
|
+
`worktree` (default): Each story pipeline receives its own isolated git worktree via `EnterWorktree`. Parallel writes are safe because every agent edits a private working copy. Cost: disk space proportional to the number of concurrent stories plus the latency of worktree creation at story-start.
|
|
390
|
+
|
|
391
|
+
`none` (opt-in): No worktrees are created. Sub-sessions spawn directly in the main working tree. Useful for monorepos where worktree creation is impractical due to large `node_modules`, sparse-checkout setups, or build caches that must be shared. **Requires file-scope discipline:** when `max-stories > 1`, every story must edit a disjoint set of files. If two stories touch the same file simultaneously, edits will collide silently. To enforce acknowledgement of this discipline, `autopilot-multi` requires `--deconflict-paths=<glob>` whenever `bg-isolation: none` AND `max-stories > 1`; omitting the flag is a hard error (exit 1). See `.claude/rules/parallel-sessions.md` PSA-001/002/003.
|
|
392
|
+
|
|
393
|
+
**Operator-awareness note:** CC 2.1.133 silently flipped `worktree.baseRef` default from `head` to `origin/<default>`, breaking users who relied on unpushed commits being included in their worktree base. The same class of upstream change can affect `bg-isolation` semantics in a future CC release. Treat CC changelog entries related to worktree or `--bg` session behaviour as requiring a re-read of this section before upgrading.
|
|
394
|
+
|
|
395
|
+
## References
|
|
396
|
+
|
|
397
|
+
- PRD: "Autopilot Loop" (#277; archived in the private Meta-Vault)
|
|
398
|
+
- Implementation (Phase C-1 + C-1.b): `scripts/lib/autopilot.mjs` — exports `runLoop`, `parseFlags`, `writeAutopilotJsonl`, `KILL_SWITCHES`, `FLAG_BOUNDS`, `SCHEMA_VERSION`, `DEFAULT_PEER_ABORT_THRESHOLD`, `DEFAULT_JSONL_PATH`, `DEFAULT_CARRYOVER_THRESHOLD`
|
|
399
|
+
- Tests (Phase C-1 + C-1.b): `tests/lib/autopilot.test.mjs`
|
|
400
|
+
- Command file: `commands/autopilot.md`
|
|
401
|
+
- Mode-Selector contract: `skills/mode-selector/SKILL.md`
|
|
402
|
+
- Resource probe: `scripts/lib/resource-probe.mjs`
|
|
403
|
+
- Session registry: `scripts/lib/session-registry.mjs`
|
|
404
|
+
- Wave-executor return shape: `skills/wave-executor/SKILL.md § Return Shape Contract`
|
|
405
|
+
- Sessions.jsonl writer: `skills/session-end/session-metrics-write.md`
|
|
406
|
+
- Pre-loop verdict gate (#682): `scripts/lib/autonomy/suitability.mjs` (`computeSuitabilityVerdict`) · `scripts/lib/config/dispatcher-autonomy.mjs` (`resolveDispatcherAutonomy`) · `scripts/lib/autopilot/recent-runs.mjs` (`readRecentAutopilotRuns`) · `skills/dispatcher/SKILL.md § Phase 1.5`
|
|
407
|
+
- Epic: [#271 v3.2 Autopilot — Autonomous Session Orchestration](https://github.com/Kanevry/session-orchestrator/issues/271)
|
|
408
|
+
- Issues: [#277 Phase C scaffold](https://github.com/Kanevry/session-orchestrator/issues/277), [#295 Phase C-1 runtime](https://github.com/Kanevry/session-orchestrator/issues/295), [#300 Phase C-1.b follow-up](https://github.com/Kanevry/session-orchestrator/issues/300)
|
|
409
|
+
- Phase A PRD: "STATE.md Recommendations Contract" (#271; archived in the private Meta-Vault)
|
|
410
|
+
- Phase B PRD: "Mode Selector" (#276; archived in the private Meta-Vault)
|
|
411
|
+
|
|
412
|
+
## Open Questions (Phase C-1 to resolve)
|
|
413
|
+
|
|
414
|
+
- `--confidence-threshold=auto` — let autopilot self-tune from accumulated
|
|
415
|
+
`mode-selector-accuracy` learnings? Requires ≥ 20 accuracy learnings before useful.
|
|
416
|
+
- STATE.md `autopilot-active: true` field — should other Claude sessions detect via the
|
|
417
|
+
session-registry and refuse to start during an autopilot run? Dogfooding will inform.
|
|
418
|
+
- `failed-wave` granularity — distinguish "agent failed but was retried successfully"
|
|
419
|
+
from "wave ended with un-recovered failures"? Requires wave-executor schema audit.
|