Your personal Claude Code agent, running 24/7 in the cloud.
Talk to Claude from anywhere — web, Telegram, Discord, or voice. It remembers everything, runs tools, and schedules tasks. Uses your Claude Max subscription. No API keys needed.
Tarsee is built for Claude Max subscribers. It runs a persistent Claude Code agent that uses your subscription for every message. Pro subscribers will hit usage limits quickly — Max (especially 5x) is strongly recommended for daily use.
I was using OpenClaw to run Claude Code 24/7. It worked — until Anthropic changed their billing so OAuth tokens used through these wrappers started counting against your subscription usage. That's fine, but the resource overhead was heavy for what I needed.
I just wanted Claude Code running 24/7 that I could talk to from my phone. So I wrapped the Claude Code SDK directly and built a lightweight frontend. No build step, no TypeScript compile, no framework overhead.
Haven't looked into Claude Cowork yet, but if you love Claude Code and want it always on from any device, this is it.
Being honest — some of these projects are massive with huge communities. Tarsee is small and focused. Here's where it fits:
| Tarsee | OpenClaw | NanoClaw | PicoClaw | Nanobot | |
|---|---|---|---|---|---|
| Stars | New | 353K | 27K | 28K | 39K |
| Language | Node.js | Node.js + TypeScript | TypeScript | Go | Python |
| Frontend | Vanilla HTML/CSS/JS | React + Primer UI | React | Go Web UI + TUI | Python CLI |
| Build step | None | TypeScript + Vite | TypeScript | Go compile | pip install |
| RAM | ~200-400MB | Higher (full React stack) | Moderate | <10MB | Low |
| Channels | Web, Telegram, Discord, Voice | 24+ (WhatsApp, Slack, Signal, etc.) | WhatsApp, Telegram, Discord, Slack | 18+ (Telegram, Discord, WeChat, etc.) | 12+ (Telegram, Discord, WhatsApp, etc.) |
| Voice | Yes (faster-whisper + Edge TTS) | Yes (wake word, ElevenLabs) | No | No | Telegram/WeChat voice |
| Mobile | PWA + iOS PIN pad | Native iOS/Android apps | Via messaging apps | Android APK | Via messaging apps |
| Memory | Persistent + deep search | Session-based with group isolation | SQLite + per-group files | JSONL memory store | Token-based memory |
| Auth | Claude subscription (OAuth) | OAuth + API keys | API keys | API keys + OAuth | API keys + OAuth |
| LLM support | Claude only | Claude only | Claude only | 30+ providers | Multi-provider |
| Self-host cost | ~$2-10/mo Railway | Higher (more resources) | Moderate | ~$10/mo (runs on anything) | Low |
- You want simplicity — no build step, no TypeScript, no framework. Just Node.js serving HTML.
- You want Claude specifically — Tarsee wraps Claude Code SDK directly. Not multi-provider, not trying to be everything.
- You want it cheap — runs on $2-10/mo Railway. No API costs with Claude Max.
- You want voice + mobile — PWA with local speech-to-text, hold-to-talk, iOS PIN pad login.
- You want memory — persistent memory across sessions with deep semantic search.
- You want browser automation — stealth Playwright with captcha solving built in.
- You need 20+ channels — OpenClaw or PicoClaw support way more platforms.
- You need native mobile apps — OpenClaw has actual iOS/Android apps.
- You need multi-provider — PicoClaw supports 30+ LLMs. Tarsee is Claude-only.
- You need minimal resources — PicoClaw runs on <10MB RAM. Tarsee needs ~200MB.
- You want a massive community — OpenClaw has 353K stars and thousands of contributors.
Tarsee is a Claude Code wrapper — not a fork, not a rewrite. It uses @anthropic-ai/claude-agent-sdk directly, so you get the exact same Claude Code experience with all built-in tools (Read, Write, Edit, Bash, Grep, Glob) plus Tarsee's own tools on top.
- Click Deploy on Railway above
- Change the
SETUP_PASSWORD— this is your 4-digit PIN to access the web UI. Everything else is pre-configured. - Deploy — open the URL, log in with your PIN
- The setup wizard will guide you through connecting your Claude account:
- Click "Open Tarsee's Terminal" — this opens a terminal on the server (not your local machine)
- Click inside the terminal, then type
claude login - A login link will appear — highlight it and right-click → Copy (Ctrl+C won't work in the terminal)
- Open the link in your browser and authenticate with your Claude Max account
- Come back and click "I'm connected" — done!
That's it. Credentials are stored on the Railway volume and auto-refresh. No env vars to manage. Claude Code CLI auto-updates on every restart.
You need an active Claude Max subscription with Claude Code enabled. Max is strongly recommended — Pro will hit usage limits with a persistent agent.
Credentials are saved to the Railway volume at /data/tarsee/.claude-code-home/.credentials.json and persist across restarts, redeploys, and image rebuilds. The SDK auto-refreshes tokens — you only need to log in once. If you ever get logged out, just run claude login again from the terminal (icon in topbar).
Why not an env var? OAuth refresh tokens are single-use. If you set credentials as an env var, every redeploy overwrites the SDK's refreshed token with the stale original, causing auth failures. Logging in directly on the server avoids this entirely.
If you deployed from the Railway template, your instance is a snapshot — it won't auto-update. To get the latest features:
- Go to your Railway service → Settings → Source
- Connect it to
projectservan8n/Tarseeon GitHub - Every push to main will auto-deploy to your instance
- Your data on
/datais safe — the volume persists across redeploys
- Web UI — Full chat with markdown rendering, code blocks, tables, file attachments, image paste, drag-and-drop, multi-file upload. PWA — save to homescreen on iOS/Android.
- Telegram — Text, photos, PDFs, voice messages, video notes. Group @mention support, inline buttons, forwarded message detection.
- Discord — Text, images, PDFs, voice messages. Always-online bot with presence status.
- Cross-device sync — all devices update in real-time via WebSocket. See tool calls, text streaming, and typing indicators across devices.
- All channels share the same AI, memory, and tools.
- Hold-to-talk or tap-to-toggle — full-screen conversational UI with waveform visualization.
- Live tool status — shows "Reading file...", "Running command...", "Calculating..." instead of generic "Thinking..."
- Spacebar shortcut — hold space to talk, Space+C to cancel.
- Drag to cancel — slide away from the orb or mic button to discard recording.
- Local speech-to-text — faster-whisper (CTranslate2, 4x faster than OpenAI whisper). Configurable models: tiny.en / base.en / small.en. No API key. Runs on CPU.
- Free text-to-speech — Microsoft Edge TTS with 19 voices, 3 retries, markdown stripping. No API key, no rate limits.
- Smart TTS — tables and code shown visually, spoken response is a clean conversational summary.
- Live HTML/CSS/JS — Ask for a dashboard, chart, calculator, or mini-app → renders as an interactive iframe right in chat.
- Canvas gallery — browse all your canvases at
/canvas/. - Persistent — Canvases are saved to the volume and accessible at
/canvas/<id>/.
- 20+ MCP tools — send messages, schedule tasks, remember facts, search the web, create canvases, manage files, encrypted vault, calculator, browser, and more.
- Calculator — precise math tool so Claude never hallucinates numbers. Arithmetic, percentages, Math.* functions.
- Stealth browser — Playwright with anti-detection (real fingerprints, no webdriver flag). Navigate, fill forms, screenshot, scroll, wait, run JS.
- Captcha solver — auto-detect and solve reCAPTCHA, hCaptcha, Cloudflare Turnstile via 2Captcha or Capsolver API.
- Proactive briefings —
/briefing onschedules a daily morning summary pushed to all channels. - Auto model routing —
/auto onpicks haiku/sonnet/opus based on message complexity. - Deep memory search — AI reads all memories semantically when keyword search fails.
- Cron scheduler — recurring AI tasks or direct tool actions. One-time reminders auto-delete.
- Web terminal — browser-based shell access via xterm.js.
- File manager — browse, edit, and create workspace files from the UI.
- REST API —
/api/v1/messageendpoint for iOS Shortcuts, scripts, and automations. - Skills — modular instruction packs with credentials and configs. Claude reads them automatically when relevant.
- Token usage chart — daily/weekly visual bar chart with model breakdown in Settings > Usage.
- Audit log — timestamped log of all tool executions, logins, and settings changes.
- QR code — scan from desktop to instantly open Tarsee on your phone.
- Typing indicator — see when you're typing on another device in real-time.
- Todo rendering — Claude's task lists render as styled checklists with progress indicators.
- Workspace files — SOUL.md (personality), MEMORY.md (knowledge), USER.md (user info), IDENTITY.md.
- Auto-memory — Claude saves important facts as you chat. Memories persist across sessions.
- Daily logs — timestamped notes auto-appended to
memory/YYYY-MM-DD.md.
You (web / telegram / discord / voice)
|
v
Tarsee Server (Railway)
|
+-- Claude Code Agent SDK (subscription auth, auto-updates)
| +-- Built-in: Read, Write, Edit, Bash, Grep, Glob
| +-- MCP tools: send_message, schedule_task, remember,
| create_canvas, calculator, browser, web_search, etc.
|
+-- Voice: faster-whisper STT + Edge TTS
+-- Browser: Playwright (stealth) + captcha solving
+-- Workspace: SOUL.md, MEMORY.md, USER.md
+-- SQLite: conversations, settings, vault
+-- Channels: Telegram, Discord (always online)
Configure in Settings > Channels after deploying. Channels auto-start when you save the token.
| Channel | How to get token | Features |
|---|---|---|
| Telegram | @BotFather | Text, photos, PDFs, voice, video notes, inline buttons, groups |
| Discord | Developer Portal | Text, images, PDFs, voice messages, reactions, presence |
Discord: Enable Message Content Intent in Bot settings. Invite with Send Messages, Read Messages, Add Reactions permissions.
| Command | Description |
|---|---|
/help |
Show all commands |
/model opus|sonnet|haiku |
Switch AI model |
/think low|medium|high|max |
Set thinking effort for the session |
/auto [on|off] |
Toggle auto model routing (haiku/sonnet/opus by complexity) |
/briefing [on|off|time] |
Morning briefing — run now, schedule daily, or set time |
/send telegram|discord|web |
Forward conversation context to another channel |
/fork [from #N] |
Branch conversation — copy history into new session |
/play [name|list|save|delete] |
Run or manage playbooks (multi-step AI workflows) |
/email [check|summary|draft] |
Check inbox, summarize, or draft emails |
/webhook [list|add|remove] |
Manage webhook triggers (external events → AI) |
/files [search term] |
List or search workspace files |
/status |
Full dashboard (uptime, tokens, messages, channels) |
/clear |
New conversation |
/cron |
Manage scheduled tasks |
/remember [fact] |
Save to memory |
/doctor [fix] |
Diagnostics + auto-repair |
/export |
Export conversation |
| Tab | What's there |
|---|---|
| Identity | Bot name (set via IDENTITY.md) |
| Workspace | SOUL.md, USER.md, MEMORY.md editors |
| AI Provider | Model selection, API config |
| Channels | Telegram, Discord tokens |
| Automation | Cron jobs, webhooks |
| Voice | TTS engine (Edge TTS / ElevenLabs), STT model (tiny/base/small), voice selection |
| Skills | Create, edit, delete instruction packs |
| Memories | View and manage stored memories |
| Security | Security audit, tool permissions, captcha solver config |
| Canvas | Gallery of AI-generated interactive UIs |
| Usage | Token usage chart, daily/weekly stats, model breakdown |
| Audit Log | All tool executions, logins, settings changes |
| Variable | Required | Default | Description |
|---|---|---|---|
SETUP_PASSWORD |
Yes | — | 4-digit PIN for the web UI |
ENCRYPTION_KEY |
Yes | — | AES-256 key. openssl rand -hex 32 |
NODE_ENV |
Yes | — | Set to production |
CLAUDE_DEFAULT_MODEL |
No | claude-sonnet-4-6 |
Default model for new sessions |
ELEVENLABS_API_KEY |
No | — | Premium TTS voices (Edge TTS is free) |
Note: Claude credentials are NOT set via env var. Run
claude loginin the web terminal after deploying. See Authenticating with Claude.
docker build -t tarsee .
docker run -d \
--name tarsee \
-p 8080:8080 \
-v tarsee-data:/data \
-e NODE_ENV=production \
-e SETUP_PASSWORD=your-password \
-e ENCRYPTION_KEY=$(openssl rand -hex 32) \
tarseeAfter starting, open the web terminal and run claude login to authenticate.
Requirements: Docker, Claude Max subscription (Pro will work but will hit limits quickly).
- AES-256-GCM encrypted credential vault
- Timing-safe authentication
- CSRF protection on all mutations
- Content Security Policy headers
- Rate limiting (10 auth attempts/min/IP)
- Path traversal protection
- OAuth auto-refresh (tokens never stored in plain text)
- Session isolation per conversation
- Audit log for all tool executions and logins
Tarsee is open source. PRs welcome.
src/
server.js # Express + HTTP server
ai/
providers/claude-code.js # Agent SDK wrapper
tarsee-mcp.js # 20+ MCP tools
lib/
tools.js, commands.js # Tool registry + chat commands
cron.js # Scheduler
canvas.js # Canvas/artifact server
security-audit.js # Security checks
channels/
telegram.js, discord.js # Bot integrations
websocket.js # Web UI real-time + cross-device sync
voice/
stt-handler.js # faster-whisper STT
edge-tts-engine.js # Free TTS (19 voices)
routes/
chat.js # Chat API + SSE streaming
external-api.js # REST API (/api/v1/)
analytics.js # Token usage stats
public/ # Web UI (vanilla HTML/CSS/JS, PWA)
MIT
