claude-dev-env 2.4.0 → 2.7.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 (309) hide show
  1. package/CLAUDE.md +26 -59
  2. package/_shared/pr-loop/scripts/_claude_permissions_common.py +84 -0
  3. package/_shared/pr-loop/scripts/code_rules_gate.py +6 -3
  4. package/_shared/pr-loop/scripts/code_rules_gate_parts/CLAUDE.md +12 -2
  5. package/_shared/pr-loop/scripts/code_rules_gate_parts/baseline_import_isolation.py +309 -0
  6. package/_shared/pr-loop/scripts/code_rules_gate_parts/staged_test_regression.py +540 -0
  7. package/_shared/pr-loop/scripts/code_rules_gate_parts/staged_test_running.py +206 -70
  8. package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/__init__.py +1 -0
  9. package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/_repo_test_helpers.py +76 -0
  10. package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/test_baseline_import_isolation.py +248 -0
  11. package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/test_staged_test_regression.py +309 -0
  12. package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/test_staged_test_running.py +91 -58
  13. package/_shared/pr-loop/scripts/grant_project_claude_permissions.py +306 -306
  14. package/_shared/pr-loop/scripts/pr_loop_shared_constants/claude_permissions_constants.py +44 -0
  15. package/_shared/pr-loop/scripts/pr_loop_shared_constants/code_rules_gate_constants.py +202 -0
  16. package/_shared/pr-loop/scripts/pr_loop_shared_constants/copilot_quota_constants.py +24 -24
  17. package/_shared/pr-loop/scripts/pr_loop_shared_constants/stale_worktree_rule_sweep_constants.py +107 -107
  18. package/_shared/pr-loop/scripts/revoke_project_claude_permissions.py +290 -48
  19. package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +42 -2
  20. package/_shared/pr-loop/scripts/tests/test_claude_permissions_constants.py +36 -0
  21. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +100 -1
  22. package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +497 -497
  23. package/_shared/pr-loop/scripts/tests/test_revoke_project_claude_permissions.py +311 -2
  24. package/_shared/pr-loop/scripts/tests/test_stale_worktree_rule_sweep.py +301 -301
  25. package/_shared/pr-loop/scripts/tests/test_stale_worktree_rule_sweep_constants.py +85 -85
  26. package/_shared/pr-loop/worker-spawn.md +1 -1
  27. package/agents/CLAUDE.md +3 -2
  28. package/agents/caveman.md +0 -1
  29. package/agents/clasp-deployment-orchestrator.md +0 -1
  30. package/agents/clean-coder.md +0 -1
  31. package/agents/code-advisor.md +0 -1
  32. package/agents/code-quality-agent.md +1 -2
  33. package/agents/code-verifier.md +36 -8
  34. package/agents/deep-research.md +0 -1
  35. package/agents/docs-agent.md +0 -1
  36. package/agents/git-commit-crafter.md +0 -1
  37. package/agents/issue-tracker.md +42 -0
  38. package/agents/plan-packet-validator.md +0 -1
  39. package/agents/pr-description-writer.md +0 -1
  40. package/agents/test_agent_frontmatter.py +67 -18
  41. package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +143 -141
  42. package/bin/CLAUDE.md +68 -5
  43. package/bin/codex-compat.mjs +104 -0
  44. package/bin/codex-compat.test.mjs +51 -0
  45. package/bin/ever-shipped-skills.mjs +1 -0
  46. package/bin/install-constants.mjs +88 -0
  47. package/bin/install.mjs +1138 -114
  48. package/bin/install.prune.test.mjs +869 -19
  49. package/bin/install.test.mjs +906 -2
  50. package/codex-capability-map.json +13 -0
  51. package/commands/implement.md +1 -1
  52. package/commands/right-size.md +1 -1
  53. package/docs/CLAUDE.md +1 -0
  54. package/docs/CODE_RULES.md +2 -0
  55. package/docs/codex-compatibility.md +25 -0
  56. package/docs/host-pool-health-monitor.md +102 -0
  57. package/docs/nas-ssh-invocation.md +96 -12
  58. package/docs/references/CLAUDE.md +4 -2
  59. package/docs/references/advisor-tool.md +13 -0
  60. package/docs/references/code-review-enforcement.md +35 -0
  61. package/docs/references/team-advisor-skill.md +14 -0
  62. package/hooks/blocking/CLAUDE.md +4 -0
  63. package/hooks/blocking/code_review_pr_create_gate.py +7 -3
  64. package/hooks/blocking/code_review_push_gate.py +9 -4
  65. package/hooks/blocking/code_review_stamp_directory_write_blocker.py +8 -0
  66. package/hooks/blocking/config/__init__.py +5 -5
  67. package/hooks/blocking/config/code_review_enforcement_constants.py +40 -7
  68. package/hooks/blocking/config/test_code_review_enforcement_constants.py +58 -0
  69. package/hooks/blocking/config/verified_commit_constants.py +160 -159
  70. package/hooks/blocking/eli11_reply_enforcer.py +479 -0
  71. package/hooks/blocking/gh_body_arg_blocker.py +1 -1
  72. package/hooks/blocking/nas_ssh_binary_enforcer.py +8 -46
  73. package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +256 -0
  74. package/hooks/blocking/pre_tool_use_dispatcher.py +24 -24
  75. package/hooks/blocking/shell_substitution_blocker.py +129 -0
  76. package/hooks/blocking/state_description_blocker.py +1 -1
  77. package/hooks/blocking/stop_dispatcher.py +1 -1
  78. package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +2 -3
  79. package/hooks/blocking/test_code_review_pr_create_gate.py +14 -0
  80. package/hooks/blocking/test_code_review_push_gate.py +16 -0
  81. package/hooks/blocking/test_code_review_stamp_directory_write_blocker.py +19 -0
  82. package/hooks/blocking/test_eli11_reply_enforcer.py +457 -0
  83. package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +231 -0
  84. package/hooks/blocking/test_pre_tool_use_dispatcher.py +10 -1
  85. package/hooks/blocking/test_shell_substitution_blocker.py +124 -0
  86. package/hooks/blocking/test_stop_dispatcher.py +23 -0
  87. package/hooks/blocking/test_unscoped_search_blocker.py +102 -0
  88. package/hooks/blocking/test_verdict_directory_write_blocker.py +804 -808
  89. package/hooks/blocking/test_verification_verdict_store.py +54 -0
  90. package/hooks/blocking/test_verified_commit_gate.py +581 -581
  91. package/hooks/blocking/test_verified_commit_message_accuracy_blocker.py +131 -131
  92. package/hooks/blocking/unscoped_search_blocker.py +391 -0
  93. package/hooks/blocking/verdict_directory_write_blocker.py +687 -687
  94. package/hooks/blocking/verification_verdict_store.py +1039 -1036
  95. package/hooks/blocking/verified_commit_message_accuracy_blocker.py +167 -167
  96. package/hooks/blocking/verifier_verdict_minter.py +280 -280
  97. package/hooks/git-hooks/CLAUDE.md +3 -0
  98. package/hooks/git-hooks/conftest.py +30 -0
  99. package/hooks/git-hooks/gate_utils.py +2 -2
  100. package/hooks/git-hooks/git_hooks_constants/__init__.py +41 -2
  101. package/hooks/git-hooks/pre_push.py +75 -4
  102. package/hooks/git-hooks/pre_push_base_reference.py +166 -0
  103. package/hooks/git-hooks/test_config.py +0 -15
  104. package/hooks/git-hooks/test_gate_utils.py +3 -15
  105. package/hooks/git-hooks/test_pre_commit.py +1 -15
  106. package/hooks/git-hooks/test_pre_push.py +257 -23
  107. package/hooks/git-hooks/test_pre_push_base_reference.py +339 -0
  108. package/hooks/hooks.json +10 -12
  109. package/hooks/hooks_constants/CLAUDE.md +7 -2
  110. package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +4 -4
  111. package/hooks/hooks_constants/eli11_reply_enforcer_constants.py +101 -0
  112. package/hooks/hooks_constants/enter_worktree_prefetch_constants.py +18 -18
  113. package/hooks/hooks_constants/nas_ssh_binary_enforcer_constants.py +2 -8
  114. package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +48 -0
  115. package/hooks/hooks_constants/ruff_integration_constants.py +16 -0
  116. package/hooks/hooks_constants/shell_command_segments.py +82 -0
  117. package/hooks/hooks_constants/shell_substitution_blocker_constants.py +67 -0
  118. package/hooks/hooks_constants/stop_dispatcher_constants.py +1 -0
  119. package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +5 -6
  120. package/hooks/hooks_constants/test_stop_dispatcher_constants.py +1 -0
  121. package/hooks/hooks_constants/unscoped_search_blocker_constants.py +153 -0
  122. package/hooks/lifecycle/enter_worktree_origin_prefetch.py +163 -146
  123. package/hooks/lifecycle/test_enter_worktree_origin_prefetch.py +185 -178
  124. package/hooks/pyproject.toml +1 -0
  125. package/hooks/validators/CLAUDE.md +1 -0
  126. package/hooks/validators/config/__init__.py +0 -0
  127. package/hooks/validators/config/directory_exemption_constants.py +183 -0
  128. package/hooks/validators/config/test_directory_exemption_constants.py +21 -0
  129. package/hooks/validators/conftest.py +4 -0
  130. package/hooks/validators/ruff_integration.py +49 -5
  131. package/hooks/validators/run_all_validators.py +206 -9
  132. package/hooks/validators/test_directory_exemption_constants.py +185 -0
  133. package/hooks/validators/test_python_antipattern_checks.py +110 -5
  134. package/hooks/validators/test_ruff_integration.py +92 -1
  135. package/hooks/validators/test_run_all_validators.py +115 -68
  136. package/hooks/validators/test_run_all_validators_pretooluse.py +159 -1
  137. package/package.json +13 -3
  138. package/rules/CLAUDE.md +17 -22
  139. package/rules/agent-spawn-protocol.md +6 -6
  140. package/rules/anti-corollary-tests.md +1 -1
  141. package/rules/bdd.md +1 -1
  142. package/rules/cleanup-temp-files.md +10 -4
  143. package/rules/code-standards.md +7 -0
  144. package/rules/conservative-action.md +1 -5
  145. package/rules/context7.md +0 -4
  146. package/rules/destructive-commands.md +47 -0
  147. package/rules/doc-inventory-integrity.md +48 -0
  148. package/rules/doc-prose-cuts.md +58 -0
  149. package/rules/docstring-prose-matches-implementation.md +53 -44
  150. package/rules/durable-post-artifacts.md +0 -4
  151. package/rules/eli11-replies.md +31 -0
  152. package/rules/explore-thoroughly.md +4 -4
  153. package/rules/falsify-before-green.md +68 -0
  154. package/rules/file-global-constants.md +1 -1
  155. package/rules/filesystem-search.md +51 -0
  156. package/rules/gh-cli-conventions.md +27 -0
  157. package/rules/git-workflow.md +26 -0
  158. package/rules/hedging-claims.md +9 -0
  159. package/rules/long-horizon-autonomy.md +0 -4
  160. package/rules/measurement-denominators.md +48 -0
  161. package/rules/nas-ssh-invocation.md +23 -5
  162. package/rules/parallel-tools.md +2 -2
  163. package/rules/plain-illustrative-docstrings.md +3 -7
  164. package/rules/plain-language.md +2 -0
  165. package/rules/proof-of-work-pr-comments.md +0 -4
  166. package/rules/re-stage-before-commit.md +2 -0
  167. package/rules/research-mode.md +10 -0
  168. package/rules/shell-invocation.md +21 -0
  169. package/rules/testing.md +4 -0
  170. package/rules/verified-commit-gate-skip.md +3 -27
  171. package/rules/verify-before-asking.md +5 -0
  172. package/rules/windows-filesystem-safe.md +1 -1
  173. package/rules/workers-done-before-complete.md +4 -0
  174. package/scripts/CLAUDE.md +1 -0
  175. package/scripts/Capture-PoolHealth.ps1 +410 -0
  176. package/scripts/Migrate-ShellPolicy.ps1 +1 -1
  177. package/scripts/_code_review_test_support.py +404 -0
  178. package/scripts/claude_chain_runner.py +141 -1
  179. package/scripts/codex_capability_bridge.py +171 -0
  180. package/scripts/codex_compat_materializer.py +1087 -0
  181. package/scripts/codex_compat_watcher.py +502 -0
  182. package/scripts/conftest.py +16 -1
  183. package/scripts/dev_env_scripts_constants/CLAUDE.md +1 -1
  184. package/scripts/dev_env_scripts_constants/claude_chain_constants.py +9 -0
  185. package/scripts/dev_env_scripts_constants/code_review_constants.py +37 -0
  186. package/scripts/invoke_code_review.py +11 -4
  187. package/scripts/resolve_worker_spawn.py +626 -626
  188. package/scripts/spawn_grok_batch.py +672 -672
  189. package/scripts/sync_to_cursor/rules.py +0 -10
  190. package/scripts/test_claude_chain_runner.py +131 -0
  191. package/scripts/test_invoke_code_review.py +85 -908
  192. package/scripts/test_invoke_code_review_chain.py +70 -0
  193. package/scripts/test_invoke_code_review_cli.py +192 -0
  194. package/scripts/test_invoke_code_review_contract.py +256 -0
  195. package/scripts/test_invoke_code_review_git.py +123 -0
  196. package/scripts/test_invoke_code_review_mode.py +99 -0
  197. package/scripts/test_resolve_worker_spawn.py +1014 -1014
  198. package/scripts/tests/test_code_review_constants.py +80 -0
  199. package/scripts/tests/test_codex_capability_bridge.py +91 -0
  200. package/scripts/tests/test_codex_compat_materializer.py +632 -0
  201. package/scripts/tests/test_codex_compat_watcher.py +599 -0
  202. package/scripts/tests/test_sync_to_cursor.py +0 -1
  203. package/skills/CLAUDE.md +2 -0
  204. package/skills/auditing-claude-config/SKILL.md +114 -114
  205. package/skills/autoconverge/SKILL.md +427 -427
  206. package/skills/autoconverge/reference/convergence.md +24 -3
  207. package/skills/autoconverge/workflow/CLAUDE.md +1 -0
  208. package/skills/autoconverge/workflow/converge.clean-audit.test.mjs +3 -3
  209. package/skills/autoconverge/workflow/converge.contract.test.mjs +1263 -1263
  210. package/skills/autoconverge/workflow/converge.mjs +168 -1
  211. package/skills/autoconverge/workflow/converge.p2-advance.test.mjs +202 -0
  212. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +2 -2
  213. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +2 -2
  214. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +2 -2
  215. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +2 -2
  216. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +2 -2
  217. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +2 -2
  218. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +2 -2
  219. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +2 -2
  220. package/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +265 -265
  221. package/skills/bugteam/reference/copilot-gap-analysis.md +1 -1
  222. package/skills/closeout/SKILL.md +33 -50
  223. package/skills/codex-review/scripts/codex_review_scripts_constants/run_constants.py +8 -0
  224. package/skills/codex-review/scripts/run_codex_review.py +233 -1
  225. package/skills/codex-review/scripts/test_run_codex_review.py +189 -0
  226. package/skills/condensing-instructions/SKILL.md +72 -0
  227. package/skills/copilot-review/SKILL.md +119 -119
  228. package/skills/e-code-review/SKILL.md +52 -0
  229. package/skills/e-code-review/reference/fix.md +54 -0
  230. package/skills/e-code-review/reference/loop.md +43 -0
  231. package/skills/e-code-review/reference/low.md +57 -0
  232. package/skills/e-code-review/reference/medium.md +153 -0
  233. package/skills/e-code-review/reference/xhigh.md +182 -0
  234. package/skills/e-simplify/SKILL.md +97 -0
  235. package/skills/fresh-branch/CLAUDE.md +1 -1
  236. package/skills/fresh-branch/SKILL.md +5 -6
  237. package/skills/fresh-branch/scripts/create_fresh_branch.py +42 -24
  238. package/skills/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +1 -3
  239. package/skills/fresh-branch/scripts/test_create_fresh_branch.py +30 -126
  240. package/skills/issue-tracker/SKILL.md +92 -0
  241. package/skills/issue-tracker/reference/epic-and-sub-issue-model.md +55 -0
  242. package/skills/issue-tracker/reference/handoff-schema.md +64 -0
  243. package/skills/issue-tracker/reference/operation-matrix.md +41 -0
  244. package/skills/orchestrator/SKILL.md +177 -22
  245. package/skills/orchestrator/scripts/status_gate.py +625 -0
  246. package/skills/orchestrator/scripts/status_gate_constants/__init__.py +1 -0
  247. package/skills/orchestrator/scripts/status_gate_constants/config/__init__.py +1 -0
  248. package/skills/orchestrator/scripts/status_gate_constants/config/constants.py +47 -0
  249. package/skills/orchestrator/scripts/test_status_gate.py +439 -0
  250. package/skills/orchestrator-refresh/SKILL.md +129 -35
  251. package/skills/plan-to-pr/SKILL.md +155 -0
  252. package/skills/plan-to-pr/reference/final-validation-tasks.md +15 -0
  253. package/skills/plan-to-pr/reference/model-routing.md +36 -0
  254. package/skills/plan-to-pr/reference/packet-contract.md +43 -0
  255. package/skills/plan-to-pr/reference/packet-schema.json +57 -0
  256. package/skills/plan-to-pr/reference/process-inventory.md +22 -0
  257. package/skills/plan-to-pr/reference/review-loop.md +33 -0
  258. package/skills/plan-to-pr/reference/run-record.schema.json +27 -0
  259. package/skills/plan-to-pr/reference/self-audit-tasks.md +15 -0
  260. package/skills/plan-to-pr/reference/task-seeds.md +14 -0
  261. package/skills/plan-to-pr/reference/task-ticket.md +38 -0
  262. package/skills/plan-to-pr/scripts/config/__init__.py +1 -0
  263. package/skills/plan-to-pr/scripts/config/constants.py +193 -0
  264. package/skills/plan-to-pr/scripts/create_packet.py +173 -0
  265. package/skills/plan-to-pr/scripts/test_create_packet.py +102 -0
  266. package/skills/plan-to-pr/scripts/test_validate_packet.py +256 -0
  267. package/skills/plan-to-pr/scripts/test_validate_protocol.py +135 -0
  268. package/skills/plan-to-pr/scripts/test_validate_run.py +158 -0
  269. package/skills/plan-to-pr/scripts/validate_packet.py +655 -0
  270. package/skills/plan-to-pr/scripts/validate_protocol.py +622 -0
  271. package/skills/plan-to-pr/scripts/validate_run.py +173 -0
  272. package/skills/plan-to-pr/test_skill_contract.py +207 -0
  273. package/skills/plan-to-pr/test_task_ticket_contract.py +151 -0
  274. package/skills/pr-converge/SKILL.md +472 -469
  275. package/skills/pr-converge/reference/examples.md +3 -3
  276. package/skills/pr-converge/reference/fix-protocol.md +1 -1
  277. package/skills/pr-converge/reference/ground-rules.md +7 -4
  278. package/skills/pr-converge/reference/multi-pr-orchestration.md +4 -1
  279. package/skills/pr-converge/reference/per-tick.md +5 -5
  280. package/skills/pr-converge/reference/progress-checklist.md +1 -1
  281. package/skills/pr-converge/scripts/check_convergence_gates.py +279 -279
  282. package/skills/pr-converge/scripts/test_check_convergence_codex.py +507 -507
  283. package/skills/pr-converge/scripts/test_check_convergence_gates.py +84 -84
  284. package/skills/pr-converge/test_step5_host_branch.py +1 -1
  285. package/skills/pr-fix-protocol/SKILL.md +1 -1
  286. package/skills/privacy-hygiene/SKILL.md +68 -68
  287. package/skills/privacy-hygiene/reference/sweep-procedure.md +1 -1
  288. package/skills/prototype/workflows/promotion.md +1 -1
  289. package/skills/release-notes-html/SKILL.md +164 -0
  290. package/skills/session-log/SKILL.md +1 -1
  291. package/skills/task-build/CLAUDE.md +8 -7
  292. package/skills/task-build/SKILL.md +16 -8
  293. package/skills/task-build/reference/tool-routing.md +19 -0
  294. package/rules/claude-md-orphan-file.md +0 -28
  295. package/rules/cleanup-command-forms.md +0 -23
  296. package/rules/code-reviews.md +0 -11
  297. package/rules/env-var-table-code-drift.md +0 -10
  298. package/rules/gh-body-file.md +0 -5
  299. package/rules/gh-paginate.md +0 -3
  300. package/rules/hook-prose-matches-detector.md +0 -15
  301. package/rules/no-historical-clutter.md +0 -26
  302. package/rules/no-inline-destructive-literals.md +0 -9
  303. package/rules/no-justification-noise.md +0 -61
  304. package/rules/package-inventory-stale-entry.md +0 -25
  305. package/rules/right-sized-engineering.md +0 -28
  306. package/rules/self-contained-docs.md +0 -17
  307. package/rules/shell-invocation-policy.md +0 -5
  308. package/rules/tdd.md +0 -7
  309. package/skills/closeout/reference/issue-body-templates.md +0 -108
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: condensing-instructions
3
+ description: >-
4
+ Refine an instruction document for Claude 5 generation models: cut rules the
5
+ model's judgment already covers, move detail behind progressive disclosure,
6
+ and route each remaining piece to the system prompt, CLAUDE.md, a skill, or a
7
+ reference. Use for system prompts, CLAUDE.md files, skills, tool
8
+ descriptions, agent instructions, context engineering, prompt slimming, and
9
+ token reduction.
10
+ ---
11
+
12
+ # Condensing Instructions
13
+
14
+ Cut an instruction document to what a Claude 5 generation model needs, and move the rest to the surface that loads it on demand. Over 80% of Claude Code's system prompt came out for Claude Opus 5 and Claude Fable 5 with no measurable drop in performance, so treat a long instruction document as a place with room to cut.
15
+
16
+ ## Clear the conflicts first
17
+
18
+ Read the system prompt, the CLAUDE.md, and the skills as one body of text and find the lines that pull against each other — "leave documentation as appropriate" sitting beside "DO NOT add comments". A conflict makes the model deliberate at length before it acts. Resolve each pair into one statement, or delete both when neither changes what the model does.
19
+
20
+ ## Trade rules for judgment
21
+
22
+ Delete a rule written to block a worst case, such as file deletion. Claude 5 generation models read the surrounding context and decide well without it, and a rigid rule blocks the user who has a real reason to want the behavior it forbids.
23
+
24
+ State the outcome and the signal the model should read:
25
+
26
+ - Cut: "Default to writing no comments. Never write multi-paragraph docstrings or multi-line comment blocks — one short line max. Don't create planning, decision, or analysis documents unless the user asks for them."
27
+ - Keep: "Write code that reads like the surrounding code: match its comment density, naming, and idiom."
28
+
29
+ ## Design the interface in place of examples
30
+
31
+ Examples constrain exploration. Carry usage in the tool's own shape: expressive names, expressive parameters, and types that signal intent. A status parameter enumerated as `pending`, `in_progress`, `completed` shows correct use with no example attached.
32
+
33
+ ## Load detail at the point of use
34
+
35
+ Move detail out of always-on text and into a surface the model reaches for:
36
+
37
+ - A skill the model calls when the task calls for it. Code review and verification detail belongs here.
38
+ - A linked file the model opens on demand.
39
+ - A tool with deferred loading, where the model searches for the definition before it uses the tool.
40
+
41
+ Keep the always-on context lean and let the model pull the rest.
42
+
43
+ ## Say each thing once
44
+
45
+ Put tool usage guidance in the tool description alone. Delete the copy that repeats it in the system prompt.
46
+
47
+ ## Let memory carry session facts
48
+
49
+ Claude's automatic memory captures relevant context and carries it across sessions. Delete hand-written memory notes from CLAUDE.md when memory already holds them.
50
+
51
+ ## Point at rich references
52
+
53
+ Include files as references with @mentions. Prefer a reference the model can read with no ambiguity, in this order:
54
+
55
+ 1. Code from this or another codebase — the highest fidelity specification available.
56
+ 2. A test suite that pins the behavior.
57
+ 3. An HTML artifact or a mockup.
58
+ 4. A rubric, which lets a verification agent score work against a quality standard.
59
+ 5. Prose description or a screenshot.
60
+
61
+ ## Route what remains
62
+
63
+ | Surface | What belongs there |
64
+ |---|---|
65
+ | System prompt | The product Claude works within and the role it plays. For a custom agent, spend real effort here. |
66
+ | CLAUDE.md | A short line on what the repository is, then the gotchas found inside the codebase. Drop anything the model can read off the file structure. Link to skills for the detail. |
67
+ | Skills | Opinions, knowledge, and practices particular to your team or product, written as a guide the model consults. Split a long skill into several files. Constrain only where it matters. |
68
+ | References | Specs, mockups, and codebases pulled in by @mention. |
69
+
70
+ ## Deliver
71
+
72
+ Rewrite the document in place and report what moved to which surface. Offer `claude doctor` as a follow-up pass — it rightsizes skills and CLAUDE.md files against these same rules.
@@ -1,119 +1,119 @@
1
- ---
2
- name: copilot-review
3
- description: >-
4
- Spawns a background subagent that babysits the GitHub Copilot reviewer on the
5
- current PR: each tick it fixes unaddressed findings against HEAD, re-requests
6
- review, and exits on convergence. Triggers: '/copilot-review', 'watch
7
- copilot', 'babysit copilot review', 'keep re-requesting copilot'.
8
- ---
9
-
10
- # Copilot Review
11
-
12
- Delegates Copilot babysitting to a background subagent so the main session stays free. The subagent loops internally and closes itself on convergence.
13
-
14
- ## Transport check (before any GitHub step)
15
-
16
- Run `command -v gh`; when it succeeds, run `gh auth status`; once the PR scope is resolved, run `gh api repos/<owner>/<repo> --jq .permissions.push` and take `true` as the pass. When any check fails, run the `pr-loop-cloud-transport` skill first, route every `gh` operation in this skill through its substitution matrix, and carry the same routing into the subagent prompt so the spawned watcher inherits it.
17
-
18
- ## When this skill applies
19
-
20
- The user is on a PR branch, wants Copilot (the GitHub Copilot reviewer bot) to keep re-reviewing after each push, and wants findings auto-addressed between ticks — but does not want the main conversation consumed by polling.
21
-
22
- ## The Process
23
-
24
- ### Step 0: Opt-out check
25
-
26
- Before any other work, run:
27
-
28
- ```bash
29
- python "$HOME/.claude/_shared/pr-loop/scripts/reviews_disabled.py" --reviewer copilot
30
- ```
31
-
32
- Exit 0 — Copilot reviews are disabled: respond with the literal line
33
- `/copilot-review is disabled via CLAUDE_REVIEWS_DISABLED.` and stop — do not
34
- spawn the subagent, do not call the Copilot reviewer API, do not run any
35
- other step of this skill. Exit 1 — continue. Gate semantics live in the
36
- `reviewer-gates` skill ([../reviewer-gates/SKILL.md](../reviewer-gates/SKILL.md)).
37
-
38
- ### Step 1: Gather PR context
39
-
40
- From the current repo:
41
-
42
- ```bash
43
- # MCP: pull_request_read(method="get") returns {number, url, head.sha, base.ref, head.ref, isDraft}
44
- ```
45
-
46
- Capture `number`, `head.sha`, owner/repo (from `url`), and branch name. Pass these to the subagent so it does not rediscover them.
47
-
48
- ### Step 2: Spawn the background subagent
49
-
50
- Invoke the `Agent` tool with:
51
-
52
- - `subagent_type: "general-purpose"`
53
- - `run_in_background: true`
54
- - `description: "Copilot review loop for PR #<N>"`
55
- - `prompt`: the full instructions in **Step 3 (Subagent prompt template)**, with placeholders filled in from Step 1.
56
-
57
- Record the returned agent ID. Report to the user in one or two lines:
58
-
59
- - The subagent is running in the background.
60
- - It self-terminates on convergence.
61
- - To stop it early, the user says "stop the copilot loop" and you call `TaskStop <agent_id>`.
62
- - The main session stays free; completion arrives as a notification.
63
-
64
- Let the subagent own the cadence. The skill's job in the main session ends once the subagent is spawned and reported.
65
-
66
- ### Step 3: Subagent prompt template
67
-
68
- Pass the prompt in
69
- [`templates/subagent-prompt.md`](templates/subagent-prompt.md) to the subagent
70
- word for word, filling in the bracketed values ([NUMBER], [OWNER], [REPO],
71
- [BRANCH], [HEAD_SHA]) from Step 1. It carries the per-tick work, the escalation
72
- rule (three consecutive no-review ticks), the fix protocol, the stop conditions,
73
- and the 20-tick safety cap.
74
-
75
- ### Step 4: Report back to the user
76
-
77
- After spawning, tell the user in one or two lines: subagent ID, PR URL, that it will notify on convergence or blocker. Nothing else.
78
-
79
- ## Stopping the subagent
80
-
81
- - Convergence → subagent stops itself.
82
- - Blocker → subagent reports and stops.
83
- - User says stop → `TaskStop <agent_id>`.
84
- - User asks what loops are running → `TaskList`.
85
-
86
- ## Ground rules (for the subagent)
87
-
88
- - **Append commits.** Each tick adds one new commit on the existing branch with `git commit` and `git push origin [BRANCH]`.
89
- - **Honor pre-push and pre-commit hooks.** When a hook rejects the change, read its output, fix the underlying issue (the failing test, the missing constant, the broken import), and retry. Solve, do not punt.
90
- - **Respect the PR's current state.** Whatever draft-vs-ready state the PR has when the loop starts is the state the subagent preserves. The user decides when to flip it.
91
- - **One fix commit per tick.** Batch all of the current tick's findings into a single commit; the next tick handles the next review round.
92
- - **Use `copilot-pull-request-reviewer[bot]` with the `[bot]` suffix for the reviewer ID.** That exact spelling is load-bearing — it is the only form the API accepts.
93
-
94
- ## Examples
95
-
96
- <example>
97
- User: `/copilot-review`
98
- Claude: [reads PR context, spawns background subagent with the Step 3 template, reports "subagent X watching PR #123; will notify on convergence"]
99
- </example>
100
-
101
- <example>
102
- User: "babysit copilot on this PR until it's clean"
103
- Claude: [same as above]
104
- </example>
105
-
106
- <example>
107
- Subagent tick fires, latest Copilot review is against an older commit.
108
- Subagent: [re-requests review, schedules next wakeup, returns]
109
- </example>
110
-
111
- <example>
112
- Subagent tick fires, Copilot has 2 unaddressed inline findings on HEAD.
113
- Subagent: [TDD-fixes both, one commit, pushes, replies inline on both threads, resolves both threads, re-requests review, schedules next wakeup]
114
- </example>
115
-
116
- <example>
117
- Subagent tick fires, latest review is clean against HEAD.
118
- Subagent: [reports convergence to parent, terminates — no further wakeups]
119
- </example>
1
+ ---
2
+ name: copilot-review
3
+ description: >-
4
+ Spawns a background subagent that babysits the GitHub Copilot reviewer on the
5
+ current PR: each tick it fixes unaddressed findings against HEAD, re-requests
6
+ review, and exits on convergence. Triggers: '/copilot-review', 'watch
7
+ copilot', 'babysit copilot review', 'keep re-requesting copilot'.
8
+ ---
9
+
10
+ # Copilot Review
11
+
12
+ Delegates Copilot babysitting to a background subagent so the main session stays free. The subagent loops internally and closes itself on convergence.
13
+
14
+ ## Transport check (before any GitHub step)
15
+
16
+ Run `command -v gh`; when it succeeds, run `gh auth status`; once the PR scope is resolved, run `gh api repos/<owner>/<repo> --jq .permissions.push` and take `true` as the pass. When any check fails, run the `pr-loop-cloud-transport` skill first, route every `gh` operation in this skill through its substitution matrix, and carry the same routing into the subagent prompt so the spawned watcher inherits it.
17
+
18
+ ## When this skill applies
19
+
20
+ The user is on a PR branch, wants Copilot (the GitHub Copilot reviewer bot) to keep re-reviewing after each push, and wants findings auto-addressed between ticks — but does not want the main conversation consumed by polling.
21
+
22
+ ## The Process
23
+
24
+ ### Step 0: Opt-out check
25
+
26
+ Before any other work, run:
27
+
28
+ ```bash
29
+ python "$HOME/.claude/_shared/pr-loop/scripts/reviews_disabled.py" --reviewer copilot
30
+ ```
31
+
32
+ Exit 0 — Copilot reviews are disabled: respond with the literal line
33
+ `/copilot-review is disabled via CLAUDE_REVIEWS_DISABLED.` and stop — do not
34
+ spawn the subagent, do not call the Copilot reviewer API, do not run any
35
+ other step of this skill. Exit 1 — continue. Gate semantics live in the
36
+ `reviewer-gates` skill ([../reviewer-gates/SKILL.md](../reviewer-gates/SKILL.md)).
37
+
38
+ ### Step 1: Gather PR context
39
+
40
+ From the current repo:
41
+
42
+ ```bash
43
+ # MCP: pull_request_read(method="get") returns {number, url, head.sha, base.ref, head.ref, isDraft}
44
+ ```
45
+
46
+ Capture `number`, `head.sha`, owner/repo (from `url`), and branch name. Pass these to the subagent so it does not rediscover them.
47
+
48
+ ### Step 2: Spawn the background subagent
49
+
50
+ Invoke the `Agent` tool with:
51
+
52
+ - `subagent_type: "general-purpose"`
53
+ - `run_in_background: true`
54
+ - `description: "Copilot review loop for PR #<N>"`
55
+ - `prompt`: the full instructions in **Step 3 (Subagent prompt template)**, with placeholders filled in from Step 1.
56
+
57
+ Record the returned agent ID. Report to the user in one or two lines:
58
+
59
+ - The subagent is running in the background.
60
+ - It self-terminates on convergence.
61
+ - To stop it early, the user says "stop the copilot loop" and you call `TaskStop <agent_id>`.
62
+ - The main session stays free; completion arrives as a notification.
63
+
64
+ Let the subagent own the cadence. The skill's job in the main session ends once the subagent is spawned and reported.
65
+
66
+ ### Step 3: Subagent prompt template
67
+
68
+ Pass the prompt in
69
+ [`templates/subagent-prompt.md`](templates/subagent-prompt.md) to the subagent
70
+ word for word, filling in the bracketed values ([NUMBER], [OWNER], [REPO],
71
+ [BRANCH], [HEAD_SHA]) from Step 1. It carries the per-tick work, the escalation
72
+ rule (three consecutive no-review ticks), the fix protocol, the stop conditions,
73
+ and the 20-tick safety cap.
74
+
75
+ ### Step 4: Report back to the user
76
+
77
+ After spawning, tell the user in one or two lines: subagent ID, PR URL, that it will notify on convergence or blocker. Nothing else.
78
+
79
+ ## Stopping the subagent
80
+
81
+ - Convergence → subagent stops itself.
82
+ - Blocker → subagent reports and stops.
83
+ - User says stop → `TaskStop <agent_id>`.
84
+ - User asks what loops are running → `TaskList`.
85
+
86
+ ## Ground rules (for the subagent)
87
+
88
+ - **Append commits.** Each tick adds one new commit on the existing branch with `git commit` and `git push origin [BRANCH]`.
89
+ - **Honor pre-push and pre-commit hooks.** When a hook rejects the change, read its output, fix the underlying issue (the failing test, the missing constant, the broken import), and retry. Solve, do not punt.
90
+ - **Respect the PR's current state.** Whatever draft-vs-ready state the PR has when the loop starts is the state the subagent preserves. The user decides when to flip it.
91
+ - **One fix commit per tick.** Batch all of the current tick's findings into a single commit; the next tick handles the next review round.
92
+ - **Use `copilot-pull-request-reviewer[bot]` with the `[bot]` suffix for the reviewer ID.** That exact spelling is load-bearing — it is the only form the API accepts.
93
+
94
+ ## Examples
95
+
96
+ <example>
97
+ User: `/copilot-review`
98
+ Claude: [reads PR context, spawns background subagent with the Step 3 template, reports "subagent X watching PR #123; will notify on convergence"]
99
+ </example>
100
+
101
+ <example>
102
+ User: "babysit copilot on this PR until it's clean"
103
+ Claude: [same as above]
104
+ </example>
105
+
106
+ <example>
107
+ Subagent tick fires, latest Copilot review is against an older commit.
108
+ Subagent: [re-requests review, schedules next wakeup, returns]
109
+ </example>
110
+
111
+ <example>
112
+ Subagent tick fires, Copilot has 2 unaddressed inline findings on HEAD.
113
+ Subagent: [TDD-fixes both, one commit, pushes, replies inline on both threads, resolves both threads, re-requests review, schedules next wakeup]
114
+ </example>
115
+
116
+ <example>
117
+ Subagent tick fires, latest review is clean against HEAD.
118
+ Subagent: [reports convergence to parent, terminates — no further wakeups]
119
+ </example>
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: e-code-review
3
+ description: >-
4
+ Max-recall code review at a selectable effort level (low, medium, xhigh), with
5
+ optional auto-fix and an auto-execute loop for any level. Triggers:
6
+ /e-code-review, /e-code-review low, /e-code-review medium, /e-code-review
7
+ xhigh, /e-code-review <level> --fix, /e-code-review <level> loop.
8
+ ---
9
+
10
+ # e-code-review
11
+
12
+ **Pick a level, run that review, optionally fix and loop.** Each level has its own procedure file. Fix application lives in `reference/fix.md`; repeat-until-clean lives in `reference/loop.md`.
13
+
14
+ ## Gotchas
15
+
16
+ - **`low` stays single-pass.** Do not spawn subagents. One diff read, one findings pass.
17
+ - **`medium` favors precision, `xhigh` favors recall.** At `medium` (8 angles) surface only findings a maintainer would act on. At `xhigh` (10 angles plus a gap sweep) a single non-REFUTED vote carries the finding; do not drop on uncertainty.
18
+ - **`--fix` applies findings once.** Load `reference/fix.md` and follow it — it owns the fix agent, the commit gate, skip logging, and outcome reporting.
19
+ - **`loop` never asks.** After findings, fix nits or stop on bugs. Load `reference/loop.md` and follow it.
20
+ - **`--fix` and `loop` combine.** With both, each loop round runs the level file, then `reference/fix.md`, then re-reviews.
21
+
22
+ ## When this skill applies
23
+
24
+ Triggers: `/e-code-review <level> [--fix] [loop]`. `<level>` is `low`, `medium`, or `xhigh`. `--fix` and `loop` are each optional and may be used together.
25
+
26
+ **Refusal — first match wins:**
27
+
28
+ - **No level, or an unknown level.** Respond exactly: `Which effort level — low, medium, or xhigh?`
29
+
30
+ ## The process
31
+
32
+ 1. Read `<level>` and the optional `--fix` and `loop` flags. Apply the refusal first.
33
+ 2. Load `reference/low.md`, `reference/medium.md`, or `reference/xhigh.md`. Run that file as one review cycle, ending in its structured findings report.
34
+ 3. If `--fix` is set, load `reference/fix.md` and apply it to that cycle's findings.
35
+ 4. If `loop` is set, load `reference/loop.md` and follow it. Each round re-runs the same level file from step 2, plus step 3 when `--fix` is set.
36
+ 5. Without `--fix` or `loop`, return the cycle findings and stop.
37
+
38
+ ## File index
39
+
40
+ | File | Purpose |
41
+ |---|---|
42
+ | `SKILL.md` | Route by level; dispatch `--fix` and `loop` |
43
+ | `reference/low.md` | low review procedure — 1 diff pass, no verify |
44
+ | `reference/medium.md` | medium review procedure — 8 angles, 1-vote verify |
45
+ | `reference/xhigh.md` | xhigh review procedure — 10 angles, 1-vote verify, gap sweep |
46
+ | `reference/fix.md` | Fix application, commit gate, skip logging, outcome reporting |
47
+ | `reference/loop.md` | Repeat review/fix rounds until clean |
48
+
49
+ ## Folder map
50
+
51
+ - `SKILL.md` — route and dispatch.
52
+ - `reference/` — one procedure per level, plus `fix.md` and `loop.md`.
@@ -0,0 +1,54 @@
1
+ # Fix Behavior (--fix)
2
+
3
+ When `--fix` is passed, apply the reviewed findings to the working tree.
4
+
5
+ ## Resume the finding agent
6
+
7
+ For each finding, resume the same Agent-tool agent instance that originally
8
+ surfaced it. That agent applies all relevant fixes, which you provide guidance
9
+ on in your resume prompt.
10
+
11
+ At `low` — and any time the Agent tool is unavailable — no finder agent exists
12
+ to resume. Apply the fixes yourself, sequentially, in this context, holding to
13
+ every rule below.
14
+
15
+ ## Commit gate
16
+
17
+ Before returning, the resumed agent attempts a commit on its own change:
18
+
19
+ 1. Run `~/.claude/_shared/pr-loop/scripts/code_rules_gate.py --repo-root <repo
20
+ root> <changed/added files>` against every file it changed or added.
21
+ 2. If the gate reports violations, fix them and re-run the exact same command.
22
+ 3. Repeat until the gate returns clean.
23
+ 4. Only after a clean gate result does the agent return control and report
24
+ its outcome.
25
+
26
+ ## Skip candidates
27
+
28
+ Skip a finding when fixing it would change intended behavior, require changes
29
+ well outside the reviewed diff, or the finding itself is judged a false
30
+ positive.
31
+
32
+ Every logged skip surfaces exactly once, batched together, in a single
33
+ consolidated list presented to the user at the very end of the fix pass
34
+ — after every other finding has been fixed, marked not-needed, or skipped,
35
+ and never before.
36
+
37
+ ## Reporting outcomes
38
+
39
+ After fixes land, report the same findings list again through the structured
40
+ findings-report call — the mechanism that renders this review's results as a
41
+ typed list in the host UI — with each finding now carrying an `outcome`:
42
+ `fixed`, `no_change_needed` (the finding was wrong or already handled), or
43
+ `skipped` (real but not applied). Do not repeat the findings as text in the
44
+ response body; the structured call is the record the host UI reads, and the
45
+ batched skip list from above goes in the prose that follows it.
46
+
47
+ ## If findings are fixed later
48
+
49
+ Whenever a reported finding is fixed later in the session — the user asks for
50
+ the fix, or later work fixes it incidentally — call the structured
51
+ findings-report call again with the same findings, each carrying an
52
+ `outcome` (`fixed`, `no_change_needed`, or `skipped`). Do not repeat the
53
+ findings as text. Make that call immediately after the fixes land, before any
54
+ prose summary.
@@ -0,0 +1,43 @@
1
+ # Loop until clean
2
+
3
+ ## Act
4
+
5
+ `loop` on the hub command authorizes the full cycle. After the effort level procedure returns findings, take the matching branch below immediately.
6
+
7
+ Do not ask whether to fix, which nits to keep, whether to commit or push, or whether to re-review. Do not open a plan fork. Do not end the turn on a recommendation.
8
+
9
+ Report progress while you work. Stop for the user only on a terminal outcome below.
10
+
11
+ ## Where fixes come from
12
+
13
+ When `--fix` is also set, each round's fix pass runs `reference\fix.md`
14
+ (relative to this skill's folder) — it owns which agent applies each fix, the
15
+ commit gate, skip logging, and outcome reporting. Apply the branch rules below
16
+ on top of it: they decide whether a round fixes, commits, pushes, and
17
+ re-reviews.
18
+
19
+ ## Scope stays narrow
20
+
21
+ Auto-fix only verified findings on the review target. Leave deferred PR-body follow-ups and unrelated refactors alone.
22
+
23
+ ## How to class each finding
24
+
25
+ Use the finding's verified `severity` when the level emits one.
26
+
27
+ A finding is a `nit` only when that severity is `nit`. Runtime-correctness, security, data-loss, compatibility, and every other non-nit finding is a `bug`.
28
+
29
+ If the level emits no severity (for example untagged `low` lines), consult your advisor to determine classification.
30
+
31
+ ## Required checks
32
+
33
+ "Run required checks" means: run `~/.claude/_shared/pr-loop/scripts/code_rules_gate.py --repo-root <repo root> <changed/added files>` against every file changed or added in the round. On any violation, fix it and re-run the exact same command again — repeat until it reports clean.
34
+
35
+ ## Terminal outcomes
36
+
37
+ Repeat the same-level review/fix cycle until one of these holds:
38
+
39
+ - **Clean.** Findings are `[]` or `(none)`. Post the proof-of-work PR comment when the target is a PR. Run `gh pr ready` for a draft PR; otherwise state ready.
40
+ - **Nits only.** Every surviving finding is severity `nit`. Fix all of them on the review target. Run required checks. Commit once per loop round. Push. Consider this clean — post the proof-of-work PR comment and mark ready as in the Clean branch above.
41
+ - **Any bug.** Validate each bug-severity finding with an advisor before touching code — confirm it's real and confirm the intended fix. Then fix all validated findings (bugs and nits) on the review target. Run required checks. Commit once per loop round. Push. Run the same effort level on the new head. Repeat until clean, then mark ready as above.
42
+
43
+ Do not drop findings to force ready. Without `loop`, run one review at the selected level, fix, and return every validated finding.
@@ -0,0 +1,57 @@
1
+ `low effort → 1 diff pass → no verify → ≥min(files,4) findings`
2
+
3
+ ## Turn 1 — read
4
+
5
+ One tool call: read the unified diff (`git diff @{upstream}...HEAD; git diff HEAD`
6
+ to cover both committed and uncommitted changes, or `git diff main...HEAD` /
7
+ the target passed as an argument). Skip test/fixture
8
+ hunks (`test/`, `spec/`, `__tests__/`, `*_test.*`, `*.test.*`,
9
+ `fixtures/`, `testdata/`) — test-file changes are not reviewed at this level.
10
+ No subagents, no full-file reads.
11
+
12
+ ## Turn 2 — findings
13
+
14
+ Flag runtime-correctness bugs visible from the hunk alone: inverted/wrong
15
+ condition, off-by-one, null/undefined deref where adjacent lines show the value
16
+ can be absent, removed guard, falsy-zero check, missing `await`,
17
+ wrong-variable copy-paste, error swallowed in a catch that should propagate.
18
+ Also flag — still from the hunk alone — new code that duplicates an existing
19
+ helper visible in the diff context, and dead code the diff leaves behind.
20
+
21
+ Do **not** flag style, naming, perf, missing tests, or anything outside the
22
+ hunk.
23
+
24
+ Target **min(files_changed, 4) findings**, most-severe first, reported in one
25
+ call to the structured findings-report call — the mechanism that renders
26
+ findings as a typed list in the host UI — with `{level, findings}`; each
27
+ entry has `file`, `line`, `summary`, `short_summary` (≤60 characters), and
28
+ `failure_scenario`. If you have fewer, do one more pass focused on the largest
29
+ changed file and on any **removed** code blocks. Make that call with an empty
30
+ findings array only if the diff is trivially correct after that pass. Do not
31
+ also print the findings as text.
32
+
33
+ ## Applying fixes (--fix)
34
+
35
+ The `--fix` flag was passed. Follow `reference\fix.md` (relative to this
36
+ skill's folder) for the exact fix, commit-gate, and skip-handling behavior —
37
+ it governs which agent applies each fix, how a fix gets committed, how a skip
38
+ is logged, and how outcomes get reported. Do not repeat the findings as text;
39
+ follow that document's reporting rules once fixes land.
40
+
41
+ ## If findings are fixed later
42
+
43
+ Whenever a reported finding is fixed later in this session — the user asks you
44
+ to fix it, or later work fixes it incidentally — follow `reference\fix.md`'s
45
+ reporting rules again: report the same findings through the structured
46
+ findings-report call, each carrying an `outcome`. Do not repeat the findings
47
+ as text. Make that call immediately after the fixes land, before any prose
48
+ summary; the host UI's per-finding status updates only from that call.
49
+
50
+ ## Looping (`loop`)
51
+
52
+ The `loop` arg was passed. Follow `reference\loop.md` (relative to this
53
+ skill's folder) for how to re-run Turn 1 (read), Turn 2 (findings), and (if
54
+ `--fix` is also present) `reference\fix.md`'s fix pass, repeatedly —
55
+ including its exit condition, iteration cap, and re-invocation rules. Do not
56
+ treat a single pass through this document as complete while `loop` is active;
57
+ hand control to that document instead of stopping at Turn 2.