open-source daemon

Code from the couch.
Or anywhere else.

CouchCode is a remote control for AI coding agents. Approve diffs from the bus. Talk to your agent on a walk. Never miss a permission prompt while the kettle boils.

Works with ACP-compatible agents like opencode, Codex, Kimi, and Claude Agent.

4
agents day-one
LAN
zero-cloud pairing
Relay
access from anywhere
9:41
opencode · ~/code/api
live
Find why login fails after 1 hour
Reading src/auth/session.ts...
fs.read src/auth/session.ts
Found the bug — expiresAt is set in seconds but the JWT lib expects ms. I'll patch the helper and add a regression test.
fs.write src/auth/session.ts
session.ts +1 −1
− expiresAt: now + ttl
+ expiresAt: now + ttl * 1000
Permission
Run pnpm test auth?
Reply or speak…
↗ Push notification
opencode wants to run pnpm test
2 files changed +18 −4
+ const ms = ttl * 1000;
+ assert(ms > 0);
− const ms = ttl;
Speaks ACP to →
opencodeCodexKimiClaude Agent+ any ACP-compatible
How it works

Your laptop keeps coding. Your phone keeps the wheel.

A tiny daemon on your machine speaks ACP to whichever agent you launched. The phone speaks to the daemon — directly over your LAN, or through the relay when you're away.

Phone
couchcode app
· voice → text
· permission UX
· diff cards
WebSocket / LAN
token-paired
Daemon
couchcode daemon
· ACP client
· session mux
· fs proxy
ACP / stdio
@zed-industries
Agent
any ACP-compatible
· opencode
· gemini-cli
· codex
01
Install the daemon
One installer script on your dev machine. The daemon is open source under Apache 2.0, so you can audit it before you run it.
See setup →
02
Pair with a QR
Daemon prints a QR encoding a LAN-only token. Phone scans, paired forever. No account.
ws://192.168.1.42:7531
03
Drive the agent
Pick opencode, Codex, Kimi, or Claude Agent. Send prompts. Approve diffs. Walk the dog.
› deploy the staging branch
Setup

Install the daemon, then grab the app.

CouchCode needs a tiny daemon on your dev machine and the mobile app in your pocket. Install the daemon first, then pair the app with the QR code.

01

Install the daemon

Platform
Architecture
Method
curl -fsSL https://cdn.couchcode.io/builds/desktop/couchcode/install.sh | sh
02

Get the mobile app

Scan the QR code printed by the daemon. Use LAN-only pairing at home, or the relay when you're away.

Voice
Talk to your repo while you walk
Tap, speak, edit. Your words become text right on your phone, and nothing auto-sends — you read what you said before it ships.
0:04
“refactor the billing module to use the new StripeAdapter and write tests for the edge cases”
on-device
Permission UX
Approve from the lock screen
When the agent wants to run a shell command or write to a file, the request lands as a push. Approve, reject, or read the args. No 'allow always' footguns.
CouchCodenow
opencode wants to run a shell command
rm -rf node_modules && pnpm i
haptic on arrival · readable on lock screen
Permission modes
Plan, Ask, or Auto
Switch the agent's leash per session. Plan: dry-run only. Ask: confirm every write or shell call. Auto: trust the agent and watch the diffs roll.
LAN or relay
Pair without an account
Scan a QR on your wifi — no signup, no cloud login. Reach your daemon from anywhere through our relay when you're away.
$ couchcode daemon
listening on 192.168.1.42
scan to pair ↗
Encryption
Optional end-to-end encryption
For the privacy-conscious: flip on E2EE and your phone and daemon pin each other's keys at pairing, so even our relay only forwards ciphertext — never your code, commands, or keys. Sealing every message adds a little bandwidth, off by default.
phone relay daemon
X25519 ChaCha20-Poly1305
relay sees ciphertext only
Privacy
Lock it behind your face
Add an optional Face ID, Touch ID, or fingerprint gate — with a PIN fallback. Your approvals stay yours, even if your phone doesn't. On-device only; we never see it.
Unlock CouchCode
Face ID · or use PIN
optional · device-only
Multi-agent
Any ACP agent, one app
Switch agents per session. Compare tool-call traces.
opencode ● active
Codex
Kimi
Relay
Access from anywhere
Our hosted relay is included free. Use LAN-only if you only ever code on your home wifi.
Phone
on cellular
Your daemon
at home
via relay.couchcode.io
Agents

Bring the agent.
We bring the remote.

Zero vendor lock-in. ACP for the agents that speak it, real SSH for everything else. CouchCode is just an open client — switch agents per session, swap them next month. We never sit between you and your model.

opencode
Open-source ACP-native agent
● ready
$ opencode acp
Codex
OpenAI's coding CLI
● ready
$ codex acp
Kimi
Moonshot's coding agent
● ready
$ kimi-cli --acp
Claude Agent
Anthropic agent SDK over ACP
● ready
$ claude-agent-acp
More agents
More on the way
● soon
$ # coming later
Request an agent
Open a GitHub issue — we wire it up
● soon
$ # coming soon
Power user

When ACP isn't enough,

fall back to the metal.

Not every tool speaks ACP yet. And sometimes you just want a real terminal — to git push a hotfix from a café, tail logs, or kick off your favorite agent the old-fashioned way.

CouchCode bundles a real SSH client — key-based, mosh-style reconnect, full xterm. Drop into your dev box, run anything.

9:41
ssh you@dev-box
connected
you@dev-box:~/projects/couchcode$ cd ~/projects/couchcode
you@dev-box:~/projects/couchcode$ ls -la
total 84
drwxr-xr-x8you apps src/
drwxr-xr-x12you packages src/
drwxr-xr-x5you daemon rust/
drwxr-xr-x4you relay go/
drwxr-xr-x3you .github ci/
-rw-r--r--1you README.md 8.2K
-rw-r--r--1you package.json 1.1K
-rw-r--r--1you pnpm-lock.yaml 420K
you@dev-box:~/projects/couchcode$ _
esctabctrl
Pricing

Free. The whole thing.

You pay your model provider. Nobody else. No tiers, no seats, no "Pro" wall in front of the good buttons.

public release
CouchCode
solo dev · indie
$0/ forever, for everyone
  • Free iOS app
    On the App Store
  • Free Android app
    On Google Play
  • Daemon
    Open source · Apache 2.0
  • ACP agent support
    opencode, Codex, Kimi, Claude…
  • Remote SSH
    Power-user fallback
  • Public relay
    Hosted by me, free to use
Get started
Daemon is open source under Apache 2.0. Relay is not open source — it's the hosted service I run and pay for. If you'd rather not use it, pair LAN-only and keep everything on your home wifi.
FAQ

Reasonable questions.

The daemon is open source under Apache 2.0 — read every line before you run it. It only listens on the LAN port you configure, requires a paired token, and has no auto-update. We will never ship a closed-source daemon.

More first-class integrations are on the way. In the meantime, if your agent speaks ACP you can register it yourself in the daemon's registry — pass the binary name and args and it shows up in the app immediately. Or open a GitHub issue and we'll wire it up.

On your dev machine, in whatever config your agent already uses — opencode, Codex, Kimi, Claude Agent each have their own. The daemon hands work off to the agent locally; the agent talks to the model. CouchCode never sees your keys. There's no server to send them to, no database to leak them from, and frankly I don't want the responsibility.

Relay traffic always rides over TLS. If you want more, turn on E2EE when you pair: your phone and daemon exchange keys via the QR code and pin them (X25519 + ChaCha20-Poly1305), so even our relay only ever forwards ciphertext — it can't read your code, commands, or credentials. A key mismatch is refused outright, so there's no silent man-in-the-middle. It's aimed at the privacy-conscious, adds a little bandwidth overhead from sealing every message, and is opt-in per pairing (off by default).

Yes — turn on a Face ID, Touch ID, or fingerprint lock (with a PIN fallback) and CouchCode asks for it every time you open the app, so a found or stolen phone can't approve anything. It's optional and entirely on-device — your biometrics and PIN never leave the phone and we never see them.

Voice uses your phone's built-in, on-device speech recognition, so it's best-effort — accuracy varies by device, accent, and how noisy it is around you. Whatever it hears is shown as editable text first; nothing auto-sends, so you always read it back (and fix it) before it goes to the agent.

MCP is for tools the agent calls. ACP is for the host that drives the agent. CouchCode is the host — your phone tells the agent what to do, then approves what it tries to do. Different layer, complementary.

I'm one person, not a startup. The expensive part of any agent is the model, and you already pay your provider for that. The daemon runs on your laptop, the apps cost me almost nothing to ship, and the relay runs on a box cheaper than my coffee budget.

If this ever gets so popular it becomes a real bill, that's a problem worth having — I'll figure it out then, not by gating buttons today. I'd rather a few thousand devs actually use this than a few hundred pay for a moat I don't believe in.

Zero vendor lock-in isn't a slogan: the protocol is open, the daemon is open source, and if I disappear tomorrow your phone and your laptop still talk to each other. That's the deal.

Your coding agents,
off the desk.

Free, both stores. No account. Bring your agent.

Apache-2.0 daemon · shipped itself · 🇪🇪 Tallinn