feat(grok): close the Claude-parity divergences (reasoning, subagents, web, bash-guard)

Bring the grok CLI to parity with the Claude path on the four deliberate
differences:

- Reasoning: drop the per-role `--effort low` default — Claude sets no per-role
  thinking budget, so grok now uses the model default for every role. The
  fleet-wide ROBOCO_GROK_REASONING_EFFORT override stays as a cost lever. (This
  also un-caps intake-draft quality, the one that actually mattered.)
- Subagents: the intake interviewer may now fan out to subagents (parity with the
  Claude intake's `Task` allowance); every other role still has `Agent` removed.
- Web: `--disable-web-search` for every role — no agent gets direct web (Claude's
  tool set has none either); the roles that get web reach it through the gated
  roboco-search MCP, unaffected.
- Bash command filtering: full parity, split by deny semantics. Verified live that
  a grok PreToolUse hook deny CANCELS the run, while native `--deny` denies
  GRACEFULLY (the agent gets a permission error and recovers). So:
    * git network/branch/history ops -> native `--deny` (operational reflex; the
      agent must recover, not drop the task). Expanded to the full bash-guard set.
    * credential-exfil / identity-forgery / internal-API / env-dump patterns ->
      the SAME bash-guard the Claude path runs, wired as a grok PreToolUse hook
      (ROBOCO_GUARD_SKIP_GIT=1 so it leaves git to `--deny`). A hard cancel is the
      right response there — no legitimate agent reads ~/.netrc or forges an
      X-Agent-ID. One tolerance line (accept grok's camelCase `toolInput`) makes
      the one tested script guard both runtimes; +5 grok cases (50/50 green).

Also cleaned stale internal task-number / smoke labels out of bash-guard-hook.sh.
This commit is contained in:
Renn F
2026-06-19 05:35:19 +02:00
parent 414b3492c4
commit f6aa590370
5 changed files with 218 additions and 55 deletions
+9 -6
View File
@@ -101,13 +101,16 @@ ROBOCO_DEFAULT_EMBEDDING_MODEL=qwen3-embedding:0.6b
# ROBOCO_GROK_AGENT_IMAGE=roboco-agent-grok:latest
# ROBOCO_GROK_CLI_MODEL=grok-build
# Per-role tool permissions are computed as native grok flags (subagents off;
# edit/shell removed for non-coding roles; raw git mutation + rm -rf denied for
# coding roles) — there is nothing to set here.
# Per-role tool permissions are computed as native grok flags (subagents off
# except intake; edit/shell removed for non-coding roles; git network/branch/
# history mutation + rm -rf denied for coding roles; web search off for all —
# gated web is via the roboco-search MCP). Credential-exfil / identity-forgery /
# internal-API shell patterns are blocked by the same bash-guard the Claude path
# runs, wired as a grok PreToolUse hook. Nothing to set here.
# Force one reasoning effort for ALL Grok agents: low | medium | high | xhigh |
# max (or empty for the per-role default — coordination/docs/board roles request
# "low" to cut reasoning cost, code roles keep full reasoning).
# Reasoning effort for ALL Grok agents: low | medium | high | xhigh | max. Empty
# keeps grok's model default for every role (parity with Claude — no per-role
# cut); set this to trade quality for cost across the whole fleet.
# ROBOCO_GROK_REASONING_EFFORT=
# Hard ceiling on agentic turns per run (loop guard).