claude-dev-env 2.0.2 → 2.2.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 (110) hide show
  1. package/CLAUDE.md +1 -1
  2. package/hooks/blocking/CLAUDE.md +1 -0
  3. package/hooks/blocking/code_rules_shared.py +126 -47
  4. package/hooks/blocking/config/CLAUDE.md +2 -0
  5. package/hooks/blocking/config/verified_commit_context_constants.py +21 -0
  6. package/hooks/blocking/config/verified_commit_gate_output_constants.py +14 -0
  7. package/hooks/blocking/conftest.py +36 -30
  8. package/hooks/blocking/convergence_gate_blocker.py +76 -8
  9. package/hooks/blocking/plain_language_blocker.py +8 -0
  10. package/hooks/blocking/state_description_blocker.py +4 -1
  11. package/hooks/blocking/test_code_rules_shared.py +120 -20
  12. package/hooks/blocking/test_convergence_gate_blocker.py +146 -0
  13. package/hooks/blocking/test_plain_language_blocker.py +15 -0
  14. package/hooks/blocking/test_state_description_blocker.py +15 -0
  15. package/hooks/blocking/test_verified_commit_config_bootstrap.py +18 -0
  16. package/hooks/blocking/test_verified_commit_gate_additional_context.py +134 -0
  17. package/hooks/blocking/tests/test_verified_commit_gate.py +41 -0
  18. package/hooks/blocking/verified_commit_config_bootstrap.py +22 -10
  19. package/hooks/blocking/verified_commit_gate.py +113 -568
  20. package/hooks/blocking/verified_commit_gate_parts/CLAUDE.md +28 -0
  21. package/hooks/blocking/verified_commit_gate_parts/__init__.py +1 -0
  22. package/hooks/blocking/verified_commit_gate_parts/command_tokenization.py +174 -0
  23. package/hooks/blocking/verified_commit_gate_parts/deny_payload.py +53 -0
  24. package/hooks/blocking/verified_commit_gate_parts/deny_reason.py +80 -0
  25. package/hooks/blocking/verified_commit_gate_parts/directory_resolution.py +170 -0
  26. package/hooks/blocking/verified_commit_gate_parts/gated_invocations.py +205 -0
  27. package/hooks/blocking/verified_commit_gate_parts/tests/conftest.py +10 -0
  28. package/hooks/blocking/verified_commit_gate_parts/tests/test_command_tokenization.py +94 -0
  29. package/hooks/blocking/verified_commit_gate_parts/tests/test_deny_payload.py +17 -0
  30. package/hooks/blocking/verified_commit_gate_parts/tests/test_deny_reason.py +38 -0
  31. package/hooks/blocking/verified_commit_gate_parts/tests/test_directory_resolution.py +71 -0
  32. package/hooks/blocking/verified_commit_gate_parts/tests/test_gated_invocations.py +61 -0
  33. package/hooks/hooks_constants/CLAUDE.md +4 -1
  34. package/hooks/hooks_constants/code_rules_path_utils_constants.py +1 -0
  35. package/hooks/hooks_constants/convergence_gate_blocker_constants.py +36 -0
  36. package/hooks/hooks_constants/harness_scratchpad_constants.py +10 -9
  37. package/hooks/hooks_constants/mypy_integration_constants.py +16 -0
  38. package/hooks/validators/mypy_integration.py +145 -24
  39. package/hooks/validators/python_antipattern_checks.py +16 -0
  40. package/hooks/validators/run_all_validators.py +9 -3
  41. package/hooks/validators/test_mypy_integration.py +154 -0
  42. package/hooks/validators/test_python_antipattern_checks.py +112 -1
  43. package/hooks/validators/test_run_all_validators_pretooluse.py +16 -0
  44. package/package.json +1 -1
  45. package/rules/CLAUDE.md +1 -0
  46. package/rules/verified-commit-gate-skip.md +28 -0
  47. package/skills/_shared/pr-loop/CLAUDE.md +18 -13
  48. package/skills/_shared/pr-loop/portable-driver.md +150 -0
  49. package/skills/_shared/pr-loop/scripts/CLAUDE.md +3 -0
  50. package/skills/_shared/pr-loop/scripts/build_converge_task_list.py +310 -0
  51. package/skills/_shared/pr-loop/scripts/portable_converge_driver.py +1637 -0
  52. package/skills/_shared/pr-loop/scripts/select_converge_pacer.py +215 -0
  53. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +3 -0
  54. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +56 -0
  55. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +47 -0
  56. package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +181 -0
  57. package/skills/_shared/pr-loop/scripts/test_build_converge_task_list.py +140 -0
  58. package/skills/_shared/pr-loop/scripts/test_portable_converge_driver.py +1119 -0
  59. package/skills/_shared/pr-loop/scripts/test_select_converge_pacer.py +207 -0
  60. package/skills/auditing-claude-config/CLAUDE.md +2 -1
  61. package/skills/auditing-claude-config/SKILL.md +114 -176
  62. package/skills/auditing-claude-config/reference/probe-hook.md +74 -0
  63. package/skills/autoconverge/CLAUDE.md +6 -3
  64. package/skills/autoconverge/SKILL.md +421 -346
  65. package/skills/autoconverge/reference/CLAUDE.md +1 -0
  66. package/skills/autoconverge/reference/convergence.md +5 -5
  67. package/skills/autoconverge/reference/copilot-findings.md +51 -0
  68. package/skills/autoconverge/reference/multi-pr.md +33 -2
  69. package/skills/autoconverge/reference/stop-conditions.md +9 -6
  70. package/skills/autoconverge/test_portable_pacer_gate.py +54 -0
  71. package/skills/closeout/SKILL.md +7 -9
  72. package/skills/copilot-finding-triage/SKILL.md +21 -11
  73. package/skills/copilot-review/CLAUDE.md +3 -2
  74. package/skills/copilot-review/SKILL.md +119 -155
  75. package/skills/copilot-review/templates/subagent-prompt.md +49 -0
  76. package/skills/fresh-branch/CLAUDE.md +6 -9
  77. package/skills/fresh-branch/SKILL.md +84 -33
  78. package/skills/fresh-branch/scripts/create_fresh_branch.py +445 -0
  79. package/skills/fresh-branch/scripts/fresh_branch_scripts_constants/__init__.py +1 -0
  80. package/skills/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +74 -0
  81. package/skills/fresh-branch/scripts/test_create_fresh_branch.py +670 -0
  82. package/skills/pr-converge/CLAUDE.md +4 -3
  83. package/skills/pr-converge/SKILL.md +469 -422
  84. package/skills/pr-converge/reference/CLAUDE.md +1 -0
  85. package/skills/pr-converge/reference/multi-pr-orchestration.md +5 -1
  86. package/skills/pr-converge/reference/per-tick.md +51 -24
  87. package/skills/pr-converge/reference/progress-checklist.md +168 -0
  88. package/skills/pr-converge/test_portable_pacer_gate.py +67 -0
  89. package/skills/pr-converge/test_step5_host_branch.py +8 -6
  90. package/skills/pr-converge/workflows/schedule-wakeup-loop.md +5 -3
  91. package/skills/pr-loop-cloud-transport/SKILL.md +1 -1
  92. package/skills/privacy-hygiene/SKILL.md +68 -115
  93. package/skills/privacy-hygiene/reference/sweep-procedure.md +62 -0
  94. package/skills/session-log/CLAUDE.md +2 -1
  95. package/skills/session-log/SKILL.md +4 -26
  96. package/skills/session-log/templates/frontmatter.md +40 -0
  97. package/skills/skill-builder/CLAUDE.md +8 -7
  98. package/skills/skill-builder/SKILL.md +26 -11
  99. package/skills/skill-builder/references/CLAUDE.md +3 -1
  100. package/skills/skill-builder/references/delegation-map.md +21 -12
  101. package/skills/skill-builder/references/description-field.md +9 -11
  102. package/skills/skill-builder/references/deterministic-elements.md +218 -0
  103. package/skills/skill-builder/references/self-audit-checklist.md +62 -45
  104. package/skills/skill-builder/references/skill-modularity.md +8 -9
  105. package/skills/skill-builder/templates/CLAUDE.md +2 -2
  106. package/skills/skill-builder/templates/gap-analysis.md +15 -0
  107. package/skills/skill-builder/workflows/CLAUDE.md +5 -5
  108. package/skills/skill-builder/workflows/improve-skill.md +18 -9
  109. package/skills/skill-builder/workflows/new-skill.md +23 -15
  110. package/skills/skill-builder/workflows/polish-skill.md +28 -21
@@ -1,115 +1,68 @@
1
- ---
2
- name: privacy-hygiene
3
- description: Full-repo sweep for personal data and secrets before commit or durable GitHub post. Use when preparing a PR, cleaning a leak, or when `pii_prevention_blocker` denies a write, post, or commit. Triggers on "privacy hygiene", "personal data", "secret sweep", "sanitize repository", "/privacy-hygiene".
4
- ---
5
-
6
- # privacy-hygiene
7
-
8
- ## Overview
9
-
10
- Find and remove personal data and high-confidence secrets before they land in git history or a durable GitHub post. The `pii_prevention_blocker` hook blocks the common cases at write, post, and commit time. This skill is the full sweep when you need a broader pass or a remediation plan.
11
-
12
- **Announce at start:** "Running privacy-hygiene sweep."
13
-
14
- ## When to run a full sweep
15
-
16
- - Before the first push of a branch that touched logs, screenshots, config samples, or machine-local paths
17
- - After a hook block on email, home path, LAN address, or secret material
18
- - Before opening a PR to a repository that is public (or will be made public)
19
- - After pasting support tickets, env dumps, or terminal transcripts into the tree
20
-
21
- ## What the automated gate blocks
22
-
23
- | Category | Blocked examples | Allowed residual |
24
- |---|---|---|
25
- | Email | `user@example.com` | `user@example.com`, `user@example.org`, `user@example.net` |
26
- | Home path | `C:/Users/example/...`, `/Users/example/...`, `/home/example/...` | `C:/Users/example/...`, `C:/Users/<you>/...`, `/Users/alice/...` |
27
- | LAN address | Unlisted `10.x` / `172.16–31.x` / `192.168.x` | Public addresses; your NAS host from `CLAUDE_NAS_HOST` or `~/.claude/local-identity.json`; entries in `ALL_ALLOWLISTED_PRIVATE_IP_ADDRESSES` |
28
- | Secret | `ghp_…`, `github_pat_…`, `AKIA…`, PEM private-key headers | Public keys, redacted `***`, env var names without values |
29
-
30
- Surfaces:
31
-
32
- 1. **Write / Edit / MultiEdit** — payload text about to land on disk (via PreToolUse dispatcher)
33
- 2. **Durable posts** — `gh pr/issue create|comment|edit|review` bodies and GitHub MCP body/comment fields (Bash and PowerShell)
34
- 3. **git commit** — staged blob text (non-exempt paths) on Bash and PowerShell, including `git.exe` and flag forms (`--no-verify`, `-c`, `-C`). Commit message bodies (`-m` / `-F`) are out of scope for the automated gate
35
-
36
- ## Sweep procedure
37
-
38
- ### 1. Scope the tree
39
-
40
- ```
41
- git status -sb
42
- git diff --stat
43
- git diff --cached --stat
44
- ```
45
-
46
- Prefer the branch diff vs `origin/main` for PR prep:
47
-
48
- ```
49
- git fetch origin main
50
- git diff --name-only origin/main...HEAD
51
- ```
52
-
53
- ### 2. Search for high-confidence patterns
54
-
55
- Run from the repo root (PowerShell-friendly example):
56
-
57
- ```
58
- rg -n --hidden -g '!node_modules' -g '!.git' -e '@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' -e 'Users[/\\][^/\\]+' -e '[/]home/[^/]+' -e '\b(10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+)\b' -e '\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\b' -e '\bgithub_pat_[A-Za-z0-9_]{20,}\b' -e '\bAKIA[0-9A-Z]{16}\b' -e '-----BEGIN [A-Z ]*PRIVATE KEY-----'
59
- ```
60
-
61
- Review each hit. Ignore:
62
-
63
- - Test fixtures under `test_*.py` / `*_test.py` / `/tests/` (synthetic only)
64
- - `LICENSE` / copyright notice identity that is intentional and public
65
- - This package's own `pii_scanner` / `pii_prevention_constants` modules
66
- - Documented placeholders (`user@example.com`, `C:/Users/<you>/`)
67
-
68
- ### 3. Remediate
69
-
70
- | Hit | Fix |
71
- |---|---|
72
- | Real email | Replace with `user@example.com` or remove |
73
- | Home path | Use `Path.home()`, `~`, or `C:/Users/<you>/` |
74
- | LAN address | Remove, use a hostname, or — for your own NAS — set the host in `CLAUDE_NAS_HOST` or `~/.claude/local-identity.json`, both of which stay out of git |
75
- | Credential material | Remove from the tree; rotate the credential; load from env/secret store |
76
- | Already committed | Rewrite is not enough if already pushed — rotate secrets; scrub history only with explicit user approval |
77
-
78
- ### 4. Re-check before commit / post
79
-
80
- - Stage only clean files
81
- - Prefer `--body-file` for `gh` posts (also required by the gh-body-file rule)
82
- - Let `pii_prevention_blocker` re-run on the next Write / commit / post
83
-
84
- ## Accepted residual (do not over-scrub)
85
-
86
- - LICENSE copyright lines naming a legal person or org that owns the work
87
- - Intentional public maintainer identity published on purpose
88
- - Example domains reserved for documentation (`example.com` and siblings)
89
- - Placeholder home users (`example`, `user`, `alice`, `<you>`, `YOUR_USER`)
90
- - The NAS host you configure locally (allowlisted at scan time, never committed)
91
- - Public addresses and docs that name private ranges without a live host (still prefer hostnames)
92
-
93
- ## Enable on any machine / public repository
94
-
95
- Install or reinstall the package so hooks and this skill land under `~/.claude/`:
96
-
97
- ```
98
- cd packages/claude-dev-env
99
- node bin/install.mjs
100
- ```
101
-
102
- Hooks register via `hooks/hooks.json` into `~/.claude/settings.json`. Once installed, the same gates apply in every repository the agent touches — private or public.
103
-
104
- ## Open knobs
105
-
106
- - **NAS / LAN allowlist:** Unlisted private IPs are blocked. The scanner resolves your NAS host from `CLAUDE_NAS_HOST`, then `~/.claude/local-identity.json` (`nas.host`), and allowlists it when it is a private address, so the committed tree holds no real host. `ALL_ALLOWLISTED_PRIVATE_IP_ADDRESSES` in `hooks_constants` holds the static allowlist for any host every machine must share.
107
- - **Commit-scan exempt repositories:** named owner/repo slugs skip the staged-commit PII scan only. Set `CLAUDE_PII_EXEMPT_REPOS` (comma-separated `owner/repo` values) or list them under `pii_exempt_repositories` in `~/.claude/local-identity.json`. Matching uses the repository's `remote.origin.url` and accepts only the exact host `github.com` (https, ssh scheme, or scp-style). A repository with no readable origin is never exempt (fail-closed to scanning). Write / Edit / MultiEdit and durable post bodies still scan in every repository.
108
- - **Public maintainer identity:** when a real email or name is intentional product surface, keep it and note that in the PR body so reviewers do not treat it as a leak.
109
-
110
- ## What this skill does not do
111
-
112
- - Does not rewrite git history without explicit user approval
113
- - Does not rotate credentials for you
114
- - Does not replace the write-time hook — it complements it
115
- - Does not scan commit-message text (`-m` / `-F`); keep messages free of secrets yourself
1
+ ---
2
+ name: privacy-hygiene
3
+ description: Full-repo sweep for personal data and secrets before commit or durable GitHub post. Use when preparing a PR, cleaning a leak, or when `pii_prevention_blocker` denies a write, post, or commit. Triggers on "privacy hygiene", "personal data", "secret sweep", "sanitize repository", "/privacy-hygiene".
4
+ ---
5
+
6
+ # privacy-hygiene
7
+
8
+ ## Overview
9
+
10
+ Find and remove personal data and high-confidence secrets before they land in git history or a durable GitHub post. The `pii_prevention_blocker` hook blocks the common cases at write, post, and commit time. This skill is the full sweep when you need a broader pass or a remediation plan.
11
+
12
+ **Announce at start:** "Running privacy-hygiene sweep."
13
+
14
+ ## When to run a full sweep
15
+
16
+ - Before the first push of a branch that touched logs, screenshots, config samples, or machine-local paths
17
+ - After a hook block on email, home path, LAN address, or secret material
18
+ - Before opening a PR to a repository that is public (or will be made public)
19
+ - After pasting support tickets, env dumps, or terminal transcripts into the tree
20
+
21
+ ## What the automated gate blocks
22
+
23
+ | Category | Blocked examples | Allowed residual |
24
+ |---|---|---|
25
+ | Email | `user@example.com` | `user@example.com`, `user@example.org`, `user@example.net` |
26
+ | Home path | `C:/Users/example/...`, `/Users/example/...`, `/home/example/...` | `C:/Users/example/...`, `C:/Users/<you>/...`, `/Users/alice/...` |
27
+ | LAN address | Unlisted `10.x` / `172.16–31.x` / `192.168.x` | Public addresses; your NAS host from `CLAUDE_NAS_HOST` or `~/.claude/local-identity.json`; entries in `ALL_ALLOWLISTED_PRIVATE_IP_ADDRESSES` |
28
+ | Secret | `ghp_…`, `github_pat_…`, `AKIA…`, PEM private-key headers | Public keys, redacted `***`, env var names without values |
29
+
30
+ Surfaces:
31
+
32
+ 1. **Write / Edit / MultiEdit** — payload text about to land on disk (via PreToolUse dispatcher)
33
+ 2. **Durable posts** — `gh pr/issue create|comment|edit|review` bodies and GitHub MCP body/comment fields (Bash and PowerShell)
34
+ 3. **git commit** — staged blob text (non-exempt paths) on Bash and PowerShell, including `git.exe` and flag forms (`--no-verify`, `-c`, `-C`). Commit message bodies (`-m` / `-F`) are out of scope for the automated gate
35
+
36
+ ## Sweep procedure
37
+
38
+ Run the full-tree sweep in
39
+ [`reference/sweep-procedure.md`](reference/sweep-procedure.md): scope the tree,
40
+ run the ripgrep pass for the four high-confidence pattern families (email, home
41
+ path, LAN address, secret), review each hit against the ignore list, and
42
+ remediate. It also lists the accepted residual — what to leave in place rather
43
+ than over-scrub. The ripgrep command is the only full-tree pass; the write-time
44
+ `pii_prevention_blocker` scans one payload at a time.
45
+
46
+ ## Enable on any machine / public repository
47
+
48
+ Install or reinstall the package so hooks and this skill land under `~/.claude/`:
49
+
50
+ ```
51
+ cd packages/claude-dev-env
52
+ node bin/install.mjs
53
+ ```
54
+
55
+ Hooks register via `hooks/hooks.json` into `~/.claude/settings.json`. Once installed, the same gates apply in every repository the agent touches — private or public.
56
+
57
+ ## Open knobs
58
+
59
+ - **NAS / LAN allowlist:** Unlisted private IPs are blocked. The scanner resolves your NAS host from `CLAUDE_NAS_HOST`, then `~/.claude/local-identity.json` (`nas.host`), and allowlists it when it is a private address, so the committed tree holds no real host. `ALL_ALLOWLISTED_PRIVATE_IP_ADDRESSES` in `hooks_constants` holds the static allowlist for any host every machine must share.
60
+ - **Commit-scan exempt repositories:** named owner/repo slugs skip the staged-commit PII scan only. Set `CLAUDE_PII_EXEMPT_REPOS` (comma-separated `owner/repo` values) or list them under `pii_exempt_repositories` in `~/.claude/local-identity.json`. Matching uses the repository's `remote.origin.url` and accepts only the exact host `github.com` (https, ssh scheme, or scp-style). A repository with no readable origin is never exempt (fail-closed to scanning). Write / Edit / MultiEdit and durable post bodies still scan in every repository.
61
+ - **Public maintainer identity:** when a real email or name is intentional product surface, keep it and note that in the PR body so reviewers do not treat it as a leak.
62
+
63
+ ## What this skill does not do
64
+
65
+ - Does not rewrite git history without explicit user approval
66
+ - Does not rotate credentials for you
67
+ - Does not replace the write-time hook — it complements it
68
+ - Does not scan commit-message text (`-m` / `-F`); keep messages free of secrets yourself
@@ -0,0 +1,62 @@
1
+ # Full-tree PII sweep procedure
2
+
3
+ The on-demand full-repository sweep for the `privacy-hygiene` skill — the
4
+ complement to the write-time `pii_prevention_blocker`, which scans one payload at
5
+ a time. The canonical per-payload patterns live in the hooks' `pii_scanner` and
6
+ `pii_prevention_constants` modules; the ripgrep command below is the only
7
+ full-tree pass. The hub ([`../SKILL.md`](../SKILL.md)) points here.
8
+
9
+ ## 1. Scope the tree
10
+
11
+ ```
12
+ git status -sb
13
+ git diff --stat
14
+ git diff --cached --stat
15
+ ```
16
+
17
+ Prefer the branch diff vs `origin/main` for PR prep:
18
+
19
+ ```
20
+ git fetch origin main
21
+ git diff --name-only origin/main...HEAD
22
+ ```
23
+
24
+ ## 2. Search for high-confidence patterns
25
+
26
+ Run from the repo root (PowerShell-friendly example):
27
+
28
+ ```
29
+ rg -n --hidden -g '!node_modules' -g '!.git' -e '@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' -e 'Users[/\\][^/\\]+' -e '[/]home/[^/]+' -e '\b(10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+)\b' -e '\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\b' -e '\bgithub_pat_[A-Za-z0-9_]{20,}\b' -e '\bAKIA[0-9A-Z]{16}\b' -e '-----BEGIN [A-Z ]*PRIVATE KEY-----'
30
+ ```
31
+
32
+ Review each hit. Ignore:
33
+
34
+ - Test fixtures under `test_*.py` / `*_test.py` / `/tests/` (synthetic only)
35
+ - `LICENSE` / copyright notice identity that is intentional and public
36
+ - This package's own `pii_scanner` / `pii_prevention_constants` modules
37
+ - Documented placeholders (`user@example.com`, `C:/Users/<you>/`)
38
+
39
+ ## 3. Remediate
40
+
41
+ | Hit | Fix |
42
+ |---|---|
43
+ | Real email | Replace with `user@example.com` or remove |
44
+ | Home path | Use `Path.home()`, `~`, or `C:/Users/<you>/` |
45
+ | LAN address | Remove, use a hostname, or — for your own NAS — set the host in `CLAUDE_NAS_HOST` or `~/.claude/local-identity.json`, both of which stay out of git |
46
+ | Credential material | Remove from the tree; rotate the credential; load from env/secret store |
47
+ | Already committed | Rewrite is not enough if already pushed — rotate secrets; scrub history only with explicit user approval |
48
+
49
+ ## 4. Re-check before commit / post
50
+
51
+ - Stage only clean files
52
+ - Prefer `--body-file` for `gh` posts (also required by the gh-body-file rule)
53
+ - Let `pii_prevention_blocker` re-run on the next Write / commit / post
54
+
55
+ ## Accepted residual (do not over-scrub)
56
+
57
+ - LICENSE copyright lines naming a legal person or org that owns the work
58
+ - Intentional public maintainer identity published on purpose
59
+ - Example domains reserved for documentation (`example.com` and siblings)
60
+ - Placeholder home users (`example`, `user`, `alice`, `<you>`, `YOUR_USER`)
61
+ - The NAS host you configure locally (allowlisted at scan time, never committed)
62
+ - Public addresses and docs that name private ranges without a live host (still prefer hostnames)
@@ -12,7 +12,8 @@ Produces a self-contained HTML session report shaped to the session's character
12
12
 
13
13
  | File | Purpose |
14
14
  |---|---|
15
- | `SKILL.md` | Hub — six steps, gotchas, backend detection, frontmatter contract, run-and-report checklist. Single-file skill; no companion files. |
15
+ | `SKILL.md` | Hub — six steps, gotchas, backend detection, run-and-report checklist. |
16
+ | `templates/frontmatter.md` | The session-page frontmatter contract and the Step 3 notes block. |
16
17
 
17
18
  ## Six steps
18
19
 
@@ -60,21 +60,7 @@ Resolve the metadata used by the frontmatter and the vault path:
60
60
  - **Date:** today's date
61
61
  - **Title:** a 2–5 word summary of the session's primary outcome. Examples: "Amazon Auth Migration", "Source Loading Fix", "PR 475 Convergence". Avoid generic titles like "Bug Fixes".
62
62
 
63
- The frontmatter contract every session report carries (inside an HTML comment, as the first child of `<body>`):
64
-
65
- ```html
66
- <!--
67
- type: session-report
68
- project: [name]
69
- session: [N]
70
- session_id: [uuid]
71
- date: [YYYY-MM-DD]
72
- status: completed|in-progress|blocked
73
- blocked: true|false
74
- vault_context_retrieved: true|false
75
- tags: [session, [project-tag], [topic-tags]]
76
- -->
77
- ```
63
+ The frontmatter contract every session report carries (inside an HTML comment, as the first child of `<body>`) is the metadata block in [`templates/frontmatter.md`](templates/frontmatter.md).
78
64
 
79
65
  Every session report carries this metadata block verbatim so vault search and the tidy step in step 5 work. **Initial values for Step 2's Write:** substitute concrete values for every placeholder — for `session_id`, write the value read from `CLAUDE_CODE_SESSION_ID` in step 1 (or `unknown` when the variable is unset); for `vault_context_retrieved`, write the literal value `false` (the safe default before Step 3's vault-MCP-tool scan completes). Step 3 then Edits `vault_context_retrieved` to `true` if any of the three vault MCP tools fired this session.
80
66
 
@@ -113,16 +99,7 @@ Review the conversation history for any use of these vault MCP tools (look only
113
99
  Edit the vault HTML via two Edit calls:
114
100
 
115
101
  1. Set the frontmatter `vault_context_retrieved` field to `true` when any of the three tools fired this session, `false` otherwise.
116
- 2. Append one fact — vault-context status — into whatever section the report designer placed for notes / metadata / references. If the report has no such section, append a fresh `<h2>Notes</h2>` block at the end of the content:
117
-
118
- ```html
119
- <h2>Notes</h2>
120
- <ul>
121
- <!-- Pick exactly one of the two forms based on whether vault MCP tools fired this session: -->
122
- <li><strong>Vault context:</strong> Retrieved ([list of note paths])</li>
123
- <li><strong>Vault context:</strong> Not retrieved</li>
124
- </ul>
125
- ```
102
+ 2. Append one fact — vault-context status — into whatever section the report designer placed for notes / metadata / references. If the report has no such section, append a fresh `<h2>Notes</h2>` block (in [`templates/frontmatter.md`](templates/frontmatter.md)) at the end of the content.
126
103
 
127
104
  If the report already has a notes / references section, use Edit to insert one matching child element at the end of that section. The element shape mirrors whatever the section already uses: an extra `<li>` before the closing `</ul>` for a list, an extra `<dt>Vault context</dt><dd>…</dd>` pair before the closing `</dl>` for a description list, an extra `<p><strong>Vault context:</strong> …</p>` before the section's closing tag for a paragraph-based section. Pick the form that matches the surrounding markup.
128
105
 
@@ -189,4 +166,5 @@ The primary outcome comes from the session title resolved in step 1.
189
166
 
190
167
  ## Folder map
191
168
 
192
- - `SKILL.md` — this hub. Single-file skill; no companions.
169
+ - `SKILL.md` — this hub.
170
+ - `templates/frontmatter.md` — the report frontmatter contract and the Step 3 notes block.
@@ -0,0 +1,40 @@
1
+ # Session-log template blocks
2
+
3
+ The two verbatim HTML blocks the `session-log` skill drops into every session
4
+ page. The hub ([`../SKILL.md`](../SKILL.md)) points here from Step 1 / Step 2
5
+ (frontmatter) and Step 3 (notes).
6
+
7
+ ## Frontmatter contract
8
+
9
+ The first child of `<body>`, inside an HTML comment. Substitute a concrete value
10
+ for every placeholder; `vault_context_retrieved` starts `false` and Step 3 sets
11
+ it.
12
+
13
+ ```html
14
+ <!--
15
+ type: session-report
16
+ project: [name]
17
+ session: [N]
18
+ session_id: [uuid]
19
+ date: [YYYY-MM-DD]
20
+ status: completed|in-progress|blocked
21
+ blocked: true|false
22
+ vault_context_retrieved: true|false
23
+ tags: [session, [project-tag], [topic-tags]]
24
+ -->
25
+ ```
26
+
27
+ ## Notes block (Step 3)
28
+
29
+ Append one vault-context line. When the page already carries a notes /
30
+ references section, add a matching child element to that section; use the block
31
+ below only when the page has no such section.
32
+
33
+ ```html
34
+ <h2>Notes</h2>
35
+ <ul>
36
+ <!-- Pick exactly one of the two forms based on whether vault MCP tools fired this session: -->
37
+ <li><strong>Vault context:</strong> Retrieved ([list of note paths])</li>
38
+ <li><strong>Vault context:</strong> Not retrieved</li>
39
+ </ul>
40
+ ```
@@ -1,12 +1,12 @@
1
1
  # skill-builder
2
2
 
3
- Orchestrates the skill-building lifecycle: classify type, scaffold folders, write via `skill-writer`, enforce modularity (sub-skills / composition), write description as a trigger catalog, self-audit, and refine from real usage.
3
+ Orchestrates the skill-building lifecycle: classify type, scaffold folders, write via `skill-writer`, enforce modularity (sub-skills / composition), write description as a trigger catalog, require deterministic steps as code, self-audit, and refine from real usage.
4
4
 
5
- **Trigger:** build a skill, new skill workflow, improve this skill, optimize skill description, skill development lifecycle, skill modularity, description trigger catalog.
5
+ **Trigger:** build a skill, new skill workflow, improve this skill, optimize skill description, skill development lifecycle, skill modularity, description trigger catalog, deterministic skill scripts.
6
6
 
7
7
  ## Purpose
8
8
 
9
- Enforces craft standards for new and existing skills. For quick one-off SKILL.md edits, use `/skill-writer` directly. This skill classifies, scaffolds, gathers context (including composition plan and description triggers), delegates writing, and self-audits.
9
+ Enforces craft standards for new and existing skills. For quick one-off SKILL.md edits, use `/skill-writer` directly. This skill classifies, scaffolds, gathers context (composition plan, description triggers, deterministic inventory), delegates writing, and self-audits.
10
10
 
11
11
  ## Key files
12
12
 
@@ -17,13 +17,14 @@ Enforces craft standards for new and existing skills. For quick one-off SKILL.md
17
17
  | `references/progressive-disclosure.md` | Hub pattern, folder conventions, hard rules |
18
18
  | `references/skill-modularity.md` | Cross-skill modularity, sub-skills, composition plan |
19
19
  | `references/description-field.md` | Description as trigger catalog (not story prose) |
20
- | `references/self-audit-checklist.md` | Mandatory post-build audit |
20
+ | `references/deterministic-elements.md` | Deterministic steps as code/task seeds; no markdown checkbox boards |
21
+ | `references/self-audit-checklist.md` | Post-build audit task seeds (TaskCreate / TodoWrite) |
21
22
  | `references/delegation-map.md` | Subagent handoff patterns and transcript guidance |
22
23
  | `references/thariq-x-post-skills.json` | Source reference — lessons from building Claude Code skills |
23
24
  | `workflows/new-skill.md` | Full lifecycle for new skills (6 steps) |
24
25
  | `workflows/improve-skill.md` | Observation-first flow for existing skills (6 steps) |
25
26
  | `workflows/polish-skill.md` | Description trigger-catalog audit and final validation (5 steps) |
26
- | `templates/gap-analysis.md` | Gaps, composition plan, description triggers |
27
+ | `templates/gap-analysis.md` | Gaps, composition plan, description triggers, deterministic inventory |
27
28
 
28
29
  ## Subdirectories
29
30
 
@@ -43,6 +44,6 @@ Enforces craft standards for new and existing skills. For quick one-off SKILL.md
43
44
  ## Conventions
44
45
 
45
46
  - Every build ends with the self-audit at `references/self-audit-checklist.md`; fix failures before delivery.
46
- - Modularity items and description trigger-catalog items are mandatory on every delivery.
47
- - `skill-builder` orchestrates; `skill-writer` authors. Handoff packet must include type, gap analysis, composition plan, description trigger catalog, degree-of-freedom assessment, and constraints.
47
+ - Modularity items, description trigger-catalog items, and deterministic-element classification are mandatory on every delivery.
48
+ - `skill-builder` orchestrates; `skill-writer` authors. Handoff packet must include type, gap analysis, composition plan, description trigger catalog, deterministic inventory, degree-of-freedom assessment, and constraints.
48
49
  - Claude A / Claude B: Claude A (this session) designs; Claude B (subagents) tests the built skill on real tasks.
@@ -2,9 +2,10 @@
2
2
  name: skill-builder
3
3
  description: >-
4
4
  Skill lifecycle: classify, scaffold, write via skill-writer, self-audit, compose
5
- sub-skills, polish description triggers. Triggers: build a skill, new skill
6
- workflow, improve this skill, optimize skill description, skill development
7
- lifecycle, skill modularity, skill composition, description trigger catalog.
5
+ sub-skills, polish description triggers, enforce deterministic scripts. Triggers:
6
+ build a skill, new skill workflow, improve this skill, optimize skill description,
7
+ skill development lifecycle, skill modularity, skill composition, description
8
+ trigger catalog, deterministic skill scripts.
8
9
  ---
9
10
 
10
11
  # Skill Builder
@@ -22,6 +23,8 @@ Highest-signal content. Append a bullet each time a skill build fails in a new w
22
23
  - Story-form `description` burns always-on context and weakens selection — rewrite to capability stem + `Triggers:` list (`description-field.md`).
23
24
  - Multi-capability packages fail modularity audit — split or thin orchestrator + named sub-skills (`skill-modularity.md`).
24
25
  - Skipping the composition plan before Write reintroduces silent reimplementation of peer skills.
26
+ - Deterministic steps written only as prose (fenced source, giant `rg` lines, multi-step mechanical sequences) fail audit — extract to `scripts/` / `workflow/` / `templates/` / `reference/` (`deterministic-elements.md`).
27
+ - Markdown `- [ ]` checklists as the agent's progress board fail audit when a task tool exists — seed tasks via `TaskCreate` / `TodoWrite` (`deterministic-elements.md`).
25
28
 
26
29
  ## When this skill applies
27
30
 
@@ -116,11 +119,13 @@ Mandatory highest-signal section (see Gotchas above). Capture real failure modes
116
119
 
117
120
  Use the template pattern for structured outputs. Use the examples pattern (input/output pairs) for style-dependent work.
118
121
 
119
- ### Workflows and checklists
122
+ ### Workflows and task seeds
120
123
 
121
- > "For particularly complex workflows, provide a checklist that Claude can copy into its response and check off as it progresses."
124
+ Multi-step required work is a **task seed list** (plain bullets in a reference file) plus an instruction to register each item on the host task tool (`TaskCreate`, `TodoWrite`, or equivalent). Agents work the task list and mark complete with evidence.
122
125
 
123
- Multi-step processes get `[ ]` checklists. Quality-critical operations get feedback loops (run validator fix repeat).
126
+ Do **not** ship markdown `- [ ]` boards as the completion protocol when a task tool is available. Do **not** say "copy this checklist into your response and check it off."
127
+
128
+ Quality-critical operations still use feedback loops (run validator → fix → repeat). Spec: [`references/deterministic-elements.md`](references/deterministic-elements.md) (Task-tool tracking).
124
129
 
125
130
  ### Scripts
126
131
 
@@ -128,6 +133,14 @@ Multi-step processes get `[ ]` checklists. Quality-critical operations get feedb
128
133
 
129
134
  > "One of the most powerful tools you can give Claude is code — letting Claude spend its turns on composition rather than reconstructing boilerplate."
130
135
 
136
+ ### Deterministic elements (mandatory classification)
137
+
138
+ Any skill element that is **deterministic** (same inputs → same outputs; machine-checkable success) ships as code, a fixed artifact, or a **session task seed** — not prose-only steps or markdown checkbox boards. Judgment, routing, and refusals stay in markdown.
139
+
140
+ Full rules, inventory table, task-tool tracking, CODE_RULES bar for skill scripts, and anti-patterns: [`references/deterministic-elements.md`](references/deterministic-elements.md).
141
+
142
+ New-skill Gather records a deterministic-elements inventory before write. Self-audit items register as session tasks and are mandatory on every delivery (pure-judgment skills mark script rows N/A with evidence).
143
+
131
144
  ### Setup and memory
132
145
 
133
146
  > "Think through the Setup — some skills may need to be set up with context from the user. A good pattern is to store this in a config.json file."
@@ -142,22 +155,23 @@ Multi-step processes get `[ ]` checklists. Quality-critical operations get feedb
142
155
 
143
156
  > No Windows paths. Don’t offer too many options — provide a default with escape hatch. Avoid time-sensitive claims. Use consistent terminology. No deeply nested references.
144
157
 
145
- Also: story-form descriptions; monolith multi-capability skills; silent reimplementation of peer skills; nested folders used as fake sub-skills.
158
+ Also: story-form descriptions; monolith multi-capability skills; silent reimplementation of peer skills; nested folders used as fake sub-skills; deterministic logic only in prose or fenced source; markdown `- [ ]` as the agent's work tracker.
146
159
 
147
160
  ## Self-audit
148
161
 
149
- After every build, improvement, or polish pass, run the mandatory checklist at `${CLAUDE_SKILL_DIR}/references/self-audit-checklist.md`. Every item must pass before delivery. Fix failures, then re-audit.
162
+ After every build, improvement, or polish pass, load `${CLAUDE_SKILL_DIR}/references/self-audit-checklist.md`, **register every bullet as a session task**, and complete each with evidence. Every item must pass before delivery. Fix failures, then re-audit.
150
163
 
151
164
  ## Delegation to skill-writer
152
165
 
153
166
  skill-builder orchestrates; skill-writer authors. The handoff packet from Step 4 must include:
154
167
 
155
168
  - Skill type and folder structure
156
- - Gap analysis or observation findings (composition plan + description triggers)
169
+ - Gap analysis or observation findings (composition plan + description triggers + deterministic inventory)
157
170
  - Degree of freedom assessment
158
171
  - Initial gotchas
159
172
  - Composition plan: related skills, sub-skills to invoke, split decisions
160
173
  - Description trigger catalog: capability stem + trigger phrases (not prose)
174
+ - Deterministic elements inventory: each process step classified; code paths + paired tests
161
175
  - Any constraints
162
176
 
163
177
  See `${CLAUDE_SKILL_DIR}/references/delegation-map.md` for exact patterns.
@@ -171,12 +185,13 @@ See `${CLAUDE_SKILL_DIR}/references/delegation-map.md` for exact patterns.
171
185
  | `references/progressive-disclosure.md` | Folder conventions, hub pattern, hard rules |
172
186
  | `references/skill-modularity.md` | Cross-skill modularity, sub-skills, composition plan |
173
187
  | `references/description-field.md` | Description as trigger catalog (not story prose) |
174
- | `references/self-audit-checklist.md` | Mandatory post-build audit (core, modularity, description) |
188
+ | `references/deterministic-elements.md` | Deterministic steps as code/task seeds; CODE_RULES; no markdown checkbox boards |
189
+ | `references/self-audit-checklist.md` | Post-build audit task seeds (register via TaskCreate / TodoWrite) |
175
190
  | `references/delegation-map.md` | Subagent handoff patterns and transcript guidance |
176
191
  | `workflows/new-skill.md` | Full lifecycle for new skills (6 steps) |
177
192
  | `workflows/improve-skill.md` | Observation-first flow for existing skills (6 steps) |
178
193
  | `workflows/polish-skill.md` | Description trigger-catalog audit and final validation (5 steps) |
179
- | `templates/gap-analysis.md` | Gaps, composition plan, description triggers |
194
+ | `templates/gap-analysis.md` | Gaps, composition plan, description triggers, deterministic inventory |
180
195
 
181
196
  ## Folder map
182
197
 
@@ -6,11 +6,12 @@ Best-practice specifications and the mandatory self-audit checklist for the `/sk
6
6
 
7
7
  | File | Purpose |
8
8
  |---|---|
9
- | `self-audit-checklist.md` | Checklist after every build, improvement, or polish pass. Every item must pass before delivery. |
9
+ | `self-audit-checklist.md` | Audit task seeds after every build, improve, or polish. Register via TaskCreate / TodoWrite. |
10
10
  | `skill-types.md` | 9-type skill taxonomy with folder structures per type. |
11
11
  | `progressive-disclosure.md` | Hub pattern, folder conventions, hard rules: SKILL.md under 500 lines, one-level references. |
12
12
  | `skill-modularity.md` | Cross-skill modularity: one capability, sub-skills by name, composition plan, anti-monolith. |
13
13
  | `description-field.md` | Frontmatter description as trigger catalog (capability stem + Triggers). No story prose. |
14
+ | `deterministic-elements.md` | Classify process steps; deterministic ones ship as code, task seeds, or fixed artifacts under CODE_RULES. |
14
15
  | `delegation-map.md` | Subagent handoff patterns and transcript guidance for skill-builder → skill-writer. |
15
16
  | `thariq-x-post-skills.json` | Source reference data from Anthropic lessons on building Claude Code skills. |
16
17
 
@@ -20,4 +21,5 @@ Best-practice specifications and the mandatory self-audit checklist for the `/sk
20
21
  - `self-audit-checklist.md` always loads at the end of a build cycle.
21
22
  - Load `skill-modularity.md` during Gather and when scope/overlap is diagnosed.
22
23
  - Load `description-field.md` during Gather, polish Step 1, and any activation diagnosis.
24
+ - Load `deterministic-elements.md` during Gather, when prose-as-code is diagnosed, and on polish structure audit.
23
25
  - `thariq-x-post-skills.json` is source reference data, not executable content.
@@ -21,15 +21,19 @@ Create a skill with these parameters:
21
21
  **Composition plan:** [related skills; sub-skills with when/produces/missing; leaf vs orchestrator]
22
22
  **Description (exact frontmatter string):** [capability stem. Triggers: phrase, phrase, ...]
23
23
  — Trigger catalog only per description-field.md. No story prose.
24
+ **Deterministic inventory:** [each process step → class → home path → paired test]
25
+ — Per deterministic-elements.md. Deterministic steps must be code/artifacts, not prose-only.
24
26
 
25
27
  Produce:
26
28
  1. SKILL.md with hub layout (principle, gotchas, when-applies, process, file index, folder map)
27
29
  2. Frontmatter description set to the exact trigger-catalog string above
28
30
  3. Sub-skills table in body when composition plan lists peer skills
29
- 4. Companion files as needed (reference docs, workflow steps, templates)
30
- 5. Every file under 500 lines; TOC on files over 100 lines
31
- 6. File index listing every file and its purpose
32
- 7. No reimplementation of steps owned by named sub-skills
31
+ 4. Companion files as needed (reference docs, workflow steps, templates, scripts)
32
+ 5. Scripts/workflows for every deterministic inventory row; body only points and handles exit codes
33
+ 6. Skill scripts follow CODE_RULES (`*_constants/`, types, specific errors, paired tests)
34
+ 7. Every file under 500 lines; TOC on files over 100 lines
35
+ 8. File index listing every file and its purpose
36
+ 9. No reimplementation of steps owned by named sub-skills
33
37
  ```
34
38
 
35
39
  ### Refine skill handoff
@@ -44,9 +48,11 @@ Refine this existing skill:
44
48
  **What to preserve:** [working content — do not touch]
45
49
  **Description rewrite (if activation issue):** [exact new trigger-catalog string]
46
50
  **Composition change (if modularity issue):** [sub-skills to add/invoke or split plan]
51
+ **Deterministic fix (if prose-only mechanical work):** [steps to extract → script/workflow/template paths + tests]
47
52
 
48
53
  Constraint: Only change what the observations demand. Do not reorganize working content.
49
54
  Description must remain a trigger catalog (description-field.md), never story prose.
55
+ Deterministic steps must not remain prose-only (deterministic-elements.md).
50
56
  ```
51
57
 
52
58
  ## Spawning a test subagent
@@ -78,27 +84,30 @@ Scan the transcript for:
78
84
  3. **Re-read files** — Did Claude re-read the same file multiple times? That content should be in SKILL.md.
79
85
  4. **Gotcha moments** — Where did Claude make a wrong choice? That's a gotcha candidate.
80
86
  5. **Script usage** — Did Claude execute scripts as expected, or did it try to read them instead?
81
- 6. **Tool call errors** — Any "tool not found" or path errors? Fix references.
87
+ 6. **Prose-as-code** — Did Claude reconstruct a multi-step mechanical sequence from markdown when a script should have run? Flag as deterministic-elements failure.
88
+ 7. **Tool call errors** — Any "tool not found" or path errors? Fix references.
82
89
 
83
90
  ## Delegating self-audit
84
91
 
85
- After building, spawn a subagent to run the checklist independently:
92
+ After building, spawn a subagent to run the audit independently (task-tool first):
86
93
 
87
94
  ```
88
95
  Agent(
89
96
  subagent_type="general-purpose",
90
- description="Self-audit skill against checklist",
97
+ description="Self-audit skill via task seeds",
91
98
  prompt="Read the skill at [skill-path]/SKILL.md and all companion files.
92
99
 
93
- Then read the self-audit checklist at [skill-builder-path]/references/self-audit-checklist.md.
100
+ Then read the self-audit task seeds at [skill-builder-path]/references/self-audit-checklist.md.
94
101
 
95
- Check every item. For each: PASS, FAIL with specific file:line evidence and what to fix, or N/A with reason.
102
+ Register every bullet as a session task (TaskCreate / TodoWrite). Complete each with PASS, FAIL+file:line+fix, or N/A+reason. Do not use markdown checkboxes as the tracker.
96
103
 
97
104
  Report as:
98
105
  ## Audit Results
99
- [ ] Item 1: PASS
100
- [ ] Item 2: FAIL — [file:line] — [what's wrong and how to fix]
101
- ..."
106
+ - PASS: N
107
+ - N/A: M
108
+ - FAIL fixed: K
109
+ - Remaining FAIL (must be empty): …
110
+ "
102
111
  )
103
112
  ```
104
113
 
@@ -85,19 +85,17 @@ description: You can use this to process Excel files
85
85
  3. List **near-misses** that must *not* select it (sibling skills). Fold only the shortest distinguishing tokens into Triggers if needed.
86
86
  4. Assemble stem + `Triggers:` list. Strip adjectives, benefits, and process narrative.
87
87
  5. Count characters (≤1024). Prefer under ~400 when possible — every skill’s description is always loaded.
88
- 6. Run the checklist below.
88
+ 6. Register the task seeds below on the session task list (`TaskCreate` / `TodoWrite`); complete each with evidence. Do not use markdown checkboxes as the tracker.
89
89
 
90
- ## Description checklist
90
+ ## Description task seeds
91
91
 
92
- ```
93
- - [ ] Third person; no I/you
94
- - [ ] Capability stem present (what), ≤20 words of tokens
95
- - [ ] Triggers: segment (or equivalent dense when-list) with concrete phrases
96
- - [ ] No story prose, benefits language, or implementation steps
97
- - [ ] No XML; length ≤1024
98
- - [ ] Distinguishable from sibling skills in the same domain
99
- - [ ] Body holds process detail — not the description
100
- ```
92
+ - Third person; no I/you
93
+ - Capability stem present (what), ≤20 words of tokens
94
+ - Triggers: segment (or equivalent dense when-list) with concrete phrases
95
+ - No story prose, benefits language, or implementation steps
96
+ - No XML; length ≤1024
97
+ - Distinguishable from sibling skills in the same domain
98
+ - Body holds process detail not the description
101
99
 
102
100
  ## Where process lives
103
101