Brains: a fast and a smart model
Homer has two brains: a fast model answers every phrase, and a smart model takes on multi-step jobs as tasks. By default these are Claude Haiku and Claude Opus; you can switch both in settings to other models and other clouds, for example DeepSeek.
The speaker: the fast model (Haiku by default)
The speaker's brains are a long-running Claude Code process in non-interactive mode on the speaker computer:
claude -p --model haiku --input-format stream-json --output-format stream-json \
--tools "" --mcp-config mcp-voice.json --allowedTools mcp__homer- Each phrase goes there together with a home snapshot: devices by room from the Homer plan, their states, scenes.
- An answer takes 1.5–2 seconds, 2.5–4 with a tool call.
- The process is re-created every 6 phrases so the history doesn't grow, and right after brains settings change.
- It has no built-in Claude Code tools (files, shell, internet) (
--tools ""). It only has the home tools of the “Speaker” level. - In an English home, the brain gets its instructions, the home snapshot and the tool hints in English and answers in English. A language change re-creates the process.
What Haiku does itself
- Lights, outlets, scenes, blinds, climate, fans, media — from an allowlist of services and only for devices in the snapshot. These actions come right in its answer, without an extra call, so they are the fastest.
- Music, timers and reminders — with tools.
- Answers questions about the home: what's on, where a window is open, what the temperature is.
What it hands to Alice
Radio, fairy tales, alarm clock, weather, news, exchange rates, general knowledge — if the home has a Yandex Station. The Station answers itself. Only in a Russian home: Alice speaks Russian only.
Sign-in and usage
The brains use the Claude Code sign-in of the Windows user the speaker runs as. Requests count against your Claude subscription limits; no separate API key or payment.
WARNING
If you sign out of Claude Code on this computer, the brains start answering «Голова не отвечает» (“The brain isn't answering”) or answer with the fallback brain. Quick light commands keep working: the Homer server handles them without a neural network.
Tasks: the smart model (Opus by default)
Haiku doesn't do multi-step things itself; it hands them over to the bigger model, claude-opus-5-5 by default:
- “add a new light to the bedroom”;
- “rename the bathroom sensor”;
- “find out why the kitchen light doesn't work”.
How a task runs:
- Haiku calls the
delegatetool with the whole request, and the speaker says “On it”. - A separate
claude -pwith Opus and the “Tasks” level tools starts in the background. - If a person needs to do something, like reset a light, Opus says so through the speaker (the
saytool). - Opus says the result out loud. The first line of its answer is spoken, the rest goes to the log.
Task limits:
| At once | one task. While it runs, a new one gets the answer “still busy” |
| Time | up to 15 minutes |
| Steps | up to 40 calls |
| Instructions | look first, then act; don't delete or change anything beyond the request; if unsure, don't do it — say so |
The task model is changed in Settings → Speaker → Homer brains (see below). Opus uses up subscription limits much faster than Haiku, so it is called only for tasks. To turn tasks off entirely, remove the delegate tool from the speaker.
Other clouds: DeepSeek, OpenRouter and more
In Settings → Speaker → Homer brains, both the speaker (“Speaker answers right away”) and tasks (“Background tasks”) have two lists: cloud and model.
| Cloud | Key | Model list |
|---|---|---|
| Claude | not needed, Claude Code subscription | Haiku, Sonnet, Opus, Fable |
| DeepSeek | platform.deepseek.com | from the cloud, by key |
| OpenRouter | openrouter.ai | from the cloud |
| Kimi, Z.ai (GLM), MiniMax | via the “get one” link in settings | from the cloud, by key |
This works through the same Claude Code: these clouds have an Anthropic-compatible endpoint, and the speaker starts claude with the cloud's address and key (ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN). All of Claude Code's internal models are switched to the chosen one too; otherwise service requests would go to Haiku, which the cloud doesn't have.
- The key is stored on the Homer server. It is never sent back to the app: settings only show “saved”. Only the speaker gets the key, and only from the home network.
- The Check button loads the cloud's model list with the entered key before you save.
- Speed and quality depend on the model: the speaker needs a fast one, or answers will lag by seconds. Not every model understands a camera frame (
camera_look).
Fallback brain
The main brain is claude -p on the speaker computer. If it is silent for 60 seconds, a watchdog kills the process, and the next phrase starts a new one. While the main brain hasn't answered (the CLI hung, the cloud is down, no internet), the speaker asks the fallbacks in turn:
| Order | Brain | When it works |
|---|---|---|
| 1 | The same cloud model directly through its API | Only if a cloud with a key is chosen. A Claude subscription has no key, so this step is skipped |
| 2 | A local model in LM Studio on the computer | If the LM Studio server is running |
The local model:
- an LM Studio server on port
18234with a token; the token is insecrets/local-llm-key.txt; - model
qwen3-4b-instruct-2507, loaded on the first request (about 9 s), then answers in 0.2–1 s; - the server starts from the user's Startup folder;
- another address or model: the
HOMER_LOCAL_LLMandHOMER_LOCAL_LLM_MODELvariables. Details intools/speaker/local-llm.md.
This is a fallback
Fallback brains have no tools (music, timers, cameras, tasks) and no conversation memory. A 4B model mixes up services and confuses warm light with brightness. It keeps the home running until the main brain is back; it doesn't replace it.
The backup speaker on the GPD and Smartbox without the computer also ask the cloud model directly, by the same rules: no tools and only with a cloud key.
Memory
The speaker's brain has two kinds of memory. Both are on the speaker computer, in the HomerSpeaker folder.
- A day of conversations (
day.jsonl): what it was told and what it answered over the last 24 hours. The brain gets this on every restart and remembers what was discussed during the day: “what's the guest's name”, “what did I ask an hour ago”. - Permanent memory (
memory.md). “Homer, remember the dog's name is Tosha”: the brain writes the fact with thememory_savetool and remembers it always. Without being asked, it only writes what it was told directly about the home and people: names and pets. “Forget about Dimon”:memory_forget.
Permanent memory is also seen by Opus tasks and by Claude Code with the home tools. Every entry and every deletion goes to the log. memory.md is a plain file: you can open and edit it by hand.
Forget from Telegram. Under each “remembered” message in the home group there is a 🗑 Forget button. The /memory command sends the whole list, with a button for each fact. After a tap, the bot replies in the group with who removed what. The buttons work only in the group linked to the home, and only while the speaker computer is on: the memory lives there. The speaker's brain re-reads its memory before the next phrase, unless it's in the middle of a conversation. It won't recall a forgotten fact again.