Use your desktop Claude Code, Codex or Gemini CLI coding agent from your phone. With voice.
This is experimental software. Like an actual sled: fast and fun, but if you're not careful, you can crash into a tree.
What is it? A web UI that runs locally on your computer. It spawns local Claude Code, Codex or Gemini CLI cli agents processes on your computer. This is the same coding cli you alreay use, but we start it in a headless API mode and wrap it in a web UI. We added transcription and text-to-speech so you can talk to it and hear its responses. The web UI works great on mobile, so you can share your localhost and code from anywhere.
Do I need to deploy anything? No. Sled runs 100% on your machine. It's written in Typescript (and runs with wrangler locally). Nothing is deployed to the cloud.
How does it control Claude Code? Via ACP (Agent Control Protocol) — a standard protocol that wraps CLI agents. The claude-code-acp adapter runs Claude Code as a subprocess and exposes it via JSON-RPC.
What data leaves my machine?
We (layercode.com) built this mainly because we wanted it, but also to showcase how coding agents can be voice enabled with layercode.com. We've opened up a free (rate limited) voice API endpoint so you can enjoy voice mode without any cost. You can disble voice mode in the settings. When it is enabled, your audio and agent conversation will be sent to our API. We do not store or retain any data. Our API is hosted on Cloudflare. Everything else runs local and stays local.
- ✅ Stays local: Your code, prompts, agent responses, session history
- 🔊 Sent for voice processing: Audio recordings → Layercode.com (transcription + text-to-speech). Not stored. Can be disabled in settings.
Coding agents need input every 10-60 minutes. If you're not at your desk, they just sit there.
Typing on a phone is slow. Voice is fast.
Terminals can't do two-way voice. Sled runs in the browser.
That's why Sled exists.
| Agent | Status |
|---|---|
| Claude Code | ✔ |
| OpenAI Codex | ✔ |
| Gemini CLI | ✔ |
Clone the repo:
git clone https://github.com/layercodedev/sled
cd sledThen setup:
pnpm install
pnpm migrateYou need a coding agent installed:
# Claude Code
npm install -g @anthropic-ai/claude-code@latest
# You also need Agent Control Protocol adapter
npm install -g @zed-industries/claude-code-acp
# Codex
npm install -g @openai/codex
# You also need Agent Control Protocol adapter
npm install -g @zed-industries/codex-acp
# Gemini CLI
npm install -g @google/gemini-cli@latest
# Gemini supports Agent Control Protocol nativelyStart Sled:
pnpm startOpen http://localhost:8787 in your browser.
Open Sled on your desktop or phone. Tap 'Enable Voice Mode'. Say what you want. Then hit the send message button or press enter.
"Add dark mode to the settings page"
Sled transcribes and sends it to your agent.
Your agent works. When it's done, you hear what it did.
"I've added a toggle in SettingsPage.tsx and created a ThemeContext.
Want me to add the CSS variables too?"
⚠️ Secure your tunnel. If you expose your machine without proper authentication (e.g. ngrok without--basic-auth), anyone can control your entire computer. Coding agents can run commands, read files, and more. Use strong passwords.
Install Tailscale on your computer and phone. Access Sled over your private network. No ports exposed.
ngrok http 8787 --basic-auth="user:password"Use a strong password. This exposes your machine to the internet.
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Phone │ ◄───Tailscale────► │ Sled │ ◄───ACP──────────► │ Claude Code │
│ (browser) │ │ (your Mac) │ │ Codex │
│ │ │ │ │ Gemini │
└─────────────┘ └──────────────┘ └─────────────┘
- You talk — Sled transcribes and sends it to your agent
- Agent works — Runs locally on your computer. Code never leaves your machine.
- You hear back — Response converted to speech
- Voice input — Talk instead of type. Handles camelCase and function names.
- Voice output — Responses read aloud. 300+ voices.
- Notifications — Agent finishes or needs input. You get a ping.
- Session resume — Pick up where you left off.
- Code stays local — Your agent runs on your machine. Nothing leaves.
- Hono — Web framework
- Cloudflare Workers — Runtime (local via Wrangler)
- Durable Objects — Stateful WebSocket handling
- HTMX — Real-time UI
Sled reads runtime options from environment variables (e.g. app/.dev.vars for wrangler dev, or wrangler.jsonc for production).
-
BASIC_AUTH_USER+BASIC_AUTH_PASS(optional): Enable app-level HTTP Basic Auth. If either is unset, auth is disabled. For local dev, put them inapp/.dev.vars. For production, usewrangler secret putor your deploy env. -
DISABLE_VOICE_MODE(optional): Set to any non-empty value other thanfalseto disable voice mode and all connections to layercode.com's voice API. Leave unset/empty/falseto keep voice mode enabled.
Audio and agent responses are sent through Layercode for voice processing (not stored). You can disable voice output in settings to keep responses local.
To completely remove Sled:
# 1. Delete the sled directory
rm -rf /path/to/this/repo/sled
# 2. Remove the ACP adapters (optional)
npm uninstall -g @zed-industries/claude-code-acp
npm uninstall -g @zed-industries/codex-acpThat's it. No system services, daemons, or config files are installed elsewhere.
MIT License © Layercode