@event4u/agent-config 5.2.0 → 5.4.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/commands/agent-handoff.md +1 -9
- package/.agent-src/commands/agent-status.md +1 -9
- package/.agent-src/commands/agents/audit.md +1 -9
- package/.agent-src/commands/agents/init.md +1 -9
- package/.agent-src/commands/agents/optimize.md +1 -9
- package/.agent-src/commands/agents/user/accept.md +1 -9
- package/.agent-src/commands/agents/user/init.md +1 -9
- package/.agent-src/commands/agents/user/review.md +1 -9
- package/.agent-src/commands/agents/user/show.md +1 -9
- package/.agent-src/commands/agents/user/update.md +1 -9
- package/.agent-src/commands/agents/user.md +1 -9
- package/.agent-src/commands/agents.md +1 -9
- package/.agent-src/commands/analytics/prune.md +1 -9
- package/.agent-src/commands/analytics/show.md +1 -9
- package/.agent-src/commands/analytics.md +1 -9
- package/.agent-src/commands/analyze-reference-repo.md +1 -9
- package/.agent-src/commands/bug-fix.md +1 -9
- package/.agent-src/commands/bug-investigate.md +1 -9
- package/.agent-src/commands/challenge-me/vision.md +1 -9
- package/.agent-src/commands/challenge-me/with-docs.md +1 -9
- package/.agent-src/commands/challenge-me.md +1 -9
- package/.agent-src/commands/chat-history/import.md +1 -9
- package/.agent-src/commands/chat-history/learn.md +1 -9
- package/.agent-src/commands/chat-history/show.md +1 -9
- package/.agent-src/commands/chat-history.md +1 -9
- package/.agent-src/commands/check-current-md.md +1 -9
- package/.agent-src/commands/commit/in-chunks.md +1 -9
- package/.agent-src/commands/commit.md +1 -9
- package/.agent-src/commands/condense.md +1 -9
- package/.agent-src/commands/context/create.md +1 -9
- package/.agent-src/commands/context/refactor.md +1 -9
- package/.agent-src/commands/context.md +1 -9
- package/.agent-src/commands/cost-report.md +1 -9
- package/.agent-src/commands/council/analysis.md +1 -9
- package/.agent-src/commands/council/debate.md +1 -9
- package/.agent-src/commands/council/default.md +1 -9
- package/.agent-src/commands/council/design.md +1 -9
- package/.agent-src/commands/council/optimize.md +1 -9
- package/.agent-src/commands/council/pr.md +1 -9
- package/.agent-src/commands/council.md +1 -9
- package/.agent-src/commands/create-pr/description-only.md +1 -9
- package/.agent-src/commands/create-pr.md +1 -9
- package/.agent-src/commands/e2e-heal.md +1 -9
- package/.agent-src/commands/e2e-plan.md +1 -9
- package/.agent-src/commands/estimate-ticket.md +1 -9
- package/.agent-src/commands/feature/dev.md +1 -9
- package/.agent-src/commands/feature/explore.md +1 -9
- package/.agent-src/commands/feature/plan.md +1 -9
- package/.agent-src/commands/feature/refactor.md +1 -9
- package/.agent-src/commands/feature/roadmap.md +1 -9
- package/.agent-src/commands/feature.md +1 -9
- package/.agent-src/commands/fix/ci.md +1 -9
- package/.agent-src/commands/fix/portability.md +1 -9
- package/.agent-src/commands/fix/pr-bot-comments.md +1 -9
- package/.agent-src/commands/fix/pr-comments.md +1 -9
- package/.agent-src/commands/fix/pr-developer-comments.md +1 -9
- package/.agent-src/commands/fix/refs.md +1 -9
- package/.agent-src/commands/fix/seeder.md +1 -9
- package/.agent-src/commands/fix.md +1 -9
- package/.agent-src/commands/ghostwriter/delete.md +1 -9
- package/.agent-src/commands/ghostwriter/fetch.md +1 -9
- package/.agent-src/commands/ghostwriter/list.md +1 -9
- package/.agent-src/commands/ghostwriter/show.md +1 -9
- package/.agent-src/commands/ghostwriter/write.md +1 -9
- package/.agent-src/commands/ghostwriter.md +1 -9
- package/.agent-src/commands/grill-me.md +1 -9
- package/.agent-src/commands/implement-ticket.md +1 -9
- package/.agent-src/commands/jira-ticket.md +1 -9
- package/.agent-src/commands/judge/on-diff.md +1 -9
- package/.agent-src/commands/judge/solo.md +1 -9
- package/.agent-src/commands/judge/steps.md +1 -9
- package/.agent-src/commands/judge.md +1 -9
- package/.agent-src/commands/knowledge/forget.md +1 -9
- package/.agent-src/commands/knowledge/ingest.md +1 -9
- package/.agent-src/commands/knowledge/list.md +1 -9
- package/.agent-src/commands/knowledge.md +1 -9
- package/.agent-src/commands/memory/add.md +1 -9
- package/.agent-src/commands/memory/learn-low-impact.md +1 -9
- package/.agent-src/commands/memory/load.md +1 -9
- package/.agent-src/commands/memory/mine-session.md +1 -9
- package/.agent-src/commands/memory/promote.md +1 -9
- package/.agent-src/commands/memory/propose.md +1 -9
- package/.agent-src/commands/memory.md +1 -9
- package/.agent-src/commands/mode.md +1 -9
- package/.agent-src/commands/module/create.md +1 -9
- package/.agent-src/commands/module/explore.md +1 -9
- package/.agent-src/commands/module.md +1 -9
- package/.agent-src/commands/optimize/agents-dir.md +1 -9
- package/.agent-src/commands/optimize/augmentignore.md +1 -9
- package/.agent-src/commands/optimize/rtk.md +1 -9
- package/.agent-src/commands/optimize/skills.md +1 -9
- package/.agent-src/commands/optimize-prompt.md +1 -9
- package/.agent-src/commands/optimize.md +1 -9
- package/.agent-src/commands/orchestrate.md +1 -9
- package/.agent-src/commands/override/create.md +1 -9
- package/.agent-src/commands/override/manage.md +1 -9
- package/.agent-src/commands/override.md +1 -9
- package/.agent-src/commands/package-reset.md +1 -9
- package/.agent-src/commands/package-test.md +1 -9
- package/.agent-src/commands/post-as/ghostwriter.md +1 -9
- package/.agent-src/commands/post-as/me.md +1 -9
- package/.agent-src/commands/post-as.md +1 -9
- package/.agent-src/commands/prepare-for-review.md +1 -9
- package/.agent-src/commands/project-analyze.md +1 -9
- package/.agent-src/commands/project-health.md +1 -9
- package/.agent-src/commands/quality-fix.md +1 -9
- package/.agent-src/commands/refine-ticket.md +1 -9
- package/.agent-src/commands/research/deep.md +1 -9
- package/.agent-src/commands/research/report.md +1 -9
- package/.agent-src/commands/research.md +1 -9
- package/.agent-src/commands/review-changes.md +1 -9
- package/.agent-src/commands/review-routing.md +1 -9
- package/.agent-src/commands/roadmap/ai-council.md +1 -9
- package/.agent-src/commands/roadmap/create.md +1 -9
- package/.agent-src/commands/roadmap/process-full.md +1 -9
- package/.agent-src/commands/roadmap/process-phase.md +1 -9
- package/.agent-src/commands/roadmap/process-step.md +1 -9
- package/.agent-src/commands/roadmap.md +1 -9
- package/.agent-src/commands/rule-compliance-audit.md +1 -9
- package/.agent-src/commands/set-cost-profile.md +1 -9
- package/.agent-src/commands/sync-agent-settings.md +1 -9
- package/.agent-src/commands/sync-gitignore/fix.md +1 -9
- package/.agent-src/commands/sync-gitignore.md +1 -9
- package/.agent-src/commands/tests/create.md +1 -9
- package/.agent-src/commands/tests/execute.md +1 -9
- package/.agent-src/commands/tests.md +1 -9
- package/.agent-src/commands/threat-model.md +1 -9
- package/.agent-src/commands/update-form-request-messages.md +1 -9
- package/.agent-src/commands/upstream-contribute.md +1 -9
- package/.agent-src/commands/video/from-script.md +1 -9
- package/.agent-src/commands/video/scene.md +1 -9
- package/.agent-src/commands/video/stitch.md +1 -9
- package/.agent-src/commands/video/storyboard.md +1 -9
- package/.agent-src/commands/video.md +1 -9
- package/.agent-src/commands/work.md +1 -9
- package/.agent-src/contexts/model-recommendations.md +82 -82
- package/.agent-src/personas/ai-agent.md +0 -2
- package/.agent-src/personas/ai-video-technical-director.md +0 -2
- package/.agent-src/personas/backend-architect.md +0 -2
- package/.agent-src/personas/cmo.md +0 -2
- package/.agent-src/personas/critical-challenger.md +0 -2
- package/.agent-src/personas/customer-success-lead.md +0 -2
- package/.agent-src/personas/developer.md +0 -2
- package/.agent-src/personas/discovery-lead.md +0 -2
- package/.agent-src/personas/eloquent-tamer.md +0 -2
- package/.agent-src/personas/engineering-manager.md +0 -2
- package/.agent-src/personas/finance-partner.md +0 -2
- package/.agent-src/personas/frontend-engineer.md +0 -2
- package/.agent-src/personas/growth-pm.md +0 -2
- package/.agent-src/personas/hollywood-director.md +0 -2
- package/.agent-src/personas/people-strategist.md +0 -2
- package/.agent-src/personas/product-owner.md +0 -1
- package/.agent-src/personas/qa.md +0 -2
- package/.agent-src/personas/revops-maintainer.md +0 -2
- package/.agent-src/personas/revops.md +0 -2
- package/.agent-src/personas/security-engineer.md +0 -2
- package/.agent-src/personas/senior-engineer.md +0 -2
- package/.agent-src/personas/stakeholder.md +0 -2
- package/.agent-src/personas/strategist.md +0 -2
- package/.agent-src/personas/tech-writer.md +0 -2
- package/.agent-src/rules/agent-authority.md +0 -9
- package/.agent-src/rules/analysis-skill-routing.md +0 -9
- package/.agent-src/rules/architecture.md +0 -9
- package/.agent-src/rules/artifact-drafting-protocol.md +0 -9
- package/.agent-src/rules/artifact-engagement-recording.md +0 -9
- package/.agent-src/rules/ask-when-uncertain.md +0 -9
- package/.agent-src/rules/augment-edit-discipline.md +0 -9
- package/.agent-src/rules/augment-source-of-truth.md +0 -9
- package/.agent-src/rules/autonomous-execution.md +0 -9
- package/.agent-src/rules/cli-output-handling.md +0 -9
- package/.agent-src/rules/command-suggestion-policy.md +0 -9
- package/.agent-src/rules/commit-conventions.md +0 -9
- package/.agent-src/rules/commit-policy.md +0 -9
- package/.agent-src/rules/context-hygiene.md +0 -9
- package/.agent-src/rules/copilot-routing.md +0 -9
- package/.agent-src/rules/devcontainer-routing.md +0 -9
- package/.agent-src/rules/direct-answers.md +0 -9
- package/.agent-src/rules/docker-commands.md +0 -9
- package/.agent-src/rules/domain-adoption-policy.md +0 -9
- package/.agent-src/rules/domain-safety-disclaimer.md +0 -9
- package/.agent-src/rules/domain-safety-pii.md +0 -9
- package/.agent-src/rules/domain-safety-retention.md +0 -9
- package/.agent-src/rules/downstream-changes.md +0 -9
- package/.agent-src/rules/engineering-safety-floor.md +0 -9
- package/.agent-src/rules/external-reference-deep-dive.md +0 -9
- package/.agent-src/rules/fast-path-marker-visibility.md +0 -9
- package/.agent-src/rules/finance-safety-floor.md +0 -6
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +0 -9
- package/.agent-src/rules/git-history-discipline.md +0 -9
- package/.agent-src/rules/guidelines.md +0 -9
- package/.agent-src/rules/improve-before-implement.md +0 -9
- package/.agent-src/rules/invite-challenge.md +0 -9
- package/.agent-src/rules/language-and-tone.md +0 -9
- package/.agent-src/rules/laravel-routing.md +0 -4
- package/.agent-src/rules/laravel-translations.md +0 -4
- package/.agent-src/rules/linked-projects-onboarding-gate.md +0 -3
- package/.agent-src/rules/low-impact-corpus-privacy-floor.md +0 -9
- package/.agent-src/rules/markdown-safe-codeblocks.md +0 -9
- package/.agent-src/rules/media-governance-routing.md +0 -9
- package/.agent-src/rules/minimal-safe-diff.md +0 -9
- package/.agent-src/rules/missing-tool-handling.md +0 -9
- package/.agent-src/rules/model-recommendation.md +69 -15
- package/.agent-src/rules/no-attribution-footers.md +0 -9
- package/.agent-src/rules/no-cheap-questions.md +0 -9
- package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -9
- package/.agent-src/rules/no-pr-progress-comments.md +0 -9
- package/.agent-src/rules/no-roadmap-references.md +0 -9
- package/.agent-src/rules/non-destructive-by-default.md +0 -9
- package/.agent-src/rules/onboarding-gate.md +0 -9
- package/.agent-src/rules/package-ci-checks.md +0 -9
- package/.agent-src/rules/persona-governance.md +0 -9
- package/.agent-src/rules/php-coding.md +0 -4
- package/.agent-src/rules/preservation-guard.md +0 -9
- package/.agent-src/rules/provider-lifecycle-discipline.md +0 -9
- package/.agent-src/rules/reviewer-awareness.md +0 -9
- package/.agent-src/rules/roadmap-ci-steps-policy.md +0 -9
- package/.agent-src/rules/roadmap-progress-sync.md +0 -9
- package/.agent-src/rules/role-mode-adherence.md +0 -9
- package/.agent-src/rules/rule-type-governance.md +0 -9
- package/.agent-src/rules/runtime-safety.md +0 -9
- package/.agent-src/rules/scope-control.md +0 -9
- package/.agent-src/rules/security-sensitive-stop.md +0 -9
- package/.agent-src/rules/size-enforcement.md +0 -9
- package/.agent-src/rules/skill-improvement-trigger.md +0 -9
- package/.agent-src/rules/skill-quality.md +0 -9
- package/.agent-src/rules/slash-command-routing-policy.md +0 -9
- package/.agent-src/rules/strategy-safety-floor.md +0 -6
- package/.agent-src/rules/symfony-routing.md +0 -4
- package/.agent-src/rules/telegraph-speak.md +0 -9
- package/.agent-src/rules/think-before-action.md +0 -9
- package/.agent-src/rules/token-efficiency.md +0 -9
- package/.agent-src/rules/token-optimizer-maintenance.md +0 -9
- package/.agent-src/rules/tool-safety.md +0 -9
- package/.agent-src/rules/ui-audit-gate.md +0 -9
- package/.agent-src/rules/upstream-proposal.md +0 -9
- package/.agent-src/rules/user-interaction.md +0 -9
- package/.agent-src/rules/user-interrupt-priority.md +0 -9
- package/.agent-src/rules/verify-before-complete.md +0 -9
- package/.agent-src/skills/accessibility-auditor/SKILL.md +1 -9
- package/.agent-src/skills/activation-design/SKILL.md +1 -4
- package/.agent-src/skills/adr-create/SKILL.md +1 -9
- package/.agent-src/skills/adversarial-review/SKILL.md +1 -9
- package/.agent-src/skills/agent-docs-writing/SKILL.md +1 -9
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +1 -9
- package/.agent-src/skills/ai-council/SKILL.md +1 -9
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -9
- package/.agent-src/skills/analysis-skill-router/SKILL.md +1 -9
- package/.agent-src/skills/api-design/SKILL.md +1 -9
- package/.agent-src/skills/api-endpoint/SKILL.md +1 -9
- package/.agent-src/skills/api-testing/SKILL.md +1 -9
- package/.agent-src/skills/architecture-review-lens/SKILL.md +1 -9
- package/.agent-src/skills/artisan-commands/SKILL.md +1 -4
- package/.agent-src/skills/async-python-patterns/SKILL.md +1 -3
- package/.agent-src/skills/authz-review/SKILL.md +1 -9
- package/.agent-src/skills/aws-infrastructure/SKILL.md +1 -9
- package/.agent-src/skills/blade-ui/SKILL.md +1 -4
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +1 -9
- package/.agent-src/skills/bug-analyzer/SKILL.md +1 -9
- package/.agent-src/skills/build-buy-partner/SKILL.md +1 -7
- package/.agent-src/skills/canvas-design/SKILL.md +1 -3
- package/.agent-src/skills/character-consistency/SKILL.md +1 -3
- package/.agent-src/skills/check-refs/SKILL.md +1 -9
- package/.agent-src/skills/churn-prevention/SKILL.md +1 -5
- package/.agent-src/skills/code-refactoring/SKILL.md +1 -9
- package/.agent-src/skills/code-review/SKILL.md +1 -9
- package/.agent-src/skills/command-routing/SKILL.md +1 -9
- package/.agent-src/skills/command-writing/SKILL.md +1 -9
- package/.agent-src/skills/comp-banding/SKILL.md +1 -5
- package/.agent-src/skills/competitive-moat-analysis/SKILL.md +1 -7
- package/.agent-src/skills/competitive-positioning/SKILL.md +1 -5
- package/.agent-src/skills/composer-packages/SKILL.md +1 -4
- package/.agent-src/skills/condense-memory/SKILL.md +1 -9
- package/.agent-src/skills/content-funnel-design/SKILL.md +1 -5
- package/.agent-src/skills/context-authoring/SKILL.md +1 -9
- package/.agent-src/skills/context-document/SKILL.md +1 -9
- package/.agent-src/skills/contracts-cognition/SKILL.md +1 -5
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -9
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +1 -9
- package/.agent-src/skills/copilot-config/SKILL.md +1 -9
- package/.agent-src/skills/customer-research/SKILL.md +1 -4
- package/.agent-src/skills/dashboard-design/SKILL.md +1 -9
- package/.agent-src/skills/data-flow-mapper/SKILL.md +1 -9
- package/.agent-src/skills/data-handling-judgment/SKILL.md +1 -9
- package/.agent-src/skills/database/SKILL.md +1 -9
- package/.agent-src/skills/dcf-modeling/SKILL.md +1 -6
- package/.agent-src/skills/deal-qualification-meddic/SKILL.md +1 -5
- package/.agent-src/skills/decision-record/SKILL.md +1 -9
- package/.agent-src/skills/deep-reading-analyst/SKILL.md +2 -9
- package/.agent-src/skills/defense-in-depth/SKILL.md +1 -9
- package/.agent-src/skills/dependency-upgrade/SKILL.md +1 -9
- package/.agent-src/skills/description-assist/SKILL.md +1 -9
- package/.agent-src/skills/design-review/SKILL.md +1 -9
- package/.agent-src/skills/devcontainer/SKILL.md +1 -9
- package/.agent-src/skills/developer-like-execution/SKILL.md +1 -9
- package/.agent-src/skills/discovery-interview/SKILL.md +1 -4
- package/.agent-src/skills/doc-coauthoring/SKILL.md +1 -9
- package/.agent-src/skills/docker/SKILL.md +1 -9
- package/.agent-src/skills/editorial-calendar/SKILL.md +1 -5
- package/.agent-src/skills/eloquent/SKILL.md +1 -4
- package/.agent-src/skills/error-handling-patterns/SKILL.md +1 -9
- package/.agent-src/skills/estimate-ticket/SKILL.md +1 -5
- package/.agent-src/skills/existing-ui-audit/SKILL.md +1 -9
- package/.agent-src/skills/expansion-playbook/SKILL.md +1 -5
- package/.agent-src/skills/fe-design/SKILL.md +1 -9
- package/.agent-src/skills/feature-planning/SKILL.md +1 -5
- package/.agent-src/skills/file-editor/SKILL.md +1 -9
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -9
- package/.agent-src/skills/flux/SKILL.md +1 -4
- package/.agent-src/skills/forecast-accuracy/SKILL.md +1 -5
- package/.agent-src/skills/forecasting/SKILL.md +1 -5
- package/.agent-src/skills/form-handler/SKILL.md +1 -9
- package/.agent-src/skills/fundraising-narrative/SKILL.md +1 -7
- package/.agent-src/skills/funnel-analysis/SKILL.md +1 -5
- package/.agent-src/skills/git-workflow/SKILL.md +1 -9
- package/.agent-src/skills/github-ci/SKILL.md +1 -9
- package/.agent-src/skills/grafana/SKILL.md +1 -9
- package/.agent-src/skills/gtm-launch/SKILL.md +1 -5
- package/.agent-src/skills/guideline-writing/SKILL.md +1 -9
- package/.agent-src/skills/hiring-loop-design/SKILL.md +1 -5
- package/.agent-src/skills/incident-commander/SKILL.md +1 -9
- package/.agent-src/skills/jira-integration/SKILL.md +1 -9
- package/.agent-src/skills/jobs-events/SKILL.md +1 -4
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +1 -9
- package/.agent-src/skills/judge-code-quality/SKILL.md +1 -9
- package/.agent-src/skills/judge-security-auditor/SKILL.md +1 -9
- package/.agent-src/skills/judge-test-coverage/SKILL.md +1 -9
- package/.agent-src/skills/laravel/SKILL.md +1 -4
- package/.agent-src/skills/laravel-api-endpoint/SKILL.md +1 -4
- package/.agent-src/skills/laravel-dto/SKILL.md +1 -4
- package/.agent-src/skills/laravel-horizon/SKILL.md +1 -4
- package/.agent-src/skills/laravel-mail/SKILL.md +1 -4
- package/.agent-src/skills/laravel-middleware/SKILL.md +1 -4
- package/.agent-src/skills/laravel-migration/SKILL.md +1 -4
- package/.agent-src/skills/laravel-notifications/SKILL.md +1 -4
- package/.agent-src/skills/laravel-pennant/SKILL.md +1 -4
- package/.agent-src/skills/laravel-pulse/SKILL.md +1 -4
- package/.agent-src/skills/laravel-reverb/SKILL.md +1 -4
- package/.agent-src/skills/laravel-scheduling/SKILL.md +1 -4
- package/.agent-src/skills/laravel-validation/SKILL.md +1 -4
- package/.agent-src/skills/laravel-websocket/SKILL.md +1 -4
- package/.agent-src/skills/launch-readiness/SKILL.md +1 -7
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -8
- package/.agent-src/skills/lint-skills/SKILL.md +1 -9
- package/.agent-src/skills/livewire/SKILL.md +1 -4
- package/.agent-src/skills/livewire-architect/SKILL.md +1 -4
- package/.agent-src/skills/logging-monitoring/SKILL.md +1 -9
- package/.agent-src/skills/market-entry-analysis/SKILL.md +1 -7
- package/.agent-src/skills/markitdown/SKILL.md +1 -9
- package/.agent-src/skills/mcp/SKILL.md +1 -9
- package/.agent-src/skills/mcp-builder/SKILL.md +1 -9
- package/.agent-src/skills/md-language-check/SKILL.md +1 -9
- package/.agent-src/skills/memory-consolidation/SKILL.md +1 -9
- package/.agent-src/skills/merge-conflicts/SKILL.md +1 -9
- package/.agent-src/skills/messaging-architecture/SKILL.md +1 -5
- package/.agent-src/skills/migration-architect/SKILL.md +1 -9
- package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +1 -9
- package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +1 -9
- package/.agent-src/skills/module-management/SKILL.md +1 -9
- package/.agent-src/skills/motion-choreographer/SKILL.md +1 -3
- package/.agent-src/skills/multi-tenancy/SKILL.md +1 -9
- package/.agent-src/skills/nextjs-patterns/SKILL.md +1 -4
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +1 -7
- package/.agent-src/skills/onboarding-design/SKILL.md +1 -5
- package/.agent-src/skills/onboarding-program/SKILL.md +1 -5
- package/.agent-src/skills/one-on-one-cadence/SKILL.md +1 -5
- package/.agent-src/skills/openapi/SKILL.md +1 -9
- package/.agent-src/skills/org-design/SKILL.md +1 -5
- package/.agent-src/skills/override-management/SKILL.md +1 -9
- package/.agent-src/skills/perf-feedback-craft/SKILL.md +1 -5
- package/.agent-src/skills/performance/SKILL.md +1 -9
- package/.agent-src/skills/performance-analysis/SKILL.md +1 -9
- package/.agent-src/skills/persona-writing/SKILL.md +1 -9
- package/.agent-src/skills/pest-testing/SKILL.md +1 -4
- package/.agent-src/skills/php-coder/SKILL.md +1 -4
- package/.agent-src/skills/php-debugging/SKILL.md +1 -4
- package/.agent-src/skills/php-service/SKILL.md +1 -4
- package/.agent-src/skills/pipeline-strategy/SKILL.md +1 -5
- package/.agent-src/skills/pixar-storyteller/SKILL.md +1 -3
- package/.agent-src/skills/playwright-architect/SKILL.md +1 -9
- package/.agent-src/skills/playwright-testing/SKILL.md +1 -9
- package/.agent-src/skills/po-discovery/SKILL.md +1 -5
- package/.agent-src/skills/positioning-strategy/SKILL.md +1 -5
- package/.agent-src/skills/privacy-review/SKILL.md +1 -9
- package/.agent-src/skills/project-analysis-core/SKILL.md +2 -9
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +2 -9
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +1 -4
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +1 -4
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +1 -3
- package/.agent-src/skills/project-analysis-react/SKILL.md +1 -4
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +1 -4
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +1 -4
- package/.agent-src/skills/project-analyzer/SKILL.md +2 -9
- package/.agent-src/skills/project-docs/SKILL.md +1 -9
- package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -9
- package/.agent-src/skills/prompt-optimizer/SKILL.md +1 -9
- package/.agent-src/skills/quality-tools/SKILL.md +1 -9
- package/.agent-src/skills/react-native-setup/SKILL.md +1 -4
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +1 -4
- package/.agent-src/skills/readme-reviewer/SKILL.md +1 -9
- package/.agent-src/skills/readme-writing/SKILL.md +1 -9
- package/.agent-src/skills/readme-writing-package/SKILL.md +1 -9
- package/.agent-src/skills/receiving-code-review/SKILL.md +1 -9
- package/.agent-src/skills/refine-prompt/SKILL.md +1 -9
- package/.agent-src/skills/refine-ticket/SKILL.md +1 -5
- package/.agent-src/skills/release-comms/SKILL.md +1 -5
- package/.agent-src/skills/repomix-packer/SKILL.md +2 -9
- package/.agent-src/skills/requesting-code-review/SKILL.md +1 -9
- package/.agent-src/skills/retention-loops/SKILL.md +1 -5
- package/.agent-src/skills/review-routing/SKILL.md +1 -9
- package/.agent-src/skills/rice-prioritization/SKILL.md +1 -5
- package/.agent-src/skills/risk-officer/SKILL.md +1 -9
- package/.agent-src/skills/roadmap-management/SKILL.md +1 -9
- package/.agent-src/skills/roadmap-writing/SKILL.md +1 -9
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -9
- package/.agent-src/skills/rule-refactor/SKILL.md +1 -9
- package/.agent-src/skills/rule-writing/SKILL.md +1 -9
- package/.agent-src/skills/runway-cognition/SKILL.md +1 -5
- package/.agent-src/skills/scenario-modeling/SKILL.md +1 -6
- package/.agent-src/skills/scene-expander/SKILL.md +1 -3
- package/.agent-src/skills/script-writing/SKILL.md +1 -9
- package/.agent-src/skills/secrets-management/SKILL.md +1 -9
- package/.agent-src/skills/security/SKILL.md +1 -9
- package/.agent-src/skills/security-audit/SKILL.md +1 -9
- package/.agent-src/skills/sentry-integration/SKILL.md +1 -9
- package/.agent-src/skills/sequential-thinking/SKILL.md +1 -9
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -9
- package/.agent-src/skills/skill-management/SKILL.md +1 -8
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -9
- package/.agent-src/skills/skill-writing/SKILL.md +1 -8
- package/.agent-src/skills/sql-writing/SKILL.md +1 -9
- package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +1 -5
- package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -9
- package/.agent-src/skills/symfony-workflow/SKILL.md +1 -4
- package/.agent-src/skills/systematic-debugging/SKILL.md +1 -9
- package/.agent-src/skills/tailwind-engineer/SKILL.md +1 -9
- package/.agent-src/skills/tech-debt-tracker/SKILL.md +1 -9
- package/.agent-src/skills/technical-specification/SKILL.md +1 -5
- package/.agent-src/skills/terraform/SKILL.md +1 -9
- package/.agent-src/skills/terragrunt/SKILL.md +1 -9
- package/.agent-src/skills/test-driven-development/SKILL.md +1 -9
- package/.agent-src/skills/test-performance/SKILL.md +1 -9
- package/.agent-src/skills/testing-anti-patterns/SKILL.md +1 -9
- package/.agent-src/skills/threat-modeling/SKILL.md +1 -9
- package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -5
- package/.agent-src/skills/token-optimizer/SKILL.md +1 -9
- package/.agent-src/skills/traefik/SKILL.md +1 -9
- package/.agent-src/skills/ui-component-architect/SKILL.md +1 -9
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -5
- package/.agent-src/skills/universal-project-analysis/SKILL.md +2 -9
- package/.agent-src/skills/upstream-contribute/SKILL.md +1 -9
- package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -9
- package/.agent-src/skills/validate-feature-fit/SKILL.md +1 -9
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +1 -9
- package/.agent-src/skills/video-director/SKILL.md +1 -3
- package/.agent-src/skills/vision-articulation/SKILL.md +1 -7
- package/.agent-src/skills/voc-extract/SKILL.md +1 -4
- package/.agent-src/skills/voice-and-tone-design/SKILL.md +1 -5
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +27 -206
- package/README.md +5 -0
- package/config/agent-settings.template.yml +13 -0
- package/dist/cli/registry.js +2 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +358 -358
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/server/schemas/settings.js +4 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/{index-Tk7lkVH8.js → index-DVsyUMZe.js} +2 -2
- package/dist/ui/assets/index-DVsyUMZe.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/archive/CHANGELOG-pre-5.4.0.md +260 -0
- package/docs/contracts/consumer-bridge.md +2 -0
- package/docs/contracts/multi-tool-projection-fidelity.md +19 -0
- package/docs/contracts/release-pr-gating.md +6 -1
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +24 -0
- package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +63 -0
- package/docs/decisions/ADR-035-model-capability-tiers.md +104 -0
- package/docs/decisions/INDEX.md +2 -0
- package/docs/getting-started.md +23 -0
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +25 -0
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_cli/cmd_doctor.py +44 -1
- package/scripts/_cli/cmd_refresh.py +173 -0
- package/scripts/_cli/cmd_upgrade.py +142 -0
- package/scripts/_dispatch.bash +20 -0
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/backfill_model_tier.py +182 -0
- package/scripts/build_discovery_manifest.py +20 -3
- package/scripts/check_artefact_checksums.py +11 -4
- package/scripts/check_release_pr_shape.py +7 -0
- package/scripts/condense.py +148 -18
- package/scripts/hooks/dispatch_hook.py +39 -0
- package/scripts/install +14 -0
- package/scripts/lint_framework_leakage_allowlist.json +108 -78
- package/scripts/lint_frontmatter_boilerplate.py +77 -0
- package/scripts/lint_model_tier_coverage.py +73 -0
- package/scripts/migrate_frontmatter_defaults.py +245 -0
- package/scripts/roadmap_progress_hook.py +28 -2
- package/scripts/schemas/command.schema.json +17 -5
- package/scripts/schemas/persona.schema.json +4 -2
- package/scripts/schemas/rule.schema.json +8 -6
- package/scripts/schemas/skill.schema.json +18 -6
- package/scripts/skill_linter.py +21 -9
- package/scripts/smoke/skills.sh +4 -1
- package/scripts/validate_frontmatter.py +74 -0
- package/dist/ui/assets/index-Tk7lkVH8.js.map +0 -1
|
@@ -32,15 +32,22 @@ DEFAULT_MANIFEST = ROOT / "dist" / "discovery" / "discovery-manifest.json"
|
|
|
32
32
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
33
33
|
# Import the same hashing primitive the builder uses so normalisation
|
|
34
34
|
# stays in lockstep with the generator. (ADR-015 §Phase 6.)
|
|
35
|
-
from build_discovery_manifest import _artefact_checksum # noqa: E402
|
|
36
|
-
from validate_frontmatter import parse_frontmatter # noqa: E402
|
|
35
|
+
from build_discovery_manifest import _CATEGORY_SCHEMA, _artefact_checksum # noqa: E402
|
|
36
|
+
from validate_frontmatter import apply_schema_defaults, load_schema, parse_frontmatter # noqa: E402
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
def _frontmatter(path: Path) -> dict | None:
|
|
39
|
+
def _frontmatter(path: Path, category: str | None = None) -> dict | None:
|
|
40
40
|
if not path.exists():
|
|
41
41
|
return None
|
|
42
42
|
text = path.read_text(encoding="utf-8", errors="replace")
|
|
43
43
|
fm, _ = parse_frontmatter(text)
|
|
44
|
+
# Inject the same schema defaults the builder injects, so the recomputed
|
|
45
|
+
# checksum matches the committed manifest byte-for-byte even when the
|
|
46
|
+
# artefact omits a defaulted field (preflight Decision B).
|
|
47
|
+
if isinstance(fm, dict):
|
|
48
|
+
schema_name = _CATEGORY_SCHEMA.get(category or "")
|
|
49
|
+
if schema_name is not None:
|
|
50
|
+
apply_schema_defaults(fm, load_schema(schema_name))
|
|
44
51
|
return fm
|
|
45
52
|
|
|
46
53
|
|
|
@@ -64,7 +71,7 @@ def _check(manifest_path: Path) -> tuple[int, list[str]]:
|
|
|
64
71
|
if not src.exists():
|
|
65
72
|
errors.append(f"{rel}: source file missing")
|
|
66
73
|
continue
|
|
67
|
-
actual = _artefact_checksum(src, _frontmatter(src))
|
|
74
|
+
actual = _artefact_checksum(src, _frontmatter(src, art.get("category")))
|
|
68
75
|
if actual != recorded:
|
|
69
76
|
errors.append(
|
|
70
77
|
f"{rel}: checksum drift "
|
|
@@ -9,6 +9,7 @@ and asserts every changed file matches the version-bump allowlist:
|
|
|
9
9
|
* `.claude-plugin/marketplace.json`
|
|
10
10
|
* `packages/*/pack.yaml`
|
|
11
11
|
* `packages/*/README.md`
|
|
12
|
+
* `docs/archive/CHANGELOG-pre-*.md`
|
|
12
13
|
|
|
13
14
|
Exit codes:
|
|
14
15
|
|
|
@@ -40,6 +41,12 @@ ALLOWLIST_GLOBS = (
|
|
|
40
41
|
".claude-plugin/marketplace.json",
|
|
41
42
|
"packages/*/pack.yaml",
|
|
42
43
|
"packages/*/README.md",
|
|
44
|
+
# `scripts/release.py` auto-splits the CHANGELOG era before bumping
|
|
45
|
+
# (perform_split / plan_split in `_lib/changelog_eras.py`) whenever the
|
|
46
|
+
# current era body crosses CURRENT_ERA_BODY_CAP. The split emits a new
|
|
47
|
+
# `docs/archive/CHANGELOG-pre-X.Y.Z.md` — part of the release surface,
|
|
48
|
+
# so the shape gate must allow it. Test-enforced by test_changelog_eras.
|
|
49
|
+
"docs/archive/CHANGELOG-pre-*.md",
|
|
43
50
|
)
|
|
44
51
|
|
|
45
52
|
|
package/scripts/condense.py
CHANGED
|
@@ -574,7 +574,12 @@ def _parse_trust_and_owner(fm_lines):
|
|
|
574
574
|
prefix (`finance-basic` → `finance`), then the first workspace,
|
|
575
575
|
then `unknown`.
|
|
576
576
|
"""
|
|
577
|
-
|
|
577
|
+
# Default to the schema default `core` so the HUMAN REVIEW banner still
|
|
578
|
+
# renders if a future artefact sets `human_review_required: true` while
|
|
579
|
+
# omitting the (defaulted) `trust.level` line (abstraction-reduction
|
|
580
|
+
# preflight Decision D). The banner only fires when `hrr` is true, so this
|
|
581
|
+
# never affects artefacts that omit the whole trust block.
|
|
582
|
+
level = "core"
|
|
578
583
|
hrr = False
|
|
579
584
|
packs: list[str] = []
|
|
580
585
|
workspaces: list[str] = []
|
|
@@ -871,8 +876,72 @@ def _iter_commands():
|
|
|
871
876
|
yield source_file, _command_slug(source_file)
|
|
872
877
|
|
|
873
878
|
|
|
879
|
+
# --- Per-skill model auto-switch (ADR-035 / road-to-model-capability-tiers) ---
|
|
880
|
+
|
|
881
|
+
# The SINGLE generator-owned tier→Claude-model mapping (ADR-035 § 3). Claude
|
|
882
|
+
# Code is the only surface that consumes a native `model:`, so this is the only
|
|
883
|
+
# place a capability tier resolves to a concrete model. `inherit`/absent emit
|
|
884
|
+
# nothing and stay pure symlinks. Non-Claude agents never get a per-vendor
|
|
885
|
+
# table — the rule surfaces the tier name as a suggestion.
|
|
886
|
+
_TIER_TO_CLAUDE_MODEL = {"high": "opus", "medium": "sonnet", "lite": "haiku"}
|
|
887
|
+
_MODEL_TIER_RE = re.compile(r'^model_tier:\s*"?([a-z]+)"?\s*$', re.MULTILINE)
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
def _read_model_auto_switch() -> str:
|
|
891
|
+
"""Read `model.auto_switch` from .agent-settings.yml.
|
|
892
|
+
|
|
893
|
+
Returns `auto` | `suggest` | `off`; default `suggest`. Only `auto` makes
|
|
894
|
+
the generator emit a native Claude `model:` key (ADR-034 § 4) — `suggest`
|
|
895
|
+
and `off` keep skills/commands as pure symlinks so the package never
|
|
896
|
+
silently overrides a user's explicit `/model` choice.
|
|
897
|
+
"""
|
|
898
|
+
try:
|
|
899
|
+
from scripts._lib.agent_settings import load_agent_settings
|
|
900
|
+
except ImportError: # pragma: no cover — script-style invocation
|
|
901
|
+
import sys as _sys
|
|
902
|
+
from pathlib import Path as _Path
|
|
903
|
+
_sys.path.insert(0, str(_Path(__file__).resolve().parent))
|
|
904
|
+
from _lib.agent_settings import load_agent_settings # type: ignore[import-not-found]
|
|
905
|
+
data = load_agent_settings(project_path=SETTINGS_FILE)
|
|
906
|
+
model = data.get("model")
|
|
907
|
+
value = model.get("auto_switch") if isinstance(model, dict) else None
|
|
908
|
+
if isinstance(value, str) and value.strip().lower() in ("auto", "suggest", "off"):
|
|
909
|
+
return value.strip().lower()
|
|
910
|
+
return "suggest"
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
def _model_tier(skill_md: Path) -> str | None:
|
|
914
|
+
"""Return the `model_tier` frontmatter value, or None if absent."""
|
|
915
|
+
if not skill_md.exists():
|
|
916
|
+
return None
|
|
917
|
+
text = skill_md.read_text(encoding="utf-8", errors="replace")
|
|
918
|
+
if not text.startswith("---\n"):
|
|
919
|
+
return None
|
|
920
|
+
end = text.find("\n---\n", 4)
|
|
921
|
+
if end == -1:
|
|
922
|
+
return None
|
|
923
|
+
m = _MODEL_TIER_RE.search(text[4:end])
|
|
924
|
+
return m.group(1) if m else None
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
def _render_native_model_md(src_md: Path, tier: str) -> str:
|
|
928
|
+
"""Rewrite the source `model_tier: <tier>` line to a native Claude
|
|
929
|
+
`model: <mapped>` key via the generator-owned mapping (ADR-035 § 3). The
|
|
930
|
+
rest of the SKILL.md is byte-identical."""
|
|
931
|
+
text = src_md.read_text(encoding="utf-8")
|
|
932
|
+
model = _TIER_TO_CLAUDE_MODEL[tier]
|
|
933
|
+
return _MODEL_TIER_RE.sub(f"model: {model}", text, count=1)
|
|
934
|
+
|
|
935
|
+
|
|
874
936
|
def generate_claude_skills() -> int:
|
|
875
|
-
"""Create .claude/skills/
|
|
937
|
+
"""Create .claude/skills/ entries for ALL skills in .agent-src/skills/.
|
|
938
|
+
|
|
939
|
+
Default: a directory symlink → .agent-src/skills/<name> (verbatim).
|
|
940
|
+
When `model.auto_switch: auto` AND a skill declares
|
|
941
|
+
`model_tier: lite|medium|high`, the entry becomes a real directory whose
|
|
942
|
+
sub-files are symlinked but whose SKILL.md is a rendered copy carrying a
|
|
943
|
+
native Claude `model:` key (ADR-034 Option (b) — only model-bearing skills
|
|
944
|
+
break the symlink). Idempotent: each entry is rebuilt from scratch.
|
|
876
945
|
"""
|
|
877
946
|
if not SKILLS_SOURCE.exists():
|
|
878
947
|
print(" ⚠️ .agent-src/skills/ not found — skipping skills", file=sys.stderr)
|
|
@@ -880,26 +949,58 @@ def generate_claude_skills() -> int:
|
|
|
880
949
|
|
|
881
950
|
# All skill directories in .agent-src/skills/
|
|
882
951
|
skills = sorted([d.name for d in SKILLS_SOURCE.iterdir() if d.is_dir()])
|
|
952
|
+
skill_set = set(skills)
|
|
883
953
|
# All command slugs (to protect from stale cleanup)
|
|
884
954
|
command_slugs = {slug for _, slug in _iter_commands()}
|
|
885
955
|
|
|
886
956
|
CLAUDE_SKILLS_DIR.mkdir(parents=True, exist_ok=True)
|
|
957
|
+
auto = _read_model_auto_switch() == "auto"
|
|
887
958
|
|
|
888
|
-
# Clean stale
|
|
959
|
+
# Clean stale entries (symlinks AND rendered skill dirs) — but never touch
|
|
960
|
+
# command dirs (real dir whose SKILL.md is a symlink) or the README.
|
|
889
961
|
for item in CLAUDE_SKILLS_DIR.iterdir():
|
|
890
|
-
if item.
|
|
962
|
+
if item.name in skill_set or item.name in command_slugs or item.name == "README.md":
|
|
963
|
+
continue
|
|
964
|
+
if item.is_symlink():
|
|
891
965
|
item.unlink()
|
|
966
|
+
elif item.is_dir():
|
|
967
|
+
skill_md = item / "SKILL.md"
|
|
968
|
+
# A rendered skill dir has a *real* SKILL.md copy; a command dir has
|
|
969
|
+
# a SKILL.md *symlink* (left for generate_claude_commands to manage).
|
|
970
|
+
if skill_md.is_file() and not skill_md.is_symlink():
|
|
971
|
+
shutil.rmtree(item)
|
|
892
972
|
|
|
893
973
|
count = 0
|
|
974
|
+
rendered = 0
|
|
894
975
|
for skill in skills:
|
|
895
976
|
link = CLAUDE_SKILLS_DIR / skill
|
|
896
|
-
|
|
977
|
+
src_dir = SKILLS_SOURCE / skill
|
|
978
|
+
value = _model_tier(src_dir / "SKILL.md") if auto else None
|
|
979
|
+
# Rebuild from scratch for idempotency (symlink ↔ rendered-dir flips).
|
|
980
|
+
if link.is_symlink():
|
|
897
981
|
link.unlink()
|
|
898
|
-
|
|
899
|
-
|
|
982
|
+
elif link.is_dir():
|
|
983
|
+
shutil.rmtree(link)
|
|
984
|
+
elif link.exists():
|
|
985
|
+
link.unlink()
|
|
986
|
+
if value in _TIER_TO_CLAUDE_MODEL:
|
|
987
|
+
link.mkdir(parents=True)
|
|
988
|
+
for entry in sorted(src_dir.iterdir()):
|
|
989
|
+
if entry.name == "SKILL.md":
|
|
990
|
+
(link / "SKILL.md").write_text(
|
|
991
|
+
_render_native_model_md(entry, value), encoding="utf-8"
|
|
992
|
+
)
|
|
993
|
+
else:
|
|
994
|
+
(link / entry.name).symlink_to(
|
|
995
|
+
Path("../../../.agent-src/skills") / skill / entry.name
|
|
996
|
+
)
|
|
997
|
+
rendered += 1
|
|
998
|
+
else:
|
|
999
|
+
link.symlink_to(Path("../../.agent-src/skills") / skill)
|
|
900
1000
|
count += 1
|
|
901
1001
|
|
|
902
|
-
|
|
1002
|
+
suffix = f" ({rendered} rendered with native model:)" if rendered else ""
|
|
1003
|
+
info(f" ✅ Created {count} skill entries in .claude/skills/{suffix}")
|
|
903
1004
|
return count
|
|
904
1005
|
|
|
905
1006
|
|
|
@@ -940,6 +1041,8 @@ def generate_claude_commands() -> int:
|
|
|
940
1041
|
current_slugs: set[str] = set()
|
|
941
1042
|
count = 0
|
|
942
1043
|
skipped = 0
|
|
1044
|
+
rendered = 0
|
|
1045
|
+
auto = _read_model_auto_switch() == "auto"
|
|
943
1046
|
for source_file, slug in _iter_commands():
|
|
944
1047
|
# Skip if a real skill with the same name exists — skill takes priority
|
|
945
1048
|
if slug in skill_names:
|
|
@@ -948,7 +1051,7 @@ def generate_claude_commands() -> int:
|
|
|
948
1051
|
|
|
949
1052
|
current_slugs.add(slug)
|
|
950
1053
|
|
|
951
|
-
# Create skill directory (real dir,
|
|
1054
|
+
# Create skill directory (real dir, SKILL.md symlinked or rendered)
|
|
952
1055
|
skill_dir = CLAUDE_SKILLS_DIR / slug
|
|
953
1056
|
skill_dir.mkdir(parents=True, exist_ok=True)
|
|
954
1057
|
|
|
@@ -956,10 +1059,18 @@ def generate_claude_commands() -> int:
|
|
|
956
1059
|
if skill_file.exists() or skill_file.is_symlink():
|
|
957
1060
|
skill_file.unlink()
|
|
958
1061
|
|
|
959
|
-
# Symlink: .claude/skills/{slug}/SKILL.md → ../../../.agent-src/commands/<rel-path>
|
|
960
1062
|
rel_path = source_file.relative_to(COMMANDS_SOURCE)
|
|
961
|
-
|
|
962
|
-
|
|
1063
|
+
value = _model_tier(source_file) if auto else None
|
|
1064
|
+
if value in _TIER_TO_CLAUDE_MODEL:
|
|
1065
|
+
# Render a copy carrying the native Claude model: key (ADR-034).
|
|
1066
|
+
skill_file.write_text(
|
|
1067
|
+
_render_native_model_md(source_file, value), encoding="utf-8"
|
|
1068
|
+
)
|
|
1069
|
+
rendered += 1
|
|
1070
|
+
else:
|
|
1071
|
+
# Symlink: .claude/skills/{slug}/SKILL.md → ../../../.agent-src/commands/<rel-path>
|
|
1072
|
+
rel_target = Path("../../../.agent-src/commands") / rel_path
|
|
1073
|
+
skill_file.symlink_to(rel_target)
|
|
963
1074
|
count += 1
|
|
964
1075
|
|
|
965
1076
|
# Clean stale command skill directories — real dirs from removed commands.
|
|
@@ -971,14 +1082,20 @@ def generate_claude_commands() -> int:
|
|
|
971
1082
|
if item.name in skill_names or item.name in current_slugs:
|
|
972
1083
|
continue
|
|
973
1084
|
skill_md = item / "SKILL.md"
|
|
974
|
-
|
|
1085
|
+
# Stale command dir = exactly one SKILL.md, either symlinked (default)
|
|
1086
|
+
# or a rendered copy (native-model command, ADR-034). Skill-render dirs
|
|
1087
|
+
# are protected above (item.name in skill_names) and via the skills
|
|
1088
|
+
# generator, so this only reaps removed commands.
|
|
1089
|
+
if skill_md.is_symlink() or skill_md.is_file():
|
|
975
1090
|
entries = list(item.iterdir())
|
|
976
1091
|
if len(entries) == 1 and entries[0].name == "SKILL.md":
|
|
977
1092
|
skill_md.unlink()
|
|
978
1093
|
item.rmdir()
|
|
979
1094
|
removed_dirs += 1
|
|
980
1095
|
|
|
981
|
-
msg = f" ✅ Created {count} command
|
|
1096
|
+
msg = f" ✅ Created {count} command entries in .claude/skills/"
|
|
1097
|
+
if rendered:
|
|
1098
|
+
msg += f" ({rendered} rendered with native model:)"
|
|
982
1099
|
if skipped:
|
|
983
1100
|
msg += f" ({skipped} skipped — same-name skill exists)"
|
|
984
1101
|
if removed_dirs:
|
|
@@ -1075,8 +1192,12 @@ def generate_plugin_hooks() -> int:
|
|
|
1075
1192
|
``settings.local.json``. Claude Code merges plugin-scope and
|
|
1076
1193
|
settings-scope hooks and dedups by command string.
|
|
1077
1194
|
|
|
1078
|
-
The command
|
|
1079
|
-
|
|
1195
|
+
The command resolves the binary project-local-first
|
|
1196
|
+
(``$CLAUDE_PROJECT_DIR/agent-config`` when executable — maintainer dev-loop)
|
|
1197
|
+
and falls back to ``agent-config`` on PATH (global-only consumer per
|
|
1198
|
+
ADR-020, where the repo carries no wrapper). It always passes
|
|
1199
|
+
``--project-dir "$CLAUDE_PROJECT_DIR"`` so a globally resolved binary still
|
|
1200
|
+
scans the project the event fired in. The universal dispatcher then reads
|
|
1080
1201
|
``scripts/hook_manifest.yaml`` at runtime to fan out to the active
|
|
1081
1202
|
concerns (each a no-op when its feature is disabled).
|
|
1082
1203
|
"""
|
|
@@ -1087,6 +1208,7 @@ def generate_plugin_hooks() -> int:
|
|
|
1087
1208
|
return 0
|
|
1088
1209
|
|
|
1089
1210
|
manifest = yaml.safe_load(manifest_path.read_text(encoding="utf-8")) or {}
|
|
1211
|
+
hook_spec = manifest.get("schema_version", 1)
|
|
1090
1212
|
claude_events = manifest.get("platforms", {}).get("claude", {}) or {}
|
|
1091
1213
|
aliases = manifest.get("native_event_aliases", {}).get("claude", {}) or {}
|
|
1092
1214
|
# Reverse the native→agent-config map so we can emit native event names.
|
|
@@ -1099,9 +1221,17 @@ def generate_plugin_hooks() -> int:
|
|
|
1099
1221
|
native = ac_to_native.get(ac_event)
|
|
1100
1222
|
if native is None:
|
|
1101
1223
|
continue
|
|
1224
|
+
# Resolve the binary project-local-first, PATH-fallback: a maintainer
|
|
1225
|
+
# dev-loop (or any repo carrying a project-local wrapper) uses its own
|
|
1226
|
+
# ./agent-config; a global-only consumer (ADR-020 — nothing in the
|
|
1227
|
+
# repo) falls back to the globally-installed `agent-config` on PATH.
|
|
1228
|
+
# Either way pass --project-dir "$CLAUDE_PROJECT_DIR" so a globally
|
|
1229
|
+
# resolved binary still scans the project the event fired in.
|
|
1102
1230
|
command = (
|
|
1103
|
-
'"$CLAUDE_PROJECT_DIR
|
|
1104
|
-
f"--platform claude --event {ac_event}
|
|
1231
|
+
'BIN="$CLAUDE_PROJECT_DIR/agent-config"; [ -x "$BIN" ] || BIN=agent-config; '
|
|
1232
|
+
f'"$BIN" dispatch:hook --platform claude --event {ac_event} '
|
|
1233
|
+
f'--native-event {native} --project-dir "$CLAUDE_PROJECT_DIR" '
|
|
1234
|
+
f'--min-version {hook_spec}'
|
|
1105
1235
|
)
|
|
1106
1236
|
hooks[native] = [{"hooks": [{"type": "command", "command": command}]}]
|
|
1107
1237
|
|
|
@@ -349,8 +349,36 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
349
349
|
parser.add_argument("--manifest", default=str(MANIFEST_PATH))
|
|
350
350
|
parser.add_argument("--dry-run", action="store_true",
|
|
351
351
|
help="Resolve concerns and print plan; do not invoke them.")
|
|
352
|
+
parser.add_argument("--project-dir", default="",
|
|
353
|
+
help="Project root the event fired in (the Claude "
|
|
354
|
+
"plugin passes $CLAUDE_PROJECT_DIR). A globally "
|
|
355
|
+
"resolved binary (ADR-020 global-only) has no "
|
|
356
|
+
"implicit project context, so concerns are "
|
|
357
|
+
"resolved relative to this directory.")
|
|
358
|
+
parser.add_argument("--min-version", type=int, default=0,
|
|
359
|
+
help="Minimum hook-spec (manifest schema_version) the "
|
|
360
|
+
"caller — typically the Claude marketplace plugin "
|
|
361
|
+
"— was generated against. Plugin and binary update "
|
|
362
|
+
"on independent cadences; when the binary's "
|
|
363
|
+
"manifest is older than the plugin expects, warn "
|
|
364
|
+
"(never block).")
|
|
352
365
|
args = parser.parse_args(argv)
|
|
353
366
|
|
|
367
|
+
# Honour --project-dir: chdir so workspace_root (envelope) and every
|
|
368
|
+
# concern's cwd resolve consumer-local paths (agents/roadmaps/,
|
|
369
|
+
# agents/runtime/state/) against the project the event fired in, not the
|
|
370
|
+
# cwd a globally-installed binary happened to inherit. Fail loud (never
|
|
371
|
+
# block) when the path is bad — a wrong project root is a silent-no-op
|
|
372
|
+
# trap otherwise.
|
|
373
|
+
if args.project_dir:
|
|
374
|
+
project_dir = Path(args.project_dir).expanduser()
|
|
375
|
+
if project_dir.is_dir():
|
|
376
|
+
os.chdir(project_dir)
|
|
377
|
+
else:
|
|
378
|
+
sys.stderr.write(
|
|
379
|
+
f"dispatch_hook: --project-dir is not a directory: "
|
|
380
|
+
f"{project_dir} — resolving against cwd {Path.cwd()}\n")
|
|
381
|
+
|
|
354
382
|
if args.event not in EVENT_VOCABULARY:
|
|
355
383
|
sys.stderr.write(f"dispatch_hook: unknown event '{args.event}'; allowed: "
|
|
356
384
|
f"{sorted(EVENT_VOCABULARY)}\n")
|
|
@@ -362,6 +390,17 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
362
390
|
return EXIT_ALLOW
|
|
363
391
|
manifest = _load_yaml(manifest_path)
|
|
364
392
|
|
|
393
|
+
# Plugin↔binary drift guard (never blocks). The Claude marketplace plugin
|
|
394
|
+
# embeds the hook-spec it was generated against; if this globally-installed
|
|
395
|
+
# binary carries an older manifest, surface a one-line upgrade hint.
|
|
396
|
+
if args.min_version:
|
|
397
|
+
local_spec = manifest.get("schema_version") or 0
|
|
398
|
+
if isinstance(local_spec, int) and local_spec < args.min_version:
|
|
399
|
+
sys.stderr.write(
|
|
400
|
+
f"dispatch_hook: plugin expects hook-spec >= {args.min_version} "
|
|
401
|
+
f"but this agent-config provides {local_spec}; "
|
|
402
|
+
f"run `agent-config upgrade`.\n")
|
|
403
|
+
|
|
365
404
|
payload_text = "" if sys.stdin.isatty() else sys.stdin.read()
|
|
366
405
|
_maybe_capture_payload(args, payload_text)
|
|
367
406
|
concerns = _resolve_concerns(manifest, args.platform, args.event)
|
package/scripts/install
CHANGED
|
@@ -394,4 +394,18 @@ if ! $SKIP_BRIDGES; then
|
|
|
394
394
|
run_bridges || RC=$?
|
|
395
395
|
fi
|
|
396
396
|
|
|
397
|
+
# Post-install PATH advisory. The Claude plugin hook resolves `agent-config`
|
|
398
|
+
# from PATH on a global-only consumer (ADR-020); if it is unreachable every
|
|
399
|
+
# PostToolUse hook silently no-ops — the documented "dashboard never updates"
|
|
400
|
+
# failure. Advisory only: a bad PATH must not fail an otherwise-clean install.
|
|
401
|
+
if [[ $RC -eq 0 ]] && ! command -v agent-config >/dev/null 2>&1; then
|
|
402
|
+
$QUIET || {
|
|
403
|
+
echo " ⚠️ \`agent-config\` is not on your PATH." >&2
|
|
404
|
+
echo " Claude plugin hooks resolve it from PATH; without it the" >&2
|
|
405
|
+
echo " roadmap-progress dashboard (and other hooks) will not fire." >&2
|
|
406
|
+
echo " Add your npm global bin dir (\`npm prefix -g\`/bin) to PATH," >&2
|
|
407
|
+
echo " then verify with \`agent-config doctor\`." >&2
|
|
408
|
+
}
|
|
409
|
+
fi
|
|
410
|
+
|
|
397
411
|
exit $RC
|