Computers and models
Models
Synonode works with the model you run on your computer, or an online API you choose. How it finds yours, and how to get the best from it.
Local models
Start your model server, then click Detect in the runner window. Synonode looks on the usual ports on your computer (on Windows too, when an older runner lives in WSL):
| Server | Port |
|---|---|
| llama.cpp | 8080, 5678 |
| LM Studio | 1234 |
| Ollama | 11434 |
| vLLM | 8000 |
| Jan | 1337 |
On another port or another machine? Set its address yourself in the runner window, or:
synonode-runner model http://192.168.1.20:8080
Online APIs
Any OpenAI-compatible API works: give the runner its address, your key and the model's name.
synonode-runner model https://api.example.com/v1 --key YOUR_KEY --name model-name
The key stays on your computer. Requests then go from your computer to that API.
Choosing a model
- Coding models do best. Synonode does a lot of careful, step-by-step work with tools; models trained for coding and tool use handle it best.
- Bigger is better, if your hardware can run it at a usable speed.
- Give it room. A larger context lets longer conversations go on before they're compacted.
Pictures
Synonode looks at what it builds: screenshots of your app, pictures you attach, and images and PDF pages it opens in your project, each shown small in the chat. For that, your model needs vision. With llama.cpp, start llama-server with the model's vision file, --mmproj <file>.gguf (with -hf it is downloaded for you). Without it, Synonode tells the model it cannot see pictures, so it checks with words and code instead and never makes up what is in one.
Thinking
If your model can reason before it answers, Thinking shows in the + menu of the message box, where you choose how hard it thinks. The thinking shows above the reply as Thought for….
Synonode reads your model's chat template to see what it offers, whatever its maker called it: No thinking where it has an on/off switch, levels where it has them. On Auto Synonode sends nothing about thinking, so the flags you start the model with decide: for llama.cpp --reasoning-budget, --reasoning-budget-message and --reasoning-preserve. Small side jobs (a project's name, greetings, commit messages) still turn thinking off, through the template's own switch, and send nothing where it has none.
A model that thinks too long: cap it with --reasoning-budget (8192 is a good start) and give it a --reasoning-budget-message such as "Proceed to the final answer", so it acts when the cap is reached.
Speed with a local model
Most of the time a local model spends is reading. Synonode keeps the start of each conversation the same from turn to turn, so the model reuses what it has already read and only reads what's new. While it reads, the line under the chat says how much and how long is left: Reading what is new · 8.1k of 17.6k tokens · about 32s left.
With llama.cpp started with --slot-save-path, Synonode also keeps the model's memory of each conversation on disk: when another project or a side job takes the model, when it has been quiet for a few minutes, and before power save, Stop or Restart end the model. Coming back, the conversation is restored in seconds instead of read again. While it is written or read, a line under the chat says so: Restoring the conversation's memory · 3s.
For llama.cpp, run a single slot (-np 1) so one conversation keeps the whole cache, and give it as much context as your memory allows.
A helper model
Beside your main model, the runner can run a small one, about 2B, that takes the side jobs, so your main model doesn't stop for them.
- Explore agents, and your own agents marked
model: small(ormodel: haiku), run on it, and Synonode can send any agent with a small task there (main model or helper). Your conversation stays in the main model's memory, untouched. They can also run in the background while your main model goes on. - Small jobs: the project's name, the start page's greetings, commit messages, and memory changes from the Memory page.
What needs the whole conversation stays on your main model, which already has it read: compacting, the after-reply memory check and the next-message suggestion.
Add it in the runner window under Helper model, or on synonode.com in the computer menu's model panel, on its Helper tab. Give it its own port, a short context, and the CPU when your GPU is full:
llama-server -m ~/models/Qwen3.5-2B-Q4_K_M.gguf --port 5679 -c 16384 -ngl 0
Before it starts, the runner checks there's room in memory for it beside your main model, and asks first when there isn't. Squeezed in anyway, your main model gets slower. With little memory left, use a smaller one, like Qwen3.5-0.8B. The Overview's Environment box shows what it's doing: working while it answers something, idle while it waits, off when it isn't running. When it's off or fails, its jobs go to your main model, as they did before there was one.
Is it answering?
The light in the app's top bar shows whether your computer's model answers. synonode-runner status says the same in a terminal. See Troubleshooting.