# Harnesses for local models

Agent and app harnesses (coding agents, personal agents, and tool-using chat apps) that can drive a model running on your own machine, with the exact way to connect each one.
Data: 2026-10-15. JSON: /harnesses.json

## Which harness for which job

| job | app | min memory GB | recipe |
|---|---|---|---|
| Write code | opencode at 32 GB+, aider below | 8 | /do/code.md |
| Chat privately | open-webui | 8 | /do/chat.md |
| Text an assistant from my phone | openclaw | 32 | /setups/openclaw.md |
| An agent that remembers me | hermes-agent | 32 | /do/agent.md |

Model per memory size: the recipe pages list it (/do/code.md, /do/chat.md, /do/agent.md).

## Claude Code vs Codex with local models

- claude-code: Made by: Anthropic; Open source: No; Start it with a local model: ollama launch claude; Pick it if: You already use Claude Code and want the same commands, skills and workflow on your own computer.
- codex-cli: Made by: OpenAI; Open source: Yes; Start it with a local model: ollama launch codex; Pick it if: You want an official local mode (the --oss flag), or you run OpenAI's own open model, gpt-oss.
- Both need 64K context and a tool-calling model (about 32 GB of memory or more).

## Why the harness matters

- On the Terminal-Bench 2.1 leaderboard, Gemini 3 Pro scores 73.9% in the Terminus 2 harness but 65.8% in Gemini CLI, and GPT-5.5 scores 83.1% in Codex CLI but 78% in Terminus 2. (Snorkel AI, Terminal-Bench 2.1 leaderboard, https://snorkel.ai/leaderboard/terminal-bench-2-1/, retrieved 2026-10-15)
- LangChain changed only its harness (prompt, tools, middleware) and kept the model fixed at gpt-5.2-codex; its Terminal Bench 2.0 score rose 13.7 points, from 52.8 to 66.5. (LangChain blog, Improving Deep Agents with harness engineering (2026-02-17), https://www.langchain.com/blog/improving-deep-agents-with-harness-engineering, retrieved 2026-10-15)
- Across 66 model and harness pairings, model rankings flip by harness: on Terminal-Bench 4, Claude leads GPT by 7.94 points in OpenHands but trails it by 30.16 points in Pi. (arXiv 2610.00917, Finding the Right Fit: Model-Harness Interactions across Agent Tasks, https://arxiv.org/abs/2610.00917, retrieved 2026-10-15)
- With a small 20,480-token context on SWE-bench Verified, a harness that only trims old tool output and reacts to stalled work raised fully solved tasks from 43 to 72 with the same model. (arXiv 2608.26218, Same Model, Different Harness: Different Coding-Agent Results, https://arxiv.org/abs/2608.26218, retrieved 2026-10-15)

## List

| name | kind | interface | local models | how to connect | ease | needs tool calling | min context | license |
|---|---|---|---|---|---|---|---|---|
| OpenCode | coding | terminal | native | `ollama launch opencode` | 1 | true | 64000 | MIT |
| Pi (pi-mono) | coding | terminal | openai-compatible | `Add a provider to models.json with "baseUrl": "http://localhost:11434/v1" and "api": "openai-completions"` | 2 | true | unknown | MIT |
| Cline | coding | IDE extension | native | `Pick provider "Ollama" with Base URL http://localhost:11434, then enable "Use Compact Prompt"` | 1 | unknown | unknown | Apache-2.0 |
| Aider | coding | terminal | native | `export OLLAMA_API_BASE=http://127.0.0.1:11434 then aider --model ollama_chat/<model>` | 2 | false | unknown | Apache-2.0 |
| Kilo Code | coding | IDE extension | native | `Settings > Providers > add Ollama (no API key), then set "Context Window Size (num_ctx)"` | 1 | true | 32000 | MIT |
| Goose | coding | desktop app | native | `goose configure > Configure Providers > Ollama (defaults to localhost:11434)` | 1 | true | unknown | Apache-2.0 |
| Continue | coding | IDE extension | native | `In config.yaml: provider: ollama, model: <name from ollama list>, apiBase: http://localhost:11434` | 2 | true | unknown | Apache-2.0 |
| Crush | coding | terminal | native | `provider add ollama --name Ollama --type ollama --base-url "http://localhost:11434/v1/"` | 2 | unknown | unknown | FSL-1.1-MIT |
| Qwen Code | coding | terminal | openai-compatible | `In settings.json add a modelProviders.openai entry with "baseUrl": "http://localhost:11434/v1" and a contextWindowSize` | 2 | unknown | unknown | Apache-2.0 |
| Zed | coding | desktop app | native | `In settings set the Ollama "api_url": "http://localhost:11434"; Zed discovers pulled models` | 1 | unknown | unknown | GPL-3.0-or-later |
| Codex CLI | coding | terminal | native | `ollama launch codex or codex --oss -m gpt-oss:120b` | 1 | unknown | 64000 | Apache-2.0 |
| Claude Code | coding | terminal | config | `ollama launch claude (or export ANTHROPIC_BASE_URL=http://localhost:11434 with ANTHROPIC_AUTH_TOKEN=ollama)` | 1 | true | 64000 | unknown |
| OpenHands | coding | web app | openai-compatible | `Base URL http://host.docker.internal:11434/v1, Custom Model openai/qwen3.6:35b-a3b, any API key` | 2 | unknown | 22000 | MIT |
| DeepSeek Harness | coding | web app | native | `ollama launch dsh` | 2 | unknown | unknown | MIT |
| Open Interpreter | coding | terminal | native | `Built-in "Ollama local OSS" and "LM Studio local OSS" providers; switch with /model` | 2 | unknown | unknown | Apache-2.0 |
| llama.vscode | coding | IDE extension | native | `Install the extension, use its "Install/Upgrade llama.cpp" menu option, then pick a local model` | 1 | unknown | unknown | MIT |
| mini-SWE-agent | coding | terminal | config | `In the model config set model_kwargs: api_base: "http://localhost:8000/v1" (passed to LiteLLM)` | 3 | unknown | unknown | MIT |
| Gemini CLI | coding | terminal | no | - | 3 | unknown | unknown | Apache-2.0 |
| OpenClaw | general | messaging | native | `ollama launch openclaw` | 1 | true | 64000 | MIT |
| Hermes Agent | general | terminal | native | `ollama launch hermes` | 1 | true | 64000 | MIT |
| nanobot | general | messaging | native | `In config: "providers": { "ollama": { "apiBase": "http://localhost:11434/v1" } }` | 2 | unknown | unknown | MIT |
| LM Studio Bionic | general | desktop app | native | - | 1 | unknown | unknown | unknown |
| Vane (Perplexica) | general | web app | native | `In settings set the Ollama API URL to http://host.docker.internal:11434` | 1 | unknown | unknown | MIT |
| Browser Use | general | terminal | native | `llm = ChatOllama(model="llama3.1:8b")` | 3 | unknown | unknown | MIT |
| GPT Researcher | general | web app | native | `In .env: OLLAMA_BASE_URL="http://127.0.0.1:11434/" and FAST_LLM="ollama:<model>"` | 2 | unknown | unknown | Apache-2.0 |
| Khoj | general | web app | openai-compatible | `export OPENAI_BASE_URL="http://localhost:11434/v1/" then khoj --anonymous-mode` | 2 | unknown | unknown | AGPL-3.0 |
| UI-TARS Desktop | general | desktop app | openai-compatible | `Settings > VLM Base URL: an OpenAI-compatible endpoint (for example vLLM) serving a UI-TARS model` | 3 | unknown | unknown | Apache-2.0 |
| DeerFlow | general | web app | openai-compatible | `Add a model in config.yaml with use: langchain_openai:ChatOpenAI and a local base_url (vLLM example: http://localhost:8000/v1)` | 3 | unknown | unknown | MIT |
| Open WebUI | chat | web app | native | `pip install open-webui && open-webui serve (finds Ollama at http://localhost:11434)` | 1 | true | unknown | unknown |
| LM Studio | chat | desktop app | native | `Runs models itself; add tools via Program tab > Install > Edit mcp.json` | 1 | unknown | unknown | unknown |
| Jan | chat | desktop app | native | `Built-in llama.cpp and MLX engines; download a model in the app` | 1 | unknown | unknown | Apache-2.0 |
| AnythingLLM | chat | desktop app | native | `Choose Ollama in LLM settings with base URL http://127.0.0.1:11434; start agents with @agent` | 1 | unknown | unknown | MIT |
| Cherry Studio | chat | desktop app | native | `Enable the built-in Ollama or LM Studio provider in settings` | 1 | unknown | unknown | AGPL-3.0 |
| LobeHub (LobeChat) | chat | web app | native | `docker run -d -p 3210:3210 -e OLLAMA_PROXY_URL=http://host.docker.internal:11434 lobehub/lobehub` | 2 | unknown | unknown | unknown |
| LibreChat | chat | web app | openai-compatible | `In librechat.yaml add a custom endpoint named "Ollama" with baseURL: "http://localhost:11434/v1/"` | 2 | unknown | unknown | MIT |
| GitHub Copilot CLI | coding | terminal | native | `/model in Copilot CLI 1.0.94-0 or later lists models from a running Ollama; pick one, then Add and use for this session` | 1 | true | unknown | unknown |
