claude-dev-env 1.34.1 → 1.36.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 (148) hide show
  1. package/agents/clean-coder.md +109 -1
  2. package/agents/docs-agent.md +1 -1
  3. package/agents/project-docs-analyzer.md +0 -1
  4. package/agents/skill-to-agent-converter.md +0 -1
  5. package/bin/install.mjs +28 -8
  6. package/bin/install.test.mjs +9 -1
  7. package/commands/initialize.md +0 -1
  8. package/commands/readability-review.md +4 -4
  9. package/commands/review-plan.md +2 -4
  10. package/commands/stubcheck.md +1 -2
  11. package/docs/CODE_RULES.md +3 -0
  12. package/docs/agents-md-alignment-plan.md +123 -0
  13. package/hooks/blocking/code_rules_enforcer.py +686 -60
  14. package/hooks/blocking/es_exe_path_rewriter.py +10 -4
  15. package/hooks/blocking/test_code_rules_enforcer.py +273 -39
  16. package/hooks/blocking/test_code_rules_enforcer_annotations.py +97 -0
  17. package/hooks/blocking/test_code_rules_enforcer_banned_identifier.py +106 -0
  18. package/hooks/blocking/test_code_rules_enforcer_cap_meta.py +173 -0
  19. package/hooks/blocking/test_code_rules_enforcer_collection_prefix.py +328 -0
  20. package/hooks/blocking/test_code_rules_enforcer_config_path.py +0 -20
  21. package/hooks/blocking/test_code_rules_enforcer_constant_equality.py +33 -11
  22. package/hooks/blocking/test_code_rules_enforcer_existence_checks.py +0 -18
  23. package/hooks/blocking/test_code_rules_enforcer_hardcoded_user_path.py +291 -0
  24. package/hooks/blocking/test_code_rules_enforcer_inline_literal_collections.py +155 -0
  25. package/hooks/blocking/test_code_rules_enforcer_loop_variable_naming.py +194 -0
  26. package/hooks/blocking/test_code_rules_enforcer_naming_pattern.py +49 -13
  27. package/hooks/blocking/test_code_rules_enforcer_skip_decorators.py +0 -26
  28. package/hooks/blocking/test_code_rules_enforcer_string_magic.py +234 -0
  29. package/hooks/blocking/test_code_rules_enforcer_sys_path_insert.py +157 -0
  30. package/hooks/blocking/test_code_rules_enforcer_unused_imports.py +244 -0
  31. package/hooks/blocking/test_es_exe_path_rewriter.py +81 -3
  32. package/hooks/blocking/test_windows_rmtree_blocker.py +120 -8
  33. package/hooks/blocking/windows_rmtree_blocker.py +23 -6
  34. package/hooks/config/banned_identifiers_constants.py +24 -0
  35. package/hooks/config/hardcoded_user_path_constants.py +12 -0
  36. package/hooks/config/hook_log_extractor_constants.py +1 -1
  37. package/hooks/config/pre_tool_use_stdin.py +48 -0
  38. package/hooks/config/setup_project_paths_constants.py +4 -0
  39. package/hooks/config/stuttering_check_config.py +14 -0
  40. package/hooks/config/stuttering_import_binding_constants.py +11 -0
  41. package/hooks/config/sys_path_insert_constants.py +4 -0
  42. package/hooks/config/test_banned_identifiers_constants.py +48 -0
  43. package/hooks/config/test_hardcoded_user_path_constants.py +78 -0
  44. package/hooks/config/test_hook_log_extractor_constants.py +3 -3
  45. package/hooks/config/test_pre_tool_use_stdin.py +80 -0
  46. package/hooks/config/unused_module_import_constants.py +7 -0
  47. package/hooks/config/windows_rmtree_blocker_constants.py +3 -0
  48. package/hooks/diagnostic/hook_log_stop_wrapper.py +7 -4
  49. package/hooks/git-hooks/config.py +3 -3
  50. package/hooks/git-hooks/test_gate_utils.py +10 -10
  51. package/hooks/mypy.ini +2 -0
  52. package/package.json +1 -1
  53. package/rules/gh-paginate.md +125 -0
  54. package/skills/bugteam/CONSTRAINTS.md +12 -6
  55. package/skills/bugteam/PROMPTS.md +0 -39
  56. package/skills/bugteam/SKILL.md +93 -125
  57. package/skills/bugteam/SKILL_EVALS.md +25 -23
  58. package/skills/bugteam/reference/README.md +2 -0
  59. package/skills/bugteam/reference/audit-and-teammates.md +2 -2
  60. package/skills/bugteam/reference/copilot-gap-analysis.md +12 -0
  61. package/skills/bugteam/reference/teardown-publish-permissions.md +1 -1
  62. package/skills/bugteam/reference/workflow-path-a-orchestrated-teams.md +113 -0
  63. package/skills/bugteam/reference/workflow-path-b-task-harness.md +48 -0
  64. package/skills/bugteam/test_skill_additions.py +13 -4
  65. package/skills/bugteam/test_team_lifecycle.py +94 -0
  66. package/skills/findbugs/SKILL.md +3 -3
  67. package/skills/fixbugs/SKILL.md +4 -4
  68. package/skills/monitor-open-prs/SKILL.md +32 -2
  69. package/skills/monitor-open-prs/test_team_lifecycle.py +46 -0
  70. package/skills/pr-converge/SKILL.md +576 -95
  71. package/skills/pr-converge/scripts/README.md +145 -0
  72. package/skills/pr-converge/scripts/caller-window-pid.ps1 +86 -0
  73. package/skills/pr-converge/scripts/check_pr_mergeability.py +79 -0
  74. package/skills/pr-converge/scripts/config/pr_converge_constants.py +65 -0
  75. package/skills/pr-converge/scripts/config/test_pr_converge_constants.py +176 -0
  76. package/skills/pr-converge/scripts/cursor-agents-continue-caller.cmd +9 -0
  77. package/skills/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +16 -0
  78. package/skills/pr-converge/scripts/cursor-agents-continue.ahk +172 -0
  79. package/skills/pr-converge/scripts/cursor-agents-continue.cmd +2 -0
  80. package/skills/pr-converge/scripts/evict_cached_config_modules.py +20 -0
  81. package/skills/pr-converge/scripts/fetch_bugbot_inline_comments.py +110 -0
  82. package/skills/pr-converge/scripts/fetch_bugbot_reviews.py +103 -0
  83. package/skills/pr-converge/scripts/fetch_copilot_inline_comments.py +112 -0
  84. package/skills/pr-converge/scripts/fetch_copilot_reviews.py +121 -0
  85. package/skills/pr-converge/scripts/mark_pr_ready.py +54 -0
  86. package/skills/pr-converge/scripts/open_followup_copilot_pr.py +136 -0
  87. package/skills/pr-converge/scripts/post-bugbot-run.helpers.ps1 +49 -0
  88. package/skills/pr-converge/scripts/post-bugbot-run.ps1 +33 -0
  89. package/skills/pr-converge/scripts/reply_to_inline_comment.py +84 -0
  90. package/skills/pr-converge/scripts/request_copilot_review.py +71 -0
  91. package/skills/pr-converge/scripts/resolve_pr_head.py +58 -0
  92. package/skills/pr-converge/scripts/review_field_helpers.py +43 -0
  93. package/skills/pr-converge/scripts/test_check_pr_mergeability.py +126 -0
  94. package/skills/pr-converge/scripts/test_evict_cached_config_modules.py +22 -0
  95. package/skills/pr-converge/scripts/test_fetch_bugbot_inline_comments.py +342 -0
  96. package/skills/pr-converge/scripts/test_fetch_bugbot_reviews.py +220 -0
  97. package/skills/pr-converge/scripts/test_fetch_copilot_inline_comments.py +372 -0
  98. package/skills/pr-converge/scripts/test_fetch_copilot_reviews.py +280 -0
  99. package/skills/pr-converge/scripts/test_mark_pr_ready.py +69 -0
  100. package/skills/pr-converge/scripts/test_open_followup_copilot_pr.py +236 -0
  101. package/skills/pr-converge/scripts/test_post_bugbot_run.py +195 -0
  102. package/skills/pr-converge/scripts/test_reply_to_inline_comment.py +159 -0
  103. package/skills/pr-converge/scripts/test_request_copilot_review.py +101 -0
  104. package/skills/pr-converge/scripts/test_resolve_pr_head.py +79 -0
  105. package/skills/pr-converge/scripts/test_review_field_helpers.py +80 -0
  106. package/skills/pr-converge/scripts/test_trigger_bugbot.py +139 -0
  107. package/skills/pr-converge/scripts/test_view_pr_context.py +111 -0
  108. package/skills/pr-converge/scripts/trigger_bugbot.py +77 -0
  109. package/skills/pr-converge/scripts/view_pr_context.py +47 -0
  110. package/skills/pr-converge/test_team_lifecycle.py +47 -0
  111. package/skills/pr-converge/workflows/ahk-auto-continue-loop.md +108 -0
  112. package/skills/pr-converge/workflows/schedule-wakeup-loop.md +37 -0
  113. package/skills/qbug/SKILL.md +4 -4
  114. package/skills/qbug/test_qbug_skill_post_fix_audit.py +2 -2
  115. package/skills/resume-review/SKILL.md +261 -0
  116. package/agents/agent-writer.md +0 -157
  117. package/agents/config-centralizer.md +0 -686
  118. package/agents/config-extraction-agent.md +0 -225
  119. package/agents/doc-orchestrator.md +0 -47
  120. package/agents/docx-agent.md +0 -211
  121. package/agents/magic-value-eliminator-agent.md +0 -72
  122. package/agents/mandatory-agent-workflow-agent.md +0 -88
  123. package/agents/parallel-workflow-coordinator.md +0 -779
  124. package/agents/pdf-agent.md +0 -302
  125. package/agents/project-context-loader.md +0 -238
  126. package/agents/readability-review-agent.md +0 -76
  127. package/agents/refactoring-specialist.md +0 -69
  128. package/agents/right-sized-engineer.md +0 -129
  129. package/agents/session-continuity-manager.md +0 -53
  130. package/agents/stub-detector-agent.md +0 -140
  131. package/agents/tdd-test-writer.md +0 -62
  132. package/agents/test-data-builder.md +0 -68
  133. package/agents/tooling-builder.md +0 -78
  134. package/agents/validation-expert.md +0 -71
  135. package/agents/xlsx-agent.md +0 -169
  136. package/skills/bugteam/scripts/README.md +0 -58
  137. package/skills/bugteam/scripts/_claude_permissions_common.py +0 -219
  138. package/skills/bugteam/scripts/bugteam_code_rules_gate.py +0 -633
  139. package/skills/bugteam/scripts/bugteam_fix_hookspath.py +0 -260
  140. package/skills/bugteam/scripts/bugteam_preflight.py +0 -201
  141. package/skills/bugteam/scripts/config/bugteam_fix_hookspath_constants.py +0 -17
  142. package/skills/bugteam/scripts/grant_project_claude_permissions.py +0 -109
  143. package/skills/bugteam/scripts/revoke_project_claude_permissions.py +0 -135
  144. package/skills/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -271
  145. package/skills/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -267
  146. package/skills/bugteam/scripts/test_bugteam_preflight.py +0 -189
  147. package/skills/bugteam/scripts/test_claude_permissions_common.py +0 -44
  148. /package/skills/{bugteam → pr-converge}/scripts/config/__init__.py +0 -0
@@ -0,0 +1,108 @@
1
+ # AHK auto-continue loop pacing (pr-converge)
2
+
3
+ Load this document when **`ScheduleWakeup` is not available** in this session (orchestrated teams disabled, restricted tool registry, Cursor
4
+ without that primitive, or the user wants a visibly-running pacer). Follow it for **every** instruction below that depends on that choice.
5
+ Shared bugbot / bugteam / Fix protocol steps stay in the main `SKILL.md`.
6
+
7
+ ## Session behavior
8
+
9
+ Keep ticks in the **same** window the auto-typer targets so each `continue` re-enters here and reads the same state line and `gh` context.
10
+
11
+ ## Why this path exists
12
+
13
+ It is not a separate "mode" the user must remember — bare `/pr-converge` already implies loop-until-done; when the primary wakeup tool is
14
+ missing, fall through to AHK automatically. The per-tick work is unchanged; what changes is who fires the next tick. Instead of
15
+ `ScheduleWakeup` re-entering the skill, an external AutoHotkey utility auto-types `continue` into the active Claude Code window every 5
16
+ minutes, and the model treats each `continue` as the next tick trigger.
17
+
18
+ **AHK is loop pacing only:** every `phase == BUGTEAM` tick still runs **`/bugteam`** via the bugteam skill per Step 2 of the main skill —
19
+ nothing here replaces that audit.
20
+
21
+ **Fix protocol** commits use **`Task`** with **`subagent_type: "generalPurpose"`** and the **clean-coder preamble** from the main
22
+ [`SKILL.md` Fix protocol](../SKILL.md#fix-protocol) section (same as ScheduleWakeup pacing — Cursor has no `clean-coder` `subagent_type`).
23
+
24
+ Ensure `~/.claude/agents/clean-coder.md` exists (Windows: `%USERPROFILE%\.claude\agents\clean-coder.md`). Optionally also copy it to
25
+ `.cursor/agents/clean-coder.md` in the repo when you want the file co-located with the checkout; the spawn **prompt** must still name the
26
+ absolute path the subagent should **Read** first.
27
+
28
+ ### One-time setup at the start of the loop
29
+
30
+ The skill bundles its driver scripts under `scripts/` and resolves them at runtime via `$HOME\.claude\skills\pr-converge\scripts\…` (the same
31
+ convention `/logifix` uses). The bundled `.cmd` launchers locate their siblings via `%~dp0`, so they need no path arguments — only the AHK
32
+ target PID.
33
+
34
+ Run these two commands in order (PowerShell-friendly Bash escaping):
35
+
36
+ 1. Resolve the PID of the GUI ancestor that hosts this Claude Code session:
37
+ ```bash
38
+ pwsh -NoProfile -ExecutionPolicy Bypass -File "$HOME\.claude\skills\pr-converge\scripts\caller-window-pid.ps1"
39
+ ```
40
+ Capture the printed integer as `caller_pid`. Verify it points at the right window before continuing:
41
+ ```bash
42
+ pwsh -NoProfile -Command "Get-Process -Id $caller_pid | Select-Object Id,ProcessName,MainWindowTitle"
43
+ ```
44
+ 2. Launch the auto-typer attached to that PID with auto-start enabled. The bundled launcher accepts the PID as its first arg and the
45
+ `--start-on` flag is forwarded to the AHK script:
46
+ ```bash
47
+ "$HOME\.claude\skills\pr-converge\scripts\cursor-agents-continue.cmd" $caller_pid --start-on
48
+ ```
49
+ AutoHotkey v2 must be installed at `C:\Program Files\AutoHotkey\v2\AutoHotkey64.exe`.
50
+
51
+ ### Per-tick behavior under this driver
52
+
53
+ - Run Steps 1–3 of **Per-tick work** in the main `SKILL.md` exactly as written.
54
+ - In **Step 4**, do **not** call `ScheduleWakeup` — the auto-typer is the pacer (this is the fallback branch of Step 4 in the main skill).
55
+ - End every assistant response with the literal sentence `Awaiting next "continue" tick.` so the next iteration is unambiguously identifiable
56
+ in the transcript.
57
+ - When the next user message is `continue` (auto-typed by AHK) or any close paraphrase, treat it as the next tick of default-loop
58
+ `/pr-converge` and re-enter from Step 1 against the freshest PR state.
59
+
60
+ ### Convergence cleanup
61
+
62
+ On back-to-back clean (the existing convergence rule in the main skill), run `gh pr ready`, then kill the auto-typer when this session used
63
+ this AHK pacing path:
64
+
65
+ ```bash
66
+ pwsh -NoProfile -Command "Get-CimInstance Win32_Process -Filter \"Name='AutoHotkey64.exe'\" | Where-Object CommandLine -like '*cursor-agents-continue.ahk*' | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }"
67
+ ```
68
+
69
+ Report convergence in the same one-sentence shape as the standard flow, plus a second sentence noting the auto-typer was stopped. The skill
70
+ returns; no next tick fires.
71
+
72
+ ### Gotchas
73
+
74
+ - **Resolver fallback semantics matter.** `caller-window-pid.ps1` walks up the parent process chain, terminates at `explorer.exe`, and falls
75
+ back to the foreground window when no GUI ancestor is found. Always verify `MainWindowTitle` after capture — if it isn't the Claude Code
76
+ session, the auto-typer will fire `continue` into the wrong window and the loop stalls silently.
77
+ - **Tick-duration vs. 5-minute cadence.** The auto-typer fires every 5 minutes regardless of model activity. A tick that runs longer than 5
78
+ minutes will receive a queued `continue` while still in flight; Claude Code processes these sequentially, so there's no corruption, but the
79
+ loop pace becomes irregular. Don't try to "fix" this by shortening the AHK interval — the `bugbot run` cadence already has its own pacing
80
+ baked into the standard flow.
81
+ - **AHK runs as `#SingleInstance Force`.** Re-running the launcher replaces the prior instance silently. Safe to re-issue if the loop appears
82
+ stalled.
83
+ - **`Stop-Process -Force` on `AutoHotkey64` is broad.** It kills every AHK instance, not just the one this skill started. When the user has
84
+ unrelated AHK utilities running, scope the kill by command-line match instead:
85
+ ```bash
86
+ pwsh -NoProfile -Command "Get-CimInstance Win32_Process -Filter \"Name='AutoHotkey64.exe'\" | Where-Object CommandLine -like '*cursor-agents-continue.ahk*' | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }"
87
+ ```
88
+ - **State-line responsibility is unchanged.** The state line (phase, bugbot_clean_at, inline_lag_streak, tick_count) is still emitted at the
89
+ end of every tick — it's how the next tick reads prior state. The auto-typer only fires `continue`; it does not preserve state for you.
90
+ - **No `tick_count` ceiling.** `tick_count` is observability-only (same as the main skill and `state-schema.md`). This path ends on convergence or **Stop conditions** in `SKILL.md`, not on a tick counter.
91
+ - **`/bugteam` is not optional for BUGTEAM ticks.** AHK only paces **when** the next tick runs; it does not replace the bugteam skill. Skipping
92
+ **`/bugteam`** after a clean Bugbot review breaks the back-to-back contract.
93
+ - **Fix protocol:** use **`Task` + `generalPurpose`** with the clean-coder **Read** preamble from the main [`SKILL.md` Fix protocol](../SKILL.md#fix-protocol)
94
+ (never a bare `generalPurpose` production edit). Ensure the clean-coder agent markdown exists at `~/.claude/agents/clean-coder.md` (Windows:
95
+ `%USERPROFILE%\.claude\agents\clean-coder.md`); copy into `.cursor/agents/` only if you want a repo-local duplicate.
96
+
97
+ ## BUGBOT inline-lag (this path only)
98
+
99
+ When Step 2 BUGBOT branch c routes to API lag and you are on **this** pacing path: complete Step 4 per **Per-tick behavior under this driver**
100
+ above (fixed AHK cadence — there is no 60s shortcut). The inline comments should appear on the next tick.
101
+
102
+ ## Convergence
103
+
104
+ On back-to-back clean: stop the auto-typer per **Convergence cleanup** above; omit `ScheduleWakeup` (not used on this path).
105
+
106
+ ## Stop / safety (this path)
107
+
108
+ On hard blockers or user stop: omit loop pacing and stop the AHK auto-typer if it was started, per main skill **Stop conditions**. Use the same **scoped** `Get-CimInstance` / `Stop-Process` command as **Convergence cleanup** (command-line match on `cursor-agents-continue.ahk`) so unrelated AutoHotkey instances are not killed.
@@ -0,0 +1,37 @@
1
+ # ScheduleWakeup loop pacing (pr-converge)
2
+
3
+ Load this document when **`ScheduleWakeup` is available** in the parent harness session and you use it for converge **loop pacing** (primary /
4
+ orchestrated-teams path). Follow it for **every** instruction below that depends on that choice. Shared bugbot / bugteam / Fix protocol steps
5
+ stay in the main `SKILL.md`.
6
+
7
+ ## Session behavior
8
+
9
+ Call `ScheduleWakeup` from this same session so the next tick fires back into **this** transcript with the prior tick's state line and PR
10
+ context still addressable.
11
+
12
+ ## Step 4 — `ScheduleWakeup` branch
13
+
14
+ At end of tick (unless convergence or another stop condition already omitted pacing), call `ScheduleWakeup` with:
15
+
16
+ - `delaySeconds: 270` whenever bugbot was just re-triggered (whether by Step 3 directly, by the Fix protocol's mandatory re-trigger, or by
17
+ BUGTEAM branch 1's same-tick re-trigger). Bugbot finishes a review in 1–4 minutes, so 270s stays under the 5-minute prompt-cache TTL while
18
+ giving a margin past bugbot's typical upper bound. The single exception is the BUGBOT inline-lag branch in Step 2 of the main skill, which
19
+ uses `delaySeconds: 60` because no re-trigger fired and the only thing being awaited is GitHub's inline-comments API catching up.
20
+ - `reason`: one short sentence on what is being awaited, including the current `phase` and `bugbot_clean_at` SHA when set.
21
+ - `prompt: "/pr-converge"` — re-enters this skill on the next firing with default loop semantics (no need for the user to type `/loop`). If
22
+ the parent harness requires the `/loop` wrapper for wakeups to execute, `prompt: "/loop /pr-converge"` is equivalent.
23
+
24
+ ## BUGBOT inline-lag (this path only)
25
+
26
+ When Step 2 BUGBOT branch c routes to API lag and you are on **this** pacing path: complete Step 4 with `ScheduleWakeup` using `delaySeconds:
27
+ 60` (lag is short-lived).
28
+
29
+ ## Convergence
30
+
31
+ On back-to-back clean: **omit** further `ScheduleWakeup` calls. Do not start the AHK auto-typer for loop pacing when this path is the active
32
+ pacer.
33
+
34
+ ## Stop / safety (this path)
35
+
36
+ On hard blockers or user stop: omit `ScheduleWakeup` per main skill **Stop conditions**. If the session never used AHK for pacing,
37
+ skip AHK shutdown commands in the companion AHK workflow.
@@ -19,8 +19,8 @@ description: >-
19
19
 
20
20
  Shared artifacts with /bugteam are referenced below by path, using the `${CLAUDE_SKILL_DIR}` host-substitution convention (both skills land under `~/.claude/skills/` after install):
21
21
 
22
- - Pre-flight script: `${CLAUDE_SKILL_DIR}/../bugteam/scripts/bugteam_preflight.py`
23
- - Code-rules gate script: `${CLAUDE_SKILL_DIR}/../bugteam/scripts/bugteam_code_rules_gate.py`
22
+ - Pre-flight script: `${CLAUDE_SKILL_DIR}/../../_shared/pr-loop/scripts/preflight.py`
23
+ - Code-rules gate script: `${CLAUDE_SKILL_DIR}/../../_shared/pr-loop/scripts/code_rules_gate.py`
24
24
  - Bug category rubric A–J: [`bugteam/PROMPTS.md`](../bugteam/PROMPTS.md#audit-spawn-prompt-xml-bugfind-teammate)
25
25
  - **Audit contract** (finding schema, proof-of-absence, adversarial pass, Haiku secondary, post-fix self-audit, diagnostics JSON): [`bugteam/reference/audit-contract.md`](../bugteam/reference/audit-contract.md)
26
26
  - PR comment lifecycle shape: [`bugteam/SKILL.md`](../bugteam/SKILL.md#step-25-pr-comments-one-review-per-loop)
@@ -48,7 +48,7 @@ Refusals — first match wins; respond with the quoted line exactly and stop:
48
48
  ## Step 0: Pre-flight
49
49
 
50
50
  ```bash
51
- python "${CLAUDE_SKILL_DIR}/../bugteam/scripts/bugteam_preflight.py"
51
+ python "${CLAUDE_SKILL_DIR}/../../_shared/pr-loop/scripts/preflight.py"
52
52
  ```
53
53
 
54
54
  `${CLAUDE_SKILL_DIR}` is host-substituted before the shell runs. Non-zero → fix before continuing. `BUGTEAM_PREFLIGHT_SKIP=1` is emergency only. Add `--pre-commit` when `.pre-commit-config.yaml` exists.
@@ -97,7 +97,7 @@ import os
97
97
  from pathlib import Path
98
98
 
99
99
  skill_dir = Path(os.environ["CLAUDE_SKILL_DIR"])
100
- gate_script_path = (skill_dir / ".." / "bugteam" / "scripts" / "bugteam_code_rules_gate.py").resolve()
100
+ gate_script_path = (skill_dir / ".." / ".." / "_shared" / "pr-loop" / "scripts" / "code_rules_gate.py").resolve()
101
101
  categories_file_path = (skill_dir / ".." / "bugteam" / "PROMPTS.md").resolve()
102
102
  ```
103
103
 
@@ -22,8 +22,8 @@ def _load_skill_text() -> str:
22
22
 
23
23
  def test_should_require_post_fix_gate_before_git_add() -> None:
24
24
  skill_text = _load_skill_text()
25
- assert "bugteam_code_rules_gate" in skill_text, (
26
- "FIX step must run bugteam_code_rules_gate against modified files"
25
+ assert "code_rules_gate" in skill_text, (
26
+ "FIX step must run code_rules_gate against modified files"
27
27
  )
28
28
  assert "post-fix" in skill_text.lower() or "post_fix" in skill_text.lower(), (
29
29
  "FIX step must reference a post-fix audit phase"
@@ -0,0 +1,261 @@
1
+ ---
2
+ name: resume-review
3
+ description: >-
4
+ Audit a resume for nitty-gritty offenses that bury signal. Resumes are
5
+ overviews scanned in 6-30 seconds, not detailed proof artifacts. This skill
6
+ identifies bullets that drift into workflow internals, multi-item technical
7
+ lists, library names, mechanism narration, or implementation detail, and
8
+ proposes tighter rewrites that keep the proof points (numbers, scope,
9
+ outcomes) while dropping the granular how-it-works text. Triggers:
10
+ "/resume-review", "review my resume", "audit this resume", "is my resume too
11
+ detailed", "tighten my resume bullets".
12
+ ---
13
+
14
+ # Resume Review
15
+
16
+ A resume is an **overview**. Hiring managers scan a resume in 6-30 seconds on
17
+ first pass. Granular technical detail buries the signal. Stats, scope, and
18
+ quantified outcomes belong on the resume; workflow internals, multi-item
19
+ technical lists, and how-it-works narration belong in the interview.
20
+
21
+ ## Source authority
22
+
23
+ Three established sources govern this skill. When a bullet violates one of
24
+ these principles, cite the source in the review comment.
25
+
26
+ - **Laszlo Bock**, *Work Rules!* (2015), Twelve Books, p. 71 (Bock served as
27
+ SVP People Operations at Google, 2006-2016): bullets describe "what you
28
+ accomplished, not what you did." Quantified outcomes beat task descriptions.
29
+ - **Steve Dalton**, *The 2-Hour Job Search* (2012), Ten Speed Press, Ch. 3:
30
+ hiring managers initially scan a resume in 6-30 seconds. Granular technical
31
+ detail buries the signal in that scan.
32
+ - **Lou Adler**, *Hire With Your Head* (4th ed., 2021), Wiley: bullets convey
33
+ **scope and impact**, not tools and tasks.
34
+
35
+ ## The principle
36
+
37
+ Every bullet earns its place by carrying one of three things:
38
+
39
+ 1. **Scope** — what surface area of work this covered (catalog size, team
40
+ size, user count, transaction volume, geographic reach).
41
+ 2. **Impact** — the outcome the work produced (revenue, time saved, error
42
+ rate reduced, problem prevented, capability unlocked).
43
+ 3. **Quantified proof** — a single number that anchors scope or impact and
44
+ makes the bullet harder to dismiss as boilerplate.
45
+
46
+ Bullets that describe the **mechanism** of how the work was done (workflow
47
+ steps, internal architecture, library choices, sequencing of operations) fail
48
+ the overview test. Move that content to the interview.
49
+
50
+ ## Offense categories
51
+
52
+ The audit walks every bullet and flags any of these patterns. Each pattern
53
+ has a fix template.
54
+
55
+ ### 1. Multi-item parenthetical lists
56
+
57
+ A parenthetical that enumerates 3+ named items (tools, systems, features,
58
+ sub-tasks).
59
+
60
+ > **Offender:** "Built and maintain three production Python automation
61
+ > systems (theme submission, theme exports, certification failure
62
+ > processing) backed by a shared utility library."
63
+
64
+ > **Fix:** Drop the parenthetical. Keep the count. "Built and maintain three
65
+ > production Python automations handling [scope]."
66
+
67
+ ### 2. Workflow-step narration
68
+
69
+ The bullet describes the sequence of operations the work performs.
70
+
71
+ > **Offender:** "Manage Samsung's annual catalog-update cycle when 2,800+
72
+ > themes must each be updated, exported, and resubmitted one by one within a
73
+ > 1-2 month window."
74
+
75
+ > **Fix:** Drop the workflow steps. Keep the scope numbers. "Manage Samsung's
76
+ > annual catalog-update cycle: 2,800+ themes refreshed within a 1-2 month
77
+ > window."
78
+
79
+ ### 3. Engineering-pattern jargon for non-engineering audience
80
+
81
+ Multiple named technical patterns in one bullet, written for an audience
82
+ that does not share the domain (e.g., infrastructure terms in an operations
83
+ or trust-and-safety resume).
84
+
85
+ > **Offender:** "Turn recurring failures into stronger error classification
86
+ > (transient vs. permanent), circuit breakers, and checkpoint/resume
87
+ > recovery."
88
+
89
+ > **Fix:** Replace the pattern enumeration with a single capability noun.
90
+ > "Turn recurring failures into reusable error-handling patterns so the same
91
+ > failure does not happen twice."
92
+
93
+ ### 4. Mechanism narration
94
+
95
+ The bullet explains how a tool or system internally works.
96
+
97
+ > **Offender:** "Author and maintain pr-converge, a Claude Code skill that
98
+ > automates the pull request review-and-fix loop until reviewers converge on
99
+ > ready, with three open pull requests (11,000+ lines) actively extending
100
+ > it."
101
+
102
+ > **Fix:** State the outcome the skill produces. Drop the loop description.
103
+ > "Author and maintain pr-converge, an open-source Claude Code skill that
104
+ > drives draft pull requests to merge-ready autonomously."
105
+
106
+ ### 5. Library or tool names embedded mid-bullet
107
+
108
+ A library, framework, or tool name appears inside a sentence about
109
+ capability. Library names belong in the dedicated Tools section, not in
110
+ capability bullets.
111
+
112
+ > **Offender:** "Implemented authenticated workflows end-to-end: account
113
+ > creation, token handling, local-first data with IndexedDB/Dexie, and
114
+ > conflict-aware sync between client and server."
115
+
116
+ > **Fix:** Drop the library names. State the capabilities. "Implemented
117
+ > authentication, local-first data persistence, and conflict-aware
118
+ > client-server sync end-to-end."
119
+
120
+ ### 6. Redundant statistics
121
+
122
+ Two numbers in the same bullet that express the same quantity at different
123
+ granularities.
124
+
125
+ > **Offender:** "Roughly 30 new theme submissions per day (150 per week)."
126
+
127
+ > **Fix:** Pick one. The daily number is usually the strongest scan signal.
128
+
129
+ ### 7. Implementation detail
130
+
131
+ Phrases that describe how the work was built rather than what it does.
132
+
133
+ > **Offender:** "Backed by a shared utility library, with zero manual
134
+ > intervention beyond starting the script."
135
+
136
+ > **Fix:** Drop the implementation phrase entirely. The capability statement
137
+ > should stand on its own.
138
+
139
+ ### 8. Two-sentence bullets
140
+
141
+ A bullet that requires two sentences usually carries one bullet of scope and
142
+ one bullet of mechanism. The mechanism sentence should be removed, not
143
+ combined.
144
+
145
+ > **Offender:** "Author and maintain pr-converge, a Claude Code skill
146
+ > that... [first sentence describes what]. Recent work adds mergeability
147
+ > gates, GitHub Copilot reviewer integration, and post-convergence Copilot
148
+ > follow-up across three open pull requests (11,000+ lines)."
149
+
150
+ > **Fix:** Keep the capability sentence. Move the second sentence to a cover
151
+ > letter or interview talking point.
152
+
153
+ ## Review protocol
154
+
155
+ Walk this protocol against every bullet on the resume. Mark each bullet
156
+ PASS, MINOR, or MAJOR.
157
+
158
+ ### Step 1: Scope check
159
+
160
+ Read the bullet aloud in 4 seconds or less. If you cannot finish in 4
161
+ seconds, the bullet is too long. **Action:** trim to one sentence under 25
162
+ words unless the bullet carries a justified centerpiece (and centerpiece
163
+ bullets stay under 40 words).
164
+
165
+ ### Step 2: Offense scan
166
+
167
+ For each bullet, scan for the eight offense categories above. Record any
168
+ hits with the category number.
169
+
170
+ ### Step 3: Verify proof points
171
+
172
+ Every numeric claim in a bullet must be verifiable. If a number cannot be
173
+ sourced, drop it. Hedging numbers ("roughly", "around", "approximately")
174
+ are acceptable when the underlying number is verifiable but variable.
175
+
176
+ ### Step 4: Audience alignment
177
+
178
+ For each bullet, ask: would the hiring manager for **this specific role**
179
+ recognize the terms used? If the bullet uses domain language outside the
180
+ target role's vocabulary (engineering jargon on a trust-and-safety resume,
181
+ finance acronyms on an engineering resume), rewrite using domain-neutral
182
+ capability nouns.
183
+
184
+ ### Step 5: Mechanism removal pass
185
+
186
+ For each bullet that survived steps 1-4, ask: does this bullet describe
187
+ **what** the work accomplished, or **how** the work was done? If it
188
+ describes **how**, rewrite to describe **what** and move the **how** to
189
+ interview prep notes.
190
+
191
+ ### Step 6: Section-level coherence
192
+
193
+ After per-bullet review, scan each section. Check for:
194
+
195
+ - **Bullet count consistency** — sections with similar weight should have
196
+ similar bullet counts. A 5-bullet section next to a 1-bullet section
197
+ signals imbalance.
198
+ - **Voice consistency** — verb tense, sentence structure, and bullet length
199
+ should match across sections.
200
+ - **Relevance ordering** — the most-relevant-to-the-target-role section
201
+ should appear first within its time band (Steve Dalton, *The 2-Hour Job
202
+ Search* §6: relevance over strict chronology when chronology does not
203
+ conflict).
204
+
205
+ ## Output format
206
+
207
+ The audit produces a markdown report with this structure:
208
+
209
+ ```markdown
210
+ # Resume Audit Report
211
+
212
+ ## Top offenders (worst first)
213
+
214
+ ### #1 — [Section] bullet [N]. [Severity]
215
+
216
+ [Quote of current bullet]
217
+
218
+ **Offenses:** [comma-separated category numbers]
219
+
220
+ **Proposed rewrite:** [tighter version]
221
+
222
+ **Words saved:** [N words → M words]
223
+
224
+ (repeat for each offender)
225
+
226
+ ## Sections that pass
227
+
228
+ - [Section name]: [bullet count] bullets, all PASS
229
+ - (repeat)
230
+
231
+ ## Section-level findings
232
+
233
+ [Coherence issues from Step 6, if any]
234
+
235
+ ## Sources cited
236
+
237
+ - Bock, *Work Rules!* (2015), p. 71 — for offenses [N]
238
+ - Dalton, *2-Hour Job Search* (2012), Ch. 3 — for offenses [N]
239
+ - Adler, *Hire With Your Head* (2021) — for offenses [N]
240
+ ```
241
+
242
+ ## When this skill applies
243
+
244
+ - User asks to review or audit a resume
245
+ - User asks "is my resume too detailed"
246
+ - User asks for tighter resume bullets
247
+ - A resume document is shared and the user wants feedback
248
+ - Before submitting a resume to a target role
249
+
250
+ ## When this skill does not apply
251
+
252
+ - Cover letter review (use a separate cover-letter-review skill if needed)
253
+ - Resume formatting fixes (font, spacing, layout) — this skill audits
254
+ content only
255
+ - Resume creation from scratch — this skill assumes a draft exists
256
+
257
+ ## Triggers
258
+
259
+ `/resume-review`, "review my resume", "audit this resume", "is my resume
260
+ too detailed", "tighten my resume bullets", "what offenses do you see in my
261
+ resume", "are my bullets too granular".
@@ -1,157 +0,0 @@
1
- ---
2
- name: agent-writer
3
- description: Use this agent when you need to create a new subagent for Claude Code. This agent guides you through designing, structuring, and writing effective subagents with proper frontmatter, system prompts, and best practices. Trigger when user asks to "create an agent", "write a new subagent", "design an agent", or "help me build an agent".
4
- tools: Read,Write,Glob,AskUserQuestion
5
- model: sonnet
6
- color: blue
7
- ---
8
-
9
- # Agent Writer - Subagent Creation Assistant
10
-
11
- You are a specialized agent that helps create well-structured, effective subagents for Claude Code. Your role is to guide the user through the entire agent creation process, ensuring best practices and proper structure.
12
-
13
- ## Your Process
14
-
15
- ### Phase 1: Discovery & Design
16
-
17
- Ask the user these key questions to understand their needs:
18
-
19
- 1. **Purpose & Scope**
20
- - What specific problem or workflow will this agent handle?
21
- - What makes this task worthy of a dedicated agent vs a skill or direct implementation?
22
- - What is the expected trigger context? (e.g., "after code completion", "when user mentions X")
23
-
24
- 2. **Specialization Level**
25
- - Is this a narrow, focused task (recommended) or broader capability?
26
- - What expertise domain does this require? (e.g., testing, refactoring, documentation)
27
-
28
- 3. **Tool Requirements**
29
- - Which tools does this agent need? (Read, Write, Edit, Bash, Grep, Glob, Task, etc.)
30
- - Should it have restricted access for safety? (e.g., read-only agents)
31
- - Will it need to invoke other agents via Task tool?
32
-
33
- 4. **Invocation Strategy**
34
- - Should this be PROACTIVE (auto-invoked when context matches)?
35
- - Or explicit-only (user must request it)?
36
- - What keywords/patterns should trigger it?
37
-
38
- 5. **Examples & Edge Cases**
39
- - What are 2-3 concrete examples of when this agent should be used?
40
- - What are scenarios where it should NOT be used?
41
-
42
- ### Phase 2: Generate Agent Structure
43
-
44
- Based on discovery, create the agent file with:
45
-
46
- **Frontmatter Requirements:**
47
- ```yaml
48
- ---
49
- name: agent-name-in-kebab-case
50
- description: Clear description of when to use this agent, including trigger keywords and scenarios. For proactive agents, include "Use PROACTIVELY" or "MUST be used when".
51
- tools: comma,separated,tool,list (or omit for all tools)
52
- model: sonnet (or opus/haiku/inherit)
53
- ---
54
- ```
55
-
56
- **System Prompt Structure:**
57
-
58
- ```markdown
59
- # [Agent Name] - [Brief Subtitle]
60
-
61
- You are a specialized agent that [primary purpose]. Your role is to [detailed responsibility].
62
-
63
- ## Your Responsibilities
64
-
65
- [Bulleted list of what this agent does]
66
-
67
- ## Your Process
68
-
69
- [Step-by-step workflow the agent should follow]
70
-
71
- ## Critical Rules
72
-
73
- [Mandatory constraints and requirements]
74
-
75
- ## When to Use This Agent
76
-
77
- [Specific triggering scenarios with examples]
78
-
79
- ## When NOT to Use This Agent
80
-
81
- [Anti-patterns and exclusions]
82
-
83
- ## Examples
84
-
85
- <example>
86
- Context: [Scenario description]
87
- user: "[Example user request]"
88
- assistant: "[How this agent should respond]"
89
- <commentary>
90
- [Why this agent is appropriate here]
91
- </commentary>
92
- </example>
93
-
94
- [2-3 more examples showing variety]
95
-
96
- ## Output Format
97
-
98
- [Expected deliverables and communication style]
99
- ```
100
-
101
- ### Phase 3: Validation & Refinement
102
-
103
- Before finalizing, check:
104
-
105
- 1. **Single Responsibility**: Does it do ONE thing well?
106
- 2. **Clear Triggers**: Is it obvious when to invoke this agent?
107
- 3. **Tool Minimization**: Does it have only necessary tools?
108
- 4. **Actionable Instructions**: Can another AI follow these instructions?
109
- 5. **Example Coverage**: Do examples show both use and non-use cases?
110
-
111
- ### Phase 4: Placement Decision
112
-
113
- Determine where to save the agent:
114
-
115
- - **Project-specific**: `.claude/agents/` (version controlled, team-shared)
116
- - **Personal/global**: `~/.claude/agents/` (user-specific, cross-project)
117
- - **Plugin**: For distribution to others
118
-
119
- Default to project-specific unless user specifies otherwise.
120
-
121
- ## Best Practices You Must Follow
122
-
123
- 1. **Focused Purpose**: "Design focused subagents with single responsibilities"
124
- 2. **Detailed Prompts**: "Write detailed prompts with specific instructions and constraints"
125
- 3. **Tool Restriction**: "Limit tool access to only necessary ones"
126
- 4. **Proactive Language**: Use "Use PROACTIVELY" for auto-invocation
127
- 5. **Action-Oriented Descriptions**: "Make descriptions specific and action-oriented"
128
- 6. **Multiple Examples**: Always include 2-3 diverse examples showing when to use
129
- 7. **Clear Boundaries**: Define both when to use AND when not to use
130
-
131
- ## Anti-Patterns to Avoid
132
-
133
- - ❌ Vague descriptions like "helps with code"
134
- - ❌ Agents that do multiple unrelated things
135
- - ❌ Missing examples or edge cases
136
- - ❌ Unclear tool requirements
137
- - ❌ No guidance on when NOT to use
138
- - ❌ Generic system prompts without specific instructions
139
-
140
- ## Your Communication Style
141
-
142
- - Ask clarifying questions when requirements are unclear
143
- - Propose concrete examples to validate understanding
144
- - Suggest improvements to overly broad agent concepts
145
- - Show the user the generated agent before saving
146
- - Explain your design decisions
147
-
148
- ## Workflow Summary
149
-
150
- 1. **Ask discovery questions** (use AskUserQuestion for key decisions)
151
- 2. **Propose agent structure** based on answers
152
- 3. **Generate complete agent file** with frontmatter + system prompt
153
- 4. **Review with user** before saving
154
- 5. **Save to appropriate location**
155
- 6. **Provide usage guidance** (how to invoke, test scenarios)
156
-
157
- Remember: A great agent is narrow, focused, and has crystal-clear triggering conditions. When in doubt, make it more specific, not more general.