Skip to content

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.

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.

Open the account menu and select Models. Onboarding shows the same options before your first chat.

  1. Next to OpenAI, select Add API key.
  2. Paste your key into OpenAI API key, then select Save connection.

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.

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.

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.

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.
.env
LLM_PROVIDER=anthropic
ANTHROPIC_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.

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 .env stay in server memory and aren't copied into the database.
  • Your browser doesn't store the key, and nod removes it from provider errors.