@lovrozagar/grunt 0.5.2 → 0.6.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/grunt.md +2 -24
- package/.agents/agents/orchestrator.md +5 -50
- package/.agents/skills/ask/SKILL.md +5 -12
- package/.agents/skills/auto/SKILL.md +7 -12
- package/.agents/skills/browser/SKILL.md +4 -8
- package/.agents/skills/clasp/SKILL.md +11 -0
- package/.agents/skills/commit/SKILL.md +3 -1
- package/.agents/skills/commit-push/SKILL.md +2 -0
- package/.agents/skills/commit-push-deploy/SKILL.md +2 -0
- package/.agents/skills/commit-push-release/SKILL.md +2 -0
- package/.agents/skills/explain/SKILL.md +7 -13
- package/.agents/skills/google-workspace/SKILL.md +13 -0
- package/.agents/skills/handoff/SKILL.md +7 -11
- package/.agents/skills/implement-plan/SKILL.md +5 -109
- package/.agents/skills/listen/SKILL.md +15 -0
- package/.agents/skills/pickup/SKILL.md +6 -12
- package/.agents/skills/speak/SKILL.md +13 -0
- package/.agents/skills/tmp/SKILL.md +6 -10
- package/.agents/skills/write-plan/SKILL.md +5 -77
- package/.claude/agents/grunt.md +2 -26
- package/.claude/agents/orchestrator.md +12 -50
- package/.claude/skills/ask/SKILL.md +5 -12
- package/.claude/skills/auto/SKILL.md +7 -12
- package/.claude/skills/browser/SKILL.md +4 -8
- package/.claude/skills/clasp/SKILL.md +11 -0
- package/.claude/skills/commit/SKILL.md +3 -1
- package/.claude/skills/commit-push/SKILL.md +2 -0
- package/.claude/skills/commit-push-deploy/SKILL.md +2 -0
- package/.claude/skills/commit-push-release/SKILL.md +2 -0
- package/.claude/skills/explain/SKILL.md +7 -13
- package/.claude/skills/google-workspace/SKILL.md +13 -0
- package/.claude/skills/handoff/SKILL.md +7 -11
- package/.claude/skills/implement-plan/SKILL.md +5 -109
- package/.claude/skills/listen/SKILL.md +15 -0
- package/.claude/skills/pickup/SKILL.md +6 -12
- package/.claude/skills/speak/SKILL.md +13 -0
- package/.claude/skills/tmp/SKILL.md +6 -10
- package/.claude/skills/write-plan/SKILL.md +5 -77
- package/.codex/agents/grunt.toml +2 -26
- package/.codex/agents/orchestrator.toml +4 -50
- package/.grok/agents/grunt.md +2 -24
- package/.grok/agents/orchestrator.md +4 -48
- package/.grok/global-settings.toml +1 -3
- package/.grok/hooks/orchestrate-parent.js +190 -358
- package/.grok/skills/ask/SKILL.md +5 -12
- package/.grok/skills/auto/SKILL.md +7 -12
- package/.grok/skills/browser/SKILL.md +4 -8
- package/.grok/skills/clasp/SKILL.md +11 -0
- package/.grok/skills/commit/SKILL.md +3 -1
- package/.grok/skills/commit-push/SKILL.md +2 -0
- package/.grok/skills/commit-push-deploy/SKILL.md +2 -0
- package/.grok/skills/commit-push-release/SKILL.md +2 -0
- package/.grok/skills/explain/SKILL.md +7 -13
- package/.grok/skills/google-workspace/SKILL.md +13 -0
- package/.grok/skills/handoff/SKILL.md +7 -11
- package/.grok/skills/implement-plan/SKILL.md +5 -109
- package/.grok/skills/listen/SKILL.md +15 -0
- package/.grok/skills/pickup/SKILL.md +6 -12
- package/.grok/skills/speak/SKILL.md +13 -0
- package/.grok/skills/tmp/SKILL.md +6 -10
- package/.grok/skills/write-plan/SKILL.md +5 -77
- package/.rulesync/hooks.jsonc +1 -1
- package/.rulesync/mcp-policy.jsonc +0 -2
- package/.rulesync/reference/INDEX.md +30 -20
- package/.rulesync/reference/browser.md +13 -6
- package/.rulesync/reference/cascade.md +6 -86
- package/.rulesync/reference/clasp.md +21 -0
- package/.rulesync/reference/google-workspace.md +79 -0
- package/.rulesync/reference/hooks.md +7 -11
- package/.rulesync/reference/implementation-format.md +113 -0
- package/.rulesync/reference/law.md +5 -3
- package/.rulesync/reference/listen.md +80 -0
- package/.rulesync/reference/map.md +40 -36
- package/.rulesync/reference/output.md +3 -51
- package/.rulesync/reference/plan-format.md +4 -2
- package/.rulesync/reference/refs-map.md +12 -5
- package/.rulesync/reference/rtk.md +3 -2
- package/.rulesync/reference/scope.md +37 -0
- package/.rulesync/reference/setup.md +27 -0
- package/.rulesync/reference/skills-map.md +13 -12
- package/.rulesync/reference/speak.md +59 -0
- package/.rulesync/rules/CLAUDE.md +3 -49
- package/.rulesync/rules/overview.md +9 -47
- package/.rulesync/skills/ask/SKILL.md +5 -12
- package/.rulesync/skills/auto/SKILL.md +5 -12
- package/.rulesync/skills/browser/SKILL.md +4 -8
- package/.rulesync/skills/clasp/SKILL.md +9 -0
- package/.rulesync/skills/commit/SKILL.md +3 -1
- package/.rulesync/skills/commit-push/SKILL.md +2 -0
- package/.rulesync/skills/commit-push-deploy/SKILL.md +2 -0
- package/.rulesync/skills/commit-push-release/SKILL.md +2 -0
- package/.rulesync/skills/explain/SKILL.md +7 -14
- package/.rulesync/skills/google-workspace/SKILL.md +11 -0
- package/.rulesync/skills/handoff/SKILL.md +7 -11
- package/.rulesync/skills/implement-plan/SKILL.md +5 -119
- package/.rulesync/skills/listen/SKILL.md +13 -0
- package/.rulesync/skills/pickup/SKILL.md +6 -12
- package/.rulesync/skills/speak/SKILL.md +13 -0
- package/.rulesync/skills/tmp/SKILL.md +6 -10
- package/.rulesync/skills/write-plan/SKILL.md +5 -84
- package/.rulesync/subagents/grunt.md +2 -24
- package/.rulesync/subagents/orchestrator.md +14 -59
- package/AGENTS.md +9 -47
- package/CHANGELOG.md +67 -0
- package/CLAUDE.md +1 -49
- package/README.md +89 -80
- package/cli/grunt.mjs +21 -3
- package/cli/grunt.test.ts +47 -3
- package/cli/init.mjs +134 -234
- package/cli/init.test.ts +241 -58
- package/cli/prompt.mjs +9 -36
- package/cli/prompt.test.ts +14 -0
- package/package.json +10 -2
- package/scripts/browser.mjs +128 -7
- package/scripts/doctor.mjs +104 -10
- package/scripts/emit-gemini.mjs +2 -2
- package/scripts/emit-mcp-policy.mjs +1 -1
- package/scripts/gate-fat-tools.mjs +223 -173
- package/scripts/google-workspace.mjs +713 -0
- package/scripts/grunt-job.mjs +453 -69
- package/scripts/guarded-md.mjs +230 -0
- package/scripts/guarded-roots.mjs +1 -1
- package/scripts/interactive.mjs +15 -0
- package/scripts/listen.mjs +829 -0
- package/scripts/parse-need.mjs +21 -2
- package/scripts/persist-implementation.mjs +278 -0
- package/scripts/prompt.mjs +32 -0
- package/scripts/scrub-spawn-prompt.mjs +3 -50
- package/scripts/setup.mjs +746 -0
- package/scripts/speak.mjs +291 -0
- package/.agents/agents/implementer.md +0 -32
- package/.agents/agents/thinker.md +0 -29
- package/.agents/skills/cascade/SKILL.md +0 -28
- package/.agents/skills/parent/SKILL.md +0 -6
- package/.agents/skills/solo/SKILL.md +0 -25
- package/.claude/agents/implementer.md +0 -37
- package/.claude/agents/thinker.md +0 -36
- package/.claude/skills/cascade/SKILL.md +0 -28
- package/.claude/skills/parent/SKILL.md +0 -6
- package/.claude/skills/solo/SKILL.md +0 -25
- package/.codex/agents/implementer.toml +0 -26
- package/.codex/agents/thinker.toml +0 -26
- package/.grok/agents/implementer.md +0 -27
- package/.grok/agents/thinker.md +0 -27
- package/.grok/parent.md +0 -1
- package/.grok/roles/implementer.toml +0 -5
- package/.grok/roles/thinker.toml +0 -5
- package/.grok/skills/cascade/SKILL.md +0 -28
- package/.grok/skills/parent/SKILL.md +0 -6
- package/.grok/skills/solo/SKILL.md +0 -25
- package/.rulesync/grunt.config.jsonc +0 -7
- package/.rulesync/skills/cascade/SKILL.md +0 -28
- package/.rulesync/skills/parent/SKILL.md +0 -6
- package/.rulesync/skills/solo/SKILL.md +0 -25
- package/.rulesync/subagents/implementer.md +0 -49
- package/.rulesync/subagents/thinker.md +0 -49
- package/scripts/grunt-config.mjs +0 -50
|
@@ -1,80 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orchestrator
|
|
3
|
-
description: "
|
|
4
|
-
tier:
|
|
3
|
+
description: "Session agent. Do the work. Spawn grunt only under the hood when isolation is cheaper."
|
|
4
|
+
tier: parent
|
|
5
5
|
targets:
|
|
6
6
|
- claudecode
|
|
7
7
|
- grokcli
|
|
8
8
|
- codexcli
|
|
9
9
|
- antigravity-cli
|
|
10
10
|
claudecode:
|
|
11
|
-
model:
|
|
12
|
-
effort:
|
|
11
|
+
model: sonnet
|
|
12
|
+
effort: medium
|
|
13
13
|
permissionMode: bypassPermissions
|
|
14
|
-
tools: [Write, Agent]
|
|
14
|
+
tools: [Read, Grep, Glob, Bash, Write, Edit, WebSearch, WebFetch, Agent]
|
|
15
15
|
grokcli:
|
|
16
|
-
model: grok-4.
|
|
16
|
+
model: grok-4.6
|
|
17
17
|
permission_mode: bypassPermissions
|
|
18
18
|
agents_md: false
|
|
19
19
|
mcpInheritance: none
|
|
20
|
-
tools:
|
|
20
|
+
tools: read_file, grep, list_dir, write, search_replace, run_terminal_command, web_search, web_fetch, spawn_subagent, todo_write, get_command_or_subagent_output, kill_command_or_subagent
|
|
21
21
|
codexcli:
|
|
22
|
-
model: gpt-5.4
|
|
23
|
-
model_reasoning_effort:
|
|
22
|
+
model: gpt-5.4
|
|
23
|
+
model_reasoning_effort: medium
|
|
24
24
|
sandbox_mode: danger-full-access
|
|
25
25
|
approval_policy: never
|
|
26
26
|
antigravity-cli:
|
|
27
|
-
model:
|
|
28
|
-
subagent:
|
|
29
|
-
mainAgent:
|
|
27
|
+
model: pro
|
|
28
|
+
subagent: false
|
|
29
|
+
mainAgent: true
|
|
30
30
|
inheritMcp: false
|
|
31
31
|
commandExecutionPolicy: eager
|
|
32
|
-
tools: []
|
|
33
32
|
geminicli:
|
|
34
|
-
model: gemini-2.5-
|
|
33
|
+
model: gemini-2.5-pro
|
|
35
34
|
---
|
|
36
|
-
|
|
37
|
-
en-US unless asked. every output maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. Parent and child. Every turn, not final-only. no mid-turn chat; no narration while Agent runs; user-visible = legal `[role]:` + **one-line** recap. Advise leftover: one empty blank line after recap/body then numbered pick each on own line. Zero user-visible tokens before spawn/peek. In-flight host Stop → only `[orchestrator]: wait grunt`.
|
|
38
|
-
Protocol: `.rulesync/reference/cascade.md` (peek/kill table need:/resume). Do not paste.
|
|
39
|
-
Always-do:
|
|
40
|
-
|
|
41
|
-
| signal | next |
|
|
42
|
-
|---|---|
|
|
43
|
-
| create/change product files | grunt facts → thinker plan/recap-stop before writes; default thinker unless prompt-is-spec or small/simple → implementer. Thinker recap ≠ spec-ready; advise-stop until pick1/pick2 / `/implement-plan {n}` / explicit implement (=pick1 iff Implement-typed). Never parent Write/Bash/Skill |
|
|
44
|
-
| plan/spec ready + file writes remain | leftover pick1/pick2 / `/implement-plan {n}` / explicit implement (=pick1 iff Implement-typed) only. Implement pick1 = spawn implementer + last [thinker] recap as spec; no `.tmp/grunt/plans`; no write-plan; no implement-plan. Implement pick2 = persist `.tmp/grunt/plans/{n}` then implementer `plan=/abs/...` one-shot skip pause. Write pick1 = `/tmp` persist recap; no implementer. Write pick2 = write-plan persist inspect-pause; remainder `/implement-plan {n}`; no implementer. slash `/write-plan` ≠ leftover 2. `ok`/`yes`/`y`/`continue` ≠ either. Thinker recap alone = recap-stop |
|
|
45
|
-
| tools/facts/git/test/mechanical write | spawn grunt |
|
|
46
|
-
| snippet / cite / "what is X" | spawn grunt `job:web`. URL-in-a-cite ≠ browse |
|
|
47
|
-
| URL / browse / click / fill / snap / live DOM | spawn grunt; child prompt must include abs `.rulesync/skills/browser/SKILL.md` and `.rulesync/reference/browser.md`; Read then `node scripts/browser.mjs`; Lightpanda default; never websearch that page |
|
|
48
|
-
| world fact | spawn grunt `job:web` |
|
|
49
|
-
| write defined solution | spawn implementer; **blocked if advise-class stems present** unless prompt-is-spec / obvious comment-spec false+ |
|
|
50
|
-
| think / plan / advise / recommend / how / why / explain (ask us; not slash `/explain` not one-cmd/last-log/source-token) | spawn thinker; facts=grunt/`need:`; **no implementer this turn**. Repeat how/why/… + last [thinker] still visible + no new input/tools since → no spawn; echo last or /explain. Unsure → thinker |
|
|
51
|
-
| child returned | recap per output.md (echo=report not command). e.g. `[orchestrator]: wrote /abs/a` |
|
|
52
|
-
| child `need:` | parse-need + parallel grunt; `resume_from` + new verdicts; max 3 |
|
|
53
|
-
| ⚠ / validate / sim | spawn implementer with findings; do not recap; spawn; no parent-edit |
|
|
54
|
-
| work remains | spawn; do not stop. Advise recap ≠ leftover writes |
|
|
55
|
-
| children done + no findings | recap; advise-first stop wins. Else stop only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
56
|
-
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
57
|
-
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
58
|
-
| `/tmp` | one-turn write `.tmp/grunt/`; recap `[tmp]:` |
|
|
59
|
-
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
60
|
-
| `/write-plan` plan-only | recap; remainder `/implement-plan` (ask) |
|
|
61
|
-
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
62
|
-
| `/solo` | session escape; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; else spawn-first |
|
|
63
|
-
| `/cascade` | restore cascade; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; spawn-first |
|
|
64
|
-
| `/auto` | session leftover-gate auto; stamp auto-ask-{sid} iff slash≠config; not spawn-escape; not autofix |
|
|
65
|
-
| `/ask` | session leftover-gate ask; stamp auto-ask-{sid} iff slash≠config; not leftover y/n; not pick 3 |
|
|
66
|
-
|
|
67
|
-
Precedence: slash → obvious fact/false+/reuse → advise-class row → prompt-is-spec → write. Advise-class + write-class → thinker first; implementer only after spec / pick1 / pick2 / `/implement-plan {n}`.
|
|
68
|
-
False+: I think terraform plan /implement-plan /solo source tokens one-cmd how- last-log why.
|
|
69
|
-
Advise leftover: numbered pick each on own line after tagged recap; one empty blank line immediately before leftover 1. (leftover last; not adjacent to recap/body). Always-print typed leftover triple (advise-class final recap only). One verb per recap; never jammed Implement/write. No leftover on `need:` JSON wait-grunt grunt/implementer recaps slash-only turns.
|
|
70
|
-
1. {Implement|Write} with verbal plan
|
|
71
|
-
2. {same verb} with file plan
|
|
72
|
-
3. Tweak
|
|
73
|
-
Type Implement = in-repo product writes. Type Write = persist-only/implementer-nonsense (SCA/advise-only/`/tmp`/inspect-pause). Recap remainder still names the human gate; leftover is not `4. Contact bank`. `/handoff` stays slash not Write pick1. No omit 1/2. No frozen 4. Do not relabel 3. Parent echoes printed leftover. Match number or full leftover label (or unique tail `verbal plan` / `file plan`). Always-do leftover match printed lines; not Skill-name (`2` ≠ write-plan). Implement pick1 = spawn implementer; last [thinker] recap as spec; no `.tmp/grunt/plans`; no write-plan; no implement-plan. Implement pick2 = persist `.tmp/grunt/plans/{n}` then spawn implementer `plan=/abs/...` one-shot skip pause. Write pick1 = `/tmp` persist recap/body under `.tmp/grunt/`; no implementer. Write pick2 = write-plan persist inspect-pause; remainder `/implement-plan {n}`; no implementer this turn. 3 / Tweak → stay advise; extra text = revision notes → thinker; bare 3/Tweak = stop wait notes. Bare `implement`/`implementer` → pick1 iff Implement-typed; else recap “no implementer this remainder”; no spawn. Bare `write` → pick1 iff Write-typed; else not a match. Type-mismatch → that recap no spawn. Alias `Implementer with …` → pick1/pick2 iff Implement-typed. `/write-plan` persist-only inspect-pause; remainder `/implement-plan {n}` (ask); ≠ leftover pick 2. `/implement-plan {n}` disk/file ≠ verbal. `ok`/`yes`/`y`/`continue` ≠ either pick.
|
|
74
|
-
You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp spawn-mode-{sid} iff slash≠config; unlink grunt-off) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. No skip-spawn. No trivia/cheap. User-visible = legal tag + **one-line** recap; advise leftover numbered pick on following lines after one empty blank line not crammed (echo printed leftover; always-print typed triple). Table = routing; echo = report not command. Siblings still run: `[grunt]:` echo. Facts/search/trees → grunt, never thinker.
|
|
75
|
-
Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
|
|
76
|
-
grunt ← tools. Snippet/cite/"what is X" → grunt `job: web`. URL/browse/click/fill/snap/live DOM → grunt; paste skill+browser.md abs paths; never websearch that page. Never memory. implementer ← specified solution or prompt-is-spec or small/simple; blocked if advise-class. thinker ← think/plan/advise/recommend/how/why/explain (default product change; no implementer this turn).
|
|
77
|
-
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only. Browse tags match → prompt must include abs `.rulesync/skills/browser/SKILL.md` and `.rulesync/reference/browser.md`.
|
|
78
|
-
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.
|
|
79
|
-
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
80
|
-
`/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.
|
|
35
|
+
Follow AGENTS.md. Do the work. Concise complete sentences with natural grammar. Scratch in `.tmp/grunt/`. Browse with `node scripts/browser.mjs`; the rail swaps to Chromium when Lightpanda is blocked. App e2e uses Playwright.
|
package/AGENTS.md
CHANGED
|
@@ -1,51 +1,13 @@
|
|
|
1
1
|
<!-- grunt:begin -->
|
|
2
|
-
|
|
3
|
-
en-US unless asked. every output maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. Parent and child. Every turn, not final-only. no mid-turn chat; no narration while Agent runs; user-visible = legal `[role]:` + one-line echo (thinker recap verbatim-ish; no-strip how/why). Advise leftover: one empty blank line after recap/body then numbered pick each on own line. Zero user-visible tokens before spawn/peek. In-flight host Stop → only `[orchestrator]: wait grunt`.
|
|
4
|
-
All output exclude AI attribution, Co-Authored-By, trailers, generated markers.
|
|
5
|
-
Protocol: `.rulesync/reference/cascade.md`. Do not paste.
|
|
6
|
-
On-demand (feat/domain; never every-turn; parent does not Read): `.rulesync/reference/INDEX.md` — load this then only the matching row. Never load the folder.
|
|
7
|
-
Always-do:
|
|
2
|
+
You are the session agent. Do the work. Use en-US unless asked. Write concise complete sentences with natural grammar. Skip filler and fluff. Ship optimal solutions only; rewrite if not. Flag blockers. Do not monkey-patch. Keep all work free of AI attribution, Co-Authored-By, trailers, and generated markers.
|
|
8
3
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
| create/change product files | grunt facts → thinker plan/recap-stop before writes; default thinker unless prompt-is-spec or small/simple → implementer. Thinker recap ≠ spec-ready; advise-stop until pick1/pick2 / `/implement-plan {n}` / explicit implement (=pick1 iff Implement-typed). Never parent Write/Bash/Skill |
|
|
12
|
-
| plan/spec ready + file writes remain | leftover pick1/pick2 / `/implement-plan {n}` / explicit implement (=pick1 iff Implement-typed) only. Implement pick1 = spawn implementer + last [thinker] recap as spec; no `.tmp/grunt/plans`; no write-plan; no implement-plan. Implement pick2 = persist `.tmp/grunt/plans/{n}` then implementer `plan=/abs/...` one-shot skip pause. effective=auto + Implement-typed: pick2 chains write-plan persist → implement-plan `{n}`; skip leftover wait. Write pick1 = `/tmp` persist recap; no implementer. Write pick2 = write-plan persist inspect-pause; remainder `/implement-plan {n}`; no implementer. slash `/write-plan` ≠ leftover 2. `ok`/`yes`/`y`/`continue` ≠ either. Thinker recap alone = recap-stop |
|
|
13
|
-
| tools/facts/git/test/mechanical write | spawn grunt |
|
|
14
|
-
| snippet / cite / "what is X" | spawn grunt `job:web`. URL-in-a-cite ≠ browse |
|
|
15
|
-
| URL / browse / click / fill / snap / live DOM | spawn grunt; child prompt must include abs `.rulesync/skills/browser/SKILL.md` and `.rulesync/reference/browser.md`; Read then `node scripts/browser.mjs`; Lightpanda default; never websearch that page |
|
|
16
|
-
| world fact | spawn grunt `job:web` |
|
|
17
|
-
| write defined solution | spawn implementer; **blocked if advise-class stems present** unless prompt-is-spec / obvious comment-spec false+ |
|
|
18
|
-
| think / plan / advise / recommend / how / why / explain (ask us; not slash `/explain` not one-cmd/last-log/source-token) | spawn thinker; facts=grunt/`need:`; **no implementer this turn**. Repeat how/why/… + last [thinker] still visible + no new input/tools since → no spawn; echo last or /explain. Unsure → thinker |
|
|
19
|
-
| child returned | recap per output.md (echo=report not command; thinker recap verbatim-ish; no-strip). e.g. `[orchestrator]: wrote /abs/a` |
|
|
20
|
-
| child `need:` | parse-need + parallel grunt; `resume_from` + new verdicts; max 3 |
|
|
21
|
-
| ⚠ / validate / sim | spawn implementer with findings; do not recap; spawn; no parent-edit |
|
|
22
|
-
| work remains | spawn; do not stop. Advise recap ≠ leftover writes |
|
|
23
|
-
| children done + no findings | recap; advise-first stop wins. Else stop only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
24
|
-
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
25
|
-
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
26
|
-
| `/tmp` | one-turn write `.tmp/grunt/`; recap `[tmp]:` |
|
|
27
|
-
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
28
|
-
| `/write-plan` plan-only | recap; remainder `/implement-plan` (ask). effective=auto + Implement-typed → persist then implement-plan `{n}` skip leftover wait; Write-typed still inspect-pause leftover wait |
|
|
29
|
-
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
30
|
-
| `/solo` | session escape; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; else spawn-first |
|
|
31
|
-
| `/cascade` | restore cascade; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; spawn-first |
|
|
32
|
-
| `/auto` | session leftover-gate auto; stamp auto-ask-{sid} iff slash≠config; not spawn-escape; not autofix |
|
|
33
|
-
| `/ask` | session leftover-gate ask; stamp auto-ask-{sid} iff slash≠config; not leftover y/n; not pick 3 |
|
|
4
|
+
Size first. Straight shot: do it. Else read `.rulesync/reference/scope.md`.
|
|
5
|
+
Default `/auto`: keep going; ask on blockers. `/ask`: one step, then ask.
|
|
34
6
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Type Implement = in-repo product writes. Type Write = persist-only/implementer-nonsense (SCA/advise-only/`/tmp`/inspect-pause). Recap remainder still names the human gate; leftover is not `4. Contact bank`. `/handoff` stays slash not Write pick1. No omit 1/2. No frozen 4. Do not relabel 3. Parent echoes printed leftover. Match number or full leftover label (or unique tail `verbal plan` / `file plan`). Always-do leftover match printed lines; not Skill-name (`2` ≠ write-plan). Implement pick1 = spawn implementer; paste last [thinker] recap as spec (how+why; implementer must not paste why into code comments); no `.tmp/grunt/plans`; no write-plan; no implement-plan. Implement pick2 = persist `.tmp/grunt/plans/{n}` then spawn implementer `plan=/abs/...` one-shot skip pause. Write pick1 = `/tmp` persist recap/body under `.tmp/grunt/`; no implementer. Write pick2 = write-plan persist inspect-pause; remainder `/implement-plan {n}`; no implementer this turn. 3 / Tweak → stay advise; extra text = revision notes → thinker; bare 3/Tweak = stop wait notes. Bare `implement`/`implementer` → pick1 iff Implement-typed; else recap “no implementer this remainder”; no spawn. Bare `write` → pick1 iff Write-typed; else not a match. Type-mismatch → that recap no spawn. Alias `Implementer with …` → pick1/pick2 iff Implement-typed. `/write-plan` persist-only inspect-pause; remainder `/implement-plan {n}` (ask); ≠ leftover pick 2. `/implement-plan {n}` disk/file ≠ verbal. `ok`/`yes`/`y`/`continue` ≠ either pick.
|
|
42
|
-
Parent = orchestrator (this file). You do not talk. Spawn wait echo.
|
|
43
|
-
Spawn only grunt|implementer|thinker. Never spawn orchestrator. Children never spawn.
|
|
44
|
-
You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp spawn-mode-{sid} iff slash≠config; unlink grunt-off) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. After child: legal tag + one-line recap (no-strip; no compress-to-verdict); advise leftover numbered pick on following lines not crammed (echo printed leftover; always-print typed triple). Echo = report not command. Siblings still run: `[grunt]:` echo. No skip-spawn. /handoff = one-turn in-parent write to `.tmp/grunt/handoffs/`; recap `[handoff]:`. `/tmp` = one-turn in-parent write to `.tmp/grunt/`; recap `[tmp]:`. `/pickup` spawn-first; grunt resolve if needed; never parent Read; not a mode.
|
|
45
|
-
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow.
|
|
46
|
-
grunt ← tools (facts/search/exec/git/web/test/low-reason mechanical write; snippet/cite/"what is X": `job: web`; URL/browse/click/fill/snap/live DOM: paste skill+browser.md abs paths, never websearch that page; never memory). implementer ← write defined solution (spec or small/simple); blocked if advise-class stems unless prompt-is-spec/false+. thinker ← think/plan/advise/recommend/how/why/explain (default product change; no implementer this turn).
|
|
47
|
-
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only. Browse tags match → prompt must include abs `.rulesync/skills/browser/SKILL.md` and `.rulesync/reference/browser.md`.
|
|
48
|
-
Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. `timeout_ms=60000` every peek. GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
|
|
49
|
-
`need:` JSON → parse-need + parallel grunt; one `resume_from` + new verdicts; max 3; no re-send task; no fresh-spawn.
|
|
50
|
-
Child: this file does not apply; your agent file gates you. Never spawn.
|
|
7
|
+
Read `.rulesync/reference/INDEX.md` once. When a row matches the work, read that reference in full.
|
|
8
|
+
|
|
9
|
+
Large dumps are compressed (search, test logs, snaps). Scratch and dumps live in `.tmp/grunt/` (gitignored). After a write, recap the path; edit with an offset slice when you need lines.
|
|
10
|
+
Fat dumps: `node scripts/grunt-job.mjs --job search|exec|slice|fetch|test` first; spawn grunt only when the dump needs judgment.
|
|
11
|
+
|
|
12
|
+
Browse with `node scripts/browser.mjs`. Lightpanda first; the rail swaps to Chromium when Lightpanda is blocked, empty, or client-rendered. Do not stop and say you cannot. App e2e is `playwright test`.
|
|
51
13
|
<!-- grunt:end -->
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,73 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.6.1] - 2026-09-17
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- TTY init asks `Apply global prompt optimizations? (recommended)` instead of `Apply globals?`
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Windows tests: host `whichBin` PATHEXT/`F_OK`, cmd shims, and `path.resolve` scratch paths
|
|
19
|
+
- Consumer `init` generate: product scripts imported `../cli/` which is not copied. Sentinel helpers live in `scripts/guarded-md.mjs`; setup prompts live in `scripts/prompt.mjs` / `scripts/interactive.mjs`. After init, tests spawn `node ./scripts/guarded-roots.mjs generate` and require every copied script's relative imports to exist on dest
|
|
20
|
+
|
|
21
|
+
## [0.6.0] - 2026-09-17
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- grunt-job squeez + stash + slice + fetch: keep a better 6, write the rest under `.tmp/grunt/stash/`, retrieve with `--job slice` or Read offset
|
|
26
|
+
- Session sidecar `.tmp/grunt/sessions/{sid}/` (wrote/read/receipt); UserPromptSubmit one-line receipt
|
|
27
|
+
- Browser `scroll` `wait` `hover` `select`; `snap` stashes fat pages
|
|
28
|
+
- Optional `clasp` (doctor + skill + reference)
|
|
29
|
+
- `scripts/google-workspace.mjs` (`/google-workspace`): Sheets (create/set/get/append/clear), Docs (create/append), Drive list, Slides, Calendar, Gmail; Desktop OAuth in `~/.grunt/`
|
|
30
|
+
- `scripts/speak.mjs` (`/speak`): TTS via ElevenLabs or OpenAI; default mp3 under `.tmp/grunt/speak/`
|
|
31
|
+
- `scripts/listen.mjs` (`/listen`): STT via ffmpeg + local whisper.cpp, OpenAI fallback; `rec` prints transcript + `transcript=.tmp/grunt/listen/latest.txt`
|
|
32
|
+
- `grunt upgrade`: re-init, prune retired 0.5 names, print reserved skills
|
|
33
|
+
- Windows `npm test` CI job
|
|
34
|
+
- `/auto` `/ask` session flags: default `sessionGate=auto` keeps going and asks on blockers; `/ask` finishes one step then asks. Stamp `session-gate-{sid}`. Not the 0.5 leftover gate
|
|
35
|
+
- `/implement-plan` journal under `.tmp/grunt/implementations/` (touched files, log, blockers); `/commit` uses `## Files` as the default stage set
|
|
36
|
+
- Plan test leaves: red-green for new behavior/bugs, test-after for other behavior, skip for docs/rename/config/generated
|
|
37
|
+
- `grunt setup` / `scripts/setup.mjs`: handheld speak, listen, google-workspace, and browser setup on any OS (`~/.grunt/`; env still wins). TTY menu shows ok/missing, re-checks PATH after print-only bin hints, asks redo when already ok, prints a four-line status
|
|
38
|
+
- Tests for google-workspace verbs against mocked Google APIs
|
|
39
|
+
- Doctor reports optional google-workspace (`oauth` / `tokens` / `adc` / `clasprc`; no secrets)
|
|
40
|
+
- Init/upgrade prune retired scripts (`telemetry.mjs`), paths (`.grok/parent.md` `.grok/skills/shared`), Grok roles for retired agents, and reserved skill dirs this package no longer ships
|
|
41
|
+
- Browser rail swaps Lightpanda → Chromium on blocked/empty/client-rendered snaps and Amazon hosts
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Session agent has tools and writes concise complete sentences
|
|
46
|
+
- Fat Read/Grep/Bash dumps rewrite to grunt-job first; spawn a grunt model only when the dump needs judgment
|
|
47
|
+
- Scratch writes at repo root rewrite into `.tmp/grunt/`
|
|
48
|
+
- Full Read of a file this session just wrote is denied; offset slice still works
|
|
49
|
+
- Playwright is the app e2e runner; Lightpanda stays the browse default
|
|
50
|
+
- Agents: orchestrator + grunt only
|
|
51
|
+
- Init prunes retired grunt-owned skills (`parent` `solo` `cascade`) and agents (`implementer` `thinker`)
|
|
52
|
+
- `grunt upgrade` no longer warns leftoverGate/spawnMode config keys
|
|
53
|
+
- Consumer-facing setup/browser docs: do not read a README unless in-tree doctor/setup/spec is missing; then https://github.com/lovrozagar/grunt#readme (not the consumer README)
|
|
54
|
+
- AGENTS.md size gate is a router: straight shot does the work; else `.rulesync/reference/scope.md` (gate + research → suggest → wait → `/write-plan` → `/implement-plan`)
|
|
55
|
+
- AGENTS.md order: identity, size + `/auto` `/ask`, INDEX, dumps, browser
|
|
56
|
+
- Keep all work free of AI attribution, Co-Authored-By, trailers, and generated markers (not commits only)
|
|
57
|
+
- Session prompt: en-US unless asked; skip filler and fluff; rewrite if the solution is not optimal
|
|
58
|
+
- AGENTS.md drops the skills inventory; INDEX once, then the matching reference in full
|
|
59
|
+
- Browser prompt is the rail plus Chromium fallback, not the verb list
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- Windows `npm test`: `.gitattributes` keeps LF so shebang ESM scripts parse (CRLF hashbang is `SyntaxError`)
|
|
64
|
+
- `grunt setup` with no extra args (drop dead `flags.args || []`)
|
|
65
|
+
|
|
66
|
+
### Removed
|
|
67
|
+
|
|
68
|
+
- implementer and thinker subagents
|
|
69
|
+
- leftoverGate / spawnMode flags and leftover `1. 2. 3.` Stop law
|
|
70
|
+
- `/solo` `/cascade` `/parent` skills
|
|
71
|
+
- `.rulesync/grunt.config.jsonc`, local overlay, example, and `scripts/grunt-config.mjs`. `/auto` is the default; `/ask` is a per-session stamp; `/auto` unlinks it
|
|
72
|
+
|
|
73
|
+
### Migration
|
|
74
|
+
|
|
75
|
+
From 0.5.x: `npm i -D @lovrozagar/grunt@latest` then `npm exec grunt upgrade` (or `init`). `.rulesync/grunt.config.jsonc`, the local overlay, and `scripts/grunt-config.mjs` are deleted. leftoverGate/spawnMode are gone. Retired skill/agent dirs, `.grok/roles/{implementer,thinker}.toml`, `.grok/parent.md`, `.grok/skills/shared`, and `scripts/telemetry.mjs` are deleted. New skills/scripts are copied. Consumer extras and npm `grunt:*` scripts stay. Reserved skill names are listed in `.rulesync/reference/law.md`.
|
|
76
|
+
|
|
10
77
|
## [0.5.2] - 2026-09-02
|
|
11
78
|
|
|
12
79
|
### Added
|
package/CLAUDE.md
CHANGED
|
@@ -1,51 +1,3 @@
|
|
|
1
1
|
<!-- grunt:begin -->
|
|
2
|
-
|
|
3
|
-
en-US unless asked. every output maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. Parent and child. Every turn, not final-only. no mid-turn chat; no narration while Agent runs; user-visible = legal `[role]:` + one-line echo (thinker recap verbatim-ish; no-strip how/why). Advise leftover: one empty blank line after recap/body then numbered pick each on own line. Zero user-visible tokens before spawn/peek. In-flight host Stop → only `[orchestrator]: wait grunt`.
|
|
4
|
-
All output exclude AI attribution, Co-Authored-By, trailers, generated markers.
|
|
5
|
-
Protocol: `.rulesync/reference/cascade.md`. Do not paste.
|
|
6
|
-
On-demand (feat/domain; never every-turn; parent does not Read): `.rulesync/reference/INDEX.md` — load this then only the matching row. Never load the folder.
|
|
7
|
-
Always-do:
|
|
8
|
-
|
|
9
|
-
| signal | next |
|
|
10
|
-
|---|---|
|
|
11
|
-
| create/change product files | grunt facts → thinker plan/recap-stop before writes; default thinker unless prompt-is-spec or small/simple → implementer. Thinker recap ≠ spec-ready; advise-stop until pick1/pick2 / `/implement-plan {n}` / explicit implement (=pick1 iff Implement-typed). Never parent Write/Bash/Skill |
|
|
12
|
-
| plan/spec ready + file writes remain | leftover pick1/pick2 / `/implement-plan {n}` / explicit implement (=pick1 iff Implement-typed) only. Implement pick1 = spawn implementer + last [thinker] recap as spec; no `.tmp/grunt/plans`; no write-plan; no implement-plan. Implement pick2 = persist `.tmp/grunt/plans/{n}` then implementer `plan=/abs/...` one-shot skip pause. effective=auto + Implement-typed: pick2 chains write-plan persist → implement-plan `{n}`; skip leftover wait. Write pick1 = `/tmp` persist recap; no implementer. Write pick2 = write-plan persist inspect-pause; remainder `/implement-plan {n}`; no implementer. slash `/write-plan` ≠ leftover 2. `ok`/`yes`/`y`/`continue` ≠ either. Thinker recap alone = recap-stop |
|
|
13
|
-
| tools/facts/git/test/mechanical write | spawn grunt |
|
|
14
|
-
| snippet / cite / "what is X" | spawn grunt `job:web`. URL-in-a-cite ≠ browse |
|
|
15
|
-
| URL / browse / click / fill / snap / live DOM | spawn grunt; child prompt must include abs `.rulesync/skills/browser/SKILL.md` and `.rulesync/reference/browser.md`; Read then `node scripts/browser.mjs`; Lightpanda default; never websearch that page |
|
|
16
|
-
| world fact | spawn grunt `job:web` |
|
|
17
|
-
| write defined solution | spawn implementer; **blocked if advise-class stems present** unless prompt-is-spec / obvious comment-spec false+ |
|
|
18
|
-
| think / plan / advise / recommend / how / why / explain (ask us; not slash `/explain` not one-cmd/last-log/source-token) | spawn thinker; facts=grunt/`need:`; **no implementer this turn**. Repeat how/why/… + last [thinker] still visible + no new input/tools since → no spawn; echo last or /explain. Unsure → thinker |
|
|
19
|
-
| child returned | recap per output.md (echo=report not command; thinker recap verbatim-ish; no-strip). e.g. `[orchestrator]: wrote /abs/a` |
|
|
20
|
-
| child `need:` | parse-need + parallel grunt; `resume_from` + new verdicts; max 3 |
|
|
21
|
-
| ⚠ / validate / sim | spawn implementer with findings; do not recap; spawn; no parent-edit |
|
|
22
|
-
| work remains | spawn; do not stop. Advise recap ≠ leftover writes |
|
|
23
|
-
| children done + no findings | recap; advise-first stop wins. Else stop only if no writes remain and spawn count > 0 when the user asked for a file change |
|
|
24
|
-
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
25
|
-
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
26
|
-
| `/tmp` | one-turn write `.tmp/grunt/`; recap `[tmp]:` |
|
|
27
|
-
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
28
|
-
| `/write-plan` plan-only | recap; remainder `/implement-plan` (ask). effective=auto + Implement-typed → persist then implement-plan `{n}` skip leftover wait; Write-typed still inspect-pause leftover wait |
|
|
29
|
-
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
30
|
-
| `/solo` | session escape; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; else spawn-first |
|
|
31
|
-
| `/cascade` | restore cascade; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; spawn-first |
|
|
32
|
-
| `/auto` | session leftover-gate auto; stamp auto-ask-{sid} iff slash≠config; not spawn-escape; not autofix |
|
|
33
|
-
| `/ask` | session leftover-gate ask; stamp auto-ask-{sid} iff slash≠config; not leftover y/n; not pick 3 |
|
|
34
|
-
|
|
35
|
-
Precedence: slash → obvious fact/false+/reuse → advise-class row → prompt-is-spec → write. Advise-class + write-class → thinker first; implementer only after spec / pick1 / pick2 / `/implement-plan {n}`.
|
|
36
|
-
False+: I think terraform plan /implement-plan /solo source tokens one-cmd how- last-log why.
|
|
37
|
-
Advise leftover: numbered pick each on own line after tagged recap; one empty blank line immediately before leftover 1. (leftover last; not adjacent to recap/body). Always-print typed leftover triple (advise-class final recap only). One verb per recap; never jammed Implement/write. No leftover on `need:` JSON wait-grunt grunt/implementer recaps slash-only turns.
|
|
38
|
-
1. {Implement|Write} with verbal plan
|
|
39
|
-
2. {same verb} with file plan
|
|
40
|
-
3. Tweak
|
|
41
|
-
Type Implement = in-repo product writes. Type Write = persist-only/implementer-nonsense (SCA/advise-only/`/tmp`/inspect-pause). Recap remainder still names the human gate; leftover is not `4. Contact bank`. `/handoff` stays slash not Write pick1. No omit 1/2. No frozen 4. Do not relabel 3. Parent echoes printed leftover. Match number or full leftover label (or unique tail `verbal plan` / `file plan`). Always-do leftover match printed lines; not Skill-name (`2` ≠ write-plan). Implement pick1 = spawn implementer; paste last [thinker] recap as spec (how+why; implementer must not paste why into code comments); no `.tmp/grunt/plans`; no write-plan; no implement-plan. Implement pick2 = persist `.tmp/grunt/plans/{n}` then spawn implementer `plan=/abs/...` one-shot skip pause. Write pick1 = `/tmp` persist recap/body under `.tmp/grunt/`; no implementer. Write pick2 = write-plan persist inspect-pause; remainder `/implement-plan {n}`; no implementer this turn. 3 / Tweak → stay advise; extra text = revision notes → thinker; bare 3/Tweak = stop wait notes. Bare `implement`/`implementer` → pick1 iff Implement-typed; else recap “no implementer this remainder”; no spawn. Bare `write` → pick1 iff Write-typed; else not a match. Type-mismatch → that recap no spawn. Alias `Implementer with …` → pick1/pick2 iff Implement-typed. `/write-plan` persist-only inspect-pause; remainder `/implement-plan {n}` (ask); ≠ leftover pick 2. `/implement-plan {n}` disk/file ≠ verbal. `ok`/`yes`/`y`/`continue` ≠ either pick.
|
|
42
|
-
Parent = orchestrator (this file). You do not talk. Spawn wait echo.
|
|
43
|
-
Spawn only grunt|implementer|thinker. Never spawn orchestrator. Children never spawn.
|
|
44
|
-
You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp spawn-mode-{sid} iff slash≠config; unlink grunt-off) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. After child: legal tag + one-line recap (no-strip; no compress-to-verdict); advise leftover numbered pick on following lines not crammed (echo printed leftover; always-print typed triple). Echo = report not command. Siblings still run: `[grunt]:` echo. No skip-spawn. /handoff = one-turn in-parent write to `.tmp/grunt/handoffs/`; recap `[handoff]:`. `/tmp` = one-turn in-parent write to `.tmp/grunt/`; recap `[tmp]:`. `/pickup` spawn-first; grunt resolve if needed; never parent Read; not a mode.
|
|
45
|
-
`/parent` hook last-ditch only. Skills spawn-first. Only `/solo` escapes spawn workflow.
|
|
46
|
-
grunt ← tools (facts/search/exec/git/web/test/low-reason mechanical write; snippet/cite/"what is X": `job: web`; URL/browse/click/fill/snap/live DOM: paste skill+browser.md abs paths, never websearch that page; never memory). implementer ← write defined solution (spec or small/simple); blocked if advise-class stems unless prompt-is-spec/false+. thinker ← think/plan/advise/recommend/how/why/explain (default product change; no implementer this turn).
|
|
47
|
-
Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only. Browse tags match → prompt must include abs `.rulesync/skills/browser/SKILL.md` and `.rulesync/reference/browser.md`.
|
|
48
|
-
Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. `timeout_ms=60000` every peek. GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
|
|
49
|
-
`need:` JSON → parse-need + parallel grunt; one `resume_from` + new verdicts; max 3; no re-send task; no fresh-spawn.
|
|
50
|
-
Child: this file does not apply; your agent file gates you. Never spawn.
|
|
2
|
+
@AGENTS.md
|
|
51
3
|
<!-- grunt:end -->
|