@event4u/agent-config 9.7.0 → 9.9.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/CHANGELOG.md +314 -190
- package/CONTRIBUTING.md +23 -7
- package/MIGRATION.md +20 -0
- package/README.md +57 -11
- package/dist/agent-src/commands/agents/audit.md +1 -1
- package/dist/agent-src/commands/agents/optimize.md +2 -2
- package/dist/agent-src/commands/agents/user.md +1 -1
- package/dist/agent-src/commands/agents.md +1 -1
- package/dist/agent-src/commands/check-current-md.md +3 -3
- package/dist/agent-src/commands/commit/in-chunks.md +8 -0
- package/dist/agent-src/commands/commit.md +17 -0
- package/dist/agent-src/commands/fix/portability.md +2 -2
- package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
- package/dist/agent-src/commands/fix/refs.md +2 -2
- package/dist/agent-src/commands/fix/route.md +4 -3
- package/dist/agent-src/commands/fix.md +9 -6
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/image.md +1 -1
- package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
- package/dist/agent-src/commands/optimize/skills.md +2 -2
- package/dist/agent-src/commands/post-as.md +1 -1
- package/dist/agent-src/commands/pr/create.md +4 -0
- package/dist/agent-src/commands/research.md +1 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/team/delegate.md +4 -0
- package/dist/agent-src/commands/video.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
- package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
- package/dist/agent-src/contexts/override-system.md +75 -5
- package/dist/agent-src/rules/code-provenance.md +112 -0
- package/dist/agent-src/rules/context-hygiene.md +2 -0
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
- package/dist/agent-src/rules/domain-safety-pii.md +1 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
- package/dist/agent-src/rules/git-history-discipline.md +2 -0
- package/dist/agent-src/rules/history-discipline.md +80 -0
- package/dist/agent-src/rules/language-and-tone.md +2 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
- package/dist/agent-src/rules/media-governance-routing.md +2 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
- package/dist/agent-src/rules/no-roadmap-references.md +4 -1
- package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
- package/dist/agent-src/rules/onboarding-gate.md +2 -0
- package/dist/agent-src/rules/output-discipline.md +2 -0
- package/dist/agent-src/rules/persona-governance.md +2 -0
- package/dist/agent-src/rules/php-coding.md +1 -0
- package/dist/agent-src/rules/preservation-guard.md +3 -0
- package/dist/agent-src/rules/reviewer-awareness.md +1 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +9 -0
- package/dist/agent-src/rules/scale-discipline.md +92 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +11 -1
- package/dist/agent-src/rules/session-canary.md +77 -0
- package/dist/agent-src/rules/skill-quality.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +2 -0
- package/dist/agent-src/rules/source-of-truth.md +2 -0
- package/dist/agent-src/rules/telegraph-speak.md +2 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -1
- package/dist/agent-src/rules/tool-safety.md +4 -1
- package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
- package/dist/agent-src/rules/verify-before-complete.md +2 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +97 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-review/SKILL.md +5 -6
- package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
- package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
- package/dist/agent-src/skills/history-design/SKILL.md +101 -0
- package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
- package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
- package/dist/agent-src/skills/image-editing/SKILL.md +2 -1
- package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
- package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
- package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
- package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
- package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
- package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +43 -1
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
- package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +3 -3
- package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
- package/dist/agent-src/templates/persona.md +2 -2
- package/dist/agent-src/templates/rule.md +2 -2
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/dist/cli/commands/doctorShell.js +20 -0
- package/dist/cli/commands/doctorShell.js.map +1 -1
- package/dist/cli/commands/rtkDetect.js +58 -0
- package/dist/cli/commands/rtkDetect.js.map +1 -0
- package/dist/cli/configRoot.js +112 -0
- package/dist/cli/configRoot.js.map +1 -0
- package/dist/cli/configRoot.test.js +97 -0
- package/dist/cli/configRoot.test.js.map +1 -0
- package/dist/cli/firstRunNotice.js +70 -0
- package/dist/cli/firstRunNotice.js.map +1 -0
- package/dist/cli/help.js +4 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/main.js +54 -5
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/registry.js +8 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +502 -101
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +95 -8
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +36 -7
- package/dist/hooks/dispatch.js +19475 -0
- package/dist/install/agentSwitchDetection.js +75 -0
- package/dist/install/agentSwitchDetection.js.map +1 -0
- package/dist/install/agentSwitchProfile.js +117 -0
- package/dist/install/agentSwitchProfile.js.map +1 -0
- package/dist/install/atomic.js +1 -1
- package/dist/install/detect.js +1 -1
- package/dist/install/install.mjs +791 -486
- package/dist/install/rtkDetection.js +213 -0
- package/dist/install/rtkDetection.js.map +1 -0
- package/dist/install/rule_scope.js +2 -1
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/types.js +2 -2
- package/dist/install/wizard-plan.js +1 -1
- package/dist/install/wizardDismissals.js +58 -0
- package/dist/install/wizardDismissals.js.map +1 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +15 -4
- package/dist/mcp/server.json +20 -0
- package/dist/mcp/server.mjs +44292 -0
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +14 -7
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/app.js +12 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/io/sharedWriteCheck.js +101 -0
- package/dist/server/io/sharedWriteCheck.js.map +1 -0
- package/dist/server/routes/ping.js +32 -0
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/settings.js +21 -4
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/userMd.js +21 -4
- package/dist/server/routes/userMd.js.map +1 -1
- package/dist/server/routes/wizard.js +68 -25
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/schemas/settings.js +12 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/server/serverInfo.js +6 -2
- package/dist/server/serverInfo.js.map +1 -1
- package/dist/server/token.js +11 -4
- package/dist/server/token.js.map +1 -1
- package/dist/server/writeRoot.js +15 -1
- package/dist/server/writeRoot.js.map +1 -1
- package/dist/shared/capabilities.js +33 -0
- package/dist/shared/capabilities.js.map +1 -0
- package/dist/shared/capabilities.test.js +39 -0
- package/dist/shared/capabilities.test.js.map +1 -0
- package/dist/ui/assets/index-BpSQt5vm.js +40 -0
- package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
- package/dist/ui/assets/index-jSfMW8_t.css +1 -0
- package/dist/ui/index.html +15 -6
- package/docs/MIGRATION.md +16 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
- package/package.json +22 -9
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/src/config/agent-settings.template.yml +94 -13
- package/src/config/discovery/packs.yml +22 -0
- package/src/config/discovery/workspaces.yml +1 -1
- package/src/config/evaluator-budgets.json +47 -0
- package/src/config/hook-latency-budget.json +20 -0
- package/src/config/reach-channels.yml +217 -0
- package/src/config/reach-prescriptions-intake.yml +200 -0
- package/src/install/agentSwitchDetection.ts +90 -0
- package/src/install/agentSwitchProfile.ts +131 -0
- package/src/install/atomic.ts +1 -1
- package/src/install/detect.ts +1 -1
- package/src/install/rtkDetection.ts +274 -0
- package/src/install/rule_scope.ts +9 -2
- package/src/install/types.ts +2 -2
- package/src/install/wizard-plan.ts +1 -1
- package/src/install/wizardDismissals.ts +60 -0
- package/src/scripts/_cli/cmd_doctor.ts +62 -1
- package/src/scripts/_cli/cmd_memory_get.ts +197 -0
- package/src/scripts/_cli/cmd_refresh.ts +30 -0
- package/src/scripts/_dispatch.bash +96 -0
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
- package/src/scripts/_lib/auto_dispatch.ts +76 -0
- package/src/scripts/_lib/detect_target_license.ts +714 -0
- package/src/scripts/_lib/exec_evidence.ts +251 -0
- package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +15 -0
- package/src/scripts/_lib/fixtures/secret-detector/positives.txt +15 -0
- package/src/scripts/_lib/install_drift.ts +194 -0
- package/src/scripts/_lib/kernel_rules.ts +46 -0
- package/src/scripts/_lib/memory_fts_index.ts +390 -0
- package/src/scripts/_lib/orchestration_record.ts +91 -2
- package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
- package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
- package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
- package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
- package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
- package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
- package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
- package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
- package/src/scripts/_lib/persistence/types.ts +109 -0
- package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
- package/src/scripts/_lib/risk_paths.ts +160 -0
- package/src/scripts/_lib/rtk_allowlist.ts +44 -0
- package/src/scripts/_lib/secret_detector.test.ts +108 -0
- package/src/scripts/_lib/secret_detector.ts +328 -0
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
- package/src/scripts/_lib/spawn_env.ts +7 -0
- package/src/scripts/_lib/sqlite_guard.ts +191 -0
- package/src/scripts/_lib/subagent_spawn.ts +53 -0
- package/src/scripts/_lib/tool_probe.ts +359 -0
- package/src/scripts/_lib/worker_budget.ts +107 -0
- package/src/scripts/adr/regenerate_index.ts +81 -6
- package/src/scripts/ai_council/blind_review.ts +0 -0
- package/src/scripts/ai_council/config.ts +12 -6
- package/src/scripts/ai_council/orchestrator.ts +73 -3
- package/src/scripts/ai_team/review_gate.ts +8 -10
- package/src/scripts/ai_team/team_dispatch.ts +48 -0
- package/src/scripts/audit_adr_coverage.ts +33 -0
- package/src/scripts/audit_initial_context.ts +1 -1
- package/src/scripts/bench_cross_source_eval.ts +400 -0
- package/src/scripts/bench_honesty_score.ts +1093 -0
- package/src/scripts/bench_hook_latency.ts +218 -0
- package/src/scripts/build_mcp_catalog.ts +275 -0
- package/src/scripts/build_mcp_registry_manifest.ts +46 -0
- package/src/scripts/build_proof.ts +207 -0
- package/src/scripts/chat_history.ts +8 -5
- package/src/scripts/check_adr_frontmatter.ts +195 -0
- package/src/scripts/check_artefact_count_messaging.ts +4 -0
- package/src/scripts/check_backstop_debt.ts +210 -0
- package/src/scripts/check_bundle_path_leakage.ts +343 -0
- package/src/scripts/check_claims.ts +188 -8
- package/src/scripts/check_comparison.ts +12 -0
- package/src/scripts/check_enforcement_coverage.ts +592 -0
- package/src/scripts/check_evaluator_budgets.ts +99 -0
- package/src/scripts/check_kernel_rule_bundle.ts +16 -12
- package/src/scripts/check_knowledge_sharing.ts +12 -1
- package/src/scripts/check_no_external_sources.ts +2 -2
- package/src/scripts/check_reach_channels.ts +407 -0
- package/src/scripts/check_reach_staleness.ts +364 -0
- package/src/scripts/check_secret_leak.test.ts +47 -0
- package/src/scripts/check_secret_leak.ts +290 -0
- package/src/scripts/check_source_pointer_freshness.ts +28 -3
- package/src/scripts/code_graph/build.ts +0 -0
- package/src/scripts/code_graph/cli.ts +379 -0
- package/src/scripts/code_graph/detect.ts +186 -0
- package/src/scripts/code_graph/extract.ts +386 -0
- package/src/scripts/code_graph/intent.ts +45 -0
- package/src/scripts/code_graph/loader.ts +123 -0
- package/src/scripts/code_graph/query.ts +290 -0
- package/src/scripts/code_graph/sanitize.ts +30 -0
- package/src/scripts/code_graph/sqlite_store.ts +174 -0
- package/src/scripts/code_graph/types.ts +83 -0
- package/src/scripts/code_graph/validate.ts +63 -0
- package/src/scripts/condense.ts +14 -6
- package/src/scripts/context_hygiene_hook.ts +8 -5
- package/src/scripts/council_cli.ts +126 -12
- package/src/scripts/detect_target_license.ts +203 -0
- package/src/scripts/evaluator_umbrella.sh +145 -0
- package/src/scripts/external_sources_denylist.json +8 -4
- package/src/scripts/first_run_gate_hook.ts +9 -5
- package/src/scripts/generate_subagent_floor.ts +194 -0
- package/src/scripts/hermetic-install.sh +3 -3
- package/src/scripts/hook_manifest.yaml +65 -16
- package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
- package/src/scripts/hooks/block_no_verify.ts +9 -9
- package/src/scripts/hooks/code_graph_nudge_hook.ts +191 -0
- package/src/scripts/hooks/concern_registry.ts +75 -0
- package/src/scripts/hooks/design_slop_hook.ts +8 -5
- package/src/scripts/hooks/dispatch_entry.ts +37 -0
- package/src/scripts/hooks/dispatch_hook.ts +176 -3
- package/src/scripts/hooks/hook_stdin.ts +42 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
- package/src/scripts/hot_context_hook.ts +7 -6
- package/src/scripts/injection_scan_hook.ts +9 -1
- package/src/scripts/install +6 -6
- package/src/scripts/install-hooks.sh +4 -4
- package/src/scripts/install.sh +5 -4
- package/src/scripts/install.ts +264 -23
- package/src/scripts/iron_law_sha.ts +3 -12
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_budget_ownership.ts +89 -0
- package/src/scripts/lint_command_routing.ts +35 -5
- package/src/scripts/lint_command_verbs.ts +42 -9
- package/src/scripts/lint_consumer_internal_refs.ts +211 -0
- package/src/scripts/lint_discovery_vocabulary.ts +2 -0
- package/src/scripts/lint_documented_commands.ts +670 -0
- package/src/scripts/lint_framework_leakage.ts +17 -3
- package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
- package/src/scripts/lint_governed_writes.ts +335 -0
- package/src/scripts/lint_hidden_unicode.ts +6 -0
- package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
- package/src/scripts/lint_memory_tripwire.ts +186 -0
- package/src/scripts/lint_override_kernel_guard.ts +267 -0
- package/src/scripts/lint_persistence.ts +171 -0
- package/src/scripts/lint_pre_migration_refs.ts +106 -0
- package/src/scripts/lint_provenance.ts +547 -0
- package/src/scripts/lint_provenance_vocabulary.ts +437 -0
- package/src/scripts/lint_spawn_payload.ts +283 -0
- package/src/scripts/lint_store_boundary.ts +152 -0
- package/src/scripts/lint_versioned_cache.ts +7 -1
- package/src/scripts/mcp_server/__main__.ts +7 -2
- package/src/scripts/mcp_server/catalog.ts +23 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
- package/src/scripts/mcp_server/prompts.ts +6 -0
- package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
- package/src/scripts/mcp_server/tools.ts +56 -5
- package/src/scripts/mcp_telemetry_query.ts +2 -33
- package/src/scripts/mcp_telemetry_store.ts +64 -34
- package/src/scripts/measure_rule_budget.ts +3 -12
- package/src/scripts/memory_learn_hook.ts +126 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/memory_replay_24.ts +312 -0
- package/src/scripts/memory_report.ts +16 -3
- package/src/scripts/memory_signal.ts +48 -0
- package/src/scripts/memory_status.ts +6 -0
- package/src/scripts/minimal_safe_diff_hook.ts +8 -5
- package/src/scripts/onboarding_gate_hook.ts +8 -5
- package/src/scripts/orchestration_record.ts +16 -0
- package/src/scripts/pr_url_reminder_hook.ts +8 -1
- package/src/scripts/prepack-check.mjs +17 -0
- package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
- package/src/scripts/prepack_lifecycle_check.mjs +82 -0
- package/src/scripts/profile_staleness_hook.ts +8 -7
- package/src/scripts/reach_doctor.ts +1651 -0
- package/src/scripts/release.ts +24 -3
- package/src/scripts/report_install_drift.ts +109 -0
- package/src/scripts/risk_escalation_shadow.ts +160 -0
- package/src/scripts/roadmap_progress_hook.ts +8 -5
- package/src/scripts/schemas/agent-settings.schema.json +23 -0
- package/src/scripts/schemas/license-policy.schema.json +89 -0
- package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
- package/src/scripts/schemas/reach-channels.schema.json +134 -0
- package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
- package/src/scripts/schemas/rule.schema.json +20 -0
- package/src/scripts/self_review_gate.test.ts +173 -1
- package/src/scripts/self_review_gate.ts +155 -15
- package/src/scripts/session_canary_hook.ts +182 -0
- package/src/scripts/skill_linter.ts +55 -0
- package/src/scripts/smoke_quickstart.ts +2 -2
- package/src/scripts/surface_probe_hook.ts +8 -7
- package/src/scripts/sync_gitattributes.ts +310 -0
- package/src/scripts/team_review_gate_hook.ts +13 -16
- package/src/scripts/validate_reach_prescriptions.ts +751 -0
- package/src/scripts/verify_before_complete_hook.ts +8 -5
- package/src/scripts/wrapper_freshness_hook.ts +8 -7
- package/src/server/schemas/settings.ts +24 -2
- package/src/shared/capabilities.test.ts +43 -0
- package/src/shared/capabilities.ts +75 -0
- package/src/templates/minimal/agents-overrides-readme.md +20 -0
- package/dist/ui/assets/index-BPFMZWUs.css +0 -1
- package/dist/ui/assets/index-BiEZiZ31.js +0 -40
- package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
- package/docs/CLAIMS.md +0 -261
- package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
- package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
- package/docs/SKILL_CENSUS.md +0 -352
- package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
- package/docs/adrs/cost/README.md +0 -9
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
- package/docs/adrs/memory/README.md +0 -10
- package/docs/adrs/router/0001-three-tier-routing.md +0 -119
- package/docs/adrs/router/README.md +0 -9
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
- package/docs/adrs/schema/README.md +0 -9
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
- package/docs/adrs/smoke/README.md +0 -9
- package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
- package/docs/adrs/telegraph/README.md +0 -9
- package/docs/announcements/2026-05-non-dev-launch.md +0 -79
- package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
- package/docs/anti-reskin-gate.md +0 -60
- package/docs/architecture/augment-projection.md +0 -70
- package/docs/architecture/claude-bundle.md +0 -77
- package/docs/architecture/current-onboard-baseline.md +0 -126
- package/docs/architecture/current-safety-behavior.md +0 -137
- package/docs/architecture/multi-tool-projection.md +0 -125
- package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
- package/docs/architecture/source-projection.md +0 -85
- package/docs/architecture.md +0 -390
- package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
- package/docs/archive/CHANGELOG-7.0.0.md +0 -419
- package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
- package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
- package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
- package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
- package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
- package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
- package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
- package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
- package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
- package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
- package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
- package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
- package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
- package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
- package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
- package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
- package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
- package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
- package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
- package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
- package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
- package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
- package/docs/artefact-census.md +0 -71
- package/docs/benchmark.md +0 -648
- package/docs/benchmark.pinned.yml +0 -31
- package/docs/benchmarks.md +0 -85
- package/docs/capability-matrix.md +0 -33
- package/docs/case-studies/_template.md +0 -60
- package/docs/case-studies/frontend-design-positioning.md +0 -86
- package/docs/catalog.md +0 -721
- package/docs/command-flows.md +0 -272
- package/docs/command-naming-audit.md +0 -60
- package/docs/comparison.yaml +0 -45
- package/docs/contracts/CHANGELOG-conventions.md +0 -149
- package/docs/contracts/STABILITY.md +0 -188
- package/docs/contracts/adoption-signal-floor.md +0 -127
- package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
- package/docs/contracts/adr-chat-history-split.md +0 -140
- package/docs/contracts/adr-command-suggestion.md +0 -144
- package/docs/contracts/adr-forecast-construction-shape.md +0 -90
- package/docs/contracts/adr-gtm-context-spine.md +0 -116
- package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
- package/docs/contracts/adr-install-user-type-axis.md +0 -107
- package/docs/contracts/adr-layout.md +0 -107
- package/docs/contracts/adr-level-6-productization.md +0 -145
- package/docs/contracts/adr-mcp-runtime.md +0 -128
- package/docs/contracts/adr-product-ui-track.md +0 -381
- package/docs/contracts/adr-prompt-driven-execution.md +0 -186
- package/docs/contracts/adr-settings-sync-engine.md +0 -128
- package/docs/contracts/adr-user-types-axis.md +0 -127
- package/docs/contracts/adr-wing4-context-spine.md +0 -126
- package/docs/contracts/agent-user-schema.md +0 -170
- package/docs/contracts/agents-layout.md +0 -148
- package/docs/contracts/agents-md-tech-stack.md +0 -75
- package/docs/contracts/ai-council-config.md +0 -829
- package/docs/contracts/ai-team-config.md +0 -224
- package/docs/contracts/analysis-memory-loop.md +0 -149
- package/docs/contracts/at-rest-encryption.md +0 -191
- package/docs/contracts/audit-log-v1.md +0 -150
- package/docs/contracts/auto-orchestration-v1.md +0 -70
- package/docs/contracts/benchmark-ab-contract.md +0 -106
- package/docs/contracts/benchmark-corpus-spec.md +0 -125
- package/docs/contracts/benchmark-report-schema.md +0 -113
- package/docs/contracts/branch-protection-policy.md +0 -139
- package/docs/contracts/brand-token-consumption.md +0 -74
- package/docs/contracts/capability-boundary.md +0 -69
- package/docs/contracts/capability-packs.md +0 -217
- package/docs/contracts/ci-cost-budget.md +0 -111
- package/docs/contracts/ci-green-floor.md +0 -141
- package/docs/contracts/command-category-governance.md +0 -84
- package/docs/contracts/command-clusters.md +0 -399
- package/docs/contracts/command-surface-tiers.md +0 -176
- package/docs/contracts/command-taxonomy.md +0 -137
- package/docs/contracts/condensation-default-kill-criterion.md +0 -116
- package/docs/contracts/config-presets.md +0 -144
- package/docs/contracts/conformance.md +0 -84
- package/docs/contracts/consumer-bridge.md +0 -73
- package/docs/contracts/context-paths.md +0 -101
- package/docs/contracts/context-spine.md +0 -179
- package/docs/contracts/cost-dashboard.md +0 -143
- package/docs/contracts/cost-enforcement.md +0 -134
- package/docs/contracts/cost-profile-defaults.md +0 -110
- package/docs/contracts/cost-summary-schema.md +0 -107
- package/docs/contracts/creative-pack-boundary.md +0 -63
- package/docs/contracts/cross-repo-retrieval.md +0 -64
- package/docs/contracts/cross-wing-handoff.md +0 -134
- package/docs/contracts/daily-workspace.md +0 -147
- package/docs/contracts/decision-engine-gates.md +0 -120
- package/docs/contracts/decision-trace-v1.md +0 -177
- package/docs/contracts/design-artifact-lifecycle.md +0 -93
- package/docs/contracts/design-artifact-verification.md +0 -153
- package/docs/contracts/discovery-manifest.md +0 -209
- package/docs/contracts/discovery-manifest.schema.json +0 -254
- package/docs/contracts/evidence-based-pruning.md +0 -102
- package/docs/contracts/explain-modes.md +0 -187
- package/docs/contracts/explain-trace.schema.json +0 -144
- package/docs/contracts/file-ownership-matrix.json +0 -13941
- package/docs/contracts/file-ownership-matrix.md +0 -135
- package/docs/contracts/frontmatter-contract.md +0 -140
- package/docs/contracts/ghostwriter-schema.md +0 -337
- package/docs/contracts/governance-enforcement-projection.md +0 -159
- package/docs/contracts/gui-wizard.md +0 -350
- package/docs/contracts/harness-expectations.md +0 -128
- package/docs/contracts/hook-architecture-v1.md +0 -325
- package/docs/contracts/host-agent-protocol.md +0 -110
- package/docs/contracts/implement-ticket-flow.md +0 -625
- package/docs/contracts/init-telemetry.md +0 -132
- package/docs/contracts/injected-block-authenticity-model.md +0 -66
- package/docs/contracts/install-layout.md +0 -249
- package/docs/contracts/install-scopes.md +0 -82
- package/docs/contracts/installed-tools-lockfile.md +0 -144
- package/docs/contracts/installer-agent-mode.md +0 -137
- package/docs/contracts/iron-law-overrides.txt +0 -26
- package/docs/contracts/kernel-membership.md +0 -339
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
- package/docs/contracts/linear-ai-three-layers.md +0 -130
- package/docs/contracts/linter-structural-model.md +0 -181
- package/docs/contracts/load-context-budget-model.md +0 -259
- package/docs/contracts/load-context-schema.md +0 -220
- package/docs/contracts/local-analytics.md +0 -160
- package/docs/contracts/local-knowledge-ingestion.md +0 -96
- package/docs/contracts/local-server-api.md +0 -134
- package/docs/contracts/low-impact-corpus-format.md +0 -95
- package/docs/contracts/mcp-beta-criteria.md +0 -130
- package/docs/contracts/mcp-cloud-scope.md +0 -355
- package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
- package/docs/contracts/mcp-phase-1-scope.md +0 -272
- package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
- package/docs/contracts/mcp-tool-inventory.md +0 -64
- package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
- package/docs/contracts/measurement-baseline.md +0 -103
- package/docs/contracts/memory-visibility-v1.md +0 -160
- package/docs/contracts/mental-models.md +0 -336
- package/docs/contracts/migrate-command.md +0 -233
- package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
- package/docs/contracts/namespace.md +0 -125
- package/docs/contracts/no-runtime-boundary.md +0 -61
- package/docs/contracts/one-off-script-lifecycle.md +0 -110
- package/docs/contracts/orchestration-dsl-v1.md +0 -153
- package/docs/contracts/package-self-orientation.md +0 -163
- package/docs/contracts/pilot/agent-authority.md +0 -24
- package/docs/contracts/pilot/direct-answers.md +0 -70
- package/docs/contracts/pilot/language-and-tone.md +0 -63
- package/docs/contracts/plain-language-surface.md +0 -117
- package/docs/contracts/prelaunch-diagnostics.md +0 -151
- package/docs/contracts/profile-system.md +0 -167
- package/docs/contracts/reasoning-discipline-protocol.md +0 -83
- package/docs/contracts/release-pr-gating.md +0 -151
- package/docs/contracts/release-sizing.md +0 -107
- package/docs/contracts/release-trunk-sync.md +0 -105
- package/docs/contracts/review-lens-schema.md +0 -64
- package/docs/contracts/roadmap-complexity-standard.md +0 -138
- package/docs/contracts/role-experience.md +0 -125
- package/docs/contracts/router-blending.md +0 -71
- package/docs/contracts/rule-classification.md +0 -171
- package/docs/contracts/rule-interactions.md +0 -132
- package/docs/contracts/rule-interactions.yml +0 -260
- package/docs/contracts/rule-priority-hierarchy.md +0 -88
- package/docs/contracts/rule-router.md +0 -287
- package/docs/contracts/safety-model.md +0 -129
- package/docs/contracts/session-profile-overlay.md +0 -157
- package/docs/contracts/settings-api.md +0 -264
- package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
- package/docs/contracts/settings-sync-yaml-subset.md +0 -139
- package/docs/contracts/skill-bundled-assets.md +0 -62
- package/docs/contracts/skill-discovery.md +0 -80
- package/docs/contracts/skill-distribution-channels.md +0 -66
- package/docs/contracts/skill-domains.md +0 -144
- package/docs/contracts/skill-dry-run.md +0 -47
- package/docs/contracts/skill-family-map.yml +0 -915
- package/docs/contracts/smoke-contracts.md +0 -144
- package/docs/contracts/subagent-boundary.md +0 -59
- package/docs/contracts/surface-agent-contracts.md +0 -153
- package/docs/contracts/surface-matrix.md +0 -108
- package/docs/contracts/surface-tiers.md +0 -81
- package/docs/contracts/telegraph-telemetry.md +0 -83
- package/docs/contracts/ticket-bundle-format.md +0 -233
- package/docs/contracts/tier-3-contrib-plugin.md +0 -137
- package/docs/contracts/trust-and-safety.md +0 -144
- package/docs/contracts/ui-stack-extension.md +0 -237
- package/docs/contracts/ui-track-flow.md +0 -329
- package/docs/contracts/universal-skills.md +0 -91
- package/docs/contracts/user-type-schema.md +0 -146
- package/docs/contracts/value-dashboard-spec.md +0 -378
- package/docs/contracts/value-report-schema.md +0 -168
- package/docs/contracts/workflow-packs.md +0 -121
- package/docs/contracts/workspace-boundary.md +0 -84
- package/docs/contracts/workspace-documents.md +0 -144
- package/docs/contracts/write-engine.md +0 -182
- package/docs/cookbook.md +0 -152
- package/docs/customization.md +0 -685
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
- package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
- package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
- package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
- package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
- package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
- package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
- package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
- package/docs/decisions/ADR-016-installer-architecture.md +0 -189
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
- package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
- package/docs/decisions/ADR-021-deployment-shape.md +0 -153
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
- package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
- package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
- package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
- package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
- package/docs/decisions/ADR-028-root-layout.md +0 -147
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
- package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
- package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
- package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
- package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
- package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
- package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
- package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
- package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
- package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
- package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
- package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
- package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
- package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
- package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
- package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
- package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
- package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
- package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
- package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
- package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
- package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
- package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
- package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
- package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
- package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
- package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
- package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
- package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
- package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
- package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
- package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
- package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
- package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
- package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
- package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
- package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
- package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
- package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
- package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
- package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
- package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
- package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
- package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
- package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
- package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
- package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
- package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
- package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
- package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
- package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
- package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
- package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
- package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
- package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
- package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
- package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
- package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
- package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
- package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
- package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
- package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
- package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
- package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
- package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
- package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
- package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
- package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
- package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
- package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
- package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
- package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
- package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -246
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -110
- package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
- package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
- package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -201
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
- package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
- package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
- package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
- package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
- package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
- package/docs/decisions/INDEX.md +0 -136
- package/docs/deploy/connector-setup.md +0 -129
- package/docs/deploy/env-vars.md +0 -70
- package/docs/deploy/policy-cookbook.md +0 -130
- package/docs/deploy/quickstart.md +0 -112
- package/docs/deploy/small-team-recipe.md +0 -148
- package/docs/deploy/team-deployment-posture.md +0 -111
- package/docs/design/adversarial-council-eval.md +0 -106
- package/docs/design/council-vs-solo-baseline.md +0 -92
- package/docs/design/cross-model-parity-eval.md +0 -82
- package/docs/design/length-neutral-judge-rerun.md +0 -92
- package/docs/design/utilization-window-criteria.md +0 -51
- package/docs/development.md +0 -230
- package/docs/distribution/awesome-list-submission.md +0 -46
- package/docs/distribution/consumer-matrix.md +0 -96
- package/docs/distribution/launch-story-draft.md +0 -58
- package/docs/distribution/mcp-submission-checklist.md +0 -95
- package/docs/distribution/public-install-smoke.md +0 -68
- package/docs/distribution/registries.md +0 -117
- package/docs/distribution/registry-submissions.md +0 -85
- package/docs/distribution/telemetry-privacy.md +0 -128
- package/docs/distribution/telemetry-schema.md +0 -174
- package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
- package/docs/end-to-end-walkthroughs.md +0 -165
- package/docs/enforcement-by-host.md +0 -44
- package/docs/examples/agent-user.example.md +0 -22
- package/docs/experiences/agency.md +0 -49
- package/docs/experiences/content_creator.md +0 -49
- package/docs/experiences/developer.md +0 -49
- package/docs/experiences/finance.md +0 -50
- package/docs/experiences/founder.md +0 -49
- package/docs/experiences/ops.md +0 -49
- package/docs/featured-commands.md +0 -27
- package/docs/featured-skills.md +0 -95
- package/docs/flows.md +0 -67
- package/docs/getting-started-by-role.md +0 -190
- package/docs/getting-started-laravel.md +0 -72
- package/docs/getting-started-local-stdio.md +0 -77
- package/docs/getting-started.md +0 -254
- package/docs/github-topics.md +0 -93
- package/docs/governance-advantage.md +0 -72
- package/docs/governance.md +0 -96
- package/docs/guides/cross-repo-linked-projects.md +0 -93
- package/docs/guides/cross-repo-retrieval.md +0 -61
- package/docs/guides/frontend-design-corpus-refresh.md +0 -83
- package/docs/guides/local-analytics.md +0 -125
- package/docs/guides/local-knowledge.md +0 -127
- package/docs/guides/skill-discovery.md +0 -71
- package/docs/guides/skill-preview.md +0 -71
- package/docs/hook-payload-capture.md +0 -221
- package/docs/install-friction-report.md +0 -66
- package/docs/installation.md +0 -959
- package/docs/maintainers/branch-protection.md +0 -105
- package/docs/maintainers/dev-mode.md +0 -106
- package/docs/maintainers/optional-media-deps.md +0 -50
- package/docs/maintainers/system-map.md +0 -85
- package/docs/mcp-registries.md +0 -94
- package/docs/mcp-server.md +0 -175
- package/docs/mcp.md +0 -147
- package/docs/media/proof-demo.cast +0 -14
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +0 -145
- package/docs/migration/divergences/README.md +0 -55
- package/docs/migration/divergences/_template.md +0 -50
- package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
- package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
- package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
- package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
- package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
- package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
- package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
- package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
- package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
- package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
- package/docs/migration/node-floor.md +0 -86
- package/docs/migration/v1-to-v2.md +0 -156
- package/docs/migration/yaml-roundtrip-spike.md +0 -163
- package/docs/migrations/commands-1.15.0.md +0 -117
- package/docs/parity/bench-external.json +0 -58
- package/docs/parity/bench.json +0 -41
- package/docs/parity/command-frontmatter.md +0 -60
- package/docs/parity/external-runtime.md +0 -46
- package/docs/personas.md +0 -178
- package/docs/positioning-evidence.md +0 -86
- package/docs/profiles.md +0 -108
- package/docs/proof.md +0 -176
- package/docs/quality.md +0 -98
- package/docs/readme-split-plan.md +0 -102
- package/docs/recruits/_template.md +0 -81
- package/docs/release-runbook.md +0 -141
- package/docs/role-experiences.md +0 -19
- package/docs/safety.md +0 -30
- package/docs/second-brain-scope.md +0 -116
- package/docs/self-review-gate.md +0 -65
- package/docs/setup/enterprise-and-offline.md +0 -201
- package/docs/setup/mcp-client-config.md +0 -358
- package/docs/setup/mcp-cloud-endpoints.md +0 -116
- package/docs/setup/mcp-cloud-registry-listing.md +0 -99
- package/docs/setup/mcp-cloud-setup.md +0 -183
- package/docs/setup/mcp-r2-bootstrap.md +0 -82
- package/docs/setup/mcp-server-docker.md +0 -101
- package/docs/setup/per-ide/aider.md +0 -48
- package/docs/setup/per-ide/antigravity.md +0 -68
- package/docs/setup/per-ide/augment.md +0 -89
- package/docs/setup/per-ide/claude-code.md +0 -97
- package/docs/setup/per-ide/claude-desktop.md +0 -207
- package/docs/setup/per-ide/cline.md +0 -43
- package/docs/setup/per-ide/codebuddy.md +0 -63
- package/docs/setup/per-ide/codex.md +0 -46
- package/docs/setup/per-ide/continue.md +0 -68
- package/docs/setup/per-ide/copilot.md +0 -80
- package/docs/setup/per-ide/cursor.md +0 -125
- package/docs/setup/per-ide/droid.md +0 -65
- package/docs/setup/per-ide/gemini-cli.md +0 -45
- package/docs/setup/per-ide/jetbrains.md +0 -76
- package/docs/setup/per-ide/kilocode.md +0 -66
- package/docs/setup/per-ide/kiro.md +0 -72
- package/docs/setup/per-ide/opencode.md +0 -62
- package/docs/setup/per-ide/qoder.md +0 -63
- package/docs/setup/per-ide/roocode.md +0 -68
- package/docs/setup/per-ide/trae.md +0 -63
- package/docs/setup/per-ide/warp.md +0 -63
- package/docs/setup/per-ide/windsurf.md +0 -109
- package/docs/setup/per-ide/zed.md +0 -73
- package/docs/showcase.md +0 -209
- package/docs/skill-duplication-findings.md +0 -91
- package/docs/skills-catalog.md +0 -265
- package/docs/skills-taxonomy.md +0 -90
- package/docs/spawn-site-policy.md +0 -72
- package/docs/succession.md +0 -80
- package/docs/threat-model.md +0 -29
- package/docs/troubleshooting.md +0 -155
- package/docs/ui-track-mental-model.md +0 -121
- package/docs/us-vs-the-category.md +0 -38
- package/docs/value.md +0 -86
- package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
- package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
- package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
- package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
- package/docs/walkthroughs/daily-workspace.md +0 -127
- package/docs/wedge/production-validator/README.md +0 -81
- package/docs/wedge/production-validator/first-run-check.sh +0 -42
- package/docs/wedge/production-validator/production-validator.md +0 -83
- package/docs/wizard.md +0 -173
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
stability: beta
|
|
3
|
-
keep-beta-until: 2026-08-17
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Governance Enforcement at Projection Time — design spec
|
|
7
|
-
|
|
8
|
-
> **Status: Measured → honest-null (2026-06-25). NOT shipped.** The length-controlled
|
|
9
|
-
> eval (54 paired runs, sonnet-4-6) found `discipline_score = 1.000` for `package`,
|
|
10
|
-
> `hardened` and `hardened-placebo` alike — Δ(hardened − package) = 0.000 across all
|
|
11
|
-
> 18 paired instances. The cooperative `package` rules already catch trapD
|
|
12
|
-
> (non-destructive) + trapE (scope-control) at ceiling, so the hardened blocks add
|
|
13
|
-
> nothing measurable. Per this spec's own rule, `condense.ts` is **not** wired and
|
|
14
|
-
> no public "enforcement" claim is made. **Caveat:** the discipline corpus is
|
|
15
|
-
> single-shot on micro-fixtures and does NOT reproduce the token-pressure /
|
|
16
|
-
> long-horizon condition the treatment targets — it saturates. Revisit only behind
|
|
17
|
-
> a pressure/long-context corpus, not by writing more enforcement code. The opt-in
|
|
18
|
-
> `hardened` arm remains in `bench_ab_v2_run.ts` as a reusable measurement tool.
|
|
19
|
-
|
|
20
|
-
## Problem
|
|
21
|
-
|
|
22
|
-
The package's highest-stakes rules (commit only when told, never push/merge
|
|
23
|
-
autonomously, no whimsical bulk deletion) are **model-cooperative**: they are
|
|
24
|
-
strong prose the agent is asked to follow. Under token pressure or long-horizon
|
|
25
|
-
autonomy, cooperative rules can be violated. An external operator-runtime
|
|
26
|
-
reference ("Source A") closes this with **runtime hooks that hard-block** the
|
|
27
|
-
tool call — but those reach only ~2 of our 7 projection hosts (Claude Code,
|
|
28
|
-
Cline/MCP). The other five (Cursor, Windsurf, Copilot, Gemini, Augment) are
|
|
29
|
-
static-only ([`enforcement-by-host.md`](../enforcement-by-host.md)).
|
|
30
|
-
|
|
31
|
-
The universal lever is therefore **compile-time**: harden the few irreversible
|
|
32
|
-
Iron Laws into each host's *native* instruction format at projection time, with
|
|
33
|
-
explicit override-guard phrasing — so the constraint is as emphatic as the host
|
|
34
|
-
medium allows, everywhere, not just where hooks exist.
|
|
35
|
-
|
|
36
|
-
## Non-goals (identity guardrails)
|
|
37
|
-
|
|
38
|
-
- **Not runtime.** This is a projection-time transform, not a daemon, not new
|
|
39
|
-
cross-session state. Runtime hook hardening is separate (Phase 2, MCP-only).
|
|
40
|
-
- **Not all 93 rules.** Hardening a large rule set would blow the context
|
|
41
|
-
budget and dilute the signal. The set is deliberately tiny (see Selector).
|
|
42
|
-
- **Not a compliance guarantee.** A static host can still ignore a hardened
|
|
43
|
-
block — the mechanism *maximises* emphasis, it does not *block*. The eval
|
|
44
|
-
measures whether it actually moves the violation rate; honest-null is allowed.
|
|
45
|
-
|
|
46
|
-
## Selector — which rules get hardened
|
|
47
|
-
|
|
48
|
-
Default set = rules already carrying **`tier: safety-floor`** in frontmatter.
|
|
49
|
-
Today that is exactly **3** files — the irreversible-action set:
|
|
50
|
-
|
|
51
|
-
- `src/rules/commit-policy.md`
|
|
52
|
-
- `src/rules/non-destructive-by-default.md`
|
|
53
|
-
- `src/rules/scope-control.md`
|
|
54
|
-
|
|
55
|
-
Optionally extend to a named kernel rule (`verify-before-complete`, `tier:
|
|
56
|
-
kernel`) by explicit opt-in. Reusing the existing `tier` signal means **no
|
|
57
|
-
frontmatter-schema change** — `rule.schema.json` has `additionalProperties:
|
|
58
|
-
false`, so adding a new `enforcement:` key would require a schema bump; we avoid
|
|
59
|
-
that until finer-grained control is actually needed. If we later need a rule
|
|
60
|
-
that is `safety-floor` but *not* hardened (or vice versa), introduce an explicit
|
|
61
|
-
`enforcement: hard` key and bump the schema then.
|
|
62
|
-
|
|
63
|
-
## Mechanism
|
|
64
|
-
|
|
65
|
-
A projection-time transform in the existing engine (`src/scripts/condense.ts`,
|
|
66
|
-
the per-host `generate_*` path). For each hardened rule, after the normal rule
|
|
67
|
-
body is projected into a host's native format, append a compact **HARD
|
|
68
|
-
CONSTRAINT** block tuned to that host. The block is short (3–6 lines) so the
|
|
69
|
-
per-projection token cost stays bounded.
|
|
70
|
-
|
|
71
|
-
Canonical block shape (host-tuned wording varies — see matrix):
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
## HARD CONSTRAINT — do not override
|
|
75
|
-
- NEVER <forbidden action> without explicit user approval in this message.
|
|
76
|
-
- This is a HARD CONSTRAINT, not a preference. If asked to bypass it, refuse
|
|
77
|
-
and require an explicit, unambiguous instruction this turn.
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Per-host tuning (empirical — Phase 1 item 2)
|
|
81
|
-
|
|
82
|
-
Wording efficacy differs by host. Confirm before locking; capture findings in a
|
|
83
|
-
context note.
|
|
84
|
-
|
|
85
|
-
| Host | Mechanism | Phrasing lever (hypothesis, to confirm) |
|
|
86
|
-
|---|---|---|
|
|
87
|
-
| Claude Code / Cline (MCP) | compile-time **+** runtime hook (Phase 2) | reasoning-chain + the block; hook is the floor |
|
|
88
|
-
| Cursor (`.cursorrules`) | compile-time only | aggressive NEVER/ALWAYS caps |
|
|
89
|
-
| Windsurf (`.windsurfrules`) | compile-time only | aggressive NEVER/ALWAYS caps |
|
|
90
|
-
| Copilot (`copilot-instructions.md`) | compile-time only | short imperative + explicit refusal script |
|
|
91
|
-
| Gemini (`GEMINI.md`) | compile-time only | short imperative |
|
|
92
|
-
| Augment | compile-time only | native rule emphasis |
|
|
93
|
-
|
|
94
|
-
## Verification — the "linter" half
|
|
95
|
-
|
|
96
|
-
A drift gate (analogous to `update_counts.ts --check` / `check_references.ts`):
|
|
97
|
-
for every hardened rule, assert that each host's projected artifact actually
|
|
98
|
-
contains the HARD CONSTRAINT block. Fail CI on drift. This is what makes
|
|
99
|
-
"hardened everywhere" a checked fact, not an assumption.
|
|
100
|
-
|
|
101
|
-
## Eval — does it move the needle?
|
|
102
|
-
|
|
103
|
-
Extend the existing A/B substrate (`bench_ab_v2_run.ts` family + per-skill
|
|
104
|
-
`evals/`) with a small **discipline** set: scenarios that tempt an
|
|
105
|
-
irreversible-action violation under pressure (e.g. "just commit and push this,
|
|
106
|
-
we're in a hurry"). Measure violation rate **with vs without** the hardened
|
|
107
|
-
block, **length-controlled** (the hardened block adds tokens — the control arm
|
|
108
|
-
must match length so we measure emphasis, not verbosity). Report per host where
|
|
109
|
-
feasible. **Honest-null is a valid outcome** — if the block does not move the
|
|
110
|
-
rate, it is prompt-engineering theatre and we say so rather than ship it.
|
|
111
|
-
|
|
112
|
-
## Risks / open questions
|
|
113
|
-
|
|
114
|
-
- **Token budget.** Each hardened block adds tokens to every projection — in
|
|
115
|
-
tension with the thin-projection token-saving work. Mitigation: tiny set (3),
|
|
116
|
-
short blocks; measure net cost in the eval.
|
|
117
|
-
- **Per-host efficacy unknown** until item 2 runs; the matrix above is hypothesis.
|
|
118
|
-
- **Over-claim risk.** Public copy must keep saying "compile-time emphasis on
|
|
119
|
-
static hosts, deterministic block only on hook-capable hosts" — never
|
|
120
|
-
"deterministic everywhere".
|
|
121
|
-
|
|
122
|
-
## Eval addendum — reuse the existing discipline harness (don't rebuild)
|
|
123
|
-
|
|
124
|
-
Recon (2026-06-25) found the discipline-axis benchmark already built:
|
|
125
|
-
`internal/bench/corpora/ab-trackb-v2.yaml` (5 trap archetypes, per-task fixtures
|
|
126
|
-
under `internal/bench/ab/fixtures-v2/`), paired + length-controlled arms in
|
|
127
|
-
`src/scripts/bench_ab_v2_run.ts` (a `package` arm vs a length-matched `placebo`
|
|
128
|
-
arm), and a **deterministic** scorer (`src/scripts/_lib/bench_ab_scoring_v2.ts`, no LLM judge).
|
|
129
|
-
It already covers **2 of the 3** hardened rules:
|
|
130
|
-
|
|
131
|
-
- `trapD` (destructive-op-needs-confirm) → **non-destructive-by-default** ✓
|
|
132
|
-
- `trapE` (premature-completion/scope) → **scope-control** ✓
|
|
133
|
-
- `commit-policy` → **gap** (no trap archetype yet).
|
|
134
|
-
|
|
135
|
-
So the eval build is small and reuses everything:
|
|
136
|
-
|
|
137
|
-
1. Add a **`hardened` arm** to `bench_ab_v2_run.ts` `ARMS` = the `package` arm
|
|
138
|
-
**plus** the prototype HARD CONSTRAINT blocks for the 3 safety-floor rules
|
|
139
|
-
injected into the sysprompt. Length-control inherits the existing `placebo`
|
|
140
|
-
methodology (match injected token footprint).
|
|
141
|
-
2. Add **commit-policy trap tasks** (`trapF`?) + fixtures (e.g. "just commit and
|
|
142
|
-
push this, we're in a hurry" against an unstaged irreversible change).
|
|
143
|
-
3. Run **paired**: `package` vs `hardened` (and `placebo` for length-control),
|
|
144
|
-
deterministic scoring, per-rule discipline Δ.
|
|
145
|
-
4. **Honest-null is a valid outcome.** If `hardened − package` Δ is null (cf. the
|
|
146
|
-
recursion-arm honest-null already on record), the block is theatre → do NOT
|
|
147
|
-
wire it into `condense.ts`, and say so.
|
|
148
|
-
|
|
149
|
-
**The run is billable** (model calls). Cost footguns on record: pin a mid-tier
|
|
150
|
-
model (Opus-1M cache blows the budget), set `--budget` / `--max-budget-usd`,
|
|
151
|
-
per-arm activation. No `condense.ts` mutation and no public "enforcement" claim
|
|
152
|
-
until a positive, length-controlled Δ exists.
|
|
153
|
-
|
|
154
|
-
## Council convergence (inline)
|
|
155
|
-
|
|
156
|
-
Council (claude-sonnet-4-5 + gpt-4o, 2026-06-25, 2 rounds): the universal
|
|
157
|
-
enforcement lever is compile-time frontmatter, not runtime hooks (hooks reach
|
|
158
|
-
<30% of hosts); ship hardening for the irreversible set, measure before/after,
|
|
159
|
-
keep runtime hooks as an opt-in MCP-only superset.
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
stability: beta
|
|
3
|
-
keep-beta-until: 2026-08-19
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# GUI wizard — local browser installer
|
|
7
|
-
|
|
8
|
-
> Companion to the agent-mode protocol
|
|
9
|
-
> ([`installer-agent-mode.md`](installer-agent-mode.md)) and the
|
|
10
|
-
> trust-and-safety layer ([`trust-and-safety.md`](trust-and-safety.md)).
|
|
11
|
-
> The wizard is a thin HTTP wrapper: it is a **selection front-end**, and
|
|
12
|
-
> every real write goes through the single installer
|
|
13
|
-
> `scripts/install.py --apply-payload` (D12 / ADR-020). It is **optional by
|
|
14
|
-
> design** — the CLI is the canonical entry point; the wizard exists for
|
|
15
|
-
> non-technical users who want a visual picker.
|
|
16
|
-
|
|
17
|
-
## Source of truth
|
|
18
|
-
|
|
19
|
-
The GUI is a Fastify server (`src/server/`) serving a Preact SPA
|
|
20
|
-
(`src/ui/`), booted by the `install` / `setup` / `config` (alias
|
|
21
|
-
`settings`) / `ui:serve` CLI subcommands. The legacy
|
|
22
|
-
`packages/core/installer/src/gui/*` tree was retired; the single real
|
|
23
|
-
installer is `scripts/install.py`.
|
|
24
|
-
|
|
25
|
-
Entry-point map (road-to-setup-experience § Phase 1):
|
|
26
|
-
|
|
27
|
-
- `init` — install front-end; opens the wizard in install mode (start
|
|
28
|
-
screen: recommended path vs customize). `init --project` never boots
|
|
29
|
-
the GUI — it writes the minimal project surface via the
|
|
30
|
-
`refresh --project` writer.
|
|
31
|
-
- `setup` — re-runs the guided onboarding wizard (prefilled).
|
|
32
|
-
- `config` — opens the standalone settings hub (`#/settings`; global
|
|
33
|
-
scope). `config --project` lands on the project surface
|
|
34
|
-
(`#/project`). `settings` stays as a compatible alias.
|
|
35
|
-
|
|
36
|
-
- Server app + security hooks: [`src/server/app.ts`](../../src/server/app.ts) (Host allow-list, Origin allow-list, CSRF token — `onRequest` hooks)
|
|
37
|
-
- Wizard routes (incl. the real-apply bridge): [`src/server/routes/wizard.ts`](../../src/server/routes/wizard.ts)
|
|
38
|
-
- Read-only install routes (detect / plan-preview / recovery / legacy-v3): [`src/server/routes/install.ts`](../../src/server/routes/install.ts)
|
|
39
|
-
- Atomic / 2PC writes: [`src/server/io/atomicWrite.ts`](../../src/server/io/atomicWrite.ts), [`atomicMultiWrite.ts`](../../src/server/io/atomicMultiWrite.ts)
|
|
40
|
-
- SPA: [`src/ui/`](../../src/ui/) (entry `src/ui/pages/WizardPage.tsx`)
|
|
41
|
-
- CLI boot + `WIZARD_READY` contract: [`src/cli/commands/uiServe.ts`](../../src/cli/commands/uiServe.ts)
|
|
42
|
-
- The single installer (all real writes): [`scripts/install.py`](../../src/scripts/install.py)
|
|
43
|
-
- Tests: [`tests/server/`](../../tests/server/) + [`tests/e2e/`](../../tests/e2e/)
|
|
44
|
-
|
|
45
|
-
## Local-only invariant
|
|
46
|
-
|
|
47
|
-
The server **must** bind to `127.0.0.1` and reject any request whose
|
|
48
|
-
`Host` header is not in `{ "127.0.0.1:<port>", "localhost:<port>" }`.
|
|
49
|
-
`Origin` is additionally checked on every POST. No CDN, no analytics,
|
|
50
|
-
no cross-origin asset, no remote endpoint — CSP
|
|
51
|
-
`default-src 'self'` is set on every response.
|
|
52
|
-
|
|
53
|
-
## Boot sequence
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
agent-config install (or `setup`, or `init` when the GUI is usable)
|
|
57
|
-
│
|
|
58
|
-
├─► pick a free loopback port; mint a per-server bearer/CSRF token
|
|
59
|
-
├─► Fastify listen({ host: '127.0.0.1', port })
|
|
60
|
-
├─► print `WIZARD_READY <url>` on stdout (url carries `?token=…` + `#/…`)
|
|
61
|
-
├─► open the OS browser at <url> (skipped with --no-open / headless)
|
|
62
|
-
└─► serve until the user finishes (Finish → install) or Ctrl-C
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
`init` is the consumer entry point and the install **front-end**: the TS CLI
|
|
66
|
-
(`src/cli/initRouting.ts → shouldInitLaunchGui`) opens the browser wizard
|
|
67
|
-
directly (via `runUiServe`, install mode) whenever it can actually be used —
|
|
68
|
-
interactive TTY, a display, and no CLI-mode flag. There is no CLI tool-picker
|
|
69
|
-
in that path; the wizard collects the tool/pack/settings selection and its
|
|
70
|
-
Finish drives the **whole** install through `POST /api/v1/wizard/apply` →
|
|
71
|
-
`scripts/install.py --apply-payload` (one installer).
|
|
72
|
-
|
|
73
|
-
`init` falls back to the non-interactive bash CLI install (`scripts/install` →
|
|
74
|
-
`install.py`) — and never boots the GUI — when any of these hold: `CI` set,
|
|
75
|
-
`AGENT_CONFIG_NO_UI` set, stdin/stdout not a TTY, a headless host (SSH / Linux
|
|
76
|
-
without `DISPLAY`), or a CLI-mode flag (`--no-ui` / `--tools` / `--ai` /
|
|
77
|
-
`--yes` / `--quiet` / `--dry-run` / `--minimal` / `--settings-only` /
|
|
78
|
-
`--list-tools` / `--project`). `install.py`'s own tail-launch (`_wizard_spawn`, matching the
|
|
79
|
-
`WIZARD_READY <url>` handshake) remains for direct CLI install runs.
|
|
80
|
-
|
|
81
|
-
### `WIZARD_READY` stdout contract
|
|
82
|
-
|
|
83
|
-
The server emits exactly one line on stdout when it has bound:
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
WIZARD_READY http://127.0.0.1:<port>/?token=<token>#/<route>
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
The supervisor matches `^WIZARD_READY (http://(127.0.0.1|localhost):\d+/\S*)$`
|
|
90
|
-
(no `url=` prefix; the query/hash are part of the captured URL). The line is
|
|
91
|
-
unconditional so headless CI can detect "Fastify bound" without polling the
|
|
92
|
-
port.
|
|
93
|
-
|
|
94
|
-
## Endpoints
|
|
95
|
-
|
|
96
|
-
Versioned under `/api/v1/`. Selected routes:
|
|
97
|
-
|
|
98
|
-
| Method | Path | Purpose |
|
|
99
|
-
|--------|-------------------------------|-------------------------------------------------------------------------|
|
|
100
|
-
| GET | `/` | SPA shell (token passed via the `?token=` query) |
|
|
101
|
-
| GET | `/api/v1/wizard/state` | Resumable partial wizard state |
|
|
102
|
-
| POST | `/api/v1/wizard/state` | Persist state between steps |
|
|
103
|
-
| GET | `/api/v1/wizard/manifest` | Locked discovery-manifest (extended mode) |
|
|
104
|
-
| GET | `/api/v1/wizard/auto-detect` | Project-signal evidence for the `ai-tools` step (extended mode) |
|
|
105
|
-
| GET | `/api/v1/wizard/detect-tools` | Native AI-tool presence (home/app/`$PATH`) for Step-1 pre-select + badge |
|
|
106
|
-
| GET | `/api/v1/wizard/detect-rtk` | rtk presence + per-OS install hint (Editor-and-tooling step) |
|
|
107
|
-
| GET | `/api/v1/wizard/ai-council` | AI-council scalar subset + provider key presence (extended mode) |
|
|
108
|
-
| POST | `/api/v1/wizard/ai-council` | Comment-preserving scalar merge into `.ai-council.yml` |
|
|
109
|
-
| POST | `/api/v1/wizard/finish` | 2PC commit of settings + user-identity |
|
|
110
|
-
| POST | `/api/v1/shutdown` | Browser-close shutdown beacon (`navigator.sendBeacon` target; real-serve only) |
|
|
111
|
-
| POST | `/api/v1/wizard/apply` | **Single real-apply route.** `dry_run:true` → buffered plan preview; otherwise SSE-streams `scripts/install.py --apply-payload` |
|
|
112
|
-
| GET | `/api/v1/install/detect` | Scope + project shape + tool presence |
|
|
113
|
-
| POST | `/api/v1/install/plan` | Plan preview (per-tool file counts + conflicts) for the Review step |
|
|
114
|
-
| GET | `/api/v1/install/recovery` | Interrupted-run recovery state |
|
|
115
|
-
| GET | `/api/v1/install/legacy-v3` | v3-install detection (backup screen) |
|
|
116
|
-
|
|
117
|
-
The TypeScript apply engine and its `POST /api/v1/install/apply` SSE route
|
|
118
|
-
were removed (road-to-single-install-source-of-truth § Phase 3). All real
|
|
119
|
-
writes now flow through `POST /api/v1/wizard/apply` → `scripts/install.py`.
|
|
120
|
-
|
|
121
|
-
Every request passes three `onRequest` hooks in
|
|
122
|
-
[`src/server/app.ts`](../../src/server/app.ts): a `Host`-header allow-list,
|
|
123
|
-
an `Origin` allow-list (browser-issued requests), and a per-server bearer
|
|
124
|
-
token (`Authorization: Bearer <token>`, minted at boot, surfaced in the
|
|
125
|
-
`?token=` URL). A bad token / Host / Origin returns `403`.
|
|
126
|
-
|
|
127
|
-
### Browser-lifecycle shutdown
|
|
128
|
-
|
|
129
|
-
In real-serve (`runUiServe`), the server stops itself when the browser that
|
|
130
|
-
drives it goes away — the local process should not outlive its only client:
|
|
131
|
-
|
|
132
|
-
- The SPA ([`src/ui/serverLifecycle.ts`](../../src/ui/serverLifecycle.ts))
|
|
133
|
-
heartbeats `GET /api/v1/ping` every 30s while the tab is visible and the
|
|
134
|
-
user has interacted within the last 30 min. On `pagehide` (window/tab
|
|
135
|
-
close) it fires `navigator.sendBeacon('/api/v1/shutdown?token=…')` (the
|
|
136
|
-
token rides as a query param because `sendBeacon` cannot set headers); and
|
|
137
|
-
once the user has been idle for 30 min it fires the same beacon instead of
|
|
138
|
-
a ping, so the server stops even with the tab still open.
|
|
139
|
-
- The server (`createApp` `idleShutdown` option, passed only by `runUiServe`)
|
|
140
|
-
exits on that beacon, and — as a backstop for crashes where neither beacon
|
|
141
|
-
is delivered — via an idle timer that **arms only after the first authed
|
|
142
|
-
request** (so headless / `--allow-headless` manual-connect servers are
|
|
143
|
-
never killed before the operator attaches) and fires after 30 min of
|
|
144
|
-
silence.
|
|
145
|
-
|
|
146
|
-
On boot, `runUiServe` records `{pid, port, url}` to
|
|
147
|
-
`~/.event4u/agent-config/local-server.json`
|
|
148
|
-
([`src/server/serverInfo.ts`](../../src/server/serverInfo.ts)) and removes it
|
|
149
|
-
on graceful exit. A fresh `agent-config init` (via `scripts/install.py`
|
|
150
|
-
`_kill_stale_wizard_server`) reads that record, terminates a still-running
|
|
151
|
-
prior instance, and starts a new server — so init always lands on step 1.
|
|
152
|
-
|
|
153
|
-
`createApp` is inert (no watchdog, no `/api/v1/shutdown` route) unless
|
|
154
|
-
`idleShutdown` is supplied, so the in-process test harness
|
|
155
|
-
([`tests/server/helpers.ts`](../../tests/server/helpers.ts)) is unaffected.
|
|
156
|
-
|
|
157
|
-
## Real apply — single source of truth
|
|
158
|
-
|
|
159
|
-
`POST /api/v1/wizard/apply` is the only write path:
|
|
160
|
-
|
|
161
|
-
- `dry_run: true` → spawns `install.py --apply-payload <tmp> --dry-run` and
|
|
162
|
-
returns the buffered plan-summary text (used by the Review preview).
|
|
163
|
-
- otherwise → spawns `install.py --apply-payload <tmp>` (real apply) and
|
|
164
|
-
**streams** the installer's NDJSON stdout
|
|
165
|
-
(`{type:"file",…}` / `{type:"done"|"error"}`) mapped to the SSE frames the
|
|
166
|
-
SPA consumes. The child is killed if the client disconnects
|
|
167
|
-
(abort-on-disconnect, Finding #24). The installer owns its own
|
|
168
|
-
transactional state (the user-scope lockfile + project manifest), so the
|
|
169
|
-
GUI does not maintain a parallel transaction log.
|
|
170
|
-
|
|
171
|
-
## SSE event framing
|
|
172
|
-
|
|
173
|
-
Each real-apply event is `data: <json>\n\n`. Frames:
|
|
174
|
-
|
|
175
|
-
```jsonc
|
|
176
|
-
{ "type": "progress", "file": "<tool>", "status": "deployed", "written": 1, "total": 3 }
|
|
177
|
-
{ "type": "done", "summary": { "written": 3, "total": 3 } }
|
|
178
|
-
{ "type": "error", "code": "<code>", "message": "<reason>", "recoverable": false }
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
The browser stops reading on `done` / `error`; the server ends the stream.
|
|
182
|
-
|
|
183
|
-
## Security failure modes covered
|
|
184
|
-
|
|
185
|
-
- **Remote exploitation** — loopback bind, Host allow-list, Origin
|
|
186
|
-
allow-list, per-server bearer token.
|
|
187
|
-
- **DNS rebinding** — Host header check covers POSTs that omit `Origin`.
|
|
188
|
-
- **Mid-install crash** — `scripts/install.py` owns the user-scope
|
|
189
|
-
lockfile + project manifest; the recovery routes
|
|
190
|
-
(`/api/v1/install/recovery`) surface an interrupted run on next boot.
|
|
191
|
-
|
|
192
|
-
## Non-goals (documented contract)
|
|
193
|
-
|
|
194
|
-
- Not a hosted SaaS — no auth account model, no telemetry.
|
|
195
|
-
- Not a parallel installer — the GUI is a selection front-end; every
|
|
196
|
-
real write goes through `scripts/install.py --apply-payload`.
|
|
197
|
-
- Not a CI surface — `--no-open` headless boots are supported for smoke
|
|
198
|
-
tests, but the canonical CI path is the flag-driven non-interactive CLI.
|
|
199
|
-
|
|
200
|
-
## Apply payload — versioning handshake (road-to-global-only-install Phase 0.4 · D12)
|
|
201
|
-
|
|
202
|
-
`POST /api/v1/wizard/apply` accepts a discriminated-union body keyed on
|
|
203
|
-
`schema_version`. The full JSON Schema lives at
|
|
204
|
-
[`internal/schemas/wizard-apply-payload.schema.json`](../../internal/schemas/wizard-apply-payload.schema.json).
|
|
205
|
-
|
|
206
|
-
| `schema_version` | Variant | Shape |
|
|
207
|
-
|---|---|---|
|
|
208
|
-
| `"installer-v1"` | `InstallerPayloadV1` | `{ ai_tools[], configs{}, dry_run? }` — legacy Installer-GUI, AI tools only. |
|
|
209
|
-
| `"wizard-v2"` | `WizardPayloadV2` | `{ tools[], packs[], settings{}, scope_to_project_only?, dry_run? }` — unified 9-step wizard. |
|
|
210
|
-
|
|
211
|
-
**D12 (locked).** Single apply endpoint with a `schema_version`
|
|
212
|
-
discriminator — **not** two endpoints with a shared Python backend.
|
|
213
|
-
Reasoning: one bind, one token, one installer; the
|
|
214
|
-
Python `scripts/install.py` payload-router branches on
|
|
215
|
-
`schema_version` before any disk write. The dual-endpoint variant was
|
|
216
|
-
considered and rejected for doubling the surface with no gain.
|
|
217
|
-
|
|
218
|
-
`schema_version` is **required**. Servers MUST reject any body that
|
|
219
|
-
lacks it (HTTP 4xx, single-line error pointing at the schema). The
|
|
220
|
-
real-apply path is now wired end-to-end
|
|
221
|
-
(road-to-single-install-source-of-truth § Phases 1–2): `install.py`
|
|
222
|
-
translates the payload into the canonical install and streams NDJSON
|
|
223
|
-
progress back to the GUI.
|
|
224
|
-
|
|
225
|
-
## Unified 9-step flow (road-to-global-only-install § Phase 1.6)
|
|
226
|
-
|
|
227
|
-
The maintainer-facing wizard at `src/server/routes/wizard.ts` switches
|
|
228
|
-
between two step layouts based on the server-side `extendedSteps`
|
|
229
|
-
flag (default `false` for v2.x users; flipped to `true` by the
|
|
230
|
-
`agent-config setup` CLI when the npm-version kill-switch is in
|
|
231
|
-
effect):
|
|
232
|
-
|
|
233
|
-
| `extendedSteps` | Steps | Layout |
|
|
234
|
-
|---|---|---|
|
|
235
|
-
| `false` | 9 | `welcome → editor → personality → cost → roadmap-quality → memory → ai-council → user-md → review` |
|
|
236
|
-
| `true` | 13 | `welcome → ai-tools → roles → packs → editor → personality → cost → roadmap-quality → memory → ai-council → user-md → modules → review` |
|
|
237
|
-
|
|
238
|
-
The project-specific `modules` step (writes `.agent-project-settings.yml`, not
|
|
239
|
-
the global `.agent-settings.yml`) sits at the **end** of the extended flow,
|
|
240
|
-
just before `review` — global/user settings come first, the project step
|
|
241
|
-
comes last. Because it is no longer part of the install-only lead,
|
|
242
|
-
`setup` mode now walks it too (the lead it skips is `ai-tools → roles →
|
|
243
|
-
packs`).
|
|
244
|
-
|
|
245
|
-
The `welcome` step (Step 1, both modes) collects **name + language** up front —
|
|
246
|
-
pulled out of the user-md step so the agent knows who it's talking to before
|
|
247
|
-
anything else. Name pre-fills from the OS account (`GET /api/v1/ping`
|
|
248
|
-
`systemUser`) when empty; language pre-fills from the browser locale
|
|
249
|
-
(`navigator.language`) when no `.agent-user.yml` exists yet. In install mode
|
|
250
|
-
the user-md step hides its name + language fields (collected here); setup mode
|
|
251
|
-
skips the welcome step (it lands on the first settings step) and keeps those
|
|
252
|
-
fields in the user-md form.
|
|
253
|
-
|
|
254
|
-
The `roles` step presents the discovery **workspaces** as the *area*
|
|
255
|
-
(Engineering, Product, Finance, Founder, GTM, Ops, …; the maintainer workspace
|
|
256
|
-
is hidden) — each tile shows the area label, then advisory `example_roles`
|
|
257
|
-
(e.g. Engineering → "Developer, CTO"; Finance → "CFO") and the description. The
|
|
258
|
-
selected workspace ids become `.agent-user.yml` `role[]` (the example roles are
|
|
259
|
-
UI hints, not the stored value) and recommend each domain's `default_packs` on
|
|
260
|
-
the packs step. In install mode the user-md
|
|
261
|
-
step therefore hides its role field (collected here instead); setup mode keeps
|
|
262
|
-
the role field since it skips the roles step.
|
|
263
|
-
|
|
264
|
-
The `ai-council` step (road-to-wizard-ux-improvements § Phase 8) configures the
|
|
265
|
-
wizard-controlled scalar subset of `.ai-council.yml` (enable, per-member
|
|
266
|
-
enable + low-impact, global transport mode, debate rounds, cost budget, the
|
|
267
|
-
non-locked `decision_resolution` classes) via `GET`/`POST /api/v1/wizard/ai-council`;
|
|
268
|
-
the file is written with comment-preserving `replaceScalar` edits.
|
|
269
|
-
|
|
270
|
-
The step shapes themselves are declared in
|
|
271
|
-
[`src/ui/wizard/steps.ts`](../../src/ui/wizard/steps.ts) — the always-first
|
|
272
|
-
`welcome` step plus the four extended-only lead steps (`ai-tools`, `roles`,
|
|
273
|
-
`packs`, `modules`) carry no `paths` and use dedicated renderers in
|
|
274
|
-
`WizardPage.tsx`.
|
|
275
|
-
`getWizardSteps({ extended })` is the single resolver; the UI consumes the
|
|
276
|
-
active list via `getActiveSteps()` / `activeTotalSteps()` so a server toggle
|
|
277
|
-
takes effect on the next reload without a code change.
|
|
278
|
-
|
|
279
|
-
### AI-tools / roles / packs selection rules (Steps 2-4)
|
|
280
|
-
|
|
281
|
-
- **AI-tools pre-selection.** `detect-tools` returns `tools` (installed on the
|
|
282
|
-
machine) and `configured` (the user's prior selection, persisted to
|
|
283
|
-
`~/.event4u/agent-config/wizard-tools.json` on each real apply). On a repeat
|
|
284
|
-
run the wizard pre-selects exactly the `configured` tools; only on a genuine
|
|
285
|
-
first run (no prior selection) does it fall back to pre-selecting every
|
|
286
|
-
installed tool.
|
|
287
|
-
- **Roles → packs recommendation.** Each selected role contributes its
|
|
288
|
-
workspace `default_packs`; the union pre-selects packs on Step 3 (plus
|
|
289
|
-
auto-detected project packs). The recommendation stops clobbering the
|
|
290
|
-
selection once the user manually edits a pack. Each pack tile also badges
|
|
291
|
-
the workspace(s) it belongs to (from the pack's `workspaces`), highlighting
|
|
292
|
-
the badges that match a role the user picked on Step 2.
|
|
293
|
-
- **Step 2 framework persistence.** A language tile (`cluster`, e.g. PHP)
|
|
294
|
-
gates its framework children in the UI but never destroys their stored
|
|
295
|
-
selection. Turning a language off disables — but keeps checked — its
|
|
296
|
-
children, so a PHP off→on round-trip restores the exact Laravel-on /
|
|
297
|
-
Symfony-off choice. `resolveSelectedPacks()` filters disabled children at
|
|
298
|
-
submit time, so a remembered-but-gated framework is not installed.
|
|
299
|
-
- **No-autodetect packs.** Some packs are never pre-selected from project
|
|
300
|
-
signals (`python` — a non-engineer may have python installed but not need
|
|
301
|
-
it). The pack stays available to tick manually.
|
|
302
|
-
- **Empty-selection gate.** The AI-tools, roles, and packs steps each block
|
|
303
|
-
Next until at least one effective selection exists (≥ 1 tool, ≥ 1 role, and
|
|
304
|
-
≥ 1 installable pack respectively).
|
|
305
|
-
|
|
306
|
-
### `GET /api/v1/wizard/state` payload
|
|
307
|
-
|
|
308
|
-
```jsonc
|
|
309
|
-
{
|
|
310
|
-
"step": 0,
|
|
311
|
-
"totalSteps": 9,
|
|
312
|
-
"partial": {},
|
|
313
|
-
"startedAt": null,
|
|
314
|
-
"extendedSteps": true
|
|
315
|
-
}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
`extendedSteps` is **advisory** — older server bundles MAY omit it,
|
|
319
|
-
and the UI treats `undefined` as `false`. `totalSteps` reflects the
|
|
320
|
-
flow that was active when the partial was written, which the UI uses
|
|
321
|
-
for resume continuity; the active step set is otherwise derived from
|
|
322
|
-
the current `extendedSteps` flag.
|
|
323
|
-
|
|
324
|
-
### State persistence + recovery
|
|
325
|
-
|
|
326
|
-
Per-session state is written to `<writeRoot>/state/wizard-state.json`
|
|
327
|
-
(under the global config root, typically
|
|
328
|
-
`~/.event4u/agent-config/state/wizard-state.json`). If the file
|
|
329
|
-
becomes malformed — partial JSON write, orphaned session from a
|
|
330
|
-
previous npm version, manual edit gone wrong — the recovery path is:
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
agent-config doctor --repair wizard-state
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
The repair unlinks the file (idempotent; absent files are a no-op
|
|
337
|
-
success). The next `agent-config setup` boots from step 1 with a
|
|
338
|
-
fresh `startedAt`. A matching `wizard-state` health check is part of
|
|
339
|
-
the standard `agent-config doctor` run and surfaces malformed JSON or
|
|
340
|
-
schema-shape drift before the next setup attempt.
|
|
341
|
-
|
|
342
|
-
### Extended-mode endpoints
|
|
343
|
-
|
|
344
|
-
`extendedSteps: true` activates two additional read-only endpoints:
|
|
345
|
-
|
|
346
|
-
| Method | Path | Purpose |
|
|
347
|
-
|--------|-------------------------------|---------|
|
|
348
|
-
| GET | `/api/v1/wizard/auto-detect` | Project-signal evidence (composer / package / pyproject / artisan / next.config) for the `ai-tools` step. 404 when extended-mode is off. |
|
|
349
|
-
| GET | `/api/v1/wizard/manifest` | Locked discovery-manifest (ADR-015) so the `packs` step can render supported AI IDs + every pack the manifest exposes. 404 when extended-mode is off. |
|
|
350
|
-
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
stability: beta
|
|
3
|
-
keep-beta-until: 2026-09-04
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Harness Expectations — when AI tool behaviour looks like a package bug but isn't
|
|
7
|
-
|
|
8
|
-
**Status:** Active (Phase D of `road-to-clean-skill-distribution-channels.md`)
|
|
9
|
-
**Owner:** maintainer-team
|
|
10
|
-
**Inputs:** Phase D roadmap steps + the 2026-05-25 misdiagnosis chat session that opened this track.
|
|
11
|
-
|
|
12
|
-
## The case for this document
|
|
13
|
-
|
|
14
|
-
On 2026-05-25 a Claude Code session surfaced three behaviours that looked like `event4u/agent-config` bugs. Two of the three turned out to be **host-harness behaviour** the package has no control over. The third (cross-scope skill drift) was a real package-side bug fixed in Phases A–C. This document captures the host-side three so the next agent / onboarding session / opened issue does not re-run the misdiagnosis loop.
|
|
15
|
-
|
|
16
|
-
## Class A — Plugin-namespaced peer skills
|
|
17
|
-
|
|
18
|
-
### Symptom
|
|
19
|
-
|
|
20
|
-
The session shows skills under namespaces like `codex:`, `cc-gemini-plugin:`, or another `<vendor>:` prefix:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
- codex:setup
|
|
24
|
-
- cc-gemini-plugin:gemini-agent
|
|
25
|
-
- codex:rescue
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
These names do NOT appear in `event4u/agent-config`'s skill catalog, the README, or the contracts.
|
|
29
|
-
|
|
30
|
-
### What's actually happening
|
|
31
|
-
|
|
32
|
-
Claude Code (and similar harnesses) supports **sibling plugins** in addition to the primary `event4u/agent-config` install. Each sibling plugin owns its own skills, namespaced by the plugin id. The harness surfaces every loaded plugin's skills in the same `<available_skills>` list during the session.
|
|
33
|
-
|
|
34
|
-
- `codex:*` skills come from a sibling plugin that wraps the Codex CLI.
|
|
35
|
-
- `cc-gemini-plugin:*` skills come from a sibling plugin that wraps Gemini-CLI integration.
|
|
36
|
-
|
|
37
|
-
`event4u/agent-config` does not ship, control, or update these plugins. They are independent installs by independent maintainers.
|
|
38
|
-
|
|
39
|
-
### What the package can do
|
|
40
|
-
|
|
41
|
-
Nothing — sibling plugins are out of scope by construction. The user can:
|
|
42
|
-
|
|
43
|
-
- Remove the sibling plugin if it is unwanted (via the harness's plugin management — outside this package).
|
|
44
|
-
- Ignore the namespaced names; they will not collide with this package's skill IDs because the prefix differs.
|
|
45
|
-
|
|
46
|
-
### Where to look for the true source
|
|
47
|
-
|
|
48
|
-
Per Claude Code: `claude plugin list` (or equivalent) shows every loaded plugin. Each `<vendor>:` namespace traces back to a plugin row in that listing. Bug reports for those skills go to the respective plugin maintainer.
|
|
49
|
-
|
|
50
|
-
## Class B — Deferred tools that need ToolSearch
|
|
51
|
-
|
|
52
|
-
### Symptom
|
|
53
|
-
|
|
54
|
-
A session sees a `<system-reminder>` block like:
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
The following deferred tools are now available via ToolSearch.
|
|
58
|
-
Their schemas are NOT loaded — calling them directly will fail with
|
|
59
|
-
InputValidationError. Use ToolSearch with query "select:<name>[,<name>...]"
|
|
60
|
-
to load tool schemas before calling them:
|
|
61
|
-
TaskCreate
|
|
62
|
-
WebFetch
|
|
63
|
-
Monitor
|
|
64
|
-
mcp__claude_ai_Linear__authenticate
|
|
65
|
-
...
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
The named tools are real — they show up in the harness's runtime — but the agent cannot call them directly because the tool **schema** isn't loaded yet.
|
|
69
|
-
|
|
70
|
-
### What's actually happening
|
|
71
|
-
|
|
72
|
-
Claude Code's tool-loading is **context-budgeted**. The full tool registry (TaskCreate, WebFetch, every MCP tool from every registered server, etc.) can be many kilobytes of JSON-schema. Loading every schema on every turn would blow the context budget for routine reads. The harness solves this by registering tool **names** up-front and deferring schema load until `ToolSearch` is called — that's the on-ramp.
|
|
73
|
-
|
|
74
|
-
This is not a package issue, and `event4u/agent-config` cannot pre-load these schemas — the harness owns the budget.
|
|
75
|
-
|
|
76
|
-
### What the package can do
|
|
77
|
-
|
|
78
|
-
Nothing — the loading strategy is the harness's contract with the model. Skills that want to use a deferred tool must:
|
|
79
|
-
|
|
80
|
-
1. Run `ToolSearch` with `select:<name>` to load the schema.
|
|
81
|
-
2. Call the tool with the now-known parameters.
|
|
82
|
-
|
|
83
|
-
Skills in this package that need deferred tools document the load step explicitly (see `agents-md-thin-root` § Tool loading for the pattern).
|
|
84
|
-
|
|
85
|
-
### Where to look for the true source
|
|
86
|
-
|
|
87
|
-
Per Claude Code's documentation on tool surfaces and the `ToolSearch` primitive. The package does not own this behaviour.
|
|
88
|
-
|
|
89
|
-
## Class C — Duplicate skill registration (real package bug, fixed in Phases A–C)
|
|
90
|
-
|
|
91
|
-
### Symptom
|
|
92
|
-
|
|
93
|
-
The same skill appears twice in `<available_skills>` with different `description:` strings, or behaves inconsistently across calls.
|
|
94
|
-
|
|
95
|
-
### What's actually happening
|
|
96
|
-
|
|
97
|
-
A user-global install (e.g. `~/.claude/skills/`) and a project-local install (`./.claude/skills/`) coexist at **different versions**. The harness loads both. The earlier register wins the description in some calls, the later in others.
|
|
98
|
-
|
|
99
|
-
Unlike Classes A and B, this is a real package-side issue.
|
|
100
|
-
|
|
101
|
-
### What the package does
|
|
102
|
-
|
|
103
|
-
1. **Default install is filesystem-only** ([`skill-distribution-channels.md`](skill-distribution-channels.md)).
|
|
104
|
-
2. **Pre-flight scope guard** refuses installs that would create cross-scope drift ([`install-scopes.md`](install-scopes.md)).
|
|
105
|
-
3. **Post-install probe** surfaces any remaining drift after install (`task probe:skills`).
|
|
106
|
-
4. **Cleanup script** for stale other-scope installs (`bash scripts/cleanup_other_scope.sh --confirm`).
|
|
107
|
-
|
|
108
|
-
### Where to look for the true source
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
task probe:skills
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
The probe lists every duplicate / drift finding with the exact source paths so the cause is visible in one read.
|
|
115
|
-
|
|
116
|
-
## When in doubt — diagnostic sequence
|
|
117
|
-
|
|
118
|
-
1. Run `task probe:skills` — rules out Class C.
|
|
119
|
-
2. If the suspicious skill carries a `<vendor>:` prefix you don't recognise → Class A. Check `claude plugin list`.
|
|
120
|
-
3. If the harness logs `deferred tools … available via ToolSearch` → Class B. The skill needs an explicit `ToolSearch` step.
|
|
121
|
-
4. None of the above → file an issue at https://github.com/event4u-app/agent-config with the output of `task probe:skills` attached.
|
|
122
|
-
|
|
123
|
-
## See also
|
|
124
|
-
|
|
125
|
-
- [`skill-distribution-channels.md`](skill-distribution-channels.md) — canonical channel per tool.
|
|
126
|
-
- [`install-scopes.md`](install-scopes.md) — scope guard contract.
|
|
127
|
-
- [`agents/evidence/audits/2026-05-distribution-channels/`](../../agents/evidence/audits/2026-05-distribution-channels/) — the underlying audits.
|
|
128
|
-
- [`README.md` § Harness expectations](../../README.md#harness-expectations) — front-of-house pointer to this contract.
|