The hardware

SofaNode. Your agent, on the desk.

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. This one is built to move around with you — pocket, bag, kitchen counter, the sofa. A desktop model that stays put on the desk is coming in the near future.

It is an accessory, not the product. SofaCode is the app and the desktop daemon, and any Android 8.0-and-up phone or iPhone drives the same sessions — an old handset out of a drawer included. The Node runs the same node mode as those, in something you can leave on the desk.

Shipping now $99 · FREE SHIPPING · 3 MONTHS OF SOFACODE INCLUDED
Ready · talk · working · approve · needs you — the firmware's own screen

What it is

The deck, made physical.

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. Renders for now: the reference hardware the Node is built on, with the firmware's own screen output on the glass — every pixel below is what the device draws. Photos of production units are being shot and will replace these.

On the screen — every face it has, and what each one is for

The deck WORKING: breathing amber ring with an orbiting comet

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.

The deck LIVE: the rim lit as a microphone waveform while you dictate

Tap. Talk. Hold. Sent.

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.

The deck SPEAKING: the reply being read out, tap to interrupt

Replies out loud

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 card: Bash, npm test -- --coverage, 47 seconds left, swipe up to allow

Approve with a swipe

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.

The chat transcript on the circle, user turns in orange

Chat on a circle

Swipe up for the live transcript — your turns in orange, the agent's in white — and scroll it by running a finger around the rim, the way you would turn a dial.

The task checklist: two done, one running, three to go

Tasks that tick off

Swipe again for the session's task list — the running task pulses and reads brightest, finished ones tick off and dim.

The sessions list with state dots and an unheard-reply pip

Six machines, one rim

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 machines, each with its own credentials.

The pairing screen: a scannable QR, the address and the 16-character code

Paired in a minute

Pairing is a QR on the glass with the address and a 16-character code under it — scan from the SofaCode app, or tap Enter code instead in the app and type the address and code. Every machine you have already paired lands on the device at once.

The deck at rest: READY, the clock, the followed session and machine

At rest, a clock

Nothing happening? It is a quiet desk clock that names the session and machine it is following — and sleeps to a microamp standby from the menu.

Why it is different

One device. More than one agent.

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 your editor: VS Code, and its forks in beta. 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 per-token bill.

Shipping

Claude Code

Full support today: live transcript, permission prompts on the dial, session switching, task lists, spoken replies.

Shipping

GitHub Copilot Chat

Full support today, including the model picker — the Node can drive whichever model your Copilot subscription offers.

Shipping

Local models — your GPU

Run Llama, Qwen, DeepSeek, Mistral, Gemma or anything else in LM Studio or Ollama and drive it from the Node, through Local LLM (beta), built into the SofaCode extension. No API key, no token bill, no data leaving the building.

Shipping

OpenAI Codex

Full support today: the Codex CLI and the Codex VS Code extension — sessions, live state, one-tap approvals, permission modes, usage and the model picker, on the same deck.

By design

Whatever is next

New agents arrive as editor extensions now. Because the Node talks to the editor, adding one is a daemon update — not new hardware.

 SofaNodeSingle-vendor desk gadgets
Agents supported Claude Code + Copilot Chat + OpenAI Codex + local models One, whichever the vendor sells
Runs models on your own hardware Yes — LM Studio, Ollama or any OpenAI-compatible server, built into the extension (beta) 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
Your code stays on your LAN Yes — the daemon is on your machine, nothing routes through us No
If you switch agents Same device, keeps working New device
Extra subscription for the hardware None — the Node never needs one Often a second subscription on top

The SofaNode works forever without a subscription. Everything the device does — the live deck, voice, spoken replies, approvals, session switching — is included in the unit, and the daemon on your computer never asks it for a plan. The 3 months of SofaCode in the box are for the phone and watch apps, which are the subscription product; after that the Node keeps working on its own whether or not you subscribe. No account on our servers either — pairing is between your device and your machine.

Everything it does

The full list.

Push-to-talk dictation

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.

Spoken replies, interruptible

Replies read aloud in a voice you choose. A tap stops it dead. Hold on the chat screen to turn read-aloud on or off — it is the same voice switch as the menu's Voice row, for every session.

Permission cards

Every tool approval your agent asks for can be answered on the Node — allow, deny, with the command visible. Answered once, everywhere.

Live transcript

The conversation, on the dial. Tap to jump to newest, hold to toggle reading aloud, run a finger around the rim to scroll back.

Task checklist

Watch the agent's plan tick off in real time — the running task reads brightest with a pulsing dot, finished ones dim. Swipe up twice from the deck.

Session switching

Swipe right for the machine's sessions, grouped by VS Code window — up to twenty-four in the list, five on screen as you turn the rim. 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. Menu > Machines lists everything you have paired; tap one to switch the Node to it.

Nothing gets missed while you listen to something else

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 right to the sessions list. Tap the row and pick Play reply; once you have heard it the same row offers Clear reply. A hold still switches to that session. Turn the voice off and the dots go with it — they're an offer to play something. Held replies in the menu sets how many of a session's last replies the Node keeps to play back — one to three.

Follow-focus

Whichever VS Code window has your keyboard is the one the Node shows. Alt-tab and the device follows you. Pick a session on the Node, on a phone, or on any other paired device, and the switch carries everyone — every app and the Node land on it together. Take the keyboard again at the desk and that switch does the same.

The glass is also a trackpad

Switch Touchpad on in the Node's menu and the dial drives the mouse pointer on the machine you are paired to: drag to move, tap to click, hold for a right-click, turn the rim to scroll. Pull down from the top edge to come back. The row only appears when your machine reports that it can move a pointer — the daemon answers that itself, so you are never handed a control that does nothing.

QR pairing, no cable

Once it is on Wi-Fi with nothing paired, the Node 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? Use Menu > Pair by code: the Node finds the machine, the computer shows an 8-digit code, and you dial it on the Node.

Wi-Fi without a computer

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.

Works away from home

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.

Updates itself

The first flash is required and done from your browser — Chrome and the USB-C cable, signed in with the credentials from your order. After that it updates itself over the air: firmware checks at boot and the menu's Update row checks on demand; Auto update and Update check set whether and how often it installs by itself. Updates never wipe your pairing, and the flasher stays available for a manual re-flash.

Chimes that mean something

Distinct chimes for connect, done, needs you, error, mic on/off, send and approve — done and needs-you play softer for sessions you are not following. One volume for chimes, another for the voice — either can be muted from the menu. Menu > Silent, the first row, mutes the node — chimes and voice — until you switch it off; when no node can hear, the daemon keeps the replies it would have read as dots. It is a desk object, not an alarm clock.

Themes that match

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.

Real power management

Always-on while it's plugged in; on battery the screen sleeps after a minute, and the radio drops to modem-sleep whenever nothing is speaking. Press the side button to wake or lock it, or turn on wake-on-tap in the menu — and every timing is yours to change. Hold the button to power down to microamp standby. Battery percent and charge state on the deck.

Your own models, your own GPU

Turn on Local LLM (beta) in the SofaCode extension, point it at LM Studio, Ollama or any OpenAI-compatible server, 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.

Every session answered from the list

Tap a session row for its actions: follow it, allow or deny what it is waiting on, cycle its permission mode on Claude (the others set it from the phone), start a new session in that window, or play and clear a held reply. Swipe left for the menu: its New session row starts a fresh agent session in the focused VS Code window instead.

Screensavers

Idle for a few minutes and a screensaver takes over — Night rain by default, the app's other six in the menu, or off — any touch brings the screen back. It only runs while nothing is working or waiting on you.

Nothing routed through us

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.

Specifications

What is inside.

ProcessorESP32-S3, dual-core Xtensa LX7 @ 240 MHz
Memory16 MB flash · 8 MB octal PSRAM
Display240 × 240 round IPS LCD, GC9A01
TouchCapacitive, CST816 — taps, holds, four-way swipes, and the rim doubles as a dial: run a finger around it to scroll and scrub
ButtonsTwo, either side of the USB-C port — no moving bezel, nothing to rotate
AudioES8311 codec, microphone + speaker, full duplex
WirelessWi-Fi 802.11 b/g/n, 2.4 GHz
PowerUSB-C · internal LiPo · microamp deep-sleep standby
SecurityMutual-HMAC challenge-response on every link; per-device revocable tokens; pinned certificate for remote
UpdatesOver-the-air from the device menu, plus a Chrome-based web flasher
Works withClaude Code · GitHub Copilot Chat · local models via Local LLM (LM Studio · Ollama · OpenAI-compatible, beta) · OpenAI Codex
RequiresVS Code on Windows, macOS or Linux with the SofaCode extension + daemon. No subscription — the Node works forever without one
FirmwareOpen update channel — every unit gets every release
Warranty1 month against manufacturing defects

Setting it up

Powered on to paired, in about four minutes.

1 · Set up the machine side

Install the SofaCode extension in VS Code and run the daemon installer. One command; it is the same setup the phone app uses.

The Node's Wi-Fi setup screen: join its hotspot, it shows the network it is on

2 · Flash it from your browser

The Node ships with no firmware on it. Open the web flasher in Chrome, sign in with the username and password from your order, plug the Node in over USB-C and flash — no toolchain. The same step sets your Wi-Fi and timezone, so it comes up on the network ready to pair. After this first flash, it updates itself over the air.

The pairing screen: a scannable QR, the address and the 16-character code

3 · Scan the QR

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.

The deck LIVE, the rim lit as a waveform while you talk

4 · Start talking

Tap the screen and speak. That is the whole loop — dictate, hold to submit, listen to the reply, swipe the dial to approve a permission, and tap it to answer a question.

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, and the Guides walk the browser flash through step by step.

If something is off

Tell us. It is a small team and we read all of it.

The Node is hardware, so "it does not work" can mean a firmware bug, a dead pixel, or a network that will not let it through. Each of these asks the questions that tell them apart.

SofaCode and the Node are in active development, and most of what ships comes straight from what owners tell us. If something is not the way you expected it to be, tell us before you write it off in a review — send a report or open the chat bubble in the corner of this page. A person reads every one, we typically reply the same hour (the same day at the latest, in nearly every case), and most adjustments and requests are built, tested and shipped within days — then delivered to the Node over the air. Your input changes the product faster than a star rating ever could.

Something is broken

Which part, how it was powered, what the face was showing, and what the computer's sofacode status says — the whole node picture in about ten seconds. A phone photo of the screen counts as a screenshot.

Report a SofaNode bug

Something is missing

A gesture, a screen, a setting, a shape of hardware. The Node's firmware ships small releases constantly and the roadmap is mostly what owners asked for — including the hardware itself.

Request a SofaNode feature

Check it is not already done

The firmware moves faster than this page does, and the Node updates itself over the air. The changelog names every release and what it changed — including the reports it closed.

Firmware changelog

Get one

SofaNode — $99, shipped free.

$99

FREE SHIPPING WORLDWIDE · 14-DAY RETURNS

Includes 3 months of SofaCode free for the phone and watch apps — a 3-month subscription code ($15 value) arrives with your order confirmation, for Google Play or the App Store, your pick. One code per Node.

The Node itself never needs a subscription — it works forever on its own. The apps run on a SofaCode plan, $5/mo or $50/yr after your free months, one week free either way. See plans

In stock

SofaNode × 1$99.00
ShippingFree
Total$99.00
YOUR FREE 3 MONTHS GO TO

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.

In the box

  • ✓SofaNode, assembled and tested — you flash it in about a minute from your browser
  • ✓USB-C cable
  • ✓Quick-start card — pairing in four steps
  • ✓Firmware updates for the life of the device, over the air
  • ✓1-month warranty against manufacturing defects

Print your own stand

The Node sits flat, but it looks better tilted at you. There is a desk stand for it on Thingiverse — free to download and print. You do not need it to use the Node, and you do not need one from us.

Before you buy

  • ›The Node needs no subscription — it works forever on its own. The phone and watch apps are the subscription product: $5/month or $50/year after a one-week free trial, and the 3 months in the box cover the start of it.
  • ›You need VS Code on a machine you control, with the SofaCode extension and daemon (both free).
  • ›You need Claude Code, GitHub Copilot Chat or OpenAI Codex — the Node drives your agent, it does not include one.
  • ›2.4 GHz Wi-Fi. The Node is an ESP32 and does not join 5 GHz-only networks.

Are you an ambassador?

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 — or do you review hardware or make developer content and want a unit at reduced pricing or app access codes? It pays 10% of every sale it brings in, and your audience gets a discount with it — apply here 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.