State at a glance
The ring reads READY, WORKING, NEEDS YOU — with a live waveform while you talk. It follows whichever VS Code window has your keyboard, so it is always showing the session you are actually in.
01 The hardware
A palm-sized round touchscreen that gives your coding agent a face. State at a glance, voice in, spoken replies out, approvals with a swipe — and it works with Claude Code, GitHub Copilot Chat and local models on your own GPU, because it drives VS Code itself rather than one vendor's agent.
02 What it is
Your agent runs on your own machine, in VS Code. The SofaNode sits on the desk beside it and shows you what it is doing — and lets you answer without touching the keyboard. It is the same live deck the SofaCode app shows on a phone, as an object you can glance at.
The ring reads READY, WORKING, NEEDS YOU — with a live waveform while you talk. It follows whichever VS Code window has your keyboard, so it is always showing the session you are actually in.
Tap to dictate straight into your editor, hold to submit. No wake word, no cloud assistant, no push-to-talk app to alt-tab into.
Answers come back spoken through its speaker — pick the voice, or turn it off. Tap to interrupt mid-sentence, the way you would interrupt a person.
A permission prompt lands as a card on the dial: swipe up to allow, down to deny. First answer wins across every device, so the phone stays in your pocket.
Swipe up for the live transcript, again for the session's task list — the running task pulses and reads brightest, finished ones tick off and dim. Scroll by turning the bezel like a watch dial.
The rim scrubs the machine's VS Code windows; roll past either end and it switches machines. Desktop, laptop, the box in the closet — up to six, each with its own credentials.
03 Why it is different
Every other desk gadget for AI coding is welded to a single vendor: it speaks one company's API, so it works with one company's agent, and the day you switch you own a paperweight. The SofaNode does something simpler and far more durable — it drives VS Code. Whatever agent lives in your editor is an agent the Node can run — including models running on your own hardware, with no API key and no internet at all.
Full support today: live transcript, permission prompts on the dial, session switching, task lists, spoken replies.
Full support today, including the model picker — the Node can drive whichever model your Copilot subscription offers.
Run Llama, Qwen, DeepSeek, Mistral, Gemma or anything else in LM Studio and drive it from the Node, through our own LM-CODE extension. No API key, no token bill, no data leaving the building.
Dedicated support is on the roadmap. The protocol and the device do not change for it — only the adapter on the VS Code side does.
New agents arrive as editor extensions now. Because the Node talks to the editor, adding one is a daemon update — not new hardware.
| SofaNode | Single-vendor desk gadgets | |
|---|---|---|
| Agents supported | Claude Code + Copilot Chat + local models, Codex planned | One, whichever the vendor sells |
| Runs models on your own hardware | Yes — LM Studio, via our LM-CODE extension | No — their cloud, their key, their bill |
| Where your code lives | Your machine. Always. | Usually the vendor's cloud |
| What it talks to | VS Code on your LAN | A hosted API |
| Works offline / air-gapped LAN | Yes — with a local model, nothing leaves the room | No |
| If you switch agents | Same device, keeps working | New device |
| Extra subscription for the hardware | None — your SofaCode plan covers it | Often a second subscription on top |
The SofaNode needs an active SofaCode subscription — $5/month or $50/year, with a week free to try it — because the Node is a face for the app, not a replacement for it. What it does NOT need is a second subscription of its own: it counts as one of your paired devices on the plan you already have, however many machines and devices you pair. No account on our servers either — pairing is between your device and your machine.
04 Everything it does
Tap and speak; the text lands in the agent's prompt on your machine. Hold to submit. Speech is transcribed by your daemon, on your hardware.
Replies read aloud in a voice you choose. A tap stops it dead. Turn read-aloud on or off per session from the chat view.
Every tool approval your agent asks for can be answered on the Node — allow, deny, with the command visible. Answered once, everywhere.
The conversation, on the dial. Tap to jump to newest, hold to toggle reading aloud, turn the bezel to scroll back.
Watch the agent's plan tick off in real time — running task bold, done struck through. Swipe up twice from the deck.
Swipe left for the sessions on the machine, the ones wanting you first — up to twelve in the list, five on screen as you scroll. Hold on one and the Node follows it — ring, transcript, tasks and spoken replies — and stays there until you go back to your keyboard. Turn the rim on the deck for a blind flick between windows, and roll past the end to switch machines.
Running several agents at once, only the session you're on is read aloud — the rest would be noise. When one of the others stops, whether it finished or it wants you, it holds its last reply and raises a dot. Swipe left, tap to hear it, tap again to clear. On a row with a dot, that's what a tap does; a hold still switches to it. Turn the voice off and the dots go with it — they're an offer to play something.
Whichever VS Code window has your keyboard is the one the Node shows. Alt-tab and the device follows you — until you pick a session on the Node itself, which holds it there while you're away from the desk. Take the keyboard again and it goes back to following you.
First boot shows a QR. Scan it from the SofaCode app and every machine you have paired — remote domains included — lands on the Node at once, each with its own revocable token. No camera? Dial the 8-digit code instead.
Join a network from the device itself: pick the SSID, dial the password on a character wheel, or use the phone-based softAP portal. Timezone too.
With remote access on, the Node roams — wss with a pinned certificate and the same mutual-HMAC handshake as the apps. A token never crosses the internet in the clear.
Firmware checks for updates at boot and offers Check update in its own menu. Updates never wipe your pairing. A browser flasher is there for the first flash.
A sound when the agent needs you, another when it finishes. Volume per-sound, or silent — it is a desk object, not an alarm clock.
EMBER, the warm amber palette, is matched between the app and the device, so the deck in your hand and the deck on your desk read as one product.
Screen-sleep on a timer if you want it (it ships always-on); wake with the function button, or turn on wake-on-tap in the menu. Hold the function button to power down to microamp standby. Battery percent and charge state on the deck.
Point VS Code at LM Studio with our LM-CODE extension and the Node drives models running on your own hardware — Llama, Qwen, DeepSeek, Mistral, Gemma, GLM and friends, with full tool-calling. Several machines' worth of models de-duplicate into one picker, and it fails over between servers. No API key, no per-token bill, and a setup that keeps working with the internet unplugged.
There is no SofaCode server in the path. The Node talks to your daemon on your network. We could not read your code if we wanted to.
05 In the flesh
Photography is being shot now — the frames below are placeholders at the final crops, so the real images drop straight in.
06 Specifications
| Processor | ESP32-S3, dual-core Xtensa LX7 @ 240 MHz |
|---|---|
| Memory | 16 MB flash · 8 MB octal PSRAM |
| Display | 240 × 240 round IPS LCD, GC9A01 |
| Touch | Capacitive, CST816 — taps, holds, four-way swipes |
| Input | Rotating bezel dial · function button |
| Audio | ES8311 codec, microphone + speaker, full duplex |
| Wireless | Wi-Fi 802.11 b/g/n, 2.4 GHz |
| Power | USB-C · internal LiPo · microamp deep-sleep standby |
|---|---|
| Security | Mutual-HMAC challenge-response on every link; per-device revocable tokens; pinned certificate for remote |
| Updates | Over-the-air from the device menu, plus a Chrome-based web flasher |
| Works with | Claude Code · GitHub Copilot Chat · local models via LM-CODE + LM Studio · Codex planned |
| Requires | An active SofaCode subscription ($5/mo or $50/yr, one week free) · VS Code on Windows, macOS or Linux with the SofaCode extension + daemon |
| Firmware | Open update channel — every unit gets every release |
| Warranty | 1 month against manufacturing defects |
07 Setting it up
Install the SofaCode extension in VS Code and run the daemon installer. One command; it is the same setup the phone app uses.
Power it on. Pick your network on the device and dial the password, or join its setup hotspot from a phone. Timezone at the same time.
The Node shows a code. Open the SofaCode app → Settings → Set up a SofaNode and scan it. Every machine you have paired lands on the device at once.
Tap the screen and speak. That is the whole loop — dictate, hold to submit, listen to the reply, swipe to approve.
No SofaCode account is created for the device, and the Node never talks to us — pairing binds it to your own machine. Full setup notes ship in-app on both Android and iOS.
08 Get one
$99
FREE SHIPPING WORLDWIDE · 14-DAY RETURNS
Includes 6 months of SofaCode free — a 6-month subscription code ($30 value) arrives with your order confirmation, for Google Play or the App Store, your pick. One code per Node.
The Node runs on a SofaCode subscription — $5/mo or $50/yr after your free months, one week free either way. See plans
Checkout opens shortly. Leave your email and you get the link before it is public.
Thank you — your order is in. A receipt is on its way to your email, and you will get a tracking number when it ships.
Paid through PayPal — card or PayPal balance, no account needed for cards. We never see your card details. Orders are packed in small batches; you get tracking by email when yours goes out.
If someone sent you here, put their code in the box — it takes money off your order and credits them for the sale. Want a code of your own? It pays 10% of every sale it brings in, and your audience gets a discount with it — ask us and tell us where you post.
Ships worldwide from stock, free. Returns accepted within 14 days in original condition, and a 1-month warranty against manufacturing defects — see terms. Questions before ordering: get in touch.