Files
context-mode/configs/zed/AGENTS.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

3.8 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. Zed has NO hooks — these instructions are ONLY enforcement. Follow strictly.

Think in Code — MANDATORY

Analyze/count/filter/compare/search/parse/transform data: write code via mcp:context-mode: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 use

curl / wget — FORBIDDEN

Do NOT use curl/wget in shell. Dumps raw HTTP into context. Use: mcp:context-mode:ctx_fetch_and_index(url, source) or mcp:context-mode:ctx_execute(language: "javascript", code: "const r = await fetch(...)")

Inline HTTP — FORBIDDEN

No node -e "fetch(...", python -c "requests.get(...". Bypasses sandbox. Use: mcp:context-mode:ctx_execute(language, code) — only stdout enters context

Direct web fetching — FORBIDDEN

Raw HTML can exceed 100 KB. Use: mcp:context-mode:ctx_fetch_and_index(url, source) then mcp:context-mode:ctx_search(queries)

REDIRECTED — use sandbox

Shell (>20 lines output)

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

File reading (for analysis)

Reading to edit → reading correct. Reading to analyze/explore/summarize → mcp:context-mode:ctx_execute_file(path, language, code).

grep / search (large results)

Use mcp:context-mode:ctx_execute(language: "shell", code: "grep ...") in sandbox.

Tool selection

  1. GATHER: mcp:context-mode:ctx_batch_execute(commands, queries) — runs all commands, auto-indexes, returns search. ONE call replaces 30+. Each command: {label: "header", command: "..."}.
  2. FOLLOW-UP: mcp:context-mode:ctx_search(queries: ["q1", "q2", ...]) — all questions as array, ONE call.
  3. PROCESSING: mcp:context-mode:ctx_execute(language, code) | mcp:context-mode:ctx_execute_file(path, language, code) — sandbox, only stdout enters context.
  4. WEB: mcp:context-mode:ctx_fetch_and_index(url, source) then mcp:context-mode:ctx_search(queries) — raw HTML never enters context.
  5. INDEX: mcp:context-mode: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):

  • mcp:context-mode:ctx_batch_execute(commands: [3+ network commands], concurrency: 5) — gh, curl, dig, docker inspect, multi-region cloud queries
  • mcp:context-mode: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.

Output

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

ctx commands

Command Action
ctx stats Call stats MCP tool, display full output verbatim
ctx doctor Call doctor MCP tool, run returned shell command, display as checklist
ctx upgrade Call upgrade MCP tool, run returned shell command, display as checklist
ctx purge Call mcp:context-mode: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.