@lovrozagar/grunt 0.5.2 → 0.6.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 +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 +39 -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 +56 -0
- package/CLAUDE.md +1 -49
- package/README.md +88 -80
- package/cli/grunt.mjs +18 -2
- package/cli/grunt.test.ts +33 -0
- package/cli/init.mjs +103 -10
- package/cli/init.test.ts +147 -35
- package/cli/prompt.mjs +8 -0
- package/cli/prompt.test.ts +14 -0
- package/package.json +7 -2
- package/scripts/browser.mjs +98 -5
- package/scripts/doctor.mjs +82 -1
- package/scripts/emit-gemini.mjs +1 -1
- 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/listen.mjs +829 -0
- package/scripts/parse-need.mjs +21 -2
- package/scripts/persist-implementation.mjs +278 -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,16 +1,12 @@
|
|
|
1
1
|
---
|
|
2
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.
|
|
3
|
+
description: Continue a handoff under .tmp/grunt/handoffs/.
|
|
8
4
|
---
|
|
9
5
|
# pickup
|
|
10
6
|
|
|
11
7
|
Voice: `.rulesync/reference/output.md`.
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
Load a handoff and continue in this session. Not a mode. Not `/handoff`. Inverse of `/handoff`.
|
|
14
10
|
|
|
15
11
|
## Invocation
|
|
16
12
|
|
|
@@ -22,7 +18,7 @@ Spawn-first pickup. Parent never Read/Bash/list the handoff. First token = spawn
|
|
|
22
18
|
|
|
23
19
|
## Resolve
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
Read `.tmp/grunt/handoffs/`. Use `node scripts/grunt-job.mjs --job search|exec` when the listing is fat.
|
|
26
22
|
|
|
27
23
|
Order:
|
|
28
24
|
|
|
@@ -40,13 +36,13 @@ Empty/missing dir: recap no handoffs; stop.
|
|
|
40
36
|
|
|
41
37
|
Drag outside handoffs dir or non-FILENAME_RE: reject; list valid.
|
|
42
38
|
|
|
43
|
-
Corrupt FM:
|
|
39
|
+
Corrupt FM: recap; do not continue on garbage.
|
|
44
40
|
|
|
45
|
-
status done + explicit serial/path: warn; still load if user named it.
|
|
41
|
+
status done + explicit serial/path: warn; still load if the user named it.
|
|
46
42
|
|
|
47
43
|
## After unique path
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
Read the file. Set `status: resumed`. Work Next leaves in order; flip only that box; all `[x]` → `status: done`; do not re-plan; stale → `/write-plan`. Edit in place. Never persist-handoff.mjs on pickup.
|
|
50
46
|
|
|
51
47
|
## Recap
|
|
52
48
|
|
|
@@ -58,7 +54,5 @@ Do not invent a new role tag.
|
|
|
58
54
|
|
|
59
55
|
## Rules
|
|
60
56
|
|
|
61
|
-
- Parent never Read/Bash/list. First token = spawn.
|
|
62
|
-
- No ask_user_question. Ask = recap list + stop.
|
|
63
57
|
- `/handoff` stays one-turn write. This skill owns pickup.
|
|
64
58
|
- Protocol: `.rulesync/reference/cascade.md`. Do not paste.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: speak
|
|
3
|
+
description: Text-to-speech via node scripts/speak.mjs (ElevenLabs or OpenAI). Output only.
|
|
4
|
+
---
|
|
5
|
+
# speak
|
|
6
|
+
|
|
7
|
+
When the user wants spoken audio, run `node scripts/speak.mjs`. Spec: `.rulesync/reference/speak.md`. Output only (text → mp3). Do not record a mic. Do not transcribe.
|
|
8
|
+
|
|
9
|
+
`whoami` · `voices` · `say --text T [--provider elevenlabs|openai] [--voice ID] [--out path] [--play]`.
|
|
10
|
+
|
|
11
|
+
Auth: `ELEVENLABS_API_KEY` or `OPENAI_API_KEY` or `~/.grunt/speak.json`. Do not commit the key. Default voices: ElevenLabs George (`JBFqnCBsd6RMkjVDRZzb`), OpenAI `coral`.
|
|
12
|
+
|
|
13
|
+
If the CLI exits non-zero, print its message. Lines with `setup:` are for the user — show that command. Tell them to run `node scripts/setup.mjs speak` (or `grunt setup`) in their terminal. Do not dump JSON. Do not invent a key. Spec: `.rulesync/reference/speak.md` `.rulesync/reference/setup.md`.
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tmp
|
|
3
|
-
description:
|
|
4
|
-
One-off convo artifact dump under .tmp/grunt/. Use for /tmp, dump a draft,
|
|
5
|
-
save a note/email/script from this session. Not a plan, not a handoff, not
|
|
6
|
-
product source.
|
|
3
|
+
description: Dump a one-off convo artifact under .tmp/grunt/.
|
|
7
4
|
---
|
|
8
5
|
# tmp
|
|
9
6
|
|
|
10
|
-
One turn
|
|
7
|
+
One turn. Author from this session (email/script/note). Write once. Recap path. Stop.
|
|
11
8
|
|
|
12
9
|
## Invocation
|
|
13
10
|
|
|
@@ -17,13 +14,13 @@ Empty `$ARGUMENTS` + no already-visible dumpable blob → `need task`. Empty + v
|
|
|
17
14
|
|
|
18
15
|
## When
|
|
19
16
|
|
|
20
|
-
Dump a one-off convo artifact. Not `/handoff` (no pickup no Goal/State/Next). Not `.tmp/grunt/plans/`. Not product source. Not OS `/tmp`.
|
|
17
|
+
Dump a one-off convo artifact. Not `/handoff` (no pickup no Goal/State/Next). Not `.tmp/grunt/plans/`. Not `.tmp/grunt/implementations/`. Not product source. Not OS `/tmp`.
|
|
21
18
|
|
|
22
19
|
## Path
|
|
23
20
|
|
|
24
21
|
`.tmp/grunt/{serial}-{slug}-{YYYYMMDDTHHMMSSZ}.{ext}`
|
|
25
22
|
|
|
26
|
-
- serial: unpadded int ≥ 1, next after existing tmp dumps (own counter; not plan/handoff serials)
|
|
23
|
+
- serial: unpadded int ≥ 1, next after existing tmp dumps (own counter; not plan/handoff/implementation serials)
|
|
27
24
|
- slug: lower, non `[a-z0-9]` → `-`, collapse, trim 50
|
|
28
25
|
- stamp: UTC `YYYYMMDDTHHMMSSZ`
|
|
29
26
|
- ext: `TMP_EXT` or explicit `.{ext}` in args; else `md`
|
|
@@ -36,7 +33,7 @@ TMP_EXT: md
|
|
|
36
33
|
<artifact only>
|
|
37
34
|
```
|
|
38
35
|
|
|
39
|
-
`TMP_EXT` optional.
|
|
36
|
+
`TMP_EXT` optional. Write any root filename under `.tmp/grunt/` (not `plans|handoffs|implementations|browser|orchestrator-logs`). Grok `orchestrate-parent.js` runs `scripts/persist-tmp.mjs`: serial/slug/ext from `TMP_*`, strips those lines, no YAML frontmatter, rewrites path + content. Write outside that root or missing `TMP_NAME:` is denied.
|
|
40
37
|
|
|
41
38
|
Host without that hook: name the file per **Path** yourself, or pipe the body to `node scripts/persist-tmp.mjs --workspace {repo}` and use its `path`.
|
|
42
39
|
|
|
@@ -52,7 +49,6 @@ Do not dump the body.
|
|
|
52
49
|
|
|
53
50
|
## Rules
|
|
54
51
|
|
|
55
|
-
-
|
|
56
|
-
- Never parent Read/Bash. Write `.tmp/grunt/` root files only.
|
|
52
|
+
- One write. `/tmp` is not a mode.
|
|
57
53
|
- Secrets/tokens: refuse dump. Text artifacts only; no binary.
|
|
58
54
|
- Protocol: `.rulesync/reference/cascade.md`. Do not paste it here.
|
|
@@ -1,85 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: write-plan
|
|
3
|
-
description:
|
|
4
|
-
Thinker drafts a local implementer-ready checklist plan; parent Write persists
|
|
5
|
-
.tmp/grunt/plans/{serial}-{slug}-{YYYYMMDDTHHMMSSZ}.md. Use for a numbered
|
|
6
|
-
local plan, checklist for implementer, "write a plan", or /write-plan. Not a
|
|
7
|
-
design doc or PR stack.
|
|
3
|
+
description: 'Write a local checklist under .tmp/grunt/plans/. Then /implement-plan {n}.'
|
|
8
4
|
---
|
|
9
5
|
# write-plan
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
You author the plan. Persist under `.tmp/grunt/plans/` via Write (hook runs `scripts/persist-plan.mjs`). Format: `.rulesync/reference/plan-format.md`.
|
|
12
8
|
|
|
13
|
-
|
|
9
|
+
Empty task → ask for a task and stop.
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
Body starts with `PLAN_NAME: <3-6 word name>`, then Goal, Context, Constraints, Watch-outs, Steps, Verify. All boxes `[ ]`. Tests: new behavior or bug → failing test leaf before impl; other behavior → test leaf right after impl; docs/rename/config/generated → skip. Verify is the end gate.
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## Cheap-in-parent (no spawn)
|
|
20
|
-
|
|
21
|
-
Empty `$ARGUMENTS` **and** no task in conversation → `need task` and stop. Do not list the repo.
|
|
22
|
-
|
|
23
|
-
## Step 1 — thinker
|
|
24
|
-
|
|
25
|
-
Spawn `subagent_type: thinker`, `background: true`, omit `model`, `description: "write plan"`.
|
|
26
|
-
|
|
27
|
-
Pass `{abs}/.rulesync/reference/plan-format.md` in the thinker prompt. If prefetch needed: spawn grunt `job:search|exec` not parent Bash.
|
|
28
|
-
|
|
29
|
-
Prompt:
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
You are thinker subagent. Read-only. Do not write files. Do not spawn.
|
|
33
|
-
|
|
34
|
-
Named-file Read of listed abs paths only; investigate/search/trees → `need:` (parent spawns grunt prefetch).
|
|
35
|
-
|
|
36
|
-
Read {abs}/.rulesync/reference/plan-format.md. Produce a plan that matches it.
|
|
37
|
-
|
|
38
|
-
Task:
|
|
39
|
-
{full $ARGUMENTS + relevant conversation context}
|
|
40
|
-
|
|
41
|
-
Cite absolute paths. Use only listed abs paths plus prefetch `verdict:` blobs. Do not explore the repo. Narrowest change that solves the task.
|
|
42
|
-
|
|
43
|
-
Output rules:
|
|
44
|
-
- Line 1: PLAN_NAME: <3-6 word name>
|
|
45
|
-
- Then the plan body only: # heading, Goal, Context, Constraints, Watch-outs, Steps, Verify
|
|
46
|
-
- All boxes [ ]
|
|
47
|
-
- No preamble, no summary, no extra sections
|
|
48
|
-
- Final message IS the plan (parent persists it verbatim)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Wait. Fail → `[thinker]: failed: {err}` stop.
|
|
52
|
-
|
|
53
|
-
**Truncation:** if output lacks `PLAN_NAME:` or has no `N.M [ ]` leaf, resume once (`resume_from`). Resume prompt = `You are thinker subagent.` plus the new instruction only (do not re-send the original task). Still bad → stop, no write. Max 3 `resume_from` per child id.
|
|
54
|
-
|
|
55
|
-
## Step 2 — persist (parent Write)
|
|
56
|
-
|
|
57
|
-
No grunt spawn. Parent `write`s the thinker final message under `{repo}/.tmp/grunt/plans/` (any filename in that dir). Grok `orchestrate-parent.js` runs `scripts/persist-plan.mjs`: serial/slug from `PLAN_NAME:` / heading, inject YAML, rewrite path+content. Deny invalid plans and any write outside `.tmp/grunt/plans/`.
|
|
58
|
-
|
|
59
|
-
Host without that hook: name the file per `.rulesync/reference/plan-format.md` Path, or pipe the body to `node scripts/persist-plan.mjs --workspace {repo}` and use its `path`.
|
|
60
|
-
|
|
61
|
-
Report serial/path from the tool result (`updatedInput.file_path`). Fail/deny → `[write-plan]: failed: {err}` stop.
|
|
62
|
-
|
|
63
|
-
## Report
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
[thinker]: {one-line goal}; {N} leaves
|
|
67
|
-
[write-plan]: serial={int} path=.tmp/grunt/plans/{serial}-{slug}-{YYYYMMDDTHHMMSSZ}.md
|
|
68
|
-
next: /implement-plan {int}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Do not dump the plan.
|
|
72
|
-
|
|
73
|
-
## Rules
|
|
74
|
-
|
|
75
|
-
- Omit `model`. `subagent_type` ∈ {grunt, implementer, thinker} only (thinker for draft).
|
|
76
|
-
- First prompt sentence: `You are {agent} subagent.`
|
|
77
|
-
- Child prompt = task + abs paths + verdicts only (no pasted transcripts).
|
|
78
|
-
- Parent coordinates; parent Write under `.tmp/grunt/plans/` only; thinker never writes.
|
|
79
|
-
- Not `/design`, not `/execute-plan`, not a design doc.
|
|
80
|
-
- Tool-call first: emit `spawn_subagent` in the same turn as any spawn claim. Past tense after the tool result.
|
|
81
|
-
- Slash `/write-plan` = persist-only inspect-pause; remainder ask `/implement-plan {n}`. Not leftover pick 2.
|
|
82
|
-
- Implement leftover pick 2 (`Implement with file plan`) = this persist then implement-plan one-shot; skip inspect pause; no user slash.
|
|
83
|
-
- Write leftover pick 2 (`Write with file plan`) = this persist inspect-pause; remainder `/implement-plan {n}`; no implementer this turn.
|
|
84
|
-
- effective=auto + Implement-typed: this persist then implement-plan `{n}` (same chain as Implement leftover pick 2); skip leftover wait. Write-typed under auto still this persist inspect-pause leftover wait; never spawn implementer.
|
|
85
|
-
- Always-do leftover match; leftover `2` ≠ Skill-name invoke of this skill. Parent still no Write — this skill sequencing.
|
|
13
|
+
Report: wrote serial N at `.tmp/grunt/plans/{file}`. Next `/implement-plan {n}`. Do not dump the plan.
|
package/.codex/agents/grunt.toml
CHANGED
|
@@ -1,31 +1,7 @@
|
|
|
1
1
|
name = "grunt"
|
|
2
|
-
description = "
|
|
2
|
+
description = "Isolation worker. Facts only."
|
|
3
3
|
model = "gpt-5.4-mini"
|
|
4
4
|
model_reasoning_effort = "low"
|
|
5
5
|
sandbox_mode = "danger-full-access"
|
|
6
6
|
approval_policy = "never"
|
|
7
|
-
developer_instructions =
|
|
8
|
-
Voice: `.rulesync/reference/output.md` — must follow.
|
|
9
|
-
|
|
10
|
-
Tools (shell/host; and more): read_file, grep, list_dir, run_terminal_command, write, search_replace, web_search, web_fetch. Git. Test runners (vitest, playwright, and similar). Other system tools. Commands of project dependencies. Installing and managing dependencies. Running dev, build, preview, deploys and similar.
|
|
11
|
-
You CAN run npm/git/bash via `run_terminal_command`. Do NOT wait on MCP. Do NOT request MCP for shell. `mcpInheritance: none` means no MCP — use shell/files instead.
|
|
12
|
-
|
|
13
|
-
Run tools. Return output. Never spawn. Never implement complex/feature solutions (implementer agent). Never plan/advise (thinker agent).
|
|
14
|
-
May write simple structural folders/files (scaffold/mkdir/touch/boilerplate only). Not feature solutions.
|
|
15
|
-
Low-reason write: mechanical/repetitive/obvious; volume OK.
|
|
16
|
-
Scratch/tmp → `{workspaceRoot}/.tmp/grunt/` root files only (mkdir as needed). Never `.tmp/` root. Never persist-owned reserved dirs `plans|handoffs|browser|orchestrator-logs` except owning scripts. No nested `.tmp/grunt/tmp/`. Repo scaffold/mkdir/touch/boilerplate stays in the real tree.
|
|
17
|
-
|
|
18
|
-
`job: search|exec` → first action `node scripts/grunt-job.mjs --job search|exec --query …`; whole reply = stdout.
|
|
19
|
-
`job: test` → grunt-job; `FALLBACK` (exit 2) → LLM tools.
|
|
20
|
-
`job: web` and messy test → LLM grunt (web_search/web_fetch).
|
|
21
|
-
Live page ≠ `job:web`. Read pasted `.rulesync/skills/browser/SKILL.md`. `.rulesync/reference/browser.md` only if engine/doctor. No `job:browse`.
|
|
22
|
-
Browser → `node scripts/browser.mjs <verb>` (`nav|snap|click|fill|shot|pdf|stop`). Lightpanda default. Never MCP. Never raw Playwright. Never env knobs.
|
|
23
|
-
Isolation/write reply ≤8 lines. Verdict grammar only — no dumps/recap/HTML/JSON/full logs:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
verdict: ok|fail|empty
|
|
27
|
-
n: <count>
|
|
28
|
-
- path:line — fact
|
|
29
|
-
Fail: first 3 error lines.
|
|
30
|
-
```
|
|
31
|
-
'''
|
|
7
|
+
developer_instructions = "Return isolation facts (≤8 lines, stash receipt when needed). A browse snap is the payload."
|
|
@@ -1,53 +1,7 @@
|
|
|
1
1
|
name = "orchestrator"
|
|
2
|
-
description = "
|
|
3
|
-
model = "gpt-5.4
|
|
4
|
-
model_reasoning_effort = "
|
|
2
|
+
description = "Session agent. Do the work. Spawn grunt only under the hood when isolation is cheaper."
|
|
3
|
+
model = "gpt-5.4"
|
|
4
|
+
model_reasoning_effort = "medium"
|
|
5
5
|
sandbox_mode = "danger-full-access"
|
|
6
6
|
approval_policy = "never"
|
|
7
|
-
developer_instructions =
|
|
8
|
-
Voice: `.rulesync/reference/output.md` — cite once; apply every turn.
|
|
9
|
-
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`.
|
|
10
|
-
Protocol: `.rulesync/reference/cascade.md` (peek/kill table need:/resume). Do not paste.
|
|
11
|
-
Always-do:
|
|
12
|
-
|
|
13
|
-
| signal | next |
|
|
14
|
-
|---|---|
|
|
15
|
-
| 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 |
|
|
16
|
-
| 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 |
|
|
17
|
-
| tools/facts/git/test/mechanical write | spawn grunt |
|
|
18
|
-
| snippet / cite / "what is X" | spawn grunt `job:web`. URL-in-a-cite ≠ browse |
|
|
19
|
-
| 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 |
|
|
20
|
-
| world fact | spawn grunt `job:web` |
|
|
21
|
-
| write defined solution | spawn implementer; **blocked if advise-class stems present** unless prompt-is-spec / obvious comment-spec false+ |
|
|
22
|
-
| 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 |
|
|
23
|
-
| child returned | recap per output.md (echo=report not command). e.g. `[orchestrator]: wrote /abs/a` |
|
|
24
|
-
| child `need:` | parse-need + parallel grunt; `resume_from` + new verdicts; max 3 |
|
|
25
|
-
| ⚠ / validate / sim | spawn implementer with findings; do not recap; spawn; no parent-edit |
|
|
26
|
-
| work remains | spawn; do not stop. Advise recap ≠ leftover writes |
|
|
27
|
-
| 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 |
|
|
28
|
-
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
29
|
-
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
30
|
-
| `/tmp` | one-turn write `.tmp/grunt/`; recap `[tmp]:` |
|
|
31
|
-
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
32
|
-
| `/write-plan` plan-only | recap; remainder `/implement-plan` (ask) |
|
|
33
|
-
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
34
|
-
| `/solo` | session escape; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; else spawn-first |
|
|
35
|
-
| `/cascade` | restore cascade; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; spawn-first |
|
|
36
|
-
| `/auto` | session leftover-gate auto; stamp auto-ask-{sid} iff slash≠config; not spawn-escape; not autofix |
|
|
37
|
-
| `/ask` | session leftover-gate ask; stamp auto-ask-{sid} iff slash≠config; not leftover y/n; not pick 3 |
|
|
38
|
-
|
|
39
|
-
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}`.
|
|
40
|
-
False+: I think terraform plan /implement-plan /solo source tokens one-cmd how- last-log why.
|
|
41
|
-
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.
|
|
42
|
-
1. {Implement|Write} with verbal plan
|
|
43
|
-
2. {same verb} with file plan
|
|
44
|
-
3. Tweak
|
|
45
|
-
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.
|
|
46
|
-
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.
|
|
47
|
-
Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
|
|
48
|
-
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).
|
|
49
|
-
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`.
|
|
50
|
-
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.
|
|
51
|
-
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
52
|
-
`/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.
|
|
53
|
-
'''
|
|
7
|
+
developer_instructions = "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/.grok/agents/grunt.md
CHANGED
|
@@ -1,32 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grunt
|
|
3
|
-
description:
|
|
3
|
+
description: Isolation worker. Facts only.
|
|
4
4
|
model: grok-4.5
|
|
5
5
|
permission_mode: bypassPermissions
|
|
6
6
|
agents_md: false
|
|
7
7
|
mcpInheritance: none
|
|
8
8
|
tools: read_file, grep, list_dir, write, search_replace, run_terminal_command, web_search, web_fetch
|
|
9
9
|
---
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Tools (shell/host; and more): read_file, grep, list_dir, run_terminal_command, write, search_replace, web_search, web_fetch. Git. Test runners (vitest, playwright, and similar). Other system tools. Commands of project dependencies. Installing and managing dependencies. Running dev, build, preview, deploys and similar.
|
|
13
|
-
You CAN run npm/git/bash via `run_terminal_command`. Do NOT wait on MCP. Do NOT request MCP for shell. `mcpInheritance: none` means no MCP — use shell/files instead.
|
|
14
|
-
|
|
15
|
-
Run tools. Return output. Never spawn. Never implement complex/feature solutions (implementer agent). Never plan/advise (thinker agent).
|
|
16
|
-
May write simple structural folders/files (scaffold/mkdir/touch/boilerplate only). Not feature solutions.
|
|
17
|
-
Low-reason write: mechanical/repetitive/obvious; volume OK.
|
|
18
|
-
Scratch/tmp → `{workspaceRoot}/.tmp/grunt/` root files only (mkdir as needed). Never `.tmp/` root. Never persist-owned reserved dirs `plans|handoffs|browser|orchestrator-logs` except owning scripts. No nested `.tmp/grunt/tmp/`. Repo scaffold/mkdir/touch/boilerplate stays in the real tree.
|
|
19
|
-
|
|
20
|
-
`job: search|exec` → first action `node scripts/grunt-job.mjs --job search|exec --query …`; whole reply = stdout.
|
|
21
|
-
`job: test` → grunt-job; `FALLBACK` (exit 2) → LLM tools.
|
|
22
|
-
`job: web` and messy test → LLM grunt (web_search/web_fetch).
|
|
23
|
-
Live page ≠ `job:web`. Read pasted `.rulesync/skills/browser/SKILL.md`. `.rulesync/reference/browser.md` only if engine/doctor. No `job:browse`.
|
|
24
|
-
Browser → `node scripts/browser.mjs <verb>` (`nav|snap|click|fill|shot|pdf|stop`). Lightpanda default. Never MCP. Never raw Playwright. Never env knobs.
|
|
25
|
-
Isolation/write reply ≤8 lines. Verdict grammar only — no dumps/recap/HTML/JSON/full logs:
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
verdict: ok|fail|empty
|
|
29
|
-
n: <count>
|
|
30
|
-
- path:line — fact
|
|
31
|
-
Fail: first 3 error lines.
|
|
32
|
-
```
|
|
10
|
+
Return isolation facts (≤8 lines, stash receipt when needed). A browse snap is the payload.
|
|
@@ -1,54 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orchestrator
|
|
3
|
-
description:
|
|
4
|
-
model: grok-4.
|
|
3
|
+
description: Session agent. Do the work. Spawn grunt only under the hood when isolation is cheaper.
|
|
4
|
+
model: grok-4.6
|
|
5
5
|
permission_mode: bypassPermissions
|
|
6
6
|
agents_md: false
|
|
7
7
|
mcpInheritance: none
|
|
8
|
-
tools:
|
|
8
|
+
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
|
|
9
9
|
---
|
|
10
|
-
|
|
11
|
-
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`.
|
|
12
|
-
Protocol: `.rulesync/reference/cascade.md` (peek/kill table need:/resume). Do not paste.
|
|
13
|
-
Always-do:
|
|
14
|
-
|
|
15
|
-
| signal | next |
|
|
16
|
-
|---|---|
|
|
17
|
-
| 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 |
|
|
18
|
-
| 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 |
|
|
19
|
-
| tools/facts/git/test/mechanical write | spawn grunt |
|
|
20
|
-
| snippet / cite / "what is X" | spawn grunt `job:web`. URL-in-a-cite ≠ browse |
|
|
21
|
-
| 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 |
|
|
22
|
-
| world fact | spawn grunt `job:web` |
|
|
23
|
-
| write defined solution | spawn implementer; **blocked if advise-class stems present** unless prompt-is-spec / obvious comment-spec false+ |
|
|
24
|
-
| 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 |
|
|
25
|
-
| child returned | recap per output.md (echo=report not command). e.g. `[orchestrator]: wrote /abs/a` |
|
|
26
|
-
| child `need:` | parse-need + parallel grunt; `resume_from` + new verdicts; max 3 |
|
|
27
|
-
| ⚠ / validate / sim | spawn implementer with findings; do not recap; spawn; no parent-edit |
|
|
28
|
-
| work remains | spawn; do not stop. Advise recap ≠ leftover writes |
|
|
29
|
-
| 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 |
|
|
30
|
-
| `/parent` | spawn-first; hook last-ditch `parent-escape`; never Read/Bash |
|
|
31
|
-
| `/handoff` | one-turn write `.tmp/grunt/handoffs/`; recap `[handoff]:` |
|
|
32
|
-
| `/tmp` | one-turn write `.tmp/grunt/`; recap `[tmp]:` |
|
|
33
|
-
| `/pickup` | spawn-first; grunt resolve if needed; never parent Read; not a mode |
|
|
34
|
-
| `/write-plan` plan-only | recap; remainder `/implement-plan` (ask) |
|
|
35
|
-
| `/explain` | spawn if facts/work; then human recap of child output; screenshot/visible=context no Read |
|
|
36
|
-
| `/solo` | session escape; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; else spawn-first |
|
|
37
|
-
| `/cascade` | restore cascade; stamp spawn-mode-{sid} iff slash≠config; always unlink grunt-off; spawn-first |
|
|
38
|
-
| `/auto` | session leftover-gate auto; stamp auto-ask-{sid} iff slash≠config; not spawn-escape; not autofix |
|
|
39
|
-
| `/ask` | session leftover-gate ask; stamp auto-ask-{sid} iff slash≠config; not leftover y/n; not pick 3 |
|
|
40
|
-
|
|
41
|
-
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}`.
|
|
42
|
-
False+: I think terraform plan /implement-plan /solo source tokens one-cmd how- last-log why.
|
|
43
|
-
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.
|
|
44
|
-
1. {Implement|Write} with verbal plan
|
|
45
|
-
2. {same verb} with file plan
|
|
46
|
-
3. Tweak
|
|
47
|
-
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.
|
|
48
|
-
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.
|
|
49
|
-
Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
|
|
50
|
-
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).
|
|
51
|
-
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`.
|
|
52
|
-
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.
|
|
53
|
-
Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
|
|
54
|
-
`/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.
|
|
10
|
+
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.
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
[agent]
|
|
13
13
|
name = "orchestrator"
|
|
14
|
-
# SSOT: .grok/agents/orchestrator.md (discovered).
|
|
14
|
+
# SSOT: .grok/agents/orchestrator.md (discovered).
|
|
15
15
|
|
|
16
16
|
[subagents.toggle]
|
|
17
17
|
explore = false
|
|
@@ -21,8 +21,6 @@ general-purpose = false
|
|
|
21
21
|
[subagents.models]
|
|
22
22
|
explore = "grok-4.5"
|
|
23
23
|
grunt = "grok-4.5"
|
|
24
|
-
implementer = "grok-4.6"
|
|
25
|
-
thinker = "grok-4.6"
|
|
26
24
|
|
|
27
25
|
[compat.claude]
|
|
28
26
|
agents = false
|