Files
context-mode/CLAUDE.md
T
Mert Koseoglu d05a37584e feat(prose): retire prose-style enforcement entirely (#482)
Issue #482 (makoMakoGo) reported that context-mode's caveman/terse
injection pressures the model toward brevity on its FINAL ANSWER, not
just on tool-output reporting. Cited evidence: Moonshot AI on
kimi-k2.5 (anomalyco/opencode#20258, PR #20259) — aggressive brevity
prompts measurably degrade coding/reasoning benchmarks because the
model drops assumptions, caveats, verification evidence, failure
modes, and security warnings the user actually needs.

Considered:
  A — config switch ("injectCommunicationStyle: false"). Rejected:
      switches default-on become dead code.
  B — close FR with rationale. Rejected: ignores valid evidence.
  C — refine wording ("compress when reporting raw tool output, be
      complete for technical answers"). Rejected: still text
      injection, model-dependent, half-measure.
  D — full strip everywhere. Adopted.

The decision after grilling: context-mode's value is data routing
(sandbox, FTS5, session continuity), not prose styling. The brevity
injection conflated three goals — keeping raw data out of context
(real, hard-enforced), summarizing tool output compactly (LLMs auto-
calibrate), and final-answer prose style (the wrong target). Strip
all 22 sites where prose-style language landed.

Sites stripped (A-Z):

  hooks/routing-block.mjs
    - <communication_style> block  (Terse like caveman, fragments OK,
      auto-expand for security warnings)
    - <response_format> block       (Concise summary, 2-3 bullets)

  src/server.ts (5 MCP tool descriptions + 2 cosmetic comments)
    - ctx_execute            "When reporting results — terse..."
    - ctx_execute_file       same
    - ctx_search             same
    - ctx_fetch_and_index    same (URL + commands shapes, both)
    - cosmetic comment       "Caveman style — terse status line"
    - rewrote concurrency note: "Indexing is serial regardless of
      concurrency" → "Fetches parallelize up to your concurrency
      setting; FTS5 indexing serializes the writes after (SQLite
      single-writer rule)." — same fact, less jargon.

  configs/ (15 adapter MD files — every shipped system prompt)
    antigravity/GEMINI.md, claude-code/CLAUDE.md, codex/AGENTS.md,
    cursor/context-mode.mdc, gemini-cli/GEMINI.md, jetbrains-copilot/
    copilot-instructions.md, kilo/AGENTS.md, kiro/KIRO.md, omp/SYSTEM.md,
    openclaw/AGENTS.md, opencode/AGENTS.md, pi/AGENTS.md, qwen-code/
    QWEN.md, vscode-copilot/copilot-instructions.md, zed/AGENTS.md
    All had identical "## Output" block: 3 caveman lines stripped,
    workflow lines ("Write artifacts to FILES", "Descriptive source
    labels") kept.

  CLAUDE.md (repo root — internal dev instructions)
    Same caveman block stripped. We don't ship this file but we do
    eat our own dog food.

  README.md
    Pillar 4 ("Output Compression — Terse like caveman...") rewritten
    to "No prose-style enforcement" — explicitly cites the kimi-k2.5
    benchmark evidence as the rationale.

  web/index.html
    Removed Ch 4b entirely (the "Output compression" chapter with
    before/after example pushing terse style on the model).

Tests:

  - tests/session/continuity.test.ts: SessionStart routing-block
    assertion flipped from "must include 'Terse like caveman'" to
    "must NOT include caveman/terse-style directive".
  - tests/core/server.test.ts: Task hook injection assertion same
    flip. Two cosmetic comment renames ("Caveman style — terse status
    line" → "Status line: counts + sections + size"), test name
    rename ("caveman style" → "compact format"). Added new
    "prose-style policy (#482)" describe block at end of file with 3
    negative-pin tests covering server.ts MCP descriptions,
    routing-block, and README.

  Full suite: 82/82 files passed, 2645 passed, 20 skipped, 0 failed.
  Net +3 new tests (the policy describe block).

CONTRIBUTING.md
  New "Prose-style policy (#482)" section documents the decision so
  future contributors don't re-add the injection. Cites the Moonshot
  benchmark evidence + the regression test that pins the deletion.

This addresses #482 in full. Closing the issue with a comment that
walks the requester through the decision and links the policy section.
2026-05-10 14:45:41 +03:00

4.5 KiB

context-mode — MANDATORY routing rules

context-mode MCP tools available. Rules protect context window from flooding. One unrouted command dumps 56 KB into context.

Think in Code — MANDATORY

Analyze/count/filter/compare/search/parse/transform data: write code via ctx_execute(language, code), console.log() only the answer. Do NOT read raw data into context. PROGRAM the analysis, not COMPUTE it. Pure JavaScript — Node.js built-ins only (fs, path, child_process). try/catch, handle null/undefined. One script replaces ten tool calls.

BLOCKED — do NOT attempt

curl / wget — BLOCKED

Intercepted and replaced with error. Do NOT retry. Use: ctx_fetch_and_index(url, source) or ctx_execute(language: "javascript", code: "const r = await fetch(...)")

Inline HTTP — BLOCKED

fetch('http, requests.get(, requests.post(, http.get(, http.request( — intercepted. Do NOT retry. Use: ctx_execute(language, code) — only stdout enters context

WebFetch — BLOCKED

Use: ctx_fetch_and_index(url, source) then ctx_search(queries)

REDIRECTED — use sandbox

Bash (>20 lines output)

Bash ONLY for: git, mkdir, rm, mv, cd, ls, npm install, pip install. Otherwise: ctx_batch_execute(commands, queries) or ctx_execute(language: "shell", code: "...")

Read (for analysis)

Reading to Edit → Read correct. Reading to analyze/explore/summarize → ctx_execute_file(path, language, code).

Grep — may flood context

Use ctx_execute(language: "shell", code: "grep ...") in sandbox.

Tool selection

  1. MEMORY: ctx_search(sort: "timeline") — after resume, check prior context before asking user.
  2. GATHER: ctx_batch_execute(commands, queries) — runs all commands, auto-indexes, returns search. ONE call replaces 30+. Each command: {label: "header", command: "..."}.
  3. FOLLOW-UP: ctx_search(queries: ["q1", "q2", ...]) — all questions as array, ONE call (default relevance mode).
  4. PROCESSING: ctx_execute(language, code) | ctx_execute_file(path, language, code) — sandbox, only stdout enters context.
  5. WEB: ctx_fetch_and_index(url, source) then ctx_search(queries) — raw HTML never enters context.
  6. INDEX: ctx_index(content, source) — store in FTS5 for later search.

Parallel I/O batches

For multi-URL fetches or multi-API calls, always include concurrency: N (1-8):

  • ctx_batch_execute(commands: [3+ network commands], concurrency: 5) — gh, curl, dig, docker inspect, multi-region cloud queries
  • ctx_fetch_and_index(requests: [{url, source}, ...], concurrency: 5) — multi-URL batch fetch

Use concurrency 4-8 for I/O-bound work (network calls, API queries). Keep concurrency 1 for CPU-bound (npm test, build, lint) or commands sharing state (ports, lock files, same-repo writes).

GitHub API rate-limit: cap at 4 for gh calls.

Subagent routing

Routing block auto-injected into subagent prompts. Bash-type subagents upgraded to general-purpose. No manual instruction needed.

Output

Write artifacts to FILES — never inline. Return: file path + 1-line description. Descriptive source labels for ctx_search(source: "label").

Session Continuity

Skills, roles, and decisions persist for the entire session. Do not abandon them as the conversation grows.

Memory

Session history is persistent and searchable. On resume, search BEFORE asking the user:

Need Command
What were we working on? ctx_search(queries: ["summary"], source: "compaction", sort: "timeline")
What was the first request? ctx_search(queries: ["prompt"], source: "user-prompt", sort: "timeline")
What did we decide? ctx_search(queries: ["decision"], source: "decision", sort: "timeline")
What NOT to repeat? ctx_search(queries: ["rejected"], source: "rejected-approach")
What constraints exist? ctx_search(queries: ["constraint"], source: "constraint")

DO NOT ask "what were we working on?" — SEARCH FIRST. If search returns 0 results, proceed as a fresh session.

ctx commands

Command Action
ctx stats Call ctx_stats MCP tool, display full output verbatim
ctx doctor Call ctx_doctor MCP tool, run returned shell command, display as checklist
ctx upgrade Call ctx_upgrade MCP tool, run returned shell command, display as checklist
ctx purge Call ctx_purge MCP tool with confirm: true. Warns before wiping knowledge base.

After /clear or /compact: knowledge base and session stats preserved. Use ctx purge to start fresh.