Local LLM Demo — Docs
Explanation

Why the harness changes the answer

qwen3-coder:30b never changed. Its weights, quantization, and the request’s actual content ("Reply with exactly the word: pong") were identical across three tests in cli-tools/. What changed was the harness — the system prompt, tool definitions, and standing instructions each CLI wraps around the raw model call before it ever reaches the API.

What actually happened, verified

Driven by What it did
Plain curl to /v1/chat/completions Answered the question directly.
Claude Code Proposed a Write tool call, writing “pong” to a file.
opencode Proposed a bash tool call, running echo pong.
Codex CLI Proposed an exec_command tool call.

Every one of these is a real, captured response — see cli-tools/results.md in the code repo. None of it is invented for effect.

audited These four behaviours are captured transcripts the maintainer recorded (cli-tools/results.md in the code repo), quoted verbatim — not re-run for this page.

Why this happens

Each of these three CLIs is an agentic harness: their system prompts describe an environment with tools available and instruct the model to use them to accomplish tasks, not just answer questions in prose. A model that’s been fine-tuned to be agent-friendly (as coding-specialized models like qwen3-coder generally are) will lean toward acting — reaching for a tool — even when the literal, simplest reading of the request was a one-word reply. Claude Code’s case is the most pointed example: this very session’s own CLAUDE.md carries a large, standing instruction set about spawning agents and orchestrating swarms for “any non-trivial task.” Faced with that context plus a simple direct question, the model followed the standing instructions rather than the literal question.

This isn’t a bug in the model, and it isn’t unique to qwen3-coder — it’s the same phenomenon CADS-DEMO-sort is built around from a different angle: what wraps the model shapes the outcome as much as, or more than, the model itself.

The practical takeaway

Before trusting “the model can’t do X” or “the model always does Y”, check what’s actually calling it. A plain API call and a request routed through an agentic coding CLI are not the same experiment, even with identical wording and an identical model underneath.

Found an error, or something that didn't work as documented? Open an issue →