claude-dev-env 2.15.1 → 2.17.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 (841) hide show
  1. package/.agents/agents/.claude/CLAUDE.md +1 -0
  2. package/{agents → .agents/agents}/AGENTS.md +8 -2
  3. package/{agents → .agents/agents}/test_agent_frontmatter.py +1 -1
  4. package/.agents/skills/.claude/CLAUDE.md +1 -0
  5. package/.agents/skills/AGENTS.md +71 -0
  6. package/.agents/skills/_shared/.claude/CLAUDE.md +1 -0
  7. package/{skills → .agents/skills}/_shared/AGENTS.md +2 -2
  8. package/.agents/skills/_shared/advisor/.claude/CLAUDE.md +1 -0
  9. package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +1 -0
  10. package/{skills → .agents/skills}/_shared/pr-loop/AGENTS.md +22 -15
  11. package/{skills → .agents/skills}/_shared/pr-loop/portable-driver.md +6 -7
  12. package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +1 -0
  13. package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +9 -0
  14. package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +1 -0
  15. package/{skills → .agents/skills}/_shared/pr-loop/scripts/AGENTS.md +1 -1
  16. package/{skills → .agents/skills}/_shared/pr-loop/scripts/portable_converge_driver.py +25 -16
  17. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +1 -0
  18. package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +6 -1
  19. package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +1 -5
  20. package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_audit_prompt.py +9 -3
  21. package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_audit_outcomes.py +1 -1
  22. package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_fix_outcomes.py +1 -1
  23. package/.agents/skills/autoconverge/.claude/CLAUDE.md +1 -0
  24. package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +1 -0
  25. package/.agents/skills/autoconverge/reference/convergence-gates.md +31 -0
  26. package/{skills → .agents/skills}/autoconverge/reference/convergence.md +8 -10
  27. package/{skills → .agents/skills}/autoconverge/reference/gotchas.md +1 -1
  28. package/{skills → .agents/skills}/autoconverge/reference/stop-conditions.md +1 -1
  29. package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +1 -0
  30. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +1 -0
  31. package/{skills → .agents/skills}/autoconverge/workflow/converge.codex-gate.test.mjs +1 -1
  32. package/{skills → .agents/skills}/autoconverge/workflow/converge.contract.test.mjs +1 -1
  33. package/{skills → .agents/skills}/autoconverge/workflow/converge.mjs +3 -3
  34. package/.agents/skills/cert-classification-rule/SKILL.md +224 -0
  35. package/.agents/skills/cert-classification-rule/scripts/resort_cert_folders.py +158 -0
  36. package/{skills → .agents/skills}/e-code-review/reference/effort-evaluation.md +1 -1
  37. package/.agents/skills/eli5/SKILL.md +128 -0
  38. package/.agents/skills/eli5/reference/task-seeds.md +11 -0
  39. package/.agents/skills/everything-search/.claude/CLAUDE.md +1 -0
  40. package/.agents/skills/fresh-branch/.claude/CLAUDE.md +1 -0
  41. package/{skills → .agents/skills}/fresh-branch/scripts/test_create_fresh_branch.py +2 -3
  42. package/.agents/skills/grok-spawn/.claude/CLAUDE.md +1 -0
  43. package/.agents/skills/name-by-capability-audit/SKILL.md +67 -0
  44. package/.agents/skills/name-by-capability-audit/reference/fetch-commands.md +29 -0
  45. package/.agents/skills/name-by-capability-audit/reference/offense-examples.md +32 -0
  46. package/.agents/skills/name-by-capability-audit/reference/report-template.md +29 -0
  47. package/.agents/skills/name-by-capability-audit/reference/rule-checklist.md +38 -0
  48. package/.agents/skills/name-by-capability-audit/reference/task-seeds.md +9 -0
  49. package/.agents/skills/pr-cleanup/SKILL.md +99 -0
  50. package/{skills → .agents/skills}/prototype/reference/honest-limitations.md +1 -1
  51. package/{skills → .agents/skills}/prototype/reference/promotion-tasks.md +1 -1
  52. package/{skills → .agents/skills}/prototype/scripts/test_build_sandbox_settings.py +2 -2
  53. package/{skills → .agents/skills}/prototype/scripts/test_probe_sandbox_safety.py +1 -1
  54. package/{skills → .agents/skills}/prototype/workflows/promotion.md +2 -2
  55. package/.agents/skills/rebase/.claude/CLAUDE.md +1 -0
  56. package/.agents/skills/review-router/SKILL.md +51 -0
  57. package/.agents/skills/review-router/reference/route-policy.json +7 -0
  58. package/.agents/skills/review-router/reference/task-seeds.md +1 -0
  59. package/.agents/skills/review-router/scripts/conftest.py +4 -0
  60. package/.agents/skills/review-router/scripts/review_router.py +50 -0
  61. package/.agents/skills/review-router/scripts/review_router_cli.py +211 -0
  62. package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +1 -0
  63. package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
  64. package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +13 -0
  65. package/.agents/skills/review-router/scripts/test_review_router.py +23 -0
  66. package/.agents/skills/review-router/scripts/test_review_router_cli.py +47 -0
  67. package/.agents/skills/review-tier/SKILL.md +56 -0
  68. package/.agents/skills/review-tier/reference/task-seeds.md +1 -0
  69. package/.agents/skills/review-tier/reference/tier-policy.json +9 -0
  70. package/.agents/skills/review-tier/scripts/conftest.py +4 -0
  71. package/.agents/skills/review-tier/scripts/review_tier.py +332 -0
  72. package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +1 -0
  73. package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
  74. package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +29 -0
  75. package/.agents/skills/review-tier/scripts/test_generation.py +171 -0
  76. package/.agents/skills/review-tier/scripts/test_review_tier.py +33 -0
  77. package/.agents/skills/run-claude-dev-env/SKILL.md +84 -0
  78. package/.agents/skills/run-claude-dev-env/driver.mjs +239 -0
  79. package/.agents/skills/session-log/.claude/CLAUDE.md +1 -0
  80. package/{skills → .agents/skills}/session-log/SKILL.md +1 -1
  81. package/.agents/skills/session-tidy/.claude/CLAUDE.md +1 -0
  82. package/.agents/skills/shared-extraction-audit/SKILL.md +160 -0
  83. package/.agents/skills/shared-extraction-audit/reference/examples.md +46 -0
  84. package/.agents/skills/shared-extraction-audit/reference/offense-taxonomy.md +100 -0
  85. package/.agents/skills/skill-builder/.claude/CLAUDE.md +1 -0
  86. package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +1 -0
  87. package/{skills → .agents/skills}/skill-builder/references/deterministic-elements.md +1 -1
  88. package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +1 -0
  89. package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +1 -0
  90. package/.agents/skills/source-command-logifix/SKILL.md +29 -0
  91. package/.agents/skills/source-command-sr-loop/SKILL.md +58 -0
  92. package/.agents/skills/task-build/.claude/CLAUDE.md +1 -0
  93. package/.agents/skills/update/.claude/CLAUDE.md +1 -0
  94. package/.agents/skills-archived/AGENTS.md +45 -0
  95. package/.agents/skills-archived/anthropic-plan/.claude/CLAUDE.md +1 -0
  96. package/{skills → .agents/skills-archived}/anthropic-plan/AGENTS.md +1 -1
  97. package/.agents/skills-archived/anthropic-plan/scripts/.claude/CLAUDE.md +1 -0
  98. package/.agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +1 -0
  99. package/.agents/skills-archived/anthropic-plan/templates/.claude/CLAUDE.md +1 -0
  100. package/{skills → .agents/skills-archived}/anthropic-plan/test_skill_contract.py +4 -4
  101. package/.agents/skills-archived/anthropic-plan/workflow/.claude/CLAUDE.md +1 -0
  102. package/.agents/skills-archived/auditing-claude-config/.claude/CLAUDE.md +1 -0
  103. package/.agents/skills-archived/bugteam/.claude/CLAUDE.md +1 -0
  104. package/.agents/skills-archived/bugteam/reference/.claude/CLAUDE.md +1 -0
  105. package/.agents/skills-archived/bugteam/reference/obstacles/.claude/CLAUDE.md +1 -0
  106. package/.agents/skills-archived/bugteam/scripts/.claude/CLAUDE.md +1 -0
  107. package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_code_rules_gate.py +11 -1
  108. package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_fix_hookspath.py +11 -1
  109. package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_preflight.py +11 -1
  110. package/.agents/skills-archived/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +1 -0
  111. package/{skills → .agents/skills-archived}/bugteam/scripts/reflow_skill_md.py +3 -3
  112. package/.agents/skills-archived/codex-review/.claude/CLAUDE.md +1 -0
  113. package/.agents/skills-archived/codex-review/reference/.claude/CLAUDE.md +1 -0
  114. package/.agents/skills-archived/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
  115. package/{skills → .agents/skills-archived}/codex-review/scripts/codex_usage_probe.py +11 -1
  116. package/{skills → .agents/skills-archived}/codex-review/scripts/run_codex_review.py +11 -1
  117. package/{skills → .agents/skills-archived}/codex-review/test_skill_scaffold.py +4 -4
  118. package/{skills → .agents/skills-archived}/copilot-finding-triage/SKILL.md +1 -1
  119. package/.agents/skills-archived/copilot-review/.claude/CLAUDE.md +1 -0
  120. package/.agents/skills-archived/pr-converge/.claude/CLAUDE.md +1 -0
  121. package/{skills → .agents/skills-archived}/pr-converge/SKILL.md +6 -6
  122. package/.agents/skills-archived/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
  123. package/{skills → .agents/skills-archived}/pr-converge/pr_converge_skill_constants/AGENTS.md +1 -1
  124. package/{skills → .agents/skills-archived}/pr-converge/pr_converge_skill_constants/constants.py +1 -1
  125. package/.agents/skills-archived/pr-converge/reference/.claude/CLAUDE.md +1 -0
  126. package/{skills → .agents/skills-archived}/pr-converge/reference/multi-pr-orchestration.md +1 -1
  127. package/.agents/skills-archived/pr-converge/reference/obstacles/.claude/CLAUDE.md +1 -0
  128. package/{skills → .agents/skills-archived}/pr-converge/reference/per-tick.md +3 -3
  129. package/.agents/skills-archived/pr-converge/scripts/.claude/CLAUDE.md +1 -0
  130. package/{skills → .agents/skills-archived}/pr-converge/scripts/_pr_converge_path_setup.py +17 -2
  131. package/.agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
  132. package/{skills → .agents/skills-archived}/pr-converge/scripts/reflow_skill_md.py +2 -2
  133. package/{skills → .agents/skills-archived}/pr-converge/scripts/test__pr_converge_path_setup.py +7 -4
  134. package/{skills → .agents/skills-archived}/pr-converge/test_portable_pacer_gate.py +6 -2
  135. package/.agents/skills-archived/pr-converge/workflows/.claude/CLAUDE.md +1 -0
  136. package/{skills → .agents/skills-archived}/pr-converge/workflows/schedule-wakeup-loop.md +1 -1
  137. package/.agents/skills-archived/recall/.claude/CLAUDE.md +1 -0
  138. package/.agents/skills-archived/remember/.claude/CLAUDE.md +1 -0
  139. package/{skills → .agents/skills-archived}/split-pr/reference/proposal-format.md +1 -1
  140. package/.claude/CLAUDE.md +1 -0
  141. package/AGENTS.md +34 -58
  142. package/_shared/AGENTS.md +2 -0
  143. package/_shared/advisor/reference/sol-rung.md +2 -2
  144. package/_shared/advisor/reference/third-party-bind.md +1 -1
  145. package/_shared/advisor/scripts/tests/test_codex_sol_advisor.py +1 -1
  146. package/_shared/pr-loop/audit-reply-template.md +4 -0
  147. package/_shared/pr-loop/code-rules-gate.md +1 -1
  148. package/_shared/pr-loop/fix-protocol.md +7 -6
  149. package/_shared/pr-loop/gh-payloads.md +8 -6
  150. package/_shared/pr-loop/precatch-rubric.md +6 -5
  151. package/_shared/pr-loop/scripts/AGENTS.md +15 -0
  152. package/_shared/pr-loop/scripts/_pr_converge_path_setup.py +38 -0
  153. package/_shared/pr-loop/scripts/check_bugbot_ci.py +279 -0
  154. package/_shared/pr-loop/scripts/check_convergence.py +923 -0
  155. package/_shared/pr-loop/scripts/check_convergence_availability.py +275 -0
  156. package/_shared/pr-loop/scripts/check_convergence_gates.py +279 -0
  157. package/_shared/pr-loop/scripts/check_convergence_thread_gates.py +219 -0
  158. package/_shared/pr-loop/scripts/check_pending_reviews.py +154 -0
  159. package/_shared/pr-loop/scripts/codex_down_classifier.py +98 -0
  160. package/_shared/pr-loop/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
  161. package/_shared/pr-loop/scripts/codex_review_scripts_constants/AGENTS.md +18 -0
  162. package/_shared/pr-loop/scripts/codex_review_scripts_constants/__init__.py +1 -0
  163. package/_shared/pr-loop/scripts/codex_review_scripts_constants/classifier_constants.py +35 -0
  164. package/_shared/pr-loop/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +82 -0
  165. package/_shared/pr-loop/scripts/codex_review_scripts_constants/findings_constants.py +18 -0
  166. package/_shared/pr-loop/scripts/codex_review_scripts_constants/run_constants.py +53 -0
  167. package/_shared/pr-loop/scripts/codex_usage_probe.py +570 -0
  168. package/_shared/pr-loop/scripts/conftest.py +43 -0
  169. package/_shared/pr-loop/scripts/fetch_copilot_reviews.py +134 -0
  170. package/_shared/pr-loop/scripts/fixtures/auth_failure_synthetic.txt +1 -0
  171. package/_shared/pr-loop/scripts/fixtures/config_load_failure_v0.125.0.txt +1 -0
  172. package/_shared/pr-loop/scripts/fixtures/freeform_findings_v0.144.3.txt +6 -0
  173. package/_shared/pr-loop/scripts/fixtures/model_rejection_v0.125.0.jsonl +5 -0
  174. package/_shared/pr-loop/scripts/fixtures/structured_findings.txt +13 -0
  175. package/_shared/pr-loop/scripts/fixtures/success_stream_v0.144.3.jsonl +6 -0
  176. package/_shared/pr-loop/scripts/fixtures/unknown_failure_synthetic.txt +1 -0
  177. package/_shared/pr-loop/scripts/fixtures/usage_limit_synthetic.txt +1 -0
  178. package/_shared/pr-loop/scripts/parse_codex_findings.py +207 -0
  179. package/_shared/pr-loop/scripts/post_fix_reply.py +168 -0
  180. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
  181. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/AGENTS.md +18 -0
  182. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/__init__.py +0 -0
  183. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +70 -0
  184. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/pr_converge_constants.py +118 -0
  185. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +13 -0
  186. package/_shared/pr-loop/scripts/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
  187. package/_shared/pr-loop/scripts/pr_converge_skill_constants/AGENTS.md +26 -0
  188. package/_shared/pr-loop/scripts/pr_converge_skill_constants/__init__.py +0 -0
  189. package/_shared/pr-loop/scripts/pr_converge_skill_constants/constants.py +69 -0
  190. package/_shared/pr-loop/scripts/run_codex_review.py +609 -0
  191. package/_shared/pr-loop/scripts/test__pr_converge_path_setup.py +30 -0
  192. package/_shared/pr-loop/scripts/test_check_bugbot_ci.py +312 -0
  193. package/_shared/pr-loop/scripts/test_check_convergence.py +438 -0
  194. package/_shared/pr-loop/scripts/test_check_convergence_availability.py +391 -0
  195. package/_shared/pr-loop/scripts/test_check_convergence_codex.py +517 -0
  196. package/_shared/pr-loop/scripts/test_check_convergence_contract.py +400 -0
  197. package/_shared/pr-loop/scripts/test_check_convergence_fixture.py +179 -0
  198. package/_shared/pr-loop/scripts/test_check_convergence_gates.py +84 -0
  199. package/_shared/pr-loop/scripts/test_check_convergence_thread_gates.py +99 -0
  200. package/_shared/pr-loop/scripts/test_codex_down_classifier.py +143 -0
  201. package/_shared/pr-loop/scripts/test_codex_usage_probe.py +683 -0
  202. package/_shared/pr-loop/scripts/test_parse_codex_findings.py +130 -0
  203. package/_shared/pr-loop/scripts/test_run_codex_review.py +969 -0
  204. package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +1 -1
  205. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +1 -1
  206. package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +1 -1
  207. package/_shared/pr-loop/state-schema.md +20 -28
  208. package/_shared/process-tree/AGENTS.md +3 -3
  209. package/bin/AGENTS.md +17 -12
  210. package/bin/ever-shipped-skills.mjs +34 -3
  211. package/bin/install-constants.mjs +46 -12
  212. package/bin/install-plan.mjs +6 -1
  213. package/bin/install.agents-home.test.mjs +199 -0
  214. package/bin/install.cursor-rules.test.mjs +3 -3
  215. package/bin/install.mjs +153 -23
  216. package/bin/install.plan.test.mjs +1 -0
  217. package/bin/install.profile-root.test.mjs +54 -1
  218. package/bin/install.prune.test.mjs +23 -204
  219. package/bin/install.test.mjs +17 -5
  220. package/bin/publish-directory-pointer.mjs +175 -0
  221. package/bin/publish-directory-pointer.test.mjs +129 -0
  222. package/bin/resolve-install-root.mjs +80 -4
  223. package/bin/resolve-package-managed-directory.mjs +29 -0
  224. package/bin/resolve-package-managed-directory.test.mjs +97 -0
  225. package/commands/AGENTS.md +2 -0
  226. package/commands/sr-loop.md +3 -0
  227. package/docs/references/prose-style-enforcement.md +3 -7
  228. package/hooks/AGENTS.md +0 -3
  229. package/hooks/blocking/AGENTS.md +0 -2
  230. package/hooks/blocking/ask_user_question_shape_blocker.py +83 -0
  231. package/hooks/blocking/hedging_language_blocker.py +1 -0
  232. package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +10 -6
  233. package/hooks/blocking/pre_tool_use_dispatcher.py +2 -19
  234. package/hooks/blocking/state_description_blocker.py +1 -1
  235. package/hooks/blocking/test_ask_user_question_shape.py +69 -0
  236. package/hooks/blocking/test_code_rules_command_dispatch.py +1 -1
  237. package/hooks/blocking/test_code_rules_enforcer_magic_slice_bounds.py +1 -1
  238. package/hooks/blocking/test_code_rules_enforcer_split_annotations_length.py +1 -1
  239. package/hooks/blocking/test_code_rules_js_conventions.py +1 -1
  240. package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +1 -1
  241. package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +1 -1
  242. package/hooks/blocking/test_code_rules_js_sibling_return_object_key_drift.py +1 -1
  243. package/hooks/blocking/test_duplicate_rmtree_helper_blocker.py +1 -1
  244. package/hooks/blocking/test_fable_spawn_gate.py +1 -1
  245. package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +1 -1
  246. package/hooks/blocking/test_pre_tool_use_dispatcher.py +17 -58
  247. package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +9 -104
  248. package/hooks/blocking/test_state_description_blocker.py +1 -0
  249. package/hooks/blocking/test_stop_dispatcher.py +1 -26
  250. package/hooks/hooks.json +1 -1
  251. package/hooks/hooks_constants/AGENTS.md +0 -3
  252. package/hooks/hooks_constants/ask_user_question_shape.py +1 -1
  253. package/hooks/hooks_constants/ask_user_question_shape_constants.py +73 -0
  254. package/hooks/hooks_constants/bot_mention_comment_blocker_constants.py +1 -2
  255. package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -1
  256. package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +9 -0
  257. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +0 -7
  258. package/hooks/hooks_constants/stop_dispatcher_constants.py +0 -1
  259. package/hooks/hooks_constants/test_ask_user_question_shape.py +1 -1
  260. package/hooks/hooks_constants/test_prose_metrics_parity.py +29 -107
  261. package/hooks/hooks_constants/test_stop_dispatcher_constants.py +0 -1
  262. package/hooks/hooks_constants/working_style_prompt_constants.py +9 -10
  263. package/hooks/session/AGENTS.md +4 -1
  264. package/hooks/session/test_working_style_prompt.py +8 -4
  265. package/hooks/session/working_style_prompt.py +4 -2
  266. package/installable-surfaces.manifest.json +2 -3
  267. package/package.json +4 -8
  268. package/rules/AGENTS.md +2 -5
  269. package/rules/asd-ste100-language.md +39 -0
  270. package/rules/ask-user-question-required.md +1 -1
  271. package/rules/long-horizon-autonomy.md +1 -1
  272. package/scripts/AGENTS.md +1 -0
  273. package/scripts/Show-Asset.ps1 +106 -0
  274. package/scripts/active_capability_references.py +38 -8
  275. package/scripts/claude_chain_usage.py +2 -0
  276. package/scripts/codex_compat_watcher.py +1 -1
  277. package/scripts/dev_env_scripts_constants/active_capability_constants.py +5 -2
  278. package/scripts/dev_env_scripts_constants/claude_chain_usage_constants.py +4 -1
  279. package/scripts/test_validate_instruction_pairs.py +30 -3
  280. package/scripts/test_verify_installable_package.py +2 -1
  281. package/scripts/tests/test_codex_compat_watcher.py +5 -5
  282. package/scripts/tests/test_engine.py +4 -4
  283. package/scripts/tests/test_rules.py +5 -5
  284. package/system-prompts/AGENTS.md +8 -0
  285. package/system-prompts/software-engineer.xml +8 -3
  286. package/CLAUDE.md +0 -1
  287. package/_shared/pr-loop/scripts/README.md +0 -21
  288. package/agents/CLAUDE.md +0 -1
  289. package/docs/imagegen.md +0 -22
  290. package/hooks/blocking/eli11_reply_enforcer.py +0 -436
  291. package/hooks/blocking/plain_language_blocker.py +0 -758
  292. package/hooks/blocking/test_eli11_reply_enforcer.py +0 -390
  293. package/hooks/blocking/test_plain_language_blocker.py +0 -683
  294. package/hooks/blocking/test_plain_language_blocker_allowlist.py +0 -228
  295. package/hooks/diagnostic/AGENTS.md +0 -75
  296. package/hooks/diagnostic/CLAUDE.md +0 -1
  297. package/hooks/diagnostic/hook_log_extractor.py +0 -875
  298. package/hooks/diagnostic/hook_log_init.py +0 -202
  299. package/hooks/diagnostic/hook_log_stop_wrapper.py +0 -26
  300. package/hooks/diagnostic/migrations/2026-04-25-drop-themes-hook-events.sql +0 -3
  301. package/hooks/diagnostic/migrations/AGENTS.md +0 -16
  302. package/hooks/diagnostic/migrations/CLAUDE.md +0 -1
  303. package/hooks/diagnostic/migrations/README.md +0 -76
  304. package/hooks/diagnostic/queries/AGENTS.md +0 -19
  305. package/hooks/diagnostic/queries/CLAUDE.md +0 -1
  306. package/hooks/diagnostic/queries/block_details_for_hook.sql +0 -26
  307. package/hooks/diagnostic/queries/blocks_by_category.sql +0 -10
  308. package/hooks/diagnostic/queries/blocks_by_tool.sql +0 -9
  309. package/hooks/diagnostic/queries/blocks_last_7_days.sql +0 -11
  310. package/hooks/diagnostic/queries/top_blockers_last_24_hours.sql +0 -12
  311. package/hooks/diagnostic/queries/top_blockers_overall.sql +0 -12
  312. package/hooks/diagnostic/requirements-hook-logs-dev.txt +0 -2
  313. package/hooks/diagnostic/requirements-hook-logs.txt +0 -1
  314. package/hooks/diagnostic/schema.sql +0 -51
  315. package/hooks/diagnostic/test_hook_log_extractor.py +0 -1518
  316. package/hooks/diagnostic/test_hook_log_init.py +0 -227
  317. package/hooks/diagnostic/test_hook_log_stop_wrapper.py +0 -17
  318. package/hooks/hooks_constants/eli11_reply_enforcer_constants.py +0 -94
  319. package/hooks/hooks_constants/hook_log_extractor_constants.py +0 -233
  320. package/hooks/hooks_constants/plain_language_blocker_constants.py +0 -366
  321. package/hooks/hooks_constants/test_hook_log_extractor_constants.py +0 -123
  322. package/rules/doc-prose-cuts.md +0 -58
  323. package/rules/eli11-replies.md +0 -36
  324. package/rules/opus5-communication-contract.md +0 -45
  325. package/rules/plain-language.md +0 -9
  326. package/skills/AGENTS.md +0 -72
  327. package/skills/CLAUDE.md +0 -1
  328. package/skills/_shared/CLAUDE.md +0 -1
  329. package/skills/_shared/advisor/CLAUDE.md +0 -1
  330. package/skills/_shared/pr-loop/CLAUDE.md +0 -1
  331. package/skills/_shared/pr-loop/prompts/AGENTS.md +0 -9
  332. package/skills/_shared/pr-loop/prompts/CLAUDE.md +0 -1
  333. package/skills/_shared/pr-loop/scripts/CLAUDE.md +0 -1
  334. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +0 -1
  335. package/skills/anthropic-plan/CLAUDE.md +0 -1
  336. package/skills/anthropic-plan/scripts/CLAUDE.md +0 -1
  337. package/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/CLAUDE.md +0 -1
  338. package/skills/anthropic-plan/templates/CLAUDE.md +0 -1
  339. package/skills/anthropic-plan/workflow/CLAUDE.md +0 -1
  340. package/skills/auditing-claude-config/CLAUDE.md +0 -1
  341. package/skills/autoconverge/CLAUDE.md +0 -1
  342. package/skills/autoconverge/reference/CLAUDE.md +0 -1
  343. package/skills/autoconverge/workflow/CLAUDE.md +0 -1
  344. package/skills/autoconverge/workflow/autoconverge_report_constants/CLAUDE.md +0 -1
  345. package/skills/bugteam/CLAUDE.md +0 -1
  346. package/skills/bugteam/reference/CLAUDE.md +0 -1
  347. package/skills/bugteam/reference/obstacles/CLAUDE.md +0 -1
  348. package/skills/bugteam/scripts/CLAUDE.md +0 -1
  349. package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +0 -1
  350. package/skills/codex-review/CLAUDE.md +0 -1
  351. package/skills/codex-review/reference/CLAUDE.md +0 -1
  352. package/skills/codex-review/scripts/codex_review_scripts_constants/CLAUDE.md +0 -1
  353. package/skills/copilot-review/CLAUDE.md +0 -1
  354. package/skills/everything-search/CLAUDE.md +0 -1
  355. package/skills/fresh-branch/CLAUDE.md +0 -1
  356. package/skills/grok-spawn/CLAUDE.md +0 -1
  357. package/skills/grokify/evals/README.md +0 -72
  358. package/skills/grokify/evals/parse-payload.test.mjs +0 -171
  359. package/skills/grokify/evals/run-capability-evals.mjs +0 -545
  360. package/skills/pr-converge/CLAUDE.md +0 -1
  361. package/skills/pr-converge/pr_converge_skill_constants/CLAUDE.md +0 -1
  362. package/skills/pr-converge/reference/CLAUDE.md +0 -1
  363. package/skills/pr-converge/reference/obstacles/CLAUDE.md +0 -1
  364. package/skills/pr-converge/scripts/CLAUDE.md +0 -1
  365. package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +0 -1
  366. package/skills/pr-converge/workflows/CLAUDE.md +0 -1
  367. package/skills/rebase/CLAUDE.md +0 -1
  368. package/skills/recall/CLAUDE.md +0 -1
  369. package/skills/remember/CLAUDE.md +0 -1
  370. package/skills/session-log/CLAUDE.md +0 -1
  371. package/skills/session-tidy/CLAUDE.md +0 -1
  372. package/skills/skill-builder/CLAUDE.md +0 -1
  373. package/skills/skill-builder/references/CLAUDE.md +0 -1
  374. package/skills/skill-builder/templates/CLAUDE.md +0 -1
  375. package/skills/skill-builder/workflows/CLAUDE.md +0 -1
  376. package/skills/task-build/CLAUDE.md +0 -1
  377. package/skills/update/CLAUDE.md +0 -1
  378. /package/{agents → .agents/agents}/clean-coder.md +0 -0
  379. /package/{agents → .agents/agents}/code-quality-agent.md +0 -0
  380. /package/{agents → .agents/agents}/git-commit-crafter.md +0 -0
  381. /package/{agents → .agents/agents}/issue-tracker.md +0 -0
  382. /package/{agents → .agents/agents}/plan-packet-validator.md +0 -0
  383. /package/{agents → .agents/agents}/pr-description-writer.md +0 -0
  384. /package/{agents → .agents/agents}/session-advisor.md +0 -0
  385. /package/{agents → .agents/agents}/skill-writer-agent.md +0 -0
  386. /package/{skills → .agents/skills}/_shared/advisor/AGENTS.md +0 -0
  387. /package/{skills → .agents/skills}/_shared/advisor/advisor-protocol.md +0 -0
  388. /package/{skills → .agents/skills}/_shared/advisor/scripts/README.md +0 -0
  389. /package/{skills → .agents/skills}/_shared/end-of-run-gotcha-recommendations.md +0 -0
  390. /package/{skills → .agents/skills}/_shared/pr-loop/audit-contract.md +0 -0
  391. /package/{skills → .agents/skills}/_shared/pr-loop/audit-reply-template.md +0 -0
  392. /package/{skills → .agents/skills}/_shared/pr-loop/code-rules-gate.md +0 -0
  393. /package/{skills → .agents/skills}/_shared/pr-loop/fix-protocol.md +0 -0
  394. /package/{skills → .agents/skills}/_shared/pr-loop/gh-payloads.md +0 -0
  395. /package/{skills → .agents/skills}/_shared/pr-loop/post-audit-thread-contract.md +0 -0
  396. /package/{skills → .agents/skills}/_shared/pr-loop/precatch-rubric.md +0 -0
  397. /package/{skills → .agents/skills}/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -0
  398. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -0
  399. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_cli_utils.py +0 -0
  400. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_path_resolver.py +0 -0
  401. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_xml_utils.py +0 -0
  402. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/audit_category_schema.py +0 -0
  403. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_audit_prompt.py +0 -0
  404. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_converge_task_list.py +0 -0
  405. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_fix_prompt.py +0 -0
  406. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/init_loop_state.py +0 -0
  407. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/preflight_worktree.py +0 -0
  408. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/select_converge_pacer.py +0 -0
  409. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -0
  410. /package/{skills/pr-converge/pr_converge_skill_constants → .agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants}/__init__.py +0 -0
  411. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -0
  412. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -0
  413. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -0
  414. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -0
  415. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -0
  416. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/teardown_worktrees.py +0 -0
  417. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test__path_resolver.py +0 -0
  418. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -0
  419. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -0
  420. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -0
  421. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_init_loop_state.py +0 -0
  422. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -0
  423. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -0
  424. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -0
  425. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -0
  426. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_write_handoff.py +0 -0
  427. /package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_handoff.py +0 -0
  428. /package/{skills → .agents/skills}/_shared/pr-loop/state-schema.md +0 -0
  429. /package/{skills → .agents/skills}/_shared/pr-loop/worker-spawn.md +0 -0
  430. /package/{skills → .agents/skills}/autoconverge/AGENTS.md +0 -0
  431. /package/{skills → .agents/skills}/autoconverge/SKILL.md +0 -0
  432. /package/{skills → .agents/skills}/autoconverge/reference/AGENTS.md +0 -0
  433. /package/{skills → .agents/skills}/autoconverge/reference/closing-report.md +0 -0
  434. /package/{skills → .agents/skills}/autoconverge/reference/copilot-findings.md +0 -0
  435. /package/{skills → .agents/skills}/autoconverge/reference/headless-safety.md +0 -0
  436. /package/{skills → .agents/skills}/autoconverge/reference/multi-pr.md +0 -0
  437. /package/{skills → .agents/skills}/autoconverge/reference/self-closing-loop.md +0 -0
  438. /package/{skills → .agents/skills}/autoconverge/test_portable_pacer_gate.py +0 -0
  439. /package/{skills → .agents/skills}/autoconverge/workflow/AGENTS.md +0 -0
  440. /package/{skills → .agents/skills}/autoconverge/workflow/aggregate_runs.py +0 -0
  441. /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -0
  442. /package/{skills/pr-converge/scripts/pr_converge_scripts_constants → .agents/skills/autoconverge/workflow/autoconverge_report_constants}/__init__.py +0 -0
  443. /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -0
  444. /package/{skills → .agents/skills}/autoconverge/workflow/converge.clean-audit.test.mjs +0 -0
  445. /package/{skills → .agents/skills}/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -0
  446. /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-progress.test.mjs +0 -0
  447. /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -0
  448. /package/{skills → .agents/skills}/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -0
  449. /package/{skills → .agents/skills}/autoconverge/workflow/converge.p2-advance.test.mjs +0 -0
  450. /package/{skills → .agents/skills}/autoconverge/workflow/converge.path-aware.test.mjs +0 -0
  451. /package/{skills → .agents/skills}/autoconverge/workflow/converge.precatch.test.mjs +0 -0
  452. /package/{skills → .agents/skills}/autoconverge/workflow/converge.run-input.test.mjs +0 -0
  453. /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.mjs +0 -0
  454. /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -0
  455. /package/{skills → .agents/skills}/autoconverge/workflow/convergence_summary.py +0 -0
  456. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -0
  457. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -0
  458. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -0
  459. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -0
  460. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -0
  461. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -0
  462. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -0
  463. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -0
  464. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -0
  465. /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -0
  466. /package/{skills → .agents/skills}/autoconverge/workflow/render_report.py +0 -0
  467. /package/{skills → .agents/skills}/autoconverge/workflow/test_aggregate_runs.py +0 -0
  468. /package/{skills → .agents/skills}/autoconverge/workflow/test_convergence_summary.py +0 -0
  469. /package/{skills → .agents/skills}/autoconverge/workflow/test_render_report.py +0 -0
  470. /package/{skills → .agents/skills}/e-code-review/SKILL.md +0 -0
  471. /package/{skills → .agents/skills}/e-code-review/reference/fix.md +0 -0
  472. /package/{skills → .agents/skills}/e-code-review/reference/loop.md +0 -0
  473. /package/{skills → .agents/skills}/e-code-review/reference/low.md +0 -0
  474. /package/{skills → .agents/skills}/e-code-review/reference/medium.md +0 -0
  475. /package/{skills → .agents/skills}/e-code-review/reference/runner-selection.md +0 -0
  476. /package/{skills → .agents/skills}/e-code-review/reference/xhigh.md +0 -0
  477. /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/__init__.py +0 -0
  478. /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/effort_constants.py +0 -0
  479. /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/__init__.py +0 -0
  480. /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/finding_pipeline_constants.py +0 -0
  481. /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/grok_code_review_constants.py +0 -0
  482. /package/{skills → .agents/skills}/e-code-review/scripts/effort_defaults_evidence.json +0 -0
  483. /package/{skills → .agents/skills}/e-code-review/scripts/effort_evaluation.py +0 -0
  484. /package/{skills → .agents/skills}/e-code-review/scripts/finding_pipeline.py +0 -0
  485. /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/demanding.json +0 -0
  486. /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/easy.json +0 -0
  487. /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/medium.json +0 -0
  488. /package/{skills → .agents/skills}/e-code-review/scripts/grok_code_review.py +0 -0
  489. /package/{skills → .agents/skills}/e-code-review/scripts/test_effort_evaluation.py +0 -0
  490. /package/{skills → .agents/skills}/e-code-review/scripts/test_finding_pipeline.py +0 -0
  491. /package/{skills → .agents/skills}/e-code-review/scripts/test_grok_code_review.py +0 -0
  492. /package/{skills → .agents/skills}/e-simplify/SKILL.md +0 -0
  493. /package/{skills → .agents/skills}/everything-search/AGENTS.md +0 -0
  494. /package/{skills → .agents/skills}/everything-search/SKILL.md +0 -0
  495. /package/{skills → .agents/skills}/fresh-branch/AGENTS.md +0 -0
  496. /package/{skills → .agents/skills}/fresh-branch/SKILL.md +0 -0
  497. /package/{skills → .agents/skills}/fresh-branch/scripts/create_fresh_branch.py +0 -0
  498. /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_git_commands.py +0 -0
  499. /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/__init__.py +0 -0
  500. /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +0 -0
  501. /package/{skills → .agents/skills}/fresh-branch/scripts/pytest.ini +0 -0
  502. /package/{skills → .agents/skills}/fresh-branch/scripts/test_fresh_branch_git_commands.py +0 -0
  503. /package/{skills → .agents/skills}/grok-spawn/AGENTS.md +0 -0
  504. /package/{skills → .agents/skills}/grok-spawn/SKILL.md +0 -0
  505. /package/{skills → .agents/skills}/grok-spawn/reference/flag-profiles.md +0 -0
  506. /package/{skills → .agents/skills}/grok-spawn/reference/worker-briefs.md +0 -0
  507. /package/{skills → .agents/skills}/issue-tracker/SKILL.md +0 -0
  508. /package/{skills → .agents/skills}/issue-tracker/reference/epic-and-sub-issue-model.md +0 -0
  509. /package/{skills → .agents/skills}/issue-tracker/reference/handoff-schema.md +0 -0
  510. /package/{skills → .agents/skills}/issue-tracker/reference/operation-matrix.md +0 -0
  511. /package/{skills → .agents/skills}/orchestrator/SKILL.md +0 -0
  512. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate.py +0 -0
  513. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/__init__.py +0 -0
  514. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/__init__.py +0 -0
  515. /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/constants.py +0 -0
  516. /package/{skills → .agents/skills}/orchestrator/scripts/test_status_gate.py +0 -0
  517. /package/{skills → .agents/skills}/orchestrator-refresh/SKILL.md +0 -0
  518. /package/{skills → .agents/skills}/privacy-hygiene/SKILL.md +0 -0
  519. /package/{skills → .agents/skills}/privacy-hygiene/reference/sweep-procedure.md +0 -0
  520. /package/{skills → .agents/skills}/prototype/SKILL.md +0 -0
  521. /package/{skills → .agents/skills}/prototype/scripts/build_sandbox_settings.py +0 -0
  522. /package/{skills → .agents/skills}/prototype/scripts/conftest.py +0 -0
  523. /package/{skills → .agents/skills}/prototype/scripts/launch_sandbox.py +0 -0
  524. /package/{skills → .agents/skills}/prototype/scripts/probe_sandbox_safety.py +0 -0
  525. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/__init__.py +0 -0
  526. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  527. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -0
  528. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -0
  529. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -0
  530. /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -0
  531. /package/{skills → .agents/skills}/prototype/scripts/test_launch_sandbox.py +0 -0
  532. /package/{skills → .agents/skills}/prototype/workflows/sandbox.md +0 -0
  533. /package/{skills → .agents/skills}/rebase/AGENTS.md +0 -0
  534. /package/{skills → .agents/skills}/rebase/SKILL.md +0 -0
  535. /package/{skills → .agents/skills}/session-log/AGENTS.md +0 -0
  536. /package/{skills → .agents/skills}/session-log/templates/frontmatter.md +0 -0
  537. /package/{skills → .agents/skills}/session-tidy/AGENTS.md +0 -0
  538. /package/{skills → .agents/skills}/session-tidy/SKILL.md +0 -0
  539. /package/{skills → .agents/skills}/skill-builder/AGENTS.md +0 -0
  540. /package/{skills → .agents/skills}/skill-builder/SKILL.md +0 -0
  541. /package/{skills → .agents/skills}/skill-builder/references/AGENTS.md +0 -0
  542. /package/{skills → .agents/skills}/skill-builder/references/delegation-map.md +0 -0
  543. /package/{skills → .agents/skills}/skill-builder/references/description-field.md +0 -0
  544. /package/{skills → .agents/skills}/skill-builder/references/progressive-disclosure.md +0 -0
  545. /package/{skills → .agents/skills}/skill-builder/references/self-audit-checklist.md +0 -0
  546. /package/{skills → .agents/skills}/skill-builder/references/skill-modularity.md +0 -0
  547. /package/{skills → .agents/skills}/skill-builder/references/skill-types.md +0 -0
  548. /package/{skills → .agents/skills}/skill-builder/references/thariq-x-post-skills.json +0 -0
  549. /package/{skills → .agents/skills}/skill-builder/templates/AGENTS.md +0 -0
  550. /package/{skills → .agents/skills}/skill-builder/templates/gap-analysis.md +0 -0
  551. /package/{skills → .agents/skills}/skill-builder/workflows/AGENTS.md +0 -0
  552. /package/{skills → .agents/skills}/skill-builder/workflows/improve-skill.md +0 -0
  553. /package/{skills → .agents/skills}/skill-builder/workflows/new-skill.md +0 -0
  554. /package/{skills → .agents/skills}/skill-builder/workflows/polish-skill.md +0 -0
  555. /package/{skills → .agents/skills}/small-cl/SKILL.md +0 -0
  556. /package/{skills → .agents/skills}/task-build/AGENTS.md +0 -0
  557. /package/{skills → .agents/skills}/task-build/SKILL.md +0 -0
  558. /package/{skills → .agents/skills}/task-build/reference/tool-routing.md +0 -0
  559. /package/{skills → .agents/skills}/team-advisor/SKILL.md +0 -0
  560. /package/{skills → .agents/skills}/team-advisor/reference/advisor-docs-review.md +0 -0
  561. /package/{skills → .agents/skills}/update/AGENTS.md +0 -0
  562. /package/{skills → .agents/skills}/update/SKILL.md +0 -0
  563. /package/{skills → .agents/skills}/usage-pause/SKILL.md +0 -0
  564. /package/{skills → .agents/skills}/usage-pause/scripts/resolve_usage_window.py +0 -0
  565. /package/{skills → .agents/skills}/usage-pause/scripts/test_resolve_usage_window.py +0 -0
  566. /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/__init__.py +0 -0
  567. /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/resolve_usage_window_constants.py +0 -0
  568. /package/{skills → .agents/skills-archived}/anthropic-plan/SKILL.md +0 -0
  569. /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/AGENTS.md +0 -0
  570. /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -0
  571. /package/{skills/_shared/pr-loop/scripts/skills_pr_loop_constants → .agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants}/__init__.py +0 -0
  572. /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/validate_packet_constants.py +0 -0
  573. /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/test_validate_packet.py +0 -0
  574. /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/validate_packet.py +0 -0
  575. /package/{skills → .agents/skills-archived}/anthropic-plan/templates/AGENTS.md +0 -0
  576. /package/{skills → .agents/skills-archived}/anthropic-plan/templates/README.md +0 -0
  577. /package/{skills → .agents/skills-archived}/anthropic-plan/templates/build-prompt.md +0 -0
  578. /package/{skills → .agents/skills-archived}/anthropic-plan/templates/reuse-audit.md +0 -0
  579. /package/{skills → .agents/skills-archived}/anthropic-plan/templates/source-map.md +0 -0
  580. /package/{skills → .agents/skills-archived}/anthropic-plan/templates/visual-plan.template.html +0 -0
  581. /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/AGENTS.md +0 -0
  582. /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/plan-packet.contract.test.mjs +0 -0
  583. /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/plan-packet.mjs +0 -0
  584. /package/{skills → .agents/skills-archived}/auditing-claude-config/AGENTS.md +0 -0
  585. /package/{skills → .agents/skills-archived}/auditing-claude-config/SKILL.md +0 -0
  586. /package/{skills → .agents/skills-archived}/auditing-claude-config/reference/probe-hook.md +0 -0
  587. /package/{skills → .agents/skills-archived}/beat-sheet/SKILL.md +0 -0
  588. /package/{skills → .agents/skills-archived}/beat-sheet/reference/visual-beats.md +0 -0
  589. /package/{skills → .agents/skills-archived}/bugteam/AGENTS.md +0 -0
  590. /package/{skills → .agents/skills-archived}/bugteam/CONSTRAINTS.md +0 -0
  591. /package/{skills → .agents/skills-archived}/bugteam/EXAMPLES.md +0 -0
  592. /package/{skills → .agents/skills-archived}/bugteam/PROMPTS.md +0 -0
  593. /package/{skills → .agents/skills-archived}/bugteam/SKILL.md +0 -0
  594. /package/{skills → .agents/skills-archived}/bugteam/reference/AGENTS.md +0 -0
  595. /package/{skills → .agents/skills-archived}/bugteam/reference/README.md +0 -0
  596. /package/{skills → .agents/skills-archived}/bugteam/reference/audit-and-teammates.md +0 -0
  597. /package/{skills → .agents/skills-archived}/bugteam/reference/copilot-gap-analysis.md +0 -0
  598. /package/{skills → .agents/skills-archived}/bugteam/reference/design-rationale.md +0 -0
  599. /package/{skills → .agents/skills-archived}/bugteam/reference/github-pr-reviews.md +0 -0
  600. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/AGENTS.md +0 -0
  601. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-assign-ids.md +0 -0
  602. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-capture-excerpts.md +0 -0
  603. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-walk-categories.md +0 -0
  604. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-write-xml.md +0 -0
  605. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-append-summary.md +0 -0
  606. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-apply-fixes.md +0 -0
  607. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-git-add-commit.md +0 -0
  608. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-git-push.md +0 -0
  609. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-post-reply.md +0 -0
  610. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-publish-summary.md +0 -0
  611. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-py-compile.md +0 -0
  612. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-read-files.md +0 -0
  613. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-resolve-thread.md +0 -0
  614. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-test-suite.md +0 -0
  615. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-violation-count.md +0 -0
  616. /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-write-xml.md +0 -0
  617. /package/{skills → .agents/skills-archived}/bugteam/reference/team-setup.md +0 -0
  618. /package/{skills → .agents/skills-archived}/bugteam/scripts/AGENTS.md +0 -0
  619. /package/{skills → .agents/skills-archived}/bugteam/scripts/README.md +0 -0
  620. /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -0
  621. /package/{skills/anthropic-plan/scripts/anthropic_plan_scripts_constants → .agents/skills-archived/bugteam/scripts/bugteam_scripts_constants}/__init__.py +0 -0
  622. /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/probe_code_rules_enforcer_check_constants.py +0 -0
  623. /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/reflow_skill_md_constants.py +0 -0
  624. /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/windows_safe_rmtree_constants.py +0 -0
  625. /package/{skills → .agents/skills-archived}/bugteam/scripts/probe_code_rules_enforcer_check.py +0 -0
  626. /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -0
  627. /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -0
  628. /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_preflight.py +0 -0
  629. /package/{skills → .agents/skills-archived}/bugteam/scripts/test_probe_code_rules_enforcer_check.py +0 -0
  630. /package/{skills → .agents/skills-archived}/bugteam/scripts/test_windows_safe_rmtree.py +0 -0
  631. /package/{skills → .agents/skills-archived}/bugteam/scripts/windows_safe_rmtree.py +0 -0
  632. /package/{skills → .agents/skills-archived}/bugteam/sources.md +0 -0
  633. /package/{skills → .agents/skills-archived}/bugteam/test_skill_additions.py +0 -0
  634. /package/{skills → .agents/skills-archived}/closeout/SKILL.md +0 -0
  635. /package/{skills → .agents/skills-archived}/closeout/reference/handoff-prompt-template.md +0 -0
  636. /package/{skills → .agents/skills-archived}/closeout/reference/pii-redaction-checklist.md +0 -0
  637. /package/{skills → .agents/skills-archived}/codex-review/AGENTS.md +0 -0
  638. /package/{skills → .agents/skills-archived}/codex-review/SKILL.md +0 -0
  639. /package/{skills → .agents/skills-archived}/codex-review/reference/AGENTS.md +0 -0
  640. /package/{skills → .agents/skills-archived}/codex-review/reference/cli-contract.md +0 -0
  641. /package/{skills → .agents/skills-archived}/codex-review/reference/loop-integration.md +0 -0
  642. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_down_classifier.py +0 -0
  643. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -0
  644. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/__init__.py +0 -0
  645. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/classifier_constants.py +0 -0
  646. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +0 -0
  647. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/findings_constants.py +0 -0
  648. /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/run_constants.py +0 -0
  649. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/auth_failure_synthetic.txt +0 -0
  650. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/config_load_failure_v0.125.0.txt +0 -0
  651. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/freeform_findings_v0.144.3.txt +0 -0
  652. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/model_rejection_v0.125.0.jsonl +0 -0
  653. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/structured_findings.txt +0 -0
  654. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/success_stream_v0.144.3.jsonl +0 -0
  655. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/unknown_failure_synthetic.txt +0 -0
  656. /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/usage_limit_synthetic.txt +0 -0
  657. /package/{skills → .agents/skills-archived}/codex-review/scripts/parse_codex_findings.py +0 -0
  658. /package/{skills → .agents/skills-archived}/codex-review/scripts/test_codex_down_classifier.py +0 -0
  659. /package/{skills → .agents/skills-archived}/codex-review/scripts/test_codex_usage_probe.py +0 -0
  660. /package/{skills → .agents/skills-archived}/codex-review/scripts/test_parse_codex_findings.py +0 -0
  661. /package/{skills → .agents/skills-archived}/codex-review/scripts/test_run_codex_review.py +0 -0
  662. /package/{skills → .agents/skills-archived}/comments/SKILL.md +0 -0
  663. /package/{skills → .agents/skills-archived}/condensing-instructions/SKILL.md +0 -0
  664. /package/{skills → .agents/skills-archived}/copilot-finding-triage/reference/tier-rubric.md +0 -0
  665. /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/conftest.py +0 -0
  666. /package/{skills/autoconverge/workflow/autoconverge_report_constants → .agents/skills-archived/copilot-finding-triage/scripts/copilot_finding_triage_constants}/__init__.py +0 -0
  667. /package/{skills/bugteam/scripts/bugteam_scripts_constants → .agents/skills-archived/copilot-finding-triage/scripts/copilot_finding_triage_constants/config}/__init__.py +0 -0
  668. /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/notify_ntfy_constants.py +0 -0
  669. /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/notify_ntfy.py +0 -0
  670. /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/test_notify_ntfy.py +0 -0
  671. /package/{skills → .agents/skills-archived}/copilot-finding-triage/templates/notification.md +0 -0
  672. /package/{skills → .agents/skills-archived}/copilot-review/AGENTS.md +0 -0
  673. /package/{skills → .agents/skills-archived}/copilot-review/SKILL.md +0 -0
  674. /package/{skills → .agents/skills-archived}/copilot-review/templates/subagent-prompt.md +0 -0
  675. /package/{skills → .agents/skills-archived}/descriptions/SKILL.md +0 -0
  676. /package/{skills → .agents/skills-archived}/emergencies/SKILL.md +0 -0
  677. /package/{skills → .agents/skills-archived}/grokify/SKILL.md +0 -0
  678. /package/{skills → .agents/skills-archived}/grokify/capability-claims.test.mjs +0 -0
  679. /package/{skills → .agents/skills-archived}/grokify/templates/handoff-template.md +0 -0
  680. /package/{skills → .agents/skills-archived}/plan-to-pr/SKILL.md +0 -0
  681. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/final-validation-tasks.md +0 -0
  682. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/model-routing.md +0 -0
  683. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/packet-contract.md +0 -0
  684. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/packet-schema.json +0 -0
  685. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/process-inventory.md +0 -0
  686. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/review-loop.md +0 -0
  687. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/run-record.schema.json +0 -0
  688. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/self-audit-tasks.md +0 -0
  689. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/task-seeds.md +0 -0
  690. /package/{skills → .agents/skills-archived}/plan-to-pr/reference/task-ticket.md +0 -0
  691. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/config/__init__.py +0 -0
  692. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/config/constants.py +0 -0
  693. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/create_packet.py +0 -0
  694. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/load_skill_constants.py +0 -0
  695. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_create_packet.py +0 -0
  696. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_packet.py +0 -0
  697. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_protocol.py +0 -0
  698. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_run.py +0 -0
  699. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_packet.py +0 -0
  700. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_protocol.py +0 -0
  701. /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_run.py +0 -0
  702. /package/{skills → .agents/skills-archived}/plan-to-pr/test_skill_contract.py +0 -0
  703. /package/{skills → .agents/skills-archived}/plan-to-pr/test_task_ticket_contract.py +0 -0
  704. /package/{skills → .agents/skills-archived}/pr-converge/AGENTS.md +0 -0
  705. /package/{skills/copilot-finding-triage/scripts/copilot_finding_triage_constants → .agents/skills-archived/pr-converge/pr_converge_skill_constants}/__init__.py +0 -0
  706. /package/{skills → .agents/skills-archived}/pr-converge/reference/AGENTS.md +0 -0
  707. /package/{skills → .agents/skills-archived}/pr-converge/reference/convergence-gates.md +0 -0
  708. /package/{skills → .agents/skills-archived}/pr-converge/reference/examples.md +0 -0
  709. /package/{skills → .agents/skills-archived}/pr-converge/reference/fix-protocol.md +0 -0
  710. /package/{skills → .agents/skills-archived}/pr-converge/reference/ground-rules.md +0 -0
  711. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/AGENTS.md +0 -0
  712. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-post-replies.md +0 -0
  713. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-publish-summary.md +0 -0
  714. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-push.md +0 -0
  715. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-read-filelines.md +0 -0
  716. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-reset-state.md +0 -0
  717. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-resolve-threads.md +0 -0
  718. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-spawn-clean-coder.md +0 -0
  719. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-stage-commit.md +0 -0
  720. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-trigger-bugbot.md +0 -0
  721. /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-write-test.md +0 -0
  722. /package/{skills → .agents/skills-archived}/pr-converge/reference/progress-checklist.md +0 -0
  723. /package/{skills → .agents/skills-archived}/pr-converge/reference/state-schema.md +0 -0
  724. /package/{skills → .agents/skills-archived}/pr-converge/reference/stop-conditions.md +0 -0
  725. /package/{skills → .agents/skills-archived}/pr-converge/scripts/AGENTS.md +0 -0
  726. /package/{skills → .agents/skills-archived}/pr-converge/scripts/README.md +0 -0
  727. /package/{skills → .agents/skills-archived}/pr-converge/scripts/caller-window-pid.ps1 +0 -0
  728. /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_bugbot_ci.py +0 -0
  729. /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence.py +0 -0
  730. /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_availability.py +0 -0
  731. /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_gates.py +0 -0
  732. /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_thread_gates.py +0 -0
  733. /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_pending_reviews.py +0 -0
  734. /package/{skills → .agents/skills-archived}/pr-converge/scripts/conftest.py +0 -0
  735. /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue-caller.cmd +0 -0
  736. /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +0 -0
  737. /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue.ahk +0 -0
  738. /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue.cmd +0 -0
  739. /package/{skills → .agents/skills-archived}/pr-converge/scripts/fetch_copilot_reviews.py +0 -0
  740. /package/{skills → .agents/skills-archived}/pr-converge/scripts/post_fix_reply.py +0 -0
  741. /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -0
  742. /package/{skills/copilot-finding-triage/scripts/copilot_finding_triage_constants/config → .agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants}/__init__.py +0 -0
  743. /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +0 -0
  744. /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py +0 -0
  745. /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +0 -0
  746. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_bugbot_ci.py +0 -0
  747. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence.py +0 -0
  748. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_availability.py +0 -0
  749. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_codex.py +0 -0
  750. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_contract.py +0 -0
  751. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_fixture.py +0 -0
  752. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_gates.py +0 -0
  753. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_thread_gates.py +0 -0
  754. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_cursor_agents_continue.py +0 -0
  755. /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_reflow_skill_md.py +0 -0
  756. /package/{skills → .agents/skills-archived}/pr-converge/test_step5_host_branch.py +0 -0
  757. /package/{skills → .agents/skills-archived}/pr-converge/workflows/AGENTS.md +0 -0
  758. /package/{skills → .agents/skills-archived}/pr-fix-protocol/SKILL.md +0 -0
  759. /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/SKILL.md +0 -0
  760. /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/reference/identity-and-hooks.md +0 -0
  761. /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/reference/substitution-matrix.md +0 -0
  762. /package/{skills → .agents/skills-archived}/pr-loop-lifecycle/SKILL.md +0 -0
  763. /package/{skills → .agents/skills-archived}/pr-loop-lifecycle/reference/teardown-publish-permissions.md +0 -0
  764. /package/{skills → .agents/skills-archived}/recall/AGENTS.md +0 -0
  765. /package/{skills → .agents/skills-archived}/recall/SKILL.md +0 -0
  766. /package/{skills → .agents/skills-archived}/release-notes-html/SKILL.md +0 -0
  767. /package/{skills → .agents/skills-archived}/remember/AGENTS.md +0 -0
  768. /package/{skills → .agents/skills-archived}/remember/SKILL.md +0 -0
  769. /package/{skills → .agents/skills-archived}/reviewer-gates/SKILL.md +0 -0
  770. /package/{skills → .agents/skills-archived}/reviews/SKILL.md +0 -0
  771. /package/{skills → .agents/skills-archived}/show/SKILL.md +0 -0
  772. /package/{skills → .agents/skills-archived}/show/references/accessibility.md +0 -0
  773. /package/{skills → .agents/skills-archived}/show/references/art.md +0 -0
  774. /package/{skills → .agents/skills-archived}/show/references/charts.md +0 -0
  775. /package/{skills → .agents/skills-archived}/show/references/core-design.md +0 -0
  776. /package/{skills → .agents/skills-archived}/show/references/erds.md +0 -0
  777. /package/{skills → .agents/skills-archived}/show/references/flowcharts.md +0 -0
  778. /package/{skills → .agents/skills-archived}/show/references/host-and-html.md +0 -0
  779. /package/{skills → .agents/skills-archived}/show/references/illustrative-diagrams.md +0 -0
  780. /package/{skills → .agents/skills-archived}/show/references/interaction.md +0 -0
  781. /package/{skills → .agents/skills-archived}/show/references/mockups.md +0 -0
  782. /package/{skills → .agents/skills-archived}/show/references/quality-gates.md +0 -0
  783. /package/{skills → .agents/skills-archived}/show/references/structural-diagrams.md +0 -0
  784. /package/{skills → .agents/skills-archived}/show/references/subject-inventory.md +0 -0
  785. /package/{skills → .agents/skills-archived}/show/references/svg-contract.md +0 -0
  786. /package/{skills → .agents/skills-archived}/show/routing.yaml +0 -0
  787. /package/{skills → .agents/skills-archived}/show/samples/pr1262-v2.svg +0 -0
  788. /package/{skills → .agents/skills-archived}/show/scripts/README.md +0 -0
  789. /package/{skills → .agents/skills-archived}/show/scripts/validate-artifact.py +0 -0
  790. /package/{skills → .agents/skills-archived}/show/scripts/validate-package.py +0 -0
  791. /package/{skills → .agents/skills-archived}/show/templates/html-widget.html +0 -0
  792. /package/{skills → .agents/skills-archived}/show/templates/svg-base.svg +0 -0
  793. /package/{skills → .agents/skills-archived}/show/tests/fixtures/css-var.svg +0 -0
  794. /package/{skills → .agents/skills-archived}/show/tests/fixtures/dead-ref.svg +0 -0
  795. /package/{skills → .agents/skills-archived}/show/tests/fixtures/filled-glyph.svg +0 -0
  796. /package/{skills → .agents/skills-archived}/show/tests/fixtures/inherited-fill.svg +0 -0
  797. /package/{skills → .agents/skills-archived}/show/tests/fixtures/invalid.svg +0 -0
  798. /package/{skills → .agents/skills-archived}/show/tests/fixtures/large-canvas.svg +0 -0
  799. /package/{skills → .agents/skills-archived}/show/tests/fixtures/unfilled-connector.svg +0 -0
  800. /package/{skills → .agents/skills-archived}/show/tests/fixtures/valid.html +0 -0
  801. /package/{skills → .agents/skills-archived}/show/tests/test_validate-artifact.py +0 -0
  802. /package/{skills → .agents/skills-archived}/show/tests/test_validators.py +0 -0
  803. /package/{skills → .agents/skills-archived}/show/workflows/create-visual.md +0 -0
  804. /package/{skills → .agents/skills-archived}/show/workflows/review-visual.md +0 -0
  805. /package/{skills → .agents/skills-archived}/split-pr/SKILL.md +0 -0
  806. /package/{skills → .agents/skills-archived}/split-pr/reference/path-layers.md +0 -0
  807. /package/{skills → .agents/skills-archived}/split-pr/reference/split-further-loop.md +0 -0
  808. /package/{skills → .agents/skills-archived}/split-pr/reference/splitting-principles.md +0 -0
  809. /package/{skills → .agents/skills-archived}/split-pr/scripts/analyze_pr.py +0 -0
  810. /package/{skills → .agents/skills-archived}/split-pr/scripts/categorize_files.py +0 -0
  811. /package/{skills → .agents/skills-archived}/split-pr/scripts/config/__init__.py +0 -0
  812. /package/{skills → .agents/skills-archived}/split-pr/scripts/config/dependency_constants.py +0 -0
  813. /package/{skills → .agents/skills-archived}/split-pr/scripts/config/git_operations_constants.py +0 -0
  814. /package/{skills → .agents/skills-archived}/split-pr/scripts/config/packing_constants.py +0 -0
  815. /package/{skills → .agents/skills-archived}/split-pr/scripts/config/plan_constants.py +0 -0
  816. /package/{skills → .agents/skills-archived}/split-pr/scripts/config/split_pr_constants.py +0 -0
  817. /package/{skills → .agents/skills-archived}/split-pr/scripts/execute_split_slices.py +0 -0
  818. /package/{skills → .agents/skills-archived}/split-pr/scripts/pack_files_into_slices.py +0 -0
  819. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_dependency_graph.py +0 -0
  820. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_git_operations.py +0 -0
  821. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_layer_order.py +0 -0
  822. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_paginate.py +0 -0
  823. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_process_runner.py +0 -0
  824. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_script_types.py +0 -0
  825. /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_title.py +0 -0
  826. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_analyze_pr.py +0 -0
  827. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_categorize_files.py +0 -0
  828. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_categorize_files_packing.py +0 -0
  829. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_execute_split_slices.py +0 -0
  830. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_dependency_graph.py +0 -0
  831. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_git_operations.py +0 -0
  832. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_layer_order.py +0 -0
  833. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_paginate.py +0 -0
  834. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_script_types.py +0 -0
  835. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_title.py +0 -0
  836. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_dependency_graph.py +0 -0
  837. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan.py +0 -0
  838. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan_contract.py +0 -0
  839. /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan_path_normalization.py +0 -0
  840. /package/{skills → .agents/skills-archived}/split-pr/scripts/verify_dependency_graph.py +0 -0
  841. /package/{skills → .agents/skills-archived}/split-pr/scripts/verify_plan.py +0 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Real-filesystem tests for Claude lookup pointers into the agents home.
3
+ */
4
+
5
+ import { test } from 'node:test';
6
+ import { strict as assert } from 'node:assert';
7
+ import {
8
+ existsSync,
9
+ lstatSync,
10
+ mkdirSync,
11
+ mkdtempSync,
12
+ readFileSync,
13
+ realpathSync,
14
+ rmSync,
15
+ writeFileSync,
16
+ } from 'node:fs';
17
+ import { tmpdir } from 'node:os';
18
+ import { join } from 'node:path';
19
+ import {
20
+ DIRECTORY_POINTER_TYPE_DIR,
21
+ DIRECTORY_POINTER_TYPE_JUNCTION,
22
+ POINTER_ACTION_ALREADY_POINTING,
23
+ POINTER_ACTION_CREATED,
24
+ directoryPointerTypeForPlatform,
25
+ ensureDirectoryPointer,
26
+ isDirectoryPointerTo,
27
+ unlinkDirectoryPointerIfMatch,
28
+ } from './publish-directory-pointer.mjs';
29
+
30
+ function makeSandbox() {
31
+ const root = mkdtempSync(join(tmpdir(), 'cdev-pointer-'));
32
+ return {
33
+ root,
34
+ pointerPath: join(root, 'lookup', 'skills'),
35
+ targetPath: join(root, 'canonical', 'skills'),
36
+ };
37
+ }
38
+
39
+ test('directoryPointerTypeForPlatform uses a junction on Windows and a dir pointer elsewhere', () => {
40
+ assert.equal(directoryPointerTypeForPlatform('win32'), DIRECTORY_POINTER_TYPE_JUNCTION);
41
+ assert.equal(directoryPointerTypeForPlatform('linux'), DIRECTORY_POINTER_TYPE_DIR);
42
+ assert.equal(directoryPointerTypeForPlatform('darwin'), DIRECTORY_POINTER_TYPE_DIR);
43
+ });
44
+
45
+ test('ensureDirectoryPointer writes a lookup pointer whose files are the canonical files', () => {
46
+ const sandbox = makeSandbox();
47
+ try {
48
+ mkdirSync(sandbox.targetPath, { recursive: true });
49
+ const canonicalFile = join(sandbox.targetPath, 'notes.md');
50
+ writeFileSync(canonicalFile, 'canonical body\n');
51
+
52
+ const publication = ensureDirectoryPointer(sandbox.pointerPath, sandbox.targetPath);
53
+ assert.equal(publication.action, POINTER_ACTION_CREATED);
54
+ assert.equal(lstatSync(sandbox.pointerPath).isSymbolicLink(), true);
55
+ assert.equal(isDirectoryPointerTo(sandbox.pointerPath, sandbox.targetPath), true);
56
+ assert.equal(
57
+ readFileSync(join(sandbox.pointerPath, 'notes.md'), 'utf8'),
58
+ 'canonical body\n',
59
+ );
60
+ assert.equal(
61
+ realpathSync(join(sandbox.pointerPath, 'notes.md')),
62
+ realpathSync(canonicalFile),
63
+ );
64
+ } finally {
65
+ rmSync(sandbox.root, { recursive: true, force: true });
66
+ }
67
+ });
68
+
69
+ test('ensureDirectoryPointer leaves a correct pointer in place', () => {
70
+ const sandbox = makeSandbox();
71
+ try {
72
+ const firstPublication = ensureDirectoryPointer(sandbox.pointerPath, sandbox.targetPath);
73
+ assert.equal(firstPublication.action, POINTER_ACTION_CREATED);
74
+ const secondPublication = ensureDirectoryPointer(sandbox.pointerPath, sandbox.targetPath);
75
+ assert.equal(secondPublication.action, POINTER_ACTION_ALREADY_POINTING);
76
+ assert.equal(isDirectoryPointerTo(sandbox.pointerPath, sandbox.targetPath), true);
77
+ } finally {
78
+ rmSync(sandbox.root, { recursive: true, force: true });
79
+ }
80
+ });
81
+
82
+ test('ensureDirectoryPointer relocates a real lookup directory into the agents home', () => {
83
+ const sandbox = makeSandbox();
84
+ try {
85
+ mkdirSync(sandbox.pointerPath, { recursive: true });
86
+ writeFileSync(join(sandbox.pointerPath, 'personal.md'), 'user skill\n');
87
+ mkdirSync(sandbox.targetPath, { recursive: true });
88
+ writeFileSync(join(sandbox.targetPath, 'shipped.md'), 'package skill\n');
89
+
90
+ ensureDirectoryPointer(sandbox.pointerPath, sandbox.targetPath);
91
+
92
+ assert.equal(lstatSync(sandbox.pointerPath).isSymbolicLink(), true);
93
+ assert.equal(
94
+ readFileSync(join(sandbox.targetPath, 'personal.md'), 'utf8'),
95
+ 'user skill\n',
96
+ );
97
+ assert.equal(
98
+ readFileSync(join(sandbox.pointerPath, 'personal.md'), 'utf8'),
99
+ 'user skill\n',
100
+ );
101
+ assert.equal(
102
+ readFileSync(join(sandbox.pointerPath, 'shipped.md'), 'utf8'),
103
+ 'package skill\n',
104
+ );
105
+ assert.equal(existsSync(join(sandbox.targetPath, 'personal.md')), true);
106
+ } finally {
107
+ rmSync(sandbox.root, { recursive: true, force: true });
108
+ }
109
+ });
110
+
111
+ test('unlinkDirectoryPointerIfMatch removes only a pointer that aims at the expected target', () => {
112
+ const sandbox = makeSandbox();
113
+ try {
114
+ ensureDirectoryPointer(sandbox.pointerPath, sandbox.targetPath);
115
+ writeFileSync(join(sandbox.targetPath, 'kept.md'), 'kept\n');
116
+ assert.equal(
117
+ unlinkDirectoryPointerIfMatch(sandbox.pointerPath, sandbox.targetPath),
118
+ true,
119
+ );
120
+ assert.equal(existsSync(sandbox.pointerPath), false);
121
+ assert.equal(readFileSync(join(sandbox.targetPath, 'kept.md'), 'utf8'), 'kept\n');
122
+ assert.equal(
123
+ unlinkDirectoryPointerIfMatch(sandbox.pointerPath, sandbox.targetPath),
124
+ false,
125
+ );
126
+ } finally {
127
+ rmSync(sandbox.root, { recursive: true, force: true });
128
+ }
129
+ });
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import { homedir } from 'node:os';
13
- import { join, normalize, resolve, sep } from 'node:path';
13
+ import { basename, dirname, join, normalize, resolve, sep } from 'node:path';
14
14
  import {
15
15
  MYPY_INI_FILE_NAME,
16
16
  CODEX_HOME_ENVIRONMENT_VARIABLE,
@@ -18,10 +18,16 @@ import {
18
18
  CODEX_RULES_DIRECTORY_NAME,
19
19
  DEFAULT_CURSOR_DIRECTORY_NAME,
20
20
  CURSOR_RULES_DIRECTORY_NAME,
21
+ MANAGED_SKILLS_DIRECTORY_NAME,
22
+ MANAGED_AGENTS_DIRECTORY_NAME,
23
+ MANAGED_HOOKS_DIRECTORY_NAME,
24
+ MANAGED_SCRIPTS_DIRECTORY_NAME,
25
+ CODEX_HOOKS_DIRECTORY_NAME,
21
26
  } from './install-constants.mjs';
22
27
 
23
28
  export const CLAUDE_CONFIG_DIR_ENVIRONMENT_VARIABLE = 'CLAUDE_CONFIG_DIR';
24
29
  export const DEFAULT_CLAUDE_DIRECTORY_NAME = '.claude';
30
+ export const DEFAULT_AGENTS_DIRECTORY_NAME = '.agents';
25
31
  export const MANIFEST_FILE_NAME = '.claude-dev-env-manifest.json';
26
32
 
27
33
  /**
@@ -44,9 +50,52 @@ export const MANIFEST_FILE_NAME = '.claude-dev-env-manifest.json';
44
50
  * codexRulesInstallDirectory: string,
45
51
  * cursorInstallDirectory: string,
46
52
  * cursorRulesInstallDirectory: string,
53
+ * agentsHome: string,
54
+ * skillsInstallDirectory: string,
55
+ * agentsInstallDirectory: string,
56
+ * skillsLookupDirectory: string,
57
+ * agentsLookupDirectory: string,
58
+ * hooksInstallDirectory: string,
59
+ * scriptsInstallDirectory: string,
60
+ * hooksLookupDirectory: string,
61
+ * scriptsLookupDirectory: string,
62
+ * codexHooksInstallDirectory: string,
47
63
  * }} InstallRootResolution
48
64
  */
49
65
 
66
+ /**
67
+ * Resolve the canonical skills/agents home for one managed Claude root.
68
+ *
69
+ * When the managed root's base name is `.claude`, the agents home is the sibling
70
+ * `.agents` directory (so `~/.claude` pairs with `~/.agents`). Any other managed
71
+ * root — a named profile directory or an explicit `--target` — pairs with a
72
+ * sibling named `<root-name>.agents`, so two profile directories never share one
73
+ * agents home.
74
+ *
75
+ * @param {string} managedRoot Absolute managed Claude root.
76
+ * @returns {string} Absolute agents home.
77
+ */
78
+ export function resolveAgentsHome(managedRoot) {
79
+ const resolvedManagedRoot = resolve(managedRoot);
80
+ const parentDirectory = dirname(resolvedManagedRoot);
81
+ const managedBaseName = basename(resolvedManagedRoot);
82
+ if (isClaudeDirectoryBaseName(managedBaseName)) {
83
+ return resolve(join(parentDirectory, DEFAULT_AGENTS_DIRECTORY_NAME));
84
+ }
85
+ return resolve(join(parentDirectory, `${managedBaseName}${DEFAULT_AGENTS_DIRECTORY_NAME}`));
86
+ }
87
+
88
+ /**
89
+ * @param {string} directoryName
90
+ * @returns {boolean}
91
+ */
92
+ function isClaudeDirectoryBaseName(directoryName) {
93
+ if (process.platform === 'win32') {
94
+ return directoryName.toLowerCase() === DEFAULT_CLAUDE_DIRECTORY_NAME.toLowerCase();
95
+ }
96
+ return directoryName === DEFAULT_CLAUDE_DIRECTORY_NAME;
97
+ }
98
+
50
99
  /**
51
100
  * Resolve the managed install root and declared external destinations.
52
101
  *
@@ -86,12 +135,24 @@ export function resolveInstallRoot(options = {}) {
86
135
  const codexRulesInstallDirectory = resolve(
87
136
  join(codexHomeDirectory, CODEX_RULES_DIRECTORY_NAME),
88
137
  );
138
+ const codexHooksInstallDirectory = resolve(
139
+ join(codexHomeDirectory, CODEX_HOOKS_DIRECTORY_NAME),
140
+ );
89
141
  const cursorInstallDirectory = resolve(
90
142
  join(homeDirectory, DEFAULT_CURSOR_DIRECTORY_NAME),
91
143
  );
92
144
  const cursorRulesInstallDirectory = resolve(
93
145
  join(cursorInstallDirectory, CURSOR_RULES_DIRECTORY_NAME),
94
146
  );
147
+ const agentsHome = resolveAgentsHome(managedRoot);
148
+ const skillsInstallDirectory = join(agentsHome, MANAGED_SKILLS_DIRECTORY_NAME);
149
+ const agentsInstallDirectory = join(agentsHome, MANAGED_AGENTS_DIRECTORY_NAME);
150
+ const hooksInstallDirectory = join(agentsHome, MANAGED_HOOKS_DIRECTORY_NAME);
151
+ const scriptsInstallDirectory = join(agentsHome, MANAGED_SCRIPTS_DIRECTORY_NAME);
152
+ const skillsLookupDirectory = join(managedRoot, MANAGED_SKILLS_DIRECTORY_NAME);
153
+ const agentsLookupDirectory = join(managedRoot, MANAGED_AGENTS_DIRECTORY_NAME);
154
+ const hooksLookupDirectory = join(managedRoot, MANAGED_HOOKS_DIRECTORY_NAME);
155
+ const scriptsLookupDirectory = join(managedRoot, MANAGED_SCRIPTS_DIRECTORY_NAME);
95
156
  return {
96
157
  managedRoot,
97
158
  source,
@@ -99,10 +160,25 @@ export function resolveInstallRoot(options = {}) {
99
160
  manifestFilePath: join(managedRoot, MANIFEST_FILE_NAME),
100
161
  mypyIniInstallPath,
101
162
  allDeclaredExternalPaths: [mypyIniInstallPath],
102
- allDeclaredExternalDirectories: [codexRulesInstallDirectory, cursorInstallDirectory],
163
+ allDeclaredExternalDirectories: [
164
+ codexRulesInstallDirectory,
165
+ codexHooksInstallDirectory,
166
+ cursorInstallDirectory,
167
+ agentsHome,
168
+ ],
103
169
  codexRulesInstallDirectory,
104
170
  cursorInstallDirectory,
105
171
  cursorRulesInstallDirectory,
172
+ agentsHome,
173
+ skillsInstallDirectory,
174
+ agentsInstallDirectory,
175
+ skillsLookupDirectory,
176
+ agentsLookupDirectory,
177
+ hooksInstallDirectory,
178
+ scriptsInstallDirectory,
179
+ hooksLookupDirectory,
180
+ scriptsLookupDirectory,
181
+ codexHooksInstallDirectory,
106
182
  };
107
183
  }
108
184
 
@@ -131,8 +207,8 @@ export function isPathWithinManagedRoot(candidatePath, managedRoot) {
131
207
 
132
208
  /**
133
209
  * True when a write destination is allowed: inside the managed root, the
134
- * home-directory `.mypy.ini`, a file under the Codex rules directory, or a file
135
- * under the Cursor rules directory.
210
+ * home-directory `.mypy.ini`, a file under the Codex rules directory, a file
211
+ * under the Cursor rules directory, or a file under the agents home.
136
212
  *
137
213
  * @param {string} candidatePath
138
214
  * @param {InstallRootResolution} resolution
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Resolve a managed content directory in a package source tree.
3
+ *
4
+ * This package keeps managed trees under `.agents/<name>/`. A dependency
5
+ * package may still keep those trees at `<package-root>/<name>/`. Callers pass
6
+ * the package root and the managed directory name; this helper returns the
7
+ * directory that exists.
8
+ */
9
+
10
+ import { existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { PACKAGE_AGENTS_HOME_DIRECTORY_NAME } from './install-constants.mjs';
13
+
14
+ /**
15
+ * @param {string} sourceRoot Package root that may hold `.agents/<name>` or `<name>`.
16
+ * @param {string} directoryName Managed directory name.
17
+ * @returns {string} Absolute source directory to copy from.
18
+ */
19
+ export function resolvePackageManagedDirectory(sourceRoot, directoryName) {
20
+ const agentsHomeDirectory = join(
21
+ sourceRoot,
22
+ PACKAGE_AGENTS_HOME_DIRECTORY_NAME,
23
+ directoryName,
24
+ );
25
+ if (existsSync(agentsHomeDirectory)) {
26
+ return agentsHomeDirectory;
27
+ }
28
+ return join(sourceRoot, directoryName);
29
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Package-source layout: skills and agents live under `.agents`, and
3
+ * `.claude/skills` / `.claude/agents` are directory pointers to that home.
4
+ */
5
+
6
+ import { test } from 'node:test';
7
+ import { strict as assert } from 'node:assert';
8
+ import {
9
+ existsSync,
10
+ lstatSync,
11
+ mkdirSync,
12
+ mkdtempSync,
13
+ realpathSync,
14
+ rmSync,
15
+ writeFileSync,
16
+ } from 'node:fs';
17
+ import { tmpdir } from 'node:os';
18
+ import { dirname, join } from 'node:path';
19
+ import { fileURLToPath } from 'node:url';
20
+ import {
21
+ MANAGED_AGENTS_DIRECTORY_NAME,
22
+ MANAGED_SKILLS_DIRECTORY_NAME,
23
+ PACKAGE_AGENTS_HOME_DIRECTORY_NAME,
24
+ } from './install-constants.mjs';
25
+ import { resolvePackageManagedDirectory } from './resolve-package-managed-directory.mjs';
26
+
27
+ const PACKAGE_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
28
+ const CANONICAL_SKILL_NAME = 'privacy-hygiene';
29
+ const CANONICAL_AGENT_FILE_NAME = 'clean-coder.md';
30
+
31
+ test('prefers the .agents tree when both layouts exist', () => {
32
+ const sourceRoot = mkdtempSync(join(tmpdir(), 'cdev-src-agents-'));
33
+ try {
34
+ const agentsHomeSkills = join(
35
+ sourceRoot, PACKAGE_AGENTS_HOME_DIRECTORY_NAME, MANAGED_SKILLS_DIRECTORY_NAME,
36
+ );
37
+ const packageRootSkills = join(sourceRoot, MANAGED_SKILLS_DIRECTORY_NAME);
38
+ mkdirSync(agentsHomeSkills, { recursive: true });
39
+ mkdirSync(packageRootSkills, { recursive: true });
40
+ writeFileSync(join(agentsHomeSkills, 'marker.txt'), 'canonical\n');
41
+ writeFileSync(join(packageRootSkills, 'marker.txt'), 'legacy\n');
42
+ assert.equal(
43
+ resolvePackageManagedDirectory(sourceRoot, MANAGED_SKILLS_DIRECTORY_NAME),
44
+ agentsHomeSkills,
45
+ );
46
+ } finally {
47
+ rmSync(sourceRoot, { recursive: true, force: true });
48
+ }
49
+ });
50
+
51
+ test('falls back to the package-root tree when .agents does not carry it', () => {
52
+ const sourceRoot = mkdtempSync(join(tmpdir(), 'cdev-src-legacy-'));
53
+ try {
54
+ const packageRootSkills = join(sourceRoot, MANAGED_SKILLS_DIRECTORY_NAME);
55
+ mkdirSync(packageRootSkills, { recursive: true });
56
+ assert.equal(
57
+ resolvePackageManagedDirectory(sourceRoot, MANAGED_SKILLS_DIRECTORY_NAME),
58
+ packageRootSkills,
59
+ );
60
+ } finally {
61
+ rmSync(sourceRoot, { recursive: true, force: true });
62
+ }
63
+ });
64
+
65
+ test('live package source keeps skills and agents under .agents with .claude pointers', () => {
66
+ const canonicalSkills = join(
67
+ PACKAGE_ROOT, PACKAGE_AGENTS_HOME_DIRECTORY_NAME, MANAGED_SKILLS_DIRECTORY_NAME,
68
+ );
69
+ const canonicalAgents = join(
70
+ PACKAGE_ROOT, PACKAGE_AGENTS_HOME_DIRECTORY_NAME, MANAGED_AGENTS_DIRECTORY_NAME,
71
+ );
72
+ const lookupSkills = join(PACKAGE_ROOT, '.claude', MANAGED_SKILLS_DIRECTORY_NAME);
73
+ const lookupAgents = join(PACKAGE_ROOT, '.claude', MANAGED_AGENTS_DIRECTORY_NAME);
74
+
75
+ assert.equal(
76
+ resolvePackageManagedDirectory(PACKAGE_ROOT, MANAGED_SKILLS_DIRECTORY_NAME),
77
+ canonicalSkills,
78
+ );
79
+ assert.equal(
80
+ resolvePackageManagedDirectory(PACKAGE_ROOT, MANAGED_AGENTS_DIRECTORY_NAME),
81
+ canonicalAgents,
82
+ );
83
+ assert.equal(
84
+ existsSync(join(canonicalSkills, CANONICAL_SKILL_NAME, 'SKILL.md')),
85
+ true,
86
+ );
87
+ assert.equal(
88
+ existsSync(join(canonicalAgents, CANONICAL_AGENT_FILE_NAME)),
89
+ true,
90
+ );
91
+ assert.equal(existsSync(join(PACKAGE_ROOT, MANAGED_SKILLS_DIRECTORY_NAME)), false);
92
+ assert.equal(existsSync(join(PACKAGE_ROOT, MANAGED_AGENTS_DIRECTORY_NAME)), false);
93
+ assert.equal(lstatSync(lookupSkills).isSymbolicLink(), true);
94
+ assert.equal(lstatSync(lookupAgents).isSymbolicLink(), true);
95
+ assert.equal(realpathSync(lookupSkills), realpathSync(canonicalSkills));
96
+ assert.equal(realpathSync(lookupAgents), realpathSync(canonicalAgents));
97
+ });
@@ -2,6 +2,8 @@
2
2
 
3
3
  Slash-command definitions installed into `~/.claude/commands/` by `bin/install.mjs`. Each `.md` file registers a `/command-name` the user can type in Claude Code. The file name (without `.md`) becomes the command name.
4
4
 
5
+ Command bodies use `rules/asd-ste100-language.md` for user-facing word choice, sentence style, tone, punctuation, and prose form. Each command keeps its workflow contract.
6
+
5
7
  ## Command files
6
8
 
7
9
  | File | Command | What it does |
@@ -7,6 +7,9 @@ Run the converging cleanup loop on the target: `$ARGUMENTS` (blank means the
7
7
  current branch's diff). Each phase invokes an existing skill with the Skill
8
8
  tool and repeats it until a pass returns zero new findings.
9
9
 
10
+ Use `rules/asd-ste100-language.md` for user-facing wording. Keep the loop's
11
+ cleanup, verification, commit, push, and finish-report fields.
12
+
10
13
  ## Phase A — loop /simplify
11
14
 
12
15
  1. Invoke the `simplify` skill on the target (the same review the user gets
@@ -1,6 +1,6 @@
1
1
  # Prose-style enforcement
2
2
 
3
- Opinionated prose gates (heavy-word swaps, hedging, historical state phrasing, intent-only endings, hook prose-detector consistency) are **off by default**.
3
+ Opinionated prose gates (hedging, historical state phrasing, intent-only endings, hook prose-detector consistency) are **off by default**.
4
4
 
5
5
  ## Opt-in
6
6
 
@@ -10,16 +10,12 @@ The flag is `PROSE_STYLE_ENFORCEMENT_ENABLED` in `hooks/blocking/config/prose_st
10
10
 
11
11
  ## Always on
12
12
 
13
- Structural AskUserQuestion lean-block validation in `plain_language_blocker` (chat detail, length caps on question blocks) stays active regardless of the flag. Code-rules and security blockers are out of scope for this switch.
13
+ Structural AskUserQuestion lean-block validation in `ask_user_question_shape_blocker` (chat detail, length caps on question blocks) stays active regardless of the flag. Apply `rules/asd-ste100-language.md` for user-facing word choice and sentence style. Code-rules and security blockers are out of scope for this switch.
14
14
 
15
15
  ## Advisory precision measurement (OP-07B)
16
16
 
17
- When the flag is off, heavy-word and hedging hits still emit privacy-safe advisory candidates to `~/.claude/logs/prose-matcher-advisory.jsonl` (matcher id, surface, hashed context fingerprint, optional label). Classification (`keep` / `narrow` / `drop` / `advisory`) uses a labeled sample floor of 30 and precision floors 0.7 / 0.4. Matchers below the floor stay advisory. No matcher becomes hard-blocking from historical labels alone. See `hooks/observability/prose_matcher_advisory.py`.
17
+ When the flag is off, hedging hits still emit privacy-safe advisory candidates to `~/.claude/logs/prose-matcher-advisory.jsonl` (matcher id, surface, hashed context fingerprint, optional label). Classification (`keep` / `narrow` / `drop` / `advisory`) uses a labeled sample floor of 30 and precision floors 0.7 / 0.4. Matchers below the floor stay advisory. See `hooks/observability/prose_matcher_advisory.py`.
18
18
 
19
19
  ## Explicit uncertainty (OP-07C)
20
20
 
21
21
  With enforcement on, a hedge word in a sentence that also labels the claim (`unverified`, `I don't know`, `no source for this claim`, …) passes. A bare hedge in a different sentence still blocks. Detail: `rules/hedging-claims.md`.
22
-
23
- ## Plain-language advisory (OP-07D)
24
-
25
- Heavy-word matches never hard-deny a Write/Edit or AskUserQuestion. With enforcement on, the hook allows the call and returns a `systemMessage` that names everyday swaps for both AskUserQuestion and `.md` writes. Lean-block structure denials stay hard. Detail: `rules/plain-language.md`.
package/hooks/AGENTS.md CHANGED
@@ -9,9 +9,6 @@ Python hook scripts wired into Claude Code's lifecycle via `settings.json`. Each
9
9
  | `advisory/` | Hooks that warn but do not block (`permissionDecision: "ask"`) |
10
10
  | `blocking/` | Hooks that deny tool calls when a rule is violated |
11
11
  | `blocking/config/` | Shared constants for blocking hooks |
12
- | `diagnostic/` | Hooks that record and extract hook-firing records into Neon |
13
- | `diagnostic/migrations/` | SQL migrations for the `hook_events` Neon schema |
14
- | `diagnostic/queries/` | Parameterized SQL queries for inspecting blocked commands |
15
12
  | `git-hooks/` | Native git hooks (`pre-commit`, `pre-push`, `post-commit`) installed via the git-hooks path |
16
13
  | `git-hooks/git_hooks_constants/` | Shared constants for the git-hook scripts |
17
14
  | `hooks_constants/` | Shared constant modules imported by multiple hooks across this tree (includes `pii_prevention_constants.py` for personal-data and secret scan patterns) |
@@ -74,7 +74,6 @@ The check modules it calls are the `code_rules_<concern>.py` files below.
74
74
  | `destructive_command_blocker.py` | PreToolUse (Bash/PowerShell) | Shell commands with destructive literals (`rm -rf`, `git reset --hard`, etc.) |
75
75
  | `docstring_rule_gate_count_blocker.py` | PreToolUse (Write/Edit/MultiEdit) | A stale spelled-out gate-validator count in `docstring-prose-matches-implementation.md` — the "N more gate validators" / "M gated slices" count drifting from the `check_docstring_*` validators the prose names |
76
76
  | `duplicate_rmtree_helper_blocker.py` | PreToolUse (Write/Edit) | A local re-definition of the Windows-safe rmtree helper trio (`_strip_read_only_and_retry`, `_force_remove_tree` / `force_rmtree`) in place of importing a shared helper |
77
- | `eli11_reply_enforcer.py` | Stop | Final replies breaking the `eli11-replies` shape — more than 6 bullet lines, more than 2 list lines over 20 words each, or multi-line instructions with no numbered step among the lead lines. Code fences, inline code, blockquotes, table rows, and link targets come off before the reply is judged. |
78
77
  | `env_var_table_code_drift_blocker.py` | PreToolUse (Write/Edit/MultiEdit) | A markdown env-var summary table row attributing an environment variable to a code file whose source never references that variable name |
79
78
  | `es_exe_path_rewriter.py` | PreToolUse | Rewrites paths referencing `.exe` under the Everything search path |
80
79
  | `fable_spawn_gate.py` | PreToolUse (Agent/Task) | An `Agent` or `Task` spawn whose prompt carries no `FABLE-SPAWN-AUTHORIZED` token and whose model field reads `fable` in any letter case — the bare alias, or a delimiter segment of a full model id, so `claude-fable-5` is denied too |
@@ -92,7 +91,6 @@ The check modules it calls are the `code_rules_<concern>.py` files below.
92
91
  | `pii_prevention_blocker.py` | PreToolUse (Write/Edit/MultiEdit/Bash/PowerShell/MCP GitHub) | Entry hook — content that carries high-confidence personal data or secrets (real emails, home-dir paths, private IPs, credential material) on write, durable GitHub posts, or staged commit paths; resolves the staged-commit repository from the command it gates (via `pii_prevention_blocker_parts`), not the session working directory |
93
92
  | `pii_scanner.py` | library | Pure text scanners shared by `pii_prevention_blocker.py` |
94
93
  | `piped_pytest_blocker.py` | PreToolUse (Bash) | A pytest run whose output feeds a pipe, where the pipeline reports the exit code of the command on the right |
95
- | `plain_language_blocker.py` | PreToolUse (Write/Edit/AskUserQuestion) | Heavy or jargon words in user-facing prose when `CLAUDE_PROSE_STYLE_ENFORCEMENT` is on (default off); AskUserQuestion lean-block structure stays always on |
96
94
  | `precommit_code_rules_gate.py` | PreToolUse (Bash) | Staged changes that fail the CODE_RULES gate at commit time |
97
95
  | `pytest_testpaths_orphan_blocker.py` | PreToolUse (Write/Edit/MultiEdit) | New `test_*.py` files created under a directory absent from a package's explicit pytest `testpaths` allowlist |
98
96
  | `question_to_user_enforcer.py` | Stop | User-directed questions not routed through `AskUserQuestion` |
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """PreToolUse hook that enforces AskUserQuestion field shape."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import json
7
+ import sys
8
+ from collections.abc import Mapping, Sequence
9
+ from pathlib import Path
10
+
11
+ _hooks_dir = str(Path(__file__).resolve().parent.parent)
12
+ if _hooks_dir not in sys.path:
13
+ sys.path.insert(0, _hooks_dir)
14
+
15
+ from hooks_constants.ask_user_question_shape import ( # noqa: E402
16
+ analyze_ask_user_question_shape,
17
+ )
18
+ from hooks_constants.ask_user_question_shape_constants import ( # noqa: E402
19
+ ASK_USER_QUESTION_TOOL_NAME,
20
+ LEAN_QUESTION_BLOCK_GUIDANCE,
21
+ LEAN_QUESTION_BLOCK_PREFIX,
22
+ LEAN_QUESTION_VIOLATION_SEPARATOR,
23
+ USER_FACING_LEAN_QUESTION_NOTICE,
24
+ )
25
+ from hooks_constants.hook_block_logger import log_hook_block # noqa: E402
26
+
27
+
28
+ def build_lean_block_reason(all_violations: Sequence[str]) -> str:
29
+ """Build a deny reason that names each field-shape violation."""
30
+ violation_list = LEAN_QUESTION_VIOLATION_SEPARATOR.join(all_violations)
31
+ return f"{LEAN_QUESTION_BLOCK_PREFIX}{violation_list}. {LEAN_QUESTION_BLOCK_GUIDANCE}"
32
+
33
+
34
+ def evaluate(payload_by_key: Mapping[str, object]) -> str | None:
35
+ """Return a deny reason when an AskUserQuestion payload breaks field shape."""
36
+ tool_name = payload_by_key.get("tool_name", "")
37
+ tool_input = payload_by_key.get("tool_input", {})
38
+ if tool_name != ASK_USER_QUESTION_TOOL_NAME:
39
+ return None
40
+ if not isinstance(tool_input, Mapping):
41
+ return None
42
+ shape_result = analyze_ask_user_question_shape(tool_input)
43
+ if shape_result.is_lean:
44
+ return None
45
+ return build_lean_block_reason(shape_result.all_violations)
46
+
47
+
48
+ def build_deny_payload(deny_reason: str) -> dict[str, object]:
49
+ """Build the standard PreToolUse deny payload for a shape violation."""
50
+ log_hook_block(
51
+ calling_hook_name="ask_user_question_shape_blocker.py",
52
+ hook_event="PreToolUse",
53
+ block_reason=deny_reason,
54
+ )
55
+ return {
56
+ "hookSpecificOutput": {
57
+ "hookEventName": "PreToolUse",
58
+ "permissionDecision": "deny",
59
+ "permissionDecisionReason": deny_reason,
60
+ },
61
+ "systemMessage": USER_FACING_LEAN_QUESTION_NOTICE,
62
+ "suppressOutput": True,
63
+ }
64
+
65
+
66
+ def main() -> None:
67
+ """Read one PreToolUse payload and deny malformed question shape."""
68
+ try:
69
+ payload_by_key = json.load(sys.stdin)
70
+ except json.JSONDecodeError:
71
+ sys.exit(0)
72
+
73
+ if not isinstance(payload_by_key, dict):
74
+ sys.exit(0)
75
+ deny_reason = evaluate(payload_by_key)
76
+ if deny_reason is None:
77
+ sys.exit(0)
78
+ sys.stdout.write(json.dumps(build_deny_payload(deny_reason)))
79
+ sys.stdout.flush()
80
+
81
+
82
+ if __name__ == "__main__":
83
+ main()
@@ -49,6 +49,7 @@ from observability.prose_matcher_advisory import emit_advisory_candidate # noqa
49
49
  PLUGIN_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
50
50
 
51
51
  RESEARCH_MODE_SKILL_SEARCH_PATHS = [
52
+ os.path.join(PLUGIN_ROOT, ".agents", "skills", "research-mode", "SKILL.md"),
52
53
  os.path.join(PLUGIN_ROOT, "skills", "research-mode", "SKILL.md"),
53
54
  os.path.join(os.path.expanduser("~"), ".claude", "skills", "research-mode", "SKILL.md"),
54
55
  os.path.join(os.path.expanduser("~"), ".claude", "plugins", "marketplaces", "claude-deep-research", "skills", "research-mode", "SKILL.md"),
@@ -25,6 +25,7 @@ if _hooks_dir not in sys.path:
25
25
  from hooks_constants.hook_block_logger import log_hook_block # noqa: E402
26
26
  from hooks_constants.orchestrator_refresh_reschedule_gate_constants import ( # noqa: E402
27
27
  ALL_HOME_SKILLS_RELATIVE_PARTS,
28
+ ALL_PACKAGE_AGENTS_SKILL_SCRIPTS_RELATIVE_PARTS,
28
29
  ALL_SCHEDULE_TOOL_NAMES,
29
30
  ALL_SKILL_SCRIPTS_RELATIVE_PARTS,
30
31
  CALLING_HOOK_NAME,
@@ -51,14 +52,17 @@ def _candidate_skill_script_directories() -> list[Path]:
51
52
  """
52
53
  all_candidates: list[Path] = []
53
54
  plugin_root = os.environ.get(PLUGIN_ROOT_ENV_VAR)
55
+ relative_skill_script_layouts = (
56
+ ALL_PACKAGE_AGENTS_SKILL_SCRIPTS_RELATIVE_PARTS,
57
+ ALL_SKILL_SCRIPTS_RELATIVE_PARTS,
58
+ )
54
59
  if plugin_root:
55
- all_candidates.append(
56
- Path(plugin_root).joinpath(*ALL_SKILL_SCRIPTS_RELATIVE_PARTS)
57
- )
60
+ plugin_root_path = Path(plugin_root)
61
+ for each_relative_parts in relative_skill_script_layouts:
62
+ all_candidates.append(plugin_root_path.joinpath(*each_relative_parts))
58
63
  package_hooks_parent = Path(__file__).resolve().parents[2]
59
- all_candidates.append(
60
- package_hooks_parent.joinpath(*ALL_SKILL_SCRIPTS_RELATIVE_PARTS)
61
- )
64
+ for each_relative_parts in relative_skill_script_layouts:
65
+ all_candidates.append(package_hooks_parent.joinpath(*each_relative_parts))
62
66
  all_candidates.append(Path.home().joinpath(*ALL_HOME_SKILLS_RELATIVE_PARTS))
63
67
  return all_candidates
64
68
 
@@ -26,16 +26,6 @@ from pathlib import Path
26
26
 
27
27
  import _path_setup # noqa: F401
28
28
 
29
- from plain_language_blocker import (
30
- build_allow_advisory_payload as build_plain_language_allow_advisory_payload,
31
- )
32
- from plain_language_blocker import (
33
- build_deny_payload as build_plain_language_deny_payload,
34
- )
35
- from plain_language_blocker import evaluate as evaluate_plain_language
36
- from plain_language_blocker import (
37
- evaluate_with_advisory as evaluate_plain_language_with_advisory,
38
- )
39
29
  from state_description_blocker import (
40
30
  build_deny_payload as build_state_description_deny_payload,
41
31
  )
@@ -50,7 +40,6 @@ from hooks_constants.pre_tool_use_dispatcher_constants import (
50
40
  DENY_DECISION,
51
41
  EXIT_CODE_TWO_DENY_REASON,
52
42
  HOOK_EVENT_NAME,
53
- PLAIN_LANGUAGE_BLOCKER_MODULE_NAME,
54
43
  REASON_JOIN_SEPARATOR,
55
44
  STATE_DESCRIPTION_BLOCKER_MODULE_NAME,
56
45
  SYSTEM_MESSAGE_JOIN_SEPARATOR,
@@ -77,7 +66,7 @@ class NativeHook:
77
66
  additionalContext, and suppressOutput).
78
67
  evaluate_with_advisory: Optional evaluator that returns
79
68
  ``(deny_reason, advisory_system_message)`` so allow-path notices
80
- match the standalone hook (plain_language OP-07D).
69
+ match the standalone hook.
81
70
  build_allow_advisory_payload: Optional builder for an allow payload that
82
71
  carries the advisory systemMessage without denying.
83
72
  """
@@ -93,12 +82,6 @@ _native_hook_by_module_name: dict[str, NativeHook] = {
93
82
  evaluate=evaluate_state_description,
94
83
  build_deny_payload=build_state_description_deny_payload,
95
84
  ),
96
- PLAIN_LANGUAGE_BLOCKER_MODULE_NAME: NativeHook(
97
- evaluate=evaluate_plain_language,
98
- build_deny_payload=build_plain_language_deny_payload,
99
- evaluate_with_advisory=evaluate_plain_language_with_advisory,
100
- build_allow_advisory_payload=build_plain_language_allow_advisory_payload,
101
- ),
102
85
  }
103
86
 
104
87
 
@@ -504,7 +487,7 @@ def _emit_allow_decision(decision: DispatcherDecision) -> None:
504
487
  Matches the shape a standalone hosted hook emits when it auto-approves the
505
488
  write, so a write a hosted hook allows explicitly is auto-approved under the
506
489
  dispatcher rather than falling back to the default permission flow. When a
507
- hook also carried an advisory systemMessage (plain-language heavy words),
490
+ hook also carried an advisory systemMessage,
508
491
  that notice rides on the allow payload without denying.
509
492
  """
510
493
  allow_payload: dict[str, object] = {
@@ -351,7 +351,7 @@ def build_deny_payload(deny_reason: str) -> dict[str, object]:
351
351
  "only the current state. For example:\n"
352
352
  ' BAD: "Uses X instead of Y" → GOOD: "Uses X"\n'
353
353
  ' BAD: "Previously configured via Z" → GOOD: "Configured via Z"\n'
354
- "See ~/.claude/rules/doc-prose-cuts.md for full rules."
354
+ "Apply ~/.claude/rules/asd-ste100-language.md for user-facing language."
355
355
  ),
356
356
  },
357
357
  "systemMessage": "Agent wrote comparative/historical language - describe current state only",