diff --git a/skills/ce-code-review/scripts/cross-model-adversarial-review.sh b/skills/ce-code-review/scripts/cross-model-adversarial-review.sh index f9f3907e5..84e9d6684 100755 --- a/skills/ce-code-review/scripts/cross-model-adversarial-review.sh +++ b/skills/ce-code-review/scripts/cross-model-adversarial-review.sh @@ -224,7 +224,9 @@ adapter_argv() { grok-cli) # Read allowed (in-tree context); deny writes / shell / subagents / web / MCP. # Schema forces non-streaming json on grok — keep hard-only (no PEERLOG idle). - printf '%s\0' grok --prompt-file "$PROMPT_FILE" --model "$(route_model grok-cli)" --effort high \ + # --verbatim: without it grok offloads a large prompt to a session file and + # sends only a preview, spending scarce turns to re-read what it was given. + printf '%s\0' grok --prompt-file "$PROMPT_FILE" --verbatim --model "$(route_model grok-cli)" --effort high \ --cwd "$PEER_WORKDIR" --permission-mode dontAsk [ -z "${LARGE_DIFF_CONTEXT_DIR:-}" ] || printf '%s\0' --allow "Read($LARGE_DIFF_CONTEXT_DIR/**)" printf '%s\0' --deny Edit --deny Write --deny Bash --deny Task --deny 'mcp__*' \ diff --git a/skills/ce-doc-review/scripts/cross-model-doc-review.sh b/skills/ce-doc-review/scripts/cross-model-doc-review.sh index 970477ff6..b4f925045 100755 --- a/skills/ce-doc-review/scripts/cross-model-doc-review.sh +++ b/skills/ce-doc-review/scripts/cross-model-doc-review.sh @@ -221,7 +221,9 @@ adapter_argv() { ;; grok-cli) # Schema forces buffered json — hard-only, no PEERLOG idle (#1270). - printf '%s\0' grok --prompt-file "$PROMPT_FILE" --model "$(route_model grok-cli)" --effort high \ + # --verbatim: without it grok offloads a large prompt to a session file and + # sends only a preview — unrecoverable here, because Read is denied below. + printf '%s\0' grok --prompt-file "$PROMPT_FILE" --verbatim --model "$(route_model grok-cli)" --effort high \ --cwd "$PEER_WORKDIR" --permission-mode dontAsk \ --deny Read --deny Edit --deny Write --deny Bash --deny Task --deny 'mcp__*' \ --disable-web-search --no-subagents --max-turns 15 \ diff --git a/skills/ce-pov/scripts/cross-model-pov.sh b/skills/ce-pov/scripts/cross-model-pov.sh index 858796eda..4a64fcd14 100755 --- a/skills/ce-pov/scripts/cross-model-pov.sh +++ b/skills/ce-pov/scripts/cross-model-pov.sh @@ -216,7 +216,9 @@ adapter_argv() { ;; grok-cli) # Schema forces buffered json — hard-only, no PEERLOG idle (#1270). - printf '%s\0' grok --prompt-file "$PROMPT_FILE" --model "$(route_model grok-cli)" --effort high \ + # --verbatim: without it grok offloads a large prompt to a session file and + # sends only a preview, spending scarce turns to re-read what it was given. + printf '%s\0' grok --prompt-file "$PROMPT_FILE" --verbatim --model "$(route_model grok-cli)" --effort high \ --cwd "$READ_ROOT" --permission-mode dontAsk \ --deny Edit --deny Write --deny Bash --deny Task --deny 'mcp__*' \ --no-subagents --max-turns 15 \ diff --git a/tests/skills/ce-code-review-cross-model-routes.test.ts b/tests/skills/ce-code-review-cross-model-routes.test.ts index 6551bad7a..233ced4f4 100644 --- a/tests/skills/ce-code-review-cross-model-routes.test.ts +++ b/tests/skills/ce-code-review-cross-model-routes.test.ts @@ -346,6 +346,9 @@ printf '%s' '{"structured_output":{"reviewer":"adversarial","findings":[],"resid expect(cmd).toContain("--deny Edit") expect(cmd).toContain("--deny Write") expect(cmd).toContain("--deny Bash") + // Without --verbatim grok offloads a large prompt to a session file and + // sends only a preview, so the peer reviews a diff it never received. + expect(cmd).toContain("--verbatim") expect(cmd).toContain("--disable-web-search") expect(cmd).toContain("--no-subagents") expect(cmd).toContain("--permission-mode dontAsk") diff --git a/tests/skills/ce-doc-review-cross-model-routes.test.ts b/tests/skills/ce-doc-review-cross-model-routes.test.ts index 460336032..27b91774e 100644 --- a/tests/skills/ce-doc-review-cross-model-routes.test.ts +++ b/tests/skills/ce-doc-review-cross-model-routes.test.ts @@ -280,6 +280,9 @@ printf '%s' '{"structured_output":{"reviewer":"adversarial","findings":[],"resid test("grok CLI: deny Read + web/subagents off + dontAsk + effort high", () => { const cmd = emitAdapter("grok-cli") expect(cmd).toContain("--deny Read") + // Load-bearing with --deny Read: without --verbatim grok offloads a large + // prompt to a session file the peer is then forbidden to read back. + expect(cmd).toContain("--verbatim") expect(cmd).toContain("--disable-web-search") expect(cmd).toContain("--no-subagents") expect(cmd).toContain("--permission-mode dontAsk") diff --git a/tests/skills/ce-pov-cross-model-routes.test.ts b/tests/skills/ce-pov-cross-model-routes.test.ts index efbe8ce10..b9d9ccd74 100644 --- a/tests/skills/ce-pov-cross-model-routes.test.ts +++ b/tests/skills/ce-pov-cross-model-routes.test.ts @@ -107,6 +107,9 @@ describe("ce-pov cross-model route safety", () => { expect(emit("grok-cli")).toContain("--deny Edit") expect(emit("grok-cli")).toContain("--deny Write") expect(emit("grok-cli")).toContain("--deny Bash") + // Without --verbatim grok offloads a large prompt to a session file and + // sends only a preview, so the peer answers on context it never received. + expect(emit("grok-cli")).toContain("--verbatim") expect(emit("grok-cli")).toContain("--output-format json") expect(emit("grok-cli")).not.toContain("stream-json") for (const route of ["grok-cursor", "cursor", "composer"]) {