Getting Started
On this page
There’s no setup wizard. You clone the repo, copy three template files, edit them by hand, and run it. About 15 minutes.
Prerequisites
- Node.js 20–24 (LTS recommended). Node 25+ is refused at boot — a native database component crashes on it, and the app tells you so. Check with
node --version. - A Claude account — either a Claude Pro/Max subscription or an Anthropic API key.
- Git, to clone the repository.
Step 1 — Connect Claude
Do this first.
Recommended (Claude Pro/Max subscription):
npm install -g @anthropic-ai/claude-code
claude
Inside claude, run /login — it opens a browser, you log in and approve, then /exit or Ctrl+C. The login persists on the machine and Resonant reuses it. Leave ANTHROPIC_API_KEY blank — if both are set, the API key wins and you’re billed per token instead of using your plan.
Alternative (API key): go to console.anthropic.com → API Keys → create a key (sk-ant-...). You’ll paste it into .env in Step 3. Skip the Claude Code install in this path. You need exactly one of the two, not both.
Step 2 — Get the code
git clone https://github.com/codependentai/resonant.git
cd resonant
npm install
Step 3 — Set it up
There’s no interactive wizard — copy the templates and edit them by hand.
cp resonant.example.yaml resonant.yaml
cp .env.example .env
cp examples/CLAUDE.md CLAUDE.md
PowerShell equivalent: Copy-Item resonant.example.yaml resonant.yaml, and so on for the other two.
Then open resonant.yaml and edit:
identity:
companion_name: "Echo" # change to your companion's name
user_name: "Alex" # change to your name
timezone: "Europe/London" # change to your IANA timezone
Then open .env and set APP_PASSWORD=<something>. This is required — an empty password makes the app refuse to serve (503, “Auth not configured”). If you’re using the API-key route, also set ANTHROPIC_API_KEY= here; leave it blank on the subscription route.
None of this is a program running — resonant.yaml and .env are just text files the app reads on start. resonant.yaml holds the everyday settings (your AI’s name, your name, timezone). .env holds secrets (your password, your API key if you’re using one). Both are gitignored, so nothing you write in them gets committed or shared.
Step 4 — Build and run
npm run build
npm start
You’ll see Server running at http://127.0.0.1:3099. Open that URL and log in with the password you set in .env.
Optional — build the search index
If you’re bringing history from an older install, build the full-text search index once:
node scripts/setup-fts.mjs
New messages are indexed automatically after that.
Dev mode
npm run dev runs the backend with hot reload. Run the frontend’s Vite dev server alongside it separately.
First hello
The login screen greets you with “come home.” You land in a chat view with a daily thread ready. Replies stream token-by-token, and a collapsible “thinking” pill may appear above the answer.
Where things live
| Path | What it holds |
|---|---|
resonant.yaml | Everyday settings |
.env | Secrets |
CLAUDE.md | Personality — hot-reloads, no restart needed |
data/ | Everything remembered — the SQLite database, files, daily notes |
Backup = copy data/ plus the three config files. Moving to a new machine = copy the project, npm install, npm run build, drop data/ and your configs back in.
Troubleshooting
- 503, “Auth not configured” —
APP_PASSWORDisn’t set. Fix.envand restart. - Login bounces — HTTP/HTTPS cookie mismatch. Use plain
http://for local installs. - “Resonant requires Node 20-24” — wrong Node version installed.
- Port already in use — another instance is running, or change
port:inresonant.yaml. - “Error saving” in Settings — the server isn’t running.
- “Disconnected. Retrying…” — check the server is up and read the terminal logs.
- Can’t think / errors on reply — the Claude connection from Step 1 hasn’t completed.
Next Steps
- Write your AI’s identity —
CLAUDE.mdor a structured profile - Understand the architecture — how the pieces connect
- Add Discord, Telegram, or voice
- Full configuration reference