session-orchestrator 5.12.0 → 5.13.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 +2 -2
- package/.claude-plugin/plugin.json +4 -1
- package/.codex-plugin/agents/explorer.toml +1 -1
- package/.codex-plugin/agents/session-reviewer.toml +2 -2
- package/.codex-plugin/agents/wave-worker.toml +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/.orchestrator/policy/blocked-commands.json +8 -0
- package/.orchestrator/policy/public-export.json +30 -0
- package/CHANGELOG.md +162 -4
- package/README.md +126 -127
- package/agents/analyst.md +7 -2
- package/agents/architect-reviewer.md +7 -2
- package/agents/code-implementer.md +4 -2
- package/agents/db-specialist.md +9 -2
- package/agents/dialectic-deriver.md +9 -3
- package/agents/docs-writer.md +7 -2
- package/agents/eval-judge.md +7 -1
- package/agents/qa-strategist.md +7 -2
- package/agents/security-reviewer.md +9 -2
- package/agents/session-reviewer.md +18 -2
- package/agents/skill-applied-judge.md +7 -1
- package/agents/test-writer.md +9 -2
- package/agents/ui-developer.md +9 -2
- package/agents/ux-evaluator.md +6 -1
- package/commands/session.md +1 -1
- package/commands/templates-ack.md +89 -18
- package/docs/agent-authoring.md +30 -11
- package/docs/ci-setup.md +38 -2
- package/docs/codex-setup.md +33 -9
- package/docs/components.md +13 -2
- package/docs/cursor-setup.md +3 -3
- package/docs/events-schema.md +5 -4
- package/docs/evidence-candidates.md +63 -0
- package/docs/fleet-checkin-audit.md +7 -4
- package/docs/github-mirror-protection.md +150 -3
- package/docs/install.md +90 -17
- package/docs/instruction-delivery.md +1 -1
- package/docs/migration-v4.md +2 -2
- package/docs/mods.md +118 -0
- package/docs/owner-config-schema.md +1 -0
- package/docs/plugin-architecture-v3.md +1 -1
- package/docs/pm-skills-marketplace.md +4 -3
- package/docs/rule-authoring.md +24 -13
- package/docs/scope-collision-guard.md +2 -1
- package/docs/session-config-reference.md +49 -15
- package/docs/session-config-template.md +30 -22
- package/docs/sessions-ledger-repair.md +137 -0
- package/docs/vault-docs-architecture.md +1 -1
- package/hooks/_lib/hook-import-set.json +406 -73
- package/hooks/_lib/hook-root.mjs +301 -0
- package/hooks/_lib/lock-bootstrap.mjs +434 -4
- package/hooks/_lib/orchestrator-ignore.mjs +3 -0
- package/hooks/_lib/subagent-transcript.mjs +2 -2
- package/hooks/_lib/vcs-create-matcher.mjs +13 -17
- package/hooks/cwd-change-restore.mjs +5 -1
- package/hooks/enforce-commands.mjs +4 -3
- package/hooks/enforce-scope.mjs +11 -1
- package/hooks/hooks-codex.json +48 -2
- package/hooks/hooks.json +31 -31
- package/hooks/on-session-end.mjs +38 -15
- package/hooks/on-session-start.mjs +139 -49
- package/hooks/on-stop.mjs +11 -6
- package/hooks/post-bash-issue-budget-refund.mjs +6 -1
- package/hooks/post-bash-write-verify.mjs +8 -4
- package/hooks/post-edit-validate.mjs +45 -52
- package/hooks/post-subagent-discovery-validator.mjs +2 -2
- package/hooks/post-tool-batch-wave-signal.mjs +8 -4
- package/hooks/post-tool-failure-corrective-context.mjs +5 -1
- package/hooks/pre-bash-destructive-guard.mjs +220 -8
- package/hooks/pre-bash-issue-budget.mjs +6 -1
- package/hooks/pre-bash-sessions-ledger-guard.mjs +691 -123
- package/hooks/pre-bash-staging-fence.mjs +258 -14
- package/hooks/pre-bash-templates-first.mjs +28 -27
- package/hooks/run-node.sh +1 -1
- package/hooks/skill-invocation-telemetry.mjs +15 -8
- package/hooks/subagent-telemetry.mjs +77 -14
- package/hooks/wave-scope-commit-guard.mjs +143 -14
- package/mods/so-hud/.claude-plugin/plugin.json +11 -0
- package/mods/so-hud/README.md +57 -0
- package/mods/so-hud/hooks/beacon-io.mjs +101 -0
- package/mods/so-hud/hooks/heredoc-scan.ts +394 -0
- package/mods/so-hud/hooks/hooks.json +1 -0
- package/mods/so-hud/hooks/logic.ts +182 -0
- package/mods/so-hud/hooks/register.tsx +670 -0
- package/mods/so-hud/hooks/rules.ts +2998 -0
- package/mods/so-hud/tsconfig.json +8 -0
- package/mods/so-hud/types/index.d.ts +36 -0
- package/package.json +4 -2
- package/rules/_index.md +1 -1
- package/rules/always-on/ask-via-tool.md +1 -1
- package/rules/always-on/loop-and-monitor.md +17 -194
- package/rules/always-on/parallel-sessions.md +3 -1
- package/rules/opt-in-stack/backend-data.md +1 -1
- package/rules/opt-in-stack/backend.md +1 -1
- package/rules/opt-in-stack/security-web.md +5 -1
- package/scripts/agent-usage-census.mjs +79 -0
- package/scripts/apply-session-learnings.mjs +34 -6
- package/scripts/archive-closed-prds.mjs +21 -5
- package/scripts/autopilot.mjs +11 -5
- package/scripts/backfill-abandoned-sessions.mjs +13 -3
- package/scripts/backfill-evidence-digest.mjs +2 -1
- package/scripts/backfill-learnings-from-vault.mjs +61 -6
- package/scripts/backfill-sessions.mjs +16 -2
- package/scripts/check-package-manager.mjs +26 -8
- package/scripts/check-sessions-integrity.mjs +4 -1
- package/scripts/ci/assert-vitest-green.mjs +3 -0
- package/scripts/ci/windows-smoke.mjs +201 -0
- package/scripts/close-precheck.mjs +55 -0
- package/scripts/dialectic-deriver.mjs +20 -12
- package/scripts/emit-event.mjs +2 -2
- package/scripts/emit-session.mjs +239 -20
- package/scripts/eval-session.mjs +17 -3
- package/scripts/export-hw-learnings.mjs +29 -2
- package/scripts/fleet-checkin-audit.mjs +8 -4
- package/scripts/fleet-checkin.mjs +39 -27
- package/scripts/gc-stale-worktrees.mjs +6 -1
- package/scripts/github-export.mjs +128 -0
- package/scripts/github-protection-audit.mjs +3 -1
- package/scripts/handover-queue-check.mjs +209 -0
- package/scripts/harness-audit.mjs +6 -4
- package/scripts/lib/agent-frontmatter.mjs +57 -10
- package/scripts/lib/agent-status.mjs +125 -7
- package/scripts/lib/agent-usage-census.mjs +394 -0
- package/scripts/lib/auto-dialectic.mjs +17 -10
- package/scripts/lib/auto-dream.mjs +22 -14
- package/scripts/lib/autopilot/loop.mjs +3 -1
- package/scripts/lib/autopilot/recent-runs.mjs +4 -2
- package/scripts/lib/autopilot/stall-sampler.mjs +2 -1
- package/scripts/lib/autopilot/telemetry.mjs +5 -1
- package/scripts/lib/autopilot/worktree-pipeline.mjs +5 -5
- package/scripts/lib/baseline-archetypes.mjs +10 -2
- package/scripts/lib/blocked-commands-policy.mjs +4 -3
- package/scripts/lib/build-live-signals.mjs +13 -9
- package/scripts/lib/ci-status-banner.mjs +329 -24
- package/scripts/lib/codex/plugin-contract.mjs +8 -0
- package/scripts/lib/cold-start-detector.mjs +5 -2
- package/scripts/lib/command-blocker.mjs +603 -43
- package/scripts/lib/common.mjs +3 -2
- package/scripts/lib/config/cross-repo.mjs +74 -7
- package/scripts/lib/config/host-paths.mjs +6 -2
- package/scripts/lib/config/section-extractor.mjs +65 -11
- package/scripts/lib/config/template-keys.mjs +153 -0
- package/scripts/lib/config/vault-integration.mjs +1 -0
- package/scripts/lib/config.mjs +2 -2
- package/scripts/lib/coordinator-snapshot.mjs +1 -1
- package/scripts/lib/discovery/triage-state.mjs +2 -1
- package/scripts/lib/dispatcher/rank.mjs +5 -7
- package/scripts/lib/ecosystem-health.mjs +2 -2
- package/scripts/lib/eval/engine.mjs +3 -2
- package/scripts/lib/eval/session-resolve.mjs +6 -2
- package/scripts/lib/eval/sink.mjs +4 -3
- package/scripts/lib/events-retention-banner.mjs +3 -2
- package/scripts/lib/events-schema.mjs +10 -0
- package/scripts/lib/events.mjs +23 -12
- package/scripts/lib/evolve/autonomy-verdict.mjs +4 -9
- package/scripts/lib/evolve/autopilot-effectiveness.mjs +8 -18
- package/scripts/lib/fleet-protocol.mjs +4 -0
- package/scripts/lib/gates/gate-full.mjs +172 -11
- package/scripts/lib/gates/gate-helpers.mjs +236 -23
- package/scripts/lib/git-config-drift.mjs +141 -7
- package/scripts/lib/github-export.mjs +447 -0
- package/scripts/lib/gitlab-portfolio/cli.mjs +16 -5
- package/scripts/lib/handover-queue-marks.mjs +159 -0
- package/scripts/lib/hardware-pattern-detector.mjs +103 -13
- package/scripts/lib/harness-audit/categories/category1.mjs +16 -4
- package/scripts/lib/harness-audit/categories/category4.mjs +11 -8
- package/scripts/lib/harness-audit/categories/category6.mjs +25 -5
- package/scripts/lib/harness-audit/categories/category9.mjs +10 -4
- package/scripts/lib/host-identity.mjs +9 -5
- package/scripts/lib/http-request.mjs +64 -0
- package/scripts/lib/instruction-budget-guard.mjs +30 -22
- package/scripts/lib/io.mjs +6 -3
- package/scripts/lib/issue-budget-reconcile.mjs +3 -2
- package/scripts/lib/issue-budget.mjs +36 -7
- package/scripts/lib/learnings/evidence-candidates.mjs +154 -0
- package/scripts/lib/learnings/expiry-sweep.mjs +99 -7
- package/scripts/lib/learnings/io.mjs +289 -15
- package/scripts/lib/learnings/select.mjs +53 -4
- package/scripts/lib/learnings/store-role.mjs +209 -0
- package/scripts/lib/learnings/surface.mjs +46 -7
- package/scripts/lib/ledger-path.mjs +113 -0
- package/scripts/lib/maintenance-due-banner.mjs +63 -12
- package/scripts/lib/memory-banner.mjs +5 -6
- package/scripts/lib/memory-proposals/collector.mjs +5 -2
- package/scripts/lib/memory-proposals/sink.mjs +7 -4
- package/scripts/lib/memory-proposals/store.mjs +22 -5
- package/scripts/lib/mode-selector-accuracy.mjs +2 -1
- package/scripts/lib/no-follow-open.mjs +57 -0
- package/scripts/lib/orphan-reaper/reaper-audit.mjs +4 -2
- package/scripts/lib/own-lock-root.mjs +95 -0
- package/scripts/lib/owner-interview.mjs +2 -1
- package/scripts/lib/owner-yaml.mjs +70 -7
- package/scripts/lib/platform.mjs +161 -9
- package/scripts/lib/plugin-update-banner.mjs +15 -11
- package/scripts/lib/pre-push-local-partial.mjs +117 -0
- package/scripts/lib/pre-push-remote-gate.mjs +151 -25
- package/scripts/lib/process-group.mjs +270 -34
- package/scripts/lib/project-hygiene.mjs +28 -0
- package/scripts/lib/quality-gate.mjs +33 -9
- package/scripts/lib/reconcile/backlog.mjs +29 -15
- package/scripts/lib/reconcile/engine.mjs +26 -2
- package/scripts/lib/reconcile/idempotency.mjs +65 -3
- package/scripts/lib/reconcile/rule-expiry-sweep.mjs +53 -12
- package/scripts/lib/reconcile/verdict-ledger.mjs +224 -0
- package/scripts/lib/reconcile-nudge-banner.mjs +40 -6
- package/scripts/lib/resource-probe/evaluate.mjs +32 -9
- package/scripts/lib/resource-probe/probe-platform.mjs +3 -1
- package/scripts/lib/rule-loader.mjs +20 -10
- package/scripts/lib/scope-baseline.mjs +123 -8
- package/scripts/lib/scope-echo.mjs +5 -2
- package/scripts/lib/scope-gate.mjs +55 -20
- package/scripts/lib/session-close-backfill.mjs +75 -7
- package/scripts/lib/session-end/close-precheck.mjs +151 -0
- package/scripts/lib/session-end/phase-skip.mjs +8 -7
- package/scripts/lib/session-end/tail-runner.mjs +7 -2
- package/scripts/lib/session-id.mjs +9 -1
- package/scripts/lib/session-identity/own-session.mjs +63 -0
- package/scripts/lib/session-lock.mjs +114 -0
- package/scripts/lib/session-record-repair.mjs +245 -35
- package/scripts/lib/session-registry.mjs +72 -9
- package/scripts/lib/session-schema/constants.mjs +9 -0
- package/scripts/lib/session-schema/filters.mjs +56 -1
- package/scripts/lib/session-schema/validator.mjs +15 -5
- package/scripts/lib/session-start-probes.mjs +149 -22
- package/scripts/lib/session-token-rollup.mjs +2 -1
- package/scripts/lib/session-work-trees.mjs +166 -0
- package/scripts/lib/sessions-canonical.mjs +61 -3
- package/scripts/lib/sessions-integrity-banner.mjs +17 -39
- package/scripts/lib/sessions-staleness-banner.mjs +8 -5
- package/scripts/lib/sh-quote.mjs +1 -0
- package/scripts/lib/skill-evidence-window.mjs +5 -1
- package/scripts/lib/skill-health/join.mjs +10 -9
- package/scripts/lib/skill-invocations-schema.mjs +13 -0
- package/scripts/lib/skill-judgments-schema.mjs +6 -2
- package/scripts/lib/snapshot-probe.mjs +414 -0
- package/scripts/lib/so-hud/collect.mjs +49 -5
- package/scripts/lib/so-hud/runtime.mjs +15 -4
- package/scripts/lib/spiral-carryover.mjs +8 -1
- package/scripts/lib/state-md/frontmatter-mutators.mjs +266 -8
- package/scripts/lib/state-md/idle-reset.mjs +14 -5
- package/scripts/lib/state-md/mission-status.mjs +5 -1
- package/scripts/lib/state-md-peer-guard.mjs +2 -0
- package/scripts/lib/state-md.mjs +31 -8
- package/scripts/lib/sunset/walker.mjs +4 -3
- package/scripts/lib/telemetry/consent.mjs +4 -2
- package/scripts/lib/telemetry/queue.mjs +3 -3
- package/scripts/lib/telemetry/sync.mjs +45 -9
- package/scripts/lib/test-runner/artifact-paths.mjs +10 -2
- package/scripts/lib/tmux-layout/layouts.mjs +20 -3
- package/scripts/lib/ux-grill/paths.mjs +5 -1
- package/scripts/lib/validate/check-agents.mjs +37 -6
- package/scripts/lib/validate/check-component-paths.mjs +25 -1
- package/scripts/lib/validate/check-guard-requires-parity.mjs +3 -3
- package/scripts/lib/validate/check-hooks-symmetry.mjs +53 -32
- package/scripts/lib/validate/check-json-files.mjs +3 -1
- package/scripts/lib/validate/check-learning-provenance.mjs +3 -2
- package/scripts/lib/validate/check-learnings-shell-writes.mjs +10 -4
- package/scripts/lib/validate/check-metrics-ledger-root.mjs +234 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +159 -11
- package/scripts/lib/validate/check-test-posix-shell.mjs +246 -0
- package/scripts/lib/validate/check-unwired-features.mjs +4 -2
- package/scripts/lib/validate/check-vcs-repo-flag-positional.mjs +58 -0
- package/scripts/lib/validate/check-vcs-repo-flag.mjs +259 -73
- package/scripts/lib/validate/check-workflow-continue-on-error.mjs +63 -0
- package/scripts/lib/validate/confidential-names.mjs +3 -1
- package/scripts/lib/vault-mirror/migrate-ids.mjs +321 -0
- package/scripts/lib/vault-mirror/namespace.mjs +19 -7
- package/scripts/lib/vault-mirror/process.mjs +56 -27
- package/scripts/lib/vault-mirror/prune.mjs +5 -2
- package/scripts/lib/vault-mirror/render-learnings.mjs +3 -3
- package/scripts/lib/vault-mirror/render-sessions.mjs +36 -53
- package/scripts/lib/vault-mirror/retention.mjs +2 -2
- package/scripts/lib/vault-mirror/utils.mjs +79 -0
- package/scripts/lib/vault-staleness-banner.mjs +4 -7
- package/scripts/lib/vault-status/board-writer.mjs +2 -1
- package/scripts/lib/vault-status/narrative-mirror.mjs +66 -7
- package/scripts/lib/wave-executor/foreign-dispatch.mjs +20 -0
- package/scripts/lib/win-process-tree.mjs +137 -0
- package/scripts/lib/workspace.mjs +1 -1
- package/scripts/lib/worktree/constants.mjs +1 -1
- package/scripts/lib/worktree/lifecycle.mjs +1 -1
- package/scripts/lib/worktree/listing.mjs +1 -1
- package/scripts/lib/zx.mjs +50 -0
- package/scripts/mcp-server.mjs +16 -7
- package/scripts/mcp-server.sh +13 -83
- package/scripts/measure-policy-cache-effectiveness.mjs +7 -5
- package/scripts/memory-propose.mjs +10 -3
- package/scripts/migrate-cold-start-seed.mjs +7 -0
- package/scripts/migrate-legacy-learnings.sh +22 -0
- package/scripts/migrate-sessions-jsonl.mjs +16 -2
- package/scripts/migrate-vault-paths.mjs +29 -13
- package/scripts/parse-config.mjs +71 -14
- package/scripts/print-learnings-index.mjs +25 -2
- package/scripts/release-session-lock.mjs +94 -7
- package/scripts/release.mjs +451 -24
- package/scripts/relocate-vault-corpus.mjs +11 -7
- package/scripts/repair-invalid-sessions.mjs +68 -3
- package/scripts/resolve-session-invocation.mjs +10 -17
- package/scripts/run-migrate-v2-cross-repo.mjs +56 -1
- package/scripts/run-quality-gate.mjs +33 -7
- package/scripts/self-update.mjs +56 -7
- package/scripts/session-commit-files.mjs +133 -0
- package/scripts/site-numbers.mjs +52 -9
- package/scripts/snapshot-probe.mjs +156 -0
- package/scripts/so-hud.mjs +29 -6
- package/scripts/state-md-idle-reset.mjs +2 -1
- package/scripts/sweep-expired-learnings.mjs +54 -6
- package/scripts/sweep-expired-rules.mjs +4 -1
- package/scripts/validate-plugin.mjs +22 -0
- package/scripts/vault-integration-watcher.mjs +54 -6
- package/scripts/vault-mirror.mjs +9 -0
- package/skills/_shared/fleet-protocol.md +142 -1
- package/skills/_shared/instruction-file-resolution.md +1 -1
- package/skills/_shared/monitor-patterns.md +44 -25
- package/skills/_shared/platform-tools.md +7 -0
- package/skills/_shared/state-ownership.md +3 -2
- package/skills/architecture/references/domain-model.md +1 -1
- package/skills/bootstrap/SKILL.md +3 -1
- package/skills/bootstrap/_shared-template.md +4 -4
- package/skills/bootstrap/fast-template.md +1 -1
- package/skills/bootstrap/private-contract.md +1 -1
- package/skills/bootstrap/references/bootstrap-retroactive-flow.md +17 -9
- package/skills/bootstrap/templates/agents/project-code-review.md +5 -1
- package/skills/bootstrap/templates/agents/project-discovery.md +5 -1
- package/skills/bootstrap/templates/agents/project-quality-gate.md +5 -1
- package/skills/claude-md-drift-check/SKILL.md +3 -3
- package/skills/claude-md-drift-check/checker.mjs +61 -101
- package/skills/close/SKILL.md +20 -7
- package/skills/discovery/probes/docs-staleness.mjs +7 -5
- package/skills/discovery/probes/frontend-slop.mjs +7 -3
- package/skills/discovery/probes/ssot-code-diff.mjs +5 -3
- package/skills/discovery/probes/supply-chain-slopcheck.mjs +10 -8
- package/skills/discovery/probes/vault-narrative-staleness.mjs +30 -10
- package/skills/discovery/probes/vault-staleness.mjs +5 -3
- package/skills/discovery/probes-session.md +3 -0
- package/skills/discovery/probes-vault.md +2 -0
- package/skills/dispatcher/SKILL.md +1 -1
- package/skills/eval/SKILL.md +3 -1
- package/skills/evolve/SKILL.md +2 -0
- package/skills/evolve/references/evolve-analyze-mode.md +3 -3
- package/skills/evolve/references/evolve-dialectic-mode.md +1 -1
- package/skills/gitlab-ops/SKILL.md +7 -6
- package/skills/gitlab-portfolio/SKILL.md +2 -2
- package/skills/go/SKILL.md +13 -1
- package/skills/npm-publish/SKILL.md +5 -2
- package/skills/plan/SKILL.md +23 -10
- package/skills/plan/mode-feature.md +13 -8
- package/skills/plan/mode-new.md +6 -14
- package/skills/plan/prd-feature-template.md +19 -0
- package/skills/plan/prd-full-template.md +12 -5
- package/skills/plan/prd-premortem-panel.md +48 -0
- package/skills/plan/prd-reviewer-prompt.md +11 -3
- package/skills/plan/soul.md +1 -1
- package/skills/portfolio/SKILL.md +5 -6
- package/skills/quality-gates/SKILL.md +2 -4
- package/skills/reconcile/SKILL.md +27 -4
- package/skills/release/SKILL.md +16 -8
- package/skills/session-end/SKILL.md +94 -11
- package/skills/session-end/phase-3-2-docs-verification.md +1 -0
- package/skills/session-end/phase-3-6-tail.md +11 -7
- package/skills/session-end/phase-3-7a-recommendations.md +9 -2
- package/skills/session-end/plan-verification.md +16 -1
- package/skills/session-end/references/phase-3-documentation-updates.md +14 -12
- package/skills/session-end/references/phase-5-issue-cleanup.md +1 -1
- package/skills/session-end/references/session-summary-template.md +4 -0
- package/skills/session-end/session-metrics-write.md +7 -4
- package/skills/session-plan/SKILL.md +5 -3
- package/skills/session-start/SKILL.md +9 -3
- package/skills/session-start/phase-4-5-resource-health.md +11 -5
- package/skills/session-start/phase-8-5-express-path.md +4 -3
- package/skills/session-start/references/phase-1-2-session-lock.md +7 -5
- package/skills/session-start/references/phase-1-5-session-continuity.md +2 -2
- package/skills/session-start/references/phase-1-7-vault-status-board.md +1 -1
- package/skills/session-start/references/phase-4-ssot-environment-check.md +3 -2
- package/skills/tmux-layout/SKILL.md +2 -2
- package/skills/vault-sync/validator.mjs +3 -2
- package/skills/wave-executor/SKILL.md +5 -4
- package/skills/wave-executor/references/wave-executor-state-init.md +3 -3
- package/skills/wave-executor/references/wave-loop-dispatch.md +11 -5
- package/skills/wave-executor/references/wave-loop-review.md +13 -5
- package/skills/wave-executor/references/wave-loop-scope-manifest.md +1 -1
- package/assets/og-card.png +0 -0
- package/assets/og-card.svg +0 -47
- package/assets/wave-lifecycle.svg +0 -98
package/README.md
CHANGED
|
@@ -1,186 +1,185 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
[](https://www.npmjs.com/package/session-orchestrator)
|
|
6
|
-
[](https://github.com/Kanevry/session-orchestrator/releases/latest)
|
|
7
|
-
|
|
8
|
-
**Give your agents a working rhythm.**
|
|
9
|
-
|
|
10
|
-
Your coding agents get an agreed plan, a check after each round of changes and a handover to the next session. On their own, coding agents drift from the plan, overwrite each other's files and call work done before it is checked; Session Orchestrator closes those gaps.
|
|
11
|
-
|
|
12
|
-
You type three commands:
|
|
13
|
-
|
|
14
|
-
- **`/session`** reads your repository, your open issues and the last session, proposes what to work on, and waits for your correction.
|
|
15
|
-
- **`/go`** runs the agreed work in waves of parallel agents. After each implementation wave your tests and typecheck run, and failures become fix tasks for the next wave. The full test, typecheck and lint gate runs before `/close` commits.
|
|
16
|
-
- **`/close`** checks every planned item against what actually happened, commits, and files the rest as issues for next time.
|
|
1
|
+
<picture>
|
|
2
|
+
<source media="(prefers-color-scheme: dark)" srcset="site/brand/a3-terminalmodule/mark-on-dark.svg">
|
|
3
|
+
<img src="site/brand/a3-terminalmodule/mark-on-light.svg" alt="Session Orchestrator logo: a person at a workbench with three terminal modules" width="64" align="left" hspace="12">
|
|
4
|
+
</picture>
|
|
17
5
|
|
|
18
|
-
Session Orchestrator
|
|
6
|
+
# Session Orchestrator
|
|
19
7
|
|
|
20
|
-
|
|
8
|
+
**Your coding agents get an agreed plan, a check after each round of changes and a handover to the next session.**
|
|
21
9
|
|
|
22
|
-
|
|
23
|
-
flowchart LR
|
|
24
|
-
S["/session"] --> G["/go"]
|
|
25
|
-
G --> Q{"quality gate"}
|
|
26
|
-
Q -- "fails" --> G
|
|
27
|
-
Q -- "passes" --> C["/close"]
|
|
28
|
-
```
|
|
10
|
+
A free, MIT-licensed workflow plugin for Claude Code, Codex CLI, Cursor IDE and Pi. It runs on your machine and writes plain text into your repository. No account, no server.
|
|
29
11
|
|
|
30
|
-
|
|
12
|
+
**[Install](#install)** · **[Website](https://session-orchestrator.com)** ([Deutsch](https://session-orchestrator.com/de)) · **[User guide](docs/USER-GUIDE.md)** · **[Add-on for parallel sessions](#add-on-lead-session-orchestrator)** · [Changelog](CHANGELOG.md)
|
|
31
13
|
|
|
32
|
-
[
|
|
14
|
+
[](https://github.com/Kanevry/session-orchestrator/actions/workflows/test.yml)
|
|
15
|
+
[](CHANGELOG.md)
|
|
16
|
+
[](LICENSE)
|
|
17
|
+
[](https://session-orchestrator.com)
|
|
33
18
|
|
|
34
|
-
|
|
19
|
+
<br clear="left">
|
|
35
20
|
|
|
36
|
-
|
|
21
|
+
<img src="site/img/agent-production-1536.webp" width="720" alt="Illustration: a person in an elevated control room directs small agents at separate workstations below, with a conveyor carrying finished parts to inspection and handover">
|
|
37
22
|
|
|
38
|
-
|
|
23
|
+
*Plan, Go, Close: one person directs, the agents work at separate stations. AI-generated illustration, not a product screenshot.*
|
|
39
24
|
|
|
40
|
-
|
|
41
|
-
/plugin marketplace add Kanevry/session-orchestrator
|
|
42
|
-
/plugin install session-orchestrator@kanevry
|
|
43
|
-
```
|
|
25
|
+
## Why
|
|
44
26
|
|
|
45
|
-
|
|
27
|
+
On their own, coding agents drift from the plan, overwrite each other's files and call work done before it is checked.
|
|
46
28
|
|
|
47
|
-
|
|
|
29
|
+
| Without it | With it |
|
|
48
30
|
|---|---|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
31
|
+
| You paste your working rules into every session | `/session` reads git, issues and the last session first |
|
|
32
|
+
| Two agents edit the same file | Each agent gets a declared file list; overlaps are rejected |
|
|
33
|
+
| "Done" before the tests ran | Tests and typecheck run after each implementation wave |
|
|
34
|
+
| A crash loses the plan | `STATE.md` records each wave; the next `/session` offers to resume |
|
|
53
35
|
|
|
54
|
-
|
|
36
|
+
It is built for one person running a coding agent on a git repository, possibly in several sessions at once. It runs on top of your agent and does not replace it.
|
|
55
37
|
|
|
56
|
-
##
|
|
57
|
-
|
|
58
|
-
**1. Run `/bootstrap` once in your project.** It creates the minimum structure, writes `.orchestrator/bootstrap.lock` and adds a Session Config. `/session` refuses to start until the lock exists. For the shortest path, `/bootstrap --fast --no-interview` skips the tier question and the personal-preferences interview; run that interview later with `/bootstrap --owner-reset`.
|
|
38
|
+
## How it works
|
|
59
39
|
|
|
60
|
-
|
|
40
|
+
You type three commands:
|
|
61
41
|
|
|
62
|
-
|
|
63
|
-
|
|
42
|
+
- **`/session`** reads your repository, your open issues and the last session, proposes what to work on, and waits for your correction. Nothing changes in your code until you agree.
|
|
43
|
+
- **`/go`** runs the agreed work in waves of parallel agents, each with its own list of files. After each implementation wave your tests and typecheck run, and failures become fix tasks for the next wave.
|
|
44
|
+
- **`/close`** runs the full test, typecheck and lint gate, checks every planned item against what happened, commits, and files the rest as GitLab or GitHub issues for next time.
|
|
64
45
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
46
|
+
```mermaid
|
|
47
|
+
flowchart LR
|
|
48
|
+
B["/bootstrap<br/>once per repo"] --> S["/session<br/>reads repo, proposes scope"]
|
|
49
|
+
S --> A{"you agree?"}
|
|
50
|
+
A -- no --> S
|
|
51
|
+
A -- yes --> W1["wave 1"] --> Q1["tests + typecheck"] --> W2["wave 2 ..."]
|
|
52
|
+
W2 --> F["full gate<br/>test, typecheck, lint"]
|
|
53
|
+
F --> C["/close<br/>verify, commit, file the rest as issues"]
|
|
54
|
+
C -.->|"next session resumes from STATE.md"| S
|
|
72
55
|
```
|
|
73
56
|
|
|
74
|
-
The
|
|
57
|
+
The session type sets the number of waves: housekeeping 1, feature 3, deep 5, the ultradeep profile 7.
|
|
58
|
+
|
|
59
|
+
<details>
|
|
60
|
+
<summary>What it writes into your repository</summary>
|
|
75
61
|
|
|
76
|
-
|
|
62
|
+
All of it plain text, all of it local:
|
|
77
63
|
|
|
78
64
|
```text
|
|
79
|
-
/
|
|
80
|
-
/
|
|
81
|
-
/
|
|
65
|
+
.orchestrator/bootstrap.lock # written by /bootstrap, the gate for every later run
|
|
66
|
+
.orchestrator/current-session.json # which session owns this working copy right now
|
|
67
|
+
.orchestrator/session.lock # heartbeat lock; stops two sessions colliding in one checkout
|
|
68
|
+
.orchestrator/host.json # host-local identity for peer-session detection
|
|
69
|
+
.orchestrator/metrics/*.jsonl # append-only session, learning, event and subagent records
|
|
70
|
+
.orchestrator/steering/ # stable product/tech/structure context injected each session
|
|
71
|
+
.claude/STATE.md # wave progress and deviations (harness-specific directory)
|
|
82
72
|
```
|
|
83
73
|
|
|
84
|
-
|
|
74
|
+
</details>
|
|
85
75
|
|
|
86
|
-
|
|
76
|
+
## Install
|
|
87
77
|
|
|
88
|
-
|
|
78
|
+
You need Node.js 24 or later, a git repository and one of Claude Code, Codex CLI, Cursor IDE or Pi. In Claude Code:
|
|
89
79
|
|
|
90
|
-
|
|
80
|
+
```text
|
|
81
|
+
/plugin marketplace add Kanevry/session-orchestrator
|
|
82
|
+
/plugin install session-orchestrator@kanevry
|
|
83
|
+
```
|
|
91
84
|
|
|
92
|
-
|
|
|
85
|
+
| Platform | Install |
|
|
93
86
|
|---|---|
|
|
94
|
-
| **
|
|
95
|
-
| **
|
|
96
|
-
| **
|
|
97
|
-
| **
|
|
98
|
-
| **It improves with your sessions.** Patterns from your own work become rules, once you approve them. | Every session appends a record. `/evolve` proposes learnings with a confidence score, `/reconcile` drafts rules from them; you approve or delete each one. Optional mirror into a Markdown notes vault. |
|
|
99
|
-
| **Audit, test and review on demand.** Find problems you did not ask about, and show the app works. | A discovery scan at `/close` turns confirmed findings into issues. `/test` drives web and macOS flows end to end, `/ux-grill` audits a running web app, `/test-audit` removes tests that catch nothing. `/repo-audit` and `/harness-audit` score a repository against a checklist, and `/persona-panel` has several reviewer personas read the same output in parallel. |
|
|
100
|
-
| **Longer runs, more repositories.** | `/autopilot` chains sessions and stops on any of 10 kill-switches. `/dispatcher` recommends the next free repository and claims it once you confirm, and `/portfolio` summarises issues, MRs and CI across the repositories registered in your notes vault. |
|
|
87
|
+
| **Claude Code** | The two commands above. Current Claude Code installs the Node dependencies with the plugin; on older versions [check them once](docs/install.md#claude-code-check-the-node-dependencies). |
|
|
88
|
+
| **Codex CLI** | `git clone` this repository, `npm install`, then `node scripts/codex-install.mjs` ([guide](docs/codex-setup.md)). |
|
|
89
|
+
| **Cursor IDE** | `git clone` this repository, `npm install`, then `node scripts/cursor-install.mjs /path/to/your/project` ([guide](docs/cursor-setup.md)). |
|
|
90
|
+
| **Pi** | `npm install -g --ignore-scripts @earendil-works/pi-coding-agent`, then `pi install npm:session-orchestrator` ([guide](docs/pi-setup.md)). |
|
|
101
91
|
|
|
102
|
-
|
|
92
|
+
Optional extras, upgrade and uninstall: [docs/install.md](docs/install.md). On Claude Code, `/plugin install so-hud@kanevry` adds a status line and gates that refuse secret-printing commands and ask before pushes to `main`, merges, releases, publishes and deploys ([so-hud](mods/so-hud/README.md)).
|
|
103
93
|
|
|
104
|
-
|
|
94
|
+
## First session
|
|
105
95
|
|
|
106
|
-
1. **
|
|
107
|
-
2. **
|
|
108
|
-
3. **The work is split into waves.** The session type decides how many: housekeeping 1, feature 3, deep 5, the ultradeep profile 7. Each wave gets a purpose, a list of file paths it may write to, and a result that can be checked.
|
|
109
|
-
4. **`/go` runs it.** Agents whose file scopes do not overlap run at the same time on Claude Code and Codex; Cursor and Pi run them one after another. After each implementation wave your tests and typecheck run, and failures become fix tasks for the next wave. The full test, typecheck and lint gate runs after the Quality wave.
|
|
110
|
-
5. **`/close` checks and records.** It compares the plan against what happened, runs the full quality gate, commits file by file, and opens issues for whatever was not finished.
|
|
96
|
+
1. **Run `/bootstrap --fast --no-interview` once in your project.** It writes `.orchestrator/bootstrap.lock` and a Session Config into your instruction file (`CLAUDE.md` on Claude Code and Cursor, `AGENTS.md` on Codex CLI and Pi).
|
|
97
|
+
2. **Set the three gate commands** in that Session Config to what your project actually uses:
|
|
111
98
|
|
|
112
|
-
|
|
99
|
+
```yaml
|
|
100
|
+
test-command: npm test
|
|
101
|
+
typecheck-command: npm run typecheck
|
|
102
|
+
lint-command: npm run lint
|
|
103
|
+
```
|
|
113
104
|
|
|
114
|
-
|
|
115
|
-
.
|
|
116
|
-
.orchestrator/current-session.json # which session owns this working copy right now
|
|
117
|
-
.orchestrator/session.lock # heartbeat lock; stops two sessions colliding in one checkout
|
|
118
|
-
.orchestrator/host.json # host-local identity for peer-session detection
|
|
119
|
-
.orchestrator/metrics/*.jsonl # append-only session, learning, event and subagent records
|
|
120
|
-
.orchestrator/steering/ # stable product/tech/structure context injected each session
|
|
121
|
-
.claude/STATE.md # wave progress and deviations (harness-specific directory)
|
|
122
|
-
```
|
|
105
|
+
Every other key is optional: [template](docs/session-config-template.md) · [reference](docs/session-config-reference.md).
|
|
106
|
+
3. **Run `/session feature`** and describe the task. The agent reads the repository and presents a scope. Correct it, then run **`/go`** and, when the work is done, **`/close`**.
|
|
123
107
|
|
|
124
|
-
|
|
108
|
+
On Codex the commands are `$session-orchestrator:bootstrap`, `$session-orchestrator:session feature`, `$session-orchestrator:go` and `$session-orchestrator:close` ([Codex usage](docs/codex-setup.md#usage)). In headless Claude Code (`claude -p`), use `/session-orchestrator:session` and `/session-orchestrator:plan`; the bare names are reserved there.
|
|
125
109
|
|
|
126
|
-
##
|
|
110
|
+
## What you get
|
|
127
111
|
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
130
|
-
- **
|
|
131
|
-
- **
|
|
132
|
-
- **
|
|
133
|
-
- **
|
|
134
|
-
- **
|
|
112
|
+
- **Know what to work on.** `/session` starts from git, open issues, recent commits and the last session record, and recommends one scope. `/plan`, `/brainstorm` and `/grill` help while an idea is still vague.
|
|
113
|
+
- **Errors stop at the next check.** Each wave is checked with your tests and typecheck; lint and the full suite run before the commit. `/debug` looks for the root cause before a fix.
|
|
114
|
+
- **Agents keep to their files.** Overlapping file lists are rejected before dispatch. A guard blocks 12 destructive command patterns (hard reset, `rm -rf`, force-push, `DROP TABLE`, …) and warns on 4.
|
|
115
|
+
- **Pick up where you stopped.** A crash or a second session in the same folder does not cost you the work: `STATE.md` and a heartbeat lock keep the thread.
|
|
116
|
+
- **It learns from your sessions, with your approval.** `/evolve` proposes learnings with a confidence score and `/reconcile` drafts rules from them; you approve or delete each one.
|
|
117
|
+
- **Audit and test on demand.** `/test` drives web and macOS flows end to end, `/ux-grill` audits a running web app, `/repo-audit` and `/harness-audit` score a repository, `/test-audit` removes tests that catch nothing.
|
|
118
|
+
- **Longer runs.** `/autopilot` chains sessions and stops on any of 10 kill-switches; `/dispatcher` and `/portfolio` work across repositories.
|
|
135
119
|
|
|
136
|
-
|
|
120
|
+
Every skill, command, agent and hook: [docs/components.md](docs/components.md).
|
|
137
121
|
|
|
138
122
|
## Platform support
|
|
139
123
|
|
|
140
|
-
|
|
|
124
|
+
| | Claude Code | Codex CLI | Cursor IDE | Pi |
|
|
141
125
|
|---|---|---|---|---|
|
|
142
|
-
|
|
|
143
|
-
| Parallel agents |
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
| Destructive-command guard | Active PreToolUse hook applies policy severity | Instructions only; no handler wired | `beforeShellExecution` bridge for supported commands | `tool_call` bridge for supported commands |
|
|
147
|
-
| AskUserQuestion | Native tool | Numbered-list fallback | Numbered-list fallback | Numbered-list fallback |
|
|
126
|
+
| Commands | Native slash commands | Skills (`$session-orchestrator:<name>`) | Native slash commands | Prompt templates |
|
|
127
|
+
| Parallel agents | Yes | Yes | One after another | One after another |
|
|
128
|
+
| Destructive-command guard | Hook | Hook | Bridge for supported commands | Bridge for supported commands |
|
|
129
|
+
| File-scope guard | Hook (blocks in `strict`) | Instructions only | Bridge (blocks in `strict`) | Bridge (blocks in `strict`) |
|
|
148
130
|
| Quality gates | Full | Full | Full | Full |
|
|
149
131
|
|
|
150
|
-
All four
|
|
132
|
+
All four share the same skills, commands and scripts; only the hooks differ, because each harness fires different events. Codex edits files through `apply_patch`, which the scope guard does not read ([why](docs/codex-setup.md#which-pretooluse-guards-run-on-codex--the-reason-corrected)). Event-coverage limits: [Cursor](docs/cursor-setup.md), [Pi](docs/pi-setup.md).
|
|
151
133
|
|
|
152
|
-
##
|
|
134
|
+
## Add-on: lead-session-orchestrator
|
|
153
135
|
|
|
154
|
-
|
|
136
|
+
Running three or four sessions side by side? Then a job shows up that no single session can do: deciding which one goes next, and answering the questions they all ask you at the same time. That is what [lead-session-orchestrator](https://www.npmjs.com/package/lead-session-orchestrator) is for. One lead session sits above your sessions, prepares the decisions and puts them into one queue for you.
|
|
155
137
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
138
|
+
```mermaid
|
|
139
|
+
flowchart LR
|
|
140
|
+
Y(["you"]) -- "answer one queue" --> L["lead session<br/>lead-session-orchestrator"]
|
|
141
|
+
L -- "constraints" --> A["session A<br/>session-orchestrator"]
|
|
142
|
+
L -- "constraints" --> B["session B<br/>session-orchestrator"]
|
|
143
|
+
A -- "check-in" --> L
|
|
144
|
+
B -- "check-in" --> L
|
|
145
|
+
```
|
|
162
146
|
|
|
163
|
-
|
|
147
|
+
The split: session-orchestrator makes one session good (plan, waves, gates, handover), lead-session-orchestrator keeps several of them in line. What you get on top:
|
|
164
148
|
|
|
165
|
-
|
|
149
|
+
- **One inbox instead of a row of terminals.** Open questions from every session land in one queue; in Claude Code the Inbox mod shows it in a side pane.
|
|
150
|
+
- **Written rules for what needs no asking.** A signed authority file per repository lists what is free, what needs your yes and what never happens. Anything not on the list asks you.
|
|
151
|
+
- **Checks before a run and before a merge.** Busy repository, low disk or memory, a pipeline that is not green on this exact commit: the lead refuses. It also refuses when it cannot measure.
|
|
152
|
+
- **A trail you can check.** Decisions and merges go into an append-only, hash-chained log.
|
|
153
|
+
|
|
154
|
+
```sh
|
|
155
|
+
npm i -g lead-session-orchestrator
|
|
156
|
+
navigator --help
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Each works on its own. Together they talk only through files, and a session never waits for the lead. Worth knowing before you try it: version 0.x, GitLab only for now, tested on macOS. Setup and the Inbox mod: [npm page](https://www.npmjs.com/package/lead-session-orchestrator) · [session-orchestrator.com/lead](https://session-orchestrator.com/lead).
|
|
166
160
|
|
|
167
|
-
|
|
168
|
-
- [Install, upgrade, uninstall](docs/install.md) — requirements, per-harness setup, migration paths
|
|
169
|
-
- [Components & reference](docs/components.md) — every skill, command, agent and hook; the guards; comparisons
|
|
170
|
-
- [Telemetry](docs/telemetry.md) — what stays on your machine, what the optional anonymous telemetry would send, and every switch that turns it off
|
|
171
|
-
- [Contributing](https://github.com/Kanevry/session-orchestrator/blob/main/CONTRIBUTING.md) · [Plugin architecture](docs/plugin-architecture-v3.md) · [docs/ router](docs/README.md)
|
|
161
|
+
## Recent highlights (v5.13.0)
|
|
172
162
|
|
|
173
|
-
|
|
163
|
+
Highlights of the v5.13.0 line:
|
|
174
164
|
|
|
175
|
-
|
|
165
|
+
- **so-hud guards the session.** The optional mod refuses commands that would print a secret and asks before pushes to `main`, merges, releases, publishes and deploys.
|
|
166
|
+
- **Every agent names its model and effort.** No agent inherits the session model any more. On Codex the agents use `gpt-6.1-sol`; change the `model` line in `.codex-plugin/agents/*.toml` if you have no access to it.
|
|
167
|
+
- **Pre-push on a merge-request branch** runs a local partial gate when no remote host is free; main and tags keep the full gate.
|
|
168
|
+
- **Learnings from a second host** go to a separate inbox file, so two machines no longer rewrite the same `learnings.jsonl`.
|
|
169
|
+
|
|
170
|
+
Everything else: [CHANGELOG.md](CHANGELOG.md).
|
|
171
|
+
|
|
172
|
+
## Documentation
|
|
176
173
|
|
|
177
|
-
|
|
174
|
+
- [User guide](docs/USER-GUIDE.md): a walkthrough of one session, config, troubleshooting, FAQ
|
|
175
|
+
- [Install, upgrade, uninstall](docs/install.md) · [Components and design choices](docs/components.md) · [Telemetry](docs/telemetry.md) (off unless you turn it on)
|
|
176
|
+
- [Contributing](CONTRIBUTING.md) · [Security](SECURITY.md) · [All docs](docs/README.md)
|
|
178
177
|
|
|
179
|
-
|
|
178
|
+
## Support
|
|
180
179
|
|
|
181
|
-
|
|
180
|
+
Provided as-is: a community project with best-effort maintenance and no SLA. Questions, ideas and bugs go to [Issues](https://github.com/Kanevry/session-orchestrator/issues). Independent, and not affiliated with or endorsed by Anthropic, OpenAI or Cursor.
|
|
182
181
|
|
|
183
|
-
The
|
|
182
|
+
The method behind it is taught at [agenticbuilders.at](https://agenticbuilders.at); the plugin is free and does not need the courses.
|
|
184
183
|
|
|
185
184
|
## License
|
|
186
185
|
|
package/agents/analyst.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: analyst
|
|
3
|
-
description: 'Use this agent for read-only PRD-quality review. Checks acceptance-criteria specificity, scope drift detection, and completeness of /plan output.
|
|
4
|
-
model:
|
|
3
|
+
description: 'Use this agent for read-only PRD-quality review. Checks acceptance-criteria specificity, scope drift detection, and completeness of /plan output.'
|
|
4
|
+
model: sonnet
|
|
5
|
+
effort: medium
|
|
5
6
|
color: yellow
|
|
6
7
|
tools: Read, Grep, Glob, Bash
|
|
7
8
|
sandbox-tier: read-only
|
|
@@ -97,3 +98,7 @@ Verdict variants (concrete examples per scenario):
|
|
|
97
98
|
- Vague verbs / minor specificity gaps → `{"verdict": "PROCEED_WITH_FOLLOWUPS", "scope_drift_count": 0, "finding_counts": {"high": 0, "med": 4, "low": 2}}`
|
|
98
99
|
- Scope-drift detected or vague critical AC → `{"verdict": "FIX_REQUIRED", "scope_drift_count": 2, "finding_counts": {"high": 2, "med": 3, "low": 1}}`
|
|
99
100
|
- PRD/criteria unreviewable → `{"verdict": "BLOCKED", "blockers": ["PRD path missing"]}`
|
|
101
|
+
|
|
102
|
+
## Examples
|
|
103
|
+
|
|
104
|
+
<example>Context: /plan feature produced a PRD. user: "Review the PRD before /go." assistant: "I'll dispatch analyst to check acceptance-criteria specificity and scope drift before wave execution." <commentary>Analyst catches vague acceptance criteria before they cause carryover at session end.</commentary></example>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: architect-reviewer
|
|
3
|
-
description: 'Use this agent for read-only architectural audits between waves. Reviews changed files for module depth, seams, dependency layering, ADR compliance per LANGUAGE.md vocabulary.
|
|
4
|
-
model:
|
|
3
|
+
description: 'Use this agent for read-only architectural audits between waves. Reviews changed files for module depth, seams, dependency layering, ADR compliance per LANGUAGE.md vocabulary.'
|
|
4
|
+
model: opus
|
|
5
|
+
effort: medium
|
|
5
6
|
color: blue
|
|
6
7
|
tools: Read, Grep, Glob, Bash
|
|
7
8
|
sandbox-tier: read-only
|
|
@@ -91,3 +92,7 @@ Verdict variants (concrete examples per scenario):
|
|
|
91
92
|
- Advisory findings only, no blockers → `{"verdict": "PROCEED_WITH_FOLLOWUPS", "finding_counts": {"high": 0, "med": 3, "low": 5}}`
|
|
92
93
|
- ADR violation or HIGH-severity coupling/seam issue → `{"verdict": "FIX_REQUIRED", "finding_counts": {"high": 2, "med": 4, "low": 3}}`
|
|
93
94
|
- Review could not complete (missing files, malformed inputs) → `{"verdict": "BLOCKED", "blockers": ["missing target file"]}`
|
|
95
|
+
|
|
96
|
+
## Examples
|
|
97
|
+
|
|
98
|
+
<example>Context: After Impl-Core wave shipped 8 files. user: "Audit the W2 architecture before proceeding." assistant: "I'll dispatch architect-reviewer to check module depth, seams, and adapter quality before W3." <commentary>Architect-reviewer catches design smells (shallow modules, speculative seams) earlier than Quality-Lite, which only catches lint/typecheck.</commentary></example>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-implementer
|
|
3
3
|
description: 'Use this agent for feature implementation, API development, refactoring, and general code changes. Handles backend logic, API routes, service layers, and cross-cutting concerns.'
|
|
4
|
-
model:
|
|
4
|
+
model: opus
|
|
5
|
+
effort: medium
|
|
5
6
|
color: green
|
|
6
7
|
tools: Read, Edit, Write, Glob, Grep, Bash, Skill(session-orchestrator:*), SendMessage
|
|
7
8
|
sandbox-tier: repo-write
|
|
@@ -27,7 +28,7 @@ You are a focused implementation agent. You write production code, refactor exis
|
|
|
27
28
|
5. **Run a fast feedback loop**: After substantive edits, run the project's typecheck (`tsgo --noEmit`, `tsc --noEmit`, or the configured command) to catch type errors early. Do not run the full test suite as a routine loop — that is the Quality wave's responsibility. You MAY still run the typecheck/lint command or targeted tests to gather evidence for a `Status: done` claim (Verification gate below) — the bar is on the *routine full-suite run*, not on verifying your own scope.
|
|
28
29
|
6. **Self-review the diff — then hand it over anyway**: Before reporting completion, walk the diff and verify each change serves the task; delete dead branches, debug logging, and TODO stubs. Self-review is a precondition of handoff, never a substitute for review, and a green quality gate is not review either (`.claude/rules/receiving-review.md` § RCR-009). Never mark your own diff reviewed, however small it is.
|
|
29
30
|
7. **Report**: Output a structured summary (see Output Format).
|
|
30
|
-
- **Bite-sized plan**: If a bite-sized executable plan path is provided in your prompt (`docs/plans/<feature>.md`, see `skills/write-executable-plan/SKILL.md`), you own the **implement** and **verify-pass** steps of each Task's 5-step structure: write the production code, then run the Task's exact verification command. The **test-first** and **confirm-fail** steps belong to the test-writer and the **commit-stop** step to the coordinator — in this bite-sized structure the test is authored ahead of you, and you never run git-write operations (see Rules below), so do not attempt those three steps yourself. (Outside a bite-sized plan, a need-gated regression test for a bug you fix IS yours — see Rules.)
|
|
31
|
+
- **Bite-sized plan**: If a bite-sized executable plan path is provided in your prompt (`docs/plans/<feature>.md`, see `skills/write-executable-plan/SKILL.md`), you own the **implement** and **verify-pass** steps of each Task's 5-step structure: write the production code, then run the Task's exact verification command. The **test-first** and **confirm-fail** steps belong to the test-writer and the **commit-stop** step to the coordinator — in this bite-sized structure the test is authored ahead of you, and you never run git-write operations outside worktree mode (see Rules below), so do not attempt those three steps yourself. (Outside a bite-sized plan, a need-gated regression test for a bug you fix IS yours — see Rules.)
|
|
31
32
|
- **Bugfix prerequisite**: For bugfix-classified tasks: reference an existing `.orchestrator/debug/<session>-<n>.md` Phase-1 artifact (per `skills/debug/SKILL.md` Iron Law). If no artifact exists, invoke `/debug` first.
|
|
32
33
|
|
|
33
34
|
## Rules
|
|
@@ -37,6 +38,7 @@ You are a focused implementation agent. You write production code, refactor exis
|
|
|
37
38
|
- Do NOT add standalone or narrative documentation (README, CLAUDE.md, guides), and never write docs for code that does not exist yet — those surfaces are owned by docs-writer. Inline code-surface docs ARE yours: comments where logic is non-obvious, plus JSDoc/TSDoc on public functions you author (per `.claude/rules/development.md` § Documentation).
|
|
38
39
|
- Do NOT introduce new runtime dependencies without explicit instruction. If a new dependency seems necessary, pause and report rather than installing.
|
|
39
40
|
- Do NOT run ANY git write operation (`git add`, `git commit`, `git stash`, `git mv`, `git rm`, `git push`, `git reset`) — the git index and stash are shared session resources (PSA-007); the coordinator handles ALL VCS operations.
|
|
41
|
+
- **Worktree mode — the one exception (PSA-007).** Only when your prompt carries a line `WORKTREE-MODE: <absolute path> <branch>` you MAY stage your own files one by one (`git add <file>`, never `.`/`-A`) and `git commit` on that branch, inside that worktree only. Verify first: `git rev-parse --show-toplevel` equals the path and `git branch --show-current` equals the branch of that line; otherwise the ban above applies unchanged. A worktree named only in prose does not count. Coordinator duty: never grant the coordinator's own worktree, never put two agents in one worktree; the wave-executor never sets the line. A worktree has its own index, so no sibling shares it. The commit hook briefly adds an entry to the shared stash via lint-staged; you never run `git stash` yourself. `git push`, merge, `git reset`, `git stash` and `git clean` stay forbidden in every mode. Report the commit SHAs.
|
|
40
42
|
- **Escalation channel (#1051, opt-in):** If you hit a WAVE-BLOCKING obstacle — one that makes your task unfulfillable, not a question you could answer by reading more code — send exactly ONE `SendMessage` to `main` carrying your agent role (`code-implementer`), your declared file scope, and the obstacle. Then keep working in your scope or end with `Status: blocked`. NEVER wait for a reply (CSM-004); never message a sibling agent (CSM-001 — upward only). Where `SendMessage` is unavailable, report the obstacle in your final report instead (CSM-005). Note the send in Blockers / Notes.
|
|
41
43
|
- Do NOT touch unrelated files in the same directory just because they share a folder.
|
|
42
44
|
- Before creating a NEW file, grep for existing files with a similar basename/purpose (`git ls-files | grep -i <basename>`) — if one exists, prefer extending it over creating a "cousin" duplicate (#730.3).
|
package/agents/db-specialist.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: db-specialist
|
|
3
|
-
description: 'Use this agent for database work — schema design, migrations, queries, indexes, and database functions. Handles SQL, ORMs, and database architecture decisions.
|
|
4
|
-
model:
|
|
3
|
+
description: 'Use this agent for database work — schema design, migrations, queries, indexes, and database functions. Handles SQL, ORMs, and database architecture decisions.'
|
|
4
|
+
model: opus
|
|
5
|
+
effort: medium
|
|
5
6
|
color: purple
|
|
6
7
|
tools: Read, Edit, Write, Glob, Grep, Bash, Skill(session-orchestrator:*), SendMessage
|
|
7
8
|
sandbox-tier: repo-write
|
|
@@ -102,3 +103,9 @@ Required: `status`, `task_id`, `files_changed`, `blockers`. Optional: `verdict`.
|
|
|
102
103
|
- **Migration tool drift**: Project has both `migrations/` (legacy) and `prisma/migrations/` (current). → Use the active tool only; flag the legacy directory as a cleanup candidate without touching it.
|
|
103
104
|
- **Index that already exists in production**: Adding `CREATE INDEX` would fail — but `CREATE INDEX IF NOT EXISTS` is supported. → Use the idempotent form and note in Verification that it's a no-op on already-indexed environments.
|
|
104
105
|
- **Soft-delete request**: Task asks for "delete invoice" but the project uses soft-delete (`deleted_at`). → Add `deleted_at` filter to relevant queries; never `DELETE FROM` unless the project has no soft-delete pattern.
|
|
106
|
+
|
|
107
|
+
## Examples
|
|
108
|
+
|
|
109
|
+
<example>Context: New feature requires database schema changes. user: "Create the migration for the invoice tables with proper indexes" assistant: "I'll dispatch the db-specialist agent to design the schema and create the migration." <commentary>Schema design requires understanding normalization, indexing, and the existing data model.</commentary></example>
|
|
110
|
+
|
|
111
|
+
<example>Context: Performance issue with database queries. user: "Optimize the slow invoice listing query" assistant: "I'll use the db-specialist to analyze and optimize the query with proper indexing." <commentary>Query optimization requires understanding execution plans, indexes, and data access patterns.</commentary></example>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dialectic-deriver
|
|
3
|
-
description: 'Use this agent when reasoning over top-N learnings + last-K sessions + existing peer cards to derive updates to USER.md / AGENT.md. Called via /evolve --dialectic mode by the evolve skill. Reads inputs, writes one fenced diff block per peer-card target. Read-only by contract — never writes files. Cheap-by-default — model haiku, bounded per-call budget.
|
|
3
|
+
description: 'Use this agent when reasoning over top-N learnings + last-K sessions + existing peer cards to derive updates to USER.md / AGENT.md. Called via /evolve --dialectic mode by the evolve skill. Reads inputs, writes one fenced diff block per peer-card target. Read-only by contract — never writes files. Cheap-by-default — model haiku, bounded per-call budget.'
|
|
4
4
|
model: haiku
|
|
5
|
+
effort: medium
|
|
6
|
+
omitClaudeMd: true
|
|
5
7
|
color: cyan
|
|
6
8
|
tools: Read, Grep, Glob
|
|
7
9
|
sandbox-tier: read-only
|
|
@@ -10,7 +12,7 @@ sandbox-tier: read-only
|
|
|
10
12
|
# Dialectic-Deriver Agent
|
|
11
13
|
|
|
12
14
|
You reason over recent learnings, sessions, peer cards, and project steering to propose updates
|
|
13
|
-
to the canonical peer cards (
|
|
15
|
+
to the canonical peer cards (`USER.md` and `AGENT.md` in the repo's `.orchestrator/peers/` directory).
|
|
14
16
|
You are dispatched by `scripts/dialectic-deriver.mjs::runDialecticDeriver` with a complete
|
|
15
17
|
payload — your job is to read the payload, decide whether each peer card warrants an update,
|
|
16
18
|
and emit the `## ` sections you change or add for any card you wish to update.
|
|
@@ -31,7 +33,7 @@ and emit the `## ` sections you change or add for any card you wish to update.
|
|
|
31
33
|
## Autonomy Readiness
|
|
32
34
|
|
|
33
35
|
`autonomy-verdict` learnings may justify an `## Autonomy Readiness` section in
|
|
34
|
-
|
|
36
|
+
the `AGENT.md` peer card. Add or update that section only when the supplied payload
|
|
35
37
|
contains a grounded `autonomy-verdict` learning or repeated sessions that directly confirm the
|
|
36
38
|
same readiness status. Summarize the readiness status, confidence, and practical operating
|
|
37
39
|
constraint; do not infer dispatcher autonomy from unrelated productivity, CI, or preference
|
|
@@ -151,3 +153,7 @@ block entirely. The orchestrator treats absence as "no change".
|
|
|
151
153
|
- `scripts/dialectic-deriver.mjs` — the orchestrator that dispatches this agent
|
|
152
154
|
- `scripts/lib/peer-cards/reader.mjs` — how existing cards are loaded
|
|
153
155
|
- Issue #506 — original spec, acceptance criteria, and budget rationale
|
|
156
|
+
|
|
157
|
+
## Examples
|
|
158
|
+
|
|
159
|
+
<example>Context: /evolve --dialectic invoked at session-end Phase 3.6.7. user "Run dialectic derivation against recent learnings." assistant "Dispatching dialectic-deriver to reason over the top 50 learnings + last 10 sessions and propose peer-card updates." <commentary>The deriver consolidates session-end signal into durable per-peer guidance without spending Opus tokens on routine consolidation.</commentary></example>
|
package/agents/docs-writer.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-writer
|
|
3
|
-
description: 'Use this agent when documentation needs to be generated or updated as part of a session — user-facing READMEs, dev-focused CLAUDE.md sections, or vault narratives (context.md, decisions.md, people.md).
|
|
4
|
-
model:
|
|
3
|
+
description: 'Use this agent when documentation needs to be generated or updated as part of a session — user-facing READMEs, dev-focused CLAUDE.md sections, or vault narratives (context.md, decisions.md, people.md).'
|
|
4
|
+
model: sonnet
|
|
5
|
+
effort: medium
|
|
5
6
|
color: cyan
|
|
6
7
|
tools: Read, Edit, Write, Glob, Grep, Bash, Skill(session-orchestrator:*), SendMessage
|
|
7
8
|
sandbox-tier: repo-write
|
|
@@ -113,3 +114,7 @@ After the prose status report above, append a fenced ```json block matching `age
|
|
|
113
114
|
```
|
|
114
115
|
|
|
115
116
|
Required: `verdict` (enum PROCEED|PROCEED_WITH_FOLLOWUPS|FIX_REQUIRED|BLOCKED), `status` (enum done|partial|blocked), `files_updated` (array). Optional: `review_markers_added`, `notes`. The coordinator's `validateAgentOutput()` parses the LAST fenced ```json block; place it at the end of your response.
|
|
117
|
+
|
|
118
|
+
## Examples
|
|
119
|
+
|
|
120
|
+
<example>Context: a feature session added a new CLI flag. user: "Update the README with the new --no-vault flag." assistant: "I'll dispatch the docs-writer agent to scan the diff and update README plus the Dev CLAUDE.md section if warranted." <commentary>Scope touches user-facing docs — docs-writer decides audience split and cites the diff.</commentary></example>
|
package/agents/eval-judge.md
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: eval-judge
|
|
3
|
-
description: "Use this agent during the /eval Skill Phase 3 (Epic #803, issue #810; re-aimed by #1381) to judge — from a session-eval record's dimension evidence, kpis, session_id and a pre-computed facts block — the record's instruction-adherence per rubric-v3.md's Judge Dimensions section and its six ordered decision rules. Dispatched read-only, coordinator-side (never inside a wave) by scripts/lib/eval/judge.mjs::runEvalJudge with a bounded per-call budget. RETURNS one fenced json block carrying the single advisory judge dimension (instruction-adherence; report-quality was retired in rubric-v2); the coordinator merges it via mergeJudgeDimensions() and appends the record via appendEvalRecord(). Read-only by contract — never writes files. Advisory-only and always uncalibrated — never blended into the deterministic tally or any global score.
|
|
3
|
+
description: "Use this agent during the /eval Skill Phase 3 (Epic #803, issue #810; re-aimed by #1381) to judge — from a session-eval record's dimension evidence, kpis, session_id and a pre-computed facts block — the record's instruction-adherence per rubric-v3.md's Judge Dimensions section and its six ordered decision rules. Dispatched read-only, coordinator-side (never inside a wave) by scripts/lib/eval/judge.mjs::runEvalJudge with a bounded per-call budget. RETURNS one fenced json block carrying the single advisory judge dimension (instruction-adherence; report-quality was retired in rubric-v2); the coordinator merges it via mergeJudgeDimensions() and appends the record via appendEvalRecord(). Read-only by contract — never writes files. Advisory-only and always uncalibrated — never blended into the deterministic tally or any global score."
|
|
4
4
|
model: haiku
|
|
5
|
+
effort: medium
|
|
6
|
+
omitClaudeMd: true
|
|
5
7
|
color: cyan
|
|
6
8
|
tools: Read, Grep, Glob
|
|
7
9
|
sandbox-tier: read-only
|
|
@@ -166,3 +168,7 @@ Rules:
|
|
|
166
168
|
- `skills/eval/rubric-v3.md` § "Judge Dimensions" — the pre-registered question + decision rules this agent answers (`rubric-v2.md` / `rubric-v1.md` for stored v2 / v1 records)
|
|
167
169
|
- `skills/eval/SKILL.md` § Phase 3 — the dispatch + merge + append site
|
|
168
170
|
- Issue #810 (Epic #803, S7) — original spec and acceptance criteria
|
|
171
|
+
|
|
172
|
+
## Examples
|
|
173
|
+
|
|
174
|
+
<example>Context: /eval Phase 3 with eval.judge: haiku. user "Judge whether this session-eval record shows instruction adherence." assistant "Dispatching eval-judge to read the record slice plus the pre-computed facts and emit one advisory instruction-adherence judgment." <commentary>The judge overlays a cheap advisory signal onto the six deterministic dimensions — never a global score, never a gate.</commentary></example>
|
package/agents/qa-strategist.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: qa-strategist
|
|
3
|
-
description: 'Use this agent for read-only test-coverage gap analysis between waves. Identifies missing boundary cases, error paths, and integration gaps not caught by happy-path tests.
|
|
4
|
-
model:
|
|
3
|
+
description: 'Use this agent for read-only test-coverage gap analysis between waves. Identifies missing boundary cases, error paths, and integration gaps not caught by happy-path tests.'
|
|
4
|
+
model: sonnet
|
|
5
|
+
effort: medium
|
|
5
6
|
color: purple
|
|
6
7
|
tools: Read, Grep, Glob, Bash
|
|
7
8
|
sandbox-tier: read-only
|
|
@@ -125,3 +126,7 @@ Verdict variants (concrete examples per scenario):
|
|
|
125
126
|
- **Pre-existing flaky test in scope**: A test in the file you're reviewing is intermittently failing on main. → Flag as flaky-prone (HIGH if it's blocking CI). Quote the suspect pattern (timer use without fake timers, race condition, hardcoded port).
|
|
126
127
|
- **Test-quality regression in this wave**: New tests added by impl agents in the current wave use computed assertions (`expect(add(2,3)).toBe(2+3)`) or assert-nothing patterns. → HIGH severity, category `tautological-or-trivial`. Wave-output validation is a primary purpose of this agent.
|
|
127
128
|
- **Test file does not exist for an exported function**: Public API has zero tests. → HIGH gap if the function has logic; LOW if it's a trivial pass-through (re-export, single property accessor). Calibrate based on logic complexity, not surface area.
|
|
129
|
+
|
|
130
|
+
## Examples
|
|
131
|
+
|
|
132
|
+
<example>Context: Impl-Core shipped a new auth flow with 6 unit tests. user: "Check the test coverage gaps." assistant: "I'll dispatch qa-strategist to identify boundary cases and error-path coverage gaps before Quality wave." <commentary>QA-strategist surfaces test depth gaps the test-writer agent missed.</commentary></example>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security-reviewer
|
|
3
|
-
description: 'Use this agent for security analysis — OWASP checks, authentication flows, input validation, authorization, and vulnerability assessment. Read-only analysis with actionable findings. Prioritizes high-confidence exploitable issues over theoretical ones.
|
|
4
|
-
model:
|
|
3
|
+
description: 'Use this agent for security analysis — OWASP checks, authentication flows, input validation, authorization, and vulnerability assessment. Read-only analysis with actionable findings. Prioritizes high-confidence exploitable issues over theoretical ones.'
|
|
4
|
+
model: opus
|
|
5
|
+
effort: medium
|
|
5
6
|
color: red
|
|
6
7
|
tools: Read, Grep, Glob, Bash
|
|
7
8
|
sandbox-tier: read-only
|
|
@@ -234,3 +235,9 @@ Verdict variants (concrete examples per scenario):
|
|
|
234
235
|
- LOW/MED-only findings, no exploitable HIGH → `{"verdict": "PROCEED_WITH_FOLLOWUPS", "finding_counts": {"high": 0, "med": 2, "low": 4}}`
|
|
235
236
|
- HIGH-confidence exploitable finding present → `{"verdict": "FIX_REQUIRED", "finding_counts": {"high": 1, "med": 3, "low": 2}}`
|
|
236
237
|
- Cannot complete audit (missing access, malformed targets) → `{"verdict": "BLOCKED", "phases": {"context": false}}`
|
|
238
|
+
|
|
239
|
+
## Examples
|
|
240
|
+
|
|
241
|
+
<example>Context: Quality wave includes security review of new endpoints. user: "Review the new API endpoints for security vulnerabilities" assistant: "I'll dispatch the security-reviewer agent to audit the new endpoints." <commentary>Security review after implementation catches auth gaps, injection risks, and missing validation.</commentary></example>
|
|
242
|
+
|
|
243
|
+
<example>Context: Pre-deployment security check. user: "Run a security audit on the authentication changes" assistant: "I'll use the security-reviewer to verify the auth changes are secure." <commentary>Auth changes are high-risk — dedicated security review prevents vulnerabilities in production.</commentary></example>
|