Switchroom mark v0.4 · self-hosted, MIT-licensed · works with Pro & Max

Your Claude Pro or Max,
as a fleet of always-on agents
in Telegram.

Switchroom is a scaffolder, process manager, and Telegram plugin for the official claude CLI. Nothing patched, nothing forked. The other harnesses still run. What changed is the subscription tap. Anthropic cut third-party tools off Pro and Max. They’re on pay-per-token API keys now. Switchroom uses the CLI the way Anthropic ships it, so you stay on the subscription you’re already paying for.

Pro / Max OAuth · not the API · Native claude CLI · Compliant, not a harness

You had agents in Telegram. Then the subscription tap got cut for third-party tools. You still pay for Pro or Max. You still want Claude on your phone, away from your machine, remembering things across sessions. Just not paying twice for it.

On your desktop

Claude Code is a terminal app. It sleeps when your laptop sleeps. It forgets when you close the window.

On your phone

Mobile Claude is a chat app. No file access, no shell, no custom skills, no continuity with your desktop.

The subscription tap got closed

OpenClaw and the other harnesses still run. They just can’t ride your Pro or Max any more. It’s API keys now, billed per token. Switchroom calls the CLI Anthropic ships. Same OAuth, same limits, no middleman.

A switchboard, for your Pro or Max subscription.

Switchroom drives the stock claude CLI, the binary Anthropic ships, and spins up one long-lived process per persona. Each process is a systemd service. Each service is plugged into its own Telegram bot, on its own topic. You wire the cords; Switchroom holds the panel.

Not a harness. Doesn’t patch the CLI, doesn’t intercept the protocol, doesn’t forge tokens. Just scaffolds files, starts processes, routes messages. Gets out of the way.

System · topology
HOST · ubuntu 24.04 lts
init
systemd
wrapper
start.sh
runtime
claude cli
FLEET · 3 agents active
assistant @pa_bot
dev-helper @dev_bot
coach @coach_bot
OAuth: ~/.claude/.oauth-token · bill: $0.00 today

Three reasons. Everything else is a footnote.

A / BILLING

Your Pro/Max is the ceiling.

Switchroom runs the real claude CLI under your Pro or Max OAuth token, the same one the desktop app uses. No API meter, no per-token bill, no second invoice. Your subscription is the cap.

usage · today0.00 USD
api.anthropic.com· not in use ·
B / FLEET

Multi-persona, one panel.

Each agent is its own systemd service with its own SOUL, its own memory, its own Telegram topic. One bot per agent keeps routing clean.

pa
dev
coach
fin
C / PRESENCE

Persistent, present, responsive.

Progress cards show what each agent is doing in real time. Pinned, live-updating. Status reactions let you feel the agent's state without scrolling.

👀 Reading MEMORY.md 0.3s
🤔 Checking calendar 1.1s
👨‍💻 Drafting reply 2.4s
🔥 Done · 4 lines 3.0s

Three more things you'll want.

Memory that sticks around. Permissions that don't get in your way. A codebase you can actually read.

D / MEMORY

Your memory, your files.

Workspace-backed long-term memory: MEMORY.md + daily notes, BM25-searchable via MCP tools. Optional Hindsight semantic memory for agents that want embeddings. Skills are plain markdown. Edit them like any other file in your repo.

E / SAFETY

Safe by default.

Permission prompts surface in Telegram as ✅ Allow / ❌ Deny buttons. Read-only tools are pre-approved; Bash, Edit, Write, WebFetch gate through you. PI-safe envelopes sanitize inbound untrusted text.

F / OPEN

Open and tinkerable.

TypeScript. MIT-licensed. Bun for dev, Node ≥20 at runtime. Profiles and skills live as .hbs templates you can fork. No vendor lock-in, no telemetry. Read the source, break it, send a PR.

Five moving parts. All files you can read.

  1. 1
    One systemd service per agent

    switchroom-<name>.service, managed by the CLI: start, stop, restart, reset.

  2. 2
    OAuth, not API

    Uses CLAUDE_CODE_OAUTH_TOKEN from ~/.claude/.oauth-token. Run switchroom auth login once.

  3. 3
    Telegram as the surface

    One bot per agent, one topic per agent. Inline approvals, slash commands, handoff briefings on restart.

  4. 4
    Claude Code's native sub-agents

    Switchroom scaffolds .claude/agents/*.md. Sub-agents delegate through Claude Code's built-in machinery. Not a reimplementation.

  5. 5
    Workspace bootstrap

    Every agent gets AGENTS.md, SOUL.md, USER.md, MEMORY.md, daily notes, and an optional HEARTBEAT.md. Injected into the system prompt, budgeted.

~/.switchroom/agents/assistant/switchroom.yaml
# Persona: personal assistant
name: assistant
profile: executive-assistant
telegram:
  bot_token_env: ASSISTANT_BOT_TOKEN
  topic_id: 4281
  allowlist: [182934]
workspace: ~/work/assistant
skills:
  - calendar
  - notes
  - email-draft
mcp:
  memory:       true   # BM25 over MEMORY.md
  hindsight:    false  # semantic recall
permissions:
  auto_allow: [Read, Grep, Glob, LS]
  ask:        [Bash, Edit, Write, WebFetch]

Built for people who already run things themselves.

Solo devs

You pay for Pro or Max. You want Claude in Telegram, remembering your projects, available from the couch, without a second bill.

USES · dev-helper · code-review-bot · rubber-duck

Home-lab hosts

You have a Pi or a mini-PC humming in a closet. systemd is a friend, not a stranger. You'd rather edit a YAML than sign up for a SaaS.

USES · nightly-digest · home-ops · finance-watch

Founder-operators

You want a personal assistant that knows your docs, your calendar, your vibe. And a coding buddy. And a coach. Different personas, one panel.

USES · assistant · coach · investor-relations

Four commands. One cup of coffee.

You'll need a Linux box (VPS, Pi, old laptop), a Claude Pro or Max subscription, and a Telegram bot token from @BotFather for each persona.

req · Linux or WSL · Node ≥ 20 req · active Claude Pro or Max session opt · one Telegram bot per persona
bash · ~/panel copy
$ curl -fsSL https://switchroom.dev/install.sh | sh → installing [email protected] to /usr/local/bin → ok $ switchroom auth login → reading ~/.claude/.oauth-token ✓ linked Claude Max session $ switchroom setup → scaffolding ~/.switchroom ✓ ready $ switchroom agent add assistant --profile executive-assistant → workspace · ~/work/assistant → systemd unit · switchroom-assistant.service ✓ added $ switchroom agent start assistant ● switchroom-assistant.service - active (running) │ pid 48213 │ handoff loaded │ listening on @assistant_bot

Questions that keep coming up.

+ Do I need a Claude API key?
No. Switchroom authenticates through your Pro or Max OAuth token, the same session your Claude Code desktop app uses. There's no ANTHROPIC_API_KEY anywhere in the stack.
+ Does this really use my Claude Pro / Max subscription?
Yes. It drives the official claude CLI, the same binary that ships with Claude Code. Your subscription covers it the same way it covers desktop usage.
+ What about rate limits?
You hit the same limits as the desktop app. If you're constantly pinning ten agents on the same subscription, you'll feel it. For most solo-dev fleets (2–4 agents), it's fine.
+ Can I run multiple agents at once?
Yes, that's the point. One systemd service per agent, one Telegram bot per agent, one topic per agent. Each has its own workspace, its own memory, its own persona.
+ Windows support?
WSL works. Native Windows does not and probably won't. Systemd and the surrounding process model are core to the design.
+ Is this like OpenClaw?
Same UX goal, different approach. OpenClaw and the others still work, they just don’t ride your Pro or Max any more. Anthropic cut third-party tools off the subscription tap. You’re on pay-per-token API keys if you stay on those. Switchroom calls the stock claude CLI, uses the same OAuth flow as the desktop app, and sits on top of Claude Code’s native sub-agent and MCP machinery. Nothing to patch, same subscription you’re already paying for.
+ Does Switchroom collect any telemetry?
No. No analytics, no phone-home, no tracking. The only outbound calls are the ones your agents make. To Anthropic through the CLI, to Telegram, and to whatever MCP servers or tools you wire in.