Reference·First runIndex

First run

The setup wizard: when it opens, what each stage shows, and the usual mistakes.

.mdllms.txt
a shell
nodecode

When setup opens

CaseResult
No provider has a credentialSetup opens on the first frame.
nodecode setupSetup opens on the first frame.
/setup in the shellSetup opens now.

A credential can come from config.jsonc, auth.json or the environment.

The walk has up to four steps: Import, Provider, Model, Cells. The counts them and says what is still missing. The lists what each stage takes. Esc skips a stage. Left and Right move between steps.

Setup on the first frame: Connect, Setup · step 1/3 · still needs a provider and a model, Search providers, then Anthropic, OpenAI, OpenRouter, Google, DeepSeek, Moonshot AI and Z.AI, More providers, A to Z, and the keys under the list.

Exporting OPENAI_API_KEY before the first launch

A key in the environment counts as connected, so setup never opens. The first prompt gets no model is chosen yet.

Instead: Run nodecode setup, or /models in the shell.

Quitting halfway and expecting it to pick up

The walk keeps no state. Once one key is saved, the next launch opens no wizard.

Instead: nodecode setup walks it again.

Writing config.jsonc by hand before the first run

A parse error stops the launch: is not valid JSONC (byte N).

Instead: Fix it or move it aside. Then nodecode setup.

1. Import

Runs only when another coding agent's home is on this machine. Nodecode knows 15 of them: Claude Code, Codex, OpenCode, Cursor CLI, Gemini CLI, Qwen Code, pi, Crush, Cline, Windsurf, Kiro, dotagents, Hermes Agent, Openclaw and Command Code. It does not ask first.

The report lands in the transcript, one line per item: , , . A counts them. The cells the import needed are when the walk reaches Cells.

The import's report in the transcript: CLAUDE.md into ~/.nodecode/AGENTS.md, the skill release-notes, the MCP server filesystem landing off, summary 3 imported, 1 skipped; under it the cells step, step 4/4, 2 installed: import-kit, mcp.
ItemHere
InstructionsAdded to ~/.nodecode/AGENTS.md, under the agent's name.
SkillsKept by name, with their description.
MCP serversWritten to the config, off. /mcp on NAME starts one.
API keysCopied to auth.json, then checked.
Sign-insStay with the other agent.
SessionsLeft out. nodecode import WORLD --only sessions brings them.
Settings this home already hasKept.
Report~/.nodecode/import/report-<time>.txt

Starting where another agent holds keys you don't want here

The import runs without a question. Keys and bot tokens come with it.

Instead: Run nodecode import WORLD first and pick Skip. Then nodecode.

Expecting a Claude Code or Codex sign-in to come over

A sign-in stays with its agent. The report says so: no key imported here serves it.

Instead: Paste an API key in the provider step.

Waiting for an imported MCP server to answer

Imported servers land off: lands off: /mcp on filesystem starts it.

Instead: /mcp on NAME, once you have read what it runs.

2. Provider

Seven providers come first, then the rest A to Z. Enter on one asks for its key and that makes one. The shows stars.

The key step: Paste your DeepSeek API key. platform.deepseek.com/api_keys makes one. API key (empty).

Nodecode asks the provider before it saves. A key that answers goes to ~/.nodecode/auth.json . The provider moves up under Suggested, over a . Connect a second one, or press Enter on Continue.

DeepSeek key works, saved to auth.json; the list again, still needs a model: Suggested, Continue DeepSeek connected; pick a model next, DeepSeek 4 models connected (auth.json), Connect another and the other providers.

Pasting the key while the list is open

It goes into the search, in plain text, and finds No matching providers.

Instead: Press Enter on the provider first. Paste into the key field.

On the provider's key step, the key shows as stars.
The DeepSeek key step with a pasted key shown as stars.

Pasting a key from another provider, or one with a typo

DeepSeek refused this key (HTTP 401 invalid_api_key); nothing was saved.

Instead: Make a key on the page the step names. Enter pastes another.

Checked, then saved: DeepSeek key works, saved to auth.json.
DeepSeek key works, saved to auth.json, and the Continue row.

Reading "saved" as "works"

A provider that doesn't answer in 5 seconds gets the key saved anyway: not checked: no answer.

Instead: Run /doctor. If the key fails, /connect takes it again.

Connecting a local server before it runs

nothing listens at …; nothing was saved.

Instead: Start the server. Enter checks again.

Pressing Ctrl+V over SSH

No clipboard to read here — paste with your terminal (Ctrl+Shift+V)

Instead: Ctrl+Shift+V.

3. Model

The picker opens on the : the provider's newest that can call tools. Type to search. Enter makes the the default for every session.

Models (4), Setup · step 2/3: suggested: deepseek-flash, the newest with tool calls; deepseek/deepseek-flash DeepSeek V4.1 Flash selected, three more DeepSeek models under it.

Pressing Esc on the model step

Nothing is picked. The summary says model: no model configured, and every prompt fails until one is.

Instead: /models.

Pressing Enter on the first row without reading it

It is the newest model with tool calls, not the one you use.

Instead: Type part of the name you want, then Enter.

Editing config.jsonc while the walk runs

The pick can't be written: was not saved: … is not valid JSONC.

Instead: Fix the file. Then /models.

4. Cells

A cell is a folder of code under ~/.nodecode/cells/. The step offers , and for none.

default model: deepseek/deepseek-flash, then Cells, Setup · step 3/3 · ready: Which cells to start with? Recommended guard, web search, experience, browser tab; Everything all of them (15); Choose pick them one by one, each described.
AnswerInstalls
Recommendedguard, web search, experience, browser tab. None needs a key, an account or a server.
EverythingEvery shipped cell not installed yet.
ChooseA checklist of shipped and hub cells. Space marks one. Enter installs the marked ones.
EscNone.

In Choose, a shows [x]. A cell names what it brings with it.

Cells (15): Space marks a cell; Enter installs the marked ones. channel-discord and guard are marked, the other shipped cells are not.

Pressing Esc to keep it minimal

Nothing installs, guard included. The summary says none installed.

Instead: Pick Recommended.

The marked rows install, with what they bring.
Choose: channel-discord and guard marked.

Pressing Enter in Choose without marking

Enter installs the marked rows only. None are marked.

Instead: Space on each cell, then Enter.

Picking Everything to be safe

Every cell loads in every Nodecode process. Discord and Telegram each open a panel.

Instead: Recommended now. /cells adds more later.

Pressing Esc on the hub question

It ends the walk. The shipped cells you marked go with it.

Instead: Pick Leave the hub's out.

5. Panels

A cell installed in this walk that needs settings opens a panel. It says what is . A pasted goes to a 0600 file under ~/.nodecode/secrets/. The config names the file, never the value.

Setup channels.discord: still needed: bot token · allowed_channels or allowed_users or allowed_roles; the secret row, allowed_channels, allowed_users, allowed_roles and 27 more settings; enter edit, esc continue.

Pressing Esc and planning to finish it with /setup

/setup opens panels only for cells it installs. This one is installed already.

Instead: Ask the agent: "set up discord". Or set it in config.jsonc and restart the cell.

The panel says what is still needed. Enter on a row edits it.
The channels.discord panel: still needed, bot token and who may drive the bot.

Pasting the bot token into config.jsonc

A token belongs in a file or an environment variable, never in the config.

Instead: Paste it on the secret row.

Typing channel names into allowed_channels

The field takes ids.

Instead: Save the token first. Enter then lists the channels by name.

6. Finish

The walk ends with a in the transcript. names a panel you skipped. shows only when nothing is missing. The footer gains the .

The Discord guide in the transcript, then setup done: provider deepseek, model deepseek/deepseek-flash, cells 5 installed, to finish channels.discord (ask: set up discord), try type a task; the footer now names the gateway.

Typing a task under a problem line

The turn fails: no model is chosen yet: /setup connects a provider and picks one.

Instead: Clear each problem first. try shows when none is left.

Closing the shell before reading the summary

It is said once and not shown again.

Instead: /doctor reports the same.

Expecting it to keep running after the last shell closes

/doctor says gateway off — nothing keeps this organism running once its last shell closes.

Instead: nodecode gateway on.

Secrets

SecretStored inMode
Provider API key~/.nodecode/auth.json0600
A secret pasted into a panelA file under ~/.nodecode/secrets/0600

Coming back

CommandDoes
nodecode setupOpens the shell with setup on the first frame.
/setupOpens the whole walk. Takes no argument.
/connectOpens the provider step alone.
/modelsOpens the model picker alone.
/cellsLists cells. Space turns one on or off.
/doctorLists what is missing, with a fix for each.

Typing /setup discord

`/setup` does not take arguments.

Instead: /setup, then type to search.

Turning a cell off in /cells and expecting it gone

The row says its code stays loaded until a restart.

Instead: Restart nodecode.

Editing auth.json by hand

A file that doesn't parse reads as no keys. The next save fails.

Instead: Let /connect write it.

What it said, line by line: Troubleshooting. Then type a prompt and press Enter. Keys: Shell.

Esc

    Loading the index…

    ↑↓ moveEnter openEsc close