@lovrozagar/grunt 0.3.11 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/agents/grunt.md +1 -0
- package/.agents/agents/implementer.md +1 -0
- package/.agents/agents/orchestrator.md +2 -1
- package/.agents/skills/browser/SKILL.md +17 -0
- package/.agents/skills/handoff/SKILL.md +2 -2
- package/.agents/skills/pickup/SKILL.md +64 -0
- package/.agents/skills/solo/SKILL.md +1 -1
- package/.claude/agents/grunt.md +1 -0
- package/.claude/agents/implementer.md +1 -0
- package/.claude/agents/orchestrator.md +2 -1
- package/.claude/skills/browser/SKILL.md +17 -0
- package/.claude/skills/handoff/SKILL.md +2 -2
- package/.claude/skills/pickup/SKILL.md +64 -0
- package/.claude/skills/solo/SKILL.md +1 -1
- package/.codex/agents/grunt.toml +1 -0
- package/.codex/agents/implementer.toml +1 -0
- package/.codex/agents/orchestrator.toml +2 -1
- package/.grok/agents/grunt.md +1 -0
- package/.grok/agents/implementer.md +1 -0
- package/.grok/agents/orchestrator.md +2 -1
- package/.grok/hooks/orchestrate-parent.js +1 -0
- package/.grok/skills/browser/SKILL.md +17 -0
- package/.grok/skills/handoff/SKILL.md +2 -2
- package/.grok/skills/pickup/SKILL.md +64 -0
- package/.grok/skills/solo/SKILL.md +1 -1
- package/.rulesync/reference/browser.md +59 -0
- package/.rulesync/reference/cascade.md +1 -0
- package/.rulesync/reference/hooks.md +1 -1
- package/.rulesync/reference/map.md +6 -3
- package/.rulesync/reference/rtk.md +4 -1
- package/.rulesync/rules/CLAUDE.md +2 -1
- package/.rulesync/rules/overview.md +2 -1
- package/.rulesync/skills/browser/SKILL.md +19 -0
- package/.rulesync/skills/handoff/SKILL.md +2 -2
- package/.rulesync/skills/pickup/SKILL.md +64 -0
- package/.rulesync/skills/solo/SKILL.md +1 -1
- package/.rulesync/subagents/grunt.md +1 -0
- package/.rulesync/subagents/implementer.md +1 -0
- package/.rulesync/subagents/orchestrator.md +2 -1
- package/AGENTS.md +2 -1
- package/CLAUDE.md +2 -1
- package/README.md +35 -5
- package/cli/grunt.mjs +2 -2
- package/cli/grunt.test.ts +3 -3
- package/cli/init.mjs +2 -0
- package/cli/init.test.ts +2 -0
- package/package.json +5 -2
- package/scripts/browser.mjs +764 -0
- package/scripts/doctor.mjs +252 -0
package/.agents/agents/grunt.md
CHANGED
|
@@ -25,6 +25,7 @@ Scratch/tmp → `{workspaceRoot}/.tmp/grunt/` only (mkdir as needed). Never `.tm
|
|
|
25
25
|
`job: search|exec` → first action `node scripts/grunt-job.mjs --job search|exec --query …`; whole reply = stdout.
|
|
26
26
|
`job: test` → grunt-job; `FALLBACK` (exit 2) → LLM tools.
|
|
27
27
|
`job: web` and messy test → LLM grunt (web_search/web_fetch).
|
|
28
|
+
Browser → `node scripts/browser.mjs <verb>` (`nav|snap|click|fill|shot|pdf|stop`). Lightpanda default. Never MCP. Never raw Playwright. Never env knobs.
|
|
28
29
|
Isolation/write reply ≤8 lines. Verdict grammar only — no dumps/recap/HTML/JSON/full logs:
|
|
29
30
|
|
|
30
31
|
```
|
|
@@ -16,6 +16,7 @@ Voice: `.rulesync/reference/output.md` — must follow.
|
|
|
16
16
|
|
|
17
17
|
Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
|
|
18
18
|
After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
|
|
19
|
+
DOM ⚠ → `node scripts/browser.mjs snap`. Visual ⚠ → `node scripts/browser.mjs shot`.
|
|
19
20
|
Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
|
|
20
21
|
Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
|
|
21
22
|
TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
|
|
@@ -28,6 +28,7 @@ Always-do:
|
|
|
28
28
|
| children done + no findings | recap; stop allowed only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
29
29
|
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
30
30
|
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
31
|
+
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
31
32
|
| `/write-plan` plan-only | recap + `next: /implement-plan` |
|
|
32
33
|
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
33
34
|
| `/solo` | session escape only; stamp grunt-off-{sid}; else spawn-first |
|
|
@@ -39,4 +40,4 @@ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ←
|
|
|
39
40
|
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
|
|
40
41
|
Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
|
|
41
42
|
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
42
|
-
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow.
|
|
43
|
+
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow. `/pickup` spawn-first; grunt resolve if needed; never parent Read; not a mode.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: >
|
|
4
|
+
Session browser rail. /browser or browse a URL. Call node scripts/browser.mjs
|
|
5
|
+
nav|snap|click|fill|shot|pdf|stop. Lightpanda default; snap is the default
|
|
6
|
+
read. Windows → Chromium. Never MCP. Never env knobs. Never raw Playwright.
|
|
7
|
+
---
|
|
8
|
+
Zero-config. `node scripts/browser.mjs <verb>`.
|
|
9
|
+
|
|
10
|
+
Verbs: `nav <url>` · `snap` · `click <ref>` · `fill <ref> <text>` · `shot` · `pdf` · `stop` · `doctor` · `ensure`.
|
|
11
|
+
|
|
12
|
+
- **snap** = default read (markdown + numbered refs). `click`/`fill` need a prior snap.
|
|
13
|
+
- Lightpanda default. Chromium when `shot`/`pdf`/`trace`, win32, missing Lightpanda, probe-fail once, or paint hosts (figma docs/sheets/slides mail.google earth).
|
|
14
|
+
- Session/profile: `.tmp/grunt/browser/`. `stop` reaps; second `stop` ok.
|
|
15
|
+
- Windows: Chromium even if Lightpanda exists.
|
|
16
|
+
- `doctor`/`ensure` → `node scripts/doctor.mjs` or `grunt doctor`. See README Prerequisites.
|
|
17
|
+
- No env. No MCP. No raw Playwright. Spec: `.rulesync/reference/browser.md`.
|
|
@@ -67,14 +67,14 @@ Host without that hook: name the file per **Path** yourself, or pipe the body to
|
|
|
67
67
|
|
|
68
68
|
```
|
|
69
69
|
[handoff]: serial={int} path=.tmp/grunt/handoffs/{serial}-{slug}-{stamp}.md
|
|
70
|
-
next: start a new session;
|
|
70
|
+
next: start a new session; `/pickup {serial}` (equiv: spawn grunt|implementer with abs path={that file})
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
Do not dump the handoff body.
|
|
74
74
|
|
|
75
75
|
## Picking one up
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
`/pickup {serial}` owns pickup (equiv: spawn grunt|implementer with abs path). Parent never Read. Child sets `status: resumed`, work `Next` leaves in order, flip only the box. All `[x]` → `status: done`. Do not re-plan; a stale leaf → `/write-plan` a follow-up.
|
|
78
78
|
|
|
79
79
|
## Rules
|
|
80
80
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pickup
|
|
3
|
+
description: >
|
|
4
|
+
Pick up/continue a session handoff under .tmp/grunt/handoffs/. Use for
|
|
5
|
+
/pickup, pick up, continue handoff, serial, drag-drop path,
|
|
6
|
+
newest/last/latest, title substring. Inverse of /handoff. Not a plan. Not
|
|
7
|
+
/handoff.
|
|
8
|
+
---
|
|
9
|
+
# pickup
|
|
10
|
+
|
|
11
|
+
Voice: `.rulesync/reference/output.md`.
|
|
12
|
+
|
|
13
|
+
Spawn-first pickup. Parent never Read/Bash/list the handoff. First token = spawn. No ask_user_question. Ask = recap list + stop; wait next user turn. Not a mode. Not `/handoff`. Inverse of `/handoff`. Pickup owns pickup.
|
|
14
|
+
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
- `/pickup`
|
|
18
|
+
- `/pickup latest` (also `newest`/`last`)
|
|
19
|
+
- `/pickup {serial}`
|
|
20
|
+
- `/pickup {abs|rel|drag-drop path}`
|
|
21
|
+
- `/pickup {title substring}`
|
|
22
|
+
|
|
23
|
+
## Resolve
|
|
24
|
+
|
|
25
|
+
Via grunt (`job:exec|search` on `.tmp/grunt/handoffs/`). Skip grunt only if user arg is already abs path under that dir.
|
|
26
|
+
|
|
27
|
+
Order:
|
|
28
|
+
|
|
29
|
+
1. path-like → file if exists + FILENAME_RE `^[0-9]+-[a-z0-9]+(-[a-z0-9]+)*-\d{8}T\d{6}Z\.md$`
|
|
30
|
+
2. integer → FM serial or filename prefix
|
|
31
|
+
3. latest|newest|last → newest by FM `created`
|
|
32
|
+
4. else case-insensitive substring on name/source/H1
|
|
33
|
+
5. empty arg: 0→none; 1→auto; N→list+ask (**not** auto-newest)
|
|
34
|
+
|
|
35
|
+
List lines: serial status name created path. Prefer open|resumed first; still include done.
|
|
36
|
+
|
|
37
|
+
Matches: 0→recap missing; 1→proceed; N→list+ask never guess.
|
|
38
|
+
|
|
39
|
+
Empty/missing dir: recap no handoffs; stop.
|
|
40
|
+
|
|
41
|
+
Drag outside handoffs dir or non-FILENAME_RE: reject; list valid.
|
|
42
|
+
|
|
43
|
+
Corrupt FM: grunt reports; no implementer on garbage.
|
|
44
|
+
|
|
45
|
+
status done + explicit serial/path: warn; still load if user named it.
|
|
46
|
+
|
|
47
|
+
## After unique path
|
|
48
|
+
|
|
49
|
+
Spawn implementer with abs path (default). Child: load file; `status: resumed`; Next leaves in order; flip only that box; all `[x]` → `status: done`; do not re-plan; stale → `/write-plan`. Child Edit in place. Never persist-handoff.mjs on pickup. No parent Write on resume.
|
|
50
|
+
|
|
51
|
+
## Recap
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
serial={int} path={abs}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Do not invent a new role tag.
|
|
58
|
+
|
|
59
|
+
## Rules
|
|
60
|
+
|
|
61
|
+
- Parent never Read/Bash/list. First token = spawn.
|
|
62
|
+
- No ask_user_question. Ask = recap list + stop.
|
|
63
|
+
- `/handoff` stays one-turn write. This skill owns pickup.
|
|
64
|
+
- Protocol: `.rulesync/reference/cascade.md`. Do not paste.
|
|
@@ -18,6 +18,6 @@ Fat-tool caps stay on — token guards, not cascade.
|
|
|
18
18
|
|
|
19
19
|
Claude/Codex/Grok: `/solo` via submit hook writes `.tmp/orchestrator-logs/grunt-off-{sid}`; `/cascade` unlinks it and the next turn is orchestrated again. Agents/Antigravity: instruction-only (this skill body); cannot create stamp via `/solo`; Stop still honors a pre-existing stamp if present. Session-scoped, never global.
|
|
20
20
|
|
|
21
|
-
This is the only session-wide spawn-workflow escape. /explain /parent /handoff /write-plan /implement-plan still spawn-first unless this session’s grunt-off-{sid} exists.
|
|
21
|
+
This is the only session-wide spawn-workflow escape. /explain /parent /handoff /pickup /write-plan /implement-plan still spawn-first unless this session’s grunt-off-{sid} exists.
|
|
22
22
|
|
|
23
23
|
For advisory/design turns, debugging the cascade itself, or back-and-forth where spawning costs more than it saves.
|
package/.claude/agents/grunt.md
CHANGED
|
@@ -31,6 +31,7 @@ Scratch/tmp → `{workspaceRoot}/.tmp/grunt/` only (mkdir as needed). Never `.tm
|
|
|
31
31
|
`job: search|exec` → first action `node scripts/grunt-job.mjs --job search|exec --query …`; whole reply = stdout.
|
|
32
32
|
`job: test` → grunt-job; `FALLBACK` (exit 2) → LLM tools.
|
|
33
33
|
`job: web` and messy test → LLM grunt (WebSearch/WebFetch).
|
|
34
|
+
Browser → `node scripts/browser.mjs <verb>` (`nav|snap|click|fill|shot|pdf|stop`). Lightpanda default. Never MCP. Never raw Playwright. Never env knobs.
|
|
34
35
|
Isolation/write reply ≤8 lines. Verdict grammar only — no dumps/recap/HTML/JSON/full logs:
|
|
35
36
|
|
|
36
37
|
```
|
|
@@ -19,6 +19,7 @@ Voice: `.rulesync/reference/output.md` — must follow.
|
|
|
19
19
|
|
|
20
20
|
Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
|
|
21
21
|
After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
|
|
22
|
+
DOM ⚠ → `node scripts/browser.mjs snap`. Visual ⚠ → `node scripts/browser.mjs shot`.
|
|
22
23
|
Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
|
|
23
24
|
Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
|
|
24
25
|
TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
|
|
@@ -31,6 +31,7 @@ Always-do:
|
|
|
31
31
|
| children done + no findings | recap; stop allowed only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
32
32
|
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
33
33
|
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
34
|
+
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
34
35
|
| `/write-plan` plan-only | recap + `next: /implement-plan` |
|
|
35
36
|
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
36
37
|
| `/solo` | session escape only; stamp grunt-off-{sid}; else spawn-first |
|
|
@@ -42,4 +43,4 @@ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ←
|
|
|
42
43
|
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
|
|
43
44
|
Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
|
|
44
45
|
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
45
|
-
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow.
|
|
46
|
+
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow. `/pickup` spawn-first; grunt resolve if needed; never parent Read; not a mode.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: >
|
|
4
|
+
Session browser rail. /browser or browse a URL. Call node scripts/browser.mjs
|
|
5
|
+
nav|snap|click|fill|shot|pdf|stop. Lightpanda default; snap is the default
|
|
6
|
+
read. Windows → Chromium. Never MCP. Never env knobs. Never raw Playwright.
|
|
7
|
+
---
|
|
8
|
+
Zero-config. `node scripts/browser.mjs <verb>`.
|
|
9
|
+
|
|
10
|
+
Verbs: `nav <url>` · `snap` · `click <ref>` · `fill <ref> <text>` · `shot` · `pdf` · `stop` · `doctor` · `ensure`.
|
|
11
|
+
|
|
12
|
+
- **snap** = default read (markdown + numbered refs). `click`/`fill` need a prior snap.
|
|
13
|
+
- Lightpanda default. Chromium when `shot`/`pdf`/`trace`, win32, missing Lightpanda, probe-fail once, or paint hosts (figma docs/sheets/slides mail.google earth).
|
|
14
|
+
- Session/profile: `.tmp/grunt/browser/`. `stop` reaps; second `stop` ok.
|
|
15
|
+
- Windows: Chromium even if Lightpanda exists.
|
|
16
|
+
- `doctor`/`ensure` → `node scripts/doctor.mjs` or `grunt doctor`. See README Prerequisites.
|
|
17
|
+
- No env. No MCP. No raw Playwright. Spec: `.rulesync/reference/browser.md`.
|
|
@@ -67,14 +67,14 @@ Host without that hook: name the file per **Path** yourself, or pipe the body to
|
|
|
67
67
|
|
|
68
68
|
```
|
|
69
69
|
[handoff]: serial={int} path=.tmp/grunt/handoffs/{serial}-{slug}-{stamp}.md
|
|
70
|
-
next: start a new session;
|
|
70
|
+
next: start a new session; `/pickup {serial}` (equiv: spawn grunt|implementer with abs path={that file})
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
Do not dump the handoff body.
|
|
74
74
|
|
|
75
75
|
## Picking one up
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
`/pickup {serial}` owns pickup (equiv: spawn grunt|implementer with abs path). Parent never Read. Child sets `status: resumed`, work `Next` leaves in order, flip only the box. All `[x]` → `status: done`. Do not re-plan; a stale leaf → `/write-plan` a follow-up.
|
|
78
78
|
|
|
79
79
|
## Rules
|
|
80
80
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pickup
|
|
3
|
+
description: >
|
|
4
|
+
Pick up/continue a session handoff under .tmp/grunt/handoffs/. Use for
|
|
5
|
+
/pickup, pick up, continue handoff, serial, drag-drop path,
|
|
6
|
+
newest/last/latest, title substring. Inverse of /handoff. Not a plan. Not
|
|
7
|
+
/handoff.
|
|
8
|
+
---
|
|
9
|
+
# pickup
|
|
10
|
+
|
|
11
|
+
Voice: `.rulesync/reference/output.md`.
|
|
12
|
+
|
|
13
|
+
Spawn-first pickup. Parent never Read/Bash/list the handoff. First token = spawn. No ask_user_question. Ask = recap list + stop; wait next user turn. Not a mode. Not `/handoff`. Inverse of `/handoff`. Pickup owns pickup.
|
|
14
|
+
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
- `/pickup`
|
|
18
|
+
- `/pickup latest` (also `newest`/`last`)
|
|
19
|
+
- `/pickup {serial}`
|
|
20
|
+
- `/pickup {abs|rel|drag-drop path}`
|
|
21
|
+
- `/pickup {title substring}`
|
|
22
|
+
|
|
23
|
+
## Resolve
|
|
24
|
+
|
|
25
|
+
Via grunt (`job:exec|search` on `.tmp/grunt/handoffs/`). Skip grunt only if user arg is already abs path under that dir.
|
|
26
|
+
|
|
27
|
+
Order:
|
|
28
|
+
|
|
29
|
+
1. path-like → file if exists + FILENAME_RE `^[0-9]+-[a-z0-9]+(-[a-z0-9]+)*-\d{8}T\d{6}Z\.md$`
|
|
30
|
+
2. integer → FM serial or filename prefix
|
|
31
|
+
3. latest|newest|last → newest by FM `created`
|
|
32
|
+
4. else case-insensitive substring on name/source/H1
|
|
33
|
+
5. empty arg: 0→none; 1→auto; N→list+ask (**not** auto-newest)
|
|
34
|
+
|
|
35
|
+
List lines: serial status name created path. Prefer open|resumed first; still include done.
|
|
36
|
+
|
|
37
|
+
Matches: 0→recap missing; 1→proceed; N→list+ask never guess.
|
|
38
|
+
|
|
39
|
+
Empty/missing dir: recap no handoffs; stop.
|
|
40
|
+
|
|
41
|
+
Drag outside handoffs dir or non-FILENAME_RE: reject; list valid.
|
|
42
|
+
|
|
43
|
+
Corrupt FM: grunt reports; no implementer on garbage.
|
|
44
|
+
|
|
45
|
+
status done + explicit serial/path: warn; still load if user named it.
|
|
46
|
+
|
|
47
|
+
## After unique path
|
|
48
|
+
|
|
49
|
+
Spawn implementer with abs path (default). Child: load file; `status: resumed`; Next leaves in order; flip only that box; all `[x]` → `status: done`; do not re-plan; stale → `/write-plan`. Child Edit in place. Never persist-handoff.mjs on pickup. No parent Write on resume.
|
|
50
|
+
|
|
51
|
+
## Recap
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
serial={int} path={abs}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Do not invent a new role tag.
|
|
58
|
+
|
|
59
|
+
## Rules
|
|
60
|
+
|
|
61
|
+
- Parent never Read/Bash/list. First token = spawn.
|
|
62
|
+
- No ask_user_question. Ask = recap list + stop.
|
|
63
|
+
- `/handoff` stays one-turn write. This skill owns pickup.
|
|
64
|
+
- Protocol: `.rulesync/reference/cascade.md`. Do not paste.
|
|
@@ -18,6 +18,6 @@ Fat-tool caps stay on — token guards, not cascade.
|
|
|
18
18
|
|
|
19
19
|
Claude/Codex/Grok: `/solo` via submit hook writes `.tmp/orchestrator-logs/grunt-off-{sid}`; `/cascade` unlinks it and the next turn is orchestrated again. Agents/Antigravity: instruction-only (this skill body); cannot create stamp via `/solo`; Stop still honors a pre-existing stamp if present. Session-scoped, never global.
|
|
20
20
|
|
|
21
|
-
This is the only session-wide spawn-workflow escape. /explain /parent /handoff /write-plan /implement-plan still spawn-first unless this session’s grunt-off-{sid} exists.
|
|
21
|
+
This is the only session-wide spawn-workflow escape. /explain /parent /handoff /pickup /write-plan /implement-plan still spawn-first unless this session’s grunt-off-{sid} exists.
|
|
22
22
|
|
|
23
23
|
For advisory/design turns, debugging the cascade itself, or back-and-forth where spawning costs more than it saves.
|
package/.codex/agents/grunt.toml
CHANGED
|
@@ -18,6 +18,7 @@ Scratch/tmp → `{workspaceRoot}/.tmp/grunt/` only (mkdir as needed). Never `.tm
|
|
|
18
18
|
`job: search|exec` → first action `node scripts/grunt-job.mjs --job search|exec --query …`; whole reply = stdout.
|
|
19
19
|
`job: test` → grunt-job; `FALLBACK` (exit 2) → LLM tools.
|
|
20
20
|
`job: web` and messy test → LLM grunt (web_search/web_fetch).
|
|
21
|
+
Browser → `node scripts/browser.mjs <verb>` (`nav|snap|click|fill|shot|pdf|stop`). Lightpanda default. Never MCP. Never raw Playwright. Never env knobs.
|
|
21
22
|
Isolation/write reply ≤8 lines. Verdict grammar only — no dumps/recap/HTML/JSON/full logs:
|
|
22
23
|
|
|
23
24
|
```
|
|
@@ -9,6 +9,7 @@ Voice: `.rulesync/reference/output.md` — must follow.
|
|
|
9
9
|
|
|
10
10
|
Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
|
|
11
11
|
After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
|
|
12
|
+
DOM ⚠ → `node scripts/browser.mjs snap`. Visual ⚠ → `node scripts/browser.mjs shot`.
|
|
12
13
|
Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
|
|
13
14
|
Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
|
|
14
15
|
TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
|
|
@@ -25,6 +25,7 @@ Always-do:
|
|
|
25
25
|
| children done + no findings | recap; stop allowed only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
26
26
|
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
27
27
|
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
28
|
+
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
28
29
|
| `/write-plan` plan-only | recap + `next: /implement-plan` |
|
|
29
30
|
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
30
31
|
| `/solo` | session escape only; stamp grunt-off-{sid}; else spawn-first |
|
|
@@ -36,5 +37,5 @@ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ←
|
|
|
36
37
|
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
|
|
37
38
|
Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
|
|
38
39
|
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
39
|
-
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow.
|
|
40
|
+
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow. `/pickup` spawn-first; grunt resolve if needed; never parent Read; not a mode.
|
|
40
41
|
'''
|
package/.grok/agents/grunt.md
CHANGED
|
@@ -20,6 +20,7 @@ Scratch/tmp → `{workspaceRoot}/.tmp/grunt/` only (mkdir as needed). Never `.tm
|
|
|
20
20
|
`job: search|exec` → first action `node scripts/grunt-job.mjs --job search|exec --query …`; whole reply = stdout.
|
|
21
21
|
`job: test` → grunt-job; `FALLBACK` (exit 2) → LLM tools.
|
|
22
22
|
`job: web` and messy test → LLM grunt (web_search/web_fetch).
|
|
23
|
+
Browser → `node scripts/browser.mjs <verb>` (`nav|snap|click|fill|shot|pdf|stop`). Lightpanda default. Never MCP. Never raw Playwright. Never env knobs.
|
|
23
24
|
Isolation/write reply ≤8 lines. Verdict grammar only — no dumps/recap/HTML/JSON/full logs:
|
|
24
25
|
|
|
25
26
|
```
|
|
@@ -11,6 +11,7 @@ Voice: `.rulesync/reference/output.md` — must follow.
|
|
|
11
11
|
|
|
12
12
|
Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
|
|
13
13
|
After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
|
|
14
|
+
DOM ⚠ → `node scripts/browser.mjs snap`. Visual ⚠ → `node scripts/browser.mjs shot`.
|
|
14
15
|
Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
|
|
15
16
|
Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
|
|
16
17
|
TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
|
|
@@ -27,6 +27,7 @@ Always-do:
|
|
|
27
27
|
| children done + no findings | recap; stop allowed only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
28
28
|
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
29
29
|
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
30
|
+
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
30
31
|
| `/write-plan` plan-only | recap + `next: /implement-plan` |
|
|
31
32
|
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
32
33
|
| `/solo` | session escape only; stamp grunt-off-{sid}; else spawn-first |
|
|
@@ -38,4 +39,4 @@ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ←
|
|
|
38
39
|
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
|
|
39
40
|
Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
|
|
40
41
|
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
41
|
-
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow.
|
|
42
|
+
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow. `/pickup` spawn-first; grunt resolve if needed; never parent Read; not a mode.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: >
|
|
4
|
+
Session browser rail. /browser or browse a URL. Call node scripts/browser.mjs
|
|
5
|
+
nav|snap|click|fill|shot|pdf|stop. Lightpanda default; snap is the default
|
|
6
|
+
read. Windows → Chromium. Never MCP. Never env knobs. Never raw Playwright.
|
|
7
|
+
---
|
|
8
|
+
Zero-config. `node scripts/browser.mjs <verb>`.
|
|
9
|
+
|
|
10
|
+
Verbs: `nav <url>` · `snap` · `click <ref>` · `fill <ref> <text>` · `shot` · `pdf` · `stop` · `doctor` · `ensure`.
|
|
11
|
+
|
|
12
|
+
- **snap** = default read (markdown + numbered refs). `click`/`fill` need a prior snap.
|
|
13
|
+
- Lightpanda default. Chromium when `shot`/`pdf`/`trace`, win32, missing Lightpanda, probe-fail once, or paint hosts (figma docs/sheets/slides mail.google earth).
|
|
14
|
+
- Session/profile: `.tmp/grunt/browser/`. `stop` reaps; second `stop` ok.
|
|
15
|
+
- Windows: Chromium even if Lightpanda exists.
|
|
16
|
+
- `doctor`/`ensure` → `node scripts/doctor.mjs` or `grunt doctor`. See README Prerequisites.
|
|
17
|
+
- No env. No MCP. No raw Playwright. Spec: `.rulesync/reference/browser.md`.
|
|
@@ -67,14 +67,14 @@ Host without that hook: name the file per **Path** yourself, or pipe the body to
|
|
|
67
67
|
|
|
68
68
|
```
|
|
69
69
|
[handoff]: serial={int} path=.tmp/grunt/handoffs/{serial}-{slug}-{stamp}.md
|
|
70
|
-
next: start a new session;
|
|
70
|
+
next: start a new session; `/pickup {serial}` (equiv: spawn grunt|implementer with abs path={that file})
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
Do not dump the handoff body.
|
|
74
74
|
|
|
75
75
|
## Picking one up
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
`/pickup {serial}` owns pickup (equiv: spawn grunt|implementer with abs path). Parent never Read. Child sets `status: resumed`, work `Next` leaves in order, flip only the box. All `[x]` → `status: done`. Do not re-plan; a stale leaf → `/write-plan` a follow-up.
|
|
78
78
|
|
|
79
79
|
## Rules
|
|
80
80
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pickup
|
|
3
|
+
description: >
|
|
4
|
+
Pick up/continue a session handoff under .tmp/grunt/handoffs/. Use for
|
|
5
|
+
/pickup, pick up, continue handoff, serial, drag-drop path,
|
|
6
|
+
newest/last/latest, title substring. Inverse of /handoff. Not a plan. Not
|
|
7
|
+
/handoff.
|
|
8
|
+
---
|
|
9
|
+
# pickup
|
|
10
|
+
|
|
11
|
+
Voice: `.rulesync/reference/output.md`.
|
|
12
|
+
|
|
13
|
+
Spawn-first pickup. Parent never Read/Bash/list the handoff. First token = spawn. No ask_user_question. Ask = recap list + stop; wait next user turn. Not a mode. Not `/handoff`. Inverse of `/handoff`. Pickup owns pickup.
|
|
14
|
+
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
- `/pickup`
|
|
18
|
+
- `/pickup latest` (also `newest`/`last`)
|
|
19
|
+
- `/pickup {serial}`
|
|
20
|
+
- `/pickup {abs|rel|drag-drop path}`
|
|
21
|
+
- `/pickup {title substring}`
|
|
22
|
+
|
|
23
|
+
## Resolve
|
|
24
|
+
|
|
25
|
+
Via grunt (`job:exec|search` on `.tmp/grunt/handoffs/`). Skip grunt only if user arg is already abs path under that dir.
|
|
26
|
+
|
|
27
|
+
Order:
|
|
28
|
+
|
|
29
|
+
1. path-like → file if exists + FILENAME_RE `^[0-9]+-[a-z0-9]+(-[a-z0-9]+)*-\d{8}T\d{6}Z\.md$`
|
|
30
|
+
2. integer → FM serial or filename prefix
|
|
31
|
+
3. latest|newest|last → newest by FM `created`
|
|
32
|
+
4. else case-insensitive substring on name/source/H1
|
|
33
|
+
5. empty arg: 0→none; 1→auto; N→list+ask (**not** auto-newest)
|
|
34
|
+
|
|
35
|
+
List lines: serial status name created path. Prefer open|resumed first; still include done.
|
|
36
|
+
|
|
37
|
+
Matches: 0→recap missing; 1→proceed; N→list+ask never guess.
|
|
38
|
+
|
|
39
|
+
Empty/missing dir: recap no handoffs; stop.
|
|
40
|
+
|
|
41
|
+
Drag outside handoffs dir or non-FILENAME_RE: reject; list valid.
|
|
42
|
+
|
|
43
|
+
Corrupt FM: grunt reports; no implementer on garbage.
|
|
44
|
+
|
|
45
|
+
status done + explicit serial/path: warn; still load if user named it.
|
|
46
|
+
|
|
47
|
+
## After unique path
|
|
48
|
+
|
|
49
|
+
Spawn implementer with abs path (default). Child: load file; `status: resumed`; Next leaves in order; flip only that box; all `[x]` → `status: done`; do not re-plan; stale → `/write-plan`. Child Edit in place. Never persist-handoff.mjs on pickup. No parent Write on resume.
|
|
50
|
+
|
|
51
|
+
## Recap
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
serial={int} path={abs}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Do not invent a new role tag.
|
|
58
|
+
|
|
59
|
+
## Rules
|
|
60
|
+
|
|
61
|
+
- Parent never Read/Bash/list. First token = spawn.
|
|
62
|
+
- No ask_user_question. Ask = recap list + stop.
|
|
63
|
+
- `/handoff` stays one-turn write. This skill owns pickup.
|
|
64
|
+
- Protocol: `.rulesync/reference/cascade.md`. Do not paste.
|
|
@@ -18,6 +18,6 @@ Fat-tool caps stay on — token guards, not cascade.
|
|
|
18
18
|
|
|
19
19
|
Claude/Codex/Grok: `/solo` via submit hook writes `.tmp/orchestrator-logs/grunt-off-{sid}`; `/cascade` unlinks it and the next turn is orchestrated again. Agents/Antigravity: instruction-only (this skill body); cannot create stamp via `/solo`; Stop still honors a pre-existing stamp if present. Session-scoped, never global.
|
|
20
20
|
|
|
21
|
-
This is the only session-wide spawn-workflow escape. /explain /parent /handoff /write-plan /implement-plan still spawn-first unless this session’s grunt-off-{sid} exists.
|
|
21
|
+
This is the only session-wide spawn-workflow escape. /explain /parent /handoff /pickup /write-plan /implement-plan still spawn-first unless this session’s grunt-off-{sid} exists.
|
|
22
22
|
|
|
23
23
|
For advisory/design turns, debugging the cascade itself, or back-and-forth where spawning costs more than it saves.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [browser]
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Browser
|
|
6
|
+
|
|
7
|
+
Zero-config in-tree session rail. Not MCP. Not env. Not raw Playwright.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
node scripts/browser.mjs nav|snap|click|fill|shot|pdf|stop|doctor|ensure
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Default engine: **Lightpanda** (`lightpanda` on PATH). Chromium only when a rule below requires it.
|
|
14
|
+
|
|
15
|
+
## Verbs
|
|
16
|
+
|
|
17
|
+
| verb | purpose |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| `nav <url>` | launch or reuse session; go to URL |
|
|
20
|
+
| `snap` | markdown + numbered AX refs (default read) |
|
|
21
|
+
| `click <ref>` | click a ref from last `snap` |
|
|
22
|
+
| `fill <ref> <text>` | fill a ref from last `snap` |
|
|
23
|
+
| `shot` | screenshot (Chromium paint) |
|
|
24
|
+
| `pdf` | PDF (Chromium paint) |
|
|
25
|
+
| `stop` | reap engine pid; clear session; idempotent |
|
|
26
|
+
| `doctor` | unified prereq doctor (`scripts/doctor.mjs`); alias `ensure` |
|
|
27
|
+
| `ensure` | alias of `doctor` |
|
|
28
|
+
|
|
29
|
+
Session + profile + artifacts: `.tmp/grunt/browser/` only.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
Run `grunt doctor` / `node scripts/doctor.mjs`. See README Prerequisites.
|
|
34
|
+
|
|
35
|
+
## Engine
|
|
36
|
+
|
|
37
|
+
Lightpanda first (`lightpanda serve` internally, CDP, `LP.getMarkdown` + AX refs).
|
|
38
|
+
|
|
39
|
+
Chromium immediately when any of:
|
|
40
|
+
|
|
41
|
+
- verb is `shot` | `pdf` | `trace`
|
|
42
|
+
- `process.platform === "win32"`
|
|
43
|
+
- paint-host URL (tiny set): figma, Google docs / sheets / slides, mail.google, earth
|
|
44
|
+
- `lightpanda` missing from PATH and a Chromium binary is present
|
|
45
|
+
- Lightpanda probe fails **once** → one Chromium replay of last URL; no loop
|
|
46
|
+
|
|
47
|
+
No user env. Never `GRUNT_BROWSER*`. Never `LIGHTPANDA_CDP_URL`.
|
|
48
|
+
|
|
49
|
+
## Non-goals
|
|
50
|
+
|
|
51
|
+
- MCP browser servers
|
|
52
|
+
- user env knobs
|
|
53
|
+
- raw Playwright as the agent tool
|
|
54
|
+
- grunt `job:browse`
|
|
55
|
+
- teaching thinker / orchestrator to browse
|
|
56
|
+
|
|
57
|
+
## RTK
|
|
58
|
+
|
|
59
|
+
`playwright` on the RTK command list is the **test-runner family only**. Browser rail is `lightpanda` + `scripts/browser.mjs`.
|
|
@@ -37,6 +37,7 @@ Then print recap as `[orchestrator]: …` (or the child role tag) with real chil
|
|
|
37
37
|
|
|
38
38
|
Parent Stop (`MAX_STOP=3`): do not waive fenced/impl finals for `tools-used` stamp. Parent `end_turn` is tagged+one-line or `[orchestrator]: wait grunt`. First non-empty line must match legal `[orchestrator|grunt|implementer|thinker|handoff]:`. Siblings still run → role tag + one-line echo. In-flight wait recap is `[orchestrator]: wait grunt` only. Or consume `parent-escape-{sid}` once. Else block. No `isCheap` / trivia / long definitions.
|
|
39
39
|
`/handoff` is the other in-parent turn: context large + work unfinished → parent writes one `.tmp/grunt/handoffs/` file from its own transcript (no child sees the session), recaps `[handoff]: serial=… path=…`, tells the user to continue in a new session. No spawn, one write, not a mode.
|
|
40
|
+
`/pickup` is spawn-first pickup, not in-parent write; parent never Read. Inverse of `/handoff`.
|
|
40
41
|
`/solo` is the session mode (not one-turn): `beforeSubmitPrompt` writes `.tmp/orchestrator-logs/grunt-off-{sid}`, every gate short-circuits while it exists, `/cascade` unlinks it. Everything above resumes next turn. Antigravity: skill-only, no stamp create (see hooks.md). `/parent` is last-ditch hook stamp (not a mode, not skill-instructed Read/Bash): UserPromptSubmit writes `.tmp/orchestrator-logs/parent-escape-{sid}`; Stop consumes+unlinks once. Next Stop resumes spawn/recap rules. `/explain` is human recap after children; never parent Read; not a mode; not spawn-escape. Skills point here; do not paste this file. Never parent-Read protocol files.
|
|
41
42
|
|
|
42
43
|
Host mapping (in-tree only; do not invent peek/kill APIs). GAP rows: no fake peeks, no auto-kill.
|
|
@@ -10,7 +10,7 @@ Grok PostToolUse / UserPromptSubmit / SessionStart are observe-only — do not a
|
|
|
10
10
|
|
|
11
11
|
Claude / Codex / Antigravity PreToolUse still run `scripts/scrub-spawn-prompt.mjs` and `scripts/gate-fat-tools.mjs`. Grok does not — spawn/fat rewrite is `orchestrate-parent.js` only. RTK stays `rtk.json`.
|
|
12
12
|
|
|
13
|
-
Parent Read|Write|Edit|Bash|Skill deny unless `/solo` (session) or `/parent` last-ditch stamp. Grok PreToolUse has no matcher (Read included). Skills spawn-first; do not instruct parent Read/Bash. `.tmp/plans/` and `.tmp/grunt/handoffs/` Write still persist. Parent Bash still allowed for workspace `grunt-job.mjs` `--job search|exec`. Children with a type skip parent-deny (fat-only). Skill allowlist without escape: `parent|explain|solo|cascade|handoff|write-plan|implement-plan`. Deny reason: `First action=spawn implementer|grunt|thinker. Deny expected. Only /solo this session escapes.`. Parent `end_turn` is tagged+one-line or `[orchestrator]: wait grunt`.
|
|
13
|
+
Parent Read|Write|Edit|Bash|Skill deny unless `/solo` (session) or `/parent` last-ditch stamp. Grok PreToolUse has no matcher (Read included). Skills spawn-first; do not instruct parent Read/Bash. `.tmp/plans/` and `.tmp/grunt/handoffs/` Write still persist. Parent Bash still allowed for workspace `grunt-job.mjs` `--job search|exec`. Children with a type skip parent-deny (fat-only). Skill allowlist without escape: `parent|explain|solo|cascade|handoff|pickup|write-plan|implement-plan`. Deny reason: `First action=spawn implementer|grunt|thinker. Deny expected. Only /solo this session escapes.`. Parent `end_turn` is tagged+one-line or `[orchestrator]: wait grunt`.
|
|
14
14
|
|
|
15
15
|
Parent `run_terminal_command` is deny-by-default except `node` (optional leading `rtk`) invoking `{workspace}/scripts/grunt-job.mjs` with `--job search|exec` and `--query`. Optional `--path` `--glob` (repeatable) `--cwd`. Not `web|test`, not other scripts. META strips `--query` value first so `|` inside query is allowed; pipes/`&&` outside query still deny. Never `cd &&`. Exec shell-meta in query is grunt-job FALLBACK (exit 2), not a parent-bash allow. Unknown flags → FALLBACK.
|
|
16
16
|
|
|
@@ -9,6 +9,7 @@ Cheap outline. Not a file dump.
|
|
|
9
9
|
## Protocol
|
|
10
10
|
- `.rulesync/reference/cascade.md` — spawn / need / resume
|
|
11
11
|
- `.rulesync/reference/rtk.md` — shell compression
|
|
12
|
+
- `.rulesync/reference/browser.md` — Lightpanda-first session CLI (`nav|snap|click|fill|shot|pdf|stop`); not MCP
|
|
12
13
|
- `.rulesync/reference/hooks.md` — hook policy
|
|
13
14
|
- `.rulesync/reference/map.md` — this file
|
|
14
15
|
- `.rulesync/reference/output.md` — default voice
|
|
@@ -23,13 +24,13 @@ Cheap outline. Not a file dump.
|
|
|
23
24
|
- `.grok/hooks/orchestrate-parent.js` + `orchestrate-parent.json` — parent spawn/fat/stop/plan-write / SubagentStop intercept
|
|
24
25
|
- `.grok/hooks/rtk.json` — RTK
|
|
25
26
|
- `.grok/skills/{write-plan,implement-plan,shared}/` — hand-only (no rulesync SSOT); point to cascade, do not paste
|
|
26
|
-
- `.grok/skills/{parent,explain,handoff,solo,cascade,commit,commit-and-push,commit-push,commit-push-deploy,commit-push-release}/` — generated from `.rulesync/skills/`; do not hand-edit
|
|
27
|
+
- `.grok/skills/{parent,explain,handoff,pickup,solo,cascade,commit,commit-and-push,commit-push,commit-push-deploy,commit-push-release}/` — generated from `.rulesync/skills/`; do not hand-edit
|
|
27
28
|
- `.grok/parent.md` — 1-line pointer to orchestrator agent; not SessionStart
|
|
28
29
|
- `.grok/roles/*.toml`
|
|
29
30
|
- `.grok/global-settings.toml` — merged into `~/.grok/config.toml` by `scripts/sync-global-settings.mjs` (not auto-loaded; project config cannot set `[features]`)
|
|
30
31
|
- `.rulesync/global-settings/` — host manifest and reserved noop payloads
|
|
31
32
|
- `.rulesync/mcp-policy.jsonc` — MCP deny-default SSOT (`default: deny`, `allow: []`)
|
|
32
|
-
- `.rulesync/skills/{parent,explain,handoff,solo,cascade,commit,commit-and-push,commit-push,commit-push-deploy,commit-push-release}/` — skill SSOT; `rulesync -f skills` emits `.grok/skills/`, `.claude/skills/`, `.agents/skills/` byte-equal. `/cascade` = exit solo / restore cascade (not a sticky second mode)
|
|
33
|
+
- `.rulesync/skills/{parent,explain,handoff,pickup,solo,cascade,commit,commit-and-push,commit-push,commit-push-deploy,commit-push-release,browser}/` — skill SSOT; `rulesync -f skills` emits `.grok/skills/`, `.claude/skills/`, `.agents/skills/` byte-equal. `/cascade` = exit solo / restore cascade (not a sticky second mode)
|
|
33
34
|
|
|
34
35
|
## Scripts
|
|
35
36
|
- `scripts/check-globals.mjs` — `$HOME/.grok/config.toml` `[agent].name==orchestrator` + `[features].two_pass_compaction==true`; project `.grok/config.toml` must not have `[features]`/`[agent]`; wired as `sync:globals:check` (also after emit-mcp in `rulesync:check`)
|
|
@@ -45,11 +46,13 @@ Cheap outline. Not a file dump.
|
|
|
45
46
|
- `scripts/emit-gemini.mjs` — `GEMINI.md` (`@AGENTS.md`) + `.gemini/agents/{id}/agent.md` from `.rulesync/subagents` (not `rulesync -t geminicli`); no prune; does not touch settings
|
|
46
47
|
- `scripts/emit-agent-shell-tools.mjs` — after rulesync subagents: rewrite `.claude/agents/grunt.md` body `Bash`; grok/codex/gemini/generic keep `run_terminal_command`
|
|
47
48
|
- `scripts/telemetry.mjs` — append-only `.tmp/orchestrator-logs/telemetry.ndjson` from hooks / grunt-job CLI; fail-open; never stdout
|
|
49
|
+
- `scripts/browser.mjs` — session browser rail `nav|snap|click|fill|shot|pdf|stop`; Lightpanda default; Chromium on verb/OS/probe/paint-host/one-escalate; `.tmp/grunt/browser/`
|
|
48
50
|
|
|
49
51
|
## Tmp
|
|
50
52
|
- `.tmp/plans/` — persist-plan / parent / implementer
|
|
51
53
|
- `.tmp/orchestrator-logs/` — hooks + grunt-job telemetry (shared; not grunt scratch)
|
|
52
54
|
- `.tmp/grunt/` — grunt scratch/tmp only
|
|
55
|
+
- `.tmp/grunt/browser/` — browser session/profile/shot/pdf (not MCP)
|
|
53
56
|
- `.tmp/grunt/handoffs/` — persist-handoff / `/handoff`; own serial counter (not plan serials)
|
|
54
57
|
|
|
55
58
|
## Stamps (`.tmp/orchestrator-logs/`)
|
|
@@ -58,7 +61,7 @@ Cheap outline. Not a file dump.
|
|
|
58
61
|
|
|
59
62
|
## Generated (do not hand-edit; committed, not gitignored)
|
|
60
63
|
- `AGENTS.md`, `CLAUDE.md`
|
|
61
|
-
- `.claude/skills/*`, `.agents/skills/*`, `.grok/skills/{parent,explain,handoff,solo,cascade,commit,commit-and-push,commit-push,commit-push-deploy,commit-push-release}/` (from `.rulesync/skills/`)
|
|
64
|
+
- `.claude/skills/*`, `.agents/skills/*`, `.grok/skills/{parent,explain,handoff,pickup,solo,cascade,commit,commit-and-push,commit-push,commit-push-deploy,commit-push-release}/` (from `.rulesync/skills/`)
|
|
62
65
|
- `.grok/agents/*`
|
|
63
66
|
- `.claude/agents/*`
|
|
64
67
|
- `.codex/agents/*`
|