01 Changelog
SofaNode firmware changelog.
What changed on the desk device itself. Firmware usually ships alongside an app release, so most entries name the app version it arrived with — the node updates itself over the air, or you can flash it from the browser. App, daemon and extension changes live in the app changelog.
Something wrong with your Node, or missing from it? Report it or ask for it — both forms open the SofaNode questions when you arrive from here.
Firmware 0.14.0Shipped with app 2.29.2 / daemon 2.30.0 · Aug 2026
The node answers questions
- QUESTION, not PERMISSION. When Claude asks something rather than asking permission, the card says so and a tap opens the options. Until now the node offered "swipe up = ALLOW", which agreed to the question with no answer in it.
- One question at a time, one row per option, ticked and sent from the glass. Questions that let you pick several keep a Send row; a swipe down still means you are not answering.
- There is no keyboard here, so a written "other" answer stays the phone's job — the node answers with the options it was given.
Firmware 0.13.0Shipped with app 2.28.3 / daemon 2.29.1 · Aug 2026
Four networks, and a way out
- Remembers up to four Wi-Fi networks, not one — the house, the hotspot, the studio. Joining a network from the menu, the phone portal, the QR or USB adds it to the list instead of replacing the only one; the most recent is tried first.
- Tries them in the order it can actually hear them, strongest first, twelve seconds each, and after two full passes with nothing joined it keeps retrying every thirty seconds in the background — the hotspot may come back.
- No network after a minute? The screen says so. WIFI · no known network instead of connecting forever, with the way out written under it.
- The WIFI screen is no longer a dead end: hold the screen for the phone setup portal, swipe left for the menu (scan, pick a network, type a password) — at any time, not only after the wait. A wrong password no longer strands the node either: the networks it already knew are still in the list.
- Updates on command. The computer can now tell the node to check and flash (sofacode node update); Menu → Update still works.
- A permission card for a question says QUESTION, not ASKUSERQUESTION — and a card you answered in VS Code clears with answered on PC, not expired.
- Away from home, every paired computer is reachable through any paired gateway, not only one. Each stored machine now carries its own gateway flag; the single global gateway is migrated onto the matching machine on first boot.
Firmware 0.12.1Shipped with app 2.28.2 / daemon 2.29.0 · Aug 2026
An unpaired node trusts nobody
- No more trusting whichever daemon answers first. A node with no paired machine used to accept any SofaCode daemon on the LAN once its ten-minute provisioning window closed — enough for a stranger's daemon to open the node's microphone or put approvals on its screen. Now a node with nothing stored opens no connection at all, and until a daemon has proved itself only the handshake messages are acted on; everything else is dropped. The PAIR screen says what to do instead: tap it for the pairing QR, or sofacode pair when a stored token was rotated.
- The two-minute screen hold stays two minutes across a watchdog reboot. The stall watchdog's restart forgot that the node had ever been linked, so the screen hold from 0.12.0 became open-ended. The fact now survives the restart (and only a restart — a power cycle starts cold), and the hold runs its bounded course.
- A stranger that can't identify itself is shut out for ten minutes instead of being allowed to force the PAIR screen again on the next scan.
- Pairing and discovery send the header daemon 2.29.0 asks for.
Firmware 0.12.0Shipped with app 2.28.1 / daemon 2.28.0 · Aug 2026
A computer without the mic bridge is still a whole node
- The node learns whether its computer can hear it. Daemon 2.28.0 tells every node, in the same capability object that already gates the touchpad, when that computer has no mic bridge — either the owner said no at install or the audio driver is missing. On such a machine the deck's hint drops tap: voice, and a tap says PC mic bridge off on the node instead of asking a daemon that would answer with a live ring and no audio. Everything else is untouched: chimes, spoken replies, sessions, approvals, chat, tasks, the touchpad and OTA never needed the computer's audio stack.
- A tap still silences a reply. Interrupting read-aloud never went through the mic, so that tap passes the new gate.
- The screen stays awake until the node is connected. Booting, joining Wi‑Fi and waiting for the daemon's handshake no longer count as idle: the backlight and the screensaver hold until the first authenticated link, and for two minutes after a link drops while it reconnects. Until now the screen could go dark mid‑connect and read as a hang.
- Voice rows only when the computer can speak. The daemon has sent available alongside its voice switch since 2.24; the node now keeps it and hides Voice and Voice vol on a machine with no synthesiser, the way the touchpad row hides when the pointer can't move.
Firmware 0.11.0Shipped with app 2.26.0 / daemon 2.24.0 · Aug 2026
The app's six themes, on the node
- Menu > Theme replaces Menu > Color. The same six the apps offer — Ember, Ice, Matrix, Plasma, Volt and Console — with the same colours, so a node and a phone set to Ice look like one product. Roll the dial to preview a theme live on the whole face; tap to keep it.
- It changes the whole palette, not just the ring. The old picker was nine accent swatches that recoloured the ring and left the rest of the face orange; a theme now drives the background, the text, the dimmed chrome and the ready/working/needs-you/error family together. Console is the app's amber-panel palette — colours only, since the round face already draws arcs and capitals for everything.
- Your node keeps the colour it had. A node set to one of the old nine swatches moves to the theme nearest it on the first boot after the update — Orange stays Ember, Cyan becomes Ice, Green becomes Matrix, Magenta becomes Plasma, Purple becomes Volt. Nothing else in its settings changes.
- The mic red is the one colour that never themes: it marks the one state where the node is streaming the room to a computer, so it stays a colour nothing else on the face can wear.
Firmware 0.10.0Shipped with app 2.20.3 / daemon 2.24.0 · Aug 2026
Silent, first in the menu
- A quick mute for this node. Menu > Silent is the first row: one tap and the node makes no sound — no chimes, no spoken replies, no volume blip — while the screen keeps doing everything it did: the ring, the chime flash, toasts, chat and sessions. A small crossed-speaker mark sits in the deck's status row while it is on. It survives a reboot and touches nothing else: the phones and any other node keep their sound, and it is not the daemon's Voice switch.
- The node tells the daemon it is silent, so nothing is streamed to a box that would drop it, and, when no node can hear, the replies it would have read are held as dots on SESSIONS instead of being counted as heard — turn Silent off and tap Play. Needs daemon 2.24 for the held dots; on an older daemon the node is simply quiet.
Firmware 0.9.0Shipped with app 2.20.3 / daemon 2.23.0 · Aug 2026
New session from the node
- Start a fresh session without touching the keyboard. Tap a session on the SESSIONS screen and pick "New session": a new Claude, Copilot or Codex session — whichever that row runs — opens in that row's window. The main menu has "New session" too, for the node's own assistant in the window the node is aimed at (the focused one when nothing is pinned), so it works when the list is empty.
- The node follows the new session as soon as it exists, and the result shows as a toast on the deck — "new session", or why not: the window isn't open, open a folder first, VS Code didn't answer. Needs daemon 2.23.
Firmware 0.8.1Firmware-only update · Aug 2026
The node plugged into the computer no longer freezes
- A node on USB could freeze — screen stuck, no reboot — until the cable was pulled. When a program on the computer opened the node's serial port and did not read from it (a serial monitor left attached, a port probe), the chip's own console write waited forever for a reader, on the core the stock watchdog never checked. That console traffic came from the Wi-Fi and network libraries logging exactly when a link hiccups. Those logs are off the console now, and the node has a real watchdog: anything that wedges it for a minute resets it, and it is back on your machine about 45 seconds later.
- The watchdog knows an over-the-air update is not a hang — a slow download feeds it as it goes.
Firmware 0.8.0Shipped with app 2.20.2 / daemon 2.21.0 · Aug 2026
Sessions by window, and an answer for every NEEDS YOU
- Sessions are grouped by window. The SESSIONS screen draws a header for each VS Code window (project), so a session's project is read off the list instead of guessed.
- Tap a session for its actions. Follow · Allow / Deny (when it needs you) · Mode (Claude: cycle) · Play reply. Hold still jumps straight to the session.
- NEEDS YOU on the deck has an answer. When a session wants you and no permission card is up — a question, an idle prompt, a window under bypass, a card you missed — swipe up allows and swipe down denies the followed session, and the arc says so. Needs daemon 2.21.
- Codex sessions appear on the node from daemon 2.21.
Firmware 0.7.7Shipped with app 2.20.0 · Aug 2026
Codex on the node
- OpenAI Codex is in the ASSISTANT picker. Menu → Provider now offers Claude, Copilot and Codex; the choice rides to the computer on the next connection and decides which assistant the node's buttons and voice drive. Needs SofaCode daemon 2.20.0 for Codex sessions to exist on the computer side.
Firmware 0.7.6Firmware-only update · Aug 2026
Two computers on one network, and a node that stops asking the wrong one
- A second computer running SofaCode can no longer take your node away. Every machine announces itself the same way, so if the one your node is paired with went quiet for a moment — a router blink is enough — the node would find the neighbour instead, be turned away, and immediately try it again. And again: measured at thirty-five attempts a minute, with nothing that would ever have stopped it, so the node stayed gone until its own computer came back. It now remembers a machine that turned it away and stops asking it for ten minutes, which leaves it free to keep watching for the one it actually belongs to. Pairing to that machine on purpose clears the memory straight away.
- A connection that dies quietly is noticed. Wi-Fi can leave a connection that looks open from this end while nothing is getting through. If nothing arrives for forty-five seconds — the computer speaks every ten — the node stops believing the connection and goes looking again.
- The screen no longer stutters on its way to sleep. The dim glow before the screen goes out was drawn at a fifth of the normal rate, which was visible every single time it faded. It now runs at half rate, which is not.
Firmware 0.7.5Firmware-only update · Aug 2026
It finds the right computer, and it never sits on SEARCH forever
- A second SofaCode computer on your network can no longer strand the node. Every machine running SofaCode announces itself the same way, so a node looking for the one it is paired with could dial a neighbour instead, fail the handshake and have to start over — and in the worst case it stayed on SEARCH while the computer it belongs to was awake the whole time. It now walks past a machine it is not paired with and keeps going.
- Reconnecting is quicker. A node with no remote access configured was still dialling an address that never existed, and waited for the name lookup to fail before trying anything real. That address is gone, so every reconnect starts with a computer that can actually answer.
- SEARCH is now a state it can leave on its own. If the node has Wi-Fi, is paired, and still has not reached its computer five minutes later, it restarts itself rather than waiting for you to notice. A node that has simply never been switched on to its computer is left alone — that is not a fault.
- It stopped writing to its own settings memory on every connection. Harmless day to day, but it was flash wear for nothing.
Firmware 0.7.4Shipped with app 2.19.6 · Aug 2026
The rim tells the truth again, and a dropped tap is gone for good
- The SofaNode's rim looks alive while it talks. Brightness had been pinned flat since colour landed, so only the bar length and hue moved — on ordinary speech that was barely visible. Length, hue and brightness now move together.
- Turning the rim to switch sessions no longer overshoots. One flick used to blow straight past three or four sessions on a six-item ring; picking one now takes a deliberate turn, and scrolling through the list is exactly as light as before.
- A dark screen stays dark. The node could relight itself the instant it started speaking, even when it should have stayed off in your pocket — only a genuine wake event turns the screen on now.
- Menu and sessions traded sides. Swipe LEFT opens the menu, swipe RIGHT opens sessions — one consistent direction on the node, the phone's Node mode and the watch.
- A tap on the SofaNode touchpad could be dropped for good on Linux desktops that accept but silently ignore synthetic clicks (wlroots-class Wayland compositors) — the pointer would move but a tap would never land as a click, indefinitely. Fixed daemon-side.
- Android's rim dial and the Apple Watch crown can roll backward through sessions and paired servers, not just forward, and Android gained a real Off for node speech instead of only ever being able to turn it on.
Firmware 0.7.3Shipped with app 2.19.5 · Aug 2026
Voice on Windows, the deck away from home, and a screen that stays on while you use it
- The SofaNode can drive your mouse. Switch on Touchpad in the node's menu and the screen becomes a trackpad for the computer it is paired with — drag to move, tap to click, hold for a right click, and turn the rim to scroll. It works on Wayland and X11 on Linux, on macOS and on Windows; the row only appears when the computer can actually move a pointer, so it is never a control that does nothing.
- Screensavers. After five idle minutes with nothing running, the node can fall into falling code, a slow psychedelic plasma, or a turning Metatron's Cube. Style and timing are yours, and any touch brings the deck straight back. On battery the screen still sleeps first — the screensaver is for a node that sits lit on the charger.
- The node shows what your session limits are doing. A ring counts down to the next reset, with bars for the weekly limits underneath, read from the real figures rather than a guess.
- The SofaNode lasts far longer on battery. The radio now drops to modem-sleep whenever nothing is being spoken or dictated — it had been pinned fully awake at all times — the amplifier switches off during dictation instead of staying powered for the whole session, and the screen sleeps after a minute on battery while staying always-on whenever it's plugged in. Two states that used to spin the processor flat out while simply waiting for Wi-Fi now wait properly.
- The SofaNode's side button is now simply wake and lock. Press it to put the screen out, press it again to bring it back, each with a CRT-style animation. It used to double as a second tap surface — waking the screen on one press and toggling dictation on the next — so what it did depended on a state you could not see. The touchscreen is the control surface; holding the button still powers the node down.
- The SofaNode screen no longer switches off while you are using it. Touching the screen was what turned it off: the idle timer was read a fraction of a second before your touch was recorded, so the node concluded it had been sitting untouched for seven weeks and went dark on the spot.
- Tapping the notification count opens the session it points at. The bar sits close enough to the rim that an ordinary thumb tap could be read as a turn of the dial and scrub through sessions instead, and a slow press on it submitted the prompt. A press that stays put now belongs to the bar, however long you hold it.
- The node's settings menu shows what each setting is set to. "Charge lit", "Wake tap" and "Auto update" flipped silently behind a toast that vanished, so there was no way to tell whether stay-lit-on-the-charger was on. Each row now carries its current value, and toggling one keeps the menu open.
- Swiping around the chat no longer opens TASKS by accident. A quick sideways flick counted as a swipe up, so reading a transcript kept getting interrupted. A swipe now has to actually go up — the same rule the SofaNode uses.
Firmware 0.6.5Shipped with app 2.19.3 · Aug 2026
Answer it on the computer and everything else stops asking
- Clicking into a session on your computer clears its notification everywhere. The Node stops saying NEEDS YOU, the phone's banner goes away, and any reply that session was holding for you is dropped — you're reading it on screen. Nothing about the session changes: it still shows as waiting in the sessions list, because it still is. Move between the Node, your phone and your desk without dismissing the same thing three times.
- One notification rectangle above SOFANODE on the deck, replacing the corner badge and the edge pip. It counts sessions blocked on you and sessions holding a reply you haven't heard — amber while something is blocked, ember when all that's left is audio. Tap it to jump to the next one and watch the count fall; once you've seen them all, the next tap opens the SESSIONS list. Viewing that list by any route clears the count.
- The Node's SESSIONS screen is a real picker now: every session that's actually doing something always appears, plus your recent ones — up to five per window, nothing older than a day — so you can jump back into a session that has been quiet for an hour without hunting for it.
- Firmware 0.6.5 and a lockstep daemon, extension and app bump.
Firmware 0.6.4Shipped with app 2.19.2 · Aug 2026
The Node stops reading one session and forgetting the rest
- Picking a session on the Node's SESSIONS screen now actually follows that session. It used to aim at the session's window, and several sessions can share one VS Code window — a repo and a subfolder of it are two working directories behind one open folder — so the tap landed on whichever of them had written to disk last. With three agents running in one window, that was the whole "it only ever reads one of them" problem.
- The Node also stops drifting between sessions on its own. Sibling sessions in one window are ordered by a whole-second timestamp, re-read every three seconds, so the one being followed used to flip at random — which clears the dial and swallows the very reply that caused the flip, because a transcript re-read from the top is history, and history is never read aloud.
- Firmware 0.6.3/0.6.4: the WORKING ring's comet stops drawing sky blue, the rim dial can finally roll past the end to the next paired machine (the message it needed was never being sent), a permission card no longer survives a dropped link — it used to sit at "0s left" eating every gesture and holding the screen awake until the battery died — and rim turns made while offline no longer replay as a burst on reconnect.
- Every SofaNode now includes 6 months of SofaCode free — a 6-month subscription code for Google Play or the App Store arrives with the order confirmation.
Firmware 0.6.2Shipped with app 2.19.1 · Aug 2026
The SofaNode's battery tells the truth now
- The charge bolt stayed lit when the Node was off the charger. The charge-status pin was being read with the wrong polarity and with an internal pull-up the board fights, so "no charger" read as "charging" — and with stay-lit-while-charging on, the screen never slept, which slowed the actual charge as well.
- Battery and charge state are sampled independently of the link to your computer, so a Node that goes offline no longer freezes its gauge at whatever was last true.
- A connected Node reports battery, charging and the raw sensor values behind them to GET /status — enough to tell a bad reading from a bad wire without a serial cable.
Firmware 0.6.0Shipped with app 2.17.0 · Aug 2026
The SofaNode sets itself up — and keeps itself current
- Node setup is now: set up the app, then Settings → Set up a SofaNode. A freshly flashed Node shows a QR the moment it joins Wi-Fi — scan it, and every machine the app knows, LAN addresses and remote/WAN domains alike, gets pushed to the Node at once, each with its own freshly issued, independently revocable token. No node-side setup screens, nothing to type.
- The old node-side 8-digit flow isn't gone — it's Pair by code in the Node's menu now, for whenever a camera isn't handy.
- SofaNode OTA: firmware checks for updates at boot, offers Check update from the menu on demand, and flashes itself over the air — sha256 and size verified before anything touches flash, and it only ever moves to a strictly newer build. Auto-update is on by default; toggle it off if you'd rather do it by hand.
FirmwareShipped with app 2.16.1–2 · Aug 2026
The task list, on every face
- The agent's live task checklist gets a dedicated full-screen view: fling up in the chat (on the node: swipe up again) and watch tasks tick off in real time — running task bold, done struck through. Phone, watch node mode, and the SofaNode all have it.
FirmwareShipped with app 2.15.x · Aug 2026
The SofaNode era — and remote access
- SofaNode grows into a peer of the app: spoken replies (pick the voice), chat and approvals on the dial, pairing to new machines by dialing the 8-digit code — no cable — up to six machines, Wi-Fi onboarding, and a browser web flasher that updates firmware, sets up Wi-Fi and timezone from Chrome.
- Node mode lands on Android: the stripped-down circular node deck for watches and small screens, auto-on for watch-class displays. The Apple Watch node deck is written and inbound.