@lovrozagar/grunt 0.1.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 +36 -0
- package/.agents/agents/implementer.md +40 -0
- package/.agents/agents/orchestrator.md +50 -0
- package/.agents/agents/thinker.md +27 -0
- package/.agents/hooks.json +26 -0
- package/.agents/mcp_config.json +3 -0
- package/.claude/agents/grunt.md +44 -0
- package/.claude/agents/implementer.md +46 -0
- package/.claude/agents/orchestrator.md +55 -0
- package/.claude/agents/thinker.md +34 -0
- package/.claude/settings.json +36 -0
- package/.codex/agents/grunt.toml +30 -0
- package/.codex/agents/implementer.toml +34 -0
- package/.codex/agents/orchestrator.toml +45 -0
- package/.codex/agents/thinker.toml +23 -0
- package/.codex/config.toml +2 -0
- package/.codex/hooks.json +26 -0
- package/.grok/agents/grunt.md +31 -0
- package/.grok/agents/implementer.md +35 -0
- package/.grok/agents/orchestrator.md +47 -0
- package/.grok/agents/thinker.md +25 -0
- package/.grok/config.toml +6 -0
- package/.grok/global-settings.toml +35 -0
- package/.grok/hooks/orchestrate-parent.js +476 -0
- package/.grok/hooks/orchestrate-parent.json +60 -0
- package/.grok/hooks/rtk-grok.js +137 -0
- package/.grok/hooks/rtk.json +16 -0
- package/.grok/hooks/rulesync.json +3 -0
- package/.grok/parent.md +1 -0
- package/.grok/roles/grunt.toml +5 -0
- package/.grok/roles/implementer.toml +5 -0
- package/.grok/roles/thinker.toml +5 -0
- package/.grok/skills/explain/SKILL.md +15 -0
- package/.grok/skills/implement-plan/SKILL.md +91 -0
- package/.grok/skills/parent/SKILL.md +12 -0
- package/.grok/skills/shared/plan-format.md +158 -0
- package/.grok/skills/write-plan/SKILL.md +84 -0
- package/.mcp.json +3 -0
- package/.rulesync/global-settings/antigravity.json +1 -0
- package/.rulesync/global-settings/claude.json +1 -0
- package/.rulesync/global-settings/codex.toml +1 -0
- package/.rulesync/global-settings/manifest.json +37 -0
- package/.rulesync/hooks.jsonc +22 -0
- package/.rulesync/mcp-policy.jsonc +15 -0
- package/.rulesync/reference/cascade.md +85 -0
- package/.rulesync/reference/hooks.md +19 -0
- package/.rulesync/reference/map.md +57 -0
- package/.rulesync/reference/rtk.md +23 -0
- package/.rulesync/rules/CLAUDE.md +13 -0
- package/.rulesync/rules/overview.md +23 -0
- package/.rulesync/skills/explain/SKILL.md +15 -0
- package/.rulesync/skills/parent/SKILL.md +12 -0
- package/.rulesync/skills/terse/SKILL.md +8 -0
- package/.rulesync/subagents/grunt.md +51 -0
- package/.rulesync/subagents/implementer.md +54 -0
- package/.rulesync/subagents/orchestrator.md +69 -0
- package/.rulesync/subagents/thinker.md +44 -0
- package/AGENTS.md +12 -0
- package/CLAUDE.md +7 -0
- package/LICENSE +21 -0
- package/README.md +56 -0
- package/bin/grunt.js +4 -0
- package/cli/grunt.mjs +54 -0
- package/cli/grunt.test.ts +117 -0
- package/cli/init.mjs +113 -0
- package/cli/init.test.ts +268 -0
- package/package.json +77 -0
- package/scripts/check-globals.mjs +98 -0
- package/scripts/emit-mcp-policy.mjs +434 -0
- package/scripts/gate-fat-tools.mjs +485 -0
- package/scripts/grunt-job.mjs +482 -0
- package/scripts/parse-need.mjs +75 -0
- package/scripts/persist-plan.mjs +309 -0
- package/scripts/purge-global-mcps.mjs +291 -0
- package/scripts/scrub-spawn-prompt.mjs +219 -0
- package/scripts/scrub-text +58 -0
- package/scripts/scrub-text-lib.mjs +210 -0
- package/scripts/sync-global-settings.mjs +239 -0
- package/scripts/telemetry.mjs +38 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [cascade]
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Cascade
|
|
6
|
+
|
|
7
|
+
Shipped protocol: **parent-only spawn**. Only the parent **orchestrator** session calls `spawn_subagent`. Implementer and thinker never spawn. Isolation is a **grunt sibling**. See [map](map.md).
|
|
8
|
+
|
|
9
|
+
## Parent orchestrator
|
|
10
|
+
|
|
11
|
+
1. Super-trivial / yes-no / definition-from-prompt with zero tools **and absolutely sure** → parent answers; no grunt/child. Parent does not web_search. `2+2` → answer.
|
|
12
|
+
2. Not absolutely sure / fresh or world facts → spawn grunt `job: web`. Do not answer from memory.
|
|
13
|
+
3. Cheap reply already in context: answer. No tools.
|
|
14
|
+
4. Tiny lookup (one file, ≤10-hit grep, list_dir): do it here. No bash. Do not spawn. Limits auto-injected; denylist / file>200KB / head_limit>500 → spawn grunt.
|
|
15
|
+
5. Fat dump: `spawn_subagent` type=grunt with `job: search|exec|web|test`. Isolated window. Expect `verdict:`.
|
|
16
|
+
6. Low-reason write (mechanical/repetitive/obvious; volume OK): spawn grunt. Mid reason / feature judgment: spawn implementer. Design / architecture / hard debug: spawn thinker.
|
|
17
|
+
7. Unsure → implementer.
|
|
18
|
+
|
|
19
|
+
Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked.
|
|
20
|
+
|
|
21
|
+
Implementer/thinker may tiny-Read/Grep/list_dir themselves. `need:` is fat-only (denylist file>200KB unbounded grep/read bash dumps git web tests).
|
|
22
|
+
|
|
23
|
+
Long parent sessions rely on two-pass compaction; prefer a new parent session per task rather than unbounded resume chains. `[features] two_pass_compaction = true` must live in `~/.grok/config.toml` (from `.grok/global-settings.toml` via `npm run sync:globals` dry-run / `npm run sync:globals:apply`). Project `.grok/config.toml` cannot set `[features]`. Do not add a SessionStart hook.
|
|
24
|
+
|
|
25
|
+
## Pre-spawn
|
|
26
|
+
|
|
27
|
+
If dumps are known (paths, rg, test cmd): parent and implementer run `node scripts/grunt-job.mjs --job search|exec --query …` in-session and pass those `verdict:` blobs into the child prompt. Optional `--path` `--glob` (repeatable) `--cwd`. `--query` is one argv; regex `|` OK. Never `cd &&`. Unknown flags or exec shell-meta in query → FALLBACK (exit 2). Do not start the child and `need:` for a dump already known. Thinker stays read-only (no bash): fat search|exec via `need:` + SubagentStop intercept.
|
|
28
|
+
|
|
29
|
+
For spawned grunt `job: search|exec`, first action is still `node scripts/grunt-job.mjs --job search|exec --query …` and echo stdout as the whole reply. Bounded `job: test` may try the same script (`--job test`); `job: web` and messy `job: test` stay LLM grunt. If the script prints `FALLBACK` (exit 2), LLM grunt may use tools.
|
|
30
|
+
|
|
31
|
+
## Wait / peek
|
|
32
|
+
|
|
33
|
+
Parent-only. Non-blocking spawn so each child has a host id immediately. Per-child, not one global timer.
|
|
34
|
+
Every ≤60s peek is real host status (no `sleep` then guess). First return ≤60s is the peek (earlier if the child finishes).
|
|
35
|
+
Quote host fields only (`status`, elapsed since spawn, last activity/output snippet) or quote the error. Never invent.
|
|
36
|
+
Classify `done` | `alive` | `stuck` vs prior peek: **done** (completed/failed), **alive** (running + fields/output changed), **stuck** (running + unchanged). Unchanged snippet = stuck, not “still working”.
|
|
37
|
+
Loop until done. No auto-kill. Kill only if the user asks and the host has a kill tool.
|
|
38
|
+
Then print recap as `[agent]: …` with real child output. Do not redo the child's work.
|
|
39
|
+
|
|
40
|
+
Parent Stop (`MAX_STOP=3`): do not waive fenced/impl finals for `tools-used` stamp. Allow cheap trivia, `[grunt|implementer|thinker]:` recap prefix, or consume `parent-escape-{sid}` once. Else block.
|
|
41
|
+
`/parent` is one-turn (not a mode): UserPromptSubmit writes `.tmp/orchestrator-logs/parent-escape-{sid}`; Stop consumes+unlinks once. Next Stop resumes spawn/cheap/recap rules. Skills point here; do not paste this file.
|
|
42
|
+
|
|
43
|
+
Host mapping (in-tree only; do not invent peek/kill APIs). GAP rows: no fake peeks, no auto-kill.
|
|
44
|
+
|
|
45
|
+
| Host | Spawn | Peek | Kill |
|
|
46
|
+
| --- | --- | --- | --- |
|
|
47
|
+
| Grok | `spawn_subagent` `background:true` → `task_id` | `get_command_or_subagent_output` + `timeout_ms=60000` | `kill_command_or_subagent` (user-ask only) |
|
|
48
|
+
| Claude Code | `Agent` if the parent session exposes it | GAP unless an in-tree schema names a status/output tool on that id (do not invent `TaskOutput`); else block on Agent return and classify `done` | GAP unless in-tree; no auto-kill |
|
|
49
|
+
| Codex | host agent/call | GAP; block on host agent/call return; classify `done` | GAP; no auto-kill |
|
|
50
|
+
| Antigravity | main-session parent | GAP peek/kill; main-session parent | GAP; no auto-kill |
|
|
51
|
+
| Gemini | not emitted; tracked gap | GAP; no fake peeks | GAP; no auto-kill |
|
|
52
|
+
|
|
53
|
+
## Late dump (`need:` + `resume_from`)
|
|
54
|
+
|
|
55
|
+
If implementer/thinker still needs a fat dump: it **stops**. The stop message for dumps is this JSON line only (no prose):
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
need: [{"job":"search","query":"..."}]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`job` ∈ search|exec|web|test. 1–N jobs. Cap one batch at 4 jobs; overflow stays for the next loop. Do not emit N sequential single-job stops for known-parallel dumps.
|
|
62
|
+
|
|
63
|
+
If a child still emits `need:` and every job is `search|exec`, SubagentStop (and child `Stop` with `subagentType`) runs grunt-job in-hook and continues the child with concatenated `verdict:` blobs (`decision: "block"` + `additionalContext`). Mixed / web / test batches are not intercepted: parent `scripts/parse-need.mjs` + LLM grunt. Thinker has no bash; intercept still applies.
|
|
64
|
+
|
|
65
|
+
Parent: parse with `scripts/parse-need.mjs` (same grammar). If parse succeeds, fan out those jobs as parallel grunt spawns; do not interpret surrounding prose. Wait; one `resume_from: <child id>` with **new** `verdict:` blobs only. Do not fresh-spawn. Max 3 `resume_from` for one child id; then parent reports blocked/partial with the verdicts already gathered.
|
|
66
|
+
|
|
67
|
+
Resume prompt = `You are {agent} subagent.` plus the new verdicts. Do not re-send the original task, cascade, or prior verdicts (`resume_from` already has the transcript).
|
|
68
|
+
|
|
69
|
+
Superterse does not change need:/verdict:/plan grammar.
|
|
70
|
+
|
|
71
|
+
## Isolation grunt `verdict:`
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
verdict: ok|fail|empty
|
|
75
|
+
n: <count>
|
|
76
|
+
- path:line — fact
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Fail: first 3 error lines. ≤8 lines. No dumps, recap, HTML, JSON, full logs.
|
|
80
|
+
|
|
81
|
+
Implementer/thinker: fat dumps via `need:` JSON. Implementer shell via rtk; cat/rg/curl/tests without rtk → fat `need:`. For search|exec that already fits 8-line `verdict:`, implementer runs `node scripts/grunt-job.mjs` in-session instead of `need:` (`--path`/`--glob`/`--cwd` OK; never `cd &&`).
|
|
82
|
+
|
|
83
|
+
Child prompt = `You are {agent} subagent.` + task + abs paths + verdicts only.
|
|
84
|
+
|
|
85
|
+
Grok PostToolUse is observe-only. SessionStart stays empty (token baseline). See [hooks](hooks.md).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [hooks]
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Hooks
|
|
6
|
+
|
|
7
|
+
SessionStart: keep empty (token baseline). Do not inject context. Do not register a SessionStart hook on `orchestrate-parent.json`.
|
|
8
|
+
|
|
9
|
+
Grok PostToolUse / UserPromptSubmit / SessionStart are observe-only — do not attempt output scrub; compress via RTK / spawn / isolation verdict only. Do not add PostToolUse scrub hooks.
|
|
10
|
+
|
|
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
|
+
|
|
13
|
+
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.
|
|
14
|
+
|
|
15
|
+
SubagentStop (and child Stop with `subagentType`) intercepts a parseable `need:` whose jobs are all `search|exec` (cap 4): runs grunt-job in-hook and continues the child with concatenated `verdict:` blobs. Mixed/web/test, parse fail, FALLBACK, `stopHookActive`, or more than 3 intercepts per child session → empty stdout (allow stop; parent LLM path). Parent Stop (`MAX_STOP=3`): do not waive impl finals for `tools-used`. Allow cheap, `[grunt|implementer|thinker]:` recap prefix, or consume `parent-escape-{sid}` once (`/parent`). Stamps: `tools-used` / `stop-block` / `need-intercept` / `parent-escape`. Skills point to cascade; do not paste protocol here.
|
|
16
|
+
|
|
17
|
+
Stop and SubagentStop timeout is 30s (grunt-job cap is 20s). PreToolUse / PostToolUse / UserPromptSubmit stay at 5s. If the intercept times out, the hook fail-opens and the child stops without verdicts.
|
|
18
|
+
|
|
19
|
+
`[features] two_pass_compaction` must live in `~/.grok/config.toml` (from `.grok/global-settings.toml` via `npm run sync:globals` / `npm run sync:globals:apply`). Project `.grok/config.toml` cannot set `[features]`.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [map]
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Map
|
|
6
|
+
|
|
7
|
+
Cheap outline. Not a file dump.
|
|
8
|
+
|
|
9
|
+
## Protocol
|
|
10
|
+
- `.rulesync/reference/cascade.md` — spawn / need / resume
|
|
11
|
+
- `.rulesync/reference/rtk.md` — shell compression
|
|
12
|
+
- `.rulesync/reference/hooks.md` — hook policy
|
|
13
|
+
- `.rulesync/reference/map.md` — this file
|
|
14
|
+
|
|
15
|
+
## Agent SSOT
|
|
16
|
+
- `.rulesync/subagents/{orchestrator,implementer,thinker,grunt}.md`
|
|
17
|
+
- `.rulesync/rules/overview.md` → `AGENTS.md`
|
|
18
|
+
- `.rulesync/rules/CLAUDE.md` → `CLAUDE.md`
|
|
19
|
+
- Default output (overview.md → AGENTS.md; also agent bodies + CLAUDE.md, not auto-injected): EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse; fragments OK; no complete-sentence padding; no host/blog communication style; keep need:/verdict:/plan grammar; only `/explain` escapes.
|
|
20
|
+
|
|
21
|
+
## Grok hand files
|
|
22
|
+
- `.grok/hooks/orchestrate-parent.js` + `orchestrate-parent.json` — parent spawn/fat/stop/plan-write / SubagentStop intercept
|
|
23
|
+
- `.grok/hooks/rtk.json` — RTK
|
|
24
|
+
- `.grok/skills/{write-plan,implement-plan,shared,parent}/` — `/parent` one-turn; point to cascade, do not paste
|
|
25
|
+
- `.grok/parent.md` — 1-line pointer to orchestrator agent; not SessionStart
|
|
26
|
+
- `.grok/roles/*.toml`
|
|
27
|
+
- `.grok/global-settings.toml` — merged into `~/.grok/config.toml` by `scripts/sync-global-settings.mjs` (not auto-loaded; project config cannot set `[features]`)
|
|
28
|
+
- `.rulesync/global-settings/` — host manifest and reserved noop payloads
|
|
29
|
+
- `.rulesync/mcp-policy.jsonc` — MCP deny-default SSOT (`default: deny`, `allow: []`)
|
|
30
|
+
- `.rulesync/skills/parent/` — `/parent` skill SSOT; copy lives in `.grok/skills/parent/`
|
|
31
|
+
|
|
32
|
+
## Scripts
|
|
33
|
+
- `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`)
|
|
34
|
+
- `scripts/gate-fat-tools.mjs`
|
|
35
|
+
- `scripts/scrub-spawn-prompt.mjs`
|
|
36
|
+
- `scripts/grunt-job.mjs` — flags `--job` `--query` `--path` `--glob` (repeatable) `--cwd`; regex in `--query` OK; never `cd &&`; unknown flags / exec shell-meta → FALLBACK
|
|
37
|
+
- `scripts/parse-need.mjs`
|
|
38
|
+
- `scripts/persist-plan.mjs`
|
|
39
|
+
- `scripts/sync-global-settings.mjs` — dry-run-by-default merge of `.grok/global-settings.toml` into `$HOME/.grok/config.toml`; manifest in `.rulesync/global-settings/`; `skipKeyPattern` skips MCP; never copies project MCP into `$HOME/.grok`
|
|
40
|
+
- `scripts/purge-global-mcps.mjs` — dry-run-by-default purge of stubborn global MCP sources (`$HOME/.grok/config.toml` plugins + `disabled_mcp_servers`, `$HOME/.cursor/mcp.json` `MCP_DOCKER`); `--apply` writes; never project MCP
|
|
41
|
+
- `scripts/emit-mcp-policy.mjs` — emit project MCP deny-default from `.rulesync/mcp-policy.jsonc` (not `rulesync -f mcp`)
|
|
42
|
+
- `scripts/telemetry.mjs` — append-only `.tmp/orchestrator-logs/telemetry.ndjson` from hooks / grunt-job CLI; fail-open; never stdout
|
|
43
|
+
|
|
44
|
+
## Stamps (`.tmp/orchestrator-logs/`)
|
|
45
|
+
- `tools-used` / `stop-block` / `need-intercept` / `parent-escape` — Stop does not waive impl finals for `tools-used`; `/parent` writes `parent-escape-{sid}` once
|
|
46
|
+
|
|
47
|
+
## Generated (do not hand-edit; committed, not gitignored)
|
|
48
|
+
- `AGENTS.md`, `CLAUDE.md`
|
|
49
|
+
- `.grok/agents/*`
|
|
50
|
+
- `.claude/agents/*`
|
|
51
|
+
- `.codex/agents/*`
|
|
52
|
+
- `.agents/agents/*`
|
|
53
|
+
- `.grok/config.toml` — project MCP `[[permissions]]` + `[plugins] deny_default`; no `[features]`
|
|
54
|
+
- `.mcp.json` — `mcpServers` from policy allow only
|
|
55
|
+
- `.claude/settings.json` MCP keys (`enableAllProjectMcpServers`, `enabledMcpjsonServers`, `permissions.deny` `mcp__*`); Agent denies/hooks stay
|
|
56
|
+
- `.codex/config.toml` `mcp_servers` (absent when allow empty); keep `[agents] max_depth`
|
|
57
|
+
- `.agents/mcp_config.json` — `mcpServers` from policy allow only
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [rtk]
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# RTK
|
|
6
|
+
|
|
7
|
+
Shell stdout compression. PreToolUse: Bash → `rtk <cmd>`. Not Read/Grep/Glob/prompts/images.
|
|
8
|
+
|
|
9
|
+
Grok PostToolUse is observe-only — do not attempt output scrub; compress via RTK / spawn / isolation verdict only.
|
|
10
|
+
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
ls · tree · read · smart · git · gh · glab · aws · psql · pnpm · err · test · json · deps · env · find · diff · log · dotnet · docker · kubectl · oc · summary · grep · rg · init · wget · wc · gain · cc-economics · config · jest · vitest · prisma · tsc · next · lint · prettier · format · playwright · cargo · npm · npx · curl · discover · session · telemetry · learn · run · proxy · pipe · trust · untrust · verify · ruff · pytest · mypy · rake · rubocop · rspec · pip · go · gt · golangci-lint · gradlew · mvn · hook-audit · rewrite · hook · help
|
|
14
|
+
|
|
15
|
+
**git:** diff · log · status · show · add · commit · push · pull · branch · fetch · stash (list show pop apply drop push) · worktree
|
|
16
|
+
**cargo:** build · test · clippy · check · install · nextest
|
|
17
|
+
**go:** test · build · vet
|
|
18
|
+
**docker:** ps · images · logs · compose (ps logs build)
|
|
19
|
+
**gh:** pr · issue · run · repo
|
|
20
|
+
|
|
21
|
+
Flags: `-v`/`-vv`/`-vvv` · `--ultra-compact` · `--skip-env` · `-h` · `-V`
|
|
22
|
+
|
|
23
|
+
Unknown cmds passthrough. `rtk run` unfiltered.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
root: true
|
|
3
|
+
targets:
|
|
4
|
+
- claudecode
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Claude Code Rules
|
|
8
|
+
|
|
9
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
10
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
11
|
+
|
|
12
|
+
See `AGENTS.md` and `.rulesync/reference/cascade.md`.
|
|
13
|
+
Wait/peek (parent): ≤60s per-child peek; quote real host fields; classify `done|alive|stuck`; never invent; no auto-kill; cascade mapping. Live parent is this file, not `.claude/agents/orchestrator.md`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
root: true
|
|
3
|
+
targets:
|
|
4
|
+
- agentsmd
|
|
5
|
+
- grokcli
|
|
6
|
+
- codexcli
|
|
7
|
+
- antigravity-cli
|
|
8
|
+
globs:
|
|
9
|
+
- "**/*"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Route
|
|
13
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
14
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
15
|
+
Role: parent=orchestrator | spawn `grunt`|`implementer`|`thinker`. Children never spawn.
|
|
16
|
+
Law: read `.rulesync/subagents/<role>.md` once (parent → `orchestrator.md`). That file gates you. Do not re-cat.
|
|
17
|
+
Fat/`need:`/grunt-job/Stop: `.rulesync/reference/cascade.md` once. Missing → stop `need:` that path. Never re-read.
|
|
18
|
+
Index only: `.rulesync/reference/map.md` `.rulesync/reference/rtk.md`. No procedure lives here.
|
|
19
|
+
Parent unsure → implementer. Fresh/world fact → grunt `job: web`. Super-trivial + absolutely sure + zero tools → answer.
|
|
20
|
+
User-facing search/exec/git/web/test/write/impl → spawn first (no try-then-spawn). Child done → `[agent]:` echo only.
|
|
21
|
+
Implementer/thinker do not spawn. Dumps = `need:` JSON stop (cascade). Thinker: no bash. Plan: patch `[ ]` → `[x]` when done.
|
|
22
|
+
Wait/peek (parent): ≤60s per-child peek; quote real host fields; classify `done|alive|stuck`; never invent; no auto-kill; cascade mapping.
|
|
23
|
+
If this file conflicts with the law file the law file wins.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: explain
|
|
3
|
+
description: >
|
|
4
|
+
One-off human explanation. Use for /explain, "explain this", or a request
|
|
5
|
+
to explain for a human. Not a session mode. Escape superterse for this
|
|
6
|
+
reply only, then revert.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
This reply only: explain for a human. Not a mode switch or session flag. After this reply, revert to maximal superterse automatically.
|
|
10
|
+
|
|
11
|
+
Still concise. Complete sentences OK. Prioritize clarity over token compression. Do not dump, sprawl, or narrate process.
|
|
12
|
+
|
|
13
|
+
en-US unless asked. Keep need:/verdict:/plan grammar when those apply.
|
|
14
|
+
|
|
15
|
+
This skill is the only one-off escape from superterse.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: parent
|
|
3
|
+
description: >
|
|
4
|
+
One-turn parent-orchestrator escape. Use for /parent when this turn
|
|
5
|
+
must complete in-parent. Not a session mode.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
This turn only: parent may finish in-session. Not a mode. After this reply, Stop enforcement resumes.
|
|
9
|
+
|
|
10
|
+
`/parent` writes `parent-escape-{sid}` (Stop consume+unlink once). Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade here.
|
|
11
|
+
|
|
12
|
+
Do not stay in-parent after this reply. Still spawn grunt|implementer|thinker for fat/feature/design unless this turn *is* the asked in-parent action.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: terse
|
|
3
|
+
description: Terse command mode - minimal output, compact summaries
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Already the default. Re-assert. Do not expand.
|
|
7
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
8
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grunt
|
|
3
|
+
description: Isolation worker. Cheap tools, fat dumps, tests, curl, web. Low-reason writes OK (mechanical/repetitive/obvious; volume OK). Mid reason / feature judgment → implementer. Use for grep/find/curl/web_search/playwright/vitest isolation.
|
|
4
|
+
tier: grunt
|
|
5
|
+
exec: true
|
|
6
|
+
claudecode:
|
|
7
|
+
model: haiku
|
|
8
|
+
effort: low
|
|
9
|
+
permissionMode: default
|
|
10
|
+
tools: [Read, Grep, Glob, Bash, Write, Edit, WebSearch, WebFetch]
|
|
11
|
+
disallowedTools: [Agent]
|
|
12
|
+
grokcli:
|
|
13
|
+
model: grok-4.5
|
|
14
|
+
agents_md: false
|
|
15
|
+
mcpInheritance: none
|
|
16
|
+
tools: read_file, grep, list_dir, write, search_replace, run_terminal_command, web_search, web_fetch
|
|
17
|
+
codexcli:
|
|
18
|
+
model: gpt-5.4-mini
|
|
19
|
+
model_reasoning_effort: low
|
|
20
|
+
sandbox_mode: workspace-write
|
|
21
|
+
antigravity-cli:
|
|
22
|
+
model: flash
|
|
23
|
+
subagent: true
|
|
24
|
+
mainAgent: false
|
|
25
|
+
inheritMcp: false
|
|
26
|
+
tools: [view_file, grep_search, run_command, replace_file_content]
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
You are **grunt**: isolation worker. Low-reason write. Do not author feature code. Never spawn. See cascade.
|
|
30
|
+
|
|
31
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
32
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
33
|
+
|
|
34
|
+
## Low-reason write
|
|
35
|
+
|
|
36
|
+
Mechanical / repetitive / obvious — bulk create fill rename config one-liners typos docs boilerplate simple scripts with no design. Volume OK. Mid reason / feature judgment → implementer.
|
|
37
|
+
Reply `verdict:` ≤8 lines (summarize; do not list 100 paths). Isolation jobs stay search|exec|web|test.
|
|
38
|
+
|
|
39
|
+
## Isolation (spawned with job:)
|
|
40
|
+
|
|
41
|
+
job: search|exec|web|test. Fetch facts. Shell via rtk. Prefer Grep/Glob/Read over Bash.
|
|
42
|
+
|
|
43
|
+
For `job: search|exec` first action is `node scripts/grunt-job.mjs --job search|exec --query …` and echo stdout as the whole reply. For `job: test` try `node scripts/grunt-job.mjs --job test --query …` then FALLBACK to LLM tools. `job: web` and messy `job: test` stay LLM grunt. If the script prints `FALLBACK` (exit 2), LLM grunt may use tools. LLM grunt is only for web + messy test.
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
verdict: ok|fail|empty
|
|
47
|
+
n: <count>
|
|
48
|
+
- path:line — fact
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Fail: first 3 error lines. ≤8 lines. no dumps, no recap, no full logs/HTML/JSON/diff.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: implementer
|
|
3
|
+
description: "Feature implementation agent. Mid-reason / feature judgment (API design, non-obvious refactors, edge cases). Returns need: for fat dumps to parent."
|
|
4
|
+
tier: implementer
|
|
5
|
+
claudecode:
|
|
6
|
+
model: sonnet
|
|
7
|
+
effort: medium
|
|
8
|
+
permissionMode: acceptEdits
|
|
9
|
+
tools: [Read, Edit, Write, Bash, Grep, Glob, WebSearch]
|
|
10
|
+
disallowedTools: [Agent]
|
|
11
|
+
grokcli:
|
|
12
|
+
model: grok-4.6
|
|
13
|
+
agents_md: false
|
|
14
|
+
mcpInheritance: none
|
|
15
|
+
tools: read_file, grep, list_dir, write, search_replace, run_terminal_command, web_search, todo_write
|
|
16
|
+
codexcli:
|
|
17
|
+
model: gpt-5.4
|
|
18
|
+
model_reasoning_effort: medium
|
|
19
|
+
sandbox_mode: workspace-write
|
|
20
|
+
antigravity-cli:
|
|
21
|
+
model: pro
|
|
22
|
+
subagent: true
|
|
23
|
+
mainAgent: false
|
|
24
|
+
inheritMcp: false
|
|
25
|
+
tools: [view_file, grep_search, run_command, replace_file_content]
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
You are **implementer**: mid-tier implementation agent. Never spawn.
|
|
29
|
+
|
|
30
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
31
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
32
|
+
|
|
33
|
+
**Feature work**: mid-reason judgment — feature logic, API design, non-obvious refactors, edge cases, architecture-aware code. Return `need:` if fat dump required.
|
|
34
|
+
|
|
35
|
+
## HARD LAWS (violate = fail)
|
|
36
|
+
1. File ≥20KB OR path in {cascade.md grunt-job.mjs AGENTS.md overview.md rtk.md} already summarized → do NOT Read. Missing code? emit only: need: [{"job":"search","query":"..."}]
|
|
37
|
+
2. grunt-job --query = one argv. No cd&& pipes tail.
|
|
38
|
+
3. Dump stop = exactly `need: [{...}]` one line. Cap 4 jobs.
|
|
39
|
+
4. After each leaf: flip that `[ ]`→`[x]` in the plan file (box only).
|
|
40
|
+
5. Do not re-open cascade/rtk/map for reminders. Do not "do all of plan 2".
|
|
41
|
+
|
|
42
|
+
Shell via rtk. Fat dumps (`rg`/`curl`/`npm test`, `node_modules`/lockfiles/`dist`): `need:` (fat-only). Do not cat denylist paths.
|
|
43
|
+
|
|
44
|
+
Tiny Read/Grep/list_dir in-child. `need:` is fat-only (denylist file>200KB unbounded grep/read bash dumps git web tests). See cascade.
|
|
45
|
+
|
|
46
|
+
For search|exec that already fits 8-line `verdict:`: run `node scripts/grunt-job.mjs --job search|exec --query …` in-session instead of `need:`. FALLBACK then `need:` + LLM grunt. `job:web` and messy `job:test` stay `need:` JSON.
|
|
47
|
+
|
|
48
|
+
Dump stop JSON only:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
need: [{"job":"search","query":"..."}]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
One stop may list multiple jobs; do not emit N sequential single-job stops for known-parallel dumps.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: orchestrator
|
|
3
|
+
description: Parent supervisor only. Orchestrates grunt | implementer | thinker. Cheap zero-tool replies. User-facing search/exec/git/web/test/write = spawn first; no try-then-spawn. In-session grunt-job only for known child-feed dumps.
|
|
4
|
+
targets:
|
|
5
|
+
- claudecode
|
|
6
|
+
- grokcli
|
|
7
|
+
- codexcli
|
|
8
|
+
- antigravity-cli
|
|
9
|
+
claudecode:
|
|
10
|
+
model: haiku
|
|
11
|
+
effort: low
|
|
12
|
+
permissionMode: default
|
|
13
|
+
tools: [Read, Grep, Glob, Bash, Write, Agent]
|
|
14
|
+
grokcli:
|
|
15
|
+
model: grok-4.5
|
|
16
|
+
permission_mode: default
|
|
17
|
+
agents_md: false
|
|
18
|
+
mcpInheritance: none
|
|
19
|
+
tools: spawn_subagent, read_file, grep, list_dir, write, todo_write, get_command_or_subagent_output, kill_command_or_subagent, run_terminal_command
|
|
20
|
+
codexcli:
|
|
21
|
+
model: gpt-5.4-mini
|
|
22
|
+
model_reasoning_effort: low
|
|
23
|
+
sandbox_mode: workspace-write
|
|
24
|
+
antigravity-cli:
|
|
25
|
+
model: flash
|
|
26
|
+
subagent: true
|
|
27
|
+
mainAgent: false
|
|
28
|
+
inheritMcp: false
|
|
29
|
+
tools: [view_file, grep_search, run_command]
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
You are **orchestrator**, the parent session. You do not implement, test, or dump.
|
|
33
|
+
|
|
34
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
35
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
36
|
+
|
|
37
|
+
Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Children never spawn.
|
|
38
|
+
|
|
39
|
+
## Orchestrate
|
|
40
|
+
- Super-trivial / yes-no / definition-from-prompt with zero tools **and absolutely sure**: answer. No grunt, no child, no tools. Parent does not web_search. `2+2` → answer.
|
|
41
|
+
- Cheap reply already in context: answer. No tools.
|
|
42
|
+
- User-facing search / exec / git / web / test / write / impl / repo facts: **first action is spawn** (`grunt` for facts, `implementer`/`thinker` per below). No parent probe. Ban try-tool → deny → spawn. Ban preamble essays before spawn.
|
|
43
|
+
- Fresh/world facts: spawn grunt `job: web`. Do not answer from memory.
|
|
44
|
+
- Tiny read/grep/list_dir: parent self-ops only (law files, spawn wiring). Never to answer the user.
|
|
45
|
+
- Low-reason write (mechanical/repetitive/obvious; volume OK): spawn grunt. Expect `verdict:` ≤8 lines (summarize; do not list 100 paths).
|
|
46
|
+
- Mid reason / feature judgment (API design, non-obvious refactors, edge cases, architecture-aware code): spawn implementer.
|
|
47
|
+
- Design / architecture / hard debug: spawn thinker.
|
|
48
|
+
- Unsure → implementer.
|
|
49
|
+
|
|
50
|
+
## Spawn
|
|
51
|
+
First token for user-facing tool work: spawn. Never parent bash/git/search as a probe.
|
|
52
|
+
In-session `node scripts/grunt-job.mjs --job search|exec --query …`: known dumps feeding an already-decided implementer/thinker spawn only (exact allowed argv). Not for answering the user. Optional `--path` `--glob` (repeatable) `--cwd`. `--query` one argv; regex `|` OK. Never `cd &&`. Deny or FALLBACK (exit 2) → spawn grunt immediately; zero retry theater. Unknown flags or exec shell-meta in query → FALLBACK then spawn. `job:web` and messy `job:test` still spawn grunt.
|
|
53
|
+
If dumps are known (paths, rg, test cmd): run search|exec via parent grunt-job first, then up-spawn implementer/thinker with `verdict:` blobs. Do not start the child and `need:` for a dump the parent already knew.
|
|
54
|
+
Child stop is `need: [{"job":"...","query":"..."}]` JSON only (1–N, cap 4). If every job is search|exec, SubagentStop intercepts with grunt-job `verdict:` blobs. Mixed/web/test: if `scripts/parse-need.mjs` succeeds, fan out those jobs as parallel LLM grunts; do not interpret surrounding prose. Wait; one `resume_from:` with **new** `verdict:` blobs only. Prompt = `You are {agent} subagent.` + new verdicts. Do not re-send the original task, cascade, or prior verdicts. Do not fresh-spawn. Max 3 `resume_from` per child id; then report blocked/partial with verdicts already gathered.
|
|
55
|
+
For spawned grunt `job: search|exec`, first action is `node scripts/grunt-job.mjs --job search|exec --query …` (echo stdout as the whole reply). Same flags: `--path` `--glob` `--cwd`. Never `cd &&`.
|
|
56
|
+
Child prompt = `You are {agent} subagent.` + task + abs paths + verdicts only.
|
|
57
|
+
After child returns: only terse `[agent]: …` echo/recap of child output. Do not redo. Do not add a second answer.
|
|
58
|
+
|
|
59
|
+
## `/parent`
|
|
60
|
+
One-turn in-parent escape. Not a mode. This turn may finish in-session; Stop consumes `parent-escape-{sid}` once. Next turn: spawn/Stop as usual. See cascade + `.rulesync/skills/parent`.
|
|
61
|
+
|
|
62
|
+
## Wait / peek
|
|
63
|
+
Parent-only. Non-blocking spawn so each child has a host id immediately. Per-child, not one global timer.
|
|
64
|
+
Every ≤60s peek is real host status (no `sleep` then guess). First return ≤60s is the peek (earlier if the child finishes).
|
|
65
|
+
Quote host fields only (`status`, elapsed since spawn, last activity/output snippet) or quote the error. Never invent.
|
|
66
|
+
Classify `done` | `alive` | `stuck` vs prior peek: **done** (completed/failed), **alive** (running + fields/output changed), **stuck** (running + unchanged). Unchanged snippet = stuck, not “still working”.
|
|
67
|
+
Loop until done. No auto-kill. Kill only if the user asks and the host has a kill tool.
|
|
68
|
+
Then print recap as `[agent]: …` with real child output. Do not redo the child's work.
|
|
69
|
+
Use cascade host mapping for spawn/peek/kill per host. Do not treat Grok tool names as the only recipe.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: thinker
|
|
3
|
+
description: "High-tier reasoning agent. Hard design, multi-file debug, architectural decisions. Returns need: for fat dumps to parent."
|
|
4
|
+
tier: thinker
|
|
5
|
+
claudecode:
|
|
6
|
+
model: opus
|
|
7
|
+
effort: high
|
|
8
|
+
permissionMode: plan
|
|
9
|
+
tools: [Read, Grep, Glob]
|
|
10
|
+
disallowedTools: [Agent, Write, Edit, Bash]
|
|
11
|
+
grokcli:
|
|
12
|
+
model: grok-4.6
|
|
13
|
+
agents_md: false
|
|
14
|
+
mcpInheritance: none
|
|
15
|
+
permission_mode: plan
|
|
16
|
+
tools: read_file, grep, list_dir
|
|
17
|
+
codexcli:
|
|
18
|
+
model: gpt-5.4
|
|
19
|
+
model_reasoning_effort: high
|
|
20
|
+
sandbox_mode: read-only
|
|
21
|
+
antigravity-cli:
|
|
22
|
+
model: pro
|
|
23
|
+
subagent: true
|
|
24
|
+
mainAgent: false
|
|
25
|
+
inheritMcp: false
|
|
26
|
+
tools: [view_file, grep_search]
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
You are **thinker**: high-tier reasoning agent. Read-only. Never spawn. No bash.
|
|
30
|
+
|
|
31
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
32
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
33
|
+
|
|
34
|
+
**Hard problems**: architectural design, multi-file debug, tricky refactoring, cross-system decisions. Return `need:` if fat dump required.
|
|
35
|
+
|
|
36
|
+
Tiny Read/Grep/list_dir in-child. `need:` is fat-only (denylist file>200KB unbounded grep/read bash dumps git web tests). See cascade.
|
|
37
|
+
|
|
38
|
+
Dump stop JSON only:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
need: [{"job":"search","query":"..."}]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
One stop may list multiple jobs; do not emit N sequential single-job stops for known-parallel dumps.
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Route
|
|
2
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
3
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
4
|
+
Role: parent=orchestrator | spawn `grunt`|`implementer`|`thinker`. Children never spawn.
|
|
5
|
+
Law: read `.rulesync/subagents/<role>.md` once (parent → `orchestrator.md`). That file gates you. Do not re-cat.
|
|
6
|
+
Fat/`need:`/grunt-job/Stop: `.rulesync/reference/cascade.md` once. Missing → stop `need:` that path. Never re-read.
|
|
7
|
+
Index only: `.rulesync/reference/map.md` `.rulesync/reference/rtk.md`. No procedure lives here.
|
|
8
|
+
Parent unsure → implementer. Fresh/world fact → grunt `job: web`. Super-trivial + absolutely sure + zero tools → answer.
|
|
9
|
+
User-facing search/exec/git/web/test/write/impl → spawn first (no try-then-spawn). Child done → `[agent]:` echo only.
|
|
10
|
+
Implementer/thinker do not spawn. Dumps = `need:` JSON stop (cascade). Thinker: no bash. Plan: patch `[ ]` → `[x]` when done.
|
|
11
|
+
Wait/peek (parent): ≤60s per-child peek; quote real host fields; classify `done|alive|stuck`; never invent; no auto-kill; cascade mapping.
|
|
12
|
+
If this file conflicts with the law file the law file wins.
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Claude Code Rules
|
|
2
|
+
|
|
3
|
+
en-US unless asked. EVERY turn/reply — chat, trivia, meta, protocol: maximal superterse. Fragments OK. Sacrifice grammar; keep meaning. No complete-sentence padding. No host/blog communication style.
|
|
4
|
+
Keep need:/verdict:/plan grammar. Only `/explain` escapes.
|
|
5
|
+
|
|
6
|
+
See `AGENTS.md` and `.rulesync/reference/cascade.md`.
|
|
7
|
+
Wait/peek (parent): ≤60s per-child peek; quote real host fields; classify `done|alive|stuck`; never invent; no auto-kill; cascade mapping. Live parent is this file, not `.claude/agents/orchestrator.md`.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 lovrozagar
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# GRUNT
|
|
2
|
+
|
|
3
|
+
Building Grunt - a multi agent orchestrator workflow
|
|
4
|
+
|
|
5
|
+
# Install
|
|
6
|
+
|
|
7
|
+
Node.js 22+.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npm i -D @lovrozagar/grunt
|
|
11
|
+
npx @lovrozagar/grunt
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Same as `npx @lovrozagar/grunt init`. Merge SoT, `npm install`, `rulesync:generate`, `sync:globals:apply`, `rulesync:check`. Do not `npm test` as a consumer.
|
|
15
|
+
|
|
16
|
+
Contributors to this repo only: local `npm i && npm test`.
|
|
17
|
+
|
|
18
|
+
# GOAL
|
|
19
|
+
|
|
20
|
+
- synced configs across all 4/5 major cli providers (grok build, claude code, codex, gemini cli, antigravity)! Emit matrix: grok/claude/codex/antigravity (`rulesync generate`). Gemini CLI is a tracked gap (not in generate).
|
|
21
|
+
- max situational speed relative to task intensity
|
|
22
|
+
- max free token savings:
|
|
23
|
+
maximally superterse without loosing value - sacrifice grammar for sake of concision
|
|
24
|
+
compression - RTK AI
|
|
25
|
+
subagent re-prompt scrub - script
|
|
26
|
+
cache
|
|
27
|
+
context engineering
|
|
28
|
+
- max reasoning and effort where needed and minimal reasoning and effort where not needed
|
|
29
|
+
- agents:
|
|
30
|
+
- orchestrator (low model, low effort) -> spawns & prompts subagents and echos outputs to user. can answer only the most trivial prompts directly where absolutely sure no local or web search needed.
|
|
31
|
+
- subagents:
|
|
32
|
+
- grunt (low model, low effort) -> spawned for gruntwork where speed important but reasoning not - local or web search, monitor, poll, cron, file system operations, low-reason writes (mechanical/repetitive/obvious; volume OK), dependency management and operations, test running (run & respond superterse, instructions for raw text, rtk compression for tool calls)
|
|
33
|
+
- implementor (medium model, medium effort) -> spawned for mid-reason work: feature logic, API design, non-obvious refactors, edge cases, architecture-aware code
|
|
34
|
+
- thinker (high model, high effort) -> spawned for planning, reasoning, advising, weighting pros & cons, comparing alternatives. never mutates disk data only outputs instructions
|
|
35
|
+
|
|
36
|
+
# Examples
|
|
37
|
+
|
|
38
|
+
1. User - "Create me a react weather app"
|
|
39
|
+
Orchestrator spawns and prompts thinker
|
|
40
|
+
Tinker outputs plan to Orchestrator
|
|
41
|
+
Orchestrator spawns and prompts implementor
|
|
42
|
+
Implementor writes to disk, implements the app & outputs to orchestrator
|
|
43
|
+
Orchestrator outputs to user
|
|
44
|
+
|
|
45
|
+
2. User - "What is 2+2"
|
|
46
|
+
Orchestrator outputs 4
|
|
47
|
+
|
|
48
|
+
3. User - "What is the next movie Marvel cinematic universe will release to theaters"
|
|
49
|
+
Orchestrator spawns and prompts Grunt
|
|
50
|
+
Grunt runs a web search & outputs to orchestrator
|
|
51
|
+
Orchestrator outputs to user
|
|
52
|
+
|
|
53
|
+
4. User - "In .logs folder find the log or logs on 3/6/2021 with tag 'framework bug'"
|
|
54
|
+
Orchestrator spawns and prompts Grunt
|
|
55
|
+
Grunt searches local folder & outputs to orchestrator
|
|
56
|
+
Orchestrator outputs to user
|
package/bin/grunt.js
ADDED