@event4u/agent-config 3.3.0 → 4.2.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/.agent-src/README.md +2 -2
- package/.agent-src/commands/agent-handoff.md +31 -2
- package/.agent-src/commands/agent-status.md +5 -5
- package/.agent-src/commands/agents/audit.md +8 -8
- package/.agent-src/commands/agents/init.md +25 -1
- package/.agent-src/commands/agents/optimize.md +3 -3
- package/.agent-src/commands/agents/user.md +1 -1
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/analyze-reference-repo.md +1 -1
- package/.agent-src/commands/check-current-md.md +8 -8
- package/.agent-src/commands/{compress.md → condense.md} +55 -55
- package/.agent-src/commands/context/create.md +7 -4
- package/.agent-src/commands/context/refactor.md +3 -1
- package/.agent-src/commands/feature/dev.md +1 -1
- package/.agent-src/commands/feature/explore.md +1 -1
- package/.agent-src/commands/feature/plan.md +10 -8
- package/.agent-src/commands/feature/refactor.md +3 -1
- package/.agent-src/commands/feature/roadmap.md +7 -4
- package/.agent-src/commands/fix/portability.md +3 -3
- package/.agent-src/commands/fix/refs.md +4 -4
- package/.agent-src/commands/ghostwriter.md +2 -2
- package/.agent-src/commands/memory/learn-low-impact.md +3 -3
- package/.agent-src/commands/module/explore.md +34 -8
- package/.agent-src/commands/optimize/agents-dir.md +9 -7
- package/.agent-src/commands/optimize/augmentignore.md +2 -2
- package/.agent-src/commands/optimize/skills.md +9 -9
- package/.agent-src/commands/post-as.md +1 -1
- package/.agent-src/commands/project-analyze.md +2 -2
- package/.agent-src/commands/project-health.md +3 -2
- package/.agent-src/commands/research/deep.md +1 -1
- package/.agent-src/commands/research/report.md +1 -1
- package/.agent-src/commands/research.md +1 -1
- package/.agent-src/commands/roadmap/ai-council.md +1 -1
- package/.agent-src/commands/roadmap/create.md +9 -4
- package/.agent-src/commands/rule-compliance-audit.md +1 -1
- package/.agent-src/commands/upstream-contribute.md +14 -14
- package/.agent-src/commands/video/from-script.md +1 -1
- package/.agent-src/commands/video/scene.md +1 -1
- package/.agent-src/commands/video/stitch.md +1 -1
- package/.agent-src/commands/video/storyboard.md +1 -1
- package/.agent-src/commands/video.md +1 -1
- package/.agent-src/contexts/augment-infrastructure.md +1 -1
- package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
- package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
- package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
- package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
- package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
- package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
- package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
- package/.agent-src/contexts/documentation-hierarchy.md +14 -7
- package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
- package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
- package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
- package/.agent-src/contexts/override-system.md +5 -5
- package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
- package/.agent-src/personas/advisors/first-principles.md +1 -1
- package/.agent-src/personas/hollywood-director.md +1 -1
- package/.agent-src/rules/architecture.md +5 -1
- package/.agent-src/rules/augment-edit-discipline.md +5 -5
- package/.agent-src/rules/augment-source-of-truth.md +15 -15
- package/.agent-src/rules/commit-conventions.md +1 -1
- package/.agent-src/rules/commit-policy.md +10 -0
- package/.agent-src/rules/domain-adoption-policy.md +3 -3
- package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
- package/.agent-src/rules/finance-safety-floor.md +1 -1
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
- package/.agent-src/rules/git-history-discipline.md +1 -1
- package/.agent-src/rules/improve-before-implement.md +2 -2
- package/.agent-src/rules/language-and-tone.md +2 -2
- package/.agent-src/rules/media-governance-routing.md +5 -5
- package/.agent-src/rules/no-attribution-footers.md +1 -0
- package/.agent-src/rules/no-cheap-questions.md +3 -0
- package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
- package/.agent-src/rules/no-pr-progress-comments.md +118 -0
- package/.agent-src/rules/no-roadmap-references.md +3 -3
- package/.agent-src/rules/non-destructive-by-default.md +1 -1
- package/.agent-src/rules/persona-governance.md +3 -3
- package/.agent-src/rules/preservation-guard.md +15 -15
- package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
- package/.agent-src/rules/rule-type-governance.md +1 -1
- package/.agent-src/rules/skill-quality.md +1 -1
- package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
- package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
- package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
- package/.agent-src/skills/check-refs/SKILL.md +2 -2
- package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
- package/.agent-src/skills/command-writing/SKILL.md +19 -19
- package/.agent-src/skills/comp-banding/SKILL.md +1 -1
- package/.agent-src/skills/condense-memory/SKILL.md +131 -0
- package/.agent-src/skills/context-authoring/SKILL.md +2 -2
- package/.agent-src/skills/context-document/SKILL.md +5 -3
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
- package/.agent-src/skills/description-assist/SKILL.md +2 -2
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
- package/.agent-src/skills/lint-skills/SKILL.md +3 -3
- package/.agent-src/skills/md-language-check/SKILL.md +2 -2
- package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
- package/.agent-src/skills/module-management/SKILL.md +166 -94
- package/.agent-src/skills/override-management/SKILL.md +1 -1
- package/.agent-src/skills/persona-writing/SKILL.md +5 -5
- package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
- package/.agent-src/skills/project-docs/SKILL.md +6 -4
- package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
- package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
- package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
- package/.agent-src/skills/rule-writing/SKILL.md +18 -18
- package/.agent-src/skills/script-writing/SKILL.md +1 -1
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
- package/.agent-src/skills/skill-management/SKILL.md +21 -21
- package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
- package/.agent-src/skills/skill-writing/SKILL.md +8 -8
- package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
- package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
- package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
- package/.agent-src/templates/AGENTS.md +1 -0
- package/.agent-src/templates/agent-settings.md +24 -13
- package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
- package/.agent-src/templates/command.md +5 -5
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/copilot-instructions.md +8 -8
- package/.agent-src/templates/features.md +1 -1
- package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
- package/.agent-src/templates/persona.md +2 -2
- package/.agent-src/templates/roadmaps.md +1 -1
- package/.agent-src/templates/rule.md +13 -13
- package/.agent-src/templates/scripts/memory_lookup.py +1 -1
- package/.agent-src/templates/scripts/memory_status.py +2 -2
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
- package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
- package/.agent-src/templates/skill-archive-note.md +5 -5
- package/.agent-src/templates/skill.md +1 -1
- package/.claude-plugin/marketplace.json +4 -4
- package/AGENTS.md +16 -17
- package/CHANGELOG.md +216 -3
- package/CONTRIBUTING.md +31 -12
- package/README.md +21 -12
- package/config/agent-settings.template.yml +22 -2
- package/config/discovery/unassigned-artefacts.yml +24 -24
- package/config/profiles/full.ini +1 -1
- package/dist/cli/agent-config.js +52 -3
- package/dist/cli/agent-config.js.map +1 -1
- package/dist/cli/commands/uiServe.js +9 -0
- package/dist/cli/commands/uiServe.js.map +1 -1
- package/dist/cli/registry.js +2 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +649 -606
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +439 -437
- package/dist/discovery/trust-report.md +5 -5
- package/dist/discovery/workspaces.json +450 -448
- package/dist/install/atomic.js +92 -0
- package/dist/install/atomic.js.map +1 -0
- package/dist/install/conflict.js +196 -0
- package/dist/install/conflict.js.map +1 -0
- package/dist/install/detect.js +218 -0
- package/dist/install/detect.js.map +1 -0
- package/dist/install/paths.js +82 -0
- package/dist/install/paths.js.map +1 -0
- package/dist/install/plan.js +157 -0
- package/dist/install/plan.js.map +1 -0
- package/dist/install/txlog.js +140 -0
- package/dist/install/txlog.js.map +1 -0
- package/dist/install/types.js +19 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/wizard-plan.js +184 -0
- package/dist/install/wizard-plan.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +67 -19
- package/dist/server/app.js +6 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/routes/install.js +358 -0
- package/dist/server/routes/install.js.map +1 -0
- package/dist/server/routes/wizard.js +468 -32
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/routes/workspace.js +396 -0
- package/dist/server/routes/workspace.js.map +1 -0
- package/dist/server/schemas/settings.js +5 -3
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/index-BDAhhpDV.js +40 -0
- package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
- package/dist/ui/assets/index-BXZILUxe.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/MIGRATION.md +1 -1
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/router/0001-three-tier-routing.md +4 -4
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
- package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
- package/docs/adrs/telegraph/README.md +9 -0
- package/docs/architecture/augment-projection.md +4 -4
- package/docs/architecture/claude-bundle.md +1 -1
- package/docs/architecture/current-onboard-baseline.md +3 -3
- package/docs/architecture/multi-tool-projection.md +10 -10
- package/docs/architecture/source-projection.md +27 -27
- package/docs/architecture.md +19 -15
- package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
- package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
- package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
- package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
- package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
- package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
- package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
- package/docs/benchmark.md +65 -0
- package/docs/benchmarks.md +16 -16
- package/docs/catalog.md +17 -15
- package/docs/contracts/CHANGELOG-conventions.md +1 -1
- package/docs/contracts/STABILITY.md +2 -2
- package/docs/contracts/adoption-signal-floor.md +110 -0
- package/docs/contracts/adr-chat-history-split.md +4 -4
- package/docs/contracts/adr-command-suggestion.md +4 -4
- package/docs/contracts/adr-gtm-context-spine.md +1 -1
- package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
- package/docs/contracts/adr-install-user-type-axis.md +1 -1
- package/docs/contracts/adr-layout.md +2 -2
- package/docs/contracts/adr-product-ui-track.md +10 -10
- package/docs/contracts/adr-user-types-axis.md +3 -3
- package/docs/contracts/adr-wing4-context-spine.md +1 -1
- package/docs/contracts/agent-memory-contract.md +3 -3
- package/docs/contracts/agents-md-tech-stack.md +2 -2
- package/docs/contracts/ai-council-config.md +2 -2
- package/docs/contracts/at-rest-encryption.md +4 -0
- package/docs/contracts/audit-log-v1.md +1 -1
- package/docs/contracts/benchmark-ab-contract.md +101 -0
- package/docs/contracts/benchmark-corpus-spec.md +1 -1
- package/docs/contracts/branch-protection-policy.md +98 -0
- package/docs/contracts/ci-cost-budget.md +106 -0
- package/docs/contracts/ci-green-floor.md +141 -0
- package/docs/contracts/command-clusters.md +6 -6
- package/docs/contracts/command-surface-tiers.md +2 -2
- package/docs/contracts/command-taxonomy.md +2 -2
- package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
- package/docs/contracts/config-presets.md +1 -1
- package/docs/contracts/context-paths.md +3 -3
- package/docs/contracts/context-spine.md +1 -1
- package/docs/contracts/cost-summary-schema.md +12 -12
- package/docs/contracts/cross-wing-handoff.md +4 -4
- package/docs/contracts/daily-workspace.md +4 -0
- package/docs/contracts/decision-trace-v1.md +2 -2
- package/docs/contracts/discovery-manifest.md +4 -4
- package/docs/contracts/explain-modes.md +4 -0
- package/docs/contracts/file-ownership-matrix.json +3493 -3318
- package/docs/contracts/file-ownership-matrix.md +3 -3
- package/docs/contracts/frontmatter-contract.md +4 -4
- package/docs/contracts/ghostwriter-schema.md +3 -3
- package/docs/contracts/gui-wizard.md +110 -97
- package/docs/contracts/harness-expectations.md +123 -0
- package/docs/contracts/host-agent-protocol.md +4 -0
- package/docs/contracts/implement-ticket-flow.md +9 -9
- package/docs/contracts/install-scopes.md +77 -0
- package/docs/contracts/iron-law-overrides.txt +1 -1
- package/docs/contracts/kernel-membership.md +26 -26
- package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
- package/docs/contracts/linter-structural-model.md +2 -2
- package/docs/contracts/load-context-budget-model.md +4 -4
- package/docs/contracts/load-context-schema.md +13 -13
- package/docs/contracts/local-analytics.md +4 -0
- package/docs/contracts/local-knowledge-ingestion.md +1 -1
- package/docs/contracts/mcp-cloud-scope.md +2 -2
- package/docs/contracts/mcp-phase-1-scope.md +3 -3
- package/docs/contracts/measurement-baseline.md +5 -5
- package/docs/contracts/mental-models.md +30 -30
- package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
- package/docs/contracts/namespace.md +4 -4
- package/docs/contracts/orchestration-dsl-v1.md +7 -7
- package/docs/contracts/package-self-orientation.md +12 -12
- package/docs/contracts/persona-schema.md +6 -6
- package/docs/contracts/pilot/language-and-tone.md +1 -1
- package/docs/contracts/plain-language-surface.md +117 -0
- package/docs/contracts/profile-system.md +3 -3
- package/docs/contracts/release-pr-gating.md +103 -0
- package/docs/contracts/role-experience.md +3 -3
- package/docs/contracts/rule-classification.md +13 -13
- package/docs/contracts/rule-interactions.md +4 -4
- package/docs/contracts/rule-interactions.yml +30 -30
- package/docs/contracts/rule-priority-hierarchy.md +13 -13
- package/docs/contracts/rule-router.md +2 -2
- package/docs/contracts/safety-model.md +1 -1
- package/docs/contracts/skill-distribution-channels.md +61 -0
- package/docs/contracts/skill-domains.md +2 -2
- package/docs/contracts/smoke-contracts.md +5 -5
- package/docs/contracts/telegraph-telemetry.md +83 -0
- package/docs/contracts/trust-and-safety.md +5 -5
- package/docs/contracts/ui-stack-extension.md +7 -7
- package/docs/contracts/ui-track-flow.md +9 -9
- package/docs/contracts/user-type-schema.md +4 -4
- package/docs/contracts/workflow-packs.md +4 -4
- package/docs/contracts/workspace-documents.md +4 -0
- package/docs/customization.md +28 -8
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
- package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
- package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
- package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
- package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
- package/docs/decisions/ADR-021-deployment-shape.md +3 -3
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
- package/docs/decisions/ADR-028-root-layout.md +7 -7
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
- package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
- package/docs/deploy/connector-setup.md +2 -2
- package/docs/deploy/policy-cookbook.md +2 -2
- package/docs/deploy/team-deployment-posture.md +20 -0
- package/docs/development.md +17 -17
- package/docs/distribution/registries.md +32 -0
- package/docs/distribution/registry-submissions.md +85 -0
- package/docs/distribution/telemetry-schema.md +1 -1
- package/docs/getting-started-by-role.md +45 -3
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/layered-settings.md +56 -2
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
- package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
- package/docs/guidelines/augment-portability-patterns.md +4 -4
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/php/php-coding-patterns.md +1 -1
- package/docs/guidelines/prompt-templates.md +6 -6
- package/docs/maintainers/dev-mode.md +1 -1
- package/docs/mcp.md +1 -1
- package/docs/parity/bench.json +3 -3
- package/docs/parity/ruflo.md +2 -2
- package/docs/profiles.md +11 -11
- package/docs/quality.md +11 -11
- package/docs/safety.md +3 -3
- package/docs/setup/mcp-client-config.md +1 -1
- package/docs/setup/mcp-r2-bootstrap.md +1 -1
- package/docs/setup/mcp-server-docker.md +3 -3
- package/docs/setup/per-ide/windsurf.md +1 -1
- package/docs/skills-catalog.md +8 -7
- package/docs/troubleshooting.md +1 -1
- package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
- package/llms.txt +7 -6
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_archive/README.md +2 -2
- package/scripts/_archive/_backfill_skill_domains.py +3 -3
- package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
- package/scripts/_archive/_p43_bodies.py +10 -10
- package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
- package/scripts/_archive/_p4_migrate.py +7 -7
- package/scripts/_archive/_phase2_shim_helper.py +1 -1
- package/scripts/_archive/_pilot_council_question.py +5 -5
- package/scripts/_cli/explain_last/inputs.py +1 -1
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +195 -1
- package/scripts/_lib/agent_src.py +19 -19
- package/scripts/_lib/bench_ab_cache.py +162 -0
- package/scripts/_lib/bench_ab_scoring.py +209 -0
- package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
- package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
- package/scripts/_lib/claude_desktop_bundler.py +5 -5
- package/scripts/_lib/module_detection.py +223 -0
- package/scripts/_lib/scope_guard.sh +162 -0
- package/scripts/_phase4_bucket.py +3 -3
- package/scripts/_pilot_measure.py +4 -4
- package/scripts/_tmp_scan_framework_leakage.py +1 -1
- package/scripts/adoption_report.py +195 -0
- package/scripts/adoption_snapshot.py +219 -0
- package/scripts/adoption_status.py +166 -0
- package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
- package/scripts/ai_council/advisors.py +5 -5
- package/scripts/ai_council/compile_corpus.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
- package/scripts/annotate_discovery.py +13 -13
- package/scripts/apply_modules_config.py +290 -0
- package/scripts/audit_adr_coverage.py +2 -2
- package/scripts/audit_auto_rules.py +2 -2
- package/scripts/audit_cloud_compatibility.py +3 -3
- package/scripts/audit_command_surface.py +9 -9
- package/scripts/audit_likelihood.py +2 -2
- package/scripts/audit_user_type_axis.py +2 -2
- package/scripts/bench_ab_cache_dispatch.py +68 -0
- package/scripts/bench_ab_clone.py +170 -0
- package/scripts/bench_ab_diff.py +227 -0
- package/scripts/bench_ab_integrity.py +143 -0
- package/scripts/bench_ab_run.py +235 -0
- package/scripts/bench_ab_task_runner.py +369 -0
- package/scripts/bench_ab_tracka_run.py +202 -0
- package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
- package/scripts/bench_run.py +33 -33
- package/scripts/bench_runner.py +2 -2
- package/scripts/bootstrap.sh +99 -0
- package/scripts/build_cloud_bundle.py +6 -6
- package/scripts/build_discovery_manifest.py +7 -7
- package/scripts/build_linear_digest.py +3 -3
- package/scripts/build_rule_trigger_matrix.py +8 -8
- package/scripts/chat_history.py +5 -5
- package/scripts/check_always_budget.py +11 -5
- package/scripts/check_augment_description_cap.py +3 -3
- package/scripts/check_cluster_patterns.py +2 -2
- package/scripts/check_command_count_messaging.py +3 -3
- package/scripts/{check_compression.py → check_condensation.py} +34 -34
- package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
- package/scripts/check_context_paths.py +7 -7
- package/scripts/check_council_layout.py +2 -2
- package/scripts/check_council_references.py +9 -9
- package/scripts/check_iron_law_prominence.py +2 -2
- package/scripts/check_kernel_rule_bundle.py +2 -2
- package/scripts/check_module_management_neutral.py +149 -0
- package/scripts/check_no_roadmap_refs.py +9 -9
- package/scripts/check_portability.py +3 -3
- package/scripts/check_public_catalog_links.py +4 -4
- package/scripts/check_references.py +7 -6
- package/scripts/check_release_pr_shape.py +112 -0
- package/scripts/check_reply_consistency.py +3 -3
- package/scripts/check_safety_floor_untouched.py +1 -1
- package/scripts/check_template_pin_drift.py +5 -5
- package/scripts/check_token_optimizer_freshness.py +3 -3
- package/scripts/ci_status.py +301 -0
- package/scripts/ci_time_ratio.py +1 -1
- package/scripts/cleanup_other_scope.sh +146 -0
- package/scripts/compile_router.py +10 -10
- package/scripts/{compress.py → condense.py} +64 -64
- package/scripts/condense.sh +18 -0
- package/scripts/{compress_memory.py → condense_memory.py} +33 -33
- package/scripts/config/presets.py +2 -2
- package/scripts/config/profiles.py +1 -1
- package/scripts/cost_by_conversation.py +3 -3
- package/scripts/cost_summary.py +7 -7
- package/scripts/count_token_optimizer_usage.sh +1 -1
- package/scripts/gen_discovery_baseline.py +5 -5
- package/scripts/generate_index.py +6 -6
- package/scripts/generate_ownership_matrix.py +10 -10
- package/scripts/generate_pack_manifests.py +1 -1
- package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
- package/scripts/install +3 -3
- package/scripts/install-hooks.sh +6 -6
- package/scripts/install.py +273 -45
- package/scripts/install.sh +187 -1
- package/scripts/inventory_frontmatter.py +2 -2
- package/scripts/iron_law_sha.py +3 -3
- package/scripts/lint_agents_layout.py +14 -7
- package/scripts/lint_agents_md.py +4 -4
- package/scripts/lint_archived_skills.py +3 -3
- package/scripts/lint_artefact_frontmatter.py +2 -2
- package/scripts/lint_bench_ab.py +172 -0
- package/scripts/lint_bench_corpus.py +1 -1
- package/scripts/lint_command_tiers.py +5 -5
- package/scripts/lint_context_spine_usage.py +1 -1
- package/scripts/lint_framework_leakage.py +7 -7
- package/scripts/lint_framework_leakage_allowlist.json +152 -84
- package/scripts/lint_ghostwriter_source.py +3 -3
- package/scripts/lint_handoffs.py +1 -1
- package/scripts/lint_load_context.py +11 -11
- package/scripts/lint_media_policy_linkage.py +5 -5
- package/scripts/lint_namespace.py +1 -1
- package/scripts/lint_no_new_atomic_commands.py +2 -2
- package/scripts/lint_orchestration_dsl.py +1 -1
- package/scripts/lint_pack_boundaries.py +2 -2
- package/scripts/lint_persona_governance.py +4 -4
- package/scripts/lint_role_experiences.py +237 -0
- package/scripts/lint_rule_interactions.py +2 -2
- package/scripts/lint_rule_tiers.py +1 -1
- package/scripts/lint_trust_coherence.py +2 -2
- package/scripts/mcp_registry_submit.sh +187 -0
- package/scripts/mcp_server/tools.py +1 -1
- package/scripts/measure_frugality_savings.py +10 -10
- package/scripts/measure_patterns.py +1 -1
- package/scripts/measure_projection_bytes.py +5 -5
- package/scripts/measure_rule_budget.py +3 -3
- package/scripts/measure_skill_reduction.py +1 -1
- package/scripts/memory_lookup.py +1 -1
- package/scripts/memory_status.py +2 -2
- package/scripts/migrate_command_suggestions.py +3 -3
- package/scripts/mine_session.py +1 -1
- package/scripts/move_artefact.py +3 -3
- package/scripts/new_skill.py +2 -2
- package/scripts/pack_mcp_content.py +9 -9
- package/scripts/plan_physical_move.py +6 -6
- package/scripts/print_required_checks.py +196 -0
- package/scripts/probe_skill_registration.py +413 -0
- package/scripts/propose_modules_config.py +145 -0
- package/scripts/prototype_lint_contradictions.py +1 -1
- package/scripts/recruit_preflight.sh +152 -0
- package/scripts/refine_ticket_detect.py +3 -3
- package/scripts/release.py +20 -0
- package/scripts/render_benchmark_md.py +308 -0
- package/scripts/roadmap_progress_hook.py +1 -1
- package/scripts/run_skill_evals.py +2 -2
- package/scripts/runtime_registry.py +4 -4
- package/scripts/schemas/command.schema.json +4 -4
- package/scripts/schemas/rule.schema.json +5 -5
- package/scripts/schemas/skill.schema.json +3 -3
- package/scripts/schemas/user-type.schema.json +1 -1
- package/scripts/score_skill_selection.py +1 -1
- package/scripts/skill_collision_clusters.py +2 -2
- package/scripts/skill_linter.py +81 -81
- package/scripts/skill_overlap.py +5 -5
- package/scripts/skill_tools/audit_persona_coverage.py +2 -2
- package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
- package/scripts/skill_tools/run_block_d_eval.py +1 -1
- package/scripts/skill_tools/score_skill_relevance.py +1 -1
- package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
- package/scripts/skill_trigger_eval.py +3 -3
- package/scripts/smoke/kernel.sh +7 -1
- package/scripts/smoke/router.sh +5 -5
- package/scripts/smoke/skills.sh +1 -1
- package/scripts/smoke_quickstart.py +1 -1
- package/scripts/snapshot_agent_outputs.py +3 -3
- package/scripts/spotcheck_thin_root.py +1 -1
- package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
- package/scripts/update_counts.py +1 -1
- package/scripts/validate_decision_engine.py +1 -1
- package/scripts/validate_frontmatter.py +1 -1
- package/scripts/validate_safe_paths.py +3 -3
- package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
- package/scripts/verify_roadmap_closure.py +6 -6
- package/templates/consumer-settings/ONBOARDING.md +41 -0
- package/.agent-src/commands/install-via-agent.md +0 -129
- package/.agent-src/skills/compress-memory/SKILL.md +0 -131
- package/dist/ui/assets/index-D-DY1ywI.js +0 -35
- package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
- package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
- package/docs/adrs/caveman/README.md +0 -9
- package/docs/contracts/caveman-telemetry.md +0 -83
- package/scripts/compress.sh +0 -18
|
@@ -19,7 +19,7 @@ This contract defines the **schema** of the file-ownership matrix: the
|
|
|
19
19
|
machine-readable JSON at `docs/contracts/file-ownership-matrix.json` and
|
|
20
20
|
the human-readable mirror at
|
|
21
21
|
`agents/settings/contexts/structural/file-ownership-matrix.md`. Both are
|
|
22
|
-
regenerated from `.agent-src.
|
|
22
|
+
regenerated from `.agent-src.uncondensed/` by the generator and locked
|
|
23
23
|
by CI.
|
|
24
24
|
|
|
25
25
|
**Status:** internal-locked (`stability: beta`). Schema bumps require a
|
|
@@ -49,7 +49,7 @@ The JSON document is a single object:
|
|
|
49
49
|
{
|
|
50
50
|
"version": 1,
|
|
51
51
|
"generated_by": "scripts/generate_ownership_matrix.py",
|
|
52
|
-
"source_of_truth": ".agent-src.
|
|
52
|
+
"source_of_truth": ".agent-src.uncondensed/",
|
|
53
53
|
"files": {
|
|
54
54
|
"<repo-root-relative path>": {
|
|
55
55
|
"kind": "rule | skill | command | context | persona",
|
|
@@ -111,7 +111,7 @@ backstop; the consistency gate fails if regeneration drifts.
|
|
|
111
111
|
## Scope notes (v1)
|
|
112
112
|
|
|
113
113
|
- **Greppable surface:** `rules/`, `skills/`, `commands/`, `contexts/`,
|
|
114
|
-
`personas/` under `.agent-src.
|
|
114
|
+
`personas/` under `.agent-src.uncondensed/`. Generated tool
|
|
115
115
|
projections (`.augment/`, `.claude/`, `.cursor/`, …) are intentionally
|
|
116
116
|
ignored — they are downstream of the source of truth.
|
|
117
117
|
- **`skill:` frontmatter in rules** (named in roadmap 0.1.2) is reserved.
|
|
@@ -10,7 +10,7 @@ keep-beta-until: 2026-08-19
|
|
|
10
10
|
> ADR is the decision; this file is the worked-example reference linters,
|
|
11
11
|
> installer, and contributors cite at runtime.
|
|
12
12
|
|
|
13
|
-
Every `.md` artefact under `.agent-src.
|
|
13
|
+
Every `.md` artefact under `.agent-src.uncondensed/` MUST declare the five
|
|
14
14
|
ADR-013 discovery keys. The release-time manifest builder
|
|
15
15
|
(`scripts/build_discovery_manifest.py`) derives all workspace/pack assignment
|
|
16
16
|
from these alone — **no manual workspace or pack list is ever maintained**.
|
|
@@ -118,7 +118,7 @@ the linter rejects that collision.
|
|
|
118
118
|
| Surface | What runs | When |
|
|
119
119
|
|---|---|---|
|
|
120
120
|
| Local | `task lint-artefact-frontmatter` | manual / pre-commit |
|
|
121
|
-
| Pre-commit | `pre-commit-roadmap-progress` template | when `.agent-src.
|
|
121
|
+
| Pre-commit | `pre-commit-roadmap-progress` template | when `.agent-src.uncondensed/*.md`, `config/discovery/*.yml`, or the linter itself is staged |
|
|
122
122
|
| CI | `task ci` → `lint-artefact-frontmatter` | every push / PR |
|
|
123
123
|
|
|
124
124
|
Install the pre-commit hook with:
|
|
@@ -133,8 +133,8 @@ are staged.
|
|
|
133
133
|
|
|
134
134
|
## Roundtrip invariant
|
|
135
135
|
|
|
136
|
-
Frontmatter survives the `task sync`
|
|
136
|
+
Frontmatter survives the `task sync` condensation pipeline. Path-bearing
|
|
137
137
|
keys (`load_context`) may be rewritten relative to the projected location,
|
|
138
138
|
but the five Phase-1 keys above are byte-stable between
|
|
139
|
-
`.agent-src.
|
|
139
|
+
`.agent-src.uncondensed/`, `.agent-src/`, and `.augment/`. Enforced by
|
|
140
140
|
`tests/test_frontmatter_roundtrip.py`.
|
|
@@ -25,7 +25,7 @@ explicit `accept` step on `/ghostwriter:fetch` re-runs.
|
|
|
25
25
|
profiles live here. **Gitignored by default** via the package-managed
|
|
26
26
|
`.gitignore` block. A `--shared` opt-in to commit profiles is
|
|
27
27
|
deferred to v2; only the doc note lands in v1.
|
|
28
|
-
- **Package source** — `.agent-src.
|
|
28
|
+
- **Package source** — `.agent-src.uncondensed/ghostwriter/` ships
|
|
29
29
|
the README, this schema doc, and `fictional: true` fixtures only.
|
|
30
30
|
**Zero real-person profiles ever ship with the OSS package.** A CI
|
|
31
31
|
lint (`task lint-ghostwriter-source`) enforces this rule by failing
|
|
@@ -181,7 +181,7 @@ attribution stays deterministic.
|
|
|
181
181
|
fixtures are schema examples for a single canonical name; aliases are a
|
|
182
182
|
consumer-only deployment feature. The package-source lint
|
|
183
183
|
(`task lint-ghostwriter-source`) fails on `aliases:` in
|
|
184
|
-
`.agent-src.
|
|
184
|
+
`.agent-src.uncondensed/ghostwriter/`.
|
|
185
185
|
|
|
186
186
|
### Settings toggle (consumer-only)
|
|
187
187
|
|
|
@@ -293,7 +293,7 @@ instead of merging.
|
|
|
293
293
|
|
|
294
294
|
The lint runs in `task ci` and fails on:
|
|
295
295
|
|
|
296
|
-
1. Any file under `.agent-src.
|
|
296
|
+
1. Any file under `.agent-src.uncondensed/ghostwriter/` whose stem is
|
|
297
297
|
**not** on the fixture allowlist (`scripts/ghostwriter_fixture_allowlist.txt`).
|
|
298
298
|
2. Any allowlisted file missing `fictional: true` in frontmatter.
|
|
299
299
|
3. Any package-source file (`fictional: true`) carrying an `aliases:`
|
|
@@ -8,20 +8,27 @@ keep-beta-until: 2026-08-19
|
|
|
8
8
|
> Companion to the agent-mode protocol
|
|
9
9
|
> ([`installer-agent-mode.md`](installer-agent-mode.md)) and the
|
|
10
10
|
> trust-and-safety layer ([`trust-and-safety.md`](trust-and-safety.md)).
|
|
11
|
-
> The wizard is a thin HTTP wrapper
|
|
12
|
-
>
|
|
13
|
-
>
|
|
14
|
-
>
|
|
15
|
-
> picker.
|
|
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
16
|
|
|
17
17
|
## Source of truth
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
19
|
+
The GUI is a Fastify server (`src/server/`) serving a Preact SPA
|
|
20
|
+
(`src/ui/`), booted by the `install` / `setup` / `ui:serve` CLI
|
|
21
|
+
subcommands. The legacy `packages/core/installer/src/gui/*` tree was
|
|
22
|
+
retired; the single real installer is `scripts/install.py`.
|
|
23
|
+
|
|
24
|
+
- Server app + security hooks: [`src/server/app.ts`](../../src/server/app.ts) (Host allow-list, Origin allow-list, CSRF token — `onRequest` hooks)
|
|
25
|
+
- Wizard routes (incl. the real-apply bridge): [`src/server/routes/wizard.ts`](../../src/server/routes/wizard.ts)
|
|
26
|
+
- Read-only install routes (detect / plan-preview / recovery / legacy-v3): [`src/server/routes/install.ts`](../../src/server/routes/install.ts)
|
|
27
|
+
- Atomic / 2PC writes: [`src/server/io/atomicWrite.ts`](../../src/server/io/atomicWrite.ts), [`atomicMultiWrite.ts`](../../src/server/io/atomicMultiWrite.ts)
|
|
28
|
+
- SPA: [`src/ui/`](../../src/ui/) (entry `src/ui/pages/WizardPage.tsx`)
|
|
29
|
+
- CLI boot + `WIZARD_READY` contract: [`src/cli/commands/uiServe.ts`](../../src/cli/commands/uiServe.ts)
|
|
30
|
+
- The single installer (all real writes): [`scripts/install.py`](../../scripts/install.py)
|
|
31
|
+
- Tests: [`tests/server/`](../../tests/server/) + [`tests/e2e/`](../../tests/e2e/)
|
|
25
32
|
|
|
26
33
|
## Local-only invariant
|
|
27
34
|
|
|
@@ -34,126 +41,132 @@ no cross-origin asset, no remote endpoint — CSP
|
|
|
34
41
|
## Boot sequence
|
|
35
42
|
|
|
36
43
|
```
|
|
37
|
-
|
|
44
|
+
agent-config install (or `setup`, or `init` → scripts/install.py → spawns
|
|
45
|
+
`node dist/cli/agent-config.js install --no-open`)
|
|
38
46
|
│
|
|
39
|
-
├─►
|
|
40
|
-
├─►
|
|
41
|
-
├─►
|
|
42
|
-
├─►
|
|
43
|
-
|
|
44
|
-
├─► default-spawn the OS browser opener (skipped with --no-open)
|
|
45
|
-
└─► return GuiServerHandle { url, port, csrfToken, pidFile, close }
|
|
47
|
+
├─► pick a free loopback port; mint a per-server bearer/CSRF token
|
|
48
|
+
├─► Fastify listen({ host: '127.0.0.1', port })
|
|
49
|
+
├─► print `WIZARD_READY <url>` on stdout (url carries `?token=…` + `#/…`)
|
|
50
|
+
├─► open the OS browser at <url> (skipped with --no-open / headless)
|
|
51
|
+
└─► serve until Ctrl-C
|
|
46
52
|
```
|
|
47
53
|
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
`init` is the consumer entry point: it delegates to `scripts/install.py`,
|
|
55
|
+
which — on a TTY with a display and no `--no-ui` / `CI` / explicit
|
|
56
|
+
`--tools=` — spawns the `install` subcommand with `--no-open` and waits for
|
|
57
|
+
the `WIZARD_READY <url>` handshake (progressive 10/20/40/80 s budget) before
|
|
58
|
+
printing the URL banner. Headless / CI / `--no-ui` / explicit `--tools=`
|
|
59
|
+
installs run the non-interactive `install.py` path directly and never boot
|
|
60
|
+
the GUI.
|
|
61
|
+
|
|
62
|
+
### `WIZARD_READY` stdout contract
|
|
63
|
+
|
|
64
|
+
The server emits exactly one line on stdout when it has bound:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
WIZARD_READY http://127.0.0.1:<port>/?token=<token>#/<route>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The supervisor matches `^WIZARD_READY (http://(127.0.0.1|localhost):\d+/\S*)$`
|
|
71
|
+
(no `url=` prefix; the query/hash are part of the captured URL). The line is
|
|
72
|
+
unconditional so headless CI can detect "Fastify bound" without polling the
|
|
73
|
+
port.
|
|
50
74
|
|
|
51
75
|
## Endpoints
|
|
52
76
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
|
56
|
-
|
|
57
|
-
| GET |
|
|
58
|
-
| GET | `/api/
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
| POST | `/api/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- `
|
|
84
|
-
-
|
|
85
|
-
- `
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
77
|
+
Versioned under `/api/v1/`. Selected routes:
|
|
78
|
+
|
|
79
|
+
| Method | Path | Purpose |
|
|
80
|
+
|--------|-------------------------------|-------------------------------------------------------------------------|
|
|
81
|
+
| GET | `/` | SPA shell (token passed via the `?token=` query) |
|
|
82
|
+
| GET | `/api/v1/wizard/state` | Resumable partial wizard state |
|
|
83
|
+
| POST | `/api/v1/wizard/state` | Persist state between steps |
|
|
84
|
+
| GET | `/api/v1/wizard/manifest` | Locked discovery-manifest (extended mode) |
|
|
85
|
+
| GET | `/api/v1/wizard/auto-detect` | Project-signal evidence for the `ai-tools` step (extended mode) |
|
|
86
|
+
| POST | `/api/v1/wizard/finish` | 2PC commit of settings + user-identity |
|
|
87
|
+
| POST | `/api/v1/wizard/apply` | **Single real-apply route.** `dry_run:true` → buffered plan preview; otherwise SSE-streams `scripts/install.py --apply-payload` |
|
|
88
|
+
| GET | `/api/v1/install/detect` | Scope + project shape + tool presence |
|
|
89
|
+
| POST | `/api/v1/install/plan` | Plan preview (per-tool file counts + conflicts) for the Review step |
|
|
90
|
+
| GET | `/api/v1/install/recovery` | Interrupted-run recovery state |
|
|
91
|
+
| GET | `/api/v1/install/legacy-v3` | v3-install detection (backup screen) |
|
|
92
|
+
|
|
93
|
+
The TypeScript apply engine and its `POST /api/v1/install/apply` SSE route
|
|
94
|
+
were removed (road-to-single-install-source-of-truth § Phase 3). All real
|
|
95
|
+
writes now flow through `POST /api/v1/wizard/apply` → `scripts/install.py`.
|
|
96
|
+
|
|
97
|
+
Every request passes three `onRequest` hooks in
|
|
98
|
+
[`src/server/app.ts`](../../src/server/app.ts): a `Host`-header allow-list,
|
|
99
|
+
an `Origin` allow-list (browser-issued requests), and a per-server bearer
|
|
100
|
+
token (`Authorization: Bearer <token>`, minted at boot, surfaced in the
|
|
101
|
+
`?token=` URL). A bad token / Host / Origin returns `403`.
|
|
102
|
+
|
|
103
|
+
## Real apply — single source of truth
|
|
104
|
+
|
|
105
|
+
`POST /api/v1/wizard/apply` is the only write path:
|
|
106
|
+
|
|
107
|
+
- `dry_run: true` → spawns `install.py --apply-payload <tmp> --dry-run` and
|
|
108
|
+
returns the buffered plan-summary text (used by the Review preview).
|
|
109
|
+
- otherwise → spawns `install.py --apply-payload <tmp>` (real apply) and
|
|
110
|
+
**streams** the installer's NDJSON stdout
|
|
111
|
+
(`{type:"file",…}` / `{type:"done"|"error"}`) mapped to the SSE frames the
|
|
112
|
+
SPA consumes. The child is killed if the client disconnects
|
|
113
|
+
(abort-on-disconnect, Finding #24). The installer owns its own
|
|
114
|
+
transactional state (the user-scope lockfile + project manifest), so the
|
|
115
|
+
GUI does not maintain a parallel transaction log.
|
|
91
116
|
|
|
92
117
|
## SSE event framing
|
|
93
118
|
|
|
94
|
-
|
|
95
|
-
is one of:
|
|
119
|
+
Each real-apply event is `data: <json>\n\n`. Frames:
|
|
96
120
|
|
|
97
121
|
```jsonc
|
|
98
|
-
{ "type": "
|
|
99
|
-
{ "type": "
|
|
122
|
+
{ "type": "progress", "file": "<tool>", "status": "deployed", "written": 1, "total": 3 }
|
|
123
|
+
{ "type": "done", "summary": { "written": 3, "total": 3 } }
|
|
124
|
+
{ "type": "error", "code": "<code>", "message": "<reason>", "recoverable": false }
|
|
100
125
|
```
|
|
101
126
|
|
|
102
|
-
The browser
|
|
103
|
-
transaction log and unblocks the idle timer.
|
|
104
|
-
|
|
105
|
-
## Tarball budget
|
|
106
|
-
|
|
107
|
-
GUI assets under `packages/core/installer/src/gui/` (inlined HTML +
|
|
108
|
-
CSS + JS in `static-assets.ts`) must stay **≤ 200 KB compiled**. The
|
|
109
|
-
constraint is enforced by reviewer judgment for now; a CI check is
|
|
110
|
-
tracked under the Phase 6 follow-ups.
|
|
127
|
+
The browser stops reading on `done` / `error`; the server ends the stream.
|
|
111
128
|
|
|
112
129
|
## Security failure modes covered
|
|
113
130
|
|
|
114
|
-
- **Remote exploitation** — loopback bind, Host
|
|
115
|
-
|
|
116
|
-
- **DNS rebinding** — Host header check covers POSTs that omit
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
boot; live PIDs block boot with a helpful message.
|
|
121
|
-
- **Mid-install crash** — transaction log + boot-time rollback prompt.
|
|
122
|
-
- **Hidden state** — closing the tab triggers idle timeout; no
|
|
123
|
-
cross-tab session.
|
|
131
|
+
- **Remote exploitation** — loopback bind, Host allow-list, Origin
|
|
132
|
+
allow-list, per-server bearer token.
|
|
133
|
+
- **DNS rebinding** — Host header check covers POSTs that omit `Origin`.
|
|
134
|
+
- **Mid-install crash** — `scripts/install.py` owns the user-scope
|
|
135
|
+
lockfile + project manifest; the recovery routes
|
|
136
|
+
(`/api/v1/install/recovery`) surface an interrupted run on next boot.
|
|
124
137
|
|
|
125
138
|
## Non-goals (documented contract)
|
|
126
139
|
|
|
127
|
-
- Not a hosted SaaS — no auth
|
|
128
|
-
- Not a
|
|
129
|
-
|
|
130
|
-
- Not a CI surface —
|
|
131
|
-
|
|
132
|
-
CI path is the flag-driven non-interactive CLI.
|
|
140
|
+
- Not a hosted SaaS — no auth account model, no telemetry.
|
|
141
|
+
- Not a parallel installer — the GUI is a selection front-end; every
|
|
142
|
+
real write goes through `scripts/install.py --apply-payload`.
|
|
143
|
+
- Not a CI surface — `--no-open` headless boots are supported for smoke
|
|
144
|
+
tests, but the canonical CI path is the flag-driven non-interactive CLI.
|
|
133
145
|
|
|
134
146
|
## Apply payload — versioning handshake (road-to-global-only-install Phase 0.4 · D12)
|
|
135
147
|
|
|
136
|
-
|
|
148
|
+
`POST /api/v1/wizard/apply` accepts a discriminated-union body keyed on
|
|
137
149
|
`schema_version`. The full JSON Schema lives at
|
|
138
|
-
[`schemas/wizard-apply-payload.schema.json`](../../schemas/wizard-apply-payload.schema.json).
|
|
150
|
+
[`internal/schemas/wizard-apply-payload.schema.json`](../../internal/schemas/wizard-apply-payload.schema.json).
|
|
139
151
|
|
|
140
152
|
| `schema_version` | Variant | Shape |
|
|
141
153
|
|---|---|---|
|
|
142
154
|
| `"installer-v1"` | `InstallerPayloadV1` | `{ ai_tools[], configs{}, dry_run? }` — legacy Installer-GUI, AI tools only. |
|
|
143
155
|
| `"wizard-v2"` | `WizardPayloadV2` | `{ tools[], packs[], settings{}, scope_to_project_only?, dry_run? }` — unified 9-step wizard. |
|
|
144
156
|
|
|
145
|
-
**D12 (locked).** Single
|
|
157
|
+
**D12 (locked).** Single apply endpoint with a `schema_version`
|
|
146
158
|
discriminator — **not** two endpoints with a shared Python backend.
|
|
147
|
-
Reasoning: one bind, one
|
|
159
|
+
Reasoning: one bind, one token, one installer; the
|
|
148
160
|
Python `scripts/install.py` payload-router branches on
|
|
149
161
|
`schema_version` before any disk write. The dual-endpoint variant was
|
|
150
|
-
considered and rejected for doubling the
|
|
151
|
-
with no observability gain.
|
|
162
|
+
considered and rejected for doubling the surface with no gain.
|
|
152
163
|
|
|
153
164
|
`schema_version` is **required**. Servers MUST reject any body that
|
|
154
|
-
lacks it (HTTP
|
|
155
|
-
|
|
156
|
-
|
|
165
|
+
lacks it (HTTP 4xx, single-line error pointing at the schema). The
|
|
166
|
+
real-apply path is now wired end-to-end
|
|
167
|
+
(road-to-single-install-source-of-truth § Phases 1–2): `install.py`
|
|
168
|
+
translates the payload into the canonical install and streams NDJSON
|
|
169
|
+
progress back to the GUI.
|
|
157
170
|
|
|
158
171
|
## Unified 9-step flow (road-to-global-only-install § Phase 1.6)
|
|
159
172
|
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Harness Expectations — when AI tool behaviour looks like a package bug but isn't
|
|
2
|
+
|
|
3
|
+
**Status:** Active (Phase D of `road-to-clean-skill-distribution-channels.md`)
|
|
4
|
+
**Owner:** maintainer-team
|
|
5
|
+
**Inputs:** Phase D roadmap steps + the 2026-05-25 misdiagnosis chat session that opened this track.
|
|
6
|
+
|
|
7
|
+
## The case for this document
|
|
8
|
+
|
|
9
|
+
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.
|
|
10
|
+
|
|
11
|
+
## Class A — Plugin-namespaced peer skills
|
|
12
|
+
|
|
13
|
+
### Symptom
|
|
14
|
+
|
|
15
|
+
The session shows skills under namespaces like `codex:`, `cc-gemini-plugin:`, or another `<vendor>:` prefix:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
- codex:setup
|
|
19
|
+
- cc-gemini-plugin:gemini-agent
|
|
20
|
+
- codex:rescue
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
These names do NOT appear in `event4u/agent-config`'s skill catalog, the README, or the contracts.
|
|
24
|
+
|
|
25
|
+
### What's actually happening
|
|
26
|
+
|
|
27
|
+
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.
|
|
28
|
+
|
|
29
|
+
- `codex:*` skills come from a sibling plugin that wraps the Codex CLI.
|
|
30
|
+
- `cc-gemini-plugin:*` skills come from a sibling plugin that wraps Gemini-CLI integration.
|
|
31
|
+
|
|
32
|
+
`event4u/agent-config` does not ship, control, or update these plugins. They are independent installs by independent maintainers.
|
|
33
|
+
|
|
34
|
+
### What the package can do
|
|
35
|
+
|
|
36
|
+
Nothing — sibling plugins are out of scope by construction. The user can:
|
|
37
|
+
|
|
38
|
+
- Remove the sibling plugin if it is unwanted (via the harness's plugin management — outside this package).
|
|
39
|
+
- Ignore the namespaced names; they will not collide with this package's skill IDs because the prefix differs.
|
|
40
|
+
|
|
41
|
+
### Where to look for the true source
|
|
42
|
+
|
|
43
|
+
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.
|
|
44
|
+
|
|
45
|
+
## Class B — Deferred tools that need ToolSearch
|
|
46
|
+
|
|
47
|
+
### Symptom
|
|
48
|
+
|
|
49
|
+
A session sees a `<system-reminder>` block like:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
The following deferred tools are now available via ToolSearch.
|
|
53
|
+
Their schemas are NOT loaded — calling them directly will fail with
|
|
54
|
+
InputValidationError. Use ToolSearch with query "select:<name>[,<name>...]"
|
|
55
|
+
to load tool schemas before calling them:
|
|
56
|
+
TaskCreate
|
|
57
|
+
WebFetch
|
|
58
|
+
Monitor
|
|
59
|
+
mcp__claude_ai_Linear__authenticate
|
|
60
|
+
...
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
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.
|
|
64
|
+
|
|
65
|
+
### What's actually happening
|
|
66
|
+
|
|
67
|
+
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.
|
|
68
|
+
|
|
69
|
+
This is not a package issue, and `event4u/agent-config` cannot pre-load these schemas — the harness owns the budget.
|
|
70
|
+
|
|
71
|
+
### What the package can do
|
|
72
|
+
|
|
73
|
+
Nothing — the loading strategy is the harness's contract with the model. Skills that want to use a deferred tool must:
|
|
74
|
+
|
|
75
|
+
1. Run `ToolSearch` with `select:<name>` to load the schema.
|
|
76
|
+
2. Call the tool with the now-known parameters.
|
|
77
|
+
|
|
78
|
+
Skills in this package that need deferred tools document the load step explicitly (see `agents-md-thin-root` § Tool loading for the pattern).
|
|
79
|
+
|
|
80
|
+
### Where to look for the true source
|
|
81
|
+
|
|
82
|
+
Per Claude Code's documentation on tool surfaces and the `ToolSearch` primitive. The package does not own this behaviour.
|
|
83
|
+
|
|
84
|
+
## Class C — Duplicate skill registration (real package bug, fixed in Phases A–C)
|
|
85
|
+
|
|
86
|
+
### Symptom
|
|
87
|
+
|
|
88
|
+
The same skill appears twice in `<available_skills>` with different `description:` strings, or behaves inconsistently across calls.
|
|
89
|
+
|
|
90
|
+
### What's actually happening
|
|
91
|
+
|
|
92
|
+
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.
|
|
93
|
+
|
|
94
|
+
Unlike Classes A and B, this is a real package-side issue.
|
|
95
|
+
|
|
96
|
+
### What the package does
|
|
97
|
+
|
|
98
|
+
1. **Default install is filesystem-only** ([`skill-distribution-channels.md`](skill-distribution-channels.md)).
|
|
99
|
+
2. **Pre-flight scope guard** refuses installs that would create cross-scope drift ([`install-scopes.md`](install-scopes.md)).
|
|
100
|
+
3. **Post-install probe** surfaces any remaining drift after install (`task probe:skills`).
|
|
101
|
+
4. **Cleanup script** for stale other-scope installs (`bash scripts/cleanup_other_scope.sh --confirm`).
|
|
102
|
+
|
|
103
|
+
### Where to look for the true source
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
task probe:skills
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The probe lists every duplicate / drift finding with the exact source paths so the cause is visible in one read.
|
|
110
|
+
|
|
111
|
+
## When in doubt — diagnostic sequence
|
|
112
|
+
|
|
113
|
+
1. Run `task probe:skills` — rules out Class C.
|
|
114
|
+
2. If the suspicious skill carries a `<vendor>:` prefix you don't recognise → Class A. Check `claude plugin list`.
|
|
115
|
+
3. If the harness logs `deferred tools … available via ToolSearch` → Class B. The skill needs an explicit `ToolSearch` step.
|
|
116
|
+
4. None of the above → file an issue at https://github.com/event4u-app/agent-config with the output of `task probe:skills` attached.
|
|
117
|
+
|
|
118
|
+
## See also
|
|
119
|
+
|
|
120
|
+
- [`skill-distribution-channels.md`](skill-distribution-channels.md) — canonical channel per tool.
|
|
121
|
+
- [`install-scopes.md`](install-scopes.md) — scope guard contract.
|
|
122
|
+
- [`agents/evidence/audits/2026-05-distribution-channels/`](../../agents/evidence/audits/2026-05-distribution-channels/) — the underlying audits.
|
|
123
|
+
- [`README.md` § Harness expectations](../../README.md#harness-expectations) — front-of-house pointer to this contract.
|
|
@@ -12,7 +12,7 @@ keep-beta-until: 2026-08-12
|
|
|
12
12
|
> - **Created:** 2026-04-22
|
|
13
13
|
> - **Status:** Phase 1 shipped 2026-04-23 — `DeliveryState` +
|
|
14
14
|
> dispatcher live under
|
|
15
|
-
> [`.agent-src.
|
|
15
|
+
> [`.agent-src.uncondensed/templates/scripts/implement_ticket/`](../../.agent-src.uncondensed/templates/scripts/implement_ticket/).
|
|
16
16
|
> Step wiring (Phase 2) still open. Schema **v1** envelope
|
|
17
17
|
> (`work_engine.state` / `work_engine.migration.v0_to_v1`) shipped
|
|
18
18
|
> 2026-04-27 as R1 Phase 2 — see [State schema v1](#state-schema-v1)
|
|
@@ -265,7 +265,7 @@ Bounded per the top-level roadmap rule:
|
|
|
265
265
|
- **Four allowed types:** `domain-invariants`,
|
|
266
266
|
`architecture-decisions`, `incident-learnings`,
|
|
267
267
|
`historical-patterns`. All four exist in the
|
|
268
|
-
[templates directory](../../.agent-src.
|
|
268
|
+
[templates directory](../../.agent-src.uncondensed/templates/agents/memory/).
|
|
269
269
|
- **Keys:** files touched by the plan, symbols referenced by the
|
|
270
270
|
ticket.
|
|
271
271
|
- **Decision-change rule:** a memory hit that did not change an
|
|
@@ -278,7 +278,7 @@ Bounded per the top-level roadmap rule:
|
|
|
278
278
|
|
|
279
279
|
Read from `.agent-settings.yml` `roles.active_role` and resolved
|
|
280
280
|
via `resolve_policy()` in
|
|
281
|
-
[`persona_policy.py`](../../.agent-src.
|
|
281
|
+
[`persona_policy.py`](../../.agent-src.uncondensed/templates/scripts/implement_ticket/persona_policy.py).
|
|
282
282
|
Policies live alongside the dispatcher so the flow can consume
|
|
283
283
|
them directly; the shared
|
|
284
284
|
[`role-contracts`](../../docs/guidelines/agent-infra/role-contracts.md)
|
|
@@ -319,7 +319,7 @@ skill.
|
|
|
319
319
|
When a step returns `blocked`, the orchestrator:
|
|
320
320
|
|
|
321
321
|
1. Emits the numbered questions per
|
|
322
|
-
[`user-interaction`](../../.agent-src.
|
|
322
|
+
[`user-interaction`](../../.agent-src.uncondensed/rules/user-interaction.md).
|
|
323
323
|
2. Writes a partial report up to the last successful step.
|
|
324
324
|
3. Exits with a `blocked` status — no guess, no fallback.
|
|
325
325
|
|
|
@@ -332,7 +332,7 @@ the context. V1 explicitly does **not** attempt resumable sessions.
|
|
|
332
332
|
Every step declares — in code — the conditions under which it
|
|
333
333
|
can return `blocked`. The declarations live as module-level
|
|
334
334
|
`AMBIGUITIES` tuples (see
|
|
335
|
-
[`directives/backend/__init__.py`](../../.agent-src.
|
|
335
|
+
[`directives/backend/__init__.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/backend/__init__.py)
|
|
336
336
|
`.all_ambiguities()`). The
|
|
337
337
|
[`test_ambiguity_coverage.py`](../../tests/implement_ticket/test_ambiguity_coverage.py)
|
|
338
338
|
suite locks the contract: adding a new `blocked` path without
|
|
@@ -377,7 +377,7 @@ empty, but all headings are present unless explicitly marked
|
|
|
377
377
|
because nothing was changed.
|
|
378
378
|
|
|
379
379
|
Implementation: see
|
|
380
|
-
[`directives/backend/report.py`](../../.agent-src.
|
|
380
|
+
[`directives/backend/report.py`](../../.agent-src.uncondensed/templates/scripts/work_engine/directives/backend/report.py).
|
|
381
381
|
Section renderers are pure and deterministic; consumers can rely
|
|
382
382
|
on the heading order and on each section either rendering with
|
|
383
383
|
content or being omitted per the rules above.
|
|
@@ -621,6 +621,6 @@ are blocked by `freeze-guard.yml::manifest-integrity` at PR time.
|
|
|
621
621
|
- [`../../.github/workflows/freeze-guard.yml`](../../.github/workflows/freeze-guard.yml) — manifest-integrity + live-replay gates
|
|
622
622
|
- [`agent-memory-contract.md`](agent-memory-contract.md)
|
|
623
623
|
- [`../../docs/guidelines/agent-infra/role-contracts.md`](../../docs/guidelines/agent-infra/role-contracts.md)
|
|
624
|
-
- [`../../.agent-src.
|
|
625
|
-
- [`../../.agent-src.
|
|
626
|
-
- [`../../.agent-src.
|
|
624
|
+
- [`../../.agent-src.uncondensed/rules/user-interaction.md`](../../.agent-src.uncondensed/rules/user-interaction.md)
|
|
625
|
+
- [`../../.agent-src.uncondensed/rules/scope-control.md`](../../.agent-src.uncondensed/rules/scope-control.md)
|
|
626
|
+
- [`../../.agent-src.uncondensed/rules/minimal-safe-diff.md`](../../.agent-src.uncondensed/rules/minimal-safe-diff.md)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Install Scopes — user-global vs project-local
|
|
2
|
+
|
|
3
|
+
**Status:** Active (locked 2026-05-25 via Phase B of `road-to-clean-skill-distribution-channels.md`)
|
|
4
|
+
**Owner:** maintainer-team
|
|
5
|
+
**Inputs:** [`docs/contracts/skill-distribution-channels.md`](skill-distribution-channels.md), [`agents/evidence/audits/2026-05-distribution-channels/03-installer-scope-flow.md`](../../agents/evidence/audits/2026-05-distribution-channels/03-installer-scope-flow.md)
|
|
6
|
+
|
|
7
|
+
## Rule
|
|
8
|
+
|
|
9
|
+
`event4u/agent-config` may be installed at **one** of two scopes per developer machine:
|
|
10
|
+
|
|
11
|
+
| Scope | Lives at | Default for | Rationale |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| **project-local** | `<project-root>/.augment/`, `<project-root>/.claude/skills/`, … | Application repos | The skills, rules, and personas are pinned alongside the code they serve. The install is reproducible from the repo. |
|
|
14
|
+
| **user-global** | `~/.augment/`, `~/.claude/skills/`, … | Tooling repos / dotfiles | The same skills follow the developer across every project they touch. Useful when no specific repo "owns" the install. |
|
|
15
|
+
|
|
16
|
+
Installing at **both** scopes simultaneously is the failure mode the canonical-channel contract prevents — the host harness loads both registrations, and any version drift surfaces as duplicate skills with stale frontmatter (the 2026-05-25 bug).
|
|
17
|
+
|
|
18
|
+
## The installer enforces this
|
|
19
|
+
|
|
20
|
+
`scripts/install.sh` runs `scripts/_lib/scope_guard.sh` before any file write:
|
|
21
|
+
|
|
22
|
+
1. **`OK`** — no install at the other scope. Proceed.
|
|
23
|
+
2. **`WARN`** — install at the other scope, same version. Same content; duplicate registration but no drift. Surface a warning, proceed.
|
|
24
|
+
3. **`DRIFT`** — install at the other scope, different version. Block with a numbered-options prompt:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
1. Abort install — fix drift first (recommended)
|
|
28
|
+
2. Upgrade the OTHER scope first
|
|
29
|
+
3. Force install at this scope — accept drift (set SCOPE_GUARD_BYPASS=1)
|
|
30
|
+
4. Clean the other scope (bash scripts/cleanup_other_scope.sh --confirm)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Non-interactive shells default to **abort**. CI runs and the orchestrator set `SCOPE_GUARD_BYPASS=1` to skip the gate.
|
|
34
|
+
|
|
35
|
+
The `agent-config setup` wizard exposes the same check at `GET /api/v1/wizard/scope-guard` (extended-mode endpoint). The first wizard step renders the verdict before the user picks an install scope.
|
|
36
|
+
|
|
37
|
+
## How to clean a stale other-scope install
|
|
38
|
+
|
|
39
|
+
Use the companion script:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Dry-run (default) — list what would be removed
|
|
43
|
+
bash scripts/cleanup_other_scope.sh --user
|
|
44
|
+
|
|
45
|
+
# Confirm and delete
|
|
46
|
+
bash scripts/cleanup_other_scope.sh --user --confirm
|
|
47
|
+
|
|
48
|
+
# Narrow to a single tool
|
|
49
|
+
bash scripts/cleanup_other_scope.sh --user --confirm --tools=claude-code
|
|
50
|
+
|
|
51
|
+
# Remove from a specific project root
|
|
52
|
+
bash scripts/cleanup_other_scope.sh --project /path/to/proj --confirm
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The script refuses to delete anything without `--confirm` per `non-destructive-by-default`. It only touches the tool-scoped paths the contract names (`.claude/skills/`, `.augment/`, `.cursor/rules/`, `.clinerules/`, `.windsurf/rules/`, `.github/copilot-instructions.md`); the rest of the scope root is never modified.
|
|
56
|
+
|
|
57
|
+
## When to pick which scope
|
|
58
|
+
|
|
59
|
+
- **App repo** (Laravel, Next.js, monorepo) → project-local. The skills/rules ship with the code; CI installs them deterministically.
|
|
60
|
+
- **Tooling repo** (dotfiles, personal sandbox) → user-global. The install follows the developer.
|
|
61
|
+
- **Both apply** (a tooling repo that also has project-specific overrides) → project-local for the overrides, no user-global install. The override mechanism at `agents/overrides/` covers the divergence.
|
|
62
|
+
|
|
63
|
+
The scope guard does **not** make the picking decision; it enforces "one scope per machine at one version".
|
|
64
|
+
|
|
65
|
+
## Failure modes the guard catches
|
|
66
|
+
|
|
67
|
+
- A user installed `event4u/agent-config` globally a year ago, then `npx`d a recent project that pulled v3.x into `./.claude/skills/`. Same skill ID, different frontmatter on disk. Without the guard, the Claude session sees both registrations and the agent reasons against the wrong description.
|
|
68
|
+
- A maintainer ran `scripts/install.sh --target=$HOME` for a quick test and forgot to clean up. The next project install at the same scope spawns a drift the user has no easy way to debug.
|
|
69
|
+
- A CI run on a worker that previously cached `~/.claude/skills/` from a stale prior job. `CI=true` skips the gate, but the probe (Phase C) catches it post-install.
|
|
70
|
+
|
|
71
|
+
## See also
|
|
72
|
+
|
|
73
|
+
- [`docs/contracts/skill-distribution-channels.md`](skill-distribution-channels.md) — per-tool canonical channel.
|
|
74
|
+
- [`scripts/_lib/scope_guard.sh`](../../scripts/_lib/scope_guard.sh) — guard implementation.
|
|
75
|
+
- [`scripts/cleanup_other_scope.sh`](../../scripts/cleanup_other_scope.sh) — companion cleanup.
|
|
76
|
+
- [`tests/test_cleanup_other_scope.py`](../../tests/test_cleanup_other_scope.py) — safety regression.
|
|
77
|
+
- [`README.md` § Installation](../../README.md) — consumer-facing install path.
|