Everything Clyde does
The home page has the idea. This page has the rest: the features, how they work, and recordings and measurements from real runs.
On this page: At a glance · Tune a local model · When a model fails mid-turn · Checking which models work · Laya · whichllm

At a glance
- Council
cardShuffle:high-roller councilasks the top four models at once with tools off, and Laya rates the answers.- Scripts and CI
clyde -pruns one turn with JSON output and exit codes.- Asks first
- Shell commands that are not read-only, or that reach outside the project, ask. Reading a
.envor key file asks too. - MCP
- Servers work over stdio, HTTP and SSE, with OAuth sign-in.
- Sub-agents
- Agents and teams run in parallel, in the background if you like.
- Your existing setup
- Reads the memory files, skills, hooks and MCP servers you set up for Claude Code, Codex, Cursor or Gemini CLI.
- Saved plans
- The plan you approve in plan mode survives
/compactand--resume./planmarks phases done. - Review and sessions
/reviewreads your changes, a commit or a branch without editing.clyde sessionssearches old sessions.- The install
clyde doctor,updateanduninstall. Updates followmainor tagged releases and never install by themselves.
Editor support over the Agent Client Protocol, a read-only SQL tool and the rest are in the README.
Tune a local model
A model on your own machine runs in whatever memory you have. clyde tune tests the Ollama settings that can give it a longer window, less memory or more speed, keeps only the ones that leave what the model says unchanged, and shows you how to turn them on.
clyde tuneClyde offers it when clyde setup finds a local model, and again after you download one with /models local. It loads the model a few times, so it takes a few minutes and always asks first.
What it does
- Asks what you use the model for. Coding, chat, research, long documents, quick answers (any mix), what matters most, and how much RAM to keep free. The answers are saved, so it asks once.
- Tests each setting on a private server. Ollama reads these settings only when it starts, so Clyde starts a throwaway
ollama serveon another port for each one, loads your model at the window Clyde uses for it, and measures memory and speed. Yours is never touched. - Checks what the setting did to the model. The same prompts are answered again, a fact buried in a long prompt is looked for, and the model has to make a tool call. A setting that changes what the model says is dropped, however much memory it saves.
- Picks one, or tells you to keep what you have. It chooses by your priority among the settings that passed, and only if the gain is worth restarting Ollama.
What it asks you
Mix as many as you like. They set how strict the quality check is and what it tries to win.
- Coding and agents
- Tool calls must stay right. The answers have to stay 95% alike, and the lossy cache is never tried.
- Research and fact-checking
- Answers must hold up over many sources: the same strict bar, plus the buried-fact check at the long window.
- Long documents
- Room for the text matters most. It looks for the longest window your memory can carry.
- Chat and quick answers
- Wording is more forgiving (80% alike), so the smaller cache is also tried.
- What matters most
- Speed, a long window, or reliability. It picks the winner by this, after the quality bar is met.
- RAM to keep free
- A setting that would leave less than this free for your other apps is dropped.
What it tries
| Setting | Ollama variables | What it can give you | When |
|---|---|---|---|
| Default | none | The baseline every other setting is measured against. | always |
| Flash attention | OLLAMA_FLASH_ATTENTION=1 | Needed for a smaller cache; sometimes a little speed. | always |
| Flash + q8_0 cache | OLLAMA_KV_CACHE_TYPE=q8_0 | About half the cache memory of the default, usually with the same answers. | always |
| Flash + q4_0 cache | OLLAMA_KV_CACHE_TYPE=q4_0 | About a quarter of the cache memory, at a real quality risk. | chat and quick answers only |
| A longer window | the cache above, plus CLYDE_MODEL_CONTEXT_<MODEL> | The room the smaller cache freed, spent on context, up to what the model was trained for. | when the model was trained for more than Clyde uses |
What a setting has to pass
- No more memory
- Never more than 2% above the default: the point is more room without more resources.
- No real slowdown
- Within the measurement noise (8%) of the default. Speed is the best of two runs, since one slow sample is just a busy machine.
- Free RAM kept
- It leaves at least what you asked to keep free, and stays inside the share of RAM a model may use.
- Tool calling intact
- The model still makes a correct tool call and uses the result, using Clyde's own model check.
- Long-context recall
- A fact buried in a long prompt (up to 24,000 tokens, at the window being tested) is still found.
- Same answers
- Fixed prompts answered with no randomness have to stay 95% alike (80% for chat). A cache that drifts shows up here first.
- Worth a restart
- It must free 5% of memory, open a 10% longer window, or run 5% faster. A smaller gain is not worth restarting Ollama for.
What it found on real runs
One Mac (M3 Pro, 18 GB), Ollama 0.35.1. The same setting helps one model and hurts another, which is why every model is tested.
| Model | Default | Chosen | What it showed |
|---|---|---|---|
| Qwen2.5-Coder 3B (Q8_0) | 4.69 GB 32,768 window | flash + q8_0 4.17 GB | 11% less memory, answers identical, buried fact found at every depth of a 28,000-token prompt. The q4_0 cache was refused: only 32% alike, the fact lost, 12-18% slower. |
| Llama 3.2 3B | 12.07 GB 91,136 window | flash + q4_0 6.48 GB at 131,072 | For a chat profile it passed every check (95% alike, same tasks, recall kept): about half the memory and 43% more window. A speed-first run chose q8_0 at 7.52 GB instead. |
A single machine and a few runs each. Speed moved by several tokens per second between runs of the same setting, so read speed as "about the same", not a ranking.
Where it runs
- Setup
clyde setupoffers it when it finds a local model. It never runs with--yes.- After a download
/models localoffers it once the model is on disk, after the usual model check.- Any time
clyde tune. Add--askto answer the questions again,--model NAMEfor a specific model,--ctx TOKENSto test one window.- Your own Ollama
- If it has a model loaded, Clyde says so and asks before unloading it, so the readings are fair. Ollama keeps running and loads the model again on its next request.
Turning a setting on
Clyde prints the exact commands for how you run Ollama; it does not change your Ollama itself.
- Ollama from the terminal
- Add the variables to
~/.zshrc, for exampleexport OLLAMA_KV_CACHE_TYPE=q8_0, then stop Ollama and start it again withollama servein a new terminal. - The Ollama app on a Mac
- Run
launchctl setenv OLLAMA_KV_CACHE_TYPE q8_0(and the flash attention line), then quit and reopen the app. This only reaches the app, not anollama serveyou start yourself. - Linux with systemd
sudo systemctl edit ollama, add the variables under[Service], thensudo systemctl restart ollama.- A longer window
- Also set the
CLYDE_MODEL_CONTEXT_...variable it prints, so Clyde asks for that window.
What it can't do
- It works with Ollama only, including models pulled from Hugging Face into Ollama. oMLX models are not tuned here: Clyde sets their window and memory guard, and oMLX has its own per-model settings.
- Ollama's hosted models can't be tuned, since the provider runs the server.
- The quality check catches changes in what the model says, its tool calls and long-context recall. It does not judge writing quality.
- It makes the model fit and run better. It does not make it smarter; that takes fine-tuning, which is a separate tool.
- Only a Mac has been tested. The Linux commands are given but untried.
When a model fails mid-turn
With cardShuffle:house as the model, Clyde picks a real model for each turn from the ones that passed /eval. Here Google answered HTTP 503 halfway through, so the turn moved to the next model and finished.
❯ how many tests does test_dates.py have, and which one fails? ♠ dealt google:gemini-3.1-flash-lite house · laya difficulty 1.6/3 (shadow) • Read (test_dates.py) running... ↳ ./test_dates.py · lines=1-18/18 · 0.0s ♠ dealt google:gemini-3-flash-preview google:gemini-3.1-flash-lite failed: [google] HTTP 503 — provider error, usually temporary: This model is currently e • Bash (python3 test_dates.py) running... ↳ exit=1 · FAILED (failures=1) · 0.1s `test_dates.py` has 3 tests. `test_february_in_a_leap_year` fails. ♠ Pondered for 14s · 10:45 AM · 18.1k in, 68 out
Checking which models work
/eval runs a tool call, a round trip and a hand of 11 graded tasks against every model your keys reach. Broken ones disappear from /models. The red line is a model that scored lower than at its last run.
❯ /eval codestral 4 model(s) to test on your own keys: two short requests, then a hand of 11 harder tasks for each that passes. Run the evaluation? [y/n] (y): y model tool trip hand secs tok/s note ● mistral:codestral-latest ✓ ✓ 2/11 0.6 30 mistral:codestral-2508 ✓ ✓ 1/11 0.6 30 openrouter:mistralai/codestral-… ✗ ✗ - - - credits or rate limit nvidia:mistralai/codestral-22b-… ✗ ✗ - - - not available ↓ mistral:codestral-latest: 3/11 → 2/11 since 2026-10-02 2/4 passed · 1 not available · 1 credits or rate limits (kept, retry later) /models now hides the 1 that don't work · /models all shows them
whichllm picks the best model that fits
/models local ranks models with whichllm (MIT, by Andyyyy64), bundled as our fork. It merges real benchmarks, grades the evidence behind each score and sizes memory from the model's architecture, so the top pick is the best model that fits, not the biggest. The download confirmation adds a details line with the quality, an estimated speed range and the license. Speeds are estimates.
Laya, and why it isn't steering yet
Laya is a small decision model, an optional extra for Clyde, that runs locally. It watches for a model repeating itself and hands the turn on when it is confident. It also scores each request's difficulty, but that score only starts choosing models once your own sessions show it means something. /laya shows where that stands:
❯ /laya Laya: not started · from 42 traced session(s) Stuck checks (re-deal at 0.80) checks re-dealt turn ran out anyway below 0.50 0 0 0 0.50 to 0.80 0 0 0 0.80 and up 0 0 0 Loops that ran out under the threshold argue for lowering it; re-dealt turns that ran out anyway, or many re-deals, argue for raising it. Difficulty (shadow turns, split at score 1.62) turns avg tool rounds ran out easier half 1 1.0 0 harder half 2 3.0 0 Difficulty stays in shadow: the harder half took 3.0 tool rounds on average, the easier half 1.0; it needs 9 more scored turn(s) in the smaller half.