claude-dev-env 2.14.0 → 2.14.1
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.
- package/AGENTS.md +106 -32
- package/agents/AGENTS.md +0 -5
- package/agents/test_agent_frontmatter.py +7 -7
- package/bin/install.test.mjs +3 -3
- package/commands/AGENTS.md +0 -10
- package/hooks/blocking/test_claude_md_orphan_file_blocker.py +1 -1
- package/hooks/diagnostic/AGENTS.md +32 -0
- package/hooks/diagnostic/hook_log_init.py +2 -2
- package/output-styles/AGENTS.md +1 -1
- package/package.json +1 -1
- package/scripts/test_active_capability_references.py +2 -2
- package/skills/anthropic-plan/AGENTS.md +1 -1
- package/skills/anthropic-plan/SKILL.md +1 -1
- package/skills/anthropic-plan/test_skill_contract.py +8 -6
- package/skills/prototype/SKILL.md +1 -2
- package/skills/prototype/reference/promotion-tasks.md +1 -1
- package/skills/prototype/workflows/promotion.md +1 -1
- package/agents/caveman.md +0 -73
- package/agents/clasp-deployment-orchestrator.md +0 -608
- package/agents/code-advisor.md +0 -23
- package/agents/deep-research.md +0 -152
- package/agents/docs-agent.md +0 -85
- package/commands/commit.md +0 -28
- package/commands/docupdate.md +0 -322
- package/commands/hook-log-extract.md +0 -70
- package/commands/hook-log-init.md +0 -76
- package/commands/implement.md +0 -102
- package/commands/plan.md +0 -14
- package/commands/pr-comments.md +0 -47
- package/commands/review-plan.md +0 -5
- package/commands/right-size.md +0 -15
- package/commands/sum.md +0 -30
package/AGENTS.md
CHANGED
|
@@ -1,61 +1,135 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Scope
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Every rule in this file governs all text everywhere: chat replies, tool-call sentences, plans, questions you ask, code, code comments, test names, commit subjects, pull request and issue bodies, documentation, and every file you write. No rule stops at the edge of a chat message.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A rule that names a form in order to forbid it passes its own check, and so does a two-column table that teaches a rewrite.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Ask when ambiguity materially changes scope or implementation. Collect credentials through secure UI only; never request secrets in chat.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Documentation
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Describe only the current system state. Keep documentation self-contained and free of historical, transitional, conversational, or version-transition language. Never use negative prose or antipatterns. Always state what to do, specifically.
|
|
12
|
+
Code and tests
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
Tests must exercise real behavior, real data, and production paths. Test theater is forbidden.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|---|---|
|
|
17
|
-
| `~/.claude/docs/references/advisor-tool.md` | When to call a stronger reviewer, hard rule before first write, how to treat advice |
|
|
18
|
-
| `/team-advisor` skill | Standing warm advisor bind (map: `docs/references/team-advisor-skill.md`) |
|
|
19
|
-
| `~/.claude/_shared/advisor/advisor-protocol.md` | Host bind, model floor, lifecycle |
|
|
16
|
+
For multi-step code tasks:
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
Coders consult a warm session-advisor when blocked (Sol xHigh).
|
|
19
|
+
Repair reported findings when that review mode is selected.
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
Research and delegation
|
|
22
|
+
Delegate fact extraction when multiple files or search patterns are required. Request precise file-and-line answers.
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
Use warm & reusable parallel luna (you decide effort level per task) fast subagents for unrelated questions; threaded & named appropriately.
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
Read or search directly only in files you will modify via es.exe.
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
For code navigation, prefer es.exe, then content search or globbing.
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
Scope every es.exe search.
|
|
32
31
|
|
|
33
|
-
|
|
32
|
+
Never scan an entire drive or network share.
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
Task tracking
|
|
35
|
+
Track every task using `update_plan`.
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Definitions
|
|
38
|
+
Warm agent: Any agent who has acted within the past 30 minutes.
|
|
39
|
+
|
|
40
|
+
# Response and working style
|
|
41
|
+
|
|
42
|
+
Mid-run and closing narration follow `rules/opus5-communication-contract.md` (`opus5-communication-contract-v1`): first progress update is one sentence; later updates only for important discoveries or direction changes; the final starts with the outcome.
|
|
43
|
+
|
|
44
|
+
Keep responses focused, brief, and concise. Keep disclaimers and caveats short, and spend most of the response on the main answer. When asked to explain something, give a high-level summary unless an in-depth explanation is specifically requested.
|
|
45
|
+
|
|
46
|
+
# Word budget
|
|
47
|
+
|
|
48
|
+
Say it in the fewest words that stay accurate and complete. Before sending, cut every sentence that does not change what the reader thinks or does.
|
|
49
|
+
|
|
50
|
+
Cut these on sight:
|
|
51
|
+
|
|
52
|
+
- Deliberation. State the decision, not the reasoning that reached it, unless the reader has to weigh it themselves.
|
|
53
|
+
- Why you did not do something. Say what you did; add the reason only if the reader must decide whether to do it.
|
|
54
|
+
- Incidental findings from your own process. Report one only when the reader must act on it, and give it one line.
|
|
55
|
+
- Any sentence that restates a fact already stated in a heading, a list, or an earlier line.
|
|
56
|
+
|
|
57
|
+
When you have more than two facts of the same kind, use a list or a table. Prose paragraphs hide facts; rows expose them.
|
|
58
|
+
|
|
59
|
+
# No contrast framing
|
|
60
|
+
|
|
61
|
+
Write the claim. Never prop it up against what it is not.
|
|
38
62
|
|
|
39
|
-
|
|
63
|
+
The banned shape is a claim paired with a rejected alternative, in any wording:
|
|
40
64
|
|
|
41
|
-
|
|
65
|
+
| Banned | Write instead |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Verified against the remote, not just locally | Verified against the remote |
|
|
68
|
+
| This is a design flaw, not a typo | This is a design flaw |
|
|
69
|
+
| Not a copy of the shared script, but an ad |
|
|
70
|
+
| Rather than patching the caller, the fix moves into the helper | The fix moves into the helper |
|
|
71
|
+
| Instead of three passes, it runs one | It runs one pass |
|
|
72
|
+
| It is not only faster; it is correct | It is correct and faster |
|
|
73
|
+
| This is less a bug than a missing feature
|
|
74
|
+
| Let me read the log rather than guessing | Reading the log. |
|
|
75
|
+
| I'll patch the helper instead of the caller | Patching the helper. |
|
|
42
76
|
|
|
43
|
-
|
|
77
|
+
Every wording of the shape is banned, including `X, not Y`, `not Y but X`, `rather than Y, X`, `instead of Y, X`, `X over Y`, `not just X — Y`, `less X than Y`, and a negated sentence followed by its po
|
|
78
|
+
──── (152 lines hidden) ─────────────────────────────────────────────────────────────────────────────────────────────
|
|
79
|
+
the name.
|
|
44
80
|
|
|
45
|
-
|
|
81
|
+
| Written on the day | Named for the subject |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `august_cert_failures.py` | `cert_rejections.py` |
|
|
84
|
+
| `fix_august_bug()` | `normalize_calendar_color()` |
|
|
85
|
+
| `AUGUST_REJECTION_CODES` | `REJECTION_CODE
|
|
86
|
+
| `test_august_failures` | `test_rejects_wrong_calendar_color` |
|
|
87
|
+
| `jira4821_validator.py` | `manifest_validator.py` |
|
|
88
|
+
| `q3_migration/` | `add_tenant_id_column/` |
|
|
89
|
+
| `v2_client.py` | `retrying_client.py` |
|
|
90
|
+
| `legacy_export.py` | `csv_export.py` |
|
|
91
|
+
| `temp_fix.py` | `unicode_path_workaround.p
|
|
92
|
+
| "Fix August cert failures" | "Fix calendar color mismatch in cert export" |
|
|
46
93
|
|
|
47
|
-
|
|
94
|
+
A branch name is a name. It carries no date,ither. Someone reads it to decide whether to check the branch out, so it has to say what the work does.
|
|
48
95
|
|
|
49
|
-
|
|
96
|
+
| Written on the day | Named for the subject |
|
|
97
|
+
|---|---|
|
|
98
|
+
| `fix/cert-2026-08-b3-calendar-widget-color` | `fix-calendar-widget-color` |
|
|
99
|
+
| `parse-rejection-emails-cert-2026-08-b3` |
|
|
50
100
|
|
|
51
|
-
|
|
101
|
+
One prefix spreads. Once `august_` sits in one name, the next name matches it for consistency, and within a week the month reads as a real domain concept that forty places depend on. Rename it the hour you notice it.
|
|
52
102
|
|
|
53
|
-
|
|
103
|
+
# Change size
|
|
54
104
|
|
|
55
|
-
|
|
105
|
+
When planning work or opening a pull request, size the change first: one self-contained change, around 100 lines, with its tests. Read the small-changelists guide for the numbers, the allowed exceptions, and how to split.
|
|
56
106
|
|
|
57
|
-
|
|
107
|
+
## Execution and delegation
|
|
108
|
+
|
|
109
|
+
Delegate all task work to Tier 3 agents.
|
|
110
|
+
|
|
111
|
+
Draft a separate assignment for each agent. Each assignment must be clear, concise, tightly scoped, independently executable, and explicit about ownership, constraints, deliverables, and verification.
|
|
112
|
+
|
|
113
|
+
Run independent assignments in parallel. Keep overlapping work sequential. The primary agent coordinates agents, resolves dependencies, verifies results, and reports outcomes.
|
|
58
114
|
|
|
59
115
|
## Definitions
|
|
60
116
|
|
|
61
|
-
|
|
117
|
+
Tier 3 agent: A strong execution specialist that independently completes a bounded assignment, follows repository contracts, repairs routine failures, tests production behavior, and escalates decisions that materially affect architecture or scope.
|
|
118
|
+
|
|
119
|
+
Warm agent: An agent that has acted within the past 30 minutes. Reuse warm agents for related follow-up work.
|
|
120
|
+
|
|
121
|
+
# Corrections
|
|
122
|
+
|
|
123
|
+
Only correct an earlier statement when the ecode, conclusions, or decisions. Statecorrections plainly and briefly, then continue the task. For slips that change nothing for the user, make the fix and move on without noting it.
|
|
124
|
+
|
|
125
|
+
# Tool calls and output hygiene
|
|
126
|
+
|
|
127
|
+
When you use a tool, you may say a brief sentence first. If no tool can express what the user asked for, say so. Do not include internal or system XML tags in your response.
|
|
128
|
+
|
|
129
|
+
# Code review
|
|
130
|
+
|
|
131
|
+
When reviewing code, report everything you find. Filtering belongs in a separate pass.
|
|
132
|
+
|
|
133
|
+
<tone_preference>
|
|
134
|
+
Keep outputs reasonably concise.
|
|
135
|
+
</tone_preference>
|
package/agents/AGENTS.md
CHANGED
|
@@ -6,13 +6,8 @@ Agent definition files installed into `~/.claude/agents/` by `bin/install.mjs`.
|
|
|
6
6
|
|
|
7
7
|
| File | Agent name | Role |
|
|
8
8
|
|---|---|---|
|
|
9
|
-
| `caveman.md` | Caveman Agent | Terse voice and smallest-possible artifacts; questions premise before building |
|
|
10
|
-
| `clasp-deployment-orchestrator.md` | Clasp Deployment Orchestrator | Creates and deploys Google Apps Script projects with multiple files |
|
|
11
9
|
| `clean-coder.md` | Clean Coder | Primary code-writing agent; links the review contract, CODE_RULES, and enforcer; task-local discovery and gate-clean first writes |
|
|
12
|
-
| `code-advisor.md` | Code Advisor | Single-executor mid-run advisor (PLAN/CORRECTION/STOP as final text); distinct from session-advisor |
|
|
13
10
|
| `code-quality-agent.md` | Code Quality Agent | Multi-file code quality review across an entire diff or set of files |
|
|
14
|
-
| `deep-research.md` | Deep Research | Citation-grounded research with web search |
|
|
15
|
-
| `docs-agent.md` | Docs Agent | Documentation authoring and maintenance |
|
|
16
11
|
| `git-commit-crafter.md` | Git Commit Crafter | Stages changes, writes conventional commit messages, creates commits |
|
|
17
12
|
| `issue-tracker.md` | Issue Tracker | Primary handler for one GitHub issue action per spawn; loads the issue-tracker skill (plain-brief); returns issue numbers and URLs |
|
|
18
13
|
| `plan-packet-validator.md` | Plan Packet Validator | Fresh-context validator for workflow-generated plan packets under `docs/plans/` |
|
|
@@ -42,8 +42,8 @@ non-empty string, and a `name` equal to its file stem — a mapping that loads
|
|
|
42
42
|
but binds `description` to nothing, or names an agent the file does not,
|
|
43
43
|
registers a subagent the caller cannot spawn::
|
|
44
44
|
|
|
45
|
-
ok:
|
|
46
|
-
flag:
|
|
45
|
+
ok: clean-coder.md -> name: clean-coder
|
|
46
|
+
flag: clean-coder.md -> name: doc-manager <- wrong spawn id
|
|
47
47
|
flag: description: <- loads as None, loader needs text
|
|
48
48
|
|
|
49
49
|
Every check above is parametrized over the definitions that yield a
|
|
@@ -52,8 +52,8 @@ and leave the suite green while unreadable. The block is what the fence lines
|
|
|
52
52
|
delimit, so the file that opens no fence or never closes one is exactly the
|
|
53
53
|
broken file these checks exist to catch::
|
|
54
54
|
|
|
55
|
-
ok:
|
|
56
|
-
flag:
|
|
55
|
+
ok: clean-coder.md -> --- name/description --- <- block found
|
|
56
|
+
flag: clean-coder.md -> --- name/description <- no closing fence,
|
|
57
57
|
silently uncovered
|
|
58
58
|
|
|
59
59
|
`test_every_agent_definition_yields_a_frontmatter_block` holds that floor: it
|
|
@@ -218,8 +218,8 @@ def _agent_name_problem(parsed_frontmatter: object, expected_name: str) -> str |
|
|
|
218
218
|
A subagent registers under the name in its frontmatter, so a name that is
|
|
219
219
|
not the file stem is spawned by an id no caller uses::
|
|
220
220
|
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
clean-coder.md -> name: clean-coder -> ok: None
|
|
222
|
+
clean-coder.md -> name: doc-manager -> flag: wrong spawn id
|
|
223
223
|
|
|
224
224
|
Args:
|
|
225
225
|
parsed_frontmatter: Value `yaml.safe_load` produced for the block.
|
|
@@ -289,7 +289,7 @@ def test_agent_frontmatter_loads_as_a_yaml_mapping(
|
|
|
289
289
|
@pytest.mark.parametrize(
|
|
290
290
|
"agent_file_name",
|
|
291
291
|
(
|
|
292
|
-
"
|
|
292
|
+
"clean-coder.md",
|
|
293
293
|
"issue-tracker.md",
|
|
294
294
|
"skill-writer-agent.md",
|
|
295
295
|
),
|
package/bin/install.test.mjs
CHANGED
|
@@ -1672,15 +1672,15 @@ test('copyTree copies AGENTS.md with agent definitions', () => {
|
|
|
1672
1672
|
const destinationRoot = mkdtempSync(join(tmpdir(), 'cdev-copy-agents-destination-'));
|
|
1673
1673
|
try {
|
|
1674
1674
|
writeFileSync(join(sourceRoot, 'AGENTS.md'), '# Shared guidance\n');
|
|
1675
|
-
const agentDefinitionPath = join(sourceRoot, '
|
|
1675
|
+
const agentDefinitionPath = join(sourceRoot, 'clean-coder.md');
|
|
1676
1676
|
writeFileSync(
|
|
1677
1677
|
agentDefinitionPath,
|
|
1678
|
-
'---\nname:
|
|
1678
|
+
'---\nname: clean-coder\ndescription: fixture agent\n---\n',
|
|
1679
1679
|
);
|
|
1680
1680
|
|
|
1681
1681
|
const copyStats = copyTree(sourceRoot, destinationRoot);
|
|
1682
1682
|
const copiedAgentsPath = join(destinationRoot, 'AGENTS.md');
|
|
1683
|
-
const copiedAgentPath = join(destinationRoot, '
|
|
1683
|
+
const copiedAgentPath = join(destinationRoot, 'clean-coder.md');
|
|
1684
1684
|
|
|
1685
1685
|
assert.equal(existsSync(copiedAgentsPath), true, 'the canonical instructions install');
|
|
1686
1686
|
assert.equal(existsSync(copiedAgentPath), true, 'the real agent definition installs');
|
package/commands/AGENTS.md
CHANGED
|
@@ -6,17 +6,7 @@ Slash-command definitions installed into `~/.claude/commands/` by `bin/install.m
|
|
|
6
6
|
|
|
7
7
|
| File | Command | What it does |
|
|
8
8
|
|---|---|---|
|
|
9
|
-
| `commit.md` | `/commit` | Commits and pushes changes to GitHub |
|
|
10
|
-
| `docupdate.md` | `/docupdate` | Updates documentation to match current code state |
|
|
11
|
-
| `hook-log-extract.md` | `/hook-log-extract` | Extracts and formats hook log entries for a session |
|
|
12
|
-
| `hook-log-init.md` | `/hook-log-init` | Initializes the Neon Postgres schema that backs the hook-log extractor (one-time per machine) |
|
|
13
|
-
| `implement.md` | `/implement` | Provides full implementation context to a right-sized engineer in XML format |
|
|
14
|
-
| `plan.md` | `/plan` | Plans a feature through the `anthropic-plan` skill and workflow |
|
|
15
|
-
| `pr-comments.md` | `/pr-comments` | Fetches and formats PR review comments for response |
|
|
16
|
-
| `review-plan.md` | `/review-plan` | Reviews the current plan packet against code standards |
|
|
17
|
-
| `right-size.md` | `/right-size` | Checks an implementation against the Right-Sized Engineering rules |
|
|
18
9
|
| `sr-loop.md` | `/sr-loop` | Runs the converging cleanup loop: /simplify passes until clean, then a code-review fix pass |
|
|
19
|
-
| `sum.md` | `/sum` | Generates a formatted session summary for quick pickup in a new session |
|
|
20
10
|
|
|
21
11
|
## Format
|
|
22
12
|
|
|
@@ -47,7 +47,7 @@ TABLE_WITH_SLASH_COMMAND_AND_SUBDIR = (
|
|
|
47
47
|
"# example\n\n"
|
|
48
48
|
"| Entry | Description |\n"
|
|
49
49
|
"|---|---|\n"
|
|
50
|
-
"| `/
|
|
50
|
+
"| `/sr-loop` | Slash command |\n"
|
|
51
51
|
"| `scripts/` | A subdirectory |\n"
|
|
52
52
|
"| Plain prose, no backticks | Not a file |\n"
|
|
53
53
|
)
|
|
@@ -41,3 +41,35 @@ The `blocked_commands` view filters to `outcome = 'blocked'`.
|
|
|
41
41
|
- Extractor and Stop wrapper mains are disabled and exit 0 with no work.
|
|
42
42
|
- Constants for the extractor (table name, offset state file, timeout) live in `hooks_constants/hook_log_extractor_constants.py`.
|
|
43
43
|
- Tests run with `python -m pytest diagnostic/test_hook_log_*.py`.
|
|
44
|
+
|
|
45
|
+
## Schema init
|
|
46
|
+
|
|
47
|
+
Run `hook_log_init.py` once per machine, or after rotating the Neon project.
|
|
48
|
+
|
|
49
|
+
Prerequisites: Bitwarden Secrets Manager CLI (`bws`) on PATH; a machine-account
|
|
50
|
+
token in `BWS_ACCESS_TOKEN` for the user environment (`setx` on Windows, shell
|
|
51
|
+
profile on macOS/Linux); Neon connection string stored as
|
|
52
|
+
`NEON_HOOK_LOGS_DATABASE_URL`; Python deps from `requirements-hook-logs.txt`.
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
bws run -- python packages/claude-dev-env/hooks/diagnostic/hook_log_init.py
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`bws run` strips `BWS_ACCESS_TOKEN` from the child environment so the Python
|
|
59
|
+
process never sees it. The script verifies `NEON_HOOK_LOGS_DATABASE_URL`,
|
|
60
|
+
connects with a 5-second timeout, applies `schema.sql` with idempotent DDL,
|
|
61
|
+
runs a sentinel insert/select/delete round-trip, and prints the Neon host,
|
|
62
|
+
table name, and row count.
|
|
63
|
+
|
|
64
|
+
## Operator CLI flags
|
|
65
|
+
|
|
66
|
+
`hook_log_extractor.py` and `hook_log_stop_wrapper.py` mains exit 0 with no work.
|
|
67
|
+
The extractor body still documents these flags for a re-enable path:
|
|
68
|
+
|
|
69
|
+
- default / `--incremental`: resume from `~/.claude/logs/hooks/.state/offsets.json`
|
|
70
|
+
- `--full-rebuild`: clear offsets, truncate `hook_events`, re-read every JSONL
|
|
71
|
+
- `--summary`: print the top-10 blockers of the last 24 hours
|
|
72
|
+
- `--query <name>`: run `queries/<name>.sql` (`top_blockers_overall`,
|
|
73
|
+
`top_blockers_last_24_hours`, `blocks_last_7_days`, `blocks_by_category`,
|
|
74
|
+
`blocks_by_tool`, `block_details_for_hook`)
|
|
75
|
+
|
|
@@ -66,7 +66,7 @@ def verify_environment_variables() -> list[str]:
|
|
|
66
66
|
child process invoked via ``bws run -- python hook_log_init.py``
|
|
67
67
|
would therefore always fail even when the machine is configured
|
|
68
68
|
correctly. The one-time ``setx BWS_ACCESS_TOKEN`` prerequisite is
|
|
69
|
-
documented in ``packages/claude-dev-env/
|
|
69
|
+
documented in ``packages/claude-dev-env/hooks/diagnostic/AGENTS.md``.
|
|
70
70
|
"""
|
|
71
71
|
all_missing_variable_names: list[str] = []
|
|
72
72
|
raw_database_url_value = os.environ.get(NEON_DATABASE_URL_ENVIRONMENT_VARIABLE)
|
|
@@ -172,7 +172,7 @@ def _print_missing_environment_variables(all_missing_variable_names: list[str])
|
|
|
172
172
|
|
|
173
173
|
|
|
174
174
|
def main() -> int:
|
|
175
|
-
"""
|
|
175
|
+
"""CLI entry for one-time Neon schema init."""
|
|
176
176
|
all_missing_variable_names = verify_environment_variables()
|
|
177
177
|
if all_missing_variable_names:
|
|
178
178
|
_print_missing_environment_variables(all_missing_variable_names)
|
package/output-styles/AGENTS.md
CHANGED
|
@@ -4,7 +4,7 @@ Output-style instruction files installed into `~/.claude/output-styles/` by `bin
|
|
|
4
4
|
|
|
5
5
|
## Files
|
|
6
6
|
|
|
7
|
-
No output-style instruction files ship in this directory.
|
|
7
|
+
No output-style instruction files ship in this directory.
|
|
8
8
|
|
|
9
9
|
## Format
|
|
10
10
|
|
package/package.json
CHANGED
|
@@ -32,7 +32,7 @@ def test_inventory_includes_shipped_skill_and_agent_names() -> None:
|
|
|
32
32
|
|
|
33
33
|
def test_strip_inert_fenced_blocks_drops_historical_examples() -> None:
|
|
34
34
|
markdown = (
|
|
35
|
-
"Use /
|
|
35
|
+
"Use /sr-loop for cleanup.\n"
|
|
36
36
|
"```historical\n"
|
|
37
37
|
"Use /qbug for bugs.\n"
|
|
38
38
|
"```\n"
|
|
@@ -40,7 +40,7 @@ def test_strip_inert_fenced_blocks_drops_historical_examples() -> None:
|
|
|
40
40
|
)
|
|
41
41
|
stripped = strip_inert_fenced_blocks(markdown)
|
|
42
42
|
assert "/qbug" not in stripped
|
|
43
|
-
assert "/
|
|
43
|
+
assert "/sr-loop" in stripped
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
def test_extract_active_capability_names_finds_slash_and_backticks() -> None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# anthropic-plan
|
|
2
2
|
|
|
3
|
-
**Trigger:** `/anthropic-plan`,
|
|
3
|
+
**Trigger:** `/anthropic-plan`, "plan this first", "think before coding", "make a plan", "scope this out", "don't code yet", and non-trivial requests that need source-grounded design before build work.
|
|
4
4
|
|
|
5
5
|
Creates a repo-local plan packet under `docs/plans/<slug>/` by running the `plan-packet.mjs` workflow. The skill first drafts a short starting plan and gets the user's approval in plan mode (`EnterPlanMode` / `ExitPlanMode`); on approval it runs the workflow. The packet holds context, spec, implementation steps, validation, and a handoff prompt for the build agent. The skill stops before any production code changes.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: anthropic-plan
|
|
3
|
-
description: Workflow-backed implementation planning that creates a deep repo-local packet under docs/plans/<slug>/ before any code changes. Use for /anthropic-plan,
|
|
3
|
+
description: Workflow-backed implementation planning that creates a deep repo-local packet under docs/plans/<slug>/ before any code changes. Use for /anthropic-plan, "plan this first", "think before coding", "make a plan", "scope this out", "don't code yet", and non-trivial implementation requests that need source-grounded design, TDD steps, and validator approval before build work.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Anthropic Plan
|
|
@@ -9,6 +9,7 @@ SKILL_DIRECTORY = Path(__file__).resolve().parent
|
|
|
9
9
|
CLAUDE_DIRECTORY = SKILL_DIRECTORY.parent.parent
|
|
10
10
|
SKILL_PATH = SKILL_DIRECTORY / "SKILL.md"
|
|
11
11
|
PLAN_COMMAND_PATH = CLAUDE_DIRECTORY / "commands" / "plan.md"
|
|
12
|
+
SR_LOOP_COMMAND_PATH = CLAUDE_DIRECTORY / "commands" / "sr-loop.md"
|
|
12
13
|
VALIDATOR_AGENT_PATH = CLAUDE_DIRECTORY / "agents" / "plan-packet-validator.md"
|
|
13
14
|
|
|
14
15
|
|
|
@@ -57,13 +58,14 @@ def test_skill_names_validator_and_stop_before_code_rules() -> None:
|
|
|
57
58
|
assert "stop before implementation" in skill_text.lower()
|
|
58
59
|
|
|
59
60
|
|
|
60
|
-
def
|
|
61
|
-
|
|
61
|
+
def test_skill_keeps_anthropic_plan_slash_without_plan_command() -> None:
|
|
62
|
+
skill_text = SKILL_PATH.read_text(encoding="utf-8")
|
|
62
63
|
|
|
63
|
-
assert "anthropic-plan" in
|
|
64
|
-
assert
|
|
65
|
-
assert
|
|
66
|
-
assert "plan
|
|
64
|
+
assert "/anthropic-plan" in skill_text
|
|
65
|
+
assert not PLAN_COMMAND_PATH.exists()
|
|
66
|
+
assert SR_LOOP_COMMAND_PATH.exists()
|
|
67
|
+
assert "write-plan" not in skill_text
|
|
68
|
+
assert "plan-executor" not in skill_text
|
|
67
69
|
|
|
68
70
|
|
|
69
71
|
def test_validator_agent_exists_and_is_read_only() -> None:
|
|
@@ -45,7 +45,7 @@ Follow `workflows/sandbox.md`. In short:
|
|
|
45
45
|
|
|
46
46
|
### Phase 2 — Promotion
|
|
47
47
|
|
|
48
|
-
Run only in the normal, fully-hooked session — never inside the sandbox. Follow `workflows/promotion.md`, which drives the clean-room task seeds in `reference/promotion-tasks.md`: fresh branch off live `origin/main`, POC content as an uncommitted diff, cleanup and privacy sweep, review and verification under the [review guide](../reviews/SKILL.md#review-workflow), then
|
|
48
|
+
Run only in the normal, fully-hooked session — never inside the sandbox. Follow `workflows/promotion.md`, which drives the clean-room task seeds in `reference/promotion-tasks.md`: fresh branch off live `origin/main`, POC content as an uncommitted diff, cleanup and privacy sweep, review and verification under the [review guide](../reviews/SKILL.md#review-workflow), then commit by hand per `git-workflow` and a draft PR handed to a PR-loop skill. State the two honest limitations from `reference/honest-limitations.md`.
|
|
49
49
|
|
|
50
50
|
## Task seeding
|
|
51
51
|
|
|
@@ -58,7 +58,6 @@ At the start of Phase 2, register every item in `reference/promotion-tasks.md` a
|
|
|
58
58
|
| `fresh-branch` | Sandbox step 1; Promotion step 2 | isolated worktree JSON (`worktree_path`, `base_commit`, `repo_root`) | Refuse — see refusal cases |
|
|
59
59
|
| `privacy-hygiene` | Promotion step 5 | personal-data and secret sweep of the diff | Warn; do a manual review before continuing |
|
|
60
60
|
| [Review guide](../reviews/SKILL.md#review-workflow) | Promotion step 6 | review and verification of the real diff | Stop and report the incomplete promotion |
|
|
61
|
-
| `/commit` (command) | Promotion step 7 | conventional commit + push | Commit and push by hand per `git-workflow` |
|
|
62
61
|
| `autoconverge` (default; `pr-converge` or `bugteam` as alternatives) | Promotion step 9 | the PR converged to ready | Stop after the draft PR; tell the user to converge manually |
|
|
63
62
|
|
|
64
63
|
## Degree of freedom
|
|
@@ -16,7 +16,7 @@ Promotion runs in the **normal, fully-hooked session** — never inside the `--b
|
|
|
16
16
|
|
|
17
17
|
6. **Review and verify the real diff.** Apply the [review guide](../../reviews/SKILL.md#review-workflow). Evidence: the checks run and each required finding repaired. Do not rely on sandbox testing as promotion evidence.
|
|
18
18
|
|
|
19
|
-
7. **Commit and open a draft PR.** After the review and verification record is complete,
|
|
19
|
+
7. **Commit and open a draft PR.** After the review and verification record is complete, commit by hand per the `git-workflow` rule, then open a draft PR. Evidence: the commit hash and the PR URL.
|
|
20
20
|
|
|
21
21
|
8. **State the honest limitations.** Post the two statements from `reference/honest-limitations.md` — write-time rules never ran; TDD ordering waived — in the PR body or to the user. Evidence: the text was included.
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ The task seeds carry the full ordered detail. The shape:
|
|
|
16
16
|
4. **Cleanup.** Remove scratch files, debug dumps, and temp helpers the POC created (`cleanup-temp-files` rule).
|
|
17
17
|
5. **Privacy sweep** via `privacy-hygiene` over the diff.
|
|
18
18
|
6. **Review and verify** the real diff against the [review guide](../../reviews/SKILL.md#review-workflow). Record the checks run and repair every required finding.
|
|
19
|
-
7. **Commit and PR.** After the review and verification record is complete,
|
|
19
|
+
7. **Commit and PR.** After the review and verification record is complete, commit by hand per the `git-workflow` rule, then open a draft PR.
|
|
20
20
|
8. **State the honest limitations** from `reference/honest-limitations.md` in the PR body or to the user.
|
|
21
21
|
9. **Converge** by handing the PR to `autoconverge` by default; use `pr-converge` for paced ticks or `bugteam` for an open-loop audit.
|
|
22
22
|
|
package/agents/caveman.md
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: caveman
|
|
3
|
-
description: Trims noise from an artifact the main caller has already authored. Input is a draft (skill, doc, plan, response, README, prompt, PR description) — output is the same artifact with filler, hedging, preamble, recap, and restatement removed. Preserves structure, technical substance, frontmatter, and anything load-bearing. Does NOT redesign, restructure, or overrule the caller's scope decisions.
|
|
4
|
-
color: red
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
You are the caveman. You trim. You do not build. You do not restructure.
|
|
8
|
-
|
|
9
|
-
## What you are
|
|
10
|
-
|
|
11
|
-
A noise filter. The main caller has already decided *what* the artifact is, *how* it is structured, and *what lives in it*. Your job is to strip fluff off that artifact without touching the bones.
|
|
12
|
-
|
|
13
|
-
You are downstream of design decisions, not upstream.
|
|
14
|
-
|
|
15
|
-
## What you trim
|
|
16
|
-
|
|
17
|
-
| Noise type | Example |
|
|
18
|
-
|---|---|
|
|
19
|
-
| Preamble / recap | "As discussed above, this skill will..." |
|
|
20
|
-
| Hedging | "This might, in some cases, potentially..." |
|
|
21
|
-
| Filler transitions | "Now, moving on to..." / "It's worth noting that..." |
|
|
22
|
-
| Restatement | the same point made twice in different words |
|
|
23
|
-
| Empty future-proofing | parameters, sections, or fields with no current consumer |
|
|
24
|
-
| Dead examples | examples that duplicate another example without adding coverage |
|
|
25
|
-
| Pleasantries | "Hope this helps." / "Feel free to..." |
|
|
26
|
-
| Vague qualifiers | "various", "several", "a number of" — replace with the actual count or cut |
|
|
27
|
-
|
|
28
|
-
Rewrite prose into the caveman pattern only where it does not change meaning: `[thing] [action] [reason]. [next step].`
|
|
29
|
-
|
|
30
|
-
## What you do NOT touch
|
|
31
|
-
|
|
32
|
-
- **Structure the caller chose.** Four sections in, four sections out. Do not collapse or merge.
|
|
33
|
-
- **Frontmatter fields.** All fields stay. Tighten values if verbose; do not drop fields.
|
|
34
|
-
- **Technical substance.** Code, commands, paths, URLs, errors, JSON, schema — unchanged.
|
|
35
|
-
- **Trigger words / activation phrases.** Load-bearing for skill matching.
|
|
36
|
-
- **Safety / escape-hatch language.** Warnings about destructive ops, irreversible actions, credentials, money, production systems — preserve verbatim.
|
|
37
|
-
- **Caller-flagged content.** If the caller said "keep X verbatim", X is untouchable.
|
|
38
|
-
- **Counts and specifics.** Numbers, thresholds, version strings, identifiers — unchanged.
|
|
39
|
-
- **Register in examples and docstrings.** Unless caller asked for caveman voice throughout, keep the original register of user-facing copy.
|
|
40
|
-
|
|
41
|
-
## What you do NOT decide
|
|
42
|
-
|
|
43
|
-
You do not tell the caller:
|
|
44
|
-
- "Use the existing tool instead" — design call, caller's call.
|
|
45
|
-
- "Make this one file instead of three" — structure call, caller's call.
|
|
46
|
-
- "Drop this section" — scope call, caller's call.
|
|
47
|
-
- "Add tests" / "remove tests" — scope call, caller's call.
|
|
48
|
-
|
|
49
|
-
If you suspect a section is pure noise, flag it in the report. Leave it in place unless the caller told you to remove it.
|
|
50
|
-
|
|
51
|
-
## Process
|
|
52
|
-
|
|
53
|
-
1. Read the artifact end to end before touching it.
|
|
54
|
-
2. Mark the bones — frontmatter, structure, technical substance, trigger words, safety language. Off-limits.
|
|
55
|
-
3. Trim noise per the table above.
|
|
56
|
-
4. Return the trimmed artifact in the caller's original file format.
|
|
57
|
-
|
|
58
|
-
## Output shape
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
trimmed: <path or artifact name>
|
|
62
|
-
removed: <bullets — noise categories cut, with rough line counts>
|
|
63
|
-
preserved-verbatim: <what you refused to touch and why>
|
|
64
|
-
flagged: <content you suspect is noise but left in place for caller to decide>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
No recap of the artifact itself. Caller has it.
|
|
68
|
-
|
|
69
|
-
## Escape hatch
|
|
70
|
-
|
|
71
|
-
If trimming would drop a safety warning, remove an irreversible-action caveat, collapse a distinction the caller made deliberately, or if you are unsure whether content is load-bearing — leave it in place and flag it. Ask before cutting.
|
|
72
|
-
|
|
73
|
-
Terse is for noise, not for substance.
|