The deck, made physical
The ring shows READY, WORKING, NEEDS YOU — with a live waveform while you talk. It follows whichever VS Code window has your keyboard, just like the app.
Drive Claude Code, GitHub Copilot Chat or OpenAI Codex — running in VS Code on your own machine — from your phone. Talk to it, approve it, watch it work. Nothing routes through our servers.
Android out now on Google Play · iPhone out now on the App Store · SofaNode shipping now · Apple Watch on the way · Wear OS on the roadmap · Free trial: 1 week, then $5/mo or $50/yr · SofaNode desk device: $99, shipping now, free delivery.
The hardware
A palm-sized round touchscreen that gives your coding agent a face — the same live deck as the app, as a physical object. State at a glance, voice in, spoken replies out, approvals with a swipe. Your phone stays in your pocket. In stock at $99, shipped free — full details, specs and photos.
The ring shows READY, WORKING, NEEDS YOU — with a live waveform while you talk. It follows whichever VS Code window has your keyboard, just like the app.
Tap to dictate straight into your editor, hold to submit. Replies come back spoken through its speaker — pick the voice, or turn it off.
A permission prompt lands as a card on the dial: swipe up to allow, down to deny — first answer wins, phone never leaves your pocket.
Swipe up for the live transcript, again for the session's task list. Scroll by turning a finger around the rim, the way you would turn a dial.
Fresh off the flasher, the Node shows a QR the moment it's on Wi-Fi. Scan it from the SofaCode app and every machine it knows — up to six, LAN and remote — lands on the Node at once, each with its own revocable token. No camera handy? Dial the 8-digit code from the menu instead; Wi-Fi joins on the same character wheel.
With remote access on, the Node roams too — wss with a pinned certificate and the same mutual-HMAC handshake as the apps. A token never crosses the internet.
ESP32-S3 · 240×240 round touch LCD · microphone + speaker, full duplex · USB-C · wake/lock button · hold-to-sleep power (microamp standby) · counts as one of your paired devices
Shipping now
$99 free shipping
In stock and shipping worldwide, with 14-day returns, a 1-month warranty and firmware updates for the life of the device. The Node pairs like any other device — your SofaCode subscription covers it, no separate plan.
Reserved at $69?
Honoured as promised
Everyone who reserved gets a personal code for the $69 introductory price — check your email, or ask us and we'll re-send it. Enter it at checkout.
This first SofaNode is the one that moves around with you — battery inside, palm-sized, Wi-Fi anywhere. A desktop model built to stay on the desk is coming in the near future.
Make videos, write, or run a community? We are looking for ambassadors and reviewers to put the Node and the app through their paces — reduced pricing on a review unit or access codes for the app, and a code of your own that pays 10% of every sale. Tell us about your channel →
Beta units are in the field today, and firmware updates itself from here on — the Node checks at boot and offers Update from its own menu. The browser flasher is there for the first flash and for Wi-Fi/timezone setup — Chrome + a USB-C cable, no terminal. Flasher access is gated to device owners during the beta; updates never wipe your pairing.
The tour
A short, narrated look at SofaCode — the app on your phone, the one-tap approvals, and the SofaNode on your desk. Sound on; press play when you're ready.
What it does
SofaCode isn't a chat wrapper — it's a full remote control for the coding agent that's already running on your machine. Same session, same files, same permissions. Just untethered from your desk.
The ring dictates on your phone by default — no wake word, nothing streamed off the phone until you hold to send it. Tap the box under it to type or edit what it caught, right there. Want it to stream to the computer's mic instead? That's one switch away in Settings.
One glanceable circle: LIVE, WORKING, or NEEDS YOU — with a live waveform.
Long-press send to choose: steer the running agent, interrupt and send now, or just type into the box without sending.
Claude Code, Copilot Chat and OpenAI Codex are all first-class: switch per session, approve Codex and Claude tool calls from the phone, use Copilot's Plan mode, and pick any Copilot model — cloud or local.
When the agent asks you something, the phone lays out the question, every option it offered and the reasoning under each — then lets you pick one, pick several, or type an answer it never suggested.
A question is never answered by a clock. Walk away and it is still there when you come back — and if it ever does run out, it goes back to the computer, never through as a "no".
Both phones draw the whole form. Both watches put one question up at a time and answer it with a tap. The SofaNode's face reads QUESTION and opens its options on a touch.
Answer permission prompts the moment they land, and cycle through permission modes — without touching the keyboard.
Follow the running session on your phone — code blocks rendered properly, the agent's task checklist ticking off live, even its thinking if you want it.
Token counts, turn counts, elapsed timer, subagent count — all live.
Every session across every paired machine, grouped by machine and folder — searchable, sortable, with favorites and one-tap archive.
Pair several devices to the same machine, or one device to several machines — all at once.
Launch any paired project into a fresh VS Code window on the machine, from your wrist.
A real code editor on your phone — find, goto, undo, conflict-safe saves — and attach any file from the tree as @context.
Run commands with output streaming back live, keep favorites on a quick rail, plus slash commands and /compact.
Snap a photo — or pick from the library — straight into the conversation. Pull any file back down, or a whole folder as a .zip.
Edit each machine's system prompt right from the app.
Have replies read aloud — pick the voice, the rate, and the pitch, per session.
A full amber-panel Console skin, custom chime sounds per event, and optional ambient "thinking" sounds.
Get pinged the moment the agent needs you, or finishes.
The deck reflows rather than shrinks: a tablet gets room to breathe, a phone gets the full deck, and on a screen small enough to wear it strips to the ring and the gestures. Android 8.0 (API 26) and up.
Setup
Two pieces live on your computer: a small daemon and the VS Code extension. The one-line installer sets up both, then a pairing window pops open. No config files to hand-edit, no IP addresses to guess.
Pick your platform — the installer fetches the daemon, installs the VS Code extension, and starts everything as a login service:
curl -fsSL https://dl.codedatda.casa/sofacode/install.sh | bash
Works on Apple Silicon and Intel. Needs Python 3.10 or newer, and VS Code with Claude Code, GitHub Copilot Chat or OpenAI Codex. The python3 macOS ships is 3.9, which is too old — the installer stops and tells you to run brew install [email protected] first, without having changed anything.
The script prints everything it is going to do before it does it. In short: a Python environment and the daemon in ~/.sofacode, the SofaCode VS Code extension, SofaCode hooks in your Claude Code config, a sofacode command on your PATH, and a LaunchAgent so the daemon starts at login.
The installer asks whether to set up a computer mic bridge — it is optional, and installing it only makes the option available; the ring still dictates on the phone by default either way. Say yes (or re-run with SOFACODE_AUDIO=yes) and, when Homebrew is present, it runs brew install blackhole-2ch portaudio. BlackHole is a system audio driver, so that step asks for your password and installs outside your home folder; remove it later with brew uninstall --cask blackhole-2ch. Say no, or there's no Homebrew, and nothing audio-related installs — the ring dictates on the phone regardless, and a SofaNode keeps its chimes, spoken replies, sessions and approvals either way. Change your mind about the driver later without reinstalling: re-run the script, or flip Computer mic bridge in the app's Settings for that machine (the switch alone doesn't install the driver — it still needs the re-run). Either way, turn on Ring tap streams to the computer in Settings › Speech — off by default — to actually send ring taps there instead of dictating on the phone.
curl -fsSL https://dl.codedatda.casa/sofacode/install.sh | bash
Sets up a user systemd service; the PulseAudio / PipeWire mic bridge for dictation is optional and asked for below. Needs python3 3.10+ and VS Code.
It installs xdotool and wmctrl unconditionally with apt, dnf or pacman — not audio, they deliver prompts to the right VS Code window and focus it. Two more things ask first: the installer asks whether to add pulseaudio-utils + portaudio, the optional computer mic bridge (the ring dictates on the phone by default either way — a SofaNode keeps its chimes, spoken replies, sessions and approvals regardless; installing the bridge only makes Ring tap streams to the computer in Settings › Speech available to turn on) — and, only so a SofaNode can move the pointer, it asks to write a udev rule at /etc/udev/rules.d/99-sofacode-uinput.rules and add you to an input group, which can read every keyboard and mouse on the machine. Decline either prompt and nothing else is lost. The script lists all of it before it starts.
irm https://dl.codedatda.casa/sofacode/install.ps1 | iex
Run in PowerShell. Installs the daemon into your user profile, adds it to the login programs, and puts sofacode on your PATH. Needs Python 3.10+ and VS Code.
The installer asks whether to turn the computer mic bridge on — Windows has no equivalent it can install for you either way, so a yes is a reminder rather than an action. Say yes and install VB-CABLE once: unzip it, run VBCABLE_Setup_x64.exe as administrator, then reboot. The daemon plays voice into CABLE Input automatically; point the mic the assistant listens to (Windows Settings → System → Sound → Input, or Claude Code's own input device) at CABLE Output — then turn on Ring tap streams to the computer in Settings › Speech, since the ring dictates on the phone by default even with the bridge installed. Say no and skip all of that — the ring dictates on the phone either way, and a SofaNode keeps its chimes, spoken replies, sessions and approvals regardless. Typed chat and phone-side dictation never needed it.
curl -fsSL https://dl.codedatda.casa/sofacode/install.sh | bash
The daemon is pure Python and runs anywhere VS Code does — including a Raspberry Pi or other arm64 single-board computer running Linux. Same systemd path as desktop Linux; give a Pi 4/5 (or a headless box running VS Code Server) plenty of RAM for the editor.
The installer finishes and your browser opens automatically, showing a QR code and a big 8-digit code. Leave it up.
Install SofaCode — Google Play on Android, the App Store on iPhone and iPad — then tap Machines → Add machine and scan the QR, or type the 8 digits. Devices with no camera just use the digits. The app walks you through this the first time it runs.
The app finds the machine on your network by itself from here on. Pairing survives IP changes — nothing to redo when your router hands out a new address. Away from home? Reach it over your own VPN or a mesh like Tailscale.
Requirements
Claude Code, GitHub Copilot Chat and Codex subscriptions are your own and aren't included with SofaCode.
Away from home
On your own network the phone talks straight to your computer and nothing is exposed to the internet. Turn remote access on and the same app reaches the same machine from a coffee shop, a hotel, or a phone on mobile data — same deck, same chat, same approvals, no account with us and no server of ours in the middle.
The usual setup runs a Cloudflare tunnel from your machine outward, so there is nothing to forward and nothing to open on the router. Prefer to forward a port yourself? Then the daemon serves TLS from its own certificate and the app pins it — a swapped certificate fails.
It ships off, and it is switched on from the computer's command line — one line. A paired phone deliberately cannot turn it on: opening a door to the internet should need a hand on the machine.
A pairing request arriving from outside is refused, and no setting loosens that. Pair once on your own network and a phone you paired months ago simply learns the new address — no re-pairing, nothing to re-scan.
Exactly one listener is published, carrying the device socket and the relay. The local API, file transfers and pairing sit on a different listener that is never exposed — a forwarded port cannot reach them even by accident.
From outside, a device must prove itself with a challenge-response handshake. A client offering a plain token is rejected rather than quietly accepted, so the secret is never on the wire in either direction.
Several computers? Make one of them the way in and reach the others through it — each still authenticates on its own. Android and the SofaNode today; iPhone needs its own address per machine for now.
Three commands on the computer, then nothing to do on the phone — the setup walkthrough is in the docs. The SofaNode roams with it: wss to the same endpoint, with the same handshake.
Pricing
One purchase covers every device and every machine you pair — no per-seat pricing, no per-machine limits.
Trial
Free
Subscribe in the app to start your trial — 1 week free, then $5/mo or $50/yr. Cancel anytime in the store.
Monthly
$5/month
Cancel any time. Covers all your paired devices and machines.
Yearly
$50/year
Two months free next to paying monthly. Same everything, one renewal a year.
Android is fully released on Google Play and iPhone and iPad on the App Store — no testing programme to join on either. Subscriptions bought through Play or the App Store are real ones, billed by the store and cancelled there. (Direct-download builds outside the store keep the previous 50-chat trial for now.)
On your face New feature · in active development
Plug USB-C display glasses into your Android phone and SofaCode draws a heads-up display on them: your busiest sessions tiled side by side, most urgent first, each with the recent back-and-forth and a pulsing banner the moment one needs you. The phone can stay in your hand or on the desk — you read the room, not a screen.
Up to four tiles at once, ordered by urgency — working, needs you, error, ready — each headed by its project and showing the recent messages, newest at the bottom.
Birdbath glasses render black as transparent, so the HUD draws no panels and no fills — only bright, bold glyphs inside a safe region, because these displays crop their edges and the far corners need eye movement to read.
Your phone already sees the glasses as an external display. SofaCode just draws on it. Nothing vendor-specific, nothing to install on the glasses, and unplugging tears it down and leaves your phone alone.
Put the panel left, right or full-width, scale the type from 0.7× to 1.8×, and turn the transcript off if you only want state. There is an optional gentle float that lags the panel behind your movement, and a recentre button when it drifts.
Which glasses
Any USB-C glasses your phone already sees as an ordinary external display over DisplayPort Alt Mode — the way most birdbath display glasses work, including models from XREAL, VITURE, Rokid, TCL RayNeo, Lenovo and ASUS. There is no companion app and nothing vendor-specific involved. We test on the pairs we own and cannot verify every model, so treat yours as unverified until you try it.
Standalone AR headsets, and smart glasses that pair over Bluetooth rather than USB-C video, are a different product category and are not supported.
Which phones
Your phone must support DisplayPort Alt Mode over USB-C, sometimes listed as "video out over USB-C". This is a hardware capability of the port that no app, cable or adapter can add, and plenty of popular phones do not have it — Pixel 7 and earlier, Pixel 9a, Nothing Phone (1), (2) and (3a), and most midrange and budget Androids. Check your model's spec sheet before buying glasses.
Not sure? Turn the HUD on in Settings and the status line tells you exactly what your phone can see.
Android only — the iPhone app has no counterpart for this. The HUD is off by default: switch it on in Settings and grant SofaCode the "display over other apps" permission; it does not start on its own when you plug the glasses in. It is a display, not a control surface — everything you approve or type still happens on the phone or the SofaNode, and your phone stays awake while the HUD is running. Any screen-anchoring your glasses do is theirs, not ours; SofaCode's optional float is a gentle lag driven by the phone's own motion sensor.
XREAL, VITURE, Rokid, RayNeo, Lenovo and ASUS are trademarks of their respective owners. SofaCode is not affiliated with, endorsed by, or certified by any of them, and we neither sell nor support the hardware.
The apps
Out now on Google Play and the App Store — a full release on both, no testing programme to join. The iPhone build is the same app at the same version. If something looks wrong, tell us and it gets fixed in the next build.
Out now on Google Play, fully released. Android 8.0 or newer — phone, tablet, or a small Android-powered display, all one build. Updates arrive through Play like any other app.
Get it on Google PlayOut now on the App Store, iOS 16 or newer — iPhone and iPad, the same version as Android, the same subscription, billed by the App Store. Updates arrive through the store like any other app; the Apple Watch app is on the way.
Download on the App StoreWant one email when a big release lands? Leave it here — occasional, no list, no spam.
The desktop side
The only thing you install by hand is the computer half — and the one-line installer in Setup does it for you. These direct downloads are here for air-gapped machines, custom setups, and the curious.
The small background process that bridges the app and VS Code. Python, cross-platform — Windows, macOS, Linux, and arm64 boards like a Raspberry Pi.
Get the daemon ⟩Streams the live session, terminal output and window info back to the daemon. Installed automatically by the daemon installer, or grab the .vsix to sideload.
Get the extension ⟩SofaCode is a small independent studio's shot at making the coding agent you already pay for usable from anywhere. We're looking for partners — distribution, platform, or investment — to bring it to a mass-market audience. If that's you, let's talk.
Partner with usFAQ
sofacode.codedatda.casa/report/ — it asks for the versions, the steps and a screenshot, and lands straight with the people who fix it. Fixes name the report they close in the changelog. If it is a SofaNode, the form opens a second set of questions — which part, how it was powered, what the face was showing — because a blank screen and a missed swipe need completely different answers. Report a SofaNode problem.
Please do. sofacode.codedatda.casa/request/ is the feature request form, for the apps, the watches, the desktop side and the SofaNode hardware itself. Tell us what you were trying to do rather than which button you want — the problem usually has a better answer than either of us thought of first. We cannot promise a date, but a person reads every one, and anything that ships is named in the changelog.
Yes — we are actively looking for reviewers and ambassadors. Reduced pricing on a SofaNode or access codes for the app, plus your own code that takes 10% off for your audience and pays you 10% of every sale. Apply here.
No. The phone talks directly to the daemon running on your own machine, over your own network. Nothing routes through a server SofaCode controls — there isn't one in the loop.
It's a small background process that sits between the app and VS Code — it relays your voice, taps, and messages to Claude Code, Copilot Chat or Codex, and streams the session back to your device.
Yes, two ways. Out of the box it works over your own VPN or a mesh network like Tailscale — nothing is exposed to the public internet. Since 2.15 there's also built-in remote access (off by default): the daemon publishes a single encrypted endpoint through a Cloudflare tunnel or direct TLS with a pinned certificate, pairing stays LAN-only, and devices authenticate with the same mutual-HMAC handshake — a token never crosses the internet. Connect at home once and your devices roam automatically.
Pairing codes are short-lived and rate-limited. The long-lived token never crosses the wire — device authentication is a mutual HMAC challenge, so the phone proves itself to the machine and the machine proves itself to the phone.
Yes. SofaCode works with Claude Code, GitHub Copilot Chat and OpenAI Codex (the CLI and the VS Code extension; daemon 2.20) — and with models running on your own hardware: turn on Local LLM (beta) in the SofaCode extension and Copilot Chat can use LM Studio, Ollama or any OpenAI-compatible server — the whole stack, agent included, runs on your machine with no API key and no internet. How to set it up.
Yes. The Android build is fully released on Google Play, and the iPhone build on the App Store — iOS 16 or newer, iPhone and iPad. The two ship together, at the same version, as mirror images of each other.
Anything running Android 8.0 or newer. It is one build that reflows rather than shrinks: a tablet gets room to breathe, a phone gets the full deck, and on a screen small enough to wear it strips back to the state ring and the gestures. That includes some Android-powered watches — the plain AOSP kind, since this is not a Wear OS app today. An Apple Watch app is on the way — it is built and running, but nothing carrying it has been released yet, so the iPhone build you can install today does not include one. A dedicated Wear OS app is on the roadmap.
The SofaNode is an optional desk device — a round touchscreen that shows the live deck, takes your voice, speaks replies, and answers approvals with a swipe. You don't need one; the app is the full product. It's for keeping the agent in view without a phone propped against your monitor. $99 with free shipping, in stock now, and it comes with 3 months of SofaCode free (a subscription code for your store arrives with the order) — see the full page.
By itself. The Node checks for new firmware at boot and offers Update from its own menu — downloads, verifies, flashes, reboots, no cable. Auto-update is on by default; turn it off in the menu if you'd rather trigger it yourself. The web flasher (Chrome + a USB-C cable) is still there for the first flash, or to update a Node by hand — it also sets up Wi-Fi and the clock's timezone, no terminal. An update never wipes the device's pairing.
Yes. Pair as many machines as you like, and as many devices as you like — two devices to the same machine, or one phone to several machines.
Nothing you need to do. Trust is keyed to the machine's identity, not its address, so the app keeps finding it after a router reboot or a new DHCP lease.
Both the app and the daemon check for updates themselves and tell you when one's ready.
Remove the Android app like any other app, and run the daemon's uninstall command on your computer (the installer prints it when it finishes, and it's echoed by sofacode doctor).
Subscribe to SofaCode in the app — Google Play or the App Store — and you get one week free before the card on file is charged for the plan you picked, $5/month or $50/year. Cancel anytime in the store and you won't be charged. No chat limits during the trial, no accounts server involved — the store handles it.
Yes — your own Claude Code, GitHub Copilot Chat or Codex subscription. SofaCode is the remote control, not the agent itself, and doesn't include either subscription.
That's the phone's own dictation — the microphone inside the chat box hands its audio to Android's speech-recognition service, and some phones ship without one enabled. Install or turn on a recognizer: the Google app's Speech Recognition & Synthesis, or your phone maker's own voice input, then check Settings → System → Languages & input → On-device speech recognition (some phones call it Voice input). Once a recognizer is present, dictation in the chat box works.
The deck's ring dictates on the phone by default, so it needs a recognizer too — the fix above covers it as well. The one path that doesn't is the computer mic bridge, and it needs two things on: the machine's own bridge (Settings → that machine → Computer mic bridge) and the phone's Ring tap streams to the computer switch (Settings → Speech, off by default). With both on, that audio is transcribed by the daemon itself, so the ring's wireless voice keeps working even with no recognizer on the phone — and the same is true of the SofaNode's microphone, which always uses the computer's bridge.
Changelog
The Android and iOS apps share one version; the daemon and the VS Code extension share another and can move on their own. The SofaNode's firmware has its own list. Full notes also ship inside the app under About → Changelog.
App 2.36.2 is next up for Google Play and the App Store. This round: models from a custom OpenAI-compatible server set up under Local LLM now count as local on the phone — they sit in the LOCAL section of the model picker as Custom endpoint (local), beside LM Studio and Ollama. Since 2.36.1: subscribing works outside the United States (both plans and the free trial on sale in 173 countries, US and Mongolia unchanged), and a paywall that says why when the store cannot open a purchase instead of closing on a tap that went nowhere. The daemon and extension are at 2.37.0 with Local LLM (beta): models from your own LM Studio, Ollama or OpenAI-compatible server in Copilot Chat's picker, and so in the app's — off by default, guide here. SofaNode firmware stays at 0.14.0.
App changelog ⟩What changed on the desk device itself — the rim, the screen, gestures, spoken replies, the touchpad and battery. The node updates itself over the air.
Firmware changelog ⟩Contact
Beta access, a partnership, a question — one form, and it reaches an actual human at [email protected]. Something broken or something missing has its own form, with the questions that save a round trip: report a bug · request a feature.