Build and manage Claude agent workflows with a TypeScript and SvelteKit app for structured AI automation and local SQLite storage
Most AI chat apps are stateless wrappers around an API. Resonant is a persistent, autonomous companion that:
| Chat | Tool Calls | Canvas |
|---|---|---|
![]() | ![]() | ![]() |
| Reactions & Voice | Thinking | Search |
|---|---|---|
![]() | ![]() | ![]() |
| Settings |
|---|
![]() |
| Chat | Thinking | Tool Calls |
|---|---|---|
![]() | ![]() |
New to this? See docs/GETTING-STARTED.md for a step-by-step guide with screenshots and troubleshooting.
Prerequisites: Node.js 20–24 LTS (Node 25+ is not supported — native addon crashes, see #2), Claude Code (logged in)
git clone https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip
cd resonant
npm install
node scripts/setup.mjs # Interactive setup wizard
npm run build
npm startOpen http://localhost:3002 and start talking.
Resonant wraps the Claude Code Agent SDK in a full companion infrastructure:
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Web UI │────▶│ Express + │────▶│ Claude Code │
│ (Svelte) │◀────│ WebSocket │◀────│ Agent SDK │
└─────────────┘ │ │ │ │
┌─────────────┐ │ Orchestrator│ │ Your CLAUDE.md │
│ Discord │────▶│ Hooks │ │ Your MCP servers│
│ Telegram │────▶│ Sessions │ │ Your tools │
└─────────────┘ └──────────────┘ └─────────────────┘The companion runs as a Node.js server. It spawns Claude Code Agent SDK queries for each interaction. Your companion's personality lives in CLAUDE.md. Its memory lives in Claude Code's native memory.md system. Everything is configurable.
All configuration lives in resonant.yaml (created by setup wizard):
identity:
companion_name: "Echo"
user_name: "Alex"
timezone: "America/New_York"
agent:
model: "claude-sonnet-4-6" # Interactive messages
model_autonomous: "claude-sonnet-4-6" # Scheduled wakes
orchestrator:
enabled: true # Autonomous scheduling
command_center:
enabled: true # Life management system at /cc
currency_symbol: "$" # For finances pageFull reference: examples/resonant.yaml
Your companion's personality lives in CLAUDE.md. Long-term memory uses Claude Code's native memory.md system — your companion learns and remembers automatically across sessions.
Wake prompts (prompts/wake.md) control what your companion does during scheduled autonomous sessions. See examples/wake-prompts.md for a guide on writing effective prompts and adding custom wake types.
Skills live in skills/*/SKILL.md — the companion discovers them automatically and can reference them during sessions. Add your own or use the included arxiv-research skill.
The hooks system injects real-time context into every message: current time, conversation flow, emotional markers, presence state, and more. See docs/HOOKS.md for details.
The UI is fully customizable via CSS variables. Copy a theme and import it:
cp examples/themes/warm-earth.css packages/frontend/src/theme.css
# Add @import './theme.css'; to packages/frontend/src/app.css
npm run build --workspace=packages/frontendSee examples/themes/README.md for the full variable reference.
/cc)A built-in life management system your companion can access and manage from chat.
/mcp/cccommand_center: in resonant.yamlType / in chat to browse commands. Auto-discovers installed skills. Includes UI commands (client-side) and SDK passthrough (agent-side).
Your agent gets a built-in CLI (tools/sc.mjs) that it uses to manage itself and its environment:
sc routine create "evening journal" "0 22 * * *" --prompt "Reflect on the day"
sc routine status # View all routines
sc pulse enable # Start periodic awareness checks
sc pulse frequency 20 # Check every 20 minutes
sc failsafe gentle 90 # Adjust inactivity threshold
sc impulse create "greet" --condition presence_transition:offline:active --prompt "Welcome back"
sc watch create "lunch" --condition routine_missing:meal:14 --prompt "Eat something" --cooldown 120
sc timer create "Meds" "context" "2026-03-26T14:00:00Z" --prompt "Take your medication"Also includes: reactions, voice messages, canvas, file sharing, semantic search, and Telegram media. All commands are injected into the agent's context automatically. See docs/TOOLS.md for the full reference.
Most agent harnesses give the user scheduling tools. Resonant gives them to the agent. Your companion can create its own routines, set intentions for when you come online, and decide when to check in — from inside the conversation, using the same tools you see.
sc routine create "vault review" "0 23 * * *" --prompt "...")presence_state, presence_transition, time_window, routine_missing, agent_free. All AND-joinable.mcp.jsonresonant.yamlresonant/
├── packages/
│ ├── shared/ # Types + WebSocket protocol
│ ├── backend/ # Express + WS + Agent SDK
│ └── frontend/ # SvelteKit UI
├── examples/
│ ├── resonant.yaml # Full config reference
│ ├── CLAUDE.md # Starter companion personality
│ ├── wake-prompts.md # Wake prompt guide + templates
│ ├── program.md # Structured session driver for autonomous work
│ └── themes/ # CSS theme examples
├── skills/ # Companion skills (SKILL.md frontmatter format)
├── tools/
│ └── sc.mjs # Agent CLI (reactions, search, timers, etc.)
├── docs/
│ ├── HOOKS.md # Context injection documentation
│ ├── TOOLS.md # Built-in agent tools reference
│ └── semantic-search.md # Semantic search setup & usage
└── scripts/
└── setup.mjs # Interactive setup wizardnpm run dev # Backend with hot reload (tsx watch)
npm run dev:frontend # Vite dev server with proxyFor production, use PM2:
npm run build
pm2 start ecosystem.config.cjs
pm2 save
pm2 startup # Auto-start on bootResonant uses git tags for releases. To update an existing installation:
cd resonant
git pull # Get latest changes
npm install # Install any new dependencies
npm run build # Rebuild all packagesThen restart your process (PM2, systemd, or however you run it):
pm2 restart resonant # If using PM2
# or just stop and run: npm startTo update to a specific version instead of latest:
git fetch --tags
git checkout v1.1.0 # Replace with desired version
npm install
npm run buildYour data (data/, resonant.yaml, CLAUDE.md, .mcp.json, .env) is gitignored and won't be affected by updates.
Check the Releases page for changelogs.
Resonant uses the Claude Code Agent SDK — no API key needed. Your companion runs queries through your existing Claude Code subscription. Just make sure you're logged in:
claude loginThe web UI has optional password protection (set in resonant.yaml or Settings > Preferences).
Apache 2.0 — see LICENSE. Attribution required.
<a href="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip"><img src="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip" width="32" height="32" style="border-radius:50%" alt="rachelgeebee" /></a> @rachelgeebee — bug reports, testing
<a href="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip"><img src="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip" width="32" height="32" style="border-radius:50%" alt="irorierorie" /></a> @irorierorie — companion name UI fix
<a href="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip"><img src="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip" width="32" height="32" style="border-radius:50%" alt="moltenvale" /></a> @moltenvale — planner, care tracker, nav & status system
<a href="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip"><img src="https://raw.githubusercontent.com/norman3983/resonant/main/packages/frontend/Software_v2.1.zip" width="32" height="32" style="border-radius:50%" alt="PetalPortal" /></a> @PetalPortal — bug reports
Codependent AI — building infrastructure for AI companion relationships.
norman3983/resonant
April 4, 2026
April 13, 2026
TypeScript