claude-dev-env 8.64.0 → 8.65.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/skills/grok-spawn/SKILL.md +5 -54
- package/.agents/skills/grok-spawn/reference/batch-spec.md +49 -0
- package/.agents/skills/mod-playbooks/SKILL.md +58 -0
- package/.agents/skills/mod-playbooks/references/cloud-drive.md +47 -0
- package/.agents/skills/mod-playbooks/references/desktop-capture.md +41 -0
- package/.agents/skills/mod-playbooks/references/desktop-window.md +79 -0
- package/.agents/skills/orchestrator/test_orchestrator_skill_contract.py +0 -2
- package/.agents/skills/pull-request/SKILL.md +5 -49
- package/.agents/skills/pull-request/reference/examples.md +13 -0
- package/.agents/skills/pull-request/reference/legacy-author-recovery.md +11 -0
- package/bin/ever-shipped-skills.mjs +1 -0
- package/bin/install.settings-defaults.test.mjs +1 -1
- package/docs/references/working-style.md +40 -0
- package/hooks/hooks_constants/working_style_prompt_constants.py +6 -35
- package/hooks/session/test_working_style_prompt.py +19 -32
- package/hooks/session/working_style_prompt.py +3 -6
- package/package.json +1 -1
- package/scripts/tests/test_rule_load_scopes.py +0 -2
- package/settings.json +2 -1
- package/.agents/skills/.claude/CLAUDE.md +0 -1
- package/.agents/skills/AGENTS.md +0 -1
- package/.agents/skills/_shared/.claude/CLAUDE.md +0 -1
- package/.agents/skills/_shared/AGENTS.md +0 -1
- package/.agents/skills/_shared/advisor/.claude/CLAUDE.md +0 -1
- package/.agents/skills/_shared/advisor/AGENTS.md +0 -1
- package/.agents/skills/everything-search/.claude/CLAUDE.md +0 -1
- package/.agents/skills/everything-search/AGENTS.md +0 -1
- package/.agents/skills/fresh-branch/.claude/CLAUDE.md +0 -1
- package/.agents/skills/fresh-branch/AGENTS.md +0 -1
- package/.agents/skills/grok-spawn/.claude/CLAUDE.md +0 -1
- package/.agents/skills/grok-spawn/AGENTS.md +0 -1
- package/.agents/skills/orchestrator/.claude/CLAUDE.md +0 -1
- package/.agents/skills/orchestrator/AGENTS.md +0 -1
- package/.agents/skills/orchestrator/reference/.claude/CLAUDE.md +0 -1
- package/.agents/skills/orchestrator/reference/AGENTS.md +0 -1
- package/.agents/skills/second-account-workers/.claude/CLAUDE.md +0 -1
- package/.agents/skills/second-account-workers/AGENTS.md +0 -1
- package/.agents/skills/skill-builder/.claude/CLAUDE.md +0 -1
- package/.agents/skills/skill-builder/AGENTS.md +0 -1
- package/.agents/skills/task-build/.claude/CLAUDE.md +0 -1
- package/.agents/skills/task-build/AGENTS.md +0 -1
- package/.agents/skills-archived/AGENTS.md +0 -1
- package/.agents/skills-archived/anthropic-plan/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/anthropic-plan/AGENTS.md +0 -1
- package/.agents/skills-archived/anthropic-plan/scripts/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/anthropic-plan/scripts/AGENTS.md +0 -1
- package/.agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -1
- package/.agents/skills-archived/anthropic-plan/templates/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/anthropic-plan/templates/AGENTS.md +0 -1
- package/.agents/skills-archived/anthropic-plan/workflow/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/anthropic-plan/workflow/AGENTS.md +0 -1
- package/.agents/skills-archived/auditing-claude-config/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/auditing-claude-config/AGENTS.md +0 -1
- package/.agents/skills-archived/bugteam/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/bugteam/AGENTS.md +0 -1
- package/.agents/skills-archived/bugteam/reference/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/bugteam/reference/AGENTS.md +0 -1
- package/.agents/skills-archived/bugteam/reference/obstacles/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/bugteam/reference/obstacles/AGENTS.md +0 -1
- package/.agents/skills-archived/bugteam/scripts/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/bugteam/scripts/AGENTS.md +0 -1
- package/.agents/skills-archived/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -1
- package/.agents/skills-archived/codex-review/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/codex-review/AGENTS.md +0 -1
- package/.agents/skills-archived/codex-review/reference/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/codex-review/reference/AGENTS.md +0 -1
- package/.agents/skills-archived/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -1
- package/.agents/skills-archived/copilot-review/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/copilot-review/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/pr_converge_skill_constants/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/reference/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/reference/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/reference/obstacles/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/reference/obstacles/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/scripts/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/scripts/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -1
- package/.agents/skills-archived/pr-converge/workflows/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/pr-converge/workflows/AGENTS.md +0 -1
- package/.agents/skills-archived/recall/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/recall/AGENTS.md +0 -1
- package/.agents/skills-archived/remember/.claude/CLAUDE.md +0 -1
- package/.agents/skills-archived/remember/AGENTS.md +0 -1
- package/_shared/AGENTS.md +0 -1
- package/_shared/CLAUDE.md +0 -1
- package/_shared/advisor/AGENTS.md +0 -1
- package/_shared/advisor/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/code_rules_gate_parts/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/code_rules_gate_parts/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/.claude/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/tests/AGENTS.md +0 -1
- package/_shared/pr-loop/scripts/tests/CLAUDE.md +0 -1
- package/_shared/process-tree/AGENTS.md +0 -1
- package/_shared/process-tree/CLAUDE.md +0 -1
- package/audit-rubrics/AGENTS.md +0 -1
- package/audit-rubrics/CLAUDE.md +0 -1
- package/audit-rubrics/category_rubrics/AGENTS.md +0 -1
- package/audit-rubrics/category_rubrics/CLAUDE.md +0 -1
- package/audit-rubrics/prompts/AGENTS.md +0 -1
- package/audit-rubrics/prompts/CLAUDE.md +0 -1
- package/bin/AGENTS.md +0 -1
- package/bin/CLAUDE.md +0 -1
- package/commands/AGENTS.md +0 -1
- package/commands/CLAUDE.md +0 -1
- package/docs/AGENTS.md +0 -1
- package/docs/CLAUDE.md +0 -1
- package/docs/references/AGENTS.md +0 -1
- package/docs/references/CLAUDE.md +0 -1
- package/hooks/advisory/AGENTS.md +0 -1
- package/hooks/advisory/CLAUDE.md +0 -1
- package/hooks/blocking/AGENTS.md +0 -1
- package/hooks/blocking/CLAUDE.md +0 -1
- package/hooks/blocking/claude_md_orphan_file_blocker_parts/AGENTS.md +0 -1
- package/hooks/blocking/claude_md_orphan_file_blocker_parts/CLAUDE.md +0 -1
- package/hooks/blocking/config/AGENTS.md +0 -1
- package/hooks/blocking/config/CLAUDE.md +0 -1
- package/hooks/blocking/inventory_intent_records/AGENTS.md +0 -1
- package/hooks/blocking/inventory_intent_records/CLAUDE.md +0 -1
- package/hooks/blocking/package_inventory_stale_blocker_parts/AGENTS.md +0 -1
- package/hooks/blocking/package_inventory_stale_blocker_parts/CLAUDE.md +0 -1
- package/hooks/blocking/pii_prevention_blocker_parts/AGENTS.md +0 -1
- package/hooks/blocking/pii_prevention_blocker_parts/CLAUDE.md +0 -1
- package/hooks/blocking/tdd_enforcer_parts/AGENTS.md +0 -1
- package/hooks/blocking/tdd_enforcer_parts/CLAUDE.md +0 -1
- package/hooks/git-hooks/AGENTS.md +0 -1
- package/hooks/git-hooks/CLAUDE.md +0 -1
- package/hooks/git-hooks/git_hooks_constants/AGENTS.md +0 -1
- package/hooks/git-hooks/git_hooks_constants/CLAUDE.md +0 -1
- package/hooks/hooks_constants/AGENTS.md +0 -1
- package/hooks/hooks_constants/CLAUDE.md +0 -1
- package/hooks/lifecycle/AGENTS.md +0 -1
- package/hooks/lifecycle/CLAUDE.md +0 -1
- package/hooks/observability/AGENTS.md +0 -1
- package/hooks/observability/CLAUDE.md +0 -1
- package/hooks/session/AGENTS.md +0 -1
- package/hooks/session/CLAUDE.md +0 -1
- package/hooks/validation/AGENTS.md +0 -1
- package/hooks/validation/CLAUDE.md +0 -1
- package/hooks/validators/AGENTS.md +0 -1
- package/hooks/validators/CLAUDE.md +0 -1
- package/hooks/workflow/AGENTS.md +0 -1
- package/hooks/workflow/CLAUDE.md +0 -1
- package/rules/AGENTS.md +0 -1
- package/rules/CLAUDE.md +0 -1
- package/scripts/AGENTS.md +0 -1
- package/scripts/CLAUDE.md +0 -1
- package/scripts/dev_env_scripts_constants/AGENTS.md +0 -1
- package/scripts/dev_env_scripts_constants/CLAUDE.md +0 -1
- package/scripts/tests/AGENTS.md +0 -1
- package/scripts/tests/CLAUDE.md +0 -1
- package/system-prompts/AGENTS.md +0 -1
- package/system-prompts/CLAUDE.md +0 -1
|
@@ -108,54 +108,10 @@ Flag sets and profile meaning:
|
|
|
108
108
|
|
|
109
109
|
### 3. Write the batch JSON spec
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"role": "bugteam",
|
|
116
|
-
"should_ping": false,
|
|
117
|
-
"workers": [
|
|
118
|
-
{
|
|
119
|
-
"role_name": "investigate-hooks",
|
|
120
|
-
"prompt_parts": [
|
|
121
|
-
"/abs/path/to/readonly-brief.md",
|
|
122
|
-
"/abs/path/to/task-body.md",
|
|
123
|
-
"/abs/path/to/report-contract.md"
|
|
124
|
-
],
|
|
125
|
-
"cwd": "/abs/path/to/worktree",
|
|
126
|
-
"tool_profile": "readonly",
|
|
127
|
-
"timeout_seconds": 600,
|
|
128
|
-
"is_repo_only": true,
|
|
129
|
-
"agent_name": "poteto-agent"
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
| Field | Meaning |
|
|
136
|
-
|---|---|
|
|
137
|
-
| `role` | Preflight role configuration to check (default `bugteam`) |
|
|
138
|
-
| `should_ping` | When true, preflight runs the opt-in live ping |
|
|
139
|
-
| `workers` | Non-empty list of worker objects |
|
|
140
|
-
| `role_name` | Label on the summary report for this worker |
|
|
141
|
-
| `prompt_parts` | Ordered absolute paths to part files |
|
|
142
|
-
| `cwd` | Working directory for that worker |
|
|
143
|
-
| `tool_profile` | `readonly` or `build` |
|
|
144
|
-
| `timeout_seconds` | Per-worker timeout (default 600, ceiling 5400). A spec asking for more is refused |
|
|
145
|
-
| `is_repo_only` | Readonly only: when true, also pass `--disable-web-search` |
|
|
146
|
-
| `agent_name` | Use `poteto-agent`; prompts carry the worker role. |
|
|
147
|
-
|
|
148
|
-
Workers run with no turn cap. The timeout is the only bound on a worker's
|
|
149
|
-
length, and a worker that hits it is killed with its whole process tree and
|
|
150
|
-
reported as `timeout`.
|
|
151
|
-
|
|
152
|
-
A worker entry accepts these fields and no others. Any other key fails the
|
|
153
|
-
load with an error naming the stray key and listing the accepted set, so a
|
|
154
|
-
misspelled field shows up at startup rather than passing for a setting that
|
|
155
|
-
took effect.
|
|
156
|
-
|
|
157
|
-
Put the spec file under the run state directory (or any path you pass to
|
|
158
|
-
`--spec`).
|
|
111
|
+
Write the spec from the shape and field table in
|
|
112
|
+
[`reference/batch-spec.md`](reference/batch-spec.md). A worker entry accepts
|
|
113
|
+
only the listed fields. Put the spec file under the run state directory (or any
|
|
114
|
+
path you pass to `--spec`).
|
|
159
115
|
|
|
160
116
|
### 4. Launch the batch
|
|
161
117
|
|
|
@@ -222,14 +178,9 @@ Build workers stop at stage-ready edits and a written report. They do not run
|
|
|
222
178
|
| File | Purpose |
|
|
223
179
|
|---|---|
|
|
224
180
|
| `SKILL.md` | Trigger, gotchas, process, batch shape, composition |
|
|
225
|
-
| `CLAUDE.md` | Package map for this skill folder |
|
|
226
181
|
| `reference/worker-briefs.md` | Readonly brief, build brief, report contract templates |
|
|
227
182
|
| `reference/flag-profiles.md` | Readonly vs build flags, shared flags, socket and stagger rules |
|
|
228
|
-
|
|
229
|
-
## Folder map
|
|
230
|
-
|
|
231
|
-
- `SKILL.md` — hub and process.
|
|
232
|
-
- `reference/` — brief templates and flag profiles.
|
|
183
|
+
| `reference/batch-spec.md` | Batch JSON spec shape and worker fields |
|
|
233
184
|
|
|
234
185
|
## Worker advisors
|
|
235
186
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Batch JSON spec
|
|
2
|
+
|
|
3
|
+
Shape:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"role": "bugteam",
|
|
8
|
+
"should_ping": false,
|
|
9
|
+
"workers": [
|
|
10
|
+
{
|
|
11
|
+
"role_name": "investigate-hooks",
|
|
12
|
+
"prompt_parts": [
|
|
13
|
+
"/abs/path/to/readonly-brief.md",
|
|
14
|
+
"/abs/path/to/task-body.md",
|
|
15
|
+
"/abs/path/to/report-contract.md"
|
|
16
|
+
],
|
|
17
|
+
"cwd": "/abs/path/to/worktree",
|
|
18
|
+
"tool_profile": "readonly",
|
|
19
|
+
"timeout_seconds": 600,
|
|
20
|
+
"is_repo_only": true,
|
|
21
|
+
"agent_name": "poteto-agent"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
| Field | Meaning |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `role` | Preflight role configuration to check (default `bugteam`) |
|
|
30
|
+
| `should_ping` | When true, preflight runs the opt-in live ping |
|
|
31
|
+
| `workers` | Non-empty list of worker objects |
|
|
32
|
+
| `role_name` | Label on the summary report for this worker |
|
|
33
|
+
| `prompt_parts` | Ordered absolute paths to part files |
|
|
34
|
+
| `cwd` | Working directory for that worker |
|
|
35
|
+
| `tool_profile` | `readonly` or `build` |
|
|
36
|
+
| `timeout_seconds` | Per-worker timeout (default 600, ceiling 5400). A spec asking for more is refused |
|
|
37
|
+
| `is_repo_only` | Readonly only: when true, also pass `--disable-web-search` |
|
|
38
|
+
| `agent_name` | Use `poteto-agent`; prompts carry the worker role. |
|
|
39
|
+
|
|
40
|
+
Workers run with no turn cap. The timeout is the only bound on a worker's
|
|
41
|
+
length, and a worker that hits it is killed with its whole process tree and
|
|
42
|
+
reported as `timeout`.
|
|
43
|
+
|
|
44
|
+
A worker entry accepts these fields and no others. Any other key fails the
|
|
45
|
+
load with an error naming the stray key and listing the accepted set, so a
|
|
46
|
+
misspelled field fails at startup.
|
|
47
|
+
|
|
48
|
+
Put the spec file under the run state directory (or any path you pass to
|
|
49
|
+
`--spec`).
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mod-playbooks
|
|
3
|
+
description: >-
|
|
4
|
+
Map of playbooks for driving a Claude Code mod (plugin) and seeing its screen: press keys, open menus and drawers, hover a reply to show its action row, click a dropdown, type in a field, fire a toast or a question card, and capture each screen as text and PNG. Use when an agent must test a mod, check a fix by looking at it, or show a mod to the operator on their own desktop.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Mod playbooks
|
|
8
|
+
|
|
9
|
+
## Principle
|
|
10
|
+
|
|
11
|
+
An agent proves a mod works by driving it and reading the screen. It needs no person for that. A
|
|
12
|
+
cloud session runs Claude Code in a pseudo-terminal, plays the steps, and reads each capture. The
|
|
13
|
+
operator's desktop comes last, when a person wants to look.
|
|
14
|
+
|
|
15
|
+
## Pick the route
|
|
16
|
+
|
|
17
|
+
| Goal | Route | Reference |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Test a mod, or check a fix, with no person | Drive it in a pseudo-terminal and read the captures | [cloud-drive.md](references/cloud-drive.md) |
|
|
20
|
+
| Let the operator watch the mod on their own screen | Open a desktop window from a Remote Control session | [desktop-window.md](references/desktop-window.md) |
|
|
21
|
+
| Prove what the operator's window shows | Capture that window to a PNG | [desktop-capture.md](references/desktop-capture.md) |
|
|
22
|
+
|
|
23
|
+
When the mod's repository ships a driver and playbooks, use them first. Look for a `drive.mjs` beside
|
|
24
|
+
a `playbooks/` folder and a playbook guide in its docs. Read the guide, run the matching playbook, and
|
|
25
|
+
add a playbook for any new screen you test.
|
|
26
|
+
|
|
27
|
+
## Playbook map
|
|
28
|
+
|
|
29
|
+
Each row is one thing an agent does to a mod, and the input that does it. The bytes are in
|
|
30
|
+
[cloud-drive.md](references/cloud-drive.md).
|
|
31
|
+
|
|
32
|
+
| Do this | Input | Check on screen |
|
|
33
|
+
| --- | --- | --- |
|
|
34
|
+
| Send a prompt | Type the text, then Enter | The scripted reply |
|
|
35
|
+
| Open a slash-command menu or pane | Type the command, then Enter | The pane's title |
|
|
36
|
+
| Open a pane from a footer pill | Click the pill's label | The pane's title |
|
|
37
|
+
| Move between buttons in a pane | Tab forward, Shift+Tab back, Enter to press | The focused button |
|
|
38
|
+
| Toggle a control | Click its label | The control's new state |
|
|
39
|
+
| Close a pane | Escape | The prompt again |
|
|
40
|
+
| Show a reply's action row | Hover the reply text; the row draws only under the pointer | The action labels |
|
|
41
|
+
| Pick from a dropdown | Click the action, click the choice, click the confirm button | The confirm line |
|
|
42
|
+
| Type in a text field | Click the field label, type, then Enter | The saved text |
|
|
43
|
+
| Fire a toast | Script a tool turn the mod watches, and allow that tool | The toast's words, top right |
|
|
44
|
+
| Raise a question card | Script a question tool turn, then click an option | The answered line |
|
|
45
|
+
|
|
46
|
+
## Self-resolve loop
|
|
47
|
+
|
|
48
|
+
1. Change the mod.
|
|
49
|
+
2. Run the playbook for the screen you changed.
|
|
50
|
+
3. Read the `.txt` capture for words, and open the `.png` for color and layout.
|
|
51
|
+
4. On a failed step, read `failure.png`, fix the cause, and run again.
|
|
52
|
+
5. Keep the passing captures as the proof, then show the operator if they asked to see it.
|
|
53
|
+
|
|
54
|
+
## Limits
|
|
55
|
+
|
|
56
|
+
- The cloud route proves the mod's screens. It runs a mock model, so it proves nothing about model output.
|
|
57
|
+
- Drive input with the mod repository's driver, in the cloud or on the operator's PC. The desktop window is for looking only.
|
|
58
|
+
- A screen that needs the operator's account, files or network stays on the desktop route.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Drive a mod in a pseudo-terminal
|
|
2
|
+
|
|
3
|
+
A cloud session can run Claude Code with a mod loaded, press keys, click, hover, and capture the screen,
|
|
4
|
+
with no PC and no person. Use the mod repository's own driver when it ships one. Build on the same parts
|
|
5
|
+
when it does not.
|
|
6
|
+
|
|
7
|
+
## The parts
|
|
8
|
+
|
|
9
|
+
| Part | Job |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `node-pty` | Runs `claude --plugin-dir <mod>` in a pseudo-terminal. |
|
|
12
|
+
| `@xterm/headless` | Mirrors the output into a cell buffer, so the screen reads as text with colors. |
|
|
13
|
+
| A local mock of the Messages API | Scripts each model turn, so the model calls the tool that fires the mod. Point `ANTHROPIC_BASE_URL` at it. |
|
|
14
|
+
| A throwaway home and config folder | Seeds onboarding, API key approval and folder trust, so the first screen is the prompt. |
|
|
15
|
+
| A renderer | Paints the cells to HTML and screenshots it with Playwright Chromium, so the capture is a PNG. |
|
|
16
|
+
|
|
17
|
+
## Input bytes
|
|
18
|
+
|
|
19
|
+
| Action | Bytes written to the terminal |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| Enter | `\r` |
|
|
22
|
+
| Tab, Shift+Tab | `\t`, `\x1b[Z` |
|
|
23
|
+
| Escape | `\x1b` |
|
|
24
|
+
| Arrow up, down, right, left | `\x1b[A`, `\x1b[B`, `\x1b[C`, `\x1b[D` |
|
|
25
|
+
| Clear the prompt line | `\x15` |
|
|
26
|
+
| Left click at column `c`, row `r` (1-based) | `\x1b[<0;c;rM` then `\x1b[<0;c;rm` |
|
|
27
|
+
| Hover at column `c`, row `r` | `\x1b[<35;c;rM` |
|
|
28
|
+
|
|
29
|
+
Find `c` and `r` by searching the cell buffer for the text to point at. Search from the bottom row up,
|
|
30
|
+
so a click lands on the newest copy of a label. Skip zero-width cells when you join a row, or wide
|
|
31
|
+
characters shift every column after them.
|
|
32
|
+
|
|
33
|
+
## The loop
|
|
34
|
+
|
|
35
|
+
1. Write the steps: the scripted turns, then each key, click or hover, the text to wait for, and a capture.
|
|
36
|
+
2. Run them. Wait for each step's text, then for the screen to stop changing, before the next step.
|
|
37
|
+
3. Read the text capture for words, and open the PNG for color and layout.
|
|
38
|
+
4. Fix the mod, run again, and keep the passing captures as the proof.
|
|
39
|
+
|
|
40
|
+
## Gotchas
|
|
41
|
+
|
|
42
|
+
- A tool the scripted turn calls needs `--allowedTools <tool>`, or a permission prompt stops the run.
|
|
43
|
+
- Check the request body for your tool id, so the second request ends the turn with text.
|
|
44
|
+
- A mod can refuse to draw a pane below a minimum width. Run at 180 columns unless the steps need less.
|
|
45
|
+
- A toast draws in the top-right corner, over the header rows.
|
|
46
|
+
- A PNG renderer can paint a wide emoji over the next cell. The text capture holds the characters as drawn.
|
|
47
|
+
- A step that runs a script from the project folder fails in the sandbox, because that folder is empty.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Capture a desktop window
|
|
2
|
+
|
|
3
|
+
Run this on the operator's PC after the mod fires. It asks the window to paint itself into a bitmap
|
|
4
|
+
with `PrintWindow`, so another window on top does not spoil the image. Open the demo with
|
|
5
|
+
`wt.exe -w new` and `--suppressApplicationTitle`, so its window keeps the demo title and the block
|
|
6
|
+
below can find it by that title.
|
|
7
|
+
|
|
8
|
+
```powershell
|
|
9
|
+
Add-Type -AssemblyName System.Drawing
|
|
10
|
+
Add-Type @"
|
|
11
|
+
using System; using System.Runtime.InteropServices;
|
|
12
|
+
public struct RECT { public int Left, Top, Right, Bottom; }
|
|
13
|
+
public static class W {
|
|
14
|
+
[DllImport("user32.dll")] public static extern bool SetProcessDPIAware();
|
|
15
|
+
[DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr h, out RECT r);
|
|
16
|
+
[DllImport("user32.dll")] public static extern bool PrintWindow(IntPtr h, IntPtr hdc, uint flags);
|
|
17
|
+
}
|
|
18
|
+
"@
|
|
19
|
+
[W]::SetProcessDPIAware() | Out-Null
|
|
20
|
+
$window = Get-Process WindowsTerminal | Where-Object MainWindowTitle -like '*Mod demo*' | Select-Object -First 1
|
|
21
|
+
$rect = New-Object RECT
|
|
22
|
+
[W]::GetWindowRect($window.MainWindowHandle, [ref]$rect) | Out-Null
|
|
23
|
+
$bitmap = New-Object System.Drawing.Bitmap ($rect.Right - $rect.Left), ($rect.Bottom - $rect.Top)
|
|
24
|
+
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
|
|
25
|
+
$hdc = $graphics.GetHdc()
|
|
26
|
+
[W]::PrintWindow($window.MainWindowHandle, $hdc, 2) | Out-Null
|
|
27
|
+
$graphics.ReleaseHdc($hdc)
|
|
28
|
+
$bitmap.Save((Join-Path $env:TEMP 'mod-demo.png'))
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Report the path and size, and say whether the image shows color and the mod's output. The PNG stays on
|
|
32
|
+
the PC; a cloud session that needs to see it stages the file through the device folder tools, or has
|
|
33
|
+
the PC session post it. A toast fades, so capture while it shows, or capture twice.
|
|
34
|
+
|
|
35
|
+
## What went wrong before
|
|
36
|
+
|
|
37
|
+
| Capture | Result |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `CopyFromScreen` on the window rectangle, demo opened with `new-tab` | 1752 x 936 in color, but it showed the active tab and missed the toast. |
|
|
40
|
+
| `CopyFromScreen` without `SetProcessDPIAware` | The image held the wrong region, with other windows in it. |
|
|
41
|
+
| `SetProcessDPIAware`, then `PrintWindow` with flag 2 (`PW_RENDERFULLCONTENT`) | 2520 x 936 in full color, as reported by the PC session. |
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Open a mod on the operator's desktop
|
|
2
|
+
|
|
3
|
+
A toast, pane or status line shows only in the Claude Code window that loads the mod. A Remote Control
|
|
4
|
+
session has no window the operator can see. So the session opens a new desktop window that loads the
|
|
5
|
+
mod, and the operator only looks at it.
|
|
6
|
+
|
|
7
|
+
## Gotchas
|
|
8
|
+
|
|
9
|
+
- A mod loaded inside the Remote Control session fires its toast there. The operator sees nothing.
|
|
10
|
+
- `/plugin install` plus hot reload asks the operator to click "Enable for this session". `--plugin-dir` on a new window skips that prompt.
|
|
11
|
+
- A child window inherits `NO_COLOR=1` and `CLAUDE_CODE_CHILD_SESSION=1` from the Remote Control process. The window then runs black and white. Remove both variables in the child before `claude` starts.
|
|
12
|
+
- `Start-Process pwsh` opens the old console host. Launch through `wt.exe` to get Windows Terminal.
|
|
13
|
+
- `wt.exe new-tab` lands in an existing Windows Terminal window. A screen capture then shows whichever tab is active. Use `wt.exe -w new` for a window of its own.
|
|
14
|
+
- `wt.exe` is an app execution alias. Call it by its full path under `%LOCALAPPDATA%\Microsoft\WindowsApps`.
|
|
15
|
+
- When the operator already has the same plugin installed, both copies load. A `--settings` file with `{"enabledPlugins":{"<plugin>@<marketplace>":false}}` turned off the installed copy for that one session.
|
|
16
|
+
- A shell or program can rename the tab, and the window title follows it. Pass `--suppressApplicationTitle` so the capture can find the window by its demo title.
|
|
17
|
+
|
|
18
|
+
## The auto mode safety check
|
|
19
|
+
|
|
20
|
+
The Remote Control session runs in auto mode, and its classifier reads the operator's message that
|
|
21
|
+
started the session. Two launches with the same commands went two ways:
|
|
22
|
+
|
|
23
|
+
| Seed message | Result |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| The operator asked to see the mod run: "can i see it in action? build the mod and show me" | The window opened. |
|
|
26
|
+
| The operator described a design change and asked for no run | The first step, writing the launcher script, was refused: `Permission for this action was denied by the Claude Code auto mode classifier. Reason: [Auto-Mode Bypass].` |
|
|
27
|
+
|
|
28
|
+
The likely rule, inferred from these two cases: start the session on the operator's own message that asks
|
|
29
|
+
to see or run the mod, and quote that ask in the instructions. When no such message exists, ask the
|
|
30
|
+
operator in one line whether to open the window, and start the session on the answer. A refused
|
|
31
|
+
step is final for that session; report the refusal text and stop.
|
|
32
|
+
|
|
33
|
+
## Steps
|
|
34
|
+
|
|
35
|
+
1. Start a Remote Control session, on the operator's message that asks to see the mod, in a folder on
|
|
36
|
+
the operator's PC that is already approved.
|
|
37
|
+
2. Clone the mod's branch to a fresh temporary folder:
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
$dir = Join-Path $env:TEMP ('mod-demo-' + (Get-Date -Format 'HHmmss'))
|
|
41
|
+
git clone -q --depth 1 -b <branch> <repo-url> $dir
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
3. Write a launcher script that clears the inherited variables and starts Claude Code with the mod:
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
$script = Join-Path $env:TEMP 'mod-demo.ps1'
|
|
48
|
+
@"
|
|
49
|
+
Remove-Item env:NO_COLOR, env:CLAUDE_CODE_CHILD_SESSION -ErrorAction SilentlyContinue
|
|
50
|
+
Set-Location `$env:USERPROFILE
|
|
51
|
+
claude --plugin-dir '$dir\plugins\<mod>' '<one harmless prompt that fires the mod>'
|
|
52
|
+
"@ | Set-Content -Encoding utf8 $script
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
4. Open it in its own Windows Terminal window with PowerShell 7:
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
$wt = Join-Path $env:LOCALAPPDATA 'Microsoft\WindowsApps\wt.exe'
|
|
59
|
+
Start-Process $wt -ArgumentList "-w new new-tab --title `"Mod demo`" --suppressApplicationTitle pwsh -NoExit -File `"$script`""
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
5. Capture the window with [desktop-capture.md](desktop-capture.md) and check the PNG yourself.
|
|
63
|
+
6. Tell the operator the window is open and what to look at. Hand over a pasteable command only when
|
|
64
|
+
the launch failed, and say why it failed.
|
|
65
|
+
|
|
66
|
+
## Input on the operator's PC
|
|
67
|
+
|
|
68
|
+
To click, hover or type into a mod on the operator's PC, run the mod repository's driver there from the
|
|
69
|
+
Remote Control session, for example `node tools/visual-test/drive.mjs <playbook> <capture-folder>`.
|
|
70
|
+
The driver owns its pseudo-terminal, so no input goes to a desktop window, and the auto mode check has
|
|
71
|
+
nothing to refuse. One PC run of the drawer playbook passed with no refusal, where a session that sent
|
|
72
|
+
operating-system keystrokes to a demo window was refused. Post the driver's PNG captures.
|
|
73
|
+
Never send operating-system keystrokes or clicks to the demo window.
|
|
74
|
+
|
|
75
|
+
## Verification
|
|
76
|
+
|
|
77
|
+
- The operator sees the window without any click.
|
|
78
|
+
- The window shows color and runs in Windows Terminal with PowerShell 7.
|
|
79
|
+
- The mod loads with no failure line, and its toast or pane appears.
|
|
@@ -7,11 +7,9 @@ _SKILL_DIR = Path(__file__).resolve().parent
|
|
|
7
7
|
_REFRESH_PATH = _SKILL_DIR.parent / "orchestrator-refresh" / "SKILL.md"
|
|
8
8
|
_ORCHESTRATOR_PATHS = (
|
|
9
9
|
_SKILL_DIR / "SKILL.md",
|
|
10
|
-
_SKILL_DIR / "AGENTS.md",
|
|
11
10
|
_SKILL_DIR / "reference" / "consult-the-orchestrator.md",
|
|
12
11
|
_SKILL_DIR / "reference" / "executor-consult-block.md",
|
|
13
12
|
_SKILL_DIR / "reference" / "host-detect.md",
|
|
14
|
-
_SKILL_DIR / "reference" / "AGENTS.md",
|
|
15
13
|
_REFRESH_PATH,
|
|
16
14
|
)
|
|
17
15
|
_FOREIGN_MARKERS = (
|
|
@@ -8,21 +8,6 @@ description: >-
|
|
|
8
8
|
|
|
9
9
|
# Pull request
|
|
10
10
|
|
|
11
|
-
## Contents
|
|
12
|
-
|
|
13
|
-
- [Principle](#principle)
|
|
14
|
-
- [When this applies](#when-this-applies)
|
|
15
|
-
- [Constraints](#constraints)
|
|
16
|
-
- [Dependencies](#dependencies)
|
|
17
|
-
- [Sub-skills](#sub-skills)
|
|
18
|
-
- [Task seeding](#task-seeding)
|
|
19
|
-
- [Process](#process)
|
|
20
|
-
- [Exit handling](#exit-handling)
|
|
21
|
-
- [Examples](#examples)
|
|
22
|
-
- [Gotchas](#gotchas)
|
|
23
|
-
- [File index](#file-index)
|
|
24
|
-
- [Folder map](#folder-map)
|
|
25
|
-
|
|
26
11
|
## Principle
|
|
27
12
|
|
|
28
13
|
Publish one GitHub pull request action from validated local files and a
|
|
@@ -151,12 +136,8 @@ failure. Never print the value.
|
|
|
151
136
|
|
|
152
137
|
### 6. Recover a selected legacy record
|
|
153
138
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
state file. The command checks the record's age, secure file metadata, and
|
|
157
|
-
contents. The confirmation flag records that the caller verified inactivity.
|
|
158
|
-
Leave every other record untouched. Delete the selected record only after a
|
|
159
|
-
successful restore. Mark this step `N/A` when no legacy state file is selected.
|
|
139
|
+
Follow `reference/legacy-author-recovery.md` only when the user selects one
|
|
140
|
+
legacy state file. Mark this step `N/A` otherwise.
|
|
160
141
|
|
|
161
142
|
### 7. Run the action
|
|
162
143
|
|
|
@@ -185,24 +166,12 @@ only after remote readback proves the requested state.
|
|
|
185
166
|
|
|
186
167
|
## Examples
|
|
187
168
|
|
|
188
|
-
|
|
189
|
-
`pr-create`. `pull_request.py create` publishes one ready pull request. The
|
|
190
|
-
readback matches the title, body, head SHA, and draft state.
|
|
191
|
-
|
|
192
|
-
Rejected comment example: the comment body names a worktree file. The linter
|
|
193
|
-
returns a non-zero exit. No account lookup or GitHub request runs. Replace the
|
|
194
|
-
path with inline text or a permanent artifact URL, then rerun.
|
|
195
|
-
|
|
196
|
-
Recovery example: one old record remains after an interrupted legacy account
|
|
197
|
-
swap. The user selects that exact file and confirms its session is inactive.
|
|
198
|
-
The recovery command restores the named account and deletes only that record.
|
|
169
|
+
Read `reference/examples.md` for a create, a rejected comment, and a recovery.
|
|
199
170
|
|
|
200
171
|
## Gotchas
|
|
201
172
|
|
|
202
173
|
- Relative body-file paths depend on the caller directory. Use an absolute path
|
|
203
174
|
when another process or worktree starts the command.
|
|
204
|
-
- A record older than 30 minutes can still belong to a live session. Require
|
|
205
|
-
`--confirm-inactive` before recovery.
|
|
206
175
|
- Normal pull request actions never call `gh auth switch`. If that command
|
|
207
176
|
appears outside explicit recovery, stop.
|
|
208
177
|
- `gh auth switch`, `login`, and `logout` change the account for every session
|
|
@@ -217,6 +186,8 @@ The recovery command restores the named account and deletes only that record.
|
|
|
217
186
|
|---|---|
|
|
218
187
|
| `SKILL.md` | Hub for pull request publication, validation, author selection, recovery, and readback |
|
|
219
188
|
| `reference/publication-tasks.md` | Ordered tasks for every publication gate |
|
|
189
|
+
| `reference/legacy-author-recovery.md` | Recovery of one selected legacy author record |
|
|
190
|
+
| `reference/examples.md` | Worked create, rejected comment, and recovery examples |
|
|
220
191
|
| `scripts/pull_request.py` | Command for author selection and create, edit, comment, and review actions |
|
|
221
192
|
| `scripts/github_pr_command_constants/` | Constants for pull request actions, recovery, exit codes, and generic messages |
|
|
222
193
|
| `scripts/test_pull_request.py` | Tests for `pull_request.py` |
|
|
@@ -226,18 +197,3 @@ The recovery command restores the named account and deletes only that record.
|
|
|
226
197
|
| `<managed-root>/scripts/durable_post_lint.py` | Shared action-aware title, body, and path validator |
|
|
227
198
|
| `scripts/gh_artifact_upload.py` | Helper for permanent GitHub binary evidence URLs |
|
|
228
199
|
| `scripts/tests/test_gh_artifact_upload.py` | Tests for binary evidence upload |
|
|
229
|
-
|
|
230
|
-
## Folder map
|
|
231
|
-
|
|
232
|
-
```text
|
|
233
|
-
pull-request/
|
|
234
|
-
├── SKILL.md
|
|
235
|
-
├── reference/
|
|
236
|
-
│ └── publication-tasks.md
|
|
237
|
-
└── scripts/
|
|
238
|
-
├── pull_request.py
|
|
239
|
-
├── github_pr_command_constants/
|
|
240
|
-
├── recover_legacy_author.py
|
|
241
|
-
├── test_pull_request.py
|
|
242
|
-
└── test_recover_legacy_author.py
|
|
243
|
-
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Pull request examples
|
|
2
|
+
|
|
3
|
+
Create example: the writer produces `pr-body.md`. The linter exits `0` for
|
|
4
|
+
`pr-create`. `pull_request.py create` publishes one ready pull request. The
|
|
5
|
+
readback matches the title, body, head SHA, and draft state.
|
|
6
|
+
|
|
7
|
+
Rejected comment example: the comment body names a worktree file. The linter
|
|
8
|
+
returns a non-zero exit. No account lookup or GitHub request runs. Replace the
|
|
9
|
+
path with inline text or a permanent artifact URL, then rerun.
|
|
10
|
+
|
|
11
|
+
Recovery example: one old record remains after an interrupted legacy account
|
|
12
|
+
swap. The user selects that exact file and confirms its session is inactive.
|
|
13
|
+
The recovery command restores the named account and deletes only that record.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Recover a selected legacy author record
|
|
2
|
+
|
|
3
|
+
Run `.agents/skills/pull-request/scripts/recover_legacy_author.py
|
|
4
|
+
<exact-state-file> --confirm-inactive` only when the user selects one legacy
|
|
5
|
+
state file. The command checks the record's age, secure file metadata, and
|
|
6
|
+
contents. The confirmation flag records that the caller verified inactivity.
|
|
7
|
+
Leave every other record untouched. Delete the selected record only after a
|
|
8
|
+
successful restore.
|
|
9
|
+
|
|
10
|
+
A record older than 30 minutes can still belong to a live session. Require
|
|
11
|
+
`--confirm-inactive` before recovery.
|
|
@@ -32,7 +32,7 @@ const PACKAGE_SETTINGS_PATH = join(PACKAGE_ROOT, 'settings.json');
|
|
|
32
32
|
const INSTALL_ENTRY = join(PACKAGE_ROOT, 'bin', 'install.mjs');
|
|
33
33
|
|
|
34
34
|
const EXPECTED_DENY_ENTRIES = [];
|
|
35
|
-
const EXPECTED_ALLOW_ENTRIES = ['WebFetch(domain:docs.github.com)'];
|
|
35
|
+
const EXPECTED_ALLOW_ENTRIES = ['WebFetch(domain:docs.github.com)', 'Read(~/.claude/docs/**)'];
|
|
36
36
|
const PROFILE_ALLOW_ENTRIES = DECLARED_PROFILE_SETTINGS
|
|
37
37
|
.find((eachEntry) => eachEntry.keyPath.join('.') === 'permissions.allow').items;
|
|
38
38
|
const SAMPLE_MANAGED_DENY_ENTRIES = ['Edit($HOME/.claude/managed-test/**)'];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Working style
|
|
2
|
+
|
|
3
|
+
The SessionStart hook `hooks/session/working_style_prompt.py` points every session here. Read this file once, before your first reply.
|
|
4
|
+
|
|
5
|
+
## Records
|
|
6
|
+
|
|
7
|
+
- Document each task in a location that remains easy to find later.
|
|
8
|
+
- Keep a running scratch text ledger as you work.
|
|
9
|
+
|
|
10
|
+
## Presentation
|
|
11
|
+
|
|
12
|
+
- Use ELI5 for beginner framing, large visuals, minimal text, one stable self-contained HTML artifact, update-in-place continuity, and sharing when a user-facing response needs that presentation.
|
|
13
|
+
- Apply `~/.claude/rules/asd-ste100-language.md` for user-facing word choice, sentence style, tone, punctuation, and prose form.
|
|
14
|
+
- Keep responses focused, brief, and concise. Keep disclaimers and caveats short while giving the main answer most of the response.
|
|
15
|
+
- Give a high-level explanation by default and provide depth when the request calls for it.
|
|
16
|
+
- Match written-document length to the task. Cover the substance and keep every section, summary, and phrase useful.
|
|
17
|
+
- Use current, immediately relevant context. Use full terms and specific names for repository work. Keep all text concise, clear, direct, and useful.
|
|
18
|
+
|
|
19
|
+
## Replies
|
|
20
|
+
|
|
21
|
+
- On a typed request, state your next action in one sentence before the first tool call.
|
|
22
|
+
- Finish with the outcome in the first sentence.
|
|
23
|
+
- Send the user only what they must act on or need to know.
|
|
24
|
+
- When a background event, such as a task notification, an agent message, or a scheduled wake, starts a turn and nothing in it needs the user, end the turn with no text.
|
|
25
|
+
- A report that a fix is done carries three lines: the fix acknowledged, what changed, and the proof that it works. Put the rest of the detail in the pull request or a linked file.
|
|
26
|
+
|
|
27
|
+
## Scope
|
|
28
|
+
|
|
29
|
+
- Deliver the requested work at its intended scope. Make routine judgment calls yourself.
|
|
30
|
+
- Ask for direction when different interpretations would produce materially different work.
|
|
31
|
+
- When a request seems mistaken or a better approach exists, state the concern briefly and continue with the requested task.
|
|
32
|
+
- A request to remove something is complete once it is gone. Put nothing in its place, and pass a replacement idea to the requester as a question.
|
|
33
|
+
- Finish the complete task and keep actions within the requested scope.
|
|
34
|
+
|
|
35
|
+
## Questions
|
|
36
|
+
|
|
37
|
+
- When a request has multiple reasonable interpretations, state your understanding and the assumptions that shape the work.
|
|
38
|
+
- Ask one focused clarification question when the ambiguity changes the outcome, scope, audience, format, or risk.
|
|
39
|
+
- Use a clearly stated low-risk assumption when the intended result remains stable.
|
|
40
|
+
- Pause for the user's choice before making a high-impact decision.
|
|
@@ -3,43 +3,14 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
__all__ = [
|
|
6
|
+
"WORKING_STYLE_GUIDE_RELATIVE_PATH",
|
|
6
7
|
"WORKING_STYLE_PROMPT",
|
|
7
8
|
]
|
|
8
9
|
|
|
10
|
+
WORKING_STYLE_GUIDE_RELATIVE_PATH = "docs/references/working-style.md"
|
|
11
|
+
|
|
9
12
|
WORKING_STYLE_PROMPT = (
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"continuity, and sharing when a user-facing response needs that presentation. "
|
|
14
|
-
"Keep responses focused, brief, and concise. Apply ~/.claude/rules/asd-ste100-language.md for "
|
|
15
|
-
"user-facing word choice, sentence style, tone, punctuation, and prose form. "
|
|
16
|
-
"Keep disclaimers and caveats short while giving "
|
|
17
|
-
"the main answer most of the response. Give a high-level explanation by default "
|
|
18
|
-
"and provide depth when the request calls for it. "
|
|
19
|
-
"On a typed request, state your next action in one sentence before the first "
|
|
20
|
-
"tool call. "
|
|
21
|
-
"Finish with the outcome in the first sentence. "
|
|
22
|
-
"Send the user only what they must act on or need to know. When a background "
|
|
23
|
-
"event, such as a task notification, an agent message, or a scheduled wake, "
|
|
24
|
-
"starts a turn and nothing in it needs the user, end the turn with no text. A "
|
|
25
|
-
"report that a fix is done carries three lines: the fix acknowledged, what "
|
|
26
|
-
"changed, and the proof that it works. Put the rest of the detail in the pull "
|
|
27
|
-
"request or a linked file. "
|
|
28
|
-
"Match written-document length to the task. Cover the substance and keep every "
|
|
29
|
-
"section, summary, and phrase useful. "
|
|
30
|
-
"Deliver the requested work at its intended scope. Make routine judgment calls "
|
|
31
|
-
"yourself. Ask for direction when different interpretations would produce "
|
|
32
|
-
"materially different work. When a request seems mistaken or a better approach "
|
|
33
|
-
"exists, state the concern briefly and continue with the requested task. "
|
|
34
|
-
"A request to remove something is complete once it is gone. Put nothing in its "
|
|
35
|
-
"place, and pass a replacement idea to the requester as a question. Finish "
|
|
36
|
-
"the complete task and keep actions within the requested scope. "
|
|
37
|
-
"When a request has multiple reasonable interpretations, state your understanding "
|
|
38
|
-
"and the assumptions that shape the work. Ask one focused clarification question "
|
|
39
|
-
"when the ambiguity changes the outcome, scope, audience, format, or risk. Use a "
|
|
40
|
-
"clearly stated low-risk assumption when the intended result remains stable. "
|
|
41
|
-
"Pause for the user's choice before making a high-impact decision. "
|
|
42
|
-
"Use current, immediately relevant context. "
|
|
43
|
-
"Use full terms and specific names for repository work. Keep all "
|
|
44
|
-
"text concise, clear, direct, and useful."
|
|
13
|
+
f"Read ~/.claude/{WORKING_STYLE_GUIDE_RELATIVE_PATH} before your first reply. "
|
|
14
|
+
"It sets how you keep task records, present answers, reply, hold scope, and "
|
|
15
|
+
"ask questions."
|
|
45
16
|
)
|