@event4u/agent-config 2.26.0 → 3.1.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.
Files changed (870) hide show
  1. package/.agent-src/commands/agent-handoff.md +15 -3
  2. package/.agent-src/commands/agent-status.md +12 -0
  3. package/.agent-src/commands/agents/audit.md +12 -0
  4. package/.agent-src/commands/agents/init.md +12 -0
  5. package/.agent-src/commands/agents/optimize.md +12 -0
  6. package/.agent-src/commands/agents/user/accept.md +12 -0
  7. package/.agent-src/commands/agents/user/init.md +12 -0
  8. package/.agent-src/commands/agents/user/review.md +12 -0
  9. package/.agent-src/commands/agents/user/show.md +12 -0
  10. package/.agent-src/commands/agents/user/update.md +12 -0
  11. package/.agent-src/commands/agents/user.md +12 -0
  12. package/.agent-src/commands/agents.md +12 -0
  13. package/.agent-src/commands/analyze-reference-repo.md +15 -3
  14. package/.agent-src/commands/bug-fix.md +12 -0
  15. package/.agent-src/commands/bug-investigate.md +13 -1
  16. package/.agent-src/commands/challenge-me/vision.md +12 -0
  17. package/.agent-src/commands/challenge-me/with-docs.md +12 -0
  18. package/.agent-src/commands/challenge-me.md +12 -0
  19. package/.agent-src/commands/chat-history/import.md +16 -4
  20. package/.agent-src/commands/chat-history/learn.md +15 -3
  21. package/.agent-src/commands/chat-history/show.md +17 -5
  22. package/.agent-src/commands/chat-history.md +14 -2
  23. package/.agent-src/commands/check-current-md.md +12 -0
  24. package/.agent-src/commands/commit/in-chunks.md +12 -0
  25. package/.agent-src/commands/commit.md +12 -0
  26. package/.agent-src/commands/compress.md +12 -0
  27. package/.agent-src/commands/context/create.md +17 -5
  28. package/.agent-src/commands/context/refactor.md +15 -3
  29. package/.agent-src/commands/context.md +12 -0
  30. package/.agent-src/commands/cost-report.md +12 -0
  31. package/.agent-src/commands/council/analysis.md +15 -3
  32. package/.agent-src/commands/council/debate.md +17 -5
  33. package/.agent-src/commands/council/default.md +17 -5
  34. package/.agent-src/commands/council/design.md +12 -0
  35. package/.agent-src/commands/council/optimize.md +12 -0
  36. package/.agent-src/commands/council/pr.md +12 -0
  37. package/.agent-src/commands/council.md +13 -1
  38. package/.agent-src/commands/create-pr/description-only.md +12 -0
  39. package/.agent-src/commands/create-pr.md +39 -0
  40. package/.agent-src/commands/e2e-heal.md +12 -0
  41. package/.agent-src/commands/e2e-plan.md +12 -0
  42. package/.agent-src/commands/estimate-ticket.md +12 -0
  43. package/.agent-src/commands/feature/dev.md +13 -1
  44. package/.agent-src/commands/feature/explore.md +12 -0
  45. package/.agent-src/commands/feature/plan.md +14 -2
  46. package/.agent-src/commands/feature/refactor.md +12 -0
  47. package/.agent-src/commands/feature/roadmap.md +12 -0
  48. package/.agent-src/commands/feature.md +12 -0
  49. package/.agent-src/commands/fix/ci.md +12 -0
  50. package/.agent-src/commands/fix/portability.md +12 -0
  51. package/.agent-src/commands/fix/pr-bot-comments.md +12 -0
  52. package/.agent-src/commands/fix/pr-comments.md +12 -0
  53. package/.agent-src/commands/fix/pr-developer-comments.md +12 -0
  54. package/.agent-src/commands/fix/refs.md +12 -0
  55. package/.agent-src/commands/fix/seeder.md +12 -0
  56. package/.agent-src/commands/fix.md +12 -0
  57. package/.agent-src/commands/ghostwriter/delete.md +20 -8
  58. package/.agent-src/commands/ghostwriter/fetch.md +19 -7
  59. package/.agent-src/commands/ghostwriter/list.md +19 -7
  60. package/.agent-src/commands/ghostwriter/show.md +14 -2
  61. package/.agent-src/commands/ghostwriter/write.md +15 -3
  62. package/.agent-src/commands/ghostwriter.md +14 -2
  63. package/.agent-src/commands/grill-me.md +12 -0
  64. package/.agent-src/commands/implement-ticket.md +12 -0
  65. package/.agent-src/commands/install-via-agent.md +129 -0
  66. package/.agent-src/commands/jira-ticket.md +12 -0
  67. package/.agent-src/commands/judge/on-diff.md +12 -0
  68. package/.agent-src/commands/judge/solo.md +12 -0
  69. package/.agent-src/commands/judge/steps.md +12 -0
  70. package/.agent-src/commands/judge.md +12 -0
  71. package/.agent-src/commands/memory/add.md +12 -0
  72. package/.agent-src/commands/memory/learn-low-impact.md +18 -6
  73. package/.agent-src/commands/memory/load.md +12 -0
  74. package/.agent-src/commands/memory/mine-session.md +12 -0
  75. package/.agent-src/commands/memory/promote.md +12 -0
  76. package/.agent-src/commands/memory/propose.md +12 -0
  77. package/.agent-src/commands/memory.md +12 -0
  78. package/.agent-src/commands/mode.md +12 -0
  79. package/.agent-src/commands/module/create.md +12 -0
  80. package/.agent-src/commands/module/explore.md +13 -1
  81. package/.agent-src/commands/module.md +12 -0
  82. package/.agent-src/commands/optimize/agents-dir.md +14 -2
  83. package/.agent-src/commands/optimize/augmentignore.md +12 -0
  84. package/.agent-src/commands/optimize/rtk.md +12 -0
  85. package/.agent-src/commands/optimize/skills.md +12 -0
  86. package/.agent-src/commands/optimize-prompt.md +12 -0
  87. package/.agent-src/commands/optimize.md +12 -0
  88. package/.agent-src/commands/orchestrate.md +13 -1
  89. package/.agent-src/commands/override/create.md +12 -0
  90. package/.agent-src/commands/override/manage.md +12 -0
  91. package/.agent-src/commands/override.md +12 -0
  92. package/.agent-src/commands/package-reset.md +12 -0
  93. package/.agent-src/commands/package-test.md +12 -0
  94. package/.agent-src/commands/post-as/ghostwriter.md +12 -0
  95. package/.agent-src/commands/post-as/me.md +13 -1
  96. package/.agent-src/commands/post-as.md +12 -0
  97. package/.agent-src/commands/prepare-for-review.md +12 -0
  98. package/.agent-src/commands/project-analyze.md +27 -15
  99. package/.agent-src/commands/project-health.md +13 -1
  100. package/.agent-src/commands/quality-fix.md +12 -0
  101. package/.agent-src/commands/refine-ticket.md +12 -0
  102. package/.agent-src/commands/research/deep.md +12 -0
  103. package/.agent-src/commands/research/report.md +12 -0
  104. package/.agent-src/commands/research.md +12 -0
  105. package/.agent-src/commands/review-changes.md +12 -0
  106. package/.agent-src/commands/review-routing.md +12 -0
  107. package/.agent-src/commands/roadmap/ai-council.md +15 -3
  108. package/.agent-src/commands/roadmap/create.md +13 -1
  109. package/.agent-src/commands/roadmap/process-full.md +12 -0
  110. package/.agent-src/commands/roadmap/process-phase.md +12 -0
  111. package/.agent-src/commands/roadmap/process-step.md +12 -0
  112. package/.agent-src/commands/roadmap.md +12 -0
  113. package/.agent-src/commands/rule-compliance-audit.md +12 -0
  114. package/.agent-src/commands/set-cost-profile.md +12 -0
  115. package/.agent-src/commands/sync-agent-settings.md +12 -0
  116. package/.agent-src/commands/sync-gitignore/fix.md +32 -13
  117. package/.agent-src/commands/sync-gitignore.md +13 -1
  118. package/.agent-src/commands/tests/create.md +12 -0
  119. package/.agent-src/commands/tests/execute.md +12 -0
  120. package/.agent-src/commands/tests.md +12 -0
  121. package/.agent-src/commands/threat-model.md +12 -0
  122. package/.agent-src/commands/update-form-request-messages.md +12 -0
  123. package/.agent-src/commands/upstream-contribute.md +12 -0
  124. package/.agent-src/commands/video/from-script.md +13 -1
  125. package/.agent-src/commands/video/scene.md +12 -0
  126. package/.agent-src/commands/video/stitch.md +13 -1
  127. package/.agent-src/commands/video/storyboard.md +12 -0
  128. package/.agent-src/commands/video.md +13 -1
  129. package/.agent-src/commands/work.md +12 -0
  130. package/.agent-src/contexts/augment-infrastructure.md +2 -2
  131. package/.agent-src/contexts/authority/scope-mechanics.md +11 -0
  132. package/.agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  133. package/.agent-src/contexts/documentation-hierarchy.md +2 -2
  134. package/.agent-src/contexts/execution/cheap-question-mechanics.md +81 -0
  135. package/.agent-src/contexts/execution/roadmap-process-loop.md +19 -0
  136. package/.agent-src/ghostwriter/README.md +2 -2
  137. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  138. package/.agent-src/personas/README.md +1 -1
  139. package/.agent-src/personas/advisors/contrarian.md +1 -1
  140. package/.agent-src/personas/advisors/executor.md +1 -1
  141. package/.agent-src/personas/advisors/expansionist.md +1 -1
  142. package/.agent-src/personas/advisors/first-principles.md +1 -1
  143. package/.agent-src/personas/advisors/outsider.md +1 -1
  144. package/.agent-src/rules/agent-authority.md +12 -0
  145. package/.agent-src/rules/analysis-skill-routing.md +12 -0
  146. package/.agent-src/rules/architecture.md +13 -1
  147. package/.agent-src/rules/artifact-drafting-protocol.md +13 -1
  148. package/.agent-src/rules/artifact-engagement-recording.md +13 -1
  149. package/.agent-src/rules/ask-when-uncertain.md +12 -0
  150. package/.agent-src/rules/augment-edit-discipline.md +13 -1
  151. package/.agent-src/rules/augment-source-of-truth.md +13 -1
  152. package/.agent-src/rules/autonomous-execution.md +13 -1
  153. package/.agent-src/rules/caveman-speak.md +15 -3
  154. package/.agent-src/rules/cli-output-handling.md +13 -1
  155. package/.agent-src/rules/command-suggestion-policy.md +13 -1
  156. package/.agent-src/rules/commit-conventions.md +13 -1
  157. package/.agent-src/rules/commit-policy.md +12 -0
  158. package/.agent-src/rules/context-hygiene.md +51 -3
  159. package/.agent-src/rules/copilot-routing.md +13 -1
  160. package/.agent-src/rules/devcontainer-routing.md +13 -1
  161. package/.agent-src/rules/direct-answers.md +12 -0
  162. package/.agent-src/rules/docker-commands.md +13 -1
  163. package/.agent-src/rules/domain-adoption-policy.md +17 -5
  164. package/.agent-src/rules/domain-safety-disclaimer.md +13 -1
  165. package/.agent-src/rules/domain-safety-pii.md +13 -1
  166. package/.agent-src/rules/domain-safety-retention.md +13 -1
  167. package/.agent-src/rules/downstream-changes.md +13 -1
  168. package/.agent-src/rules/engineering-safety-floor.md +102 -0
  169. package/.agent-src/rules/external-reference-deep-dive.md +13 -1
  170. package/.agent-src/rules/fast-path-marker-visibility.md +21 -1
  171. package/.agent-src/rules/finance-safety-floor.md +114 -0
  172. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +13 -1
  173. package/.agent-src/rules/git-history-discipline.md +14 -2
  174. package/.agent-src/rules/guidelines.md +12 -0
  175. package/.agent-src/rules/improve-before-implement.md +13 -1
  176. package/.agent-src/rules/invite-challenge.md +13 -1
  177. package/.agent-src/rules/language-and-tone.md +12 -0
  178. package/.agent-src/rules/laravel-routing.md +13 -1
  179. package/.agent-src/rules/laravel-translations.md +13 -1
  180. package/.agent-src/rules/low-impact-corpus-privacy-floor.md +17 -5
  181. package/.agent-src/rules/markdown-safe-codeblocks.md +13 -1
  182. package/.agent-src/rules/media-governance-routing.md +27 -15
  183. package/.agent-src/rules/minimal-safe-diff.md +13 -1
  184. package/.agent-src/rules/missing-tool-handling.md +13 -1
  185. package/.agent-src/rules/model-recommendation.md +13 -1
  186. package/.agent-src/rules/no-attribution-footers.md +13 -1
  187. package/.agent-src/rules/no-cheap-questions.md +46 -32
  188. package/.agent-src/rules/no-roadmap-references.md +28 -16
  189. package/.agent-src/rules/non-destructive-by-default.md +12 -0
  190. package/.agent-src/rules/onboarding-gate.md +19 -6
  191. package/.agent-src/rules/package-ci-checks.md +12 -0
  192. package/.agent-src/rules/persona-governance.md +13 -1
  193. package/.agent-src/rules/php-coding.md +13 -1
  194. package/.agent-src/rules/preservation-guard.md +13 -1
  195. package/.agent-src/rules/provider-lifecycle-discipline.md +18 -6
  196. package/.agent-src/rules/reviewer-awareness.md +13 -1
  197. package/.agent-src/rules/roadmap-ci-steps-policy.md +13 -1
  198. package/.agent-src/rules/roadmap-progress-sync.md +18 -1
  199. package/.agent-src/rules/role-mode-adherence.md +13 -1
  200. package/.agent-src/rules/rule-type-governance.md +13 -1
  201. package/.agent-src/rules/runtime-safety.md +13 -1
  202. package/.agent-src/rules/scope-control.md +12 -0
  203. package/.agent-src/rules/security-sensitive-stop.md +13 -1
  204. package/.agent-src/rules/size-enforcement.md +12 -0
  205. package/.agent-src/rules/skill-improvement-trigger.md +13 -1
  206. package/.agent-src/rules/skill-quality.md +13 -1
  207. package/.agent-src/rules/slash-command-routing-policy.md +13 -1
  208. package/.agent-src/rules/strategy-safety-floor.md +114 -0
  209. package/.agent-src/rules/symfony-routing.md +13 -1
  210. package/.agent-src/rules/think-before-action.md +13 -1
  211. package/.agent-src/rules/token-efficiency.md +13 -1
  212. package/.agent-src/rules/token-optimizer-maintenance.md +12 -0
  213. package/.agent-src/rules/tool-safety.md +13 -1
  214. package/.agent-src/rules/ui-audit-gate.md +13 -1
  215. package/.agent-src/rules/upstream-proposal.md +13 -1
  216. package/.agent-src/rules/user-interaction.md +13 -1
  217. package/.agent-src/rules/user-interrupt-priority.md +12 -0
  218. package/.agent-src/rules/verify-before-complete.md +12 -0
  219. package/.agent-src/skills/accessibility-auditor/SKILL.md +12 -0
  220. package/.agent-src/skills/activation-design/SKILL.md +12 -0
  221. package/.agent-src/skills/adr-create/SKILL.md +12 -0
  222. package/.agent-src/skills/adversarial-review/SKILL.md +12 -0
  223. package/.agent-src/skills/agent-docs-writing/SKILL.md +16 -4
  224. package/.agent-src/skills/agents-md-thin-root/SKILL.md +28 -10
  225. package/.agent-src/skills/ai-council/SKILL.md +28 -15
  226. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +12 -0
  227. package/.agent-src/skills/analysis-skill-router/SKILL.md +12 -0
  228. package/.agent-src/skills/api-design/SKILL.md +13 -3
  229. package/.agent-src/skills/api-endpoint/SKILL.md +12 -0
  230. package/.agent-src/skills/api-testing/SKILL.md +12 -0
  231. package/.agent-src/skills/architecture-review-lens/SKILL.md +12 -0
  232. package/.agent-src/skills/artisan-commands/SKILL.md +12 -0
  233. package/.agent-src/skills/async-python-patterns/SKILL.md +13 -1
  234. package/.agent-src/skills/authz-review/SKILL.md +12 -2
  235. package/.agent-src/skills/aws-infrastructure/SKILL.md +12 -0
  236. package/.agent-src/skills/blade-ui/SKILL.md +12 -0
  237. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +12 -0
  238. package/.agent-src/skills/bug-analyzer/SKILL.md +14 -2
  239. package/.agent-src/skills/build-buy-partner/SKILL.md +12 -0
  240. package/.agent-src/skills/canvas-design/SKILL.md +12 -0
  241. package/.agent-src/skills/character-consistency/SKILL.md +23 -11
  242. package/.agent-src/skills/check-refs/SKILL.md +12 -0
  243. package/.agent-src/skills/churn-prevention/SKILL.md +12 -0
  244. package/.agent-src/skills/code-refactoring/SKILL.md +16 -4
  245. package/.agent-src/skills/code-review/SKILL.md +12 -0
  246. package/.agent-src/skills/command-routing/SKILL.md +12 -0
  247. package/.agent-src/skills/command-writing/SKILL.md +14 -2
  248. package/.agent-src/skills/comp-banding/SKILL.md +12 -0
  249. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +12 -2
  250. package/.agent-src/skills/competitive-positioning/SKILL.md +12 -2
  251. package/.agent-src/skills/composer-packages/SKILL.md +12 -0
  252. package/.agent-src/skills/compress-memory/SKILL.md +12 -0
  253. package/.agent-src/skills/content-funnel-design/SKILL.md +12 -2
  254. package/.agent-src/skills/context-authoring/SKILL.md +18 -6
  255. package/.agent-src/skills/context-document/SKILL.md +17 -5
  256. package/.agent-src/skills/contracts-cognition/SKILL.md +12 -2
  257. package/.agent-src/skills/conventional-commits-writing/SKILL.md +12 -0
  258. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +13 -1
  259. package/.agent-src/skills/copilot-config/SKILL.md +12 -0
  260. package/.agent-src/skills/customer-research/SKILL.md +12 -0
  261. package/.agent-src/skills/dashboard-design/SKILL.md +12 -0
  262. package/.agent-src/skills/data-flow-mapper/SKILL.md +12 -0
  263. package/.agent-src/skills/data-handling-judgment/SKILL.md +12 -2
  264. package/.agent-src/skills/database/SKILL.md +14 -2
  265. package/.agent-src/skills/dcf-modeling/SKILL.md +12 -2
  266. package/.agent-src/skills/deal-qualification-meddic/SKILL.md +12 -2
  267. package/.agent-src/skills/decision-record/SKILL.md +12 -0
  268. package/.agent-src/skills/deep-reading-analyst/SKILL.md +12 -0
  269. package/.agent-src/skills/defense-in-depth/SKILL.md +13 -1
  270. package/.agent-src/skills/dependency-upgrade/SKILL.md +12 -0
  271. package/.agent-src/skills/description-assist/SKILL.md +12 -0
  272. package/.agent-src/skills/design-review/SKILL.md +12 -0
  273. package/.agent-src/skills/devcontainer/SKILL.md +12 -0
  274. package/.agent-src/skills/developer-like-execution/SKILL.md +12 -0
  275. package/.agent-src/skills/discovery-interview/SKILL.md +12 -2
  276. package/.agent-src/skills/doc-coauthoring/SKILL.md +12 -0
  277. package/.agent-src/skills/docker/SKILL.md +12 -0
  278. package/.agent-src/skills/editorial-calendar/SKILL.md +12 -2
  279. package/.agent-src/skills/eloquent/SKILL.md +12 -0
  280. package/.agent-src/skills/eloquent/evals/triggers.json +1 -1
  281. package/.agent-src/skills/error-handling-patterns/SKILL.md +13 -1
  282. package/.agent-src/skills/estimate-ticket/SKILL.md +12 -0
  283. package/.agent-src/skills/existing-ui-audit/SKILL.md +12 -0
  284. package/.agent-src/skills/expansion-playbook/SKILL.md +12 -0
  285. package/.agent-src/skills/fe-design/SKILL.md +12 -0
  286. package/.agent-src/skills/feature-planning/SKILL.md +12 -0
  287. package/.agent-src/skills/file-editor/SKILL.md +12 -0
  288. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +12 -0
  289. package/.agent-src/skills/flux/SKILL.md +12 -0
  290. package/.agent-src/skills/forecast-accuracy/SKILL.md +12 -2
  291. package/.agent-src/skills/forecasting/SKILL.md +12 -2
  292. package/.agent-src/skills/form-handler/SKILL.md +12 -0
  293. package/.agent-src/skills/fundraising-narrative/SKILL.md +12 -2
  294. package/.agent-src/skills/funnel-analysis/SKILL.md +12 -0
  295. package/.agent-src/skills/git-workflow/SKILL.md +12 -0
  296. package/.agent-src/skills/github-ci/SKILL.md +12 -0
  297. package/.agent-src/skills/grafana/SKILL.md +12 -0
  298. package/.agent-src/skills/gtm-launch/SKILL.md +12 -2
  299. package/.agent-src/skills/guideline-writing/SKILL.md +12 -0
  300. package/.agent-src/skills/hiring-loop-design/SKILL.md +12 -0
  301. package/.agent-src/skills/incident-commander/SKILL.md +12 -2
  302. package/.agent-src/skills/jira-integration/SKILL.md +12 -0
  303. package/.agent-src/skills/jobs-events/SKILL.md +12 -0
  304. package/.agent-src/skills/judge-bug-hunter/SKILL.md +12 -0
  305. package/.agent-src/skills/judge-code-quality/SKILL.md +12 -0
  306. package/.agent-src/skills/judge-security-auditor/SKILL.md +12 -0
  307. package/.agent-src/skills/judge-test-coverage/SKILL.md +12 -0
  308. package/.agent-src/skills/laravel/SKILL.md +12 -0
  309. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +15 -3
  310. package/.agent-src/skills/laravel-dto/SKILL.md +14 -2
  311. package/.agent-src/skills/laravel-horizon/SKILL.md +12 -0
  312. package/.agent-src/skills/laravel-mail/SKILL.md +12 -0
  313. package/.agent-src/skills/laravel-middleware/SKILL.md +12 -0
  314. package/.agent-src/skills/laravel-migration/SKILL.md +12 -0
  315. package/.agent-src/skills/laravel-notifications/SKILL.md +12 -0
  316. package/.agent-src/skills/laravel-pennant/SKILL.md +12 -0
  317. package/.agent-src/skills/laravel-pulse/SKILL.md +12 -0
  318. package/.agent-src/skills/laravel-reverb/SKILL.md +12 -0
  319. package/.agent-src/skills/laravel-scheduling/SKILL.md +12 -0
  320. package/.agent-src/skills/laravel-validation/SKILL.md +12 -0
  321. package/.agent-src/skills/laravel-websocket/SKILL.md +12 -0
  322. package/.agent-src/skills/launch-readiness/SKILL.md +12 -2
  323. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +15 -3
  324. package/.agent-src/skills/lint-skills/SKILL.md +12 -0
  325. package/.agent-src/skills/livewire/SKILL.md +12 -0
  326. package/.agent-src/skills/livewire-architect/SKILL.md +12 -0
  327. package/.agent-src/skills/logging-monitoring/SKILL.md +12 -0
  328. package/.agent-src/skills/market-entry-analysis/SKILL.md +12 -0
  329. package/.agent-src/skills/markitdown/SKILL.md +14 -2
  330. package/.agent-src/skills/mcp/SKILL.md +12 -0
  331. package/.agent-src/skills/mcp-builder/SKILL.md +14 -2
  332. package/.agent-src/skills/md-language-check/SKILL.md +13 -1
  333. package/.agent-src/skills/memory-consolidation/SKILL.md +12 -0
  334. package/.agent-src/skills/merge-conflicts/SKILL.md +12 -0
  335. package/.agent-src/skills/messaging-architecture/SKILL.md +12 -2
  336. package/.agent-src/skills/migration-architect/SKILL.md +12 -0
  337. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +12 -0
  338. package/.agent-src/skills/module-management/SKILL.md +12 -0
  339. package/.agent-src/skills/motion-choreographer/SKILL.md +16 -4
  340. package/.agent-src/skills/multi-tenancy/SKILL.md +14 -2
  341. package/.agent-src/skills/nextjs-patterns/SKILL.md +12 -0
  342. package/.agent-src/skills/okr-tree-modeling/SKILL.md +12 -2
  343. package/.agent-src/skills/onboarding-design/SKILL.md +12 -0
  344. package/.agent-src/skills/onboarding-program/SKILL.md +12 -0
  345. package/.agent-src/skills/one-on-one-cadence/SKILL.md +12 -0
  346. package/.agent-src/skills/openapi/SKILL.md +13 -1
  347. package/.agent-src/skills/org-design/SKILL.md +12 -0
  348. package/.agent-src/skills/override-management/SKILL.md +12 -0
  349. package/.agent-src/skills/perf-feedback-craft/SKILL.md +12 -0
  350. package/.agent-src/skills/performance/SKILL.md +12 -0
  351. package/.agent-src/skills/performance-analysis/SKILL.md +12 -0
  352. package/.agent-src/skills/persona-writing/SKILL.md +12 -0
  353. package/.agent-src/skills/pest-testing/SKILL.md +12 -0
  354. package/.agent-src/skills/php-coder/SKILL.md +12 -0
  355. package/.agent-src/skills/php-debugging/SKILL.md +12 -0
  356. package/.agent-src/skills/php-service/SKILL.md +12 -0
  357. package/.agent-src/skills/pipeline-strategy/SKILL.md +12 -2
  358. package/.agent-src/skills/pixar-storyteller/SKILL.md +17 -5
  359. package/.agent-src/skills/playwright-architect/SKILL.md +12 -2
  360. package/.agent-src/skills/playwright-testing/SKILL.md +12 -0
  361. package/.agent-src/skills/po-discovery/SKILL.md +12 -0
  362. package/.agent-src/skills/positioning-strategy/SKILL.md +12 -0
  363. package/.agent-src/skills/privacy-review/SKILL.md +12 -2
  364. package/.agent-src/skills/project-analysis-core/SKILL.md +12 -0
  365. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +12 -0
  366. package/.agent-src/skills/project-analysis-laravel/SKILL.md +12 -0
  367. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +12 -0
  368. package/.agent-src/skills/project-analysis-node-express/SKILL.md +12 -0
  369. package/.agent-src/skills/project-analysis-react/SKILL.md +12 -0
  370. package/.agent-src/skills/project-analysis-symfony/SKILL.md +12 -0
  371. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +12 -0
  372. package/.agent-src/skills/project-analyzer/SKILL.md +30 -18
  373. package/.agent-src/skills/project-docs/SKILL.md +25 -13
  374. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +13 -1
  375. package/.agent-src/skills/prompt-optimizer/SKILL.md +13 -1
  376. package/.agent-src/skills/quality-tools/SKILL.md +12 -2
  377. package/.agent-src/skills/react-native-setup/SKILL.md +12 -0
  378. package/.agent-src/skills/react-shadcn-ui/SKILL.md +12 -0
  379. package/.agent-src/skills/readme-reviewer/SKILL.md +64 -3
  380. package/.agent-src/skills/readme-writing/SKILL.md +64 -4
  381. package/.agent-src/skills/readme-writing-package/SKILL.md +60 -5
  382. package/.agent-src/skills/receiving-code-review/SKILL.md +12 -0
  383. package/.agent-src/skills/refine-prompt/SKILL.md +13 -1
  384. package/.agent-src/skills/refine-ticket/SKILL.md +14 -2
  385. package/.agent-src/skills/refine-ticket/detection-map.yml +2 -2
  386. package/.agent-src/skills/release-comms/SKILL.md +12 -2
  387. package/.agent-src/skills/repomix-packer/SKILL.md +13 -1
  388. package/.agent-src/skills/requesting-code-review/SKILL.md +12 -0
  389. package/.agent-src/skills/retention-loops/SKILL.md +12 -0
  390. package/.agent-src/skills/review-routing/SKILL.md +12 -0
  391. package/.agent-src/skills/rice-prioritization/SKILL.md +12 -0
  392. package/.agent-src/skills/risk-officer/SKILL.md +12 -0
  393. package/.agent-src/skills/roadmap-management/SKILL.md +12 -0
  394. package/.agent-src/skills/roadmap-writing/SKILL.md +12 -0
  395. package/.agent-src/skills/rtk-output-filtering/SKILL.md +12 -0
  396. package/.agent-src/skills/rule-refactor/SKILL.md +15 -3
  397. package/.agent-src/skills/rule-writing/SKILL.md +13 -1
  398. package/.agent-src/skills/runway-cognition/SKILL.md +12 -2
  399. package/.agent-src/skills/scenario-modeling/SKILL.md +12 -2
  400. package/.agent-src/skills/scene-expander/SKILL.md +18 -6
  401. package/.agent-src/skills/script-writing/SKILL.md +13 -1
  402. package/.agent-src/skills/secrets-management/SKILL.md +13 -3
  403. package/.agent-src/skills/security/SKILL.md +12 -0
  404. package/.agent-src/skills/security-audit/SKILL.md +12 -0
  405. package/.agent-src/skills/sentry-integration/SKILL.md +12 -0
  406. package/.agent-src/skills/sequential-thinking/SKILL.md +12 -0
  407. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +12 -0
  408. package/.agent-src/skills/skill-management/SKILL.md +12 -0
  409. package/.agent-src/skills/skill-reviewer/SKILL.md +12 -0
  410. package/.agent-src/skills/skill-writing/SKILL.md +12 -0
  411. package/.agent-src/skills/sql-writing/SKILL.md +12 -0
  412. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +12 -0
  413. package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -1
  414. package/.agent-src/skills/symfony-workflow/SKILL.md +12 -0
  415. package/.agent-src/skills/systematic-debugging/SKILL.md +53 -0
  416. package/.agent-src/skills/tailwind-engineer/SKILL.md +12 -0
  417. package/.agent-src/skills/tech-debt-tracker/SKILL.md +12 -2
  418. package/.agent-src/skills/technical-specification/SKILL.md +12 -0
  419. package/.agent-src/skills/terraform/SKILL.md +12 -0
  420. package/.agent-src/skills/terragrunt/SKILL.md +12 -0
  421. package/.agent-src/skills/test-driven-development/SKILL.md +12 -0
  422. package/.agent-src/skills/test-performance/SKILL.md +13 -1
  423. package/.agent-src/skills/testing-anti-patterns/SKILL.md +13 -1
  424. package/.agent-src/skills/threat-modeling/SKILL.md +12 -0
  425. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +12 -0
  426. package/.agent-src/skills/token-optimizer/SKILL.md +12 -0
  427. package/.agent-src/skills/traefik/SKILL.md +12 -0
  428. package/.agent-src/skills/ui-component-architect/SKILL.md +12 -0
  429. package/.agent-src/skills/unit-economics-modeling/SKILL.md +12 -2
  430. package/.agent-src/skills/universal-project-analysis/SKILL.md +12 -0
  431. package/.agent-src/skills/upstream-contribute/SKILL.md +12 -0
  432. package/.agent-src/skills/using-git-worktrees/SKILL.md +12 -0
  433. package/.agent-src/skills/validate-feature-fit/SKILL.md +12 -0
  434. package/.agent-src/skills/verify-completion-evidence/SKILL.md +12 -0
  435. package/.agent-src/skills/video-director/SKILL.md +18 -6
  436. package/.agent-src/skills/vision-articulation/SKILL.md +12 -0
  437. package/.agent-src/skills/voc-extract/SKILL.md +12 -2
  438. package/.agent-src/skills/voice-and-tone-design/SKILL.md +12 -2
  439. package/.agent-src/templates/agent-settings.md +5 -5
  440. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  441. package/.agent-src/templates/agents/memory/ownership.example.yml +1 -1
  442. package/.agent-src/templates/agents/proposal.example.md +12 -0
  443. package/.agent-src/templates/command.md +1 -1
  444. package/.agent-src/templates/contexts/auth-model.md +2 -2
  445. package/.agent-src/templates/contexts/data-sensitivity.md +3 -3
  446. package/.agent-src/templates/contexts/deployment-order.md +2 -2
  447. package/.agent-src/templates/contexts/observability.md +3 -3
  448. package/.agent-src/templates/contexts/tenant-boundaries.md +3 -3
  449. package/.agent-src/templates/contexts.md +1 -1
  450. package/.agent-src/templates/hooks/pre-commit-frontmatter +66 -0
  451. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +78 -39
  452. package/.agent-src/templates/rule.md +1 -1
  453. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +7 -4
  454. package/.agent-src/templates/scripts/work_engine/cli.py +6 -6
  455. package/.agent-src/templates/scripts/work_engine/emitters.py +29 -4
  456. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +3 -3
  457. package/.agent-src/templates/scripts/work_engine/orchestration.py +25 -11
  458. package/.agent-src/templates/scripts/work_engine/state.py +53 -0
  459. package/.agent-src/templates/skill-archive-note.md +4 -4
  460. package/.claude-plugin/marketplace.json +2 -2
  461. package/AGENTS.md +12 -9
  462. package/CHANGELOG.md +268 -90
  463. package/CONTRIBUTING.md +61 -0
  464. package/README.md +173 -558
  465. package/config/agent-settings.template.yml +11 -8
  466. package/config/discovery/packs.yml +162 -0
  467. package/config/discovery/unassigned-artefacts.yml +68 -0
  468. package/config/discovery/workspaces.yml +59 -0
  469. package/config/gitignore-block.txt +36 -23
  470. package/dist/cli/agent-config.js +199 -0
  471. package/dist/cli/agent-config.js.map +1 -0
  472. package/dist/cli/bash/runBash.js +40 -0
  473. package/dist/cli/bash/runBash.js.map +1 -0
  474. package/dist/cli/commands/doctorShell.js +91 -0
  475. package/dist/cli/commands/doctorShell.js.map +1 -0
  476. package/dist/cli/commands/packs.js +59 -0
  477. package/dist/cli/commands/packs.js.map +1 -0
  478. package/dist/cli/commands/settings.js +35 -0
  479. package/dist/cli/commands/settings.js.map +1 -0
  480. package/dist/cli/commands/uiServe.js +119 -0
  481. package/dist/cli/commands/uiServe.js.map +1 -0
  482. package/dist/cli/commands/versions.js +64 -0
  483. package/dist/cli/commands/versions.js.map +1 -0
  484. package/dist/cli/commands/workspaces.js +58 -0
  485. package/dist/cli/commands/workspaces.js.map +1 -0
  486. package/dist/cli/discovery/loadManifest.js +62 -0
  487. package/dist/cli/discovery/loadManifest.js.map +1 -0
  488. package/dist/cli/log/logger.js +41 -0
  489. package/dist/cli/log/logger.js.map +1 -0
  490. package/dist/cli/paths.js +60 -0
  491. package/dist/cli/paths.js.map +1 -0
  492. package/dist/cli/python/resolvePython.js +38 -0
  493. package/dist/cli/python/resolvePython.js.map +1 -0
  494. package/dist/cli/registry.js +77 -0
  495. package/dist/cli/registry.js.map +1 -0
  496. package/dist/discovery/deprecation-report.md +7 -0
  497. package/dist/discovery/discovery-manifest.json +9893 -0
  498. package/dist/discovery/discovery-manifest.json.sha256 +1 -0
  499. package/dist/discovery/discovery-manifest.summary.md +93 -0
  500. package/dist/discovery/orphan-report.md +10 -0
  501. package/dist/discovery/packs.json +1002 -0
  502. package/dist/discovery/trust-report.md +26 -0
  503. package/dist/discovery/workspaces.json +705 -0
  504. package/dist/mcp/awesome-mcp-servers.row.md +1 -0
  505. package/dist/mcp/mcp-cloudflare-catalogue.json +27 -0
  506. package/dist/mcp/registry-manifest.json +63 -0
  507. package/dist/router.json +1623 -0
  508. package/dist/server/app.js +125 -0
  509. package/dist/server/app.js.map +1 -0
  510. package/dist/server/io/atomicMultiWrite.js +204 -0
  511. package/dist/server/io/atomicMultiWrite.js.map +1 -0
  512. package/dist/server/io/atomicWrite.js +79 -0
  513. package/dist/server/io/atomicWrite.js.map +1 -0
  514. package/dist/server/io/substituteTemplate.js +87 -0
  515. package/dist/server/io/substituteTemplate.js.map +1 -0
  516. package/dist/server/io/yamlIO.js +162 -0
  517. package/dist/server/io/yamlIO.js.map +1 -0
  518. package/dist/server/port.js +97 -0
  519. package/dist/server/port.js.map +1 -0
  520. package/dist/server/routes/discovery.js +72 -0
  521. package/dist/server/routes/discovery.js.map +1 -0
  522. package/dist/server/routes/ping.js +57 -0
  523. package/dist/server/routes/ping.js.map +1 -0
  524. package/dist/server/routes/schema.js +41 -0
  525. package/dist/server/routes/schema.js.map +1 -0
  526. package/dist/server/routes/settings.js +236 -0
  527. package/dist/server/routes/settings.js.map +1 -0
  528. package/dist/server/routes/userMd.js +127 -0
  529. package/dist/server/routes/userMd.js.map +1 -0
  530. package/dist/server/routes/wizard.js +374 -0
  531. package/dist/server/routes/wizard.js.map +1 -0
  532. package/dist/server/schemas/settings.js +137 -0
  533. package/dist/server/schemas/settings.js.map +1 -0
  534. package/dist/server/token.js +75 -0
  535. package/dist/server/token.js.map +1 -0
  536. package/dist/server/writeRoot.js +84 -0
  537. package/dist/server/writeRoot.js.map +1 -0
  538. package/dist/server/writeRoot.test.js +91 -0
  539. package/dist/server/writeRoot.test.js.map +1 -0
  540. package/dist/shared/userMd/formAdapter.js +83 -0
  541. package/dist/shared/userMd/formAdapter.js.map +1 -0
  542. package/dist/shared/userMd/schema.js +46 -0
  543. package/dist/shared/userMd/schema.js.map +1 -0
  544. package/dist/shared/userMd/utils.js +88 -0
  545. package/dist/shared/userMd/utils.js.map +1 -0
  546. package/dist/ui/assets/index-D-DY1ywI.js +35 -0
  547. package/dist/ui/assets/index-D-DY1ywI.js.map +1 -0
  548. package/dist/ui/assets/index-Dqfhmg-d.css +1 -0
  549. package/dist/ui/index.html +14 -0
  550. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  551. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  552. package/docs/adrs/router/0001-three-tier-routing.md +5 -5
  553. package/docs/adrs/schema/0001-json-schema-frontmatter.md +4 -4
  554. package/docs/adrs/schema/README.md +1 -1
  555. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +3 -3
  556. package/docs/architecture/setup-vs-settings-shared-surface.md +114 -0
  557. package/docs/architecture.md +3 -2
  558. package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
  559. package/docs/archive/CHANGELOG-pre-3.0.0.md +130 -0
  560. package/docs/archive/CHANGELOG-pre-3.1.0.md +167 -0
  561. package/docs/catalog.md +92 -100
  562. package/docs/contracts/CHANGELOG-conventions.md +1 -1
  563. package/docs/contracts/STABILITY.md +1 -1
  564. package/docs/contracts/adr-architectural-consensus-mechanism.md +5 -5
  565. package/docs/contracts/adr-chat-history-split.md +1 -1
  566. package/docs/contracts/adr-implement-ticket-runtime.md +1 -1
  567. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  568. package/docs/contracts/adr-mcp-runtime.md +2 -2
  569. package/docs/contracts/agent-user-schema.md +17 -11
  570. package/docs/contracts/ai-council-config.md +13 -13
  571. package/docs/contracts/audit-log-v1.md +2 -2
  572. package/docs/contracts/command-clusters.md +2 -2
  573. package/docs/contracts/compression-default-kill-criterion.md +3 -3
  574. package/docs/contracts/consumer-bridge.md +79 -0
  575. package/docs/contracts/decision-trace-v1.md +5 -5
  576. package/docs/contracts/discovery-manifest.md +209 -0
  577. package/docs/contracts/discovery-manifest.schema.json +219 -0
  578. package/docs/contracts/explain-trace.schema.json +144 -0
  579. package/docs/contracts/file-ownership-matrix.json +288 -328
  580. package/docs/contracts/file-ownership-matrix.md +1 -1
  581. package/docs/contracts/frontmatter-contract.md +140 -0
  582. package/docs/contracts/ghostwriter-schema.md +3 -3
  583. package/docs/contracts/gui-wizard.md +223 -0
  584. package/docs/contracts/hook-architecture-v1.md +10 -10
  585. package/docs/contracts/installer-agent-mode.md +137 -0
  586. package/docs/contracts/kernel-membership.md +5 -5
  587. package/docs/contracts/linter-structural-model.md +3 -3
  588. package/docs/contracts/load-context-schema.md +5 -5
  589. package/docs/contracts/local-server-api.md +134 -0
  590. package/docs/contracts/low-impact-corpus-format.md +1 -1
  591. package/docs/contracts/mcp-cloud-scope.md +2 -2
  592. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  593. package/docs/contracts/mcp-phase-1-scope.md +5 -4
  594. package/docs/contracts/mcp-registry-manifest.schema.json +129 -0
  595. package/docs/contracts/mcp-tool-inventory.md +9 -9
  596. package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
  597. package/docs/contracts/memory-visibility-v1.md +2 -2
  598. package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
  599. package/docs/contracts/namespace.md +7 -7
  600. package/docs/contracts/one-off-script-lifecycle.md +1 -1
  601. package/docs/contracts/package-self-orientation.md +1 -1
  602. package/docs/contracts/provider-lifecycle.md +7 -7
  603. package/docs/contracts/router-blending.md +1 -1
  604. package/docs/contracts/rule-classification.md +2 -2
  605. package/docs/contracts/rule-router.md +4 -4
  606. package/docs/contracts/settings-api.md +207 -0
  607. package/docs/contracts/settings-gui-agent-mode.schema.json +128 -0
  608. package/docs/contracts/smoke-contracts.md +3 -3
  609. package/docs/contracts/tier-3-contrib-plugin.md +1 -1
  610. package/docs/contracts/trust-and-safety.md +144 -0
  611. package/docs/contracts/universal-skills.md +1 -1
  612. package/docs/contracts/write-engine.md +1 -1
  613. package/docs/customization.md +139 -13
  614. package/docs/decisions/ADR-001-kernel-swap-deferred.md +1 -1
  615. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +1 -1
  616. package/docs/decisions/ADR-004-rule-governance-pruning.md +8 -8
  617. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +5 -5
  618. package/docs/decisions/ADR-007-agent-discovery-scopes.md +16 -4
  619. package/docs/decisions/ADR-008-installed-tools-manifest.md +2 -2
  620. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +2 -2
  621. package/docs/decisions/ADR-011-domain-pack-readiness.md +4 -4
  622. package/docs/decisions/ADR-012-typescript-cli-shell.md +162 -0
  623. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +234 -0
  624. package/docs/decisions/ADR-014-gui-framework-choice.md +136 -0
  625. package/docs/decisions/ADR-015-discovery-manifest-contract.md +146 -0
  626. package/docs/decisions/ADR-016-installer-architecture.md +189 -0
  627. package/docs/decisions/ADR-017-monorepo-physical-layout.md +261 -0
  628. package/docs/decisions/ADR-018-trust-and-safety-layer.md +159 -0
  629. package/docs/decisions/ADR-019-router-json-dist-location.md +124 -0
  630. package/docs/decisions/ADR-020-global-only-consumer-scope.md +123 -0
  631. package/docs/decisions/ADR-021-deployment-shape.md +153 -0
  632. package/docs/decisions/ADR-rule-kernel-and-router.md +2 -2
  633. package/docs/decisions/INDEX.md +10 -0
  634. package/docs/deploy/connector-setup.md +129 -0
  635. package/docs/deploy/env-vars.md +70 -0
  636. package/docs/deploy/policy-cookbook.md +130 -0
  637. package/docs/deploy/quickstart.md +112 -0
  638. package/docs/distribution/mcp-submission-checklist.md +95 -0
  639. package/docs/distribution/public-install-smoke.md +68 -0
  640. package/docs/distribution/registries.md +55 -0
  641. package/docs/distribution/telemetry-privacy.md +128 -0
  642. package/docs/distribution/telemetry-schema.md +174 -0
  643. package/docs/distribution/topics-equivalents-decay-policy.md +51 -0
  644. package/docs/examples/agent-user.example.md +3 -1
  645. package/docs/featured-skills.md +95 -0
  646. package/docs/getting-started-by-role.md +19 -1
  647. package/docs/getting-started.md +5 -4
  648. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  649. package/docs/guidelines/agent-infra/installed-tools-manifest.md +11 -8
  650. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +10 -1
  651. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  652. package/docs/guidelines/agent-infra/tool-integration.md +1 -1
  653. package/docs/guidelines/docs/readme-size-and-splitting.md +53 -1
  654. package/docs/guidelines/php/api-design.md +1 -1
  655. package/docs/guidelines/prompt-templates.md +2 -2
  656. package/docs/hook-payload-capture.md +3 -3
  657. package/docs/installation.md +39 -18
  658. package/docs/maintainers/dev-mode.md +105 -0
  659. package/docs/migrations/commands-1.15.0.md +3 -3
  660. package/docs/parity/bench-ruflo.json +1 -1
  661. package/docs/parity/ruflo.md +3 -3
  662. package/docs/profiles.md +1 -1
  663. package/docs/quality.md +2 -2
  664. package/docs/recruits/_template.md +3 -3
  665. package/docs/setup/enterprise-and-offline.md +3 -3
  666. package/docs/setup/mcp-server-docker.md +5 -3
  667. package/docs/setup/per-ide/claude-desktop.md +3 -2
  668. package/docs/skills-catalog.md +62 -18
  669. package/docs/wizard.md +156 -0
  670. package/llms.txt +61 -17
  671. package/package.json +63 -3
  672. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  673. package/scripts/_archive/README.md +2 -2
  674. package/scripts/_archive/_p4_migrate.py +1 -1
  675. package/scripts/_cli/cmd_doctor.py +155 -7
  676. package/scripts/_cli/cmd_explain.py +108 -3
  677. package/scripts/_cli/cmd_migrate.py +2 -2
  678. package/scripts/_cli/cmd_migrate_to_global.py +415 -0
  679. package/scripts/_cli/cmd_settings_migrate.py +146 -0
  680. package/scripts/_cli/explain_last/__init__.py +122 -0
  681. package/scripts/_cli/explain_last/assumptions.py +59 -0
  682. package/scripts/_cli/explain_last/council.py +105 -0
  683. package/scripts/_cli/explain_last/halt.py +44 -0
  684. package/scripts/_cli/explain_last/inputs.py +125 -0
  685. package/scripts/_cli/explain_last/memory.py +94 -0
  686. package/scripts/_cli/explain_last/provider.py +52 -0
  687. package/scripts/_cli/explain_last/render.py +52 -0
  688. package/scripts/_cli/explain_last/route.py +59 -0
  689. package/scripts/_cli/explain_last/scrubber.py +105 -0
  690. package/scripts/_cli/explain_last/sections/__init__.py +35 -0
  691. package/scripts/_cli/explain_last/sections/assumptions.py +21 -0
  692. package/scripts/_cli/explain_last/sections/council.py +27 -0
  693. package/scripts/_cli/explain_last/sections/halt.py +31 -0
  694. package/scripts/_cli/explain_last/sections/header.py +24 -0
  695. package/scripts/_cli/explain_last/sections/inputs.py +27 -0
  696. package/scripts/_cli/explain_last/sections/memory.py +21 -0
  697. package/scripts/_cli/explain_last/sections/pack.py +16 -0
  698. package/scripts/_cli/explain_last/sections/provider.py +26 -0
  699. package/scripts/_cli/explain_last/sections/route.py +22 -0
  700. package/scripts/_cli/explain_last/state_loader.py +76 -0
  701. package/scripts/_dispatch.bash +987 -0
  702. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  703. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  704. package/scripts/_lib/agent_settings.py +7 -4
  705. package/scripts/_lib/agent_src.py +157 -0
  706. package/scripts/_lib/agents_overlay.py +3 -3
  707. package/scripts/_phase4_bucket.py +210 -0
  708. package/scripts/agent-config +50 -947
  709. package/scripts/ai-video/adapters/higgsfield.sh +1 -1
  710. package/scripts/ai-video/adapters/sora.sh +1 -1
  711. package/scripts/ai-video/test-pipeline.sh +2 -2
  712. package/scripts/ai_council/_default_prices.py +5 -5
  713. package/scripts/ai_council/advisors.py +1 -1
  714. package/scripts/ai_council/clients.py +2 -2
  715. package/scripts/ai_council/compile_corpus.py +9 -8
  716. package/scripts/ai_council/config.py +3 -3
  717. package/scripts/ai_council/events_log.py +8 -4
  718. package/scripts/ai_council/low_impact_corpus.py +1 -1
  719. package/scripts/ai_council/low_impact_intake.py +1 -1
  720. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +2 -2
  721. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +1 -1
  722. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +3 -3
  723. package/scripts/ai_council/pricing.py +8 -7
  724. package/scripts/ai_council/probation_gate.py +1 -1
  725. package/scripts/ai_council/redact_low_impact_entry.py +1 -1
  726. package/scripts/ai_council/session.py +13 -13
  727. package/scripts/ai_council/shadow_dispatch.py +2 -2
  728. package/scripts/annotate_discovery.py +149 -0
  729. package/scripts/audit_adr_coverage.py +1 -1
  730. package/scripts/audit_auto_rules.py +2 -2
  731. package/scripts/audit_cloud_compatibility.py +1 -1
  732. package/scripts/audit_command_surface.py +2 -2
  733. package/scripts/audit_likelihood.py +4 -4
  734. package/scripts/audit_overlap.py +3 -3
  735. package/scripts/audit_skill_descriptions.py +18 -6
  736. package/scripts/audit_user_type_axis.py +1 -1
  737. package/scripts/build_discovery_manifest.py +658 -0
  738. package/scripts/build_mcp_registry_manifest.py +181 -0
  739. package/scripts/build_rule_trigger_matrix.py +2 -2
  740. package/scripts/capture_showcase_session.py +1 -1
  741. package/scripts/chat_history.py +5 -5
  742. package/scripts/check_always_budget.py +7 -2
  743. package/scripts/check_artefact_checksums.py +104 -0
  744. package/scripts/check_cluster_patterns.py +20 -4
  745. package/scripts/check_command_count_messaging.py +33 -14
  746. package/scripts/check_council_layout.py +26 -20
  747. package/scripts/check_council_references.py +53 -14
  748. package/scripts/check_discovery_determinism.py +70 -0
  749. package/scripts/check_kernel_rule_bundle.py +2 -2
  750. package/scripts/check_no_roadmap_refs.py +2 -2
  751. package/scripts/check_one_off_location.py +1 -1
  752. package/scripts/check_overlay_cascade_subdirs.py +7 -3
  753. package/scripts/check_public_links.py +2 -2
  754. package/scripts/check_references.py +19 -23
  755. package/scripts/check_release_includes_discovery.py +61 -0
  756. package/scripts/check_reply_consistency.py +32 -9
  757. package/scripts/check_template_pin_drift.py +24 -7
  758. package/scripts/check_token_optimizer_freshness.py +18 -3
  759. package/scripts/ci_summary.py +2 -2
  760. package/scripts/ci_time_ratio.py +1 -1
  761. package/scripts/command_suggester/__init__.py +1 -1
  762. package/scripts/compile_router.py +34 -2
  763. package/scripts/compress.py +162 -44
  764. package/scripts/config/presets.py +19 -1
  765. package/scripts/config/profiles.py +16 -1
  766. package/scripts/context_hygiene_hook.py +2 -2
  767. package/scripts/council_cli.py +22 -22
  768. package/scripts/council_prune.py +3 -3
  769. package/scripts/discovery_stats.py +70 -0
  770. package/scripts/expected_perms.json +47 -0
  771. package/scripts/extract_audit_patterns.py +2 -2
  772. package/scripts/gen_discovery_baseline.py +127 -0
  773. package/scripts/generate_index.py +78 -46
  774. package/scripts/generate_ownership_matrix.py +99 -44
  775. package/scripts/generate_pack_manifests.py +183 -0
  776. package/scripts/hook_manifest.yaml +5 -5
  777. package/scripts/hooks/cline-dispatcher.sh +1 -1
  778. package/scripts/hooks/cowork-dispatcher.sh +1 -1
  779. package/scripts/hooks/dispatch_hook.py +3 -3
  780. package/scripts/hooks/gemini-dispatcher.sh +1 -1
  781. package/scripts/hooks/replay_hook.py +1 -1
  782. package/scripts/hooks/state_io.py +5 -5
  783. package/scripts/hooks_doctor.py +4 -4
  784. package/scripts/install +18 -1
  785. package/scripts/install-hooks.sh +2 -2
  786. package/scripts/install.py +937 -62
  787. package/scripts/install.sh +147 -27
  788. package/scripts/inventory_frontmatter.py +1 -1
  789. package/scripts/lint_agents_layout.py +183 -0
  790. package/scripts/lint_agents_md.py +1 -1
  791. package/scripts/lint_archived_skills.py +35 -19
  792. package/scripts/lint_artefact_frontmatter.py +180 -0
  793. package/scripts/lint_bench_corpus.py +14 -2
  794. package/scripts/lint_command_tiers.py +15 -2
  795. package/scripts/lint_discovery_manifest.py +136 -0
  796. package/scripts/lint_discovery_vocabulary.py +148 -0
  797. package/scripts/lint_explain_trace.py +80 -0
  798. package/scripts/lint_featured_skills.py +139 -0
  799. package/scripts/lint_framework_leakage.py +33 -6
  800. package/scripts/lint_framework_leakage_allowlist.json +63 -62
  801. package/scripts/lint_ghostwriter_source.py +1 -1
  802. package/scripts/lint_global_paths.py +147 -0
  803. package/scripts/lint_load_context.py +3 -3
  804. package/scripts/lint_mcp_registry_manifest.py +69 -0
  805. package/scripts/lint_media_policy_linkage.py +6 -6
  806. package/scripts/lint_orchestration_dsl.py +6 -3
  807. package/scripts/lint_pack_boundaries.py +147 -0
  808. package/scripts/lint_pack_first_win.py +103 -0
  809. package/scripts/lint_positioning.py +143 -0
  810. package/scripts/lint_readme_jargon.py +131 -0
  811. package/scripts/lint_readme_size.py +33 -0
  812. package/scripts/lint_rule_interactions.py +23 -5
  813. package/scripts/lint_rule_tiers.py +14 -5
  814. package/scripts/lint_skill_tools.py +1 -1
  815. package/scripts/lint_topics_yaml.py +89 -0
  816. package/scripts/lint_trust_coherence.py +212 -0
  817. package/scripts/mcp_server/consumer_tool_catalog.json +3 -3
  818. package/scripts/mcp_server/telemetry.py +2 -2
  819. package/scripts/mcp_server/tools.py +27 -11
  820. package/scripts/mcp_telemetry_health.py +2 -2
  821. package/scripts/mcp_telemetry_store.py +1 -1
  822. package/scripts/measure_augment_budget.py +3 -3
  823. package/scripts/measure_density.py +2 -2
  824. package/scripts/measure_frugality_savings.py +3 -3
  825. package/scripts/measure_roadmap_trajectory.py +1 -1
  826. package/scripts/measure_rule_budget.py +25 -7
  827. package/scripts/memory_report.py +1 -1
  828. package/scripts/migrate_command_suggestions.py +3 -3
  829. package/scripts/minimal_safe_diff_hook.py +1 -1
  830. package/scripts/move_artefact.py +143 -0
  831. package/scripts/new_skill.py +148 -0
  832. package/scripts/onboarding_gate_hook.py +4 -4
  833. package/scripts/plan_physical_move.py +353 -0
  834. package/scripts/prepack-check.mjs +62 -0
  835. package/scripts/probe_projection_fidelity.py +2 -2
  836. package/scripts/refine_ticket_detect.py +31 -8
  837. package/scripts/schemas/command.schema.json +45 -1
  838. package/scripts/schemas/persona.schema.json +1 -1
  839. package/scripts/schemas/rule.schema.json +44 -4
  840. package/scripts/schemas/skill.schema.json +41 -1
  841. package/scripts/score_skill_selection.py +1 -1
  842. package/scripts/skill_collision_clusters.py +1 -1
  843. package/scripts/skill_linter.py +250 -120
  844. package/scripts/skill_overlap.py +1 -1
  845. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  846. package/scripts/skill_trigger_eval.py +28 -8
  847. package/scripts/skill_usage_collect.py +3 -3
  848. package/scripts/skill_usage_report.py +3 -3
  849. package/scripts/smoke/kernel.sh +1 -1
  850. package/scripts/smoke/router.sh +24 -5
  851. package/scripts/smoke/skills.sh +15 -7
  852. package/scripts/smoke_quickstart.py +12 -3
  853. package/scripts/snapshot_agent_outputs.py +144 -0
  854. package/scripts/spotcheck_thin_root.py +1 -1
  855. package/scripts/sync_github_metadata.py +147 -0
  856. package/scripts/sync_gitignore.py +15 -5
  857. package/scripts/update_counts.py +45 -17
  858. package/scripts/update_prices.py +4 -3
  859. package/scripts/validate_decision_engine.py +9 -1
  860. package/scripts/validate_discovery_manifest.py +94 -0
  861. package/scripts/validate_frontmatter.py +39 -20
  862. package/scripts/verify_before_complete_hook.py +1 -1
  863. package/scripts/verify_physical_move.py +185 -0
  864. package/scripts/verify_roadmap_closure.py +1 -1
  865. package/templates/agent-user.md +34 -0
  866. package/templates/agent-user.yml +21 -0
  867. package/templates/minimal/agents-overrides-readme.md +46 -0
  868. package/templates/minimal/overrides-gitkeep +2 -0
  869. package/.agent-src/commands/onboard.md +0 -467
  870. package/templates/minimal/agents-gitkeep +0 -2
@@ -149,16 +149,32 @@ class MockRouter:
149
149
  return loaded, len(query) // 4 + len(skills) * 20, 16
150
150
 
151
151
 
152
- def load_skill_metas(root: Path = SKILLS_SOURCE) -> list[SkillMeta]:
153
- """Parse name + description from every SKILL.md frontmatter under root."""
152
+ def load_skill_metas(root: Path | None = None) -> list[SkillMeta]:
153
+ """Parse name + description from every SKILL.md frontmatter under root.
154
+
155
+ If ``root`` is None, the package's ``artefact_roots()`` are scanned so
156
+ discovery works across the monorepo's per-pack ``.agent-src.uncompressed/``
157
+ trees. A single explicit ``root`` keeps tests that mock a sub-tree working
158
+ unchanged.
159
+ """
160
+ if root is not None:
161
+ roots = [root]
162
+ else:
163
+ from _lib.agent_src import artefact_roots
164
+ roots = [r / "skills" for r in artefact_roots()]
154
165
  metas: list[SkillMeta] = []
155
- for skill_dir in sorted(p for p in root.iterdir() if p.is_dir()):
156
- skill_md = skill_dir / "SKILL.md"
157
- if not skill_md.exists():
166
+ seen: set[str] = set()
167
+ for skills_dir in roots:
168
+ if not skills_dir.is_dir():
158
169
  continue
159
- meta = _parse_frontmatter(skill_md)
160
- if meta is not None:
161
- metas.append(meta)
170
+ for skill_dir in sorted(p for p in skills_dir.iterdir() if p.is_dir()):
171
+ skill_md = skill_dir / "SKILL.md"
172
+ if not skill_md.exists():
173
+ continue
174
+ meta = _parse_frontmatter(skill_md)
175
+ if meta is not None and meta.name not in seen:
176
+ metas.append(meta)
177
+ seen.add(meta.name)
162
178
  return metas
163
179
 
164
180
 
@@ -587,6 +603,10 @@ def build_arg_parser() -> argparse.ArgumentParser:
587
603
 
588
604
 
589
605
  def _default_triggers_path(skill: str) -> Path:
606
+ from _lib.agent_src import resolve_logical
607
+ resolved = resolve_logical(f"skills/{skill}/evals/triggers.json")
608
+ if resolved is not None:
609
+ return resolved
590
610
  return SKILLS_SOURCE / skill / "evals" / "triggers.json"
591
611
 
592
612
 
@@ -14,12 +14,12 @@ parses each turn for two signals:
14
14
  `.agent-src/skills/<slug>/`.
15
15
 
16
16
  Emits one JSONL record per (session, turn, slug, kind) to
17
- `agents/metrics/skill-usage.jsonl` (append-only, deduped on the
17
+ `agents/runtime/metrics/skill-usage.jsonl` (append-only, deduped on the
18
18
  (session_id, turn_idx, slug, kind) tuple).
19
19
 
20
20
  Privacy: `prompt_excerpt_hash` = SHA-256 of the first 200 chars of the
21
21
  user prompt that opened the turn. No raw user or assistant bodies are
22
- persisted. See `agents/audit-2026-05-14-north-star/skill-usage-sources.md`.
22
+ persisted. See `agents/evidence/audits/2026-05-14-north-star/skill-usage-sources.md`.
23
23
  """
24
24
  from __future__ import annotations
25
25
 
@@ -153,7 +153,7 @@ def dedup_key(rec: dict) -> tuple:
153
153
  def main() -> int:
154
154
  ap = argparse.ArgumentParser(description=__doc__.splitlines()[0])
155
155
  ap.add_argument("--project-slug", help="Override the ~/.claude/projects slug (defaults to current repo)")
156
- ap.add_argument("--out", type=Path, default=OUT, help="Output jsonl (default: agents/metrics/skill-usage.jsonl)")
156
+ ap.add_argument("--out", type=Path, default=OUT, help="Output jsonl (default: agents/runtime/metrics/skill-usage.jsonl)")
157
157
  ap.add_argument("--quiet", action="store_true", help="Suppress non-error output")
158
158
  args = ap.parse_args()
159
159
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python3
2
- """Aggregate `agents/metrics/skill-usage.jsonl` into a per-skill report.
2
+ """Aggregate `agents/runtime/metrics/skill-usage.jsonl` into a per-skill report.
3
3
 
4
4
  Implements step-2-skill-inventory-rationalization.md Phase 1 Step 3.
5
- Groups records by slug; emits `agents/metrics/skill-usage-report.md`
5
+ Groups records by slug; emits `agents/runtime/metrics/skill-usage-report.md`
6
6
  with columns:
7
7
 
8
8
  slug · exposures_total · mentions_total · exposures_30d · mentions_30d
@@ -112,7 +112,7 @@ def render(per: dict[str, dict], known: set[str]) -> str:
112
112
  "# Skill Usage Report (baseline)",
113
113
  "",
114
114
  "> Generated by `scripts/skill_usage_report.py`. Source:",
115
- "> `agents/metrics/skill-usage.jsonl` (collector emits per-turn",
115
+ "> `agents/runtime/metrics/skill-usage.jsonl` (collector emits per-turn",
116
116
  "> exposure/mention records). See",
117
117
  "> [`step-2-skill-inventory-rationalization.md`](../roadmaps/step-2-skill-inventory-rationalization.md)",
118
118
  "> Phase 1.",
@@ -29,7 +29,7 @@ log() { [ "$quiet" = "1" ] || printf '%s\n' "$*"; }
29
29
  # 1. kernel ids from router.json
30
30
  kernel_ids=$(python3 -c '
31
31
  import json
32
- d = json.load(open("router.json"))
32
+ d = json.load(open("dist/router.json"))
33
33
  print("\n".join(d.get("kernel", [])))
34
34
  ')
35
35
  kernel_count=$(printf '%s\n' "$kernel_ids" | grep -c .)
@@ -24,7 +24,12 @@ log() { [ "$quiet" = "1" ] || printf '%s\n' "$*"; }
24
24
  result=$(python3 <<'PY'
25
25
  import json, os, sys, pathlib
26
26
 
27
- d = json.load(open("router.json"))
27
+ # ADR-017: routes_to resolution walks artefact_roots() across the
28
+ # monorepo. Skills/commands/guidelines may live under any source root.
29
+ sys.path.insert(0, "scripts")
30
+ from _lib.agent_src import resolve_logical
31
+
32
+ d = json.load(open("dist/router.json"))
28
33
  kernel = d.get("kernel", [])
29
34
  tier1 = d.get("tier_1", [])
30
35
  tier2 = d.get("tier_2", [])
@@ -34,20 +39,34 @@ total = len(ids)
34
39
  # Rule-file resolution
35
40
  missing_rules = [i for i in ids if not os.path.exists(f".agent-src/rules/{i}.md")]
36
41
 
37
- # routes_to resolution
42
+ # routes_to resolution — multi-root aware via resolve_logical.
38
43
  def resolve(ref):
39
44
  if ":" not in ref:
40
- return f".agent-src.uncompressed/skills/{ref}/SKILL.md", "skill"
41
- kind, rest = ref.split(":", 1)
45
+ kind, rest = "skill", ref
46
+ else:
47
+ kind, rest = ref.split(":", 1)
42
48
  if kind == "skill":
43
- return f".agent-src.uncompressed/skills/{rest}/SKILL.md", "skill"
49
+ # Legacy projected path first (fast path), then multi-root source.
50
+ for p in (
51
+ f".agent-src/skills/{rest}/SKILL.md",
52
+ f".agent-src.uncompressed/skills/{rest}/SKILL.md",
53
+ ):
54
+ if os.path.exists(p):
55
+ return p, "skill"
56
+ hit = resolve_logical(f"skills/{rest}/SKILL.md")
57
+ return (str(hit) if hit else f".agent-src.uncompressed/skills/{rest}/SKILL.md"), "skill"
44
58
  if kind == "command":
45
59
  for p in (
60
+ f".agent-src/commands/{rest}.md",
46
61
  f".agent-src.uncompressed/commands/{rest}.md",
47
62
  f".agent-src.uncompressed/commands/{rest}/INDEX.md",
48
63
  ):
49
64
  if os.path.exists(p):
50
65
  return p, "command"
66
+ for logical in (f"commands/{rest}.md", f"commands/{rest}/INDEX.md"):
67
+ hit = resolve_logical(logical)
68
+ if hit:
69
+ return str(hit), "command"
51
70
  return f".agent-src.uncompressed/commands/{rest}.md", "command"
52
71
  if kind == "guideline":
53
72
  return f"docs/guidelines/{rest}.md", "guideline"
@@ -26,13 +26,21 @@ result=$(python3 <<'PY'
26
26
  import os, sys, time, hashlib, pathlib, glob
27
27
  sys.path.insert(0, "scripts")
28
28
  from validate_frontmatter import parse_frontmatter, load_schema, validate
29
+ from _lib.agent_src import artefact_roots
29
30
 
30
- root = ".agent-src.uncompressed/skills"
31
- skills = sorted(
32
- d for d in os.listdir(root)
33
- if os.path.isdir(os.path.join(root, d))
34
- and os.path.exists(os.path.join(root, d, "SKILL.md"))
35
- )
31
+ # ADR-017: walk every source root, collect skill dirs by logical name.
32
+ # First root wins on collision (legacy > core > packs per agent_src).
33
+ skills_by_name: dict[str, str] = {}
34
+ for src_root in artefact_roots():
35
+ sd = src_root / "skills"
36
+ if not sd.exists():
37
+ continue
38
+ for d in sorted(sd.iterdir()):
39
+ if not d.is_dir():
40
+ continue
41
+ if (d / "SKILL.md").exists() and d.name not in skills_by_name:
42
+ skills_by_name[d.name] = str(d / "SKILL.md")
43
+ skills = sorted(skills_by_name.keys())
36
44
  total = len(skills)
37
45
  print(f"TOTAL_SKILLS={total}")
38
46
 
@@ -46,7 +54,7 @@ schema = load_schema("skill")
46
54
 
47
55
  failures = []
48
56
  for name in sample:
49
- path = os.path.join(root, name, "SKILL.md")
57
+ path = skills_by_name[name]
50
58
  text = open(path, encoding="utf-8").read()
51
59
  fm, _ = parse_frontmatter(text)
52
60
  if fm is None:
@@ -7,7 +7,7 @@ Verifies the 3-step Quickstart from a fresh-project perspective:
7
7
  `.agent-settings.yml` with the documented default `cost_profile`.
8
8
  2. The decision_engine block (P2.x of road-to-productization) parses
9
9
  cleanly through the same engine parser the runtime uses.
10
- 3. The work-engine state-file format (`agents/state/<id>.json`) is
10
+ 3. The work-engine state-file format (`agents/runtime/state/<id>.json`) is
11
11
  emit-ready — schema for `decision_result` matches the contract.
12
12
 
13
13
  What it does NOT do:
@@ -20,6 +20,7 @@ Exit codes: 0 = green; 1 = one or more checks failed; 2 = setup error.
20
20
  """
21
21
  from __future__ import annotations
22
22
 
23
+ import os
23
24
  import shutil
24
25
  import subprocess
25
26
  import sys
@@ -49,8 +50,10 @@ def _check_installer_runs(tmpdir: Path) -> tuple[int, Path | None]:
49
50
  str(ROOT),
50
51
  "--skip-bridges",
51
52
  ]
53
+ # ADR-020: --project is reserved for maintainers; CI is a maintainer context.
54
+ env = {**os.environ, "AGENT_CONFIG_DEV_MODE": "1"}
52
55
  try:
53
- result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
56
+ result = subprocess.run(cmd, capture_output=True, text=True, timeout=60, env=env)
54
57
  except subprocess.TimeoutExpired:
55
58
  return _fail("installer timed out after 60s"), None
56
59
  if result.returncode != 0:
@@ -82,7 +85,13 @@ def _check_default_profile(settings: Path) -> int:
82
85
 
83
86
  def _check_decision_engine_block(settings: Path) -> int:
84
87
  """Step 3 — decision_engine block parses through the engine parser."""
85
- sys.path.insert(0, str(ROOT / ".agent-src.uncompressed" / "templates" / "scripts"))
88
+ sys.path.insert(0, str(ROOT / "scripts"))
89
+ from _lib.agent_src import resolve_logical # noqa: E402
90
+
91
+ template_scripts = resolve_logical("templates/scripts") or (
92
+ ROOT / ".agent-src.uncompressed" / "templates" / "scripts"
93
+ )
94
+ sys.path.insert(0, str(template_scripts))
86
95
  try:
87
96
  from work_engine.scoring.decision_engine import ( # type: ignore[import-not-found]
88
97
  DecisionEngineSettings,
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env python3
2
+ """Snapshot the agent-config build outputs for byte-identity verification.
3
+
4
+ Used by monorepo Phase 4 (physical layout move) to assert that the
5
+ pre-move and post-move `task sync` + `task build-discovery` outputs
6
+ match byte-for-byte except for `artefacts[].path` values.
7
+
8
+ Captures sha256 of every file under:
9
+ - .agent-src/
10
+ - .augment/
11
+ - dist/discovery/discovery-manifest.json (also stores parsed copy
12
+ with paths stripped so the post-move diff is path-only)
13
+
14
+ CLI:
15
+ --out PATH write JSON to this path (default: dist/migration/pre-move-snapshot.json)
16
+ """
17
+ from __future__ import annotations
18
+
19
+ import argparse
20
+ import hashlib
21
+ import json
22
+ import sys
23
+ from pathlib import Path
24
+ from typing import Any
25
+
26
+ ROOT = Path(__file__).resolve().parents[1]
27
+ DEFAULT_OUT = ROOT / "dist" / "migration" / "pre-move-snapshot.json"
28
+
29
+ TARGETS = (
30
+ ROOT / ".agent-src",
31
+ ROOT / ".augment",
32
+ )
33
+ MANIFEST = ROOT / "dist" / "discovery" / "discovery-manifest.json"
34
+
35
+
36
+ def _sha256(path: Path) -> str:
37
+ h = hashlib.sha256()
38
+ with path.open("rb") as f:
39
+ for chunk in iter(lambda: f.read(65536), b""):
40
+ h.update(chunk)
41
+ return h.hexdigest()
42
+
43
+
44
+ # Runtime artefacts that never participate in byte-identity verification.
45
+ # Eval last-run.json + pytest caches are gitignored; including them just
46
+ # adds noise when the worktree is clean.
47
+ _SKIP_NAMES = frozenset({"last-run.json"})
48
+ _SKIP_DIRS = frozenset({".pytest_cache", "__pycache__", ".mypy_cache",
49
+ ".ruff_cache", "node_modules", ".DS_Store"})
50
+
51
+
52
+ def _hash_tree(root: Path) -> dict[str, str]:
53
+ if not root.exists():
54
+ return {}
55
+ hashes: dict[str, str] = {}
56
+ for p in sorted(root.rglob("*")):
57
+ if not p.is_file():
58
+ continue
59
+ if p.name in _SKIP_NAMES:
60
+ continue
61
+ if any(part in _SKIP_DIRS for part in p.parts):
62
+ continue
63
+ hashes[p.relative_to(ROOT).as_posix()] = _sha256(p)
64
+ return hashes
65
+
66
+
67
+ def _logical_path(rel: str) -> str:
68
+ """Strip any source-root prefix (legacy or packages/*) so the diff
69
+ compares the artefact's logical identity, not its physical location.
70
+ Non-source paths are returned unchanged.
71
+ """
72
+ posix = rel.replace("\\", "/")
73
+ if posix.startswith(".agent-src.uncompressed/"):
74
+ return posix[len(".agent-src.uncompressed/"):]
75
+ if posix.startswith("packages/"):
76
+ marker = "/.agent-src.uncompressed/"
77
+ idx = posix.find(marker)
78
+ if idx != -1:
79
+ return posix[idx + len(marker):]
80
+ return posix
81
+
82
+
83
+ def _manifest_path_stripped(manifest_path: Path) -> dict[str, Any] | None:
84
+ if not manifest_path.exists():
85
+ return None
86
+ data = json.loads(manifest_path.read_text(encoding="utf-8"))
87
+ # Strip `path` from every artefact so the diff is path-only, then
88
+ # re-sort by (category, checksum) so the list order is content-stable
89
+ # — the original sort is path-based, which shifts when files move
90
+ # between roots even though no artefact body changed.
91
+ artefacts = data.get("artefacts", []) or []
92
+ for a in artefacts:
93
+ a.pop("path", None)
94
+ artefacts.sort(key=lambda a: (a.get("category", ""), a.get("checksum", "")))
95
+ data["artefacts"] = artefacts
96
+ # Normalise unassigned / documented_unassigned to logical paths and
97
+ # re-sort so the post-move diff is content-only.
98
+ for key in ("unassigned", "documented_unassigned"):
99
+ entries = data.get(key) or []
100
+ for e in entries:
101
+ if isinstance(e, dict) and "path" in e:
102
+ e["path"] = _logical_path(e["path"])
103
+ entries.sort(key=lambda e: (e.get("path", ""), e.get("category", "")))
104
+ data[key] = entries
105
+ # Drop volatile fields: timestamp, the manifest's own checksum (which
106
+ # covers everything above and changes with any path text), and the
107
+ # scanner_version (sha of the build script — moves with code edits).
108
+ data.pop("generated_at", None)
109
+ data.pop("checksum", None)
110
+ data.pop("scanner_version", None)
111
+ return data
112
+
113
+
114
+ def _build_snapshot() -> dict[str, Any]:
115
+ snap: dict[str, Any] = {"schema_version": "1", "trees": {}}
116
+ for tgt in TARGETS:
117
+ key = tgt.relative_to(ROOT).as_posix()
118
+ snap["trees"][key] = _hash_tree(tgt)
119
+ snap["manifest_sha256"] = _sha256(MANIFEST) if MANIFEST.exists() else None
120
+ snap["manifest_path_stripped"] = _manifest_path_stripped(MANIFEST)
121
+ return snap
122
+
123
+
124
+ def main() -> int:
125
+ ap = argparse.ArgumentParser(description=__doc__)
126
+ ap.add_argument("--out", type=Path, default=DEFAULT_OUT)
127
+ args = ap.parse_args()
128
+
129
+ snap = _build_snapshot()
130
+ args.out.parent.mkdir(parents=True, exist_ok=True)
131
+ args.out.write_text(
132
+ json.dumps(snap, indent=2, sort_keys=True, ensure_ascii=False) + "\n",
133
+ encoding="utf-8",
134
+ )
135
+ n_files = sum(len(t) for t in snap["trees"].values())
136
+ print(f"Snapshot: {args.out.relative_to(ROOT)}")
137
+ print(f" files hashed : {n_files}")
138
+ print(f" trees : {list(snap['trees'])}")
139
+ print(f" manifest sha256 : {snap['manifest_sha256'][:16] if snap['manifest_sha256'] else 'MISSING'}")
140
+ return 0
141
+
142
+
143
+ if __name__ == "__main__":
144
+ sys.exit(main())
@@ -4,7 +4,7 @@
4
4
  Sends the refactored package-root AGENTS.md and the consumer template
5
5
  to Sonnet 4.5 + gpt-4o, asks each member to answer five questions
6
6
  that simulate a fresh agent landing on the file. Records qualitative
7
- verdicts in agents/reports/thin-root-platform-spotcheck.md.
7
+ verdicts in agents/runtime/reports/thin-root-platform-spotcheck.md.
8
8
  """
9
9
  from __future__ import annotations
10
10
 
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env python3
2
+ """Sync `.github/topics.yml` + `.github/about.yml` to the GitHub repo.
3
+
4
+ Reads two on-disk manifests and pushes them via the REST API:
5
+ * `PUT /repos/{owner}/{repo}/topics` \u2014 topics list
6
+ * `PATCH /repos/{owner}/{repo}` \u2014 description + homepage
7
+
8
+ Default mode is `--dry-run`: fetches remote state, prints a unified
9
+ diff (remote \u2192 desired), exits 0 (or 2 if drift exists when
10
+ `--strict` is passed). `--apply` is required to mutate; it also
11
+ appends an audit row to `agents/evidence/notes/visibility-sync-audit.md`.
12
+
13
+ Auth: `GITHUB_TOKEN` env var. The repo slug is taken from
14
+ `package.json` `repository.url` (parsed) or `--repo owner/name`.
15
+
16
+ Stdlib only \u2014 `urllib.request` matches the convention in
17
+ `scripts/_lib/update_check.py`.
18
+
19
+ Roadmap: agents/roadmaps/strategic-visibility-mcp-topics-positioning.md Phase 1.
20
+ """
21
+ from __future__ import annotations
22
+
23
+ import argparse
24
+ import datetime as _dt
25
+ import difflib
26
+ import json
27
+ import os
28
+ import re
29
+ import sys
30
+ import urllib.error
31
+ import urllib.request
32
+ from pathlib import Path
33
+
34
+ import yaml
35
+
36
+ ROOT = Path(__file__).resolve().parents[1]
37
+ TOPICS_FILE = ROOT / ".github" / "topics.yml"
38
+ ABOUT_FILE = ROOT / ".github" / "about.yml"
39
+ AUDIT_FILE = ROOT / "agents" / "notes" / "visibility-sync-audit.md"
40
+ API = "https://api.github.com"
41
+
42
+
43
+ def _load_yaml(path: Path) -> dict:
44
+ return yaml.safe_load(path.read_text(encoding="utf-8")) or {}
45
+
46
+
47
+ def _resolve_repo(explicit: str | None) -> str:
48
+ if explicit:
49
+ return explicit
50
+ pkg = json.loads((ROOT / "package.json").read_text(encoding="utf-8"))
51
+ url = (pkg.get("repository") or {}).get("url") or ""
52
+ m = re.search(r"github\.com[:/]+([^/]+/[^/.]+)", url)
53
+ if not m:
54
+ sys.exit("ERROR: cannot resolve owner/repo from package.json; pass --repo")
55
+ return m.group(1)
56
+
57
+
58
+ def _request(method: str, url: str, token: str, body: dict | None = None) -> dict:
59
+ data = json.dumps(body).encode("utf-8") if body is not None else None
60
+ req = urllib.request.Request(url, data=data, method=method)
61
+ req.add_header("Authorization", f"Bearer {token}")
62
+ req.add_header("Accept", "application/vnd.github+json")
63
+ req.add_header("X-GitHub-Api-Version", "2022-11-28")
64
+ req.add_header("User-Agent", "event4u-agent-config-sync")
65
+ if body is not None:
66
+ req.add_header("Content-Type", "application/json")
67
+ try:
68
+ with urllib.request.urlopen(req, timeout=20) as resp: # noqa: S310
69
+ return json.loads(resp.read() or b"{}")
70
+ except urllib.error.HTTPError as e:
71
+ sys.exit(f"ERROR: {method} {url} \u2192 HTTP {e.code}: {e.read().decode('utf-8', 'replace')[:300]}")
72
+ except urllib.error.URLError as e:
73
+ sys.exit(f"ERROR: {method} {url} \u2192 {e.reason}")
74
+
75
+
76
+ def _diff(label: str, remote, desired) -> list[str]:
77
+ a = json.dumps(remote, indent=2, sort_keys=True).splitlines()
78
+ b = json.dumps(desired, indent=2, sort_keys=True).splitlines()
79
+ return list(difflib.unified_diff(a, b, fromfile=f"remote/{label}", tofile=f"desired/{label}", lineterm=""))
80
+
81
+
82
+ def _audit(repo: str, mutations: list[str]) -> None:
83
+ AUDIT_FILE.parent.mkdir(parents=True, exist_ok=True)
84
+ if not AUDIT_FILE.exists():
85
+ AUDIT_FILE.write_text("# Visibility sync audit log\n\nAppend-only. Every `--apply` run logs one block.\n", encoding="utf-8")
86
+ ts = _dt.datetime.now(_dt.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
87
+ block = [f"\n## {ts} \u2014 {repo}\n"]
88
+ block.extend(f"- {m}\n" for m in mutations)
89
+ with AUDIT_FILE.open("a", encoding="utf-8") as f:
90
+ f.writelines(block)
91
+
92
+
93
+ def main() -> int:
94
+ ap = argparse.ArgumentParser(description=__doc__.splitlines()[0])
95
+ ap.add_argument("--apply", action="store_true", help="actually mutate the remote (default: dry-run)")
96
+ ap.add_argument("--strict", action="store_true", help="exit 2 if drift exists (dry-run only)")
97
+ ap.add_argument("--quiet", action="store_true")
98
+ ap.add_argument("--repo", help="owner/name (default: parsed from package.json)")
99
+ args = ap.parse_args()
100
+
101
+ repo = _resolve_repo(args.repo)
102
+ token = os.environ.get("GITHUB_TOKEN")
103
+ if not token:
104
+ sys.exit("ERROR: GITHUB_TOKEN not set")
105
+
106
+ topics_doc = _load_yaml(TOPICS_FILE)
107
+ about_doc = _load_yaml(ABOUT_FILE)
108
+ desired_topics = sorted(topics_doc.get("topics") or [])
109
+ desired_about = {"description": about_doc.get("description", ""), "homepage": about_doc.get("homepage", "")}
110
+
111
+ remote_topics = sorted((_request("GET", f"{API}/repos/{repo}/topics", token).get("names") or []))
112
+ repo_payload = _request("GET", f"{API}/repos/{repo}", token)
113
+ remote_about = {"description": repo_payload.get("description") or "", "homepage": repo_payload.get("homepage") or ""}
114
+
115
+ topic_diff = _diff("topics", remote_topics, desired_topics)
116
+ about_diff = _diff("about", remote_about, desired_about)
117
+ has_drift = bool(topic_diff or about_diff)
118
+
119
+ if not args.quiet:
120
+ if topic_diff:
121
+ print("\n".join(topic_diff))
122
+ if about_diff:
123
+ print("\n".join(about_diff))
124
+ if not has_drift:
125
+ print(f"\u2705 {repo}: topics + about already in sync")
126
+
127
+ if not args.apply:
128
+ return 2 if (has_drift and args.strict) else 0
129
+
130
+ mutations: list[str] = []
131
+ if topic_diff:
132
+ _request("PUT", f"{API}/repos/{repo}/topics", token, {"names": desired_topics})
133
+ mutations.append(f"topics \u2192 {desired_topics}")
134
+ if about_diff:
135
+ _request("PATCH", f"{API}/repos/{repo}", token, desired_about)
136
+ mutations.append(f"about \u2192 {desired_about}")
137
+ if mutations:
138
+ _audit(repo, mutations)
139
+ if not args.quiet:
140
+ print(f"\u2705 {repo}: applied {len(mutations)} mutation(s); audit appended")
141
+ elif not args.quiet:
142
+ print(f"\u2705 {repo}: nothing to apply")
143
+ return 0
144
+
145
+
146
+ if __name__ == "__main__":
147
+ raise SystemExit(main())
@@ -41,17 +41,27 @@ DEFAULT_GITIGNORE = ".gitignore"
41
41
  DEFAULT_TEMPLATE = Path(__file__).resolve().parent.parent / "config" / "gitignore-block.txt"
42
42
 
43
43
  # Legacy patterns that lived in older versions of config/gitignore-block.txt
44
- # before runtime artefacts moved under /agents/ (May 2026). They get stripped
45
- # wherever they appear in the consumer's .gitignore — inside the managed block
46
- # or outside (older installers / hand-edits). Current canonical equivalents
47
- # (e.g. /agents/.agent-chat-history) come from the template and are NOT
48
- # affected. Leading-slash variants are matched defensively.
44
+ # before runtime artefacts moved under /agents/runtime/ (May 2026). They get
45
+ # stripped wherever they appear in the consumer's .gitignore — inside the
46
+ # managed block or outside (older installers / hand-edits). Current canonical
47
+ # equivalents (e.g. /agents/runtime/.agent-prices.md) come from the template
48
+ # and are NOT affected. Leading-slash variants are matched defensively.
49
49
  LEGACY_PATTERNS: tuple[str, ...] = (
50
50
  ".agent-chat-history",
51
51
  ".agent-chat-history.bak",
52
52
  ".agent-chat-history.*.bak",
53
53
  ".agent-prices.md",
54
54
  ".council-tmp/",
55
+ # 2.x intermediate: prices cache lived directly under agents/ before
56
+ # consolidating under agents/runtime/.
57
+ "agents/.agent-prices.md",
58
+ # Budget history JSONLs — previously listed explicitly at project
59
+ # root or under agents/; now covered by the /agents/runtime/
60
+ # catch-all in the managed block.
61
+ ".augment-budget-history.jsonl",
62
+ ".rule-budget-history.jsonl",
63
+ "agents/.augment-budget-history.jsonl",
64
+ "agents/.rule-budget-history.jsonl",
55
65
  )
56
66
 
57
67
 
@@ -20,31 +20,59 @@ import re
20
20
  import sys
21
21
  from pathlib import Path
22
22
 
23
+ sys.path.insert(0, str(Path(__file__).resolve().parent))
24
+ from _lib.agent_src import artefact_roots # noqa: E402
25
+
23
26
  REPO_ROOT = Path(__file__).resolve().parent.parent
24
- SRC = REPO_ROOT / ".agent-src.uncompressed"
25
27
 
26
28
 
27
29
  def count(kind: str) -> int:
28
- if kind == "skills":
29
- return sum(1 for _ in (SRC / "skills").rglob("SKILL.md"))
30
30
  if kind == "guidelines":
31
31
  # Guidelines live under docs/guidelines/{topic}/ — they are reference
32
32
  # material, not packaged artefacts. Recursive walk to count every .md.
33
33
  return sum(1 for _ in (REPO_ROOT / "docs" / "guidelines").rglob("*.md"))
34
- if kind == "personas":
35
- # personas live as flat .md files, README excluded
36
- pdir = SRC / "personas"
37
- if not pdir.exists():
38
- return 0
39
- return sum(1 for f in pdir.glob("*.md") if f.name != "README.md")
40
- if kind == "commands":
41
- # Commands may be flat (`commands/<name>.md`) or nested under a
42
- # cluster directory (`commands/<cluster>/<sub>.md`). Walk the tree
43
- # and skip the AGENTS.md reference orchestrator.
44
- return sum(
45
- 1 for f in (SRC / kind).rglob("*.md") if f.name != "AGENTS.md"
46
- )
47
- return sum(1 for _ in (SRC / kind).glob("*.md"))
34
+ total = 0
35
+ seen: set[str] = set()
36
+ for root in artefact_roots():
37
+ subdir = root / kind
38
+ if not subdir.exists():
39
+ continue
40
+ if kind == "skills":
41
+ for f in subdir.rglob("SKILL.md"):
42
+ rel = f.relative_to(root).as_posix()
43
+ if rel in seen:
44
+ continue
45
+ seen.add(rel)
46
+ total += 1
47
+ elif kind == "personas":
48
+ # personas live as flat .md files, README excluded
49
+ for f in subdir.glob("*.md"):
50
+ if f.name == "README.md":
51
+ continue
52
+ rel = f.relative_to(root).as_posix()
53
+ if rel in seen:
54
+ continue
55
+ seen.add(rel)
56
+ total += 1
57
+ elif kind == "commands":
58
+ # Commands may be flat or nested under a cluster directory.
59
+ # Skip the AGENTS.md reference orchestrator.
60
+ for f in subdir.rglob("*.md"):
61
+ if f.name == "AGENTS.md":
62
+ continue
63
+ rel = f.relative_to(root).as_posix()
64
+ if rel in seen:
65
+ continue
66
+ seen.add(rel)
67
+ total += 1
68
+ else:
69
+ for f in subdir.glob("*.md"):
70
+ rel = f.relative_to(root).as_posix()
71
+ if rel in seen:
72
+ continue
73
+ seen.add(rel)
74
+ total += 1
75
+ return total
48
76
 
49
77
 
50
78
  # file → list of (regex, kind)