@opengsd/gsd-core 1.12.0 → 1.14.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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.opencode/plugins/gsd-core.js +12 -0
- package/agents/gsd-advisor-researcher.compact.md +85 -0
- package/agents/gsd-ai-researcher.compact.md +96 -0
- package/agents/gsd-assumptions-analyzer.compact.md +81 -0
- package/agents/gsd-code-fixer.compact.md +458 -0
- package/agents/gsd-code-fixer.md +5 -5
- package/agents/gsd-code-reviewer.compact.md +269 -0
- package/agents/gsd-code-reviewer.md +15 -3
- package/agents/gsd-codebase-mapper.compact.md +760 -0
- package/agents/gsd-debug-session-manager.compact.md +345 -0
- package/agents/gsd-doc-classifier.compact.md +192 -0
- package/agents/gsd-doc-synthesizer.compact.md +200 -0
- package/agents/gsd-doc-verifier.compact.md +143 -0
- package/agents/gsd-doc-writer.compact.md +440 -0
- package/agents/gsd-dom-verifier.compact.md +138 -0
- package/agents/gsd-domain-researcher.compact.md +141 -0
- package/agents/gsd-eval-auditor.compact.md +160 -0
- package/agents/gsd-eval-planner.compact.md +137 -0
- package/agents/gsd-executor.md +63 -35
- package/agents/gsd-framework-selector.compact.md +82 -0
- package/agents/gsd-integration-checker.compact.md +245 -0
- package/agents/gsd-intel-updater.compact.md +226 -0
- package/agents/gsd-mempalace-curator.compact.md +45 -0
- package/agents/gsd-nyquist-auditor.compact.md +179 -0
- package/agents/gsd-pattern-mapper.compact.md +275 -0
- package/agents/gsd-plan-checker.md +76 -57
- package/agents/gsd-planner.md +14 -0
- package/agents/gsd-project-researcher.compact.md +587 -0
- package/agents/gsd-research-synthesizer.compact.md +212 -0
- package/agents/gsd-roadmapper.compact.md +454 -0
- package/agents/gsd-roadmapper.md +13 -0
- package/agents/gsd-security-auditor.compact.md +162 -0
- package/agents/gsd-ui-auditor.compact.md +404 -0
- package/agents/gsd-ui-checker.compact.md +277 -0
- package/agents/gsd-ui-checker.md +19 -3
- package/agents/gsd-ui-researcher.compact.md +282 -0
- package/agents/gsd-ui-researcher.md +29 -0
- package/agents/gsd-user-profiler.compact.md +108 -0
- package/agents/gsd-verifier.md +23 -1
- package/bin/install.js +444 -134
- package/commands/gsd/cleanup.md +1 -0
- package/commands/gsd/code-review.md +2 -1
- package/commands/gsd/complete-milestone.md +1 -0
- package/commands/gsd/config.md +1 -0
- package/commands/gsd/debug.md +1 -0
- package/commands/gsd/execute-phase.md +1 -1
- package/commands/gsd/graphify.md +1 -0
- package/commands/gsd/health.md +1 -0
- package/commands/gsd/mempalace-capture.md +1 -0
- package/commands/gsd/mempalace-recall.md +1 -0
- package/commands/gsd/new-milestone.md +1 -0
- package/commands/gsd/new-project.md +1 -0
- package/commands/gsd/next.md +1 -0
- package/commands/gsd/ns-workflow.md +2 -1
- package/commands/gsd/pause-work.md +1 -0
- package/commands/gsd/phase.md +2 -1
- package/commands/gsd/pr-branch.md +1 -0
- package/commands/gsd/quick-batch.md +105 -0
- package/commands/gsd/resume-work.md +1 -0
- package/commands/gsd/review-backlog.md +1 -0
- package/commands/gsd/settings.md +2 -1
- package/commands/gsd/stats.md +1 -0
- package/commands/gsd/surface.md +18 -8
- package/commands/gsd/thread.md +1 -0
- package/commands/gsd/workspace.md +1 -0
- package/commands/gsd/workstreams.md +1 -0
- package/gsd-core/bin/check-latest-version.cjs +8 -3
- package/gsd-core/bin/gsd-tools.cjs +532 -174
- package/gsd-core/bin/lib/adr-parser.cjs +1 -1
- package/gsd-core/bin/lib/artifacts.cjs +2 -1
- package/gsd-core/bin/lib/audit.cjs +39 -22
- package/gsd-core/bin/lib/broken-windows.cjs +168 -49
- package/gsd-core/bin/lib/capability-activation.cjs +27 -0
- package/gsd-core/bin/lib/capability-lifecycle.cjs +10 -6
- package/gsd-core/bin/lib/capability-loader.cjs +135 -1
- package/gsd-core/bin/lib/capability-registry.cjs +528 -116
- package/gsd-core/bin/lib/capability-source.cjs +19 -2
- package/gsd-core/bin/lib/capability-state.cjs +7 -1
- package/gsd-core/bin/lib/capability-validator.cjs +134 -5
- package/gsd-core/bin/lib/capability-writer.cjs +14 -4
- package/gsd-core/bin/lib/check-command-router.cjs +198 -38
- package/gsd-core/bin/lib/claude-orchestration.cjs +10 -25
- package/gsd-core/bin/lib/clusters.cjs +1 -0
- package/gsd-core/bin/lib/code-review-depth.cjs +2 -2
- package/gsd-core/bin/lib/command-aliases.cjs +16 -0
- package/gsd-core/bin/lib/commands.cjs +981 -79
- package/gsd-core/bin/lib/config-loader.cjs +4 -0
- package/gsd-core/bin/lib/config.cjs +153 -38
- package/gsd-core/bin/lib/core-utils.cjs +34 -7
- package/gsd-core/bin/lib/coverage.cjs +1 -1
- package/gsd-core/bin/lib/decisions.cjs +343 -28
- package/gsd-core/bin/lib/edge-probe.cjs +14 -1
- package/gsd-core/bin/lib/external-descriptor-trust.cjs +29 -14
- package/gsd-core/bin/lib/file-overlap-partitioner.cjs +74 -0
- package/gsd-core/bin/lib/frontmatter.cjs +137 -23
- package/gsd-core/bin/lib/gap-checker.cjs +22 -13
- package/gsd-core/bin/lib/git-base-branch.cjs +10 -2
- package/gsd-core/bin/lib/gsd2-import.cjs +1 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/phase-structure.cjs +8 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/roadmap-disk-consistency.cjs +54 -11
- package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +87 -23
- package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +1 -1
- package/gsd-core/bin/lib/host-integration.cjs +57 -5
- package/gsd-core/bin/lib/init-command-router.cjs +14 -0
- package/gsd-core/bin/lib/init.cjs +539 -60
- package/gsd-core/bin/lib/install-engine.cjs +199 -14
- package/gsd-core/bin/lib/install-model-override-resolver.cjs +45 -0
- package/gsd-core/bin/lib/install-profiles.cjs +36 -14
- package/gsd-core/bin/lib/installer-migration-report.cjs +1 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +33 -4
- package/gsd-core/bin/lib/io.cjs +35 -0
- package/gsd-core/bin/lib/loop-resolver.cjs +64 -39
- package/gsd-core/bin/lib/markdown-table.cjs +123 -0
- package/gsd-core/bin/lib/mcp-catalog.cjs +2 -2
- package/gsd-core/bin/lib/milestone.cjs +41 -10
- package/gsd-core/bin/lib/model-resolver.cjs +101 -10
- package/gsd-core/bin/lib/phase-command-router.cjs +20 -7
- package/gsd-core/bin/lib/phase-id.cjs +412 -31
- package/gsd-core/bin/lib/phase-lifecycle.cjs +61 -0
- package/gsd-core/bin/lib/phase.cjs +941 -98
- package/gsd-core/bin/lib/plan-document.cjs +10 -0
- package/gsd-core/bin/lib/planning-inspect.cjs +34 -18
- package/gsd-core/bin/lib/planning-snapshot.cjs +206 -30
- package/gsd-core/bin/lib/planning-workspace.cjs +153 -29
- package/gsd-core/bin/lib/pristine-baseline.cjs +182 -0
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +91 -4
- package/gsd-core/bin/lib/quick-batch-command-router.cjs +285 -0
- package/gsd-core/bin/lib/quick-batch-dispatch.cjs +250 -0
- package/gsd-core/bin/lib/quick-batch.cjs +840 -0
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +61 -2
- package/gsd-core/bin/lib/research-store.cjs +11 -12
- package/gsd-core/bin/lib/review-lane-descriptor.cjs +53 -5
- package/gsd-core/bin/lib/review-lane-invocation.cjs +96 -1
- package/gsd-core/bin/lib/review-lane-runner.cjs +136 -10
- package/gsd-core/bin/lib/reviewer-step-dispatch.cjs +337 -0
- package/gsd-core/bin/lib/roadmap-parser.cjs +555 -41
- package/gsd-core/bin/lib/roadmap.cjs +292 -69
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +260 -43
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +28 -20
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +294 -108
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +408 -47
- package/gsd-core/bin/lib/security.cjs +126 -7
- package/gsd-core/bin/lib/shell-command-projection.cjs +4 -0
- package/gsd-core/bin/lib/smart-entry.cjs +7 -9
- package/gsd-core/bin/lib/state-document.cjs +159 -32
- package/gsd-core/bin/lib/state-md-schema.cjs +44 -27
- package/gsd-core/bin/lib/state-transition.cjs +465 -62
- package/gsd-core/bin/lib/state.cjs +906 -151
- package/gsd-core/bin/lib/surface.cjs +83 -10
- package/gsd-core/bin/lib/task-command-router.cjs +12 -6
- package/gsd-core/bin/lib/tdd-red-evidence.cjs +133 -0
- package/gsd-core/bin/lib/uat.cjs +1420 -516
- package/gsd-core/bin/lib/update-context.cjs +36 -26
- package/gsd-core/bin/lib/validate.cjs +230 -12
- package/gsd-core/bin/lib/vendor/js-yaml.cjs +11 -3
- package/gsd-core/bin/lib/verification-command-router.cjs +2 -1
- package/gsd-core/bin/lib/verification.cjs +316 -23
- package/gsd-core/bin/lib/verify-command-grounding.cjs +1 -1
- package/gsd-core/bin/lib/verify-command-router.cjs +1 -0
- package/gsd-core/bin/lib/verify.cjs +531 -36
- package/gsd-core/bin/lib/workstream-inventory.cjs +21 -2
- package/gsd-core/bin/lib/worktree-safety.cjs +21 -7
- package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +13 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +507 -81
- package/gsd-core/references/agent-contracts.md +3 -3
- package/gsd-core/references/compact-content-gate.md +66 -0
- package/gsd-core/references/edge-probe.md +17 -13
- package/gsd-core/references/execute-mvp-tdd.md +18 -16
- package/gsd-core/references/execute-phase-response-language.md +6 -0
- package/gsd-core/references/executor-examples.md +42 -0
- package/gsd-core/references/few-shot-examples/plan-checker.md +15 -15
- package/gsd-core/references/loop-hook-dispatch.md +18 -0
- package/gsd-core/references/model-profiles.md +12 -3
- package/gsd-core/references/mvp-concepts.md +2 -2
- package/gsd-core/references/plan-checker-examples.md +41 -0
- package/gsd-core/references/planner-antipatterns.md +25 -0
- package/gsd-core/references/planner-chunked.md +5 -1
- package/gsd-core/references/planner-coupling.md +42 -0
- package/gsd-core/references/planner-quick-batch.md +71 -0
- package/gsd-core/references/planner-reviews.md +47 -0
- package/gsd-core/references/planner-revision.md +75 -2
- package/gsd-core/references/planning-config.md +5 -1
- package/gsd-core/references/response-language-directive.md +9 -0
- package/gsd-core/references/revision-loop.md +118 -11
- package/gsd-core/references/tdd.md +17 -9
- package/gsd-core/references/thinking-models-planning.md +18 -2
- package/gsd-core/references/verification-patterns.md +17 -4
- package/gsd-core/references/verifier-evidence-gate.md +160 -0
- package/gsd-core/references/worktree-path-safety.md +112 -2
- package/gsd-core/templates/README.md +7 -1
- package/gsd-core/templates/phase-prompt.md +4 -0
- package/gsd-core/templates/state.md +6 -3
- package/gsd-core/templates/summary.compact.md +212 -0
- package/gsd-core/templates/user-setup.compact.md +199 -0
- package/gsd-core/templates/user-setup.md +0 -9
- package/gsd-core/templates/verification-report.md +5 -0
- package/gsd-core/workflows/add-backlog.md +2 -0
- package/gsd-core/workflows/add-phase.md +2 -0
- package/gsd-core/workflows/add-tests.md +1 -1
- package/gsd-core/workflows/add-todo.md +4 -3
- package/gsd-core/workflows/ai-integration-phase.md +1 -1
- package/gsd-core/workflows/analyze-dependencies.md +2 -0
- package/gsd-core/workflows/audit-fix.md +2 -0
- package/gsd-core/workflows/audit-milestone.md +2 -0
- package/gsd-core/workflows/audit-uat.md +2 -0
- package/gsd-core/workflows/autonomous.md +15 -10
- package/gsd-core/workflows/check-todos.md +5 -3
- package/gsd-core/workflows/cleanup.md +4 -2
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +22 -13
- package/gsd-core/workflows/code-review-fix.md +5 -3
- package/gsd-core/workflows/code-review.md +211 -43
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +274 -0
- package/gsd-core/workflows/complete-milestone.md +40 -254
- package/gsd-core/workflows/debug.md +1 -1
- package/gsd-core/workflows/diagnose-issues.md +5 -1
- package/gsd-core/workflows/discuss-phase/modes/advisor.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/all.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/analyze.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/auto.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/batch.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/chain.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/default.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/power.md +2 -0
- package/gsd-core/workflows/discuss-phase/modes/text.md +2 -0
- package/gsd-core/workflows/discuss-phase/templates/context.md +2 -0
- package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +2 -0
- package/gsd-core/workflows/discuss-phase-assumptions.md +1 -1
- package/gsd-core/workflows/discuss-phase-power.md +2 -0
- package/gsd-core/workflows/discuss-phase.md +1 -1
- package/gsd-core/workflows/do.md +43 -13
- package/gsd-core/workflows/docs-update/detail/elaboration.md +179 -0
- package/gsd-core/workflows/docs-update.md +15 -156
- package/gsd-core/workflows/edit-phase.md +2 -0
- package/gsd-core/workflows/eval-review.md +1 -1
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +124 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +20 -3
- package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +56 -0
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +24 -3
- package/gsd-core/workflows/execute-phase/steps/executor-progress-policy.md +43 -0
- package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +8 -2
- package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +2 -0
- package/gsd-core/workflows/execute-phase/steps/sequential-root-pin.md +35 -0
- package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +25 -0
- package/gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md +2 -0
- package/gsd-core/workflows/execute-phase.md +78 -159
- package/gsd-core/workflows/execute-plan.md +28 -15
- package/gsd-core/workflows/explore.md +2 -0
- package/gsd-core/workflows/extract-learnings.md +2 -0
- package/gsd-core/workflows/fast.md +6 -0
- package/gsd-core/workflows/forensics.md +2 -0
- package/gsd-core/workflows/graduation.md +1 -1
- package/gsd-core/workflows/health.md +1 -1
- package/gsd-core/workflows/help/modes/brief.md +2 -0
- package/gsd-core/workflows/help/modes/default.md +2 -0
- package/gsd-core/workflows/help/modes/full.compact.md +398 -0
- package/gsd-core/workflows/help/modes/full.md +12 -0
- package/gsd-core/workflows/help/modes/topic.md +2 -0
- package/gsd-core/workflows/help.md +3 -1
- package/gsd-core/workflows/import.md +3 -3
- package/gsd-core/workflows/inbox.md +1 -1
- package/gsd-core/workflows/ingest-docs.md +1 -1
- package/gsd-core/workflows/insert-phase.md +2 -0
- package/gsd-core/workflows/list-phase-assumptions.md +2 -0
- package/gsd-core/workflows/list-seeds.md +2 -0
- package/gsd-core/workflows/list-workspaces.md +2 -0
- package/gsd-core/workflows/manager.md +3 -3
- package/gsd-core/workflows/map-codebase.md +52 -3
- package/gsd-core/workflows/milestone-summary.md +2 -0
- package/gsd-core/workflows/mvp-phase.md +1 -1
- package/gsd-core/workflows/new-milestone.md +55 -13
- package/gsd-core/workflows/new-project/detail/elaboration.md +216 -0
- package/gsd-core/workflows/new-project.md +37 -205
- package/gsd-core/workflows/new-workspace.md +1 -1
- package/gsd-core/workflows/next.md +2 -0
- package/gsd-core/workflows/node-repair.md +2 -0
- package/gsd-core/workflows/note.md +2 -0
- package/gsd-core/workflows/onboard.md +1 -1
- package/gsd-core/workflows/pause-work.md +19 -4
- package/gsd-core/workflows/plan-phase/detail/elaboration.md +209 -0
- package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +100 -18
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +2 -0
- package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +9 -0
- package/gsd-core/workflows/plan-phase.md +144 -185
- package/gsd-core/workflows/plan-review-convergence.md +102 -10
- package/gsd-core/workflows/plant-seed.md +1 -1
- package/gsd-core/workflows/pr-branch.md +30 -10
- package/gsd-core/workflows/profile-user.md +1 -1
- package/gsd-core/workflows/progress/steps/forensic-audit.md +1 -1
- package/gsd-core/workflows/progress.md +25 -3
- package/gsd-core/workflows/quick/steps/plan-checker-loop.md +37 -2
- package/gsd-core/workflows/quick/steps/research-phase.md +3 -3
- package/gsd-core/workflows/quick-batch/steps/batch-init.md +55 -0
- package/gsd-core/workflows/quick-batch/steps/completion.md +65 -0
- package/gsd-core/workflows/quick-batch/steps/merge-wave.md +100 -0
- package/gsd-core/workflows/quick-batch/steps/plan-checker-loop.md +147 -0
- package/gsd-core/workflows/quick-batch/steps/planner-wave.md +158 -0
- package/gsd-core/workflows/quick-batch/steps/research-phase.md +95 -0
- package/gsd-core/workflows/quick-batch/steps/resume-mode.md +49 -0
- package/gsd-core/workflows/quick-batch/steps/verification-wave.md +73 -0
- package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +169 -0
- package/gsd-core/workflows/quick-batch.md +203 -0
- package/gsd-core/workflows/quick.md +21 -4
- package/gsd-core/workflows/reapply-patches.md +79 -3
- package/gsd-core/workflows/remove-phase.md +2 -0
- package/gsd-core/workflows/remove-workspace.md +1 -1
- package/gsd-core/workflows/resume-project.md +6 -2
- package/gsd-core/workflows/review.md +215 -10
- package/gsd-core/workflows/scan.md +2 -0
- package/gsd-core/workflows/section-manifest.json +12 -0
- package/gsd-core/workflows/secure-phase.md +1 -1
- package/gsd-core/workflows/session-report.md +2 -0
- package/gsd-core/workflows/settings-advanced.md +2 -0
- package/gsd-core/workflows/settings-integrations.md +9 -8
- package/gsd-core/workflows/settings.md +19 -6
- package/gsd-core/workflows/ship.md +10 -10
- package/gsd-core/workflows/sketch-wrap-up.md +2 -0
- package/gsd-core/workflows/sketch.md +1 -1
- package/gsd-core/workflows/smart-entry.md +1 -1
- package/gsd-core/workflows/spec-phase.md +24 -19
- package/gsd-core/workflows/spike-wrap-up.md +2 -0
- package/gsd-core/workflows/spike.md +1 -1
- package/gsd-core/workflows/stats.md +2 -0
- package/gsd-core/workflows/sync-skills.md +12 -4
- package/gsd-core/workflows/thread.md +2 -0
- package/gsd-core/workflows/transition.md +2 -0
- package/gsd-core/workflows/ui-phase.md +26 -5
- package/gsd-core/workflows/ui-review.md +1 -1
- package/gsd-core/workflows/ultraplan-phase.md +2 -0
- package/gsd-core/workflows/undo.md +1 -1
- package/gsd-core/workflows/update.md +48 -43
- package/gsd-core/workflows/validate-phase.md +1 -1
- package/gsd-core/workflows/verify-work/detail/elaboration.md +230 -0
- package/gsd-core/workflows/verify-work.md +68 -182
- package/hooks/dist/gsd-agent-isolation-guard.js +42 -16
- package/hooks/dist/gsd-check-update-worker.js +19 -2
- package/hooks/dist/gsd-context-monitor.js +371 -27
- package/hooks/dist/gsd-cursor-subagent-start.js +34 -14
- package/hooks/dist/gsd-node-runner.sh +1 -0
- package/hooks/dist/gsd-prompt-guard.js +30 -5
- package/hooks/dist/gsd-read-guard.js +2 -0
- package/hooks/dist/gsd-read-injection-scanner.js +5 -5
- package/hooks/dist/gsd-secret-read-guard.js +1105 -0
- package/hooks/dist/gsd-statusline.js +18 -10
- package/hooks/dist/gsd-validate-commit.sh +474 -7
- package/hooks/dist/gsd-workflow-guard.js +2 -1
- package/hooks/dist/gsd-worktree-path-guard.js +25 -14
- package/hooks/dist/gsd-write-guard.js +46 -1
- package/hooks/dist/lib/dispatch-identity.js +187 -0
- package/hooks/dist/lib/filename-classification.js +64 -0
- package/hooks/dist/lib/git-cmd.js +210 -1
- package/hooks/dist/lib/injection-patterns.js +36 -6
- package/hooks/dist/lib/isolation-deny-reason.js +53 -1
- package/hooks/dist/lib/isolation-sentinel.js +58 -19
- package/hooks/dist/managed-hooks-registry.cjs +1 -0
- package/hooks/gsd-agent-isolation-guard.js +42 -16
- package/hooks/gsd-check-update-worker.js +19 -2
- package/hooks/gsd-context-monitor.js +371 -27
- package/hooks/gsd-cursor-subagent-start.js +34 -14
- package/hooks/gsd-node-runner.sh +1 -0
- package/hooks/gsd-prompt-guard.js +30 -5
- package/hooks/gsd-read-guard.js +2 -0
- package/hooks/gsd-read-injection-scanner.js +5 -5
- package/hooks/gsd-secret-read-guard.js +1105 -0
- package/hooks/gsd-statusline.js +18 -10
- package/hooks/gsd-validate-commit.sh +474 -7
- package/hooks/gsd-workflow-guard.js +2 -1
- package/hooks/gsd-worktree-path-guard.js +25 -14
- package/hooks/gsd-write-guard.js +46 -1
- package/hooks/hooks.json +6 -0
- package/hooks/lib/dispatch-identity.js +187 -0
- package/hooks/lib/filename-classification.js +64 -0
- package/hooks/lib/git-cmd.js +210 -1
- package/hooks/lib/injection-patterns.js +36 -6
- package/hooks/lib/isolation-deny-reason.js +53 -1
- package/hooks/lib/isolation-sentinel.js +58 -19
- package/hooks/managed-hooks-registry.cjs +1 -0
- package/package.json +13 -9
- package/scripts/benchmark-compact-content-variants.cjs +298 -0
- package/scripts/benchmark-compact-content.cjs +368 -0
- package/scripts/build-hooks.js +11 -4
- package/scripts/check-contract-drift.cjs +4 -1
- package/scripts/check-env.cjs +36 -8
- package/scripts/check-glossary-refs.cjs +25 -21
- package/scripts/ci-next-health.cjs +271 -0
- package/scripts/ci-prepare-test-scope.cjs +7 -7
- package/scripts/ci-test-scope.cjs +133 -20
- package/scripts/ci-timeout-report.cjs +1 -1
- package/scripts/diff-touches-shipped-paths.cjs +1 -1
- package/scripts/docs-guard-registry.cjs +17 -2
- package/scripts/gen-adr-index.cjs +8 -2
- package/scripts/gen-inventory-manifest.cjs +12 -0
- package/scripts/gen-loop-host-contract.cjs +67 -15
- package/scripts/gen-platform-conformance-tier.cjs +557 -0
- package/scripts/lib/drift-scan.cjs +1 -1
- package/scripts/lib/macos-conformance-tier.generated.cjs +210 -0
- package/scripts/lib/npm-version-check-diagnosis.cjs +59 -0
- package/scripts/lib/platform-conformance-tier.generated.cjs +276 -0
- package/scripts/lib/shellcheck-fetch.cjs +247 -0
- package/scripts/lib/suite-detection.cjs +32 -0
- package/scripts/lint-allow-test-rule-refs.allowlist.json +0 -6
- package/scripts/lint-allow-test-rule-refs.effective-ceiling.json +1 -1
- package/scripts/lint-allow-test-rule-refs.unverified-ceiling.json +1 -1
- package/scripts/lint-allowed-tools-parity.cjs +221 -0
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +24 -2
- package/scripts/lint-phase-enumeration-drift.cjs +24 -6
- package/scripts/lint-phase-id-drift.cjs +465 -15
- package/scripts/lint-portable-grep.cjs +176 -0
- package/scripts/lint-response-language-coverage.cjs +530 -0
- package/scripts/lint-source-test-name-collision.cjs +1 -1
- package/scripts/lint-test-file-count.allowlist.json +4 -1
- package/scripts/lint-vendored-deps.cjs +128 -17
- package/scripts/lint-workflow-shellcheck-baseline.json +1112 -0
- package/scripts/lint-workflow-shellcheck.cjs +614 -0
- package/scripts/npm-audit-baseline.cjs +376 -0
- package/scripts/prompt-injection-scan.sh +22 -0
- package/scripts/require-issue-link-policy.cjs +16 -1
- package/scripts/workflow-size.cjs +139 -0
- package/skills/gsd-cleanup/SKILL.md +1 -0
- package/skills/gsd-code-review/SKILL.md +2 -1
- package/skills/gsd-complete-milestone/SKILL.md +1 -0
- package/skills/gsd-config/SKILL.md +1 -0
- package/skills/gsd-debug/SKILL.md +1 -0
- package/skills/gsd-execute-phase/SKILL.md +1 -1
- package/skills/gsd-graphify/SKILL.md +1 -0
- package/skills/gsd-health/SKILL.md +1 -0
- package/skills/gsd-mempalace-capture/SKILL.md +1 -0
- package/skills/gsd-mempalace-recall/SKILL.md +1 -0
- package/skills/gsd-new-milestone/SKILL.md +1 -0
- package/skills/gsd-new-project/SKILL.md +1 -0
- package/skills/gsd-next/SKILL.md +1 -0
- package/skills/gsd-ns-workflow/SKILL.md +1 -0
- package/skills/gsd-pause-work/SKILL.md +1 -0
- package/skills/gsd-phase/SKILL.md +2 -1
- package/skills/gsd-pr-branch/SKILL.md +1 -0
- package/skills/gsd-quick-batch/SKILL.md +105 -0
- package/skills/gsd-resume-work/SKILL.md +1 -0
- package/skills/gsd-review-backlog/SKILL.md +1 -0
- package/skills/gsd-settings/SKILL.md +2 -1
- package/skills/gsd-stats/SKILL.md +1 -0
- package/skills/gsd-surface/SKILL.md +18 -8
- package/skills/gsd-thread/SKILL.md +1 -0
- package/skills/gsd-workspace/SKILL.md +1 -0
- package/skills/gsd-workstreams/SKILL.md +1 -0
- package/vscode/package.json +1 -1
- package/gsd-core/templates/claude-md.md +0 -145
- package/gsd-core/templates/codebase/concerns.md +0 -310
- package/gsd-core/templates/codebase/conventions.md +0 -307
- package/gsd-core/templates/codebase/integrations.md +0 -280
- package/gsd-core/templates/codebase/structure.md +0 -285
- package/gsd-core/templates/codebase/testing.md +0 -480
- package/gsd-core/templates/debug-subagent-prompt.md +0 -91
- package/gsd-core/templates/discovery.md +0 -146
|
@@ -10,7 +10,7 @@ const capabilities = {
|
|
|
10
10
|
"ai-integration": {
|
|
11
11
|
"id": "ai-integration",
|
|
12
12
|
"role": "feature",
|
|
13
|
-
"version": "1.
|
|
13
|
+
"version": "1.14.0",
|
|
14
14
|
"title": "AI design contract",
|
|
15
15
|
"description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
|
|
16
16
|
"tier": "full",
|
|
@@ -95,7 +95,7 @@ const capabilities = {
|
|
|
95
95
|
"antigravity": {
|
|
96
96
|
"id": "antigravity",
|
|
97
97
|
"role": "runtime",
|
|
98
|
-
"version": "1.
|
|
98
|
+
"version": "1.14.0",
|
|
99
99
|
"title": "Antigravity",
|
|
100
100
|
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
101
101
|
"tier": "core",
|
|
@@ -183,7 +183,8 @@ const capabilities = {
|
|
|
183
183
|
"background": true,
|
|
184
184
|
"subagentToolkit": "full",
|
|
185
185
|
"backgroundDispatch": "undocumented",
|
|
186
|
-
"isolation": "undocumented"
|
|
186
|
+
"isolation": "undocumented",
|
|
187
|
+
"maxConcurrency": "undocumented"
|
|
187
188
|
},
|
|
188
189
|
"modelMode": "passive",
|
|
189
190
|
"hookBus": "host",
|
|
@@ -214,7 +215,7 @@ const capabilities = {
|
|
|
214
215
|
"binary": "agy",
|
|
215
216
|
"args": [
|
|
216
217
|
"--print-timeout",
|
|
217
|
-
"
|
|
218
|
+
"{{nativeTimeout}}",
|
|
218
219
|
"{{model}}",
|
|
219
220
|
"-p",
|
|
220
221
|
"{{prompt}}"
|
|
@@ -225,12 +226,15 @@ const capabilities = {
|
|
|
225
226
|
"effortChannel": "none"
|
|
226
227
|
},
|
|
227
228
|
"timeoutFloorMs": 600000,
|
|
229
|
+
"timeoutConfigKey": "review.timeouts.antigravity",
|
|
228
230
|
"emptyOutput": "handler-owned",
|
|
229
231
|
"reviewsSection": "Antigravity",
|
|
230
232
|
"evidenceClass": "source-grounded",
|
|
231
233
|
"requiresBinaries": [],
|
|
232
234
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.antigravity",
|
|
233
235
|
"modelConfigKey": "review.models.agy",
|
|
236
|
+
"effortConfigKey": null,
|
|
237
|
+
"defaultEffort": null,
|
|
234
238
|
"handler": "antigravity"
|
|
235
239
|
},
|
|
236
240
|
"config": {
|
|
@@ -243,13 +247,18 @@ const capabilities = {
|
|
|
243
247
|
"type": "number",
|
|
244
248
|
"default": -1,
|
|
245
249
|
"description": "Prompt-token budget for the Antigravity reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\". Keyed on the reviewer slug `antigravity`, not the `agy` binary alias used by review.models.agy."
|
|
250
|
+
},
|
|
251
|
+
"review.timeouts.antigravity": {
|
|
252
|
+
"type": "number",
|
|
253
|
+
"default": -1,
|
|
254
|
+
"description": "Outer wall-clock timeout override (seconds) for the Antigravity reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
246
255
|
}
|
|
247
256
|
}
|
|
248
257
|
},
|
|
249
258
|
"assumption-delta": {
|
|
250
259
|
"id": "assumption-delta",
|
|
251
260
|
"role": "feature",
|
|
252
|
-
"version": "1.
|
|
261
|
+
"version": "1.14.0",
|
|
253
262
|
"title": "Assumption-delta architecture checkpoint",
|
|
254
263
|
"description": "Rarely-firing advisory checkpoint that triggers when a phase makes something plural, optional, or chosen that used to be singular, required, or derived. Surfaces one identity-model question (promote the new general representation to primary, or add it alongside?) so a silent primary-key drift does not accumulate into a later user-facing bug. Non-blocking; fires only on a detected signal.",
|
|
255
264
|
"tier": "full",
|
|
@@ -295,7 +304,7 @@ const capabilities = {
|
|
|
295
304
|
"audit": {
|
|
296
305
|
"id": "audit",
|
|
297
306
|
"role": "feature",
|
|
298
|
-
"version": "1.
|
|
307
|
+
"version": "1.14.0",
|
|
299
308
|
"title": "Audit",
|
|
300
309
|
"description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `gsd-tools audit-uat` (cross-phase UAT outstanding items) and `gsd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
|
|
301
310
|
"tier": "full",
|
|
@@ -332,7 +341,7 @@ const capabilities = {
|
|
|
332
341
|
"augment": {
|
|
333
342
|
"id": "augment",
|
|
334
343
|
"role": "runtime",
|
|
335
|
-
"version": "1.
|
|
344
|
+
"version": "1.14.0",
|
|
336
345
|
"title": "Augment Code",
|
|
337
346
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
338
347
|
"tier": "core",
|
|
@@ -431,7 +440,8 @@ const capabilities = {
|
|
|
431
440
|
"background": true,
|
|
432
441
|
"subagentToolkit": "full",
|
|
433
442
|
"backgroundDispatch": "undocumented",
|
|
434
|
-
"isolation": "undocumented"
|
|
443
|
+
"isolation": "undocumented",
|
|
444
|
+
"maxConcurrency": "undocumented"
|
|
435
445
|
},
|
|
436
446
|
"modelMode": "passive",
|
|
437
447
|
"hookBus": "host",
|
|
@@ -445,7 +455,7 @@ const capabilities = {
|
|
|
445
455
|
"broken-windows": {
|
|
446
456
|
"id": "broken-windows",
|
|
447
457
|
"role": "feature",
|
|
448
|
-
"version": "1.
|
|
458
|
+
"version": "1.14.0",
|
|
449
459
|
"title": "Broken-windows ledger",
|
|
450
460
|
"description": "Cross-phase defect register accumulating stubs, TODOs, skipped tests, unrun verifies, and unmet truths into .planning/WINDOWS.md. When enforcement is enabled, it blocks /gsd-ship while any window is open unless explicitly waived with a recorded reason. Operationalizes GSD's no-defer discipline as a tracked artifact (issue #1950).",
|
|
451
461
|
"tier": "full",
|
|
@@ -491,7 +501,7 @@ const capabilities = {
|
|
|
491
501
|
"claude": {
|
|
492
502
|
"id": "claude",
|
|
493
503
|
"role": "runtime",
|
|
494
|
-
"version": "1.
|
|
504
|
+
"version": "1.14.0",
|
|
495
505
|
"title": "Claude Code",
|
|
496
506
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
497
507
|
"tier": "core",
|
|
@@ -575,7 +585,8 @@ const capabilities = {
|
|
|
575
585
|
"background": true,
|
|
576
586
|
"subagentToolkit": "full",
|
|
577
587
|
"backgroundDispatch": false,
|
|
578
|
-
"isolation": "harness-worktree"
|
|
588
|
+
"isolation": "harness-worktree",
|
|
589
|
+
"maxConcurrency": 20
|
|
579
590
|
},
|
|
580
591
|
"modelMode": "passive",
|
|
581
592
|
"hookBus": "host",
|
|
@@ -634,12 +645,15 @@ const capabilities = {
|
|
|
634
645
|
}
|
|
635
646
|
},
|
|
636
647
|
"timeoutFloorMs": 1200000,
|
|
648
|
+
"timeoutConfigKey": "review.timeouts.claude",
|
|
637
649
|
"emptyOutput": "stub-with-stderr",
|
|
638
650
|
"reviewsSection": "Claude",
|
|
639
651
|
"evidenceClass": "source-grounded",
|
|
640
652
|
"requiresBinaries": [],
|
|
641
653
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.claude",
|
|
642
654
|
"modelConfigKey": "review.models.claude",
|
|
655
|
+
"effortConfigKey": "review.effort.claude",
|
|
656
|
+
"defaultEffort": "high",
|
|
643
657
|
"handler": null
|
|
644
658
|
},
|
|
645
659
|
"config": {
|
|
@@ -652,13 +666,23 @@ const capabilities = {
|
|
|
652
666
|
"type": "number",
|
|
653
667
|
"default": -1,
|
|
654
668
|
"description": "Prompt-token budget for the Claude reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
669
|
+
},
|
|
670
|
+
"review.timeouts.claude": {
|
|
671
|
+
"type": "number",
|
|
672
|
+
"default": -1,
|
|
673
|
+
"description": "Outer wall-clock timeout override (seconds) for the Claude reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
674
|
+
},
|
|
675
|
+
"review.effort.claude": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"default": "",
|
|
678
|
+
"description": "Reasoning effort for the Claude reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
655
679
|
}
|
|
656
680
|
}
|
|
657
681
|
},
|
|
658
682
|
"claude-orchestration": {
|
|
659
683
|
"id": "claude-orchestration",
|
|
660
684
|
"role": "feature",
|
|
661
|
-
"version": "1.
|
|
685
|
+
"version": "1.14.0",
|
|
662
686
|
"title": "Claude orchestration (Workflow backend)",
|
|
663
687
|
"description": "Default-off, BETA, claude-only capability that adopts Claude Code's Workflow tool (the engine behind /effort ultracode) as an optional parallel-execution backend for the GSD loop. When the runtime exposes the Workflow tool and claude_orchestration.execution_backend resolves to 'workflow', execute-phase emits a generated Workflow script (waves -> parallel() barriers, plans -> agent({ agentType: 'gsd-executor', isolation: 'worktree' }), files_modified overlap -> separate sequential stages, resumeFromRunId wired to the phase run id, shared token budget) that composes the SAME gsd-executor agent and worktree isolation the inline path uses, restoring the wave parallelism the #853 backgrounded-agent nesting limitation forces inline on Claude Code. (The plan-checker and verifier remain inline until separately wired — this capability delivers the parallel-execution backend, not those gates.) Also folds the ultraplan plan-offload under one runtime gate (plan:* surface). On any runtime lacking the Workflow tool, or when the capability is disabled, behaviour is byte-identical to today (inline/manual dispatch). Detection + emission live in gsd-core/bin/lib/claude-orchestration.cjs (pure, fail-closed). Mirrors the existing gsd-ultraplan-phase BETA-isolation posture.",
|
|
664
688
|
"tier": "full",
|
|
@@ -746,7 +770,7 @@ const capabilities = {
|
|
|
746
770
|
"cline": {
|
|
747
771
|
"id": "cline",
|
|
748
772
|
"role": "runtime",
|
|
749
|
-
"version": "1.
|
|
773
|
+
"version": "1.14.0",
|
|
750
774
|
"title": "Cline",
|
|
751
775
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
752
776
|
"tier": "core",
|
|
@@ -816,7 +840,8 @@ const capabilities = {
|
|
|
816
840
|
"background": true,
|
|
817
841
|
"subagentToolkit": "read-only",
|
|
818
842
|
"backgroundDispatch": false,
|
|
819
|
-
"isolation": "undocumented"
|
|
843
|
+
"isolation": "undocumented",
|
|
844
|
+
"maxConcurrency": "undocumented"
|
|
820
845
|
},
|
|
821
846
|
"modelMode": "active",
|
|
822
847
|
"hookBus": "host",
|
|
@@ -838,7 +863,7 @@ const capabilities = {
|
|
|
838
863
|
"code-review": {
|
|
839
864
|
"id": "code-review",
|
|
840
865
|
"role": "feature",
|
|
841
|
-
"version": "1.
|
|
866
|
+
"version": "1.14.0",
|
|
842
867
|
"title": "Code review",
|
|
843
868
|
"description": "Source-file code review and review-fix workflow support for completed execution work.",
|
|
844
869
|
"tier": "full",
|
|
@@ -875,6 +900,15 @@ const capabilities = {
|
|
|
875
900
|
],
|
|
876
901
|
"default": "standard",
|
|
877
902
|
"description": "Default depth for code review when no --depth override is supplied."
|
|
903
|
+
},
|
|
904
|
+
"workflow.code_review_point": {
|
|
905
|
+
"type": "enum",
|
|
906
|
+
"values": [
|
|
907
|
+
"execute:post",
|
|
908
|
+
"execute:wave:post"
|
|
909
|
+
],
|
|
910
|
+
"default": "execute:post",
|
|
911
|
+
"description": "Loop point at which the code-review step registers — execute:post reviews once per phase (default); execute:wave:post reviews once per completed wave, scoped to that wave's diff."
|
|
878
912
|
}
|
|
879
913
|
},
|
|
880
914
|
"steps": [
|
|
@@ -889,7 +923,23 @@ const capabilities = {
|
|
|
889
923
|
"consumes": [
|
|
890
924
|
"SUMMARY.md"
|
|
891
925
|
],
|
|
926
|
+
"supportsReviewerLanes": true,
|
|
892
927
|
"when": "workflow.code_review",
|
|
928
|
+
"pointFrom": "workflow.code_review_point",
|
|
929
|
+
"onError": "skip"
|
|
930
|
+
},
|
|
931
|
+
{
|
|
932
|
+
"point": "execute:wave:post",
|
|
933
|
+
"ref": {
|
|
934
|
+
"skill": "code-review"
|
|
935
|
+
},
|
|
936
|
+
"produces": [
|
|
937
|
+
"REVIEW.md"
|
|
938
|
+
],
|
|
939
|
+
"consumes": [],
|
|
940
|
+
"supportsReviewerLanes": true,
|
|
941
|
+
"when": "workflow.code_review",
|
|
942
|
+
"pointFrom": "workflow.code_review_point",
|
|
893
943
|
"onError": "skip"
|
|
894
944
|
}
|
|
895
945
|
],
|
|
@@ -899,7 +949,7 @@ const capabilities = {
|
|
|
899
949
|
"codebuddy": {
|
|
900
950
|
"id": "codebuddy",
|
|
901
951
|
"role": "runtime",
|
|
902
|
-
"version": "1.
|
|
952
|
+
"version": "1.14.0",
|
|
903
953
|
"title": "CodeBuddy",
|
|
904
954
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
905
955
|
"tier": "core",
|
|
@@ -999,7 +1049,8 @@ const capabilities = {
|
|
|
999
1049
|
"background": true,
|
|
1000
1050
|
"subagentToolkit": "full",
|
|
1001
1051
|
"backgroundDispatch": false,
|
|
1002
|
-
"isolation": "undocumented"
|
|
1052
|
+
"isolation": "undocumented",
|
|
1053
|
+
"maxConcurrency": "undocumented"
|
|
1003
1054
|
},
|
|
1004
1055
|
"modelMode": "passive",
|
|
1005
1056
|
"hookBus": "host",
|
|
@@ -1016,7 +1067,7 @@ const capabilities = {
|
|
|
1016
1067
|
"coderabbit": {
|
|
1017
1068
|
"id": "coderabbit",
|
|
1018
1069
|
"role": "reviewer",
|
|
1019
|
-
"version": "1.
|
|
1070
|
+
"version": "1.14.0",
|
|
1020
1071
|
"title": "CodeRabbit",
|
|
1021
1072
|
"description": "CodeRabbit CLI — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). Reviews the working-tree diff (`coderabbit review --prompt-only`), not the source tree, and accepts neither a prompt nor a model flag; findings are down-weighted in consensus (evidenceClass: diff-only).",
|
|
1022
1073
|
"tier": "full",
|
|
@@ -1046,12 +1097,15 @@ const capabilities = {
|
|
|
1046
1097
|
"effortChannel": "none"
|
|
1047
1098
|
},
|
|
1048
1099
|
"timeoutFloorMs": 360000,
|
|
1100
|
+
"timeoutConfigKey": null,
|
|
1049
1101
|
"emptyOutput": "stub-with-stderr",
|
|
1050
1102
|
"reviewsSection": "CodeRabbit",
|
|
1051
1103
|
"evidenceClass": "diff-only",
|
|
1052
1104
|
"requiresBinaries": [],
|
|
1053
1105
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.coderabbit",
|
|
1054
1106
|
"modelConfigKey": null,
|
|
1107
|
+
"effortConfigKey": null,
|
|
1108
|
+
"defaultEffort": null,
|
|
1055
1109
|
"handler": null
|
|
1056
1110
|
},
|
|
1057
1111
|
"config": {
|
|
@@ -1065,7 +1119,7 @@ const capabilities = {
|
|
|
1065
1119
|
"codex": {
|
|
1066
1120
|
"id": "codex",
|
|
1067
1121
|
"role": "runtime",
|
|
1068
|
-
"version": "1.
|
|
1122
|
+
"version": "1.14.0",
|
|
1069
1123
|
"title": "OpenAI Codex CLI",
|
|
1070
1124
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
1071
1125
|
"tier": "core",
|
|
@@ -1149,7 +1203,8 @@ const capabilities = {
|
|
|
1149
1203
|
"background": true,
|
|
1150
1204
|
"subagentToolkit": "full",
|
|
1151
1205
|
"backgroundDispatch": true,
|
|
1152
|
-
"isolation": "orchestrator-worktree"
|
|
1206
|
+
"isolation": "orchestrator-worktree",
|
|
1207
|
+
"maxConcurrency": "undocumented"
|
|
1153
1208
|
},
|
|
1154
1209
|
"modelMode": "passive",
|
|
1155
1210
|
"hookBus": "host",
|
|
@@ -1172,7 +1227,11 @@ const capabilities = {
|
|
|
1172
1227
|
"tomlConfigInstall": true,
|
|
1173
1228
|
"cleanupSkillSidecars": true,
|
|
1174
1229
|
"agentTomlFiles": true,
|
|
1175
|
-
"frontmatterDialect": "codex"
|
|
1230
|
+
"frontmatterDialect": "codex",
|
|
1231
|
+
"unsupportedFeatures": [
|
|
1232
|
+
"context-warnings",
|
|
1233
|
+
"phase-lifecycle-display"
|
|
1234
|
+
]
|
|
1176
1235
|
}
|
|
1177
1236
|
},
|
|
1178
1237
|
"reviewer": {
|
|
@@ -1203,12 +1262,15 @@ const capabilities = {
|
|
|
1203
1262
|
"effortChannel": "argv"
|
|
1204
1263
|
},
|
|
1205
1264
|
"timeoutFloorMs": 1200000,
|
|
1265
|
+
"timeoutConfigKey": "review.timeouts.codex",
|
|
1206
1266
|
"emptyOutput": "stub-with-stderr",
|
|
1207
1267
|
"reviewsSection": "Codex",
|
|
1208
1268
|
"evidenceClass": "source-grounded",
|
|
1209
1269
|
"requiresBinaries": [],
|
|
1210
1270
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.codex",
|
|
1211
1271
|
"modelConfigKey": "review.models.codex",
|
|
1272
|
+
"effortConfigKey": "review.effort.codex",
|
|
1273
|
+
"defaultEffort": "high",
|
|
1212
1274
|
"handler": null
|
|
1213
1275
|
},
|
|
1214
1276
|
"config": {
|
|
@@ -1221,13 +1283,23 @@ const capabilities = {
|
|
|
1221
1283
|
"type": "number",
|
|
1222
1284
|
"default": -1,
|
|
1223
1285
|
"description": "Prompt-token budget for the Codex reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
1286
|
+
},
|
|
1287
|
+
"review.timeouts.codex": {
|
|
1288
|
+
"type": "number",
|
|
1289
|
+
"default": -1,
|
|
1290
|
+
"description": "Outer wall-clock timeout override (seconds) for the Codex reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
1291
|
+
},
|
|
1292
|
+
"review.effort.codex": {
|
|
1293
|
+
"type": "string",
|
|
1294
|
+
"default": "",
|
|
1295
|
+
"description": "Reasoning effort for the Codex reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
1224
1296
|
}
|
|
1225
1297
|
}
|
|
1226
1298
|
},
|
|
1227
1299
|
"copilot": {
|
|
1228
1300
|
"id": "copilot",
|
|
1229
1301
|
"role": "runtime",
|
|
1230
|
-
"version": "1.
|
|
1302
|
+
"version": "1.14.0",
|
|
1231
1303
|
"title": "GitHub Copilot",
|
|
1232
1304
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
1233
1305
|
"tier": "core",
|
|
@@ -1306,7 +1378,8 @@ const capabilities = {
|
|
|
1306
1378
|
"background": true,
|
|
1307
1379
|
"subagentToolkit": "full",
|
|
1308
1380
|
"backgroundDispatch": false,
|
|
1309
|
-
"isolation": "undocumented"
|
|
1381
|
+
"isolation": "undocumented",
|
|
1382
|
+
"maxConcurrency": "undocumented"
|
|
1310
1383
|
},
|
|
1311
1384
|
"modelMode": "passive",
|
|
1312
1385
|
"hookBus": "host",
|
|
@@ -1326,7 +1399,7 @@ const capabilities = {
|
|
|
1326
1399
|
"cursor": {
|
|
1327
1400
|
"id": "cursor",
|
|
1328
1401
|
"role": "runtime",
|
|
1329
|
-
"version": "1.
|
|
1402
|
+
"version": "1.14.0",
|
|
1330
1403
|
"title": "Cursor",
|
|
1331
1404
|
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
1332
1405
|
"tier": "core",
|
|
@@ -1405,7 +1478,8 @@ const capabilities = {
|
|
|
1405
1478
|
"background": true,
|
|
1406
1479
|
"subagentToolkit": "full",
|
|
1407
1480
|
"backgroundDispatch": true,
|
|
1408
|
-
"isolation": "harness-worktree"
|
|
1481
|
+
"isolation": "harness-worktree",
|
|
1482
|
+
"maxConcurrency": "undocumented"
|
|
1409
1483
|
},
|
|
1410
1484
|
"modelMode": "passive",
|
|
1411
1485
|
"hookBus": "host",
|
|
@@ -1453,6 +1527,7 @@ const capabilities = {
|
|
|
1453
1527
|
"binary": "cursor-agent",
|
|
1454
1528
|
"args": [
|
|
1455
1529
|
"-p",
|
|
1530
|
+
"{{model}}",
|
|
1456
1531
|
"--mode",
|
|
1457
1532
|
"ask",
|
|
1458
1533
|
"--trust",
|
|
@@ -1462,19 +1537,27 @@ const capabilities = {
|
|
|
1462
1537
|
],
|
|
1463
1538
|
"promptChannel": "argv-file-ref",
|
|
1464
1539
|
"outputChannel": "stdout",
|
|
1465
|
-
"modelArg":
|
|
1540
|
+
"modelArg": "--model",
|
|
1466
1541
|
"effortChannel": "none"
|
|
1467
1542
|
},
|
|
1468
1543
|
"timeoutFloorMs": 900000,
|
|
1544
|
+
"timeoutConfigKey": null,
|
|
1469
1545
|
"emptyOutput": "stub-with-stderr",
|
|
1470
1546
|
"reviewsSection": "Cursor",
|
|
1471
1547
|
"evidenceClass": "source-grounded",
|
|
1472
1548
|
"requiresBinaries": [],
|
|
1473
1549
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.cursor",
|
|
1474
|
-
"modelConfigKey":
|
|
1550
|
+
"modelConfigKey": "review.models.cursor",
|
|
1551
|
+
"effortConfigKey": null,
|
|
1552
|
+
"defaultEffort": null,
|
|
1475
1553
|
"handler": null
|
|
1476
1554
|
},
|
|
1477
1555
|
"config": {
|
|
1556
|
+
"review.models.cursor": {
|
|
1557
|
+
"type": "string",
|
|
1558
|
+
"default": "",
|
|
1559
|
+
"description": "Model passed to the Cursor reviewer lane."
|
|
1560
|
+
},
|
|
1478
1561
|
"review.max_prompt_tokens_per_reviewer.cursor": {
|
|
1479
1562
|
"type": "number",
|
|
1480
1563
|
"default": -1,
|
|
@@ -1485,7 +1568,7 @@ const capabilities = {
|
|
|
1485
1568
|
"drift": {
|
|
1486
1569
|
"id": "drift",
|
|
1487
1570
|
"role": "feature",
|
|
1488
|
-
"version": "1.
|
|
1571
|
+
"version": "1.14.0",
|
|
1489
1572
|
"title": "Drift detection gates",
|
|
1490
1573
|
"description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions not reflected in STRUCTURE.md). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
|
|
1491
1574
|
"tier": "full",
|
|
@@ -1526,6 +1609,20 @@ const capabilities = {
|
|
|
1526
1609
|
"type": "boolean",
|
|
1527
1610
|
"default": true,
|
|
1528
1611
|
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (structural additions exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
|
|
1612
|
+
},
|
|
1613
|
+
"workflow.context_drift_precheck": {
|
|
1614
|
+
"type": "boolean",
|
|
1615
|
+
"default": true,
|
|
1616
|
+
"description": "Enable the non-blocking context-drift pre-check at plan:pre, before /gsd:plan-phase reuses an existing RESEARCH.md/PATTERNS.md/VALIDATION.md/SPEC.md. Compares each artifact's effective last-changed time (git commit time, falling back to mtime for uncommitted edits) against CONTEXT.md's own — an artifact that predates CONTEXT.md's newest decision was derived from a premise that has since changed. Warn-only by default (see workflow.context_drift_action); never blocks planning on its own."
|
|
1617
|
+
},
|
|
1618
|
+
"workflow.context_drift_action": {
|
|
1619
|
+
"type": "enum",
|
|
1620
|
+
"values": [
|
|
1621
|
+
"warn",
|
|
1622
|
+
"block"
|
|
1623
|
+
],
|
|
1624
|
+
"default": "warn",
|
|
1625
|
+
"description": "Action taken by the context-drift gate when a stale upstream artifact is found: warn (advisory message naming the stale artifacts and how to regenerate them) or block (halt plan-phase until the artifacts are regenerated or the check is disabled)."
|
|
1529
1626
|
}
|
|
1530
1627
|
},
|
|
1531
1628
|
"steps": [],
|
|
@@ -1557,15 +1654,24 @@ const capabilities = {
|
|
|
1557
1654
|
"when": "workflow.plan_drift_precheck",
|
|
1558
1655
|
"blocking": false,
|
|
1559
1656
|
"onError": "skip"
|
|
1657
|
+
},
|
|
1658
|
+
{
|
|
1659
|
+
"point": "plan:pre",
|
|
1660
|
+
"check": {
|
|
1661
|
+
"query": "verify.context-drift"
|
|
1662
|
+
},
|
|
1663
|
+
"when": "workflow.context_drift_precheck",
|
|
1664
|
+
"blocking": false,
|
|
1665
|
+
"onError": "skip"
|
|
1560
1666
|
}
|
|
1561
1667
|
]
|
|
1562
1668
|
},
|
|
1563
1669
|
"external-job": {
|
|
1564
1670
|
"id": "external-job",
|
|
1565
1671
|
"role": "feature",
|
|
1566
|
-
"version": "1.
|
|
1672
|
+
"version": "1.14.0",
|
|
1567
1673
|
"title": "Async external-job scheduler adapter",
|
|
1568
|
-
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies execute:wave:pre
|
|
1674
|
+
"description": "Default-off producer of the async external-job manifest (#1164). At execute:wave:post an executor can externalize long-running compute (SLURM first, scheduler-pluggable), commit a .planning/async-jobs/<job>.json manifest, defer SUMMARY.md, and return external_job_waiting. The core loop (#1165) consumes the manifest; this capability is the only thing that writes it. NOTE on contribution point: #1164 specifies classification at execute:wave:pre and recording at execute:wave:post. This capability still contributes executor guidance at wave:post; execute-phase now renders wave:pre entries and dispatches generic step hooks there independently. Moving external-job classification to wave:pre is a separate capability change, not part of #4148. The adapter (scripts/slurm-adapter.cjs) reads external_job.submit_timeout_ms / poll_timeout_ms / artifact_dir through the canonical capability-config seam (env override > config > registry default).",
|
|
1569
1675
|
"tier": "full",
|
|
1570
1676
|
"requires": [],
|
|
1571
1677
|
"engines": {
|
|
@@ -1617,7 +1723,7 @@ const capabilities = {
|
|
|
1617
1723
|
"into": "executor",
|
|
1618
1724
|
"fragment": {
|
|
1619
1725
|
"path": "fragments/execute-wave-post.md",
|
|
1620
|
-
"inline": "<!-- external-job capability — execute:wave:post fragment, injected into the executor (#1164).\n\n
|
|
1726
|
+
"inline": "<!-- external-job capability — execute:wave:post fragment, injected into the executor (#1164).\n\n #1164 specifies classification at wave:pre and recording at wave:post. This\n capability still contributes executor guidance at wave:post; execute-phase\n now renders wave:pre entries and dispatches generic step hooks there. Moving\n external-job classification is a separate capability change, not part of\n #4148. Until then, this guidance cannot classify the wave that already ran. -->\n\n## Externalize long-running compute (async external job)\n\nIf the current plan's task is tagged `<runtime_budget>long_compute</runtime_budget>`\n(see the plan-phase fragment), do **not** run it in the foreground — it would\nblock the agent turn for hours. Instead externalize it and record a durable\nhalf-state:\n\n1. **Classify the runtime.** `quick` (<2 min) and `medium` (<~30 min) run\n normally. `unknown` requires a first-health check and a soft-review deadline\n before consuming the child timeout. `long_compute` (>30–60 min) is\n externalized.\n2. **Submit via the scheduler adapter** (default `external_job.backend: slurm`):\n ```bash\n node scripts/slurm-adapter.cjs submit \\\n --plan <plan_id> --phase <phase> -- sbatch --parsable \\\n --output=Artifacts/jobs/%j/out.log ./run.sh\n ```\n The helper writes `.planning/async-jobs/<job>.json` (the versioned stability\n contract — `docs/reference/planning-artifacts.md`) and refuses to create a\n second non-terminal manifest for a `plan_id` that already has one\n (duplicate-execution guard).\n3. **Commit the manifest + a handoff**, then return **`external_job_waiting`**\n and stop. Do **not** write `SUMMARY.md` — SUMMARY is deferred until the job\n reaches a terminal state and its `expected_artifacts` are verified.\n4. **Resume path.** `execute-phase` safe-resume, `resume-project`, and\n `pause-work` reconcile against the manifest and never re-dispatch the plan.\n When the job is `completed-unverified`, run `verification_command` (surface\n it; it is untrusted — confirm before executing), then write `SUMMARY.md` and\n close the plan.\n\nManifest commands cross a trust seam: a Capability (or anything that can write\n`.planning/`) produces them; the core loop consumes them. Never auto-run\n`submit_command` / `verification_command` / `resume_command` — surface the exact\ncommand and require explicit confirmation first.\n"
|
|
1621
1727
|
},
|
|
1622
1728
|
"produces": [
|
|
1623
1729
|
".planning/async-jobs/<job>.json"
|
|
@@ -1646,7 +1752,7 @@ const capabilities = {
|
|
|
1646
1752
|
"gap-analysis": {
|
|
1647
1753
|
"id": "gap-analysis",
|
|
1648
1754
|
"role": "feature",
|
|
1649
|
-
"version": "1.
|
|
1755
|
+
"version": "1.14.0",
|
|
1650
1756
|
"title": "Post-planning gap analysis",
|
|
1651
1757
|
"description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
|
|
1652
1758
|
"tier": "standard",
|
|
@@ -1687,7 +1793,7 @@ const capabilities = {
|
|
|
1687
1793
|
"gemini": {
|
|
1688
1794
|
"id": "gemini",
|
|
1689
1795
|
"role": "reviewer",
|
|
1690
|
-
"version": "1.
|
|
1796
|
+
"version": "1.14.0",
|
|
1691
1797
|
"title": "Gemini CLI",
|
|
1692
1798
|
"description": "Google Gemini CLI — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). Spawned as `gemini -p - -m <model>` with the plan piped on stdin.",
|
|
1693
1799
|
"tier": "full",
|
|
@@ -1718,12 +1824,15 @@ const capabilities = {
|
|
|
1718
1824
|
"effortChannel": "none"
|
|
1719
1825
|
},
|
|
1720
1826
|
"timeoutFloorMs": 900000,
|
|
1827
|
+
"timeoutConfigKey": "review.timeouts.gemini",
|
|
1721
1828
|
"emptyOutput": "stub-with-stderr",
|
|
1722
1829
|
"reviewsSection": "Gemini",
|
|
1723
1830
|
"evidenceClass": "source-grounded",
|
|
1724
1831
|
"requiresBinaries": [],
|
|
1725
1832
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.gemini",
|
|
1726
1833
|
"modelConfigKey": "review.models.gemini",
|
|
1834
|
+
"effortConfigKey": null,
|
|
1835
|
+
"defaultEffort": null,
|
|
1727
1836
|
"handler": null
|
|
1728
1837
|
},
|
|
1729
1838
|
"config": {
|
|
@@ -1736,13 +1845,18 @@ const capabilities = {
|
|
|
1736
1845
|
"type": "number",
|
|
1737
1846
|
"default": -1,
|
|
1738
1847
|
"description": "Prompt-token budget for the Gemini reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
1848
|
+
},
|
|
1849
|
+
"review.timeouts.gemini": {
|
|
1850
|
+
"type": "number",
|
|
1851
|
+
"default": -1,
|
|
1852
|
+
"description": "Outer wall-clock timeout override (seconds) for the Gemini reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
1739
1853
|
}
|
|
1740
1854
|
}
|
|
1741
1855
|
},
|
|
1742
1856
|
"graphify": {
|
|
1743
1857
|
"id": "graphify",
|
|
1744
1858
|
"role": "feature",
|
|
1745
|
-
"version": "1.
|
|
1859
|
+
"version": "1.14.0",
|
|
1746
1860
|
"title": "Knowledge graph",
|
|
1747
1861
|
"description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /gsd-graphify skill.",
|
|
1748
1862
|
"tier": "full",
|
|
@@ -1783,7 +1897,7 @@ const capabilities = {
|
|
|
1783
1897
|
"hermes": {
|
|
1784
1898
|
"id": "hermes",
|
|
1785
1899
|
"role": "runtime",
|
|
1786
|
-
"version": "1.
|
|
1900
|
+
"version": "1.14.0",
|
|
1787
1901
|
"title": "Hermes Agent",
|
|
1788
1902
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
1789
1903
|
"tier": "core",
|
|
@@ -1880,7 +1994,8 @@ const capabilities = {
|
|
|
1880
1994
|
"background": true,
|
|
1881
1995
|
"subagentToolkit": "read-only",
|
|
1882
1996
|
"backgroundDispatch": false,
|
|
1883
|
-
"isolation": "undocumented"
|
|
1997
|
+
"isolation": "undocumented",
|
|
1998
|
+
"maxConcurrency": "undocumented"
|
|
1884
1999
|
},
|
|
1885
2000
|
"modelMode": "active",
|
|
1886
2001
|
"hookBus": "host",
|
|
@@ -1894,7 +2009,7 @@ const capabilities = {
|
|
|
1894
2009
|
"intel": {
|
|
1895
2010
|
"id": "intel",
|
|
1896
2011
|
"role": "feature",
|
|
1897
|
-
"version": "1.
|
|
2012
|
+
"version": "1.14.0",
|
|
1898
2013
|
"title": "Codebase intelligence",
|
|
1899
2014
|
"description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `gsd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/gsd-map-codebase` and `gsd-intel-updater`.",
|
|
1900
2015
|
"tier": "full",
|
|
@@ -1946,7 +2061,7 @@ const capabilities = {
|
|
|
1946
2061
|
"kilo": {
|
|
1947
2062
|
"id": "kilo",
|
|
1948
2063
|
"role": "runtime",
|
|
1949
|
-
"version": "1.
|
|
2064
|
+
"version": "1.14.0",
|
|
1950
2065
|
"title": "Kilo Code",
|
|
1951
2066
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
1952
2067
|
"tier": "core",
|
|
@@ -2048,7 +2163,8 @@ const capabilities = {
|
|
|
2048
2163
|
"background": true,
|
|
2049
2164
|
"subagentToolkit": "undocumented",
|
|
2050
2165
|
"backgroundDispatch": false,
|
|
2051
|
-
"isolation": "undocumented"
|
|
2166
|
+
"isolation": "undocumented",
|
|
2167
|
+
"maxConcurrency": "undocumented"
|
|
2052
2168
|
},
|
|
2053
2169
|
"modelMode": "active",
|
|
2054
2170
|
"hookBus": "host",
|
|
@@ -2075,7 +2191,7 @@ const capabilities = {
|
|
|
2075
2191
|
"kimi": {
|
|
2076
2192
|
"id": "kimi",
|
|
2077
2193
|
"role": "runtime",
|
|
2078
|
-
"version": "1.
|
|
2194
|
+
"version": "1.14.0",
|
|
2079
2195
|
"title": "Kimi CLI",
|
|
2080
2196
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; native config.toml [[hooks]] bus at ~/.kimi/config.toml; background dispatch; tier-2 support.",
|
|
2081
2197
|
"tier": "core",
|
|
@@ -2147,7 +2263,8 @@ const capabilities = {
|
|
|
2147
2263
|
"background": true,
|
|
2148
2264
|
"subagentToolkit": "undocumented",
|
|
2149
2265
|
"backgroundDispatch": true,
|
|
2150
|
-
"isolation": "orchestrator-worktree"
|
|
2266
|
+
"isolation": "orchestrator-worktree",
|
|
2267
|
+
"maxConcurrency": "undocumented"
|
|
2151
2268
|
},
|
|
2152
2269
|
"modelMode": "passive",
|
|
2153
2270
|
"hookBus": "host",
|
|
@@ -2170,14 +2287,15 @@ const capabilities = {
|
|
|
2170
2287
|
"verificationStyle": "kimi",
|
|
2171
2288
|
"agentManifestStyle": "kimi-nested",
|
|
2172
2289
|
"doneBannerStyle": "kimi-agent-file",
|
|
2173
|
-
"skipSharedHooksInstall": true
|
|
2290
|
+
"skipSharedHooksInstall": true,
|
|
2291
|
+
"noPathRewrite": true
|
|
2174
2292
|
}
|
|
2175
2293
|
}
|
|
2176
2294
|
},
|
|
2177
2295
|
"kimi-code": {
|
|
2178
2296
|
"id": "kimi-code",
|
|
2179
2297
|
"role": "runtime",
|
|
2180
|
-
"version": "1.
|
|
2298
|
+
"version": "1.14.0",
|
|
2181
2299
|
"title": "Kimi Code CLI",
|
|
2182
2300
|
"description": "Kimi Code CLI (Moonshot AI, Node) — Agent Skills auto-discovered at ~/.kimi-code/skills; global AGENTS.md at ~/.kimi-code/AGENTS.md; native config.toml + [[hooks]] bus; three built-in subagents (coder/explore/plan), NO custom named subagents; background dispatch; tier-2 support. Distinct from Python kimi-cli (the 'kimi' capability) per ADR-1239 EoS — Kimi Code cannot dispatch named subagents so the kimi-agents YAML layout does NOT apply; persona injection rides the existing ${AGENT_SKILLS_*} workflow fallback. Install-layout, agent-install-check, and install-time decision (kimi vs kimi-code) land in follow-up PRs; this descriptor is the EoS foundation.",
|
|
2183
2301
|
"tier": "core",
|
|
@@ -2262,7 +2380,8 @@ const capabilities = {
|
|
|
2262
2380
|
"explore",
|
|
2263
2381
|
"plan"
|
|
2264
2382
|
],
|
|
2265
|
-
"isolation": "orchestrator-worktree"
|
|
2383
|
+
"isolation": "orchestrator-worktree",
|
|
2384
|
+
"maxConcurrency": "undocumented"
|
|
2266
2385
|
},
|
|
2267
2386
|
"modelMode": "passive",
|
|
2268
2387
|
"hookBus": "host",
|
|
@@ -2311,12 +2430,15 @@ const capabilities = {
|
|
|
2311
2430
|
"effortChannel": "none"
|
|
2312
2431
|
},
|
|
2313
2432
|
"timeoutFloorMs": 900000,
|
|
2433
|
+
"timeoutConfigKey": "review.timeouts.kimi-code",
|
|
2314
2434
|
"emptyOutput": "stub-with-stderr",
|
|
2315
2435
|
"reviewsSection": "Kimi Code",
|
|
2316
2436
|
"evidenceClass": "source-grounded",
|
|
2317
2437
|
"requiresBinaries": [],
|
|
2318
2438
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.kimi-code",
|
|
2319
2439
|
"modelConfigKey": "review.models.kimi-code",
|
|
2440
|
+
"effortConfigKey": null,
|
|
2441
|
+
"defaultEffort": null,
|
|
2320
2442
|
"handler": null
|
|
2321
2443
|
},
|
|
2322
2444
|
"config": {
|
|
@@ -2329,13 +2451,18 @@ const capabilities = {
|
|
|
2329
2451
|
"type": "number",
|
|
2330
2452
|
"default": -1,
|
|
2331
2453
|
"description": "Prompt-token budget for the Kimi Code reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
2454
|
+
},
|
|
2455
|
+
"review.timeouts.kimi-code": {
|
|
2456
|
+
"type": "number",
|
|
2457
|
+
"default": -1,
|
|
2458
|
+
"description": "Outer wall-clock timeout override (seconds) for the Kimi Code reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
2332
2459
|
}
|
|
2333
2460
|
}
|
|
2334
2461
|
},
|
|
2335
2462
|
"live-dom-uat": {
|
|
2336
2463
|
"id": "live-dom-uat",
|
|
2337
2464
|
"role": "feature",
|
|
2338
|
-
"version": "1.
|
|
2465
|
+
"version": "1.14.0",
|
|
2339
2466
|
"title": "Live-DOM UAT",
|
|
2340
2467
|
"description": "Default-off live-DOM verification (#2856). Confines browser MCP reach to one purpose-built agent (gsd-dom-verifier) that carries the browser globs in its own tools: line, registered as an additive step hook at execute:wave:post. agents/gsd-executor.md is deliberately NOT widened: for a first-party agent the static tool list is the only control that exists, no capability can grant tools to one (ADR-1244 D2), no hook kind grants tool permissions (ADR-857 D4), and there is no per-dispatch tool override. Gated by activationKey workflow.live_dom_uat (default false), so with the key off the capability resolves inactive and the hook does not render at all. NOTE on the browser profile lock: chrome-devtools-mcp holds an exclusive lock on $HOME/.cache/chrome-devtools-mcp/chrome-profile, and --isolated is a flag on the user's own MCP-server registration that GSD cannot pass. Concurrent execution waves sharing one profile will therefore collide; the step tolerates and reports that (onError: skip, never blocking) rather than pretending to coordinate a resource it does not own.",
|
|
2341
2468
|
"tier": "full",
|
|
@@ -2388,7 +2515,7 @@ const capabilities = {
|
|
|
2388
2515
|
"llama-cpp": {
|
|
2389
2516
|
"id": "llama-cpp",
|
|
2390
2517
|
"role": "reviewer",
|
|
2391
|
-
"version": "1.
|
|
2518
|
+
"version": "1.14.0",
|
|
2392
2519
|
"title": "llama.cpp",
|
|
2393
2520
|
"description": "llama.cpp server — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.llama_cpp_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`llama-cpp`, required by KEBAB_RE); `reviewer.slug` stays snake (`llama_cpp`) to match the shipped roster and the `review.llama_cpp_host` config key (ADR-2782's three-namespace trap).",
|
|
2394
2521
|
"tier": "full",
|
|
@@ -2417,12 +2544,15 @@ const capabilities = {
|
|
|
2417
2544
|
"effortChannel": "none"
|
|
2418
2545
|
},
|
|
2419
2546
|
"timeoutFloorMs": 120000,
|
|
2547
|
+
"timeoutConfigKey": "review.timeouts.llama_cpp",
|
|
2420
2548
|
"emptyOutput": "stub-with-stderr",
|
|
2421
2549
|
"reviewsSection": "llama.cpp",
|
|
2422
2550
|
"evidenceClass": "source-grounded",
|
|
2423
2551
|
"requiresBinaries": [],
|
|
2424
2552
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.llama_cpp",
|
|
2425
2553
|
"modelConfigKey": "review.models.llama_cpp",
|
|
2554
|
+
"effortConfigKey": null,
|
|
2555
|
+
"defaultEffort": null,
|
|
2426
2556
|
"handler": "openai-compatible"
|
|
2427
2557
|
},
|
|
2428
2558
|
"config": {
|
|
@@ -2440,13 +2570,18 @@ const capabilities = {
|
|
|
2440
2570
|
"type": "number",
|
|
2441
2571
|
"default": -1,
|
|
2442
2572
|
"description": "Prompt-token budget for the llama.cpp reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
2573
|
+
},
|
|
2574
|
+
"review.timeouts.llama_cpp": {
|
|
2575
|
+
"type": "number",
|
|
2576
|
+
"default": -1,
|
|
2577
|
+
"description": "Outer wall-clock timeout override (seconds) for the llama.cpp reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
2443
2578
|
}
|
|
2444
2579
|
}
|
|
2445
2580
|
},
|
|
2446
2581
|
"lm-studio": {
|
|
2447
2582
|
"id": "lm-studio",
|
|
2448
2583
|
"role": "reviewer",
|
|
2449
|
-
"version": "1.
|
|
2584
|
+
"version": "1.14.0",
|
|
2450
2585
|
"title": "LM Studio",
|
|
2451
2586
|
"description": "LM Studio local model server — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.lm_studio_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq. Capability id/folder are kebab (`lm-studio`, required by KEBAB_RE); `reviewer.slug` stays snake (`lm_studio`) to match the shipped roster and the `review.lm_studio_host` config key (ADR-2782's three-namespace trap).",
|
|
2452
2587
|
"tier": "full",
|
|
@@ -2475,12 +2610,15 @@ const capabilities = {
|
|
|
2475
2610
|
"effortChannel": "none"
|
|
2476
2611
|
},
|
|
2477
2612
|
"timeoutFloorMs": 120000,
|
|
2613
|
+
"timeoutConfigKey": "review.timeouts.lm_studio",
|
|
2478
2614
|
"emptyOutput": "stub-with-stderr",
|
|
2479
2615
|
"reviewsSection": "LM Studio",
|
|
2480
2616
|
"evidenceClass": "source-grounded",
|
|
2481
2617
|
"requiresBinaries": [],
|
|
2482
2618
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.lm_studio",
|
|
2483
2619
|
"modelConfigKey": "review.models.lm_studio",
|
|
2620
|
+
"effortConfigKey": null,
|
|
2621
|
+
"defaultEffort": null,
|
|
2484
2622
|
"handler": "openai-compatible"
|
|
2485
2623
|
},
|
|
2486
2624
|
"config": {
|
|
@@ -2498,13 +2636,18 @@ const capabilities = {
|
|
|
2498
2636
|
"type": "number",
|
|
2499
2637
|
"default": -1,
|
|
2500
2638
|
"description": "Prompt-token budget for the LM Studio reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
2639
|
+
},
|
|
2640
|
+
"review.timeouts.lm_studio": {
|
|
2641
|
+
"type": "number",
|
|
2642
|
+
"default": -1,
|
|
2643
|
+
"description": "Outer wall-clock timeout override (seconds) for the LM Studio reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
2501
2644
|
}
|
|
2502
2645
|
}
|
|
2503
2646
|
},
|
|
2504
2647
|
"mempalace": {
|
|
2505
2648
|
"id": "mempalace",
|
|
2506
2649
|
"role": "feature",
|
|
2507
|
-
"version": "1.
|
|
2650
|
+
"version": "1.14.0",
|
|
2508
2651
|
"title": "MemPalace memory",
|
|
2509
2652
|
"description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
|
|
2510
2653
|
"tier": "full",
|
|
@@ -2678,7 +2821,7 @@ const capabilities = {
|
|
|
2678
2821
|
"nyquist": {
|
|
2679
2822
|
"id": "nyquist",
|
|
2680
2823
|
"role": "feature",
|
|
2681
|
-
"version": "1.
|
|
2824
|
+
"version": "1.14.0",
|
|
2682
2825
|
"title": "Nyquist validation",
|
|
2683
2826
|
"description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
|
|
2684
2827
|
"tier": "full",
|
|
@@ -2728,7 +2871,7 @@ const capabilities = {
|
|
|
2728
2871
|
"ollama": {
|
|
2729
2872
|
"id": "ollama",
|
|
2730
2873
|
"role": "reviewer",
|
|
2731
|
-
"version": "1.
|
|
2874
|
+
"version": "1.14.0",
|
|
2732
2875
|
"title": "Ollama",
|
|
2733
2876
|
"description": "Ollama local model server — cross-AI /gsd:review reviewer lane only; not a GSD install target (no runtime body, no artifacts). OpenAI-compatible HTTP transport against a user-configured `review.ollama_host` (POST /v1/chat/completions); model discovered via GET /v1/models piped through jq.",
|
|
2734
2877
|
"tier": "full",
|
|
@@ -2757,12 +2900,15 @@ const capabilities = {
|
|
|
2757
2900
|
"effortChannel": "none"
|
|
2758
2901
|
},
|
|
2759
2902
|
"timeoutFloorMs": 120000,
|
|
2903
|
+
"timeoutConfigKey": "review.timeouts.ollama",
|
|
2760
2904
|
"emptyOutput": "stub-with-stderr",
|
|
2761
2905
|
"reviewsSection": "Ollama",
|
|
2762
2906
|
"evidenceClass": "source-grounded",
|
|
2763
2907
|
"requiresBinaries": [],
|
|
2764
2908
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.ollama",
|
|
2765
2909
|
"modelConfigKey": "review.models.ollama",
|
|
2910
|
+
"effortConfigKey": null,
|
|
2911
|
+
"defaultEffort": null,
|
|
2766
2912
|
"handler": "openai-compatible"
|
|
2767
2913
|
},
|
|
2768
2914
|
"config": {
|
|
@@ -2780,13 +2926,18 @@ const capabilities = {
|
|
|
2780
2926
|
"type": "number",
|
|
2781
2927
|
"default": -1,
|
|
2782
2928
|
"description": "Prompt-token budget for the Ollama reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
2929
|
+
},
|
|
2930
|
+
"review.timeouts.ollama": {
|
|
2931
|
+
"type": "number",
|
|
2932
|
+
"default": -1,
|
|
2933
|
+
"description": "Outer wall-clock timeout override (seconds) for the Ollama reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
2783
2934
|
}
|
|
2784
2935
|
}
|
|
2785
2936
|
},
|
|
2786
2937
|
"opencode": {
|
|
2787
2938
|
"id": "opencode",
|
|
2788
2939
|
"role": "runtime",
|
|
2789
|
-
"version": "1.
|
|
2940
|
+
"version": "1.14.0",
|
|
2790
2941
|
"title": "OpenCode",
|
|
2791
2942
|
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
2792
2943
|
"tier": "core",
|
|
@@ -2883,7 +3034,8 @@ const capabilities = {
|
|
|
2883
3034
|
"background": false,
|
|
2884
3035
|
"subagentToolkit": "full",
|
|
2885
3036
|
"backgroundDispatch": false,
|
|
2886
|
-
"isolation": "orchestrator-worktree"
|
|
3037
|
+
"isolation": "orchestrator-worktree",
|
|
3038
|
+
"maxConcurrency": "undocumented"
|
|
2887
3039
|
},
|
|
2888
3040
|
"modelMode": "active",
|
|
2889
3041
|
"hookBus": "host",
|
|
@@ -2943,12 +3095,15 @@ const capabilities = {
|
|
|
2943
3095
|
"effortChannel": "argv"
|
|
2944
3096
|
},
|
|
2945
3097
|
"timeoutFloorMs": 660000,
|
|
3098
|
+
"timeoutConfigKey": "review.timeouts.opencode",
|
|
2946
3099
|
"emptyOutput": "stub-with-stderr",
|
|
2947
3100
|
"reviewsSection": "OpenCode",
|
|
2948
3101
|
"evidenceClass": "source-grounded",
|
|
2949
3102
|
"requiresBinaries": [],
|
|
2950
3103
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.opencode",
|
|
2951
3104
|
"modelConfigKey": "review.models.opencode",
|
|
3105
|
+
"effortConfigKey": "review.effort.opencode",
|
|
3106
|
+
"defaultEffort": "high",
|
|
2952
3107
|
"handler": "opencode"
|
|
2953
3108
|
},
|
|
2954
3109
|
"config": {
|
|
@@ -2961,13 +3116,23 @@ const capabilities = {
|
|
|
2961
3116
|
"type": "number",
|
|
2962
3117
|
"default": -1,
|
|
2963
3118
|
"description": "Prompt-token budget for the OpenCode reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
3119
|
+
},
|
|
3120
|
+
"review.timeouts.opencode": {
|
|
3121
|
+
"type": "number",
|
|
3122
|
+
"default": -1,
|
|
3123
|
+
"description": "Outer wall-clock timeout override (seconds) for the OpenCode reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
3124
|
+
},
|
|
3125
|
+
"review.effort.opencode": {
|
|
3126
|
+
"type": "string",
|
|
3127
|
+
"default": "",
|
|
3128
|
+
"description": "Reasoning effort for the OpenCode reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
2964
3129
|
}
|
|
2965
3130
|
}
|
|
2966
3131
|
},
|
|
2967
3132
|
"pattern-mapper": {
|
|
2968
3133
|
"id": "pattern-mapper",
|
|
2969
3134
|
"role": "feature",
|
|
2970
|
-
"version": "1.
|
|
3135
|
+
"version": "1.14.0",
|
|
2971
3136
|
"title": "Pattern mapping",
|
|
2972
3137
|
"description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
|
|
2973
3138
|
"tier": "full",
|
|
@@ -3021,7 +3186,7 @@ const capabilities = {
|
|
|
3021
3186
|
"pi": {
|
|
3022
3187
|
"id": "pi",
|
|
3023
3188
|
"role": "runtime",
|
|
3024
|
-
"version": "1.
|
|
3189
|
+
"version": "1.14.0",
|
|
3025
3190
|
"title": "pi",
|
|
3026
3191
|
"description": "pi (pi.dev) — bun-runtime programmatic-CLI; TS ExtensionAPI (registerCommand/registerTool/registerProvider/pi.on); single native-extension file at ~/.pi/agent/extensions/gsd.js (.js, not .cjs — pi's extension auto-discovery accepts only .ts/.js, #2470); no shared-settings hook surface; tier-2 support.",
|
|
3027
3192
|
"tier": "core",
|
|
@@ -3067,7 +3232,8 @@ const capabilities = {
|
|
|
3067
3232
|
"background": false,
|
|
3068
3233
|
"backgroundDispatch": false,
|
|
3069
3234
|
"subagentToolkit": "undocumented",
|
|
3070
|
-
"isolation": "none"
|
|
3235
|
+
"isolation": "none",
|
|
3236
|
+
"maxConcurrency": "undocumented"
|
|
3071
3237
|
},
|
|
3072
3238
|
"modelMode": "active",
|
|
3073
3239
|
"hookBus": "host",
|
|
@@ -3090,7 +3256,7 @@ const capabilities = {
|
|
|
3090
3256
|
"profile-pipeline": {
|
|
3091
3257
|
"id": "profile-pipeline",
|
|
3092
3258
|
"role": "feature",
|
|
3093
|
-
"version": "1.
|
|
3259
|
+
"version": "1.14.0",
|
|
3094
3260
|
"title": "Developer profiling pipeline",
|
|
3095
3261
|
"description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `gsd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /gsd-profile-user skill and gsd-user-profiler agent.",
|
|
3096
3262
|
"tier": "full",
|
|
@@ -3167,7 +3333,7 @@ const capabilities = {
|
|
|
3167
3333
|
"qwen": {
|
|
3168
3334
|
"id": "qwen",
|
|
3169
3335
|
"role": "runtime",
|
|
3170
|
-
"version": "1.
|
|
3336
|
+
"version": "1.14.0",
|
|
3171
3337
|
"title": "Qwen Code",
|
|
3172
3338
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
3173
3339
|
"tier": "core",
|
|
@@ -3251,7 +3417,8 @@ const capabilities = {
|
|
|
3251
3417
|
"background": true,
|
|
3252
3418
|
"subagentToolkit": "full",
|
|
3253
3419
|
"backgroundDispatch": false,
|
|
3254
|
-
"isolation": "undocumented"
|
|
3420
|
+
"isolation": "undocumented",
|
|
3421
|
+
"maxConcurrency": "undocumented"
|
|
3255
3422
|
},
|
|
3256
3423
|
"modelMode": "passive",
|
|
3257
3424
|
"hookBus": "host",
|
|
@@ -3294,12 +3461,15 @@ const capabilities = {
|
|
|
3294
3461
|
"effortChannel": "none"
|
|
3295
3462
|
},
|
|
3296
3463
|
"timeoutFloorMs": 900000,
|
|
3464
|
+
"timeoutConfigKey": null,
|
|
3297
3465
|
"emptyOutput": "stub-with-stderr",
|
|
3298
3466
|
"reviewsSection": "Qwen",
|
|
3299
3467
|
"evidenceClass": "source-grounded",
|
|
3300
3468
|
"requiresBinaries": [],
|
|
3301
3469
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.qwen",
|
|
3302
3470
|
"modelConfigKey": null,
|
|
3471
|
+
"effortConfigKey": null,
|
|
3472
|
+
"defaultEffort": null,
|
|
3303
3473
|
"handler": null
|
|
3304
3474
|
},
|
|
3305
3475
|
"config": {
|
|
@@ -3313,7 +3483,7 @@ const capabilities = {
|
|
|
3313
3483
|
"refactor-trigger": {
|
|
3314
3484
|
"id": "refactor-trigger",
|
|
3315
3485
|
"role": "feature",
|
|
3316
|
-
"version": "1.
|
|
3486
|
+
"version": "1.14.0",
|
|
3317
3487
|
"title": "Complexity-triggered refactor",
|
|
3318
3488
|
"description": "Measures the complexity of the code a phase touched and, when a function crosses a configured threshold or jumps past its recorded anchor, surfaces a scoped refactor proposal at .planning/phases/<N>/<NN>-REFACTOR.md. Advisory by default — it never edits code and never blocks. Opt-in strict mode blocks /gsd-ship while a proposal is untriaged; a declined proposal is recorded in the broken-windows ledger when that capability is present. Operationalizes 'refactor early, refactor often' as continuous pressure instead of a thing you have to remember (issue #1953).",
|
|
3319
3489
|
"tier": "full",
|
|
@@ -3380,7 +3550,7 @@ const capabilities = {
|
|
|
3380
3550
|
"research": {
|
|
3381
3551
|
"id": "research",
|
|
3382
3552
|
"role": "feature",
|
|
3383
|
-
"version": "1.
|
|
3553
|
+
"version": "1.14.0",
|
|
3384
3554
|
"title": "Phase research",
|
|
3385
3555
|
"description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
|
|
3386
3556
|
"tier": "standard",
|
|
@@ -3432,7 +3602,7 @@ const capabilities = {
|
|
|
3432
3602
|
"schema-gate": {
|
|
3433
3603
|
"id": "schema-gate",
|
|
3434
3604
|
"role": "feature",
|
|
3435
|
-
"version": "1.
|
|
3605
|
+
"version": "1.14.0",
|
|
3436
3606
|
"title": "Schema push detection gate",
|
|
3437
3607
|
"description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
|
|
3438
3608
|
"tier": "full",
|
|
@@ -3478,7 +3648,7 @@ const capabilities = {
|
|
|
3478
3648
|
"security": {
|
|
3479
3649
|
"id": "security",
|
|
3480
3650
|
"role": "feature",
|
|
3481
|
-
"version": "1.
|
|
3651
|
+
"version": "1.14.0",
|
|
3482
3652
|
"title": "Security enforcement",
|
|
3483
3653
|
"description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
|
|
3484
3654
|
"tier": "full",
|
|
@@ -3577,7 +3747,7 @@ const capabilities = {
|
|
|
3577
3747
|
"tdd": {
|
|
3578
3748
|
"id": "tdd",
|
|
3579
3749
|
"role": "feature",
|
|
3580
|
-
"version": "1.
|
|
3750
|
+
"version": "1.14.0",
|
|
3581
3751
|
"title": "Test-driven development",
|
|
3582
3752
|
"description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
|
|
3583
3753
|
"tier": "full",
|
|
@@ -3630,7 +3800,7 @@ const capabilities = {
|
|
|
3630
3800
|
"trae": {
|
|
3631
3801
|
"id": "trae",
|
|
3632
3802
|
"role": "runtime",
|
|
3633
|
-
"version": "1.
|
|
3803
|
+
"version": "1.14.0",
|
|
3634
3804
|
"title": "Trae IDE",
|
|
3635
3805
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
3636
3806
|
"tier": "core",
|
|
@@ -3708,7 +3878,8 @@ const capabilities = {
|
|
|
3708
3878
|
"background": true,
|
|
3709
3879
|
"subagentToolkit": "undocumented",
|
|
3710
3880
|
"backgroundDispatch": "undocumented",
|
|
3711
|
-
"isolation": "undocumented"
|
|
3881
|
+
"isolation": "undocumented",
|
|
3882
|
+
"maxConcurrency": "undocumented"
|
|
3712
3883
|
},
|
|
3713
3884
|
"modelMode": "passive",
|
|
3714
3885
|
"hookBus": "engine",
|
|
@@ -3727,7 +3898,7 @@ const capabilities = {
|
|
|
3727
3898
|
"ui": {
|
|
3728
3899
|
"id": "ui",
|
|
3729
3900
|
"role": "feature",
|
|
3730
|
-
"version": "1.
|
|
3901
|
+
"version": "1.14.0",
|
|
3731
3902
|
"title": "UI design contracts",
|
|
3732
3903
|
"description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
|
|
3733
3904
|
"tier": "full",
|
|
@@ -3822,7 +3993,7 @@ const capabilities = {
|
|
|
3822
3993
|
"vscode": {
|
|
3823
3994
|
"id": "vscode",
|
|
3824
3995
|
"role": "runtime",
|
|
3825
|
-
"version": "1.
|
|
3996
|
+
"version": "1.14.0",
|
|
3826
3997
|
"title": "VS Code",
|
|
3827
3998
|
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
|
|
3828
3999
|
"tier": "core",
|
|
@@ -3865,7 +4036,8 @@ const capabilities = {
|
|
|
3865
4036
|
"background": true,
|
|
3866
4037
|
"subagentToolkit": "undocumented",
|
|
3867
4038
|
"backgroundDispatch": "undocumented",
|
|
3868
|
-
"isolation": "undocumented"
|
|
4039
|
+
"isolation": "undocumented",
|
|
4040
|
+
"maxConcurrency": "undocumented"
|
|
3869
4041
|
},
|
|
3870
4042
|
"modelMode": "active",
|
|
3871
4043
|
"hookBus": "engine",
|
|
@@ -3879,7 +4051,7 @@ const capabilities = {
|
|
|
3879
4051
|
"windsurf": {
|
|
3880
4052
|
"id": "windsurf",
|
|
3881
4053
|
"role": "runtime",
|
|
3882
|
-
"version": "1.
|
|
4054
|
+
"version": "1.14.0",
|
|
3883
4055
|
"title": "Windsurf",
|
|
3884
4056
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; Cascade native hooks.json blocking hook bus (pre_write_code, pre_run_command); tier-2 support.",
|
|
3885
4057
|
"tier": "core",
|
|
@@ -3950,7 +4122,8 @@ const capabilities = {
|
|
|
3950
4122
|
"background": "undocumented",
|
|
3951
4123
|
"subagentToolkit": "undocumented",
|
|
3952
4124
|
"backgroundDispatch": "undocumented",
|
|
3953
|
-
"isolation": "none"
|
|
4125
|
+
"isolation": "none",
|
|
4126
|
+
"maxConcurrency": "undocumented"
|
|
3954
4127
|
},
|
|
3955
4128
|
"modelMode": "passive",
|
|
3956
4129
|
"hookBus": "host",
|
|
@@ -3970,7 +4143,7 @@ const capabilities = {
|
|
|
3970
4143
|
"zcode": {
|
|
3971
4144
|
"id": "zcode",
|
|
3972
4145
|
"role": "runtime",
|
|
3973
|
-
"version": "1.
|
|
4146
|
+
"version": "1.14.0",
|
|
3974
4147
|
"title": "ZCode",
|
|
3975
4148
|
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
3976
4149
|
"tier": "core",
|
|
@@ -4064,7 +4237,8 @@ const capabilities = {
|
|
|
4064
4237
|
"background": false,
|
|
4065
4238
|
"subagentToolkit": "full",
|
|
4066
4239
|
"backgroundDispatch": false,
|
|
4067
|
-
"isolation": "none"
|
|
4240
|
+
"isolation": "none",
|
|
4241
|
+
"maxConcurrency": "undocumented"
|
|
4068
4242
|
},
|
|
4069
4243
|
"modelMode": "passive",
|
|
4070
4244
|
"hookBus": "host",
|
|
@@ -4338,6 +4512,16 @@ const byLoopPoint = {
|
|
|
4338
4512
|
"blocking": false,
|
|
4339
4513
|
"onError": "skip"
|
|
4340
4514
|
},
|
|
4515
|
+
{
|
|
4516
|
+
"capId": "drift",
|
|
4517
|
+
"point": "plan:pre",
|
|
4518
|
+
"check": {
|
|
4519
|
+
"query": "verify.context-drift"
|
|
4520
|
+
},
|
|
4521
|
+
"when": "workflow.context_drift_precheck",
|
|
4522
|
+
"blocking": false,
|
|
4523
|
+
"onError": "skip"
|
|
4524
|
+
},
|
|
4341
4525
|
{
|
|
4342
4526
|
"capId": "ui",
|
|
4343
4527
|
"point": "plan:pre",
|
|
@@ -4437,6 +4621,21 @@ const byLoopPoint = {
|
|
|
4437
4621
|
},
|
|
4438
4622
|
"execute:wave:post": {
|
|
4439
4623
|
"steps": [
|
|
4624
|
+
{
|
|
4625
|
+
"capId": "code-review",
|
|
4626
|
+
"point": "execute:wave:post",
|
|
4627
|
+
"ref": {
|
|
4628
|
+
"skill": "code-review"
|
|
4629
|
+
},
|
|
4630
|
+
"produces": [
|
|
4631
|
+
"REVIEW.md"
|
|
4632
|
+
],
|
|
4633
|
+
"consumes": [],
|
|
4634
|
+
"supportsReviewerLanes": true,
|
|
4635
|
+
"when": "workflow.code_review",
|
|
4636
|
+
"pointFrom": "workflow.code_review_point",
|
|
4637
|
+
"onError": "skip"
|
|
4638
|
+
},
|
|
4440
4639
|
{
|
|
4441
4640
|
"capId": "live-dom-uat",
|
|
4442
4641
|
"point": "execute:wave:post",
|
|
@@ -4464,7 +4663,7 @@ const byLoopPoint = {
|
|
|
4464
4663
|
"into": "executor",
|
|
4465
4664
|
"fragment": {
|
|
4466
4665
|
"path": "fragments/execute-wave-post.md",
|
|
4467
|
-
"inline": "<!-- external-job capability — execute:wave:post fragment, injected into the executor (#1164).\n\n
|
|
4666
|
+
"inline": "<!-- external-job capability — execute:wave:post fragment, injected into the executor (#1164).\n\n #1164 specifies classification at wave:pre and recording at wave:post. This\n capability still contributes executor guidance at wave:post; execute-phase\n now renders wave:pre entries and dispatches generic step hooks there. Moving\n external-job classification is a separate capability change, not part of\n #4148. Until then, this guidance cannot classify the wave that already ran. -->\n\n## Externalize long-running compute (async external job)\n\nIf the current plan's task is tagged `<runtime_budget>long_compute</runtime_budget>`\n(see the plan-phase fragment), do **not** run it in the foreground — it would\nblock the agent turn for hours. Instead externalize it and record a durable\nhalf-state:\n\n1. **Classify the runtime.** `quick` (<2 min) and `medium` (<~30 min) run\n normally. `unknown` requires a first-health check and a soft-review deadline\n before consuming the child timeout. `long_compute` (>30–60 min) is\n externalized.\n2. **Submit via the scheduler adapter** (default `external_job.backend: slurm`):\n ```bash\n node scripts/slurm-adapter.cjs submit \\\n --plan <plan_id> --phase <phase> -- sbatch --parsable \\\n --output=Artifacts/jobs/%j/out.log ./run.sh\n ```\n The helper writes `.planning/async-jobs/<job>.json` (the versioned stability\n contract — `docs/reference/planning-artifacts.md`) and refuses to create a\n second non-terminal manifest for a `plan_id` that already has one\n (duplicate-execution guard).\n3. **Commit the manifest + a handoff**, then return **`external_job_waiting`**\n and stop. Do **not** write `SUMMARY.md` — SUMMARY is deferred until the job\n reaches a terminal state and its `expected_artifacts` are verified.\n4. **Resume path.** `execute-phase` safe-resume, `resume-project`, and\n `pause-work` reconcile against the manifest and never re-dispatch the plan.\n When the job is `completed-unverified`, run `verification_command` (surface\n it; it is untrusted — confirm before executing), then write `SUMMARY.md` and\n close the plan.\n\nManifest commands cross a trust seam: a Capability (or anything that can write\n`.planning/`) produces them; the core loop consumes them. Never auto-run\n`submit_command` / `verification_command` / `resume_command` — surface the exact\ncommand and require explicit confirmation first.\n"
|
|
4468
4667
|
},
|
|
4469
4668
|
"produces": [
|
|
4470
4669
|
".planning/async-jobs/<job>.json"
|
|
@@ -4536,7 +4735,9 @@ const byLoopPoint = {
|
|
|
4536
4735
|
"consumes": [
|
|
4537
4736
|
"SUMMARY.md"
|
|
4538
4737
|
],
|
|
4738
|
+
"supportsReviewerLanes": true,
|
|
4539
4739
|
"when": "workflow.code_review",
|
|
4740
|
+
"pointFrom": "workflow.code_review_point",
|
|
4540
4741
|
"onError": "skip"
|
|
4541
4742
|
},
|
|
4542
4743
|
{
|
|
@@ -4709,23 +4910,32 @@ const configKeys = {
|
|
|
4709
4910
|
"workflow.api_coverage_gate": "ai-integration",
|
|
4710
4911
|
"review.models.agy": "antigravity",
|
|
4711
4912
|
"review.max_prompt_tokens_per_reviewer.antigravity": "antigravity",
|
|
4913
|
+
"review.timeouts.antigravity": "antigravity",
|
|
4712
4914
|
"workflow.assumption_delta": "assumption-delta",
|
|
4713
4915
|
"workflow.windows_enforce": "broken-windows",
|
|
4714
4916
|
"review.models.claude": "claude",
|
|
4715
4917
|
"review.max_prompt_tokens_per_reviewer.claude": "claude",
|
|
4918
|
+
"review.timeouts.claude": "claude",
|
|
4919
|
+
"review.effort.claude": "claude",
|
|
4716
4920
|
"claude_orchestration.enabled": "claude-orchestration",
|
|
4717
4921
|
"claude_orchestration.execution_backend": "claude-orchestration",
|
|
4718
4922
|
"claude_orchestration.min_agent_sdk_version": "claude-orchestration",
|
|
4719
4923
|
"workflow.code_review": "code-review",
|
|
4720
4924
|
"workflow.code_review_depth": "code-review",
|
|
4925
|
+
"workflow.code_review_point": "code-review",
|
|
4721
4926
|
"review.max_prompt_tokens_per_reviewer.coderabbit": "coderabbit",
|
|
4722
4927
|
"review.models.codex": "codex",
|
|
4723
4928
|
"review.max_prompt_tokens_per_reviewer.codex": "codex",
|
|
4929
|
+
"review.timeouts.codex": "codex",
|
|
4930
|
+
"review.effort.codex": "codex",
|
|
4931
|
+
"review.models.cursor": "cursor",
|
|
4724
4932
|
"review.max_prompt_tokens_per_reviewer.cursor": "cursor",
|
|
4725
4933
|
"workflow.drift_threshold": "drift",
|
|
4726
4934
|
"workflow.drift_action": "drift",
|
|
4727
4935
|
"workflow.schema_drift_gate": "drift",
|
|
4728
4936
|
"workflow.plan_drift_precheck": "drift",
|
|
4937
|
+
"workflow.context_drift_precheck": "drift",
|
|
4938
|
+
"workflow.context_drift_action": "drift",
|
|
4729
4939
|
"external_job.enabled": "external-job",
|
|
4730
4940
|
"external_job.backend": "external-job",
|
|
4731
4941
|
"external_job.artifact_dir": "external-job",
|
|
@@ -4734,17 +4944,21 @@ const configKeys = {
|
|
|
4734
4944
|
"workflow.post_planning_gaps": "gap-analysis",
|
|
4735
4945
|
"review.models.gemini": "gemini",
|
|
4736
4946
|
"review.max_prompt_tokens_per_reviewer.gemini": "gemini",
|
|
4947
|
+
"review.timeouts.gemini": "gemini",
|
|
4737
4948
|
"graphify.enabled": "graphify",
|
|
4738
4949
|
"intel.enabled": "intel",
|
|
4739
4950
|
"review.models.kimi-code": "kimi-code",
|
|
4740
4951
|
"review.max_prompt_tokens_per_reviewer.kimi-code": "kimi-code",
|
|
4952
|
+
"review.timeouts.kimi-code": "kimi-code",
|
|
4741
4953
|
"workflow.live_dom_uat": "live-dom-uat",
|
|
4742
4954
|
"review.models.llama_cpp": "llama-cpp",
|
|
4743
4955
|
"review.llama_cpp_host": "llama-cpp",
|
|
4744
4956
|
"review.max_prompt_tokens_per_reviewer.llama_cpp": "llama-cpp",
|
|
4957
|
+
"review.timeouts.llama_cpp": "llama-cpp",
|
|
4745
4958
|
"review.models.lm_studio": "lm-studio",
|
|
4746
4959
|
"review.lm_studio_host": "lm-studio",
|
|
4747
4960
|
"review.max_prompt_tokens_per_reviewer.lm_studio": "lm-studio",
|
|
4961
|
+
"review.timeouts.lm_studio": "lm-studio",
|
|
4748
4962
|
"mempalace.enabled": "mempalace",
|
|
4749
4963
|
"mempalace.memory_mode": "mempalace",
|
|
4750
4964
|
"mempalace.wing": "mempalace",
|
|
@@ -4759,8 +4973,11 @@ const configKeys = {
|
|
|
4759
4973
|
"review.models.ollama": "ollama",
|
|
4760
4974
|
"review.ollama_host": "ollama",
|
|
4761
4975
|
"review.max_prompt_tokens_per_reviewer.ollama": "ollama",
|
|
4976
|
+
"review.timeouts.ollama": "ollama",
|
|
4762
4977
|
"review.models.opencode": "opencode",
|
|
4763
4978
|
"review.max_prompt_tokens_per_reviewer.opencode": "opencode",
|
|
4979
|
+
"review.timeouts.opencode": "opencode",
|
|
4980
|
+
"review.effort.opencode": "opencode",
|
|
4764
4981
|
"workflow.pattern_mapper": "pattern-mapper",
|
|
4765
4982
|
"profile-pipeline.enabled": "profile-pipeline",
|
|
4766
4983
|
"review.max_prompt_tokens_per_reviewer.qwen": "qwen",
|
|
@@ -4804,6 +5021,12 @@ const configSchema = {
|
|
|
4804
5021
|
"default": -1,
|
|
4805
5022
|
"description": "Prompt-token budget for the Antigravity reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\". Keyed on the reviewer slug `antigravity`, not the `agy` binary alias used by review.models.agy."
|
|
4806
5023
|
},
|
|
5024
|
+
"review.timeouts.antigravity": {
|
|
5025
|
+
"owner": "antigravity",
|
|
5026
|
+
"type": "number",
|
|
5027
|
+
"default": -1,
|
|
5028
|
+
"description": "Outer wall-clock timeout override (seconds) for the Antigravity reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5029
|
+
},
|
|
4807
5030
|
"workflow.assumption_delta": {
|
|
4808
5031
|
"owner": "assumption-delta",
|
|
4809
5032
|
"type": "boolean",
|
|
@@ -4828,6 +5051,18 @@ const configSchema = {
|
|
|
4828
5051
|
"default": -1,
|
|
4829
5052
|
"description": "Prompt-token budget for the Claude reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
4830
5053
|
},
|
|
5054
|
+
"review.timeouts.claude": {
|
|
5055
|
+
"owner": "claude",
|
|
5056
|
+
"type": "number",
|
|
5057
|
+
"default": -1,
|
|
5058
|
+
"description": "Outer wall-clock timeout override (seconds) for the Claude reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5059
|
+
},
|
|
5060
|
+
"review.effort.claude": {
|
|
5061
|
+
"owner": "claude",
|
|
5062
|
+
"type": "string",
|
|
5063
|
+
"default": "",
|
|
5064
|
+
"description": "Reasoning effort for the Claude reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
5065
|
+
},
|
|
4831
5066
|
"claude_orchestration.enabled": {
|
|
4832
5067
|
"owner": "claude-orchestration",
|
|
4833
5068
|
"type": "boolean",
|
|
@@ -4868,6 +5103,16 @@ const configSchema = {
|
|
|
4868
5103
|
"deep"
|
|
4869
5104
|
]
|
|
4870
5105
|
},
|
|
5106
|
+
"workflow.code_review_point": {
|
|
5107
|
+
"owner": "code-review",
|
|
5108
|
+
"type": "enum",
|
|
5109
|
+
"default": "execute:post",
|
|
5110
|
+
"description": "Loop point at which the code-review step registers — execute:post reviews once per phase (default); execute:wave:post reviews once per completed wave, scoped to that wave's diff.",
|
|
5111
|
+
"values": [
|
|
5112
|
+
"execute:post",
|
|
5113
|
+
"execute:wave:post"
|
|
5114
|
+
]
|
|
5115
|
+
},
|
|
4871
5116
|
"review.max_prompt_tokens_per_reviewer.coderabbit": {
|
|
4872
5117
|
"owner": "coderabbit",
|
|
4873
5118
|
"type": "number",
|
|
@@ -4886,6 +5131,24 @@ const configSchema = {
|
|
|
4886
5131
|
"default": -1,
|
|
4887
5132
|
"description": "Prompt-token budget for the Codex reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
4888
5133
|
},
|
|
5134
|
+
"review.timeouts.codex": {
|
|
5135
|
+
"owner": "codex",
|
|
5136
|
+
"type": "number",
|
|
5137
|
+
"default": -1,
|
|
5138
|
+
"description": "Outer wall-clock timeout override (seconds) for the Codex reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5139
|
+
},
|
|
5140
|
+
"review.effort.codex": {
|
|
5141
|
+
"owner": "codex",
|
|
5142
|
+
"type": "string",
|
|
5143
|
+
"default": "",
|
|
5144
|
+
"description": "Reasoning effort for the Codex reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
5145
|
+
},
|
|
5146
|
+
"review.models.cursor": {
|
|
5147
|
+
"owner": "cursor",
|
|
5148
|
+
"type": "string",
|
|
5149
|
+
"default": "",
|
|
5150
|
+
"description": "Model passed to the Cursor reviewer lane."
|
|
5151
|
+
},
|
|
4889
5152
|
"review.max_prompt_tokens_per_reviewer.cursor": {
|
|
4890
5153
|
"owner": "cursor",
|
|
4891
5154
|
"type": "number",
|
|
@@ -4920,6 +5183,22 @@ const configSchema = {
|
|
|
4920
5183
|
"default": true,
|
|
4921
5184
|
"description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (structural additions exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
|
|
4922
5185
|
},
|
|
5186
|
+
"workflow.context_drift_precheck": {
|
|
5187
|
+
"owner": "drift",
|
|
5188
|
+
"type": "boolean",
|
|
5189
|
+
"default": true,
|
|
5190
|
+
"description": "Enable the non-blocking context-drift pre-check at plan:pre, before /gsd:plan-phase reuses an existing RESEARCH.md/PATTERNS.md/VALIDATION.md/SPEC.md. Compares each artifact's effective last-changed time (git commit time, falling back to mtime for uncommitted edits) against CONTEXT.md's own — an artifact that predates CONTEXT.md's newest decision was derived from a premise that has since changed. Warn-only by default (see workflow.context_drift_action); never blocks planning on its own."
|
|
5191
|
+
},
|
|
5192
|
+
"workflow.context_drift_action": {
|
|
5193
|
+
"owner": "drift",
|
|
5194
|
+
"type": "enum",
|
|
5195
|
+
"default": "warn",
|
|
5196
|
+
"description": "Action taken by the context-drift gate when a stale upstream artifact is found: warn (advisory message naming the stale artifacts and how to regenerate them) or block (halt plan-phase until the artifacts are regenerated or the check is disabled).",
|
|
5197
|
+
"values": [
|
|
5198
|
+
"warn",
|
|
5199
|
+
"block"
|
|
5200
|
+
]
|
|
5201
|
+
},
|
|
4923
5202
|
"external_job.enabled": {
|
|
4924
5203
|
"owner": "external-job",
|
|
4925
5204
|
"type": "boolean",
|
|
@@ -4971,6 +5250,12 @@ const configSchema = {
|
|
|
4971
5250
|
"default": -1,
|
|
4972
5251
|
"description": "Prompt-token budget for the Gemini reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
4973
5252
|
},
|
|
5253
|
+
"review.timeouts.gemini": {
|
|
5254
|
+
"owner": "gemini",
|
|
5255
|
+
"type": "number",
|
|
5256
|
+
"default": -1,
|
|
5257
|
+
"description": "Outer wall-clock timeout override (seconds) for the Gemini reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5258
|
+
},
|
|
4974
5259
|
"graphify.enabled": {
|
|
4975
5260
|
"owner": "graphify",
|
|
4976
5261
|
"type": "boolean",
|
|
@@ -4995,6 +5280,12 @@ const configSchema = {
|
|
|
4995
5280
|
"default": -1,
|
|
4996
5281
|
"description": "Prompt-token budget for the Kimi Code reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
4997
5282
|
},
|
|
5283
|
+
"review.timeouts.kimi-code": {
|
|
5284
|
+
"owner": "kimi-code",
|
|
5285
|
+
"type": "number",
|
|
5286
|
+
"default": -1,
|
|
5287
|
+
"description": "Outer wall-clock timeout override (seconds) for the Kimi Code reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5288
|
+
},
|
|
4998
5289
|
"workflow.live_dom_uat": {
|
|
4999
5290
|
"owner": "live-dom-uat",
|
|
5000
5291
|
"type": "boolean",
|
|
@@ -5019,6 +5310,12 @@ const configSchema = {
|
|
|
5019
5310
|
"default": -1,
|
|
5020
5311
|
"description": "Prompt-token budget for the llama.cpp reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
5021
5312
|
},
|
|
5313
|
+
"review.timeouts.llama_cpp": {
|
|
5314
|
+
"owner": "llama-cpp",
|
|
5315
|
+
"type": "number",
|
|
5316
|
+
"default": -1,
|
|
5317
|
+
"description": "Outer wall-clock timeout override (seconds) for the llama.cpp reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5318
|
+
},
|
|
5022
5319
|
"review.models.lm_studio": {
|
|
5023
5320
|
"owner": "lm-studio",
|
|
5024
5321
|
"type": "string",
|
|
@@ -5037,6 +5334,12 @@ const configSchema = {
|
|
|
5037
5334
|
"default": -1,
|
|
5038
5335
|
"description": "Prompt-token budget for the LM Studio reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
5039
5336
|
},
|
|
5337
|
+
"review.timeouts.lm_studio": {
|
|
5338
|
+
"owner": "lm-studio",
|
|
5339
|
+
"type": "number",
|
|
5340
|
+
"default": -1,
|
|
5341
|
+
"description": "Outer wall-clock timeout override (seconds) for the LM Studio reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5342
|
+
},
|
|
5040
5343
|
"mempalace.enabled": {
|
|
5041
5344
|
"owner": "mempalace",
|
|
5042
5345
|
"type": "boolean",
|
|
@@ -5126,6 +5429,12 @@ const configSchema = {
|
|
|
5126
5429
|
"default": -1,
|
|
5127
5430
|
"description": "Prompt-token budget for the Ollama reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
5128
5431
|
},
|
|
5432
|
+
"review.timeouts.ollama": {
|
|
5433
|
+
"owner": "ollama",
|
|
5434
|
+
"type": "number",
|
|
5435
|
+
"default": -1,
|
|
5436
|
+
"description": "Outer wall-clock timeout override (seconds) for the Ollama reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5437
|
+
},
|
|
5129
5438
|
"review.models.opencode": {
|
|
5130
5439
|
"owner": "opencode",
|
|
5131
5440
|
"type": "string",
|
|
@@ -5138,6 +5447,18 @@ const configSchema = {
|
|
|
5138
5447
|
"default": -1,
|
|
5139
5448
|
"description": "Prompt-token budget for the OpenCode reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
5140
5449
|
},
|
|
5450
|
+
"review.timeouts.opencode": {
|
|
5451
|
+
"owner": "opencode",
|
|
5452
|
+
"type": "number",
|
|
5453
|
+
"default": -1,
|
|
5454
|
+
"description": "Outer wall-clock timeout override (seconds) for the OpenCode reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5455
|
+
},
|
|
5456
|
+
"review.effort.opencode": {
|
|
5457
|
+
"owner": "opencode",
|
|
5458
|
+
"type": "string",
|
|
5459
|
+
"default": "",
|
|
5460
|
+
"description": "Reasoning effort for the OpenCode reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
5461
|
+
},
|
|
5141
5462
|
"workflow.pattern_mapper": {
|
|
5142
5463
|
"owner": "pattern-mapper",
|
|
5143
5464
|
"type": "boolean",
|
|
@@ -5247,7 +5568,7 @@ const runtimes = {
|
|
|
5247
5568
|
"antigravity": {
|
|
5248
5569
|
"id": "antigravity",
|
|
5249
5570
|
"role": "runtime",
|
|
5250
|
-
"version": "1.
|
|
5571
|
+
"version": "1.14.0",
|
|
5251
5572
|
"title": "Antigravity",
|
|
5252
5573
|
"description": "Google Antigravity IDE — config/settings home nested under ~/.gemini/antigravity (probed across 1.x and 2.x layouts); global skills/agents install under ~/.gemini/config, the dir AGY scans for global discovery (#3738); Gemini hook event dialect; flat skill layout; tier-1 support.",
|
|
5253
5574
|
"tier": "core",
|
|
@@ -5335,7 +5656,8 @@ const runtimes = {
|
|
|
5335
5656
|
"background": true,
|
|
5336
5657
|
"subagentToolkit": "full",
|
|
5337
5658
|
"backgroundDispatch": "undocumented",
|
|
5338
|
-
"isolation": "undocumented"
|
|
5659
|
+
"isolation": "undocumented",
|
|
5660
|
+
"maxConcurrency": "undocumented"
|
|
5339
5661
|
},
|
|
5340
5662
|
"modelMode": "passive",
|
|
5341
5663
|
"hookBus": "host",
|
|
@@ -5366,7 +5688,7 @@ const runtimes = {
|
|
|
5366
5688
|
"binary": "agy",
|
|
5367
5689
|
"args": [
|
|
5368
5690
|
"--print-timeout",
|
|
5369
|
-
"
|
|
5691
|
+
"{{nativeTimeout}}",
|
|
5370
5692
|
"{{model}}",
|
|
5371
5693
|
"-p",
|
|
5372
5694
|
"{{prompt}}"
|
|
@@ -5377,12 +5699,15 @@ const runtimes = {
|
|
|
5377
5699
|
"effortChannel": "none"
|
|
5378
5700
|
},
|
|
5379
5701
|
"timeoutFloorMs": 600000,
|
|
5702
|
+
"timeoutConfigKey": "review.timeouts.antigravity",
|
|
5380
5703
|
"emptyOutput": "handler-owned",
|
|
5381
5704
|
"reviewsSection": "Antigravity",
|
|
5382
5705
|
"evidenceClass": "source-grounded",
|
|
5383
5706
|
"requiresBinaries": [],
|
|
5384
5707
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.antigravity",
|
|
5385
5708
|
"modelConfigKey": "review.models.agy",
|
|
5709
|
+
"effortConfigKey": null,
|
|
5710
|
+
"defaultEffort": null,
|
|
5386
5711
|
"handler": "antigravity"
|
|
5387
5712
|
},
|
|
5388
5713
|
"config": {
|
|
@@ -5395,13 +5720,18 @@ const runtimes = {
|
|
|
5395
5720
|
"type": "number",
|
|
5396
5721
|
"default": -1,
|
|
5397
5722
|
"description": "Prompt-token budget for the Antigravity reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\". Keyed on the reviewer slug `antigravity`, not the `agy` binary alias used by review.models.agy."
|
|
5723
|
+
},
|
|
5724
|
+
"review.timeouts.antigravity": {
|
|
5725
|
+
"type": "number",
|
|
5726
|
+
"default": -1,
|
|
5727
|
+
"description": "Outer wall-clock timeout override (seconds) for the Antigravity reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
5398
5728
|
}
|
|
5399
5729
|
}
|
|
5400
5730
|
},
|
|
5401
5731
|
"augment": {
|
|
5402
5732
|
"id": "augment",
|
|
5403
5733
|
"role": "runtime",
|
|
5404
|
-
"version": "1.
|
|
5734
|
+
"version": "1.14.0",
|
|
5405
5735
|
"title": "Augment Code",
|
|
5406
5736
|
"description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
5407
5737
|
"tier": "core",
|
|
@@ -5500,7 +5830,8 @@ const runtimes = {
|
|
|
5500
5830
|
"background": true,
|
|
5501
5831
|
"subagentToolkit": "full",
|
|
5502
5832
|
"backgroundDispatch": "undocumented",
|
|
5503
|
-
"isolation": "undocumented"
|
|
5833
|
+
"isolation": "undocumented",
|
|
5834
|
+
"maxConcurrency": "undocumented"
|
|
5504
5835
|
},
|
|
5505
5836
|
"modelMode": "passive",
|
|
5506
5837
|
"hookBus": "host",
|
|
@@ -5514,7 +5845,7 @@ const runtimes = {
|
|
|
5514
5845
|
"claude": {
|
|
5515
5846
|
"id": "claude",
|
|
5516
5847
|
"role": "runtime",
|
|
5517
|
-
"version": "1.
|
|
5848
|
+
"version": "1.14.0",
|
|
5518
5849
|
"title": "Claude Code",
|
|
5519
5850
|
"description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
|
|
5520
5851
|
"tier": "core",
|
|
@@ -5598,7 +5929,8 @@ const runtimes = {
|
|
|
5598
5929
|
"background": true,
|
|
5599
5930
|
"subagentToolkit": "full",
|
|
5600
5931
|
"backgroundDispatch": false,
|
|
5601
|
-
"isolation": "harness-worktree"
|
|
5932
|
+
"isolation": "harness-worktree",
|
|
5933
|
+
"maxConcurrency": 20
|
|
5602
5934
|
},
|
|
5603
5935
|
"modelMode": "passive",
|
|
5604
5936
|
"hookBus": "host",
|
|
@@ -5657,12 +5989,15 @@ const runtimes = {
|
|
|
5657
5989
|
}
|
|
5658
5990
|
},
|
|
5659
5991
|
"timeoutFloorMs": 1200000,
|
|
5992
|
+
"timeoutConfigKey": "review.timeouts.claude",
|
|
5660
5993
|
"emptyOutput": "stub-with-stderr",
|
|
5661
5994
|
"reviewsSection": "Claude",
|
|
5662
5995
|
"evidenceClass": "source-grounded",
|
|
5663
5996
|
"requiresBinaries": [],
|
|
5664
5997
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.claude",
|
|
5665
5998
|
"modelConfigKey": "review.models.claude",
|
|
5999
|
+
"effortConfigKey": "review.effort.claude",
|
|
6000
|
+
"defaultEffort": "high",
|
|
5666
6001
|
"handler": null
|
|
5667
6002
|
},
|
|
5668
6003
|
"config": {
|
|
@@ -5675,13 +6010,23 @@ const runtimes = {
|
|
|
5675
6010
|
"type": "number",
|
|
5676
6011
|
"default": -1,
|
|
5677
6012
|
"description": "Prompt-token budget for the Claude reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
6013
|
+
},
|
|
6014
|
+
"review.timeouts.claude": {
|
|
6015
|
+
"type": "number",
|
|
6016
|
+
"default": -1,
|
|
6017
|
+
"description": "Outer wall-clock timeout override (seconds) for the Claude reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
6018
|
+
},
|
|
6019
|
+
"review.effort.claude": {
|
|
6020
|
+
"type": "string",
|
|
6021
|
+
"default": "",
|
|
6022
|
+
"description": "Reasoning effort for the Claude reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
5678
6023
|
}
|
|
5679
6024
|
}
|
|
5680
6025
|
},
|
|
5681
6026
|
"cline": {
|
|
5682
6027
|
"id": "cline",
|
|
5683
6028
|
"role": "runtime",
|
|
5684
|
-
"version": "1.
|
|
6029
|
+
"version": "1.14.0",
|
|
5685
6030
|
"title": "Cline",
|
|
5686
6031
|
"description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
|
|
5687
6032
|
"tier": "core",
|
|
@@ -5751,7 +6096,8 @@ const runtimes = {
|
|
|
5751
6096
|
"background": true,
|
|
5752
6097
|
"subagentToolkit": "read-only",
|
|
5753
6098
|
"backgroundDispatch": false,
|
|
5754
|
-
"isolation": "undocumented"
|
|
6099
|
+
"isolation": "undocumented",
|
|
6100
|
+
"maxConcurrency": "undocumented"
|
|
5755
6101
|
},
|
|
5756
6102
|
"modelMode": "active",
|
|
5757
6103
|
"hookBus": "host",
|
|
@@ -5773,7 +6119,7 @@ const runtimes = {
|
|
|
5773
6119
|
"codebuddy": {
|
|
5774
6120
|
"id": "codebuddy",
|
|
5775
6121
|
"role": "runtime",
|
|
5776
|
-
"version": "1.
|
|
6122
|
+
"version": "1.14.0",
|
|
5777
6123
|
"title": "CodeBuddy",
|
|
5778
6124
|
"description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
5779
6125
|
"tier": "core",
|
|
@@ -5873,7 +6219,8 @@ const runtimes = {
|
|
|
5873
6219
|
"background": true,
|
|
5874
6220
|
"subagentToolkit": "full",
|
|
5875
6221
|
"backgroundDispatch": false,
|
|
5876
|
-
"isolation": "undocumented"
|
|
6222
|
+
"isolation": "undocumented",
|
|
6223
|
+
"maxConcurrency": "undocumented"
|
|
5877
6224
|
},
|
|
5878
6225
|
"modelMode": "passive",
|
|
5879
6226
|
"hookBus": "host",
|
|
@@ -5890,7 +6237,7 @@ const runtimes = {
|
|
|
5890
6237
|
"codex": {
|
|
5891
6238
|
"id": "codex",
|
|
5892
6239
|
"role": "runtime",
|
|
5893
|
-
"version": "1.
|
|
6240
|
+
"version": "1.14.0",
|
|
5894
6241
|
"title": "OpenAI Codex CLI",
|
|
5895
6242
|
"description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
|
|
5896
6243
|
"tier": "core",
|
|
@@ -5974,7 +6321,8 @@ const runtimes = {
|
|
|
5974
6321
|
"background": true,
|
|
5975
6322
|
"subagentToolkit": "full",
|
|
5976
6323
|
"backgroundDispatch": true,
|
|
5977
|
-
"isolation": "orchestrator-worktree"
|
|
6324
|
+
"isolation": "orchestrator-worktree",
|
|
6325
|
+
"maxConcurrency": "undocumented"
|
|
5978
6326
|
},
|
|
5979
6327
|
"modelMode": "passive",
|
|
5980
6328
|
"hookBus": "host",
|
|
@@ -5997,7 +6345,11 @@ const runtimes = {
|
|
|
5997
6345
|
"tomlConfigInstall": true,
|
|
5998
6346
|
"cleanupSkillSidecars": true,
|
|
5999
6347
|
"agentTomlFiles": true,
|
|
6000
|
-
"frontmatterDialect": "codex"
|
|
6348
|
+
"frontmatterDialect": "codex",
|
|
6349
|
+
"unsupportedFeatures": [
|
|
6350
|
+
"context-warnings",
|
|
6351
|
+
"phase-lifecycle-display"
|
|
6352
|
+
]
|
|
6001
6353
|
}
|
|
6002
6354
|
},
|
|
6003
6355
|
"reviewer": {
|
|
@@ -6028,12 +6380,15 @@ const runtimes = {
|
|
|
6028
6380
|
"effortChannel": "argv"
|
|
6029
6381
|
},
|
|
6030
6382
|
"timeoutFloorMs": 1200000,
|
|
6383
|
+
"timeoutConfigKey": "review.timeouts.codex",
|
|
6031
6384
|
"emptyOutput": "stub-with-stderr",
|
|
6032
6385
|
"reviewsSection": "Codex",
|
|
6033
6386
|
"evidenceClass": "source-grounded",
|
|
6034
6387
|
"requiresBinaries": [],
|
|
6035
6388
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.codex",
|
|
6036
6389
|
"modelConfigKey": "review.models.codex",
|
|
6390
|
+
"effortConfigKey": "review.effort.codex",
|
|
6391
|
+
"defaultEffort": "high",
|
|
6037
6392
|
"handler": null
|
|
6038
6393
|
},
|
|
6039
6394
|
"config": {
|
|
@@ -6046,13 +6401,23 @@ const runtimes = {
|
|
|
6046
6401
|
"type": "number",
|
|
6047
6402
|
"default": -1,
|
|
6048
6403
|
"description": "Prompt-token budget for the Codex reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
6404
|
+
},
|
|
6405
|
+
"review.timeouts.codex": {
|
|
6406
|
+
"type": "number",
|
|
6407
|
+
"default": -1,
|
|
6408
|
+
"description": "Outer wall-clock timeout override (seconds) for the Codex reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
6409
|
+
},
|
|
6410
|
+
"review.effort.codex": {
|
|
6411
|
+
"type": "string",
|
|
6412
|
+
"default": "",
|
|
6413
|
+
"description": "Reasoning effort for the Codex reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
6049
6414
|
}
|
|
6050
6415
|
}
|
|
6051
6416
|
},
|
|
6052
6417
|
"copilot": {
|
|
6053
6418
|
"id": "copilot",
|
|
6054
6419
|
"role": "runtime",
|
|
6055
|
-
"version": "1.
|
|
6420
|
+
"version": "1.14.0",
|
|
6056
6421
|
"title": "GitHub Copilot",
|
|
6057
6422
|
"description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
|
|
6058
6423
|
"tier": "core",
|
|
@@ -6131,7 +6496,8 @@ const runtimes = {
|
|
|
6131
6496
|
"background": true,
|
|
6132
6497
|
"subagentToolkit": "full",
|
|
6133
6498
|
"backgroundDispatch": false,
|
|
6134
|
-
"isolation": "undocumented"
|
|
6499
|
+
"isolation": "undocumented",
|
|
6500
|
+
"maxConcurrency": "undocumented"
|
|
6135
6501
|
},
|
|
6136
6502
|
"modelMode": "passive",
|
|
6137
6503
|
"hookBus": "host",
|
|
@@ -6151,7 +6517,7 @@ const runtimes = {
|
|
|
6151
6517
|
"cursor": {
|
|
6152
6518
|
"id": "cursor",
|
|
6153
6519
|
"role": "runtime",
|
|
6154
|
-
"version": "1.
|
|
6520
|
+
"version": "1.14.0",
|
|
6155
6521
|
"title": "Cursor",
|
|
6156
6522
|
"description": "Cursor IDE — skills-only workflow surface; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
|
|
6157
6523
|
"tier": "core",
|
|
@@ -6230,7 +6596,8 @@ const runtimes = {
|
|
|
6230
6596
|
"background": true,
|
|
6231
6597
|
"subagentToolkit": "full",
|
|
6232
6598
|
"backgroundDispatch": true,
|
|
6233
|
-
"isolation": "harness-worktree"
|
|
6599
|
+
"isolation": "harness-worktree",
|
|
6600
|
+
"maxConcurrency": "undocumented"
|
|
6234
6601
|
},
|
|
6235
6602
|
"modelMode": "passive",
|
|
6236
6603
|
"hookBus": "host",
|
|
@@ -6278,6 +6645,7 @@ const runtimes = {
|
|
|
6278
6645
|
"binary": "cursor-agent",
|
|
6279
6646
|
"args": [
|
|
6280
6647
|
"-p",
|
|
6648
|
+
"{{model}}",
|
|
6281
6649
|
"--mode",
|
|
6282
6650
|
"ask",
|
|
6283
6651
|
"--trust",
|
|
@@ -6287,19 +6655,27 @@ const runtimes = {
|
|
|
6287
6655
|
],
|
|
6288
6656
|
"promptChannel": "argv-file-ref",
|
|
6289
6657
|
"outputChannel": "stdout",
|
|
6290
|
-
"modelArg":
|
|
6658
|
+
"modelArg": "--model",
|
|
6291
6659
|
"effortChannel": "none"
|
|
6292
6660
|
},
|
|
6293
6661
|
"timeoutFloorMs": 900000,
|
|
6662
|
+
"timeoutConfigKey": null,
|
|
6294
6663
|
"emptyOutput": "stub-with-stderr",
|
|
6295
6664
|
"reviewsSection": "Cursor",
|
|
6296
6665
|
"evidenceClass": "source-grounded",
|
|
6297
6666
|
"requiresBinaries": [],
|
|
6298
6667
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.cursor",
|
|
6299
|
-
"modelConfigKey":
|
|
6668
|
+
"modelConfigKey": "review.models.cursor",
|
|
6669
|
+
"effortConfigKey": null,
|
|
6670
|
+
"defaultEffort": null,
|
|
6300
6671
|
"handler": null
|
|
6301
6672
|
},
|
|
6302
6673
|
"config": {
|
|
6674
|
+
"review.models.cursor": {
|
|
6675
|
+
"type": "string",
|
|
6676
|
+
"default": "",
|
|
6677
|
+
"description": "Model passed to the Cursor reviewer lane."
|
|
6678
|
+
},
|
|
6303
6679
|
"review.max_prompt_tokens_per_reviewer.cursor": {
|
|
6304
6680
|
"type": "number",
|
|
6305
6681
|
"default": -1,
|
|
@@ -6310,7 +6686,7 @@ const runtimes = {
|
|
|
6310
6686
|
"hermes": {
|
|
6311
6687
|
"id": "hermes",
|
|
6312
6688
|
"role": "runtime",
|
|
6313
|
-
"version": "1.
|
|
6689
|
+
"version": "1.14.0",
|
|
6314
6690
|
"title": "Hermes Agent",
|
|
6315
6691
|
"description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
6316
6692
|
"tier": "core",
|
|
@@ -6407,7 +6783,8 @@ const runtimes = {
|
|
|
6407
6783
|
"background": true,
|
|
6408
6784
|
"subagentToolkit": "read-only",
|
|
6409
6785
|
"backgroundDispatch": false,
|
|
6410
|
-
"isolation": "undocumented"
|
|
6786
|
+
"isolation": "undocumented",
|
|
6787
|
+
"maxConcurrency": "undocumented"
|
|
6411
6788
|
},
|
|
6412
6789
|
"modelMode": "active",
|
|
6413
6790
|
"hookBus": "host",
|
|
@@ -6421,7 +6798,7 @@ const runtimes = {
|
|
|
6421
6798
|
"kilo": {
|
|
6422
6799
|
"id": "kilo",
|
|
6423
6800
|
"role": "runtime",
|
|
6424
|
-
"version": "1.
|
|
6801
|
+
"version": "1.14.0",
|
|
6425
6802
|
"title": "Kilo Code",
|
|
6426
6803
|
"description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
|
|
6427
6804
|
"tier": "core",
|
|
@@ -6523,7 +6900,8 @@ const runtimes = {
|
|
|
6523
6900
|
"background": true,
|
|
6524
6901
|
"subagentToolkit": "undocumented",
|
|
6525
6902
|
"backgroundDispatch": false,
|
|
6526
|
-
"isolation": "undocumented"
|
|
6903
|
+
"isolation": "undocumented",
|
|
6904
|
+
"maxConcurrency": "undocumented"
|
|
6527
6905
|
},
|
|
6528
6906
|
"modelMode": "active",
|
|
6529
6907
|
"hookBus": "host",
|
|
@@ -6550,7 +6928,7 @@ const runtimes = {
|
|
|
6550
6928
|
"kimi": {
|
|
6551
6929
|
"id": "kimi",
|
|
6552
6930
|
"role": "runtime",
|
|
6553
|
-
"version": "1.
|
|
6931
|
+
"version": "1.14.0",
|
|
6554
6932
|
"title": "Kimi CLI",
|
|
6555
6933
|
"description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; native config.toml [[hooks]] bus at ~/.kimi/config.toml; background dispatch; tier-2 support.",
|
|
6556
6934
|
"tier": "core",
|
|
@@ -6622,7 +7000,8 @@ const runtimes = {
|
|
|
6622
7000
|
"background": true,
|
|
6623
7001
|
"subagentToolkit": "undocumented",
|
|
6624
7002
|
"backgroundDispatch": true,
|
|
6625
|
-
"isolation": "orchestrator-worktree"
|
|
7003
|
+
"isolation": "orchestrator-worktree",
|
|
7004
|
+
"maxConcurrency": "undocumented"
|
|
6626
7005
|
},
|
|
6627
7006
|
"modelMode": "passive",
|
|
6628
7007
|
"hookBus": "host",
|
|
@@ -6645,14 +7024,15 @@ const runtimes = {
|
|
|
6645
7024
|
"verificationStyle": "kimi",
|
|
6646
7025
|
"agentManifestStyle": "kimi-nested",
|
|
6647
7026
|
"doneBannerStyle": "kimi-agent-file",
|
|
6648
|
-
"skipSharedHooksInstall": true
|
|
7027
|
+
"skipSharedHooksInstall": true,
|
|
7028
|
+
"noPathRewrite": true
|
|
6649
7029
|
}
|
|
6650
7030
|
}
|
|
6651
7031
|
},
|
|
6652
7032
|
"kimi-code": {
|
|
6653
7033
|
"id": "kimi-code",
|
|
6654
7034
|
"role": "runtime",
|
|
6655
|
-
"version": "1.
|
|
7035
|
+
"version": "1.14.0",
|
|
6656
7036
|
"title": "Kimi Code CLI",
|
|
6657
7037
|
"description": "Kimi Code CLI (Moonshot AI, Node) — Agent Skills auto-discovered at ~/.kimi-code/skills; global AGENTS.md at ~/.kimi-code/AGENTS.md; native config.toml + [[hooks]] bus; three built-in subagents (coder/explore/plan), NO custom named subagents; background dispatch; tier-2 support. Distinct from Python kimi-cli (the 'kimi' capability) per ADR-1239 EoS — Kimi Code cannot dispatch named subagents so the kimi-agents YAML layout does NOT apply; persona injection rides the existing ${AGENT_SKILLS_*} workflow fallback. Install-layout, agent-install-check, and install-time decision (kimi vs kimi-code) land in follow-up PRs; this descriptor is the EoS foundation.",
|
|
6658
7038
|
"tier": "core",
|
|
@@ -6737,7 +7117,8 @@ const runtimes = {
|
|
|
6737
7117
|
"explore",
|
|
6738
7118
|
"plan"
|
|
6739
7119
|
],
|
|
6740
|
-
"isolation": "orchestrator-worktree"
|
|
7120
|
+
"isolation": "orchestrator-worktree",
|
|
7121
|
+
"maxConcurrency": "undocumented"
|
|
6741
7122
|
},
|
|
6742
7123
|
"modelMode": "passive",
|
|
6743
7124
|
"hookBus": "host",
|
|
@@ -6786,12 +7167,15 @@ const runtimes = {
|
|
|
6786
7167
|
"effortChannel": "none"
|
|
6787
7168
|
},
|
|
6788
7169
|
"timeoutFloorMs": 900000,
|
|
7170
|
+
"timeoutConfigKey": "review.timeouts.kimi-code",
|
|
6789
7171
|
"emptyOutput": "stub-with-stderr",
|
|
6790
7172
|
"reviewsSection": "Kimi Code",
|
|
6791
7173
|
"evidenceClass": "source-grounded",
|
|
6792
7174
|
"requiresBinaries": [],
|
|
6793
7175
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.kimi-code",
|
|
6794
7176
|
"modelConfigKey": "review.models.kimi-code",
|
|
7177
|
+
"effortConfigKey": null,
|
|
7178
|
+
"defaultEffort": null,
|
|
6795
7179
|
"handler": null
|
|
6796
7180
|
},
|
|
6797
7181
|
"config": {
|
|
@@ -6804,13 +7188,18 @@ const runtimes = {
|
|
|
6804
7188
|
"type": "number",
|
|
6805
7189
|
"default": -1,
|
|
6806
7190
|
"description": "Prompt-token budget for the Kimi Code reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
7191
|
+
},
|
|
7192
|
+
"review.timeouts.kimi-code": {
|
|
7193
|
+
"type": "number",
|
|
7194
|
+
"default": -1,
|
|
7195
|
+
"description": "Outer wall-clock timeout override (seconds) for the Kimi Code reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
6807
7196
|
}
|
|
6808
7197
|
}
|
|
6809
7198
|
},
|
|
6810
7199
|
"opencode": {
|
|
6811
7200
|
"id": "opencode",
|
|
6812
7201
|
"role": "runtime",
|
|
6813
|
-
"version": "1.
|
|
7202
|
+
"version": "1.14.0",
|
|
6814
7203
|
"title": "OpenCode",
|
|
6815
7204
|
"description": "OpenCode — XDG-based config dir; flat commands/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
|
|
6816
7205
|
"tier": "core",
|
|
@@ -6907,7 +7296,8 @@ const runtimes = {
|
|
|
6907
7296
|
"background": false,
|
|
6908
7297
|
"subagentToolkit": "full",
|
|
6909
7298
|
"backgroundDispatch": false,
|
|
6910
|
-
"isolation": "orchestrator-worktree"
|
|
7299
|
+
"isolation": "orchestrator-worktree",
|
|
7300
|
+
"maxConcurrency": "undocumented"
|
|
6911
7301
|
},
|
|
6912
7302
|
"modelMode": "active",
|
|
6913
7303
|
"hookBus": "host",
|
|
@@ -6967,12 +7357,15 @@ const runtimes = {
|
|
|
6967
7357
|
"effortChannel": "argv"
|
|
6968
7358
|
},
|
|
6969
7359
|
"timeoutFloorMs": 660000,
|
|
7360
|
+
"timeoutConfigKey": "review.timeouts.opencode",
|
|
6970
7361
|
"emptyOutput": "stub-with-stderr",
|
|
6971
7362
|
"reviewsSection": "OpenCode",
|
|
6972
7363
|
"evidenceClass": "source-grounded",
|
|
6973
7364
|
"requiresBinaries": [],
|
|
6974
7365
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.opencode",
|
|
6975
7366
|
"modelConfigKey": "review.models.opencode",
|
|
7367
|
+
"effortConfigKey": "review.effort.opencode",
|
|
7368
|
+
"defaultEffort": "high",
|
|
6976
7369
|
"handler": "opencode"
|
|
6977
7370
|
},
|
|
6978
7371
|
"config": {
|
|
@@ -6985,13 +7378,23 @@ const runtimes = {
|
|
|
6985
7378
|
"type": "number",
|
|
6986
7379
|
"default": -1,
|
|
6987
7380
|
"description": "Prompt-token budget for the OpenCode reviewer lane. Unset is -1, a sentinel: 0 is a legitimate value meaning \"do not trim this lane\", so it cannot double as \"not configured\"."
|
|
7381
|
+
},
|
|
7382
|
+
"review.timeouts.opencode": {
|
|
7383
|
+
"type": "number",
|
|
7384
|
+
"default": -1,
|
|
7385
|
+
"description": "Outer wall-clock timeout override (seconds) for the OpenCode reviewer lane. Unset is -1, a sentinel: 0 or a negative number is also treated as unset (a timeout has no legitimate zero/negative value), so no second sentinel is needed. Falls back to the lane's built-in timeoutFloorMs when unset."
|
|
7386
|
+
},
|
|
7387
|
+
"review.effort.opencode": {
|
|
7388
|
+
"type": "string",
|
|
7389
|
+
"default": "",
|
|
7390
|
+
"description": "Reasoning effort for the OpenCode reviewer lane: minimal, low, medium, high, xhigh, max, or inherit. Unset falls back to the lane's declared review default (high); inherit emits no effort argument so the CLI's own configuration decides. An unrecognized value falls back to the lane default rather than being forwarded."
|
|
6988
7391
|
}
|
|
6989
7392
|
}
|
|
6990
7393
|
},
|
|
6991
7394
|
"pi": {
|
|
6992
7395
|
"id": "pi",
|
|
6993
7396
|
"role": "runtime",
|
|
6994
|
-
"version": "1.
|
|
7397
|
+
"version": "1.14.0",
|
|
6995
7398
|
"title": "pi",
|
|
6996
7399
|
"description": "pi (pi.dev) — bun-runtime programmatic-CLI; TS ExtensionAPI (registerCommand/registerTool/registerProvider/pi.on); single native-extension file at ~/.pi/agent/extensions/gsd.js (.js, not .cjs — pi's extension auto-discovery accepts only .ts/.js, #2470); no shared-settings hook surface; tier-2 support.",
|
|
6997
7400
|
"tier": "core",
|
|
@@ -7037,7 +7440,8 @@ const runtimes = {
|
|
|
7037
7440
|
"background": false,
|
|
7038
7441
|
"backgroundDispatch": false,
|
|
7039
7442
|
"subagentToolkit": "undocumented",
|
|
7040
|
-
"isolation": "none"
|
|
7443
|
+
"isolation": "none",
|
|
7444
|
+
"maxConcurrency": "undocumented"
|
|
7041
7445
|
},
|
|
7042
7446
|
"modelMode": "active",
|
|
7043
7447
|
"hookBus": "host",
|
|
@@ -7060,7 +7464,7 @@ const runtimes = {
|
|
|
7060
7464
|
"qwen": {
|
|
7061
7465
|
"id": "qwen",
|
|
7062
7466
|
"role": "runtime",
|
|
7063
|
-
"version": "1.
|
|
7467
|
+
"version": "1.14.0",
|
|
7064
7468
|
"title": "Qwen Code",
|
|
7065
7469
|
"description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
|
|
7066
7470
|
"tier": "core",
|
|
@@ -7144,7 +7548,8 @@ const runtimes = {
|
|
|
7144
7548
|
"background": true,
|
|
7145
7549
|
"subagentToolkit": "full",
|
|
7146
7550
|
"backgroundDispatch": false,
|
|
7147
|
-
"isolation": "undocumented"
|
|
7551
|
+
"isolation": "undocumented",
|
|
7552
|
+
"maxConcurrency": "undocumented"
|
|
7148
7553
|
},
|
|
7149
7554
|
"modelMode": "passive",
|
|
7150
7555
|
"hookBus": "host",
|
|
@@ -7187,12 +7592,15 @@ const runtimes = {
|
|
|
7187
7592
|
"effortChannel": "none"
|
|
7188
7593
|
},
|
|
7189
7594
|
"timeoutFloorMs": 900000,
|
|
7595
|
+
"timeoutConfigKey": null,
|
|
7190
7596
|
"emptyOutput": "stub-with-stderr",
|
|
7191
7597
|
"reviewsSection": "Qwen",
|
|
7192
7598
|
"evidenceClass": "source-grounded",
|
|
7193
7599
|
"requiresBinaries": [],
|
|
7194
7600
|
"promptBudgetKey": "review.max_prompt_tokens_per_reviewer.qwen",
|
|
7195
7601
|
"modelConfigKey": null,
|
|
7602
|
+
"effortConfigKey": null,
|
|
7603
|
+
"defaultEffort": null,
|
|
7196
7604
|
"handler": null
|
|
7197
7605
|
},
|
|
7198
7606
|
"config": {
|
|
@@ -7206,7 +7614,7 @@ const runtimes = {
|
|
|
7206
7614
|
"trae": {
|
|
7207
7615
|
"id": "trae",
|
|
7208
7616
|
"role": "runtime",
|
|
7209
|
-
"version": "1.
|
|
7617
|
+
"version": "1.14.0",
|
|
7210
7618
|
"title": "Trae IDE",
|
|
7211
7619
|
"description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
|
|
7212
7620
|
"tier": "core",
|
|
@@ -7284,7 +7692,8 @@ const runtimes = {
|
|
|
7284
7692
|
"background": true,
|
|
7285
7693
|
"subagentToolkit": "undocumented",
|
|
7286
7694
|
"backgroundDispatch": "undocumented",
|
|
7287
|
-
"isolation": "undocumented"
|
|
7695
|
+
"isolation": "undocumented",
|
|
7696
|
+
"maxConcurrency": "undocumented"
|
|
7288
7697
|
},
|
|
7289
7698
|
"modelMode": "passive",
|
|
7290
7699
|
"hookBus": "engine",
|
|
@@ -7303,7 +7712,7 @@ const runtimes = {
|
|
|
7303
7712
|
"vscode": {
|
|
7304
7713
|
"id": "vscode",
|
|
7305
7714
|
"role": "runtime",
|
|
7306
|
-
"version": "1.
|
|
7715
|
+
"version": "1.14.0",
|
|
7307
7716
|
"title": "VS Code",
|
|
7308
7717
|
"description": "VS Code — Marketplace/VSIX extension; no file-projected config directory; IDE-profile reference host (active vscode.lm model, engine-owned hook bus, sandboxed globalState/workspaceState stateIO).",
|
|
7309
7718
|
"tier": "core",
|
|
@@ -7346,7 +7755,8 @@ const runtimes = {
|
|
|
7346
7755
|
"background": true,
|
|
7347
7756
|
"subagentToolkit": "undocumented",
|
|
7348
7757
|
"backgroundDispatch": "undocumented",
|
|
7349
|
-
"isolation": "undocumented"
|
|
7758
|
+
"isolation": "undocumented",
|
|
7759
|
+
"maxConcurrency": "undocumented"
|
|
7350
7760
|
},
|
|
7351
7761
|
"modelMode": "active",
|
|
7352
7762
|
"hookBus": "engine",
|
|
@@ -7360,7 +7770,7 @@ const runtimes = {
|
|
|
7360
7770
|
"windsurf": {
|
|
7361
7771
|
"id": "windsurf",
|
|
7362
7772
|
"role": "runtime",
|
|
7363
|
-
"version": "1.
|
|
7773
|
+
"version": "1.14.0",
|
|
7364
7774
|
"title": "Windsurf",
|
|
7365
7775
|
"description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; Cascade native hooks.json blocking hook bus (pre_write_code, pre_run_command); tier-2 support.",
|
|
7366
7776
|
"tier": "core",
|
|
@@ -7431,7 +7841,8 @@ const runtimes = {
|
|
|
7431
7841
|
"background": "undocumented",
|
|
7432
7842
|
"subagentToolkit": "undocumented",
|
|
7433
7843
|
"backgroundDispatch": "undocumented",
|
|
7434
|
-
"isolation": "none"
|
|
7844
|
+
"isolation": "none",
|
|
7845
|
+
"maxConcurrency": "undocumented"
|
|
7435
7846
|
},
|
|
7436
7847
|
"modelMode": "passive",
|
|
7437
7848
|
"hookBus": "host",
|
|
@@ -7451,7 +7862,7 @@ const runtimes = {
|
|
|
7451
7862
|
"zcode": {
|
|
7452
7863
|
"id": "zcode",
|
|
7453
7864
|
"role": "runtime",
|
|
7454
|
-
"version": "1.
|
|
7865
|
+
"version": "1.14.0",
|
|
7455
7866
|
"title": "ZCode",
|
|
7456
7867
|
"description": "ZCode (Z.ai) — desktop Agentic Development Environment for GLM-5.2; Claude-shaped nested skills at ~/.zcode/skills/<name>/SKILL.md, slash commands, named subagents, native MCP; declarative plugin surface; profile-marker install; tier-2 community support.",
|
|
7457
7868
|
"tier": "core",
|
|
@@ -7545,7 +7956,8 @@ const runtimes = {
|
|
|
7545
7956
|
"background": false,
|
|
7546
7957
|
"subagentToolkit": "full",
|
|
7547
7958
|
"backgroundDispatch": false,
|
|
7548
|
-
"isolation": "none"
|
|
7959
|
+
"isolation": "none",
|
|
7960
|
+
"maxConcurrency": "undocumented"
|
|
7549
7961
|
},
|
|
7550
7962
|
"modelMode": "passive",
|
|
7551
7963
|
"hookBus": "host",
|