Models
nod needs a model connection to think and reply. You connect one or more services in Models, then choose the model nod uses for everything.
Your requests go to the service you connect. Paid providers bill you for use. To run a model on your own computer instead, see Local models.
Supported connections
Section titled “Supported connections”| Service | How you connect | Default model |
|---|---|---|
| OpenAI | API key | GPT-6.1 Sol, high effort |
| ChatGPT | Your ChatGPT plan, in local nod only | GPT-6 Sol, high effort |
| Anthropic | API key | Claude Opus 5.5, high effort |
| OpenRouter | API key, or sign in with your browser | GPT-6.1 Sol, high effort |
| OpenAI-compatible | Server address, in local nod only | You choose |
You can switch to any other model the service offers.
Connect a service
Section titled “Connect a service”Open the account menu and select Models. Onboarding shows the same options before your first chat.
- Next to OpenAI, select Add API key.
- Paste your key into OpenAI API key, then select Save connection.
- Next to OpenAI, select Connect ChatGPT.
- Sign in to ChatGPT in the browser tab that opens.
- Return to nod. If the browser ends on a page that doesn't load, copy its full address into Callback URL and select Complete sign-in.
ChatGPT sign-in listens for the browser on port 1455 of your computer. If another program uses that port, nod stops with an error before it opens OpenAI.
- Next to Anthropic, select Add API key.
- Paste your key into Anthropic API key, then select Save connection.
- Next to OpenRouter, select Connect account to sign in with your browser, or Add API key to paste a key.
- Finish the sign-in, or select Save connection for a key.
nod lists the OpenRouter models that support text and tools.
- Next to OpenAI-compatible, select Add server.
- Check the Server address. nod fills in Ollama's address,
http://localhost:11434/v1. Add an API key only if the server needs one. - Select Save connection.
Use this for Ollama, LM Studio, vLLM, llama.cpp and hosted services with an OpenAI-compatible API. See Local models for server setup and what changes.
Switch and manage connections
Section titled “Switch and manage connections”All the models from your connections appear in one searchable list. Choosing a model also chooses the connection that pays for it.
| To | Do this |
|---|---|
| Switch model | Open Settings → Models, then pick a model. |
| Update a model list | In Models, select the refresh button next to the connection. |
| Fix an expired sign-in | Select Reconnect on a ChatGPT or OpenRouter sign-in connection. |
| Remove a connection | Select the remove button next to it. If it was selected, choose a new model. |
One model for everything
Section titled “One model for everything”nod uses the same model choice in the app, Telegram and WhatsApp. A task that's already running keeps the model it started with.
If a model request fails, nod doesn't switch to another connection. It retries a temporary provider error, such as an overload or rate limit, up to three times.
Background work, such as memory upkeep, uses a smaller model from the same connection when it has one, such as gpt-6-luna or claude-haiku-4-5. Otherwise it uses your model. Background work and checks that use your selected model use the lightest reasoning it offers: off, minimal, low or medium in that order, or the model's first effort level if it offers none of these.
Decision checks
Section titled “Decision checks”Two checks can use a decision model: reading whether your reply to a confirmation approves it, and checking whether an email nod reads through your apps gives access to an account. Without a decision model, the email check uses your connection's smaller background model. Your selected model decides whether an action can run, writes and fact-checks confirmation questions, and writes messages.
| Current connection | Decision checks |
|---|---|
| OpenAI API key | GPT Decisions (gpt-6-luna) with the same key |
| OpenRouter | Jev (typesafe/jev-1.13) with the same OpenRouter key |
| Anthropic directly | Your selected model |
| ChatGPT subscription | Your selected model |
| OpenAI-compatible | Your selected model |
These calls are billed through the connection that runs them. GPT Decisions is paid API use, separate from a ChatGPT subscription. OpenRouter sends the checks to TypeSafe, even when you selected a chat model from another provider. See OpenAI Decisions and Jev on OpenRouter.
In a source install, set TYPESAFE_API_KEY in .env to use Jev directly (jev-1.13.0) for these checks. The key selects TypeSafe regardless of your chat connection. Remove it to use the connection rules above, and restart nod after either change. The key stays on the server and is not added to Models.
A failed decision request does not switch providers or approve anything: the confirmation stays pending, and your reply reaches nod as an ordinary message. A failed email check hides that email's content. See Approvals and the trust check.
Set connections in server settings
Section titled “Set connections in server settings”In a source install, you can add connections in .env instead. They show Server settings in Models, and you remove them from .env, not from the app.
| Setting | What it does |
|---|---|
OPENAI_API_KEY |
Adds an OpenAI connection. Also enables voice. |
ANTHROPIC_API_KEY |
Adds an Anthropic connection. |
OPENROUTER_API_KEY |
Adds an OpenRouter connection. |
OPENAI_COMPATIBLE_BASE_URL |
Adds an OpenAI-compatible server, such as http://localhost:11434/v1 for Ollama. |
OPENAI_COMPATIBLE_API_KEY |
The key for that server, if it needs one. |
LLM_PROVIDER |
Sets the first choice: openai (default), anthropic, openrouter or compatible. |
LLM_MODEL |
Sets the first model. Leave it empty for the service default, or the server's first model. |
LLM_PROVIDER=anthropicANTHROPIC_API_KEY=<your-key>A model you choose in the app takes priority over LLM_PROVIDER and LLM_MODEL. Restart nod after you edit .env.
Where your keys go
Section titled “Where your keys go”The nod server adds your key to each model request. The key never enters the workspace, nod's browser or the model's context.
flowchart LR you([You]):::accent --> server[nod server] store[(Encrypted<br/>key store)]:::muted -- key --> server server -- request + key --> provider[Model provider]:::accent provider -- reply --> server server -- reply --> chat[Chat] sandbox[Workspace<br/>and browser]:::muted server -. no key .-> sandbox
- nod encrypts saved keys and sign-ins with the Vault key. The Mac keeps that key in Keychain, and the Windows app protects it with Windows DPAPI. Other source installs need
NOD_VAULT_KEY. - nod checks credential storage before starting a connection. If storage is unavailable, check the Vault configuration, permissions and database connection, then try again.
- Keys from
.envstay in server memory and aren't copied into the database. - Your browser doesn't store the key, and nod removes it from provider errors.