Use a client other than Claude Code#

The engine speaks the OpenAI API as well as Anthropic’s, so anything that lets you set a base URL works — aider, Continue, LibreChat, the openai and anthropic SDKs, or ten lines of curl.

export OPENAI_BASE_URL=http://127.0.0.1:1919/v1
export OPENAI_API_KEY=local          # unchecked, but most clients demand one

Use whatever GET /v1/models reports as the model name. There is no authentication: any token is accepted, which is why the engine binds loopback (see Reach the panel from another machine).

Why the client matters more than you would expect#

Every request carries the harness’s system prompt and tool definitions before any of your work, and that overhead is subtracted from the window on every turn. It is a floor, not a one-off cost.

Claude Code sends roughly 40k tokens of system prompt and tool schemas. A plain chat client sends a few hundred. That is not a small difference — it decides which models are usable at all:

model

window

with a ~40k harness

with a ~2k harness

Qwen3-8B

32k

cannot run

~30k of working room

gpt-oss-20b

128k

~88k

~126k

Qwen3.8-27B

101k

~61k

~99k

Qwen3.6-35B-A3B

212k

~172k

~210k

Qwen3-8B is the striking case. Its 32k window cannot hold Claude Code’s system prompt at all, so the first message fails — yet the same model is perfectly usable from a lighter client with 30k of room to work in. A model that “does not work” may only be failing to fit its harness.

Measure your own client#

Do not trust the figures above for a client you actually use — measure it. The engine reports token counts on every response:

curl -s http://127.0.0.1:1919/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"MODEL","messages":[{"role":"user","content":"hi"}],"max_tokens":1}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["usage"])'

Send hi through your harness and compare its prompt_tokens against that baseline. The difference is what the harness costs you per turn, and it is the number to plan context around.

For a prompt you have in a file, ask the engine directly without generating anything:

curl -s http://127.0.0.1:1919/tokenize \
  -H 'Content-Type: application/json' \
  -d "{\"content\": $(python3 -c 'import json,sys;print(json.dumps(open(sys.argv[1]).read()))' prompt.txt)}" \
  | python3 -c 'import json,sys; print(len(json.load(sys.stdin)["tokens"]), "tokens")'

Pi#

Pi is a bring-your-own-key CLI coding agent that is provider-agnostic by design, which makes it the least awkward second harness to put beside Claude Code.

npm install -g --ignore-scripts @earendil-works/pi-coding-agent

Point it at the engine by adding a provider to ~/.pi/agent/models.json. Use whatever GET /v1/models reports as the model id — that is the name you started the model under:

{
  "providers": {
    "lllm3090": {
      "baseUrl": "http://127.0.0.1:1919/v1",
      "api": "openai-completions",
      "apiKey": "local",
      "models": [
        { "id": "Qwen3.8-27B" },
        { "id": "Qwen3.6-35B-A3B" }
      ]
    }
  }
}

Only id is required for a local model; the key is unchecked but most clients insist on one. Add an entry per model you might start — the engine serves one at a time, so the list is what you can switch between, not what runs at once.

Check Pi’s own models documentation if the config schema has moved; this file will drift and theirs will not.

opencode#

opencode works the same way and has a fuller agentic feature set, at the cost of a larger configuration surface. Both it and Pi write configuration to disk, which is worth knowing if you value the property that lllm3090 claude has: it sets environment variables for a single subprocess and leaves no trace, so a plain claude elsewhere still reaches Anthropic on your normal account.

Neither tool offers that, so decide deliberately whether you want your default opencode or pi invocation pointing at a local model or a hosted one.

Slots and concurrency#

A lighter client changes the slot arithmetic too. With a 40k floor, a 32k slot is useless; with a 2k floor it is a working session. So a small-prompt harness makes higher --parallel counts genuinely useful where an agent harness would need every slot to be large — see Choose a context window and slot count.

Anthropic-protocol clients#

Anything speaking Anthropic’s API works against /v1/messages in the same way, which is how Claude Code connects without a proxy. Streaming and tool calls are both supported; see Use Claude Code against a local model.