claude-dev-env 8.15.0 → 8.15.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/agents/test_agent_frontmatter.py +0 -72
- package/.agents/agents-archived/code-quality-agent.md +16 -16
- package/.agents/skills/_shared/end-of-run-gotcha-recommendations.md +5 -21
- package/.agents/skills/e-code-review/SKILL.md +1 -3
- package/.agents/skills/e-simplify/SKILL.md +6 -6
- package/.agents/skills/eli5/SKILL.md +4 -14
- package/.agents/skills/eli5/reference/task-seeds.md +3 -4
- package/.agents/skills/everything-search/SKILL.md +2 -2
- package/.agents/skills/fresh-branch/SKILL.md +2 -3
- package/.agents/skills/grok-spawn/SKILL.md +3 -8
- package/.agents/skills/issue-tracker/SKILL.md +4 -6
- package/.agents/skills/orchestrator-refresh/SKILL.md +7 -7
- package/.agents/skills/plugin-eval-standalone-skill/SKILL.md +3 -3
- package/.agents/skills/privacy-hygiene/SKILL.md +6 -10
- package/.agents/skills/privacy-hygiene/reference/sweep-procedure.md +1 -1
- package/.agents/skills/pull-request/SKILL.md +11 -14
- package/.agents/skills/pull-request/reference/publication-tasks.md +2 -4
- package/.agents/skills/recovering-codex-startup/SKILL.md +3 -6
- package/.agents/skills/recovering-codex-startup/reference/task-seeds.md +1 -1
- package/.agents/skills/repairing-hook-boundaries/SKILL.md +4 -7
- package/.agents/skills/repairing-hook-boundaries/reference/task-seeds.md +1 -2
- package/.agents/skills/syncing-submodules/SKILL.md +7 -17
- package/.agents/skills/syncing-submodules/reference/run-tasks.md +1 -1
- package/.agents/skills/task-build/SKILL.md +1 -1
- package/.agents/skills/task-build/reference/tool-routing.md +1 -1
- package/.agents/skills/team-advisor/SKILL.md +2 -4
- package/.agents/skills/usage-pause/SKILL.md +1 -1
- package/.agents/skills/windows-scheduled-task/SKILL.md +1 -1
- package/AGENTS.md +1 -1
- package/_shared/advisor/advisor-protocol.md +4 -4
- package/_shared/advisor/reference/consult-format.md +1 -1
- package/_shared/advisor/reference/identity.md +2 -2
- package/_shared/advisor/reference/warm-up.md +1 -1
- package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +1 -1
- package/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md +2 -16
- package/bin/install.mjs +1 -0
- package/bin/install.prompt-context.test.mjs +7 -3
- package/bin/install.test.mjs +3 -2
- package/commands/sr-loop.md +2 -2
- package/docs/CODE_RULES.md +2 -2
- package/docs/DJANGO_PATTERNS.md +3 -3
- package/docs/REACT_PATTERNS.md +6 -6
- package/docs/TEST_QUALITY.md +10 -16
- package/docs/agent-spawn-protocol.md +4 -4
- package/docs/codex-compatibility.md +4 -33
- package/docs/references/team-advisor-skill.md +0 -1
- package/docs/worker-completion-gate.md +0 -1
- package/hooks/advisory/migration_safety_advisor.py +3 -2
- package/hooks/advisory/refactor_guard.py +3 -3
- package/hooks/hooks.json +1 -1
- package/hooks/hooks_constants/issue_tracker_session_starter_constants.py +1 -2
- package/hooks/hooks_constants/orchestrator_auto_starter_constants.py +1 -2
- package/package.json +1 -1
- package/rules/explore-thoroughly.md +0 -1
- package/rules/filesystem-search.md +1 -1
- package/rules/git-workflow.md +5 -5
- package/rules/long-horizon-autonomy.md +1 -5
- package/rules/re-stage-before-commit.md +0 -2
- package/rules/shell-invocation.md +1 -1
- package/scripts/dev_env_scripts_constants/grok_worker_constants.py +8 -2
- package/scripts/policy_lint/config/constants.py +1 -0
- package/scripts/policy_lint/engine.py +5 -2
- package/scripts/repository_checks/config/constants.py +1 -1
- package/scripts/spawn_grok_batch.py +12 -1
- package/scripts/test_spawn_grok_batch.py +22 -0
- package/scripts/tests/test_banned_prose_words.py +1 -1
- package/scripts/tests/test_policy_lint_rules_archive.py +16 -0
- package/scripts/tests/test_policy_lint_rules_engine.py +2 -2
- package/scripts/tests/test_rules.py +9 -9
- package/system-prompts/software-engineer.xml +15 -30
- package/audit-rubrics/audit-categories.json +0 -700
- package/audit-rubrics/category_rubrics/category-a-api-contracts.md +0 -90
- package/audit-rubrics/category_rubrics/category-b-selector-engine-compat.md +0 -36
- package/audit-rubrics/category_rubrics/category-c-resource-cleanup.md +0 -35
- package/audit-rubrics/category_rubrics/category-d-scoping-and-ordering.md +0 -35
- package/audit-rubrics/category_rubrics/category-e-dead-code.md +0 -40
- package/audit-rubrics/category_rubrics/category-f-silent-failures.md +0 -41
- package/audit-rubrics/category_rubrics/category-g-bounds-and-overflow.md +0 -38
- package/audit-rubrics/category_rubrics/category-h-security-boundaries.md +0 -40
- package/audit-rubrics/category_rubrics/category-i-concurrency.md +0 -38
- package/audit-rubrics/category_rubrics/category-j-code-rules-compliance.md +0 -59
- package/audit-rubrics/category_rubrics/category-k-codebase-conflicts.md +0 -66
- package/audit-rubrics/category_rubrics/category-l-behavior-equivalence.md +0 -48
- package/audit-rubrics/category_rubrics/category-m-producer-consumer-cardinality.md +0 -44
- package/audit-rubrics/category_rubrics/category-n-test-name-scenario-verifier.md +0 -54
- package/audit-rubrics/category_rubrics/category-p-name-vs-behavior-contract.md +0 -59
- package/audit-rubrics/category_rubrics/category-q-cross-surface-claims.md +0 -46
- package/audit-rubrics/prompts/category-a-api-contracts.md +0 -407
- package/audit-rubrics/prompts/category-b-selector-engine-compat.md +0 -401
- package/audit-rubrics/prompts/category-c-resource-cleanup.md +0 -420
- package/audit-rubrics/prompts/category-d-scoping-and-ordering.md +0 -414
- package/audit-rubrics/prompts/category-e-dead-code.md +0 -434
- package/audit-rubrics/prompts/category-f-silent-failures.md +0 -432
- package/audit-rubrics/prompts/category-g-bounds-and-overflow.md +0 -383
- package/audit-rubrics/prompts/category-h-security-boundaries.md +0 -423
- package/audit-rubrics/prompts/category-i-concurrency.md +0 -429
- package/audit-rubrics/prompts/category-j-code-rules-compliance.md +0 -458
- package/audit-rubrics/prompts/category-k-codebase-conflicts.md +0 -338
- package/audit-rubrics/prompts/category-l-behavior-equivalence.md +0 -131
- package/audit-rubrics/prompts/category-m-producer-consumer-cardinality.md +0 -129
- package/audit-rubrics/prompts/category-n-test-name-scenario-verifier.md +0 -139
- package/audit-rubrics/prompts/category-p-name-vs-behavior-contract.md +0 -89
- package/audit-rubrics/prompts/category-q-cross-surface-claims.md +0 -51
- package/hooks/hooks_constants/style_reminder_prompt_constants.py +0 -9
- package/hooks/session/style_reminder_prompt.py +0 -55
- package/hooks/session/test_style_reminder_prompt.py +0 -86
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: recovering-codex-startup
|
|
3
3
|
description: >-
|
|
4
|
-
Diagnose Windows Codex desktop/CLI startup with fresh read-only process evidence.
|
|
4
|
+
Diagnose Windows Codex desktop/CLI startup with fresh read-only process evidence. Use when Codex will not start on Windows, or a Codex process looks stuck, stale, or suspended.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Recovering Codex startup
|
|
@@ -17,7 +17,6 @@ Report only what that listing supports. Do not change process or installation st
|
|
|
17
17
|
- Report the executable path, process name, start time, and owner. Mark unavailable fields as unavailable.
|
|
18
18
|
- Do not inspect other applications, process trees, or change process state.
|
|
19
19
|
- Do not call a process stale or suspended without fresh supporting evidence.
|
|
20
|
-
- Route installation issues to `/run-claude-dev-env`.
|
|
21
20
|
- Run `/privacy-hygiene` before durable output.
|
|
22
21
|
|
|
23
22
|
## When this applies
|
|
@@ -29,14 +28,13 @@ For a non-Windows run, return exactly:
|
|
|
29
28
|
|
|
30
29
|
## Process
|
|
31
30
|
|
|
32
|
-
1.
|
|
31
|
+
1. When the session exposes a task tool, register the tasks in `reference/task-seeds.md`.
|
|
33
32
|
2. Read `../../../rules/verify-runtime-state.md`.
|
|
34
33
|
3. Confirm Windows and collect a fresh timestamp.
|
|
35
34
|
4. Use read-only Windows tools to inspect Codex processes only.
|
|
36
35
|
5. Record process name, executable path, start time, and owner.
|
|
37
36
|
6. Separate observation from diagnosis and state when no match exists.
|
|
38
|
-
7.
|
|
39
|
-
8. Run `/privacy-hygiene` before saving or publishing a report.
|
|
37
|
+
7. Run `/privacy-hygiene` before saving or publishing a report.
|
|
40
38
|
|
|
41
39
|
Do not change process or installation state. A human must authorize any later
|
|
42
40
|
process or installation change.
|
|
@@ -45,7 +43,6 @@ process or installation change.
|
|
|
45
43
|
|
|
46
44
|
| Skill | Use | Produces |
|
|
47
45
|
| --- | --- | --- |
|
|
48
|
-
| `/run-claude-dev-env` | Installation evidence | Installation diagnosis |
|
|
49
46
|
| `/privacy-hygiene` | Before durable output | Privacy-reviewed output |
|
|
50
47
|
|
|
51
48
|
## Files
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
2. Read `../../../rules/verify-runtime-state.md`.
|
|
3
3
|
3. Collect fresh, read-only Codex process evidence and a timestamp.
|
|
4
4
|
4. Record the exact path, name, start time, and owner.
|
|
5
|
-
5. Report observation separately from diagnosis
|
|
5
|
+
5. Report observation separately from diagnosis.
|
|
6
6
|
6. Run `/privacy-hygiene` before durable output and record that future action needs human authorization.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: repairing-hook-boundaries
|
|
3
3
|
description: >-
|
|
4
|
-
Repair Claude and Codex hook failures at their first failing boundary.
|
|
4
|
+
Repair Claude and Codex hook failures at their first failing boundary. Use when a hook fails, blocks, times out, or emits invalid output, including a registration, launcher, import path, payload, or exit status fault.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Repairing hook boundaries
|
|
@@ -17,7 +17,6 @@ output envelope, and exit status as separate boundaries.
|
|
|
17
17
|
- A correct source entry does not prove the installed configuration matches it.
|
|
18
18
|
- A valid launcher can receive an invalid payload or emit an invalid envelope.
|
|
19
19
|
- State exact source, installed, and repository-root paths for each claim.
|
|
20
|
-
- Route installer-only work to `/run-claude-dev-env`.
|
|
21
20
|
- Get explicit approval before changing live configuration.
|
|
22
21
|
- Run `/privacy-hygiene` before durable output.
|
|
23
22
|
- Reuse project validators. Do not copy their commands or implementation here.
|
|
@@ -31,20 +30,18 @@ For installer-only work, say: `Installer work with no hook-boundary failure belo
|
|
|
31
30
|
|
|
32
31
|
## Process
|
|
33
32
|
|
|
34
|
-
1.
|
|
33
|
+
1. When the session exposes a task tool, register the tasks in `reference/task-seeds.md`.
|
|
35
34
|
2. Record expected and observed behavior. Record exact source, installed, and repository-root paths.
|
|
36
35
|
3. Check each boundary in order and identify the first mismatch.
|
|
37
36
|
4. Repair only that boundary. Leave unrelated hooks and user settings unchanged.
|
|
38
37
|
5. Recheck the boundary and its direct consumer with existing project validators.
|
|
39
|
-
6.
|
|
40
|
-
7.
|
|
41
|
-
8. Run `/privacy-hygiene` before a durable report or publication.
|
|
38
|
+
6. Get explicit approval before a live configuration change.
|
|
39
|
+
7. Run `/privacy-hygiene` before a durable report or publication.
|
|
42
40
|
|
|
43
41
|
## Sub-skills
|
|
44
42
|
|
|
45
43
|
| Skill | Use | Produces |
|
|
46
44
|
| --- | --- | --- |
|
|
47
|
-
| `/run-claude-dev-env` | Packaging or install work | Install result |
|
|
48
45
|
| `/privacy-hygiene` | Durable-output privacy review | Privacy result |
|
|
49
46
|
|
|
50
47
|
## Files
|
|
@@ -3,5 +3,4 @@
|
|
|
3
3
|
3. Find the first failing hook boundary.
|
|
4
4
|
4. Repair only that boundary.
|
|
5
5
|
5. Recheck the boundary and direct consumer.
|
|
6
|
-
6.
|
|
7
|
-
7. Get live-change approval and run `/privacy-hygiene` before durable output.
|
|
6
|
+
6. Get live-change approval and run `/privacy-hygiene` before durable output.
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: syncing-submodules
|
|
3
3
|
description: >-
|
|
4
|
-
Records a submodule's current commit in its parent repository.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
sync superproject, update superproject pointer, parent repo submodule update,
|
|
8
|
-
finish submodule commit. Does not handle clone, checkout, update main,
|
|
4
|
+
Records a submodule's current commit in its parent repository. Use after a
|
|
5
|
+
commit inside a submodule when the parent repository or superproject should
|
|
6
|
+
record the new pointer. Does not handle clone, checkout, update main,
|
|
9
7
|
or ordinary commits.
|
|
10
8
|
---
|
|
11
9
|
|
|
@@ -22,7 +20,7 @@ A submodule commit changes the child repository first. Change the parent pointer
|
|
|
22
20
|
- `git diff --cached --quiet` uses exit 1 for a changed pointer. Any higher exit is a failure.
|
|
23
21
|
- The parent repository may already contain staged work. The path-only commit must leave it staged.
|
|
24
22
|
- A repository without a superproject is a successful `not_submodule` result.
|
|
25
|
-
-
|
|
23
|
+
- A failed parent commit returns a nonzero exit.
|
|
26
24
|
|
|
27
25
|
## When this applies
|
|
28
26
|
|
|
@@ -32,13 +30,13 @@ Refusals use the first matching line:
|
|
|
32
30
|
|
|
33
31
|
- Clone, initialize, or check out a submodule: `Use Git's submodule commands. This skill records an existing submodule commit in its parent.`
|
|
34
32
|
- Fast-forward `main`: `Use Git directly. This skill changes one parent submodule pointer.`
|
|
35
|
-
- Make an ordinary commit or push: `Use
|
|
33
|
+
- Make an ordinary commit or push: `Use Git directly. This skill commits only a parent submodule pointer.`
|
|
36
34
|
|
|
37
35
|
## Process
|
|
38
36
|
|
|
39
37
|
### Seed the run tasks
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
When the host exposes a task tool, register every item in `reference/run-tasks.md` as a session task and complete each one with an exit code, JSON field, or repository readback. Otherwise work the items in order.
|
|
42
40
|
|
|
43
41
|
### Run the command
|
|
44
42
|
|
|
@@ -57,9 +55,7 @@ The script writes one JSON object to standard output. Exit 0 permits `updated`,
|
|
|
57
55
|
- `updated`: report `parent_repository`, `submodule_path`, `commit`, and `parent_commit`.
|
|
58
56
|
- `unchanged`: report that the parent already records `commit`.
|
|
59
57
|
- `not_submodule`: report that no parent repository changed.
|
|
60
|
-
- `pull_request_url`:
|
|
61
|
-
|
|
62
|
-
If `/pr-title-description` is not installed, report `pull_request_url` and finish the successful sync.
|
|
58
|
+
- `pull_request_url`: report the open pull request URL after the sync result.
|
|
63
59
|
|
|
64
60
|
## Constraints
|
|
65
61
|
|
|
@@ -75,12 +71,6 @@ If `/pr-title-description` is not installed, report `pull_request_url` and finis
|
|
|
75
71
|
- No superproject: `status` is `not_submodule`; every parent and commit field is null.
|
|
76
72
|
- Failed stage: exit 1, `status` is `error`, and standard error starts with `syncing-submodules:`.
|
|
77
73
|
|
|
78
|
-
## Sub-skills
|
|
79
|
-
|
|
80
|
-
| Skill | When | Produces | Missing behavior |
|
|
81
|
-
|---|---|---|---|
|
|
82
|
-
| `/pr-title-description` | The result includes `pull_request_url` | A title and description based on the full pull request diff | Report the URL and keep the completed sync |
|
|
83
|
-
|
|
84
74
|
## File index
|
|
85
75
|
|
|
86
76
|
| File | Purpose |
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
- Fix any reported failure and rerun until the command exits 0.
|
|
7
7
|
- Read back the parent pointer and unrelated staged paths when the status is `updated`.
|
|
8
8
|
- Report the result fields.
|
|
9
|
-
-
|
|
9
|
+
- Report an open pull request URL.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-build
|
|
3
|
-
description: "Gather open session tasks and register them with the best available task or plan tool.
|
|
3
|
+
description: "Gather open session tasks and register them with the best available task or plan tool. Use when the user asks to capture, track, or list the session's open tasks."
|
|
4
4
|
argument-hint: "[optional: a list of tasks to capture, or omit to scan the session]"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -18,5 +18,5 @@ Do not invent a tool name. Tool availability means the callable tool is exposed
|
|
|
18
18
|
|
|
19
19
|
State the selected tool, the number of new items, the number already tracked, and the new task subjects. If the fallback path was used, name the unavailable preferred tools briefly.
|
|
20
20
|
|
|
21
|
-
4. **File ledger fallback
|
|
21
|
+
4. **File ledger fallback.** During an orchestrator run with no host task or plan tool, register work in the durable `grok_run_ledger` under the run-state directory so orchestration stays reconcilable across hosts.
|
|
22
22
|
|
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
name: team-advisor
|
|
3
3
|
description: >-
|
|
4
4
|
Bind one advisor, the built-in advisor tool or a warm `pstack:poteto-agent`, and
|
|
5
|
-
consult it before substantive work, completion, commits, or when stuck.
|
|
6
|
-
|
|
7
|
-
'team-advisor', 'team advisor', 'second opinion', 'consult the advisor',
|
|
8
|
-
'get an advisor', 'check my approach with an advisor'.
|
|
5
|
+
consult it before substantive work, completion, commits, or when stuck. Use
|
|
6
|
+
when the user asks for an advisor or a second opinion on the approach.
|
|
9
7
|
---
|
|
10
8
|
|
|
11
9
|
# Team Advisor
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: usage-pause
|
|
3
|
-
description: 5-hour usage window, agent
|
|
3
|
+
description: Pause work until the 5-hour usage window resets, keeping agent contexts warm through staged wakeups. Stops with a warning when the weekly limit is near its cap. Use when the user asks to pause for or wait out a usage limit.
|
|
4
4
|
argument-hint: "[reset time like 10:20pm | duration like 74m]"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: windows-scheduled-task
|
|
3
3
|
description: >-
|
|
4
|
-
Register a repeating headless Windows scheduled task from PowerShell, with endless repetition, an S4U or Interactive principal, absolute action paths, and a documented teardown.
|
|
4
|
+
Register a repeating headless Windows scheduled task from PowerShell, with endless repetition, an S4U or Interactive principal, absolute action paths, and a documented teardown. Use when creating, repairing, or removing a repeating Task Scheduler task, including a task that fails to register.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Windows scheduled task
|
package/AGENTS.md
CHANGED
|
@@ -65,7 +65,7 @@ On Codex: Astra is the in-session default. The `ADVISOR_ASTRA` flag is not requi
|
|
|
65
65
|
When `advisor` is in the session's tool list, the built-in advisor tool is the advisor. The user turns it on with `/advisor`, the `advisorModel` setting, or `--advisor`. Spawn nothing and call `advisor()` at each consult point. The tool forwards the whole transcript, so a consult needs no packet. Its reply is free text, so the four signal words do not apply; weigh it per `docs/references/advisor-tool.md` **How to treat advice**. It is a server tool, so hooks and the spawn-walk log do not see it. An Opus advisor returns an encrypted result that a log cannot read. When a readable record matters, use the warm agent below.
|
|
66
66
|
|
|
67
67
|
When `advisor` is not in the tool list, use the **Model floor** ladder below (Opus first, then Astra when Opus is out of usage).
|
|
68
|
-
Warm-up spawns `subagent_type:
|
|
68
|
+
Warm-up spawns `subagent_type: pstack:poteto-agent` at Opus via the Agent tool, with the advisor response contract in the charter; consults go through `SendMessage` to that warm agent. Astra uses the Codex helper.
|
|
69
69
|
Assemble and paste each executor's Advisor block per the **Advisor block** section.
|
|
70
70
|
|
|
71
71
|
### Codex host
|
|
@@ -90,8 +90,8 @@ Executors report to the orchestrating session; that session consults the bound a
|
|
|
90
90
|
The built-in advisor tool sits outside this ladder. Claude Code and the API accept it only when the advisor is at least as capable as the main model, and that check is its floor.
|
|
91
91
|
On Claude and ThirdParty the advisor ladder is `Opus` first, then Astra (flag-gated, Codex CLI) when Opus is out of usage.
|
|
92
92
|
On Codex the walk is Astra only, in-session.
|
|
93
|
-
|
|
94
|
-
Consumer `own_tier` is recorded on the spawn-walk log; it does not
|
|
93
|
+
`Sonnet` and `Haiku` are executor tiers only.
|
|
94
|
+
Consumer `own_tier` is recorded on the spawn-walk log; it does not change the advisor walk.
|
|
95
95
|
Tier names are canonical Title Case; the validator accepts any letter case and normalizes to Title Case.
|
|
96
96
|
Try binds top-down. Opus resolves to the short model alias in [`reference/cli-chain.md`](reference/cli-chain.md); Astra resolves through `resolve_codex_model_id("Astra")` to `gpt-6-astra`.
|
|
97
97
|
The advisor is created at `selected_tier`, the first ladder tier that binds.
|
|
@@ -107,7 +107,7 @@ The validator checks ladder shape only; host policy sits on top.
|
|
|
107
107
|
## Warm-up (once per session)
|
|
108
108
|
|
|
109
109
|
On a **Claude host** with `advisor` in the tool list, skip the warm-up; the built-in tool needs none.
|
|
110
|
-
On a **Claude host** without it, spawn `
|
|
110
|
+
On a **Claude host** without it, spawn `pstack:poteto-agent` at the Opus alias with the charter as its prompt. When Opus is out of usage and the Astra rung is open, bind Astra through the Codex helper instead.
|
|
111
111
|
Full spawn fields and the charter template: [`reference/warm-up.md`](reference/warm-up.md).
|
|
112
112
|
|
|
113
113
|
On a **Codex host**, spawn a native in-session Astra subagent with the same charter. Bind fields: [`reference/identity.md`](reference/identity.md) and [`reference/warm-up.md`](reference/warm-up.md).
|
|
@@ -39,5 +39,5 @@ Address a CORRECTION before treating the plan or the work as done, whether it na
|
|
|
39
39
|
|
|
40
40
|
`/team-advisor` is the skill that binds one warm advisor for the session that ran it. That lead session sends every consult. The bound advisor (`team-advisor-agent` on Claude) replies only to the lead session. If the lead session later spawns worker subagents, those workers do not consult the bound advisor, and the bound advisor does not reply to them. When the reply is STOP, or the bound advisor cannot be reached, the lead session tells the human. The lead session has no parent session to report to.
|
|
41
41
|
|
|
42
|
-
When the advisor becomes unreachable, report that to the session that owns its lifecycle ([`lifecycle.md`](lifecycle.md)); that session alone decides whether to respawn (Claude Agent, Codex native
|
|
42
|
+
When the advisor becomes unreachable, report that to the session that owns its lifecycle ([`lifecycle.md`](lifecycle.md)); that session alone decides whether to respawn (Claude Agent, Codex native Astra, or third-party CLI re-bind).
|
|
43
43
|
A third-party host that cannot re-bind follows the fail-closed rule in [`third-party-bind.md`](third-party-bind.md).
|
|
@@ -10,14 +10,14 @@ Call `resolve_session_identity` from `$HOME/.claude/_shared/advisor/scripts/tier
|
|
|
10
10
|
| Identity text | Host profile | Bind path |
|
|
11
11
|
|---|---|---|
|
|
12
12
|
| a `codex` token | Codex | In-session Astra spawn |
|
|
13
|
-
| a `claude` token | Claude | In-session Opus spawn of `
|
|
13
|
+
| a `claude` token | Claude | In-session Opus spawn of `pstack:poteto-agent` |
|
|
14
14
|
| any other identity | ThirdParty | Headless CLI chain |
|
|
15
15
|
|
|
16
16
|
When both `codex` and `claude` tokens appear, Codex wins. Empty text is ThirdParty.
|
|
17
17
|
|
|
18
18
|
## Bind path
|
|
19
19
|
|
|
20
|
-
**Claude.** Spawn `subagent_type:
|
|
20
|
+
**Claude.** Spawn `subagent_type: pstack:poteto-agent` at Opus through the Agent tool. When Opus is out of usage, bind Astra through the Codex helper if `ADVISOR_ASTRA` is on. Fail closed when neither binds.
|
|
21
21
|
|
|
22
22
|
**Codex.** Spawn a native in-session Astra subagent at `resolve_codex_model_id("Astra")` (`gpt-6-astra`). Walk `candidate_tiers = ["Astra"]`. When the spawn tool has a `flags` field, pass `flags: ["--advisor"]` and record `fallback.advisor_flag: "passed"`. When it has none, as in `codex exec`, spawn `gpt-6-astra` plainly and record `fallback.advisor_flag: "unavailable"`. Both count as a bind. Record `{tier: "Astra", result: "spawned"}` on success. The `ADVISOR_ASTRA` flag is not required. Fail closed when Astra does not bind, or when the spawn skips a flag the host offers. Do not walk Opus on a Codex host.
|
|
23
23
|
|
|
@@ -7,7 +7,7 @@ Open this when binding the warm advisor on a Claude host or a Codex host, and fo
|
|
|
7
7
|
|
|
8
8
|
The consuming skill's session tries Opus first. Spawn with:
|
|
9
9
|
|
|
10
|
-
- `subagent_type:
|
|
10
|
+
- `subagent_type: pstack:poteto-agent`. The charter below carries the signal contract.
|
|
11
11
|
- `model`: the short alias via `resolve_cli_model_id("Opus")` (alias table: [`cli-chain.md`](cli-chain.md)): `opus`. When Opus is out of usage and the Astra rung is open, continue with the Codex helper in [`astra-rung.md`](astra-rung.md) as the Astra fallback.
|
|
12
12
|
- `name`: a name the session and every consumer will use to reach it (e.g. `team-advisor-agent`).
|
|
13
13
|
- `run_in_background: true`.
|
|
@@ -19,7 +19,7 @@ This file is the **single thick source** for Category O judgment (sub-buckets O1
|
|
|
19
19
|
|---|---|
|
|
20
20
|
| `packages/claude-dev-env/rules/docstring-prose-matches-implementation.md` | Always-on write-time policy: the policy sentence, a compact checklist a writer applies at Write/Edit, and a pointer here. |
|
|
21
21
|
| **This rubric** | On-demand thick home. The code-quality agent loads it per category. Holds every judgment standard, gate inventory, and worked example. |
|
|
22
|
-
| `packages/claude-dev-env/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md` | Variant C audit template: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, output shape
|
|
22
|
+
| `packages/claude-dev-env/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md` | Variant C audit template: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, and output shape. Points here for the judgment standard. |
|
|
23
23
|
|
|
24
24
|
Plainness for a general developer (diagram-first shape) also lives under O9; the write-time companion rule for that slice is `packages/claude-dev-env/rules/plain-illustrative-docstrings.md`.
|
|
25
25
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Judgment standard (thick source):** `packages/claude-dev-env/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md`
|
|
4
4
|
|
|
5
|
-
This file is the audit **template** only: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, output shape
|
|
5
|
+
This file is the audit **template** only: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, and output shape. For every sub-bucket's judgment standard, gate inventory, and free-form checklist, read the thick rubric above. Do not treat this prompt as a second full copy of the standard.
|
|
6
6
|
|
|
7
7
|
## Division of labor
|
|
8
8
|
|
|
@@ -81,18 +81,4 @@ Q3: Of the changed docstrings, which one most clearly shows a refactor was incom
|
|
|
81
81
|
|
|
82
82
|
## Output
|
|
83
83
|
|
|
84
|
-
Lead: `Total: N (P0=N, P1=N, P2=N)`. For each sub-bucket O1-O9, produce Shape A or Shape B (with
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
# Worked example: jl-cmd/claude-dev-env PR #522
|
|
89
|
-
|
|
90
|
-
Audit jl-cmd/claude-dev-env PR #522 for **Category O only** (docstring / fixture-prose vs implementation drift). Skip A-N, P. Sub-bucket forced-exhaustion mode: Category O is decomposed into 9 sub-buckets below.
|
|
91
|
-
|
|
92
|
-
PR #522 split `pr_description_command_parser.py` into two modules — the original parser and a new `pr_description_pr_number.py` — but the originating module's docstring still claims the PR-number recovery responsibility. A sibling change to `pr_description_body_audit.py` introduced a module docstring whose verb (`detects vague language`) overstates the module's responsibility (it only exposes `_extract_vague_scan_text()`; detection runs elsewhere).
|
|
93
|
-
|
|
94
|
-
Expected findings on PR #522:
|
|
95
|
-
- **O1 finding:** `pr_description_body_audit.py:8` docstring uses verb `detects`, but the only exported symbol prepares input for a regex scan that fires in a different module. Body line(s) showing `_extract_vague_scan_text` returning normalized text without a detection call.
|
|
96
|
-
- **O7 finding:** `pr_description_command_parser.py` module docstring still names PR-number recovery as a responsibility; the split placed that in `pr_description_pr_number.py`. The originating docstring needs an O7-shaped rewrite to drop the claim that left.
|
|
97
|
-
- **O2 finding:** `test_pr_description_enforcer_readability.py` autouse fixture docstring claims readability is globally disabled `for these tests`; sibling tests in the same module explicitly re-enable readability through a different state path.
|
|
98
|
-
- **O5 finding:** `code_rules_magic_values.py` docstring references a `# pragma: no-tdd-gate` sentinel and a hyphenated `test_code-rules-enforcer.py` filename; neither token exists in the module body or matches the repo's underscore-only test-file naming convention.
|
|
84
|
+
Lead: `Total: N (P0=N, P1=N, P2=N)`. For each sub-bucket O1-O9, produce Shape A or Shape B (with at least 3 probes). Each Shape A finding must cite (a) the docstring file:line, (b) the body file:line that contradicts it, and (c) one sentence describing the contradiction in concrete terms. Cross-bucket Q1-Q3 answers after the per-sub-bucket walk. Report every finding you reach, including uncertain ones and P2 ones, and give each finding a confidence level (high, medium, or low) beside its severity so a later pass can rank and filter them. Open Questions section for ambiguities. Read-only. No edits, no commits.
|
package/bin/install.mjs
CHANGED
|
@@ -1179,6 +1179,7 @@ export const RETIRED_HOOK_REGISTRATION_RELATIVE_PATHS = new Set([
|
|
|
1179
1179
|
'advisory/msys_path_conversion_advisor.py',
|
|
1180
1180
|
'session/untracked_repo_detector.py',
|
|
1181
1181
|
'session/gh_pr_author_session_cleanup.py',
|
|
1182
|
+
'session/style_reminder_prompt.py',
|
|
1182
1183
|
'observability/pr_description_writer_spawn_tracker.py',
|
|
1183
1184
|
'blocking/plain_language_blocker.py',
|
|
1184
1185
|
'lifecycle/config_change_guard.py',
|
|
@@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs';
|
|
|
4
4
|
|
|
5
5
|
import { mergeHooksIntoSettings } from './install.mjs';
|
|
6
6
|
|
|
7
|
-
test('reinstall
|
|
7
|
+
test('reinstall drops the retired style reminder and keeps one skill reminder hook', () => {
|
|
8
8
|
const hooksConfig = JSON.parse(readFileSync(new URL('../hooks/hooks.json', import.meta.url), 'utf8'));
|
|
9
9
|
const userCommand = 'python C:/Users/example/hooks/user_hook.py';
|
|
10
10
|
const settings = {
|
|
@@ -18,6 +18,10 @@ test('reinstall replaces both prompt hooks with one ordered context hook', () =>
|
|
|
18
18
|
type: 'command',
|
|
19
19
|
command: 'python C:/Users/example/.claude/hooks/session/style_reminder_prompt.py',
|
|
20
20
|
},
|
|
21
|
+
{
|
|
22
|
+
type: 'command',
|
|
23
|
+
command: 'python C:/Users/example/.claude/hooks/session/style_reminder_prompt.py --include-skill-reminder',
|
|
24
|
+
},
|
|
21
25
|
{
|
|
22
26
|
type: 'command',
|
|
23
27
|
command: 'python C:/Users/example/.claude/hooks/session/skill_loaded_reminder.py',
|
|
@@ -33,8 +37,8 @@ test('reinstall replaces both prompt hooks with one ordered context hook', () =>
|
|
|
33
37
|
const userPromptHooks = settings.hooks.UserPromptSubmit.flatMap(eachGroup => eachGroup.hooks);
|
|
34
38
|
assert.equal(userPromptHooks.length, 2);
|
|
35
39
|
assert.equal(userPromptHooks[0].command, userCommand);
|
|
36
|
-
assert.match(userPromptHooks[1].command, /
|
|
37
|
-
assert.
|
|
40
|
+
assert.match(userPromptHooks[1].command, /session\/skill_loaded_reminder\.py$/);
|
|
41
|
+
assert.ok(userPromptHooks.every(eachHook => !eachHook.command.includes('style_reminder_prompt')));
|
|
38
42
|
|
|
39
43
|
const firstMerge = JSON.stringify(settings);
|
|
40
44
|
mergeHooksIntoSettings(settings, hooksConfig, 'C:/Users/example/.claude', 'python');
|
package/bin/install.test.mjs
CHANGED
|
@@ -281,10 +281,10 @@ test('EVER_SHIPPED_SKILL_NAMES retains repairing-hook-boundaries so reinstall pr
|
|
|
281
281
|
});
|
|
282
282
|
|
|
283
283
|
|
|
284
|
-
test('CONTENT_DIRECTORIES includes audit-rubrics so installer copies
|
|
284
|
+
test('CONTENT_DIRECTORIES includes audit-rubrics so installer copies the Category O rubric to ~/.claude/audit-rubrics/', () => {
|
|
285
285
|
assert.ok(
|
|
286
286
|
CONTENT_DIRECTORIES.includes('audit-rubrics'),
|
|
287
|
-
'audit-rubrics must be in CONTENT_DIRECTORIES so
|
|
287
|
+
'audit-rubrics must be in CONTENT_DIRECTORIES so the docstring rules can resolve $HOME/.claude/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md',
|
|
288
288
|
);
|
|
289
289
|
});
|
|
290
290
|
|
|
@@ -1192,6 +1192,7 @@ test('retired hook registrations stay managed so reinstall removes them', () =>
|
|
|
1192
1192
|
'advisory/msys_path_conversion_advisor.py',
|
|
1193
1193
|
'session/untracked_repo_detector.py',
|
|
1194
1194
|
'session/gh_pr_author_session_cleanup.py',
|
|
1195
|
+
'session/style_reminder_prompt.py',
|
|
1195
1196
|
'observability/pr_description_writer_spawn_tracker.py',
|
|
1196
1197
|
'blocking/plain_language_blocker.py',
|
|
1197
1198
|
'lifecycle/config_change_guard.py',
|
package/commands/sr-loop.md
CHANGED
|
@@ -20,8 +20,8 @@ new user instruction.
|
|
|
20
20
|
|
|
21
21
|
## Effort
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
`
|
|
23
|
+
Run each model call at the session's effort level. Raise a call to `xhigh` or
|
|
24
|
+
`max` only where a measured run shows a quality gain at that level.
|
|
25
25
|
|
|
26
26
|
## Stack context
|
|
27
27
|
|
package/docs/CODE_RULES.md
CHANGED
|
@@ -17,7 +17,7 @@ Production and tests follow one rule. Changed directive, TODO, FIXME, HACK, XXX,
|
|
|
17
17
|
|
|
18
18
|
## CORE PRINCIPLES
|
|
19
19
|
|
|
20
|
-
- **Self-documenting code
|
|
20
|
+
- **Self-documenting code.** Names carry the meaning in place of comments.
|
|
21
21
|
- **Centralized configuration** — every constant lives in ONE place (`config/`).
|
|
22
22
|
- **Reuse before create** — search first, import second, create last.
|
|
23
23
|
- **Encapsulation enables cleaner naming** — `isMaxLevel(level)` > `level >= MAXIMUM_LEVEL`.
|
|
@@ -111,7 +111,7 @@ If you already have the data, don't fetch it again.
|
|
|
111
111
|
|
|
112
112
|
## 11. ENFORCEMENT SURFACES
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
**Lint** reports pattern-matchable violations. The staged policy lint runs `code_rules_enforcer.py` over each changed file, and CI runs it against the merge base. **Prompt context** carries judgment principles (SRP, Right-Sized Engineering, research-first action on ambiguous intent, BDD discovery, docstring-prose-matches-implementation). **Audit rubrics** (`packages/claude-dev-env/audit-rubrics/` categories A to Q) cover cross-file architectural concerns. Rules with documented-but-pending check coverage live in `~/.claude/rules/*.md`; each names its own promotion path. The docstring-prose standard (free-form enumerations match the body) lives in `packages/claude-dev-env/rules/docstring-prose-matches-implementation.md`, enforced via Category O6 audit. The diagram-first docstring standard (a summary line, then a `::` example or doctest, then a couple of short prose lines) lives in `packages/claude-dev-env/rules/plain-illustrative-docstrings.md`, enforced by the `check_docstring_runon_sentence` and `check_docstring_prose_wall_without_illustration` enforcer checks and Category O9 audit.
|
|
115
115
|
|
|
116
116
|
## 11.5 VALIDATION-PHASE PRECEDENCE
|
|
117
117
|
|
package/docs/DJANGO_PATTERNS.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Model Patterns
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**Anti-patterns:**
|
|
8
8
|
|
|
9
9
|
- **Create separate user models** - Extend Django's User with OneToOneField
|
|
10
10
|
- Example: `UserProfile(user=OneToOneField(User, related_name='profile'))`
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
|
|
28
28
|
## Template Patterns
|
|
29
29
|
|
|
30
|
-
**
|
|
30
|
+
**Anti-patterns:**
|
|
31
31
|
|
|
32
32
|
- **Put view-specific template code in base.html** - Only in the template that uses it
|
|
33
33
|
- Example: `{% if layout %}` in base.html when only home view defines layout
|
|
34
34
|
- If variable is always present in specific template, no conditional needed
|
|
35
35
|
|
|
36
|
-
## Production Migrations (Post-Launch
|
|
36
|
+
## Production Migrations (Post-Launch Only)
|
|
37
37
|
|
|
38
38
|
After launch, keep model changes backwards-compatible.
|
|
39
39
|
|
package/docs/REACT_PATTERNS.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Component Patterns
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**Anti-patterns:**
|
|
8
8
|
|
|
9
9
|
- **Create wrapper components for single use** - Use the component directly
|
|
10
10
|
- Example: `<ButtonWrapper><Button /></ButtonWrapper>` when Button is only used once
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
## State Management Patterns
|
|
29
29
|
|
|
30
|
-
**
|
|
30
|
+
**Anti-patterns:**
|
|
31
31
|
|
|
32
32
|
- **Store derived state** - Calculate on render
|
|
33
33
|
- Bad: `const [fullName, setFullName] = useState(first + ' ' + last)`
|
|
@@ -47,18 +47,18 @@
|
|
|
47
47
|
|
|
48
48
|
- **Forget to memoize expensive calculations** - Use useMemo
|
|
49
49
|
- Bad: `const sorted = items.sort((a, b) => ...)` on every render
|
|
50
|
-
- Good: `const sorted = useMemo(() => items.sort(...), [items])`
|
|
50
|
+
- Good: `const sorted = useMemo(() => [...items].sort(...), [items])`
|
|
51
51
|
|
|
52
52
|
## Hooks Patterns
|
|
53
53
|
|
|
54
|
-
**
|
|
54
|
+
**Anti-patterns:**
|
|
55
55
|
|
|
56
56
|
- **Call hooks conditionally** - Hooks must be at top level
|
|
57
57
|
- Bad: `if (condition) { const [x, setX] = useState() }`
|
|
58
58
|
- Good: Always call hooks, use condition inside
|
|
59
59
|
|
|
60
60
|
- **Create effects without cleanup** - Return cleanup function when needed
|
|
61
|
-
-
|
|
61
|
+
- Clean up subscriptions, timers, and event listeners
|
|
62
62
|
- Bad: `useEffect(() => { window.addEventListener(...) }, [])`
|
|
63
63
|
- Good: `useEffect(() => { window.addEventListener(...); return () => window.removeEventListener(...) }, [])`
|
|
64
64
|
|
|
@@ -86,7 +86,7 @@ components/
|
|
|
86
86
|
index.ts # Public export
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
**
|
|
89
|
+
**Anti-patterns:**
|
|
90
90
|
|
|
91
91
|
- **Mix business logic with UI** - Separate concerns
|
|
92
92
|
- Custom hooks for business logic: `useTaskManager()`
|
package/docs/TEST_QUALITY.md
CHANGED
|
@@ -4,37 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
## Test Infrastructure Anti-Patterns
|
|
6
6
|
|
|
7
|
-
Test helpers drift toward over-engineering faster than production code, because nothing reviews them for size. Keep a helper to one file of plain functions with the fewest abstractions the current tests need. Add a package, a cache class, or an abstraction only when a second test needs it today.
|
|
8
|
-
|
|
9
|
-
**Pre-check (MANDATORY):**
|
|
10
|
-
- [ ] ONE file?
|
|
11
|
-
- [ ] Functions not classes?
|
|
12
|
-
- [ ] Solving problem not building infrastructure?
|
|
13
|
-
- [ ] Junior-dev-understandable?
|
|
7
|
+
Test helpers drift toward over-engineering faster than production code, because nothing reviews them for size. Keep a helper to one file of plain functions with the fewest abstractions the current tests need. Add a package, a cache class, or an abstraction only when a second test needs it today. A junior developer reads the helper on the first pass.
|
|
14
8
|
|
|
15
9
|
## Delete Useless Tests
|
|
16
10
|
|
|
17
11
|
**Tests must add value.** Delete these types of tests:
|
|
18
12
|
|
|
19
|
-
###
|
|
13
|
+
### Tests to delete
|
|
20
14
|
|
|
21
15
|
**Function existence** - "Testing that the function exists doesn't add value. If the function doesn't exist, the code will not run."
|
|
22
16
|
- Bad: `test_public_api_exports_download_function()` only verified `callable(func)`
|
|
23
|
-
- Action:
|
|
17
|
+
- Action: delete
|
|
24
18
|
|
|
25
19
|
**Constant values** - "It's silly to test that constant values have not changed."
|
|
26
20
|
- Bad: `assert CACHE_DIR == "cache"`
|
|
27
|
-
- Action:
|
|
21
|
+
- Action: delete
|
|
28
22
|
|
|
29
23
|
**Duplicate coverage** - "Isn't this test case the same as test_X?"
|
|
30
|
-
- Action:
|
|
24
|
+
- Action: delete the redundant test
|
|
31
25
|
|
|
32
|
-
##
|
|
26
|
+
## Missing dependencies fail the test
|
|
33
27
|
|
|
34
28
|
"The tests should fail if they can't run. Missing system dependencies should make the test fail."
|
|
35
29
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
30
|
+
- Leave `@skip_if_missing_dependency` and other skip decorators out of test files. The code-rules lint flags each one.
|
|
31
|
+
- A missing dependency fails the test with a clear error, which prompts the install.
|
|
38
32
|
|
|
39
33
|
## Core Testing Principles
|
|
40
34
|
|
|
@@ -46,7 +40,7 @@ Test helpers drift toward over-engineering faster than production code, because
|
|
|
46
40
|
|
|
47
41
|
## React Testing Patterns
|
|
48
42
|
|
|
49
|
-
###
|
|
43
|
+
### Patterns
|
|
50
44
|
|
|
51
45
|
**Test behavior, not implementation** - What user sees/does, not internal state
|
|
52
46
|
- Bad: `expect(component.state.isOpen).toBe(true)`
|
|
@@ -65,7 +59,7 @@ Test helpers drift toward over-engineering faster than production code, because
|
|
|
65
59
|
- Use `userEvent` over `fireEvent` (more realistic)
|
|
66
60
|
- `await userEvent.click(button)` then assert result
|
|
67
61
|
|
|
68
|
-
###
|
|
62
|
+
### Anti-patterns
|
|
69
63
|
|
|
70
64
|
**Snapshot test everything** - Only for stable, visual components
|
|
71
65
|
- Snapshots break on any change, creating noise
|
|
@@ -13,9 +13,9 @@ Before writing any agent prompt, confirm you can answer all of these:
|
|
|
13
13
|
|
|
14
14
|
When any answer is "I don't know", investigate first (read files, search code) or ask the user. Do not spawn with incomplete context.
|
|
15
15
|
|
|
16
|
-
## Step 2:
|
|
16
|
+
## Step 2: Write the prompt
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Write the brief yourself. Include:
|
|
19
19
|
|
|
20
20
|
- The task description and goal
|
|
21
21
|
- Target files and directories found in Step 1
|
|
@@ -23,7 +23,7 @@ Run the `/prompt-generator` skill to produce a structured prompt. Feed it:
|
|
|
23
23
|
- Expected output format
|
|
24
24
|
- Acceptance criteria
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Use the brief as the agent's `prompt` parameter.
|
|
27
27
|
|
|
28
28
|
## Step 3: Spawn the agent
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ Pass the structured prompt from Step 2 to the Agent or Task tool.
|
|
|
31
31
|
|
|
32
32
|
## Why
|
|
33
33
|
|
|
34
|
-
An agent that receives a vague prompt wastes tokens exploring in circles, produces code that misses constraints, and needs a second pass. A small investment in prompt quality
|
|
34
|
+
An agent that receives a vague prompt wastes tokens exploring in circles, produces code that misses constraints, and needs a second pass. A small investment in prompt quality saves a long agent failure. This holds for Explore agents, which waste context on unfocused searches, and for execution agents, which write wrong code.
|
|
35
35
|
|
|
36
36
|
## Relationship to other rules
|
|
37
37
|
|