ccdeck

What's new in ccdeck

What each ccdeck release changed that you would notice, newest first, in the words of its own release notes. Releases with nothing to show, and every release's full list of changes, are on GitHub.

  1. ccdeck 3.50.0

    Release on GitHub

    • Paired decks no longer each read a shared account's usage

      No more rate limits from every machine reading it: one deck reads the account and passes the numbers to the others. Hover the reading's age to see which deck read it.

  2. ccdeck 3.49.0

    Release on GitHub

    • What's new is shorter and easier to scan

      Up to three main changes come first and the rest wait under Show details; Check for updates moved to the dialog's More options menu.

    • No warning when one account is in use on several decks

      The account row and the desktop no longer flag it, and the Login active on another deck switch is gone from Settings › Notifications; expired logins are still shown.

    • Auto-hidden sessions come back where they were

      With Hide finished sessions after on, a session that works again returns to its place, with its new subagents beside it rather than further down the board.

    • Windows: About flags an outdated terminal CLI

      When the npm ccdeck on PATH is older than the desktop app, Settings › About shows the command that updates it.

    • Texts that fell behind are up to date

      Explore integrations says Jira can move issues, and the Radar and Where the time went tips match what the app does.

  3. ccdeck 3.48.0

    Release on GitHub

    • Jira: move issues between sprints and the backlog

      On a Scrum board ordered by Rank, drag issues or use Move to reorder them or send them to another sprint or the backlog, one at a time or up to 50 together. Browsing still only reads.

    • The Jira list is easier to scan

      Titles keep more room, a row's preview no longer covers the next row, the issue key shows once in the detail, and Clear filters stays in reach on a phone.

    • ccdeck tui keeps your Claude accounts on one screen over SSH

      Switch accounts, turn Auto-switch on or off, and sign an account in with a link you open in any browser, all from the terminal.

    • Machine shows NVIDIA GPU readings

      On Linux and Windows with nvidia-smi: each GPU's utilization, video memory, temperature and power.

    • Claude accounts are quieter, and an expired login has a Sign in button

      Telemetry is a small shield explained on hover or focus, and an account whose login expired shows Sign in on its own row.

    • Fewer page errors from browser extensions and translation

      The Accounts panel recovers when an extension breaks its requests, and Local network keeps working while the browser translates the page.

  4. ccdeck 3.47.0

    Release on GitHub

    • Quick open: Cmd/Ctrl+K reaches any panel, setting, session or theme by name

      Type a few letters to open a panel, land on a setting inside Settings, jump to a session or switch the theme. It is also Search on the bar.

    • Settings › Claude Code changes Claude Code's own settings from the deck

      Twelve settings in five groups, from auto memory and compaction to the Co-Authored-By credit and the update channel, written to your settings.json on this computer.

    • Radar monitors all the time, and packet capture is one explained step

      There is no Start or Stop any more: Radar finds Claude Code's collector by itself. Where capture needs a permission, Allow packet capture once asks for it on your press only.

    • Tool activity shows where the time went, and Skill activity who starts your skills

      Tool activity splits the turns' time between Claude, this machine and you. Skill activity shows how many skill uses Claude, Codex or you started, overall and per skill.

    • Usage remembers how full each quota week ended, and names your Claude plan

      Under each 7-day bar a line says how full the last weeks were at their reset. The Claude quota card shows your plan beside its title, as the Codex card does.

    • Stripes, dialogs and floating panels are organized more evenly

      The doors on both edge stripes sit in named groups, dialogs share one frame, and T switches the theme inside any dialog too.

    • The desktop app works on a first run without Node, and integrations got fixes

      Usage no longer needs npm, and Claude Code installed while the app is open is picked up. Jira and GitLab avatars load, and panels reopen where you left them.

  5. ccdeck 3.46.0

    Release on GitHub

    • Jira, GitHub and GitLab panels are easier to read and navigate

      Jira rows show each issue's status, lists answer the arrow keys and fit a phone, and a failed refresh says “Not updated”.

    • Radar finds more Claude Code processes on Linux

      It now sees Claude Code started from its versioned install folder, plus connection attempts that got no reply and the telemetry variables it was launched with.

    • Follow plans at any zoom

      See plan progress on session notes and directly on the canvas.

    • Keep your Claude account in sync

      After /login, Accounts, Switch, Auto-switch and Usage follow your active Claude Code account.

    • Account capacity and the Reset calendar have their own buttons

      Both open from the left stripe, under Claude accounts, instead of from the small gauge in the accounts panel's header.

    • See which skills your agents use

      Review skill activity from the right sidebar, including typed slash commands.

    • Load history keeps the reading you click

      Click a minute on a chart to keep its reading. Saved limit resets now show their expiry time, and Tool activity has a clearer icon.

  6. ccdeck 3.45.0

    Release on GitHub

    • Read-only Jira, GitHub and GitLab panels beside your agents

      Settings › Integrations connects Jira (Cloud, Server or Data Center), GitHub, and GitLab.com or your own GitLab, each with a token, and a control on the left stripe opens its panel: a Jira board's backlog in Jira's own order, or a project's branches, pull or merge requests, pipelines and issues, with the item beside the list. The panels only read: they never comment, merge, re-run a job or change an issue. The token stays on this machine, in a file only you can read, and goes only to that connection's own API. Nothing is read until you connect a tracker, and then only while its panel is open.

    • Each account says what its organization's telemetry sends

      A Team or Enterprise organization can turn on Claude Code's telemetry for every member, and Claude Code applies it without asking. Each account of such an organization now carries a line under its name: “Telemetry · usage data”, or “Telemetry · prompts, tool details” in the warning colour when your prompts and tool details are sent too. Its tooltip names the organization and where the data goes. After a switch, Auto-switch's notification and the row's “Now active” note say it too. The deck changes nothing; it learns what the organization turns on from a Claude Code session run on one of its accounts, and until then that account shows no line.

    • A warning when a paired deck is on the same Claude login

      A Claude login renews once, so when two machines use one copied login, the one that renews second is signed out. When a paired deck on Local network says it is on the login this deck is using, the live account's row now says “Also active on” and names that deck, with what to do: use a different account on one of the machines, or sign in on each one separately. A switch onto such a login says so too, and so does one desktop notification per incident, “Login active on another deck” in Settings › Notifications, which is on by default.

    • A phone opens one panel at most when the deck loads

      On a window 640 px wide or less, a reload used to open Accounts, Usage and the machine panel on top of each other, with none of the board in sight. It now opens at most one of them, preferring Usage over the machine panel, and Accounts and the session list open from the dock. A wider window loads exactly as before, and nothing you chose is forgotten.

  7. ccdeck 3.44.0

    Release on GitHub

    • A turn that stops on an error now shows as stopped

      When Claude Code ends a turn on an API error, such as an expired login or a usage limit, it sends StopFailure instead of Stop. The deck now adds StopFailure to the hooks it writes in Claude Code's settings.json, but only when every Claude Code it finds is 2.1.78 or newer; with an older one, or one whose version it cannot read, nothing changes. The card then says “Stopped · login expired”, “Stopped · usage limit” or “Stopped · API error”, and the sessions one expired login stops together arrive as one notification that names them. Each needs a “continue” once a working login is active.

    • Auto-switch leaves an expired login, and nothing switches onto one

      When Claude Code has signed a login out and claude-swap's saved copy is dead too, Auto-switch now moves to another account under your home and weekly-reset rules, and its notification says why. Neither Auto-switch nor Switch moves onto a login that is already known to be expired: that account's row says its login expired, with Sign in again, and nothing moves.

    • Usage totals say how complete they are

      The usage headline is always shown now, by the rule History and the model table already used: an exact total when every cost is known, a known $0 included; the known part with “+” when some tokens could not be priced; and “not priced”, never a bare $0, when no cost is known. Sessions whose cost is a known zero show it too.

    • Radar: a resizable inspector, prompt previews and a JSON view

      Radar's inspector can be resized and shows prompt previews, highlights and each record as a JSON tree, beside the File view. Settings › Radar has a new Monitor automatically switch. It is off, so Radar still watches only after you press Start, as before; turn it on to have the deck start monitoring by itself.

    • Tool activity opens over the deck, with the first tool's details open

      Tool activity now opens as a dialog over the deck instead of a page of its own, with the first tool selected and its details beside the list. Escape closes the details first, then the dialog. On a phone the details open as a sheet.

    • Tool activity counts skills, and the slash commands you type if you opt in

      Tool activity's Skills tab ranks the skills your Claude Code and Codex agents used. Counting the slash commands you type needs Claude Code's UserPromptExpansion hook, which the deck adds to settings.json only when you start it with AGENTS_DECK_SKILL_HOOK=1 and every Claude Code it finds is 2.1.116 or newer. Without that variable nothing in settings.json changes.

    • Continue a background session that stopped

      A background session that stopped on an error has a Continue button on its card and panel: the deck stops it if Claude Code still lists it, then resumes it in its own folder with “Continue from where you left off.” Continue stopped background sessions, in Settings › General, presses it for you once per stop. It is off until you turn it on.

    • ccdeck commands for your terminal

      ccdeck accounts, ccdeck switch, ccdeck usage, ccdeck sessions and ccdeck open work from any terminal. ccdeck switch --best goes where Auto-switch would, and every switch follows the deck's own rules. Over SSH, ccdeck open prints the line that opens the deck on your own computer. Each command takes --json for scripts.

  8. ccdeck 3.43.4

    Release on GitHub

    • Local network no longer sends the login a deck is signed in to

      Two machines on one Claude login race to renew it, and the one that renews second is signed out with “Login expired”. So paired decks no longer receive the login a deck is signed in to right now. Every other login you tick is shared as before, and this one goes out once the deck switches to another account.

      Update every paired deck: an older deck still sends the login it is using, and the decks paired with it still take it. To send it anyway, as before, turn on Send the login this deck is using too in the Local network dialog. Not covered yet: a paired deck that already holds a copy of that login, from before this deck switched to it, can still renew it first and sign this deck out. Auto-switch can also still move a deck onto a login another paired deck is using, if the deck already holds a copy of it.

  9. ccdeck 3.43.0

    Release on GitHub

    • Auto-switch can come back to a home account

      Choose Set as home in an account’s ⋯ menu. With Auto-switch on, Next account › Soonest weekly reset uses up quota that resets within 4 days first.

    • Sessions already running appear when ccdeck starts

      Busy Codex sessions, and Claude ones on macOS and Linux, show up again after a restart. Restore unfinished sessions, in Settings › General, turns it off.

    • Settings, reorganized and searchable

      Search every setting from the top of the list. Keyboard, Data and About have sections of their own.

    • Plan progress and reasoning effort on agent cards

      Cards show how far an agent is through its plan, and the effort beside the model. Finished sessions can hide themselves after a delay you choose.

    • Calmer desktop updates, marked shared accounts, Codex sub-agents kept together

      The desktop app installs an update only when no agent is working or waiting. Accounts shared on Local network are marked.

  10. ccdeck 3.42.0

    Release on GitHub

    • Text size and density, in Settings

      Five text sizes and five spacing levels, under Settings › Text & density.

    • Tool activity: which tools your agents use, how long they take and what fails

      A new page on the stripe on the right. Its history is kept on this device only.

    • Gruvbox Dark, Light and Material themes

      Pick one in Settings › General. Switching themes now fades instead of snapping.

    • A session-list drawer on phones, whole dates in usage history, the waiting session in the minimap

      Smaller fixes for the phone layout, the usage history chart and the canvas minimap.

  11. ccdeck 3.41.1

    Release on GitHub

    • More reliable Windows updates

      Restart to update stops the app’s background server before installation begins.

    • More accurate account capacity

      Elapsed resets and older readings no longer imply newly available quota. Account refreshes keep the latest valid readings.

    • Better layouts on portrait displays

      Sessions fill the right columns, and the canvas starts near the top. Usage history controls stay reachable in narrow windows.

    • Clearer load history and consistent icons

      Load history includes the current core-capacity multiplier below the charts. Refresh and external-link icons look consistent across system fonts.

  12. ccdeck 3.41.0

    Release on GitHub

    • Plan account resets

      See the next seven days of resets, account capacity and which readings need refreshing.

    • Follow quota history

      Inspect recorded Claude and Codex quota readings to see how remaining capacity changes over time.

    • See cached input reuse

      Session usage details now show the percentage of measured input reused from cache.

    • A more polished Radio Explorer

      Find radio stations with compact search and filters, explore workspace streams separately, and save favorites from either source. Playback and keyboard navigation are more reliable.

    • Radio flags on Windows

      Country flags now display correctly in the radio station list on Windows.

    • Clearer Telemetry Radar controls

      Change individual telemetry flags and use a simpler Monitor view.

  13. ccdeck 3.40.2

    Release on GitHub

    • Music is in Radio now, not in Settings

      Settings no longer has a Music section. Claude FM, Lofi Girl and the streams you added are under Workspace streams in Radio, on the right sidebar, and Radio’s player has the volume and mute. Your station, volume and streams are kept. Adding, renaming or removing a stream link is no longer offered.

  14. ccdeck 3.40.0

    Release on GitHub

    • Explore radio around the world

      Open Radio from the right sidebar to discover stations on a world map, filter by country, sound or language, and save your favorites. Recent listening, a daily pick and Surprise me make it easier to find something to play. Music keeps playing when you close the explorer. Volume now adjusts in 1% steps, and an unavailable stream automatically advances to the next station after one second.

    • Choose your canvas companion

      Choose Deck companion, Fox or Penguin in Settings › General. Your companion shares the existing canvas movements and music controls, and your choice stays saved.

    • See what each session used

      Open a session’s usage details to inspect tokens, models and estimated cost. For Codex, compare Automatic, Standard, Fast and Flex pricing estimates without changing your Codex settings or billing.

    • A clearer canvas

      Session cards, tool traces and connections are easier to scan. The canvas reframes more reliably when resizing to portrait or rearranging sessions, and model cost estimates use updated pricing.

  15. ccdeck 3.39.3

    Release on GitHub

    • A cleaner desktop window

      The desktop app now has one compact toolbar that follows your theme, with native window controls and an application menu. Wider side rails give icons more room; the Local network footer and unread badges are more compact.

    • Clearer account usage and Telemetry Radar

      Account usage shows reset times together with capacity. Telemetry Radar has a clearer monitoring workspace and keeps history for up to 24 hours. Radar remains Beta.

    • Telemetry Radar on Linux and Windows, with no Terminal step

      Radar now works on macOS, Linux and Windows. Press Start monitoring and ccdeck runs the capture itself, with no command to paste into Terminal, and keeps listening until you stop it. Capture needs a one-time setup for your user: Wireshark’s ChmodBPF helper on macOS, tcpdump with capture permission on Linux, or Wireshark with Npcap on Windows. Radar says what is missing, and once permission is granted it starts listening by itself.

  16. ccdeck 3.39.1

    Release on GitHub

    • More themes, with clearer contrast

      Choose Omarchy, Matrix, Black Contrast, White Contrast or Catppuccin Mocha in Settings › General. Fresh installations start with Rider Black; your saved theme choice is preserved.

    • A little more room on the canvas

      The minimap is smaller, leaving more room for the character and your sessions. Undo and Resume now sit beside each other at the bottom of the canvas. Telemetry Radar is marked Beta while it is being tested and improved.

  17. ccdeck 3.39.0

    Release on GitHub

    • Inspect Claude Code telemetry on macOS

      Telemetry Radar shows Claude Code's configured telemetry and can inspect traffic at destinations you choose. When settings are absent, it can show observed connections separately; a connection alone does not prove telemetry or reveal message contents. Captured telemetry can contain prompt or response content, and other apps sending to the same destination may appear too. Captured messages stay in ccdeck's memory, and no capture file is written.

    • Open panels from the edges

      Open the session list, Claude accounts, Usage, This machine, Usage history and Browser Watch from the window edges. You can keep several panels open beside the canvas; on a phone, the same controls sit in a bottom dock.

    • More control while you work

      Turn off single-key shortcuts if typed letters should not control the deck, see each stage while adding a Claude account, and undo a recent rearrangement. The topbar also names the Claude Code session waiting on you.

    • Two new dark themes

      Choose Rider Black or VS Code Black in Settings › General. Both add a darker canvas with flatter panels and distinct focus accents; your existing Light or Dark choice stays as it was.

  18. ccdeck 3.38.5

    Release on GitHub

    • Settings are in one place now

      The theme, the sounds, notifications and the minimap character are all in Settings, behind the gear at the right of the topbar, or Cmd+, (Ctrl+, on Windows and Linux). V opens it at Sounds, with each tone's volume and sound, and M turns sounds off or on from anywhere. Nothing you had set has changed, it has only moved, and T still switches the theme. The auto-switch threshold also takes a custom value now: pick Custom… and type a whole percent from 50 to 99.

    • Windows: no more temperature stuck at 28 °C

      On many Windows laptops the only temperature Windows offers is a thermal zone wired to nothing, which reads a fixed 28 °C however hot the CPU is, and the machine panel showed it as a reading. A thermal zone is now drawn only once its value has changed. Until then the panel shows LibreHardwareMonitor's readings if its web server is running, and otherwise no Thermal section at all: the deck never invents a reading.

  19. ccdeck 3.38.4

    Release on GitHub

    • A notification when Auto-switch changes your account

      When Auto-switch moves Claude Code to another account, ccdeck now tells you once, with where it went and why, for example "Switched to work · personal@example.com reached 90%". You can turn it off in Settings › Notifications, where two more wait, off until you turn them on: one when a quota window of the Claude or Codex account you are on reaches 90% and again at 100%, and one when a window that had reached 90% is available again. Each is said once per window and a restart does not repeat it. With either quota notification on, the deck reads quota about every two minutes even while no page is open.

  20. ccdeck 3.38.3

    Release on GitHub

    • Subagent costs count their whole reply

      A subagent's request was counted from the first moment of its reply, before most of it had been written, so much of its output was left out of the deck's token and cost counts, and a subagent turn in fast mode was priced at the standard rate. Each request is now counted from its finished reply. Days with subagents will read higher than before: that is the part that was missing, not a new charge. Projects counts its history again once after the update, so past days come out right too. Codex sessions on GPT-6 Sol, GPT-6.1 Sol and GPT-6 Luna now show a cost instead of not priced.

  21. ccdeck 3.37.1

    Release on GitHub

    • Expired logins repair from your other machines

      When a login stops working on this machine and a machine you paired with still has it working and ticked, Local network now copies it back on the next round, whether or not the account is ticked here. Before, it stayed marked expired until the account was ticked here as well, or deleted so that it arrived again. A machine that paired on its own, through Say yes to every deck that asks, still repairs only the accounts ticked here.

  22. ccdeck 3.36.3

    Release on GitHub

    • An expired login asks to be signed in again

      When an account you added with + → Sign in stops working, the deck now tells you in one dialog, with every affected account together and Sign in again beside each. That opens the usual sign-in with the address already filled in, and the account keeps its slot, its alias and its history. Not now leaves it marked in the Accounts panel and does not ask again until it has worked and stopped again. A paired deck holding a working copy gets to repair it first, and accounts that came from a share or Local network are never asked about.

  23. ccdeck 3.34.1

    Release on GitHub

    • The tray menu stays open while you read it

      On Linux the menu behind the tray icon could close by itself while agents were working, often before the row you pressed took the click, so it had to be opened and pressed again. It now changes only when something it says has changed, and stays open while you choose.

  24. ccdeck 3.34.0

    Release on GitHub

    • The network map shows who you are connected to

      Paired decks that are on stand closest to this one, and a light runs along their wires. Paired decks that are away come next, in a colour of their own, with how long they have been gone, and machines that are not paired stand outside in grey. Decks reached over Tailscale sit together in their own shaded slice instead of on dashed wires. Pointing at a deck opens its details beside the map: whether it is there, what to do next if anything, its address and what it runs, and every login the two share, the ones that need a look first.

    • A login that expired everywhere says so

      When a shared login expired on this deck and every paired deck that is on held an expired copy too, the row said "Login expired" and waited for a repair that could never come. It now says "Login expired on all online decks". Claude retires a login's other copies each time one machine refreshes it, so shared copies expire together: sign in again on any one machine and the others repair from it on their next round.

    • Send feedback from inside the deck

      Feedback, beside Settings at the right of the topbar (under More on a phone), opens a short form: pick what kind it is, write a few lines, and add a way to reach you under Add details if you want an answer. It goes to the people who make ccdeck, who may open a public issue from it, never with your contact in it. If it cannot be sent, the form stays filled in and says why.

  25. ccdeck 3.33.0

    Release on GitHub

    • Hooks you add in Claude Code are no longer removed

      Claude Code's hook editor often files a new hook into the same group as the deck's own. Starting the deck, or uninstalling it, then removed the whole group, and your hook went with it without a word. The deck now takes out only its own command and leaves yours where it was, and the same goes for the old finish-sound hook. ccdeck --uninstall also stops the decks that are running, so an update in the background cannot put the hooks back.

    • Resumed Codex sessions show up again

      A Codex session picked up with codex resume, or one that ran for days, could go dark on the canvas and drop out of the 5-hour and 7-day usage, because the deck only looked in the two newest day folders. It now follows those sessions and counts their tokens. Two Codex sessions in the same folder get different id suffixes, and a bash -lc call shows the command it runs.

    • A deck paired by the accept switch brings in less

      A deck that paired through the automatic accept switch, and not through an invite, now brings in only the logins you have ticked on this deck, and nothing from it is ticked for sharing onward. Its dialog says "paired automatically — pair by invite to take it". Pairing by invite works as before. A typed address is no longer dropped after one failed round, and the sync port stays the same after a rename.

    • Desktop updates install when you expect them

      On Windows and Linux a downloaded update now installs when you quit. On a Mac, Quit installs it and the app stays closed. The Linux .deb needs an administrator password to install, so it no longer does that by itself: it waits for "Restart to update" and says a password is coming. "Start at login" now works on Linux, and "Restart ccdeck" stops a deck that has hung.

    • Browser Watch waits before it acts, and quits only its own browser

      A program's visit is now logged and reacted to once its quiet window has closed, about 16 minutes after it, and not on the first poll, so a visit that is withdrawn no longer quits the browser. On Linux the quit reaction ends only the browser that holds the watched profile; other Chrome channels and headless browsers keep running. When it cannot tell which process that is, it does nothing and says so, which includes a Flatpak Brave.

    • Figures that were off are right

      Spend by labelled and workflow subagents counts toward a session's tokens and cost. The Projects report prices 1-hour cache writes the way ccusage does, so its dollars match the Usage panel. After a restart the deck rebuilds its whole event history, where it used to rebuild about a third. On Linux the process list shows what each process is using now, not its lifetime average. A count near a boundary reads "1.00M", and a full quota window says "used up".

    • The Usage panel's reads answer the deck's own page only

      The routes behind the Usage panel (/api/quota, /api/ccusage, /api/codex-usage, /api/codex-quota and /api/cswap-auto) now answer the deck's own page, or a client that sends the deck's token. A script that read them with a plain request gets 401 from this version on. The hook, the desktop app and the ccdeck command are not affected.

    • Smaller fixes you may notice

      With the canvas paused, an update no longer restarts the server while an agent is working: it waits until no turn is open. ccdeck --stop -p4317 stops that one deck. A deck started at login can update itself on Homebrew and nvm setups. Dialogs keep keyboard focus after a button goes away, screen readers hear pairing requests by deck name and the machine panel's readings, dim text is readable in both themes, Windows High Contrast shows what is selected, and below 640px the detail panel opens over the canvas.

  26. ccdeck 3.32.2

    Release on GitHub

    • Self-updates wait until your screen is unlocked

      On Linux with GNOME, the app installs an update by itself when you leave it alone, which is often while your screen is locked. GNOME switches the panel's tray off under the lock screen, and a version that started then never showed its icon. The app now waits until you are back before restarting by itself, so its icon comes back with it.

  27. ccdeck 3.32.1

    Release on GitHub

    • The tray icon comes back on Linux

      On Linux the app could lose its icon in the panel, after it updated itself or when the panel restarted, and stay without it until it was quit. It now notices within a minute and restarts by itself the next time you are away from its window, the way it installs an update. It does this at most once every six hours, and not again if a restart did not help.

    • A window you closed stays closed after a self-update

      When the app restarted by itself to install an update, it opened its window again even if you had closed it, and while that window was open the deck held back its notifications. A window you closed now stays closed.

    • No empty icon when ccdeck is already open

      Opening ccdeck again while it was running flashed an empty "…" icon in the Linux panel before bringing the window forward. It now only brings the window forward.

  28. ccdeck 3.32.0

    Release on GitHub

    • A map of your network

      A new button on the Local network row, and in its view's header, opens a map of every deck around this one. This deck is at the centre and the paired decks that are on stand around it. Further out are the quiet ones, the machines nearby and any deck asking to pair. Wires are solid on your local network and dashed over Tailscale. Pointing at a deck says how it is reached, what it runs and which logins the two share, and pressing it opens that deck's own dialog.

  29. ccdeck 3.31.0

    Release on GitHub

    • Account capacity

      A gauge button in the accounts panel's header opens Account capacity: how many of your Claude accounts are ready now, what the 5-hour and 7-day windows have left across all of them, and a row for each account with its use, its state (Ready, Limited, Exhausted or Stale) and when it was last read. Each window also says whose reset comes next.

    • Claude and Codex incidents

      When Anthropic's or OpenAI's status page reports an incident on something your sessions use, the deck says so in the topbar, the Usage panel and the tray, and every mark links to the status page. A provider with nothing wrong draws nothing.

    • Order your other accounts

      The Other accounts row can sort the list by slot, by how full a window is, or by most room, and open every account at once. Both stay as you left them after a reload.

    • A settings folder left by sudo can be given back

      On a Mac, running ccdeck once with sudo left its settings folder owned by another user, and every settings change was refused, sharing an account included. The message now offers "give it back": macOS asks for your password, the folder is yours again, and the deck reads its settings back without a restart.

  30. ccdeck 3.30.0

    Release on GitHub

    • Token counts and costs are no longer doubled

      Claude Code writes a reply that has thinking, text and tool calls as several transcript lines, each carrying the whole request's usage. The deck added up every line, so a session's tokens and cost on its card came out close to twice what it was billed, and the context panel counted each part of a reply as its own message. Each request is now counted once. Expect the totals on your cards to come down.

    • Claude's saved limit resets on the Usage panel

      When your Claude account has free limit resets to spend ("Reset for free" in Claude's Settings → Usage), the Claude card now says how many there are and when the first one expires, the way the Codex card already did. The deck only reports them; you spend them in Claude's own settings.

    • LAN invites need the other deck updated

      An invite's code is now a long random secret instead of six digits, so nobody else on the network can work it out and pair in your place, and a wrong code is refused by name. An invite made on this version can only be joined from a deck on this version or later: an older deck answers "That is not an invite". Update that deck, or make the invite on the older one and join it here.

    • AGENTS_DECK_NO_NOTIFY keeps Browser Watch quiet too

      A deck started with AGENTS_DECK_NO_NOTIFY=1 still raised a desktop notification for every new Browser Watch finding. It no longer does. The finding is still in the Browser Watch panel and its log, which says why no notification came.

    • Smaller fixes

      Delete removes the card you just clicked. A LAN address you typed stays in the list when a round cannot reach it, and the status line under the LAN switch now agrees with the rows below it. In the desktop app, a dismissed "update is ready" notice stays dismissed after you answer the first-launch question. Sizes read the same in every panel ("1.1 KB"). Faded text stays readable, a keyboard can see the scrollbar, and numbers use a monospaced font on Windows and Linux as well.

  31. ccdeck 3.29.11

    Release on GitHub

    • Claude Sonnet 5.5 has a price

      Sessions on Claude Sonnet 5.5 showed "not priced" on the board, and the Projects report could only show a minimum for them. They are now priced at Anthropic's published rate, the same as Sonnet 5: $2 per million input tokens and $10 per million output tokens.

  32. ccdeck 3.29.10

    Release on GitHub

    • Claude Opus 5.5 has a price

      Sessions on Claude Opus 5.5 showed "not priced" on the board, and the Projects report counted them as costing nothing, so its totals read far too low. They are now priced at Anthropic's published rate. If a model still has no price, Projects shows its total as a minimum, like $11.19+, and names the model, instead of a total that looks complete.

  33. ccdeck 3.29.8

    Release on GitHub

    • Removed cards come back when their agent works again

      Remove from board is for finished work. If the agent behind a card you removed starts a tool call, gets a new prompt or starts a subagent, the card returns on its own, together with the card it hangs from, and it stays back after a reload. Cards whose agents stay idle stay removed.

  34. ccdeck 3.29.1

    Release on GitHub

    • One row per project in Projects

      The Projects report now counts a session's work under the folder you started it in, the same name its card has on the canvas, instead of adding a row for every folder the agent moved into. The first start after updating re-reads your transcripts once to regroup the report.

    • Tidier custom sounds

      Importing a sound, recording one and choosing a spoken voice now sit in compact cards that respond to clicks and focus like the rest of the deck.

  35. ccdeck 3.29.0

    Release on GitHub

    • Your own stations in Claude FM

      Add any YouTube live link or radio stream as a station in Appearance, next to the built-in ones, and mute the music without losing your volume. When a station is not live, the picker now says so instead of staying silent.

    • Notification sounds and voices of your own

      Pick a local audio file or a spoken voice for each alert, so the sound that means an agent is waiting is one you will recognise.

    • Drag a card off the board to remove it

      Drag a card to the target at the bottom of the canvas to take it off the board, or use Remove from board in the detail panel (Delete). The session keeps running, and the session list (L) brings it back.

    • Optional invite-only pairing

      Pairing works as before, with or without an invite. If you want, Local network can now be set to accept only decks that join with an invite you created, so a nearby machine cannot ask to pair on its own.

    • Account sharing between your machines is more reliable

      A locked macOS Keychain is explained instead of failing silently, a login that is broken or belongs to another account is never shared, and a sync that stops partway keeps what already arrived.

    • Projects opens on Today

      The Projects report per account starts with today's work, and an empty window offers the next wider one. The desktop app can also restart into an update from its own window.

  36. ccdeck 3.27.5

    Release on GitHub

    • The welcome tour stays dismissed

      Electron now remembers that you completed the onboarding tour at the deck level, so an update or loopback port change no longer shows the same tour again.

    • The station picker has a clearer finish

      The music selector has a tighter trigger, a purposeful chevron, and more deliberate option spacing so it reads like a native part of Appearance.

  37. ccdeck 3.27.4

    Release on GitHub

    • Desktop picker release checks are green

      The station picker now keeps the same keyboard, motion, focus, and layout behavior as the rest of ccdeck across desktop and browser builds.

    • Station selection works in the desktop app

      The music station picker now opens inside ccdeck instead of relying on the operating system popup, so choosing a station works reliably in the Electron app.

  38. ccdeck 3.27.2

    Release on GitHub

    • Project costs now match Usage

      Project cost totals no longer count the same Claude request once for every content block. Existing project history is rebuilt automatically so the totals align with the Usage panel.

    • Make Appearance easier to tune

      The Appearance dialog now has clearer sections, stronger selection states, and a calmer layout for choosing a theme and configuring music. Your existing settings and keyboard shortcuts continue to work.

  39. ccdeck 3.27.0

    Release on GitHub

    • Projects: where each account spent its work

      Each account card's ⋯ menu now breaks its cost down by project, over 7d / 30d / all.

  40. ccdeck 3.25.0

    Release on GitHub

    • A click goes to the session, a double-click opens the details

      Clicking a card frames it with the rest of its session and leaves the detail panel shut. Double-click a card to open its details; j/k, the session list, Enter and D still open them too.

    • Cards stay readable when you zoom out

      At every zoom a card shows its name, its state and anything waiting on you, instead of shrinking to a coloured pill. Hover or focus a card to see it whole. Recap notes read at a distance too, and show the full recap on hover.

    • The Machine panel shows your network

      A new Network section shows download, upload and the round trip to Claude's API, and names the route when traffic goes through a VPN or a Tailscale exit node. Those checks run only while the panel is open. The panel is regrouped into CPU, Memory, Network and Thermal, with a flag at the top when something needs attention.

    • See each theme before you pick it

      Settings › General shows a small preview of the deck in each theme. Claude FM also keeps its volume when a notification chime plays, instead of dipping under it.

  41. ccdeck 3.24.1

    Release on GitHub

    • Appearance is one small menu now

      The topbar's appearance control opens a compact menu where you can choose Light or Dark and show or hide the character. The character stays on by default, and your choice is remembered.

  42. ccdeck 3.24.0

    Release on GitHub

    • Claude FM plays from the minimap

      A small character stands on the minimap's top edge. Press it and the Claude channel's live stream plays; press it again and it stops. It only turns up when the channel is actually broadcasting, so a deck with no network never shows it at all.

    • And it gets on with its day

      It walks that edge, tidies up what it finds, kicks a ball along it, sits with its legs over the side, and watches the board through a scope. Now and then it drops onto the canvas and ropes its way back up. Headphones on while the music plays, a hat when it does not.

  43. ccdeck 3.23.5

    Release on GitHub

    • The accounts panel opens on the account you are on

      Its windows, its resets and how old the numbers are — whole, at the top of the column. Every other account stands behind one row that says how many of them a switch could actually reach; press it to see them, or rest on it to be shown their names and how much room each has left.

    • Auto-switch moved in there with them

      It is behind that same row now, after the accounts it switches between, rather than at the foot of the panel. The row says auto 90% or auto off so you can tell what the policy is doing without opening it — and says so in amber when it is armed with nowhere left to go.

  44. ccdeck 3.23.0

    Release on GitHub

    • The accounts column leads with accounts

      The live account is the open row: its windows as bars, when each one resets, and how old the numbers are. Every other account rests on the two figures a switch is decided by, and opens with a click when you want the rest.

      A problem stays on the row — an expired login, one that was never stored, a keychain the deck cannot open — with the reason and the sign-in one press away. Auto-switch is one row now: its threshold and its switch. Local network moved out of the column into a view of its own, reached from a row at the foot that says how many of the paired machines are on right now, and shows which ones when you hover it.

    • A resting session shows Claude Code's recap beside its card

      When a session stops, Claude Code's own recap of what it did is drawn beside the card — so a board you come back to says what happened without opening anything.

    • The chrome went quiet

      The topbar is borderless, one set of corners runs through the app, the canvas ground is flat, and the minimap, the zoom controls, the type filter and the Machine and Usage panels read as tooling rather than as cards.

      The canvas also says when auto-fit is off, with one press to bring new sessions back into view.

    • A tool call's detail reads as the call

      A tool call's arguments are shown as the call rather than as escaped JSON, and can be copied.

    • Saying yes to every deck that asks takes two presses

      The switch that accepts every pairing request arms first and says what it hands over, so one stray click cannot put this machine's logins on another deck.

    • Targets, themes and contrast

      The panel's smallest controls reach the 24px target floor, and grow further under a finger. A first run follows the system's light or dark setting instead of picking one. Status dots, meters and switch knobs survive a Windows Contrast theme.

  45. ccdeck 3.22.15

    Release on GitHub

    • Clicking a card opens its details

      Selecting an agent is inspecting it: a click, j/k, a session picked from the list and Enter on a focused card all open the detail panel — prompt, every tool call, tokens, timing. It used to open only with D, so anybody who closed it with its × and never found the key did not get it back. The × still closes it until the next selection, and D still toggles it.

      D with nothing selected now picks a card first — the session that has waited longest, or the one j would land on — instead of flipping a switch with nothing on screen to show for it.

    • The keyboard and screen readers reach the whole deck

      Shortcuts keep working after a mouse click on a button. A click left focus on the button it pressed, and the key handler leaves a focused control its own keys, so every single-key shortcut was dead until you pressed Esc — with nothing on screen to say so.

      Tab follows the page now — topbar, the accounts column, the canvas, usage, machine — instead of zig-zagging left and right across it, and a canvas card reached by Tab draws the focus ring. A screen reader hears each card by name, with its kind, state, model and cost, rather than every word on it run together; the machine panel has a heading its region is named by; and the theme button is named for the theme it switches to.

      With Reduce motion set, the camera no longer flies across the canvas to a card.

    • The money figures say what they measure

      The usage header's $/min is spend over a trailing window, and says which span it measured: $3.54/min · 2 min. It used to divide the live agents' cost by how long the longest of them had been running, so one deck read $2.39/min in a tab left open and $19.49/min in a tab opened minutes later.

      A quota bar's pace says over pace or under pace. It said ahead, which is how plain English says winning, on the very line meant to warn you that you are burning the window faster than it lasts.

      A card's clock reads ≥ 53m 52s for a session this page joined after it had started, instead of presenting the part it saw as the whole of it — and that card's per-minute burn is left out rather than divided by the short clock.

    • Narrow windows keep every topbar control on screen

      At 400px six of the topbar's buttons sat past the right edge and the page scrolled sideways. The readouts give way first now and the controls stay; below 640px the side panels span the window instead of leaving the canvas a sliver; and the category filter wraps inside the canvas rather than being clipped by it.

      Zoomed out, a card's name and a cluster's label stay readable instead of shrinking to about four pixels — which is the view a board of any size actually sits at.

    • A paired deck's dialog says which account that machine is on

      The lane of the account the other machine is working on takes the accent and a slow ring on that machine's end. An account is named only if that deck shares it: on one it does not share, the dialog reads "on another account" and never which. A new switch under SHARE THESE ACCOUNTS, on by default, turns the telling off, and paired decks then read "current account hidden".

      This deck on the network prints this deck's own fingerprint again. A pairing request asks you to match it against the one on the other machine's screen, and no screen here was showing it — so the one check a person can make against a rogue deck could not be made, on the step that hands over logins.

    • The deck's messages send you somewhere worth going

      An empty canvas no longer ends with "Make sure ccdeck is running" while the page is plainly connected to it. The capture hints under that line, one per CLI, are the real reasons a canvas stays empty, and they stay. With the stream down the screen says whether this page lost a deck that was there or never found one, in those words, rather than naming the /events route nobody who typed npx ccdeck has seen.

      And a slow claude-swap now reads as a slow answer — "still waiting on the deck server" — instead of "couldn't reach the deck server", which sent people off to restart a server that was fine.

  46. ccdeck 3.22.10

    Release on GitHub

    • Icon buttons are easier to hit

      Icon buttons react when the pointer is near them — no need to hit the icon exactly.

    • Sessions spread across the canvas

      Sessions now spread across the canvas in columns instead of one tall column, and new sessions and subagents land in the free space beside them. Nothing is placed under the Machine or Usage panels. Press R once to rearrange a board you already have.

  47. ccdeck 3.22.4

    Release on GitHub

    • A card stops looking idle while it is thinking

      The activity chart on each card counted tool calls and nothing else, so the time an agent spends reading, reasoning and writing drew as a flat line — measured on this machine, 16.5% of all working time, more than the time spent inside the tools themselves. A session that was busy looked exactly like one that had died, and the only way to tell them apart was to wait and see whether anything ever appeared.

      It marks that work now. A chart with bars in it means the agent is doing something, whether or not it has called a tool in the last minute; a flat chart means it genuinely is not. Hover it for the split — how many tool calls and how many blocks of thinking and writing landed in the last 60 seconds.

      Nothing was added to the card and nothing new is polled. The deck already reads each session's transcript for its token counts; this reads the same file for what the model has finished writing, and a session that is quiet costs one file check per second and a half.

  48. ccdeck 3.22.1

    Release on GitHub

    • A first run now opens This machine too

      Accounts and usage already opened themselves the first time you ran the deck; the machine panel did not, and now does. It is the panel that answers "is this box coping" — cores, memory, load, temperature — and somebody meeting the deck for the first time cannot ask for a panel they do not know is there.

      It only does this when you have never said otherwise. Close it once and it stays closed, on that browser, for good — the same rule the other two panels have always followed. Nothing reopens it behind you.

      While it is open it polls this machine once every few seconds, and it stops the moment you close it or switch tabs.

  49. ccdeck 3.21.0

    Release on GitHub

    • The deck explains itself in pictures

      🎬 First run opens an eight-picture tour instead of the changelog — who is waiting on you, the tree, a node's inside, cost and quota, this machine, accounts, local network, how to start. Take the tour on an empty canvas brings it back.

      📡 Local network has a guide: a card while it is off, How it works under an empty list, four pictures ending on Turn it on. A machine's row opens its own dialog — address, version and system, the logins it offers, and a name of your own for it. Setup ends on Done.

      🔄 The deck updates itself when nobody is looking: no tab focused, no agent mid-turn, thirty seconds quiet. The banner's auto when idle switch governs it.

      🔑 An account whose numbers were paused resumes on its own, and the panel is titled Claude accounts — a Codex login is not in it.

  50. ccdeck 3.20.0

    Release on GitHub

    • The deck keeps running after you close the terminal

      ccdeck prints the same boot report and gives you the prompt back. The deck stays up, and starts again when you log in.

      🛑 ccdeck --stop is the off switch now — Ctrl+C only cancels a start that is still printing. --status says what is running, --logs shows what the deck wrote while you were away, and --foreground holds the terminal the way every version before this one did.

      🔁 Typing ccdeck beside a deck that is already up opens that deck's tab instead of building a second one. ccdeck --stop --all clears any older deck still running from before this version. An npx run cannot start at login — npx ccdeck --install puts it on your PATH and sets that up.

      🔑 An account that will not collect now says which of three things is wrong: no stored login, a login that expired, or a keychain the deck cannot open — with the fix beside it. One with no stored login is filled over the local network by a paired deck that has it.

      📡 And decks find each other again on a machine with a VPN up: the beacon was going to an address that never left the machine, so this deck could hear colleagues and none of them could hear it.

  51. ccdeck 3.19.0

    Release on GitHub

    • Local network: fixes and improvements

      The list of decks is quiet now. A deck that is on, with nothing to repair, is a name and a green mark — no sentence under it. Every healthy row used to carry the same words, so the one row worth reading looked like all the others. A failure, a login that arrived, a machine that is away, still say so, and they are now the only rows with anything written on them.

      unpair arrives when you point at a row rather than sitting on every one of them, two machines that share a name show their addresses, and the ↻ turns while a round is out.

      Add a deck is two ways in — by address, or with an invite — with make one to send beside the invite heading instead of under the paste field, where it read as that field's button. A refused address now says which mistake it was, and an invite that will not work says whether it ran out, was not an invite, or reached nothing.

      Switching Local network on opens your name and shared logins, every time, so nothing goes on the network without you having just seen what goes with it.

  52. ccdeck 3.18.3

    Release on GitHub

    • The list shows what is on, and folds the rest

      A machine that is off, or nearby and unpaired, or one you said no to, is context rather than an answer to "who can I use right now" — so the decks that are on lead the list and everything else is one line: 2 more. Nothing worrying is hidden by it: a deck that cannot be reached is counted in that line, in the warning colour, so the fold says whether it is worth opening.

      The round moved to a ↻ beside the switch, where the accounts header has kept the same act since it was written, and the line under the state now says when it last ran — checked 2m ago, or not checked yet. A list that refreshes itself and a list that has stopped used to look identical, and pressing the button to find out was the only way to tell.

  53. ccdeck 3.18.1

    Release on GitHub

    • A deck stops asking to pair over and over

      Several decks on one computer share a config directory, so they start with one key. Each read the others' beacons as somebody wearing its name, took a fresh key, and wrote it to the file the others read — a loop that never settles. Every new key is a new deck to everyone else on the network, so one machine sent a fresh pairing request every few seconds and accepting one accomplished nothing: the deck that asked no longer existed by the time the answer arrived.

      Decks on one computer now recognise each other as the same machine and leave the key alone. The clash still worth healing — a ~/.claude copied to a second machine — is unchanged.

      This also collapses the rows: a computer that has run the deck a few times appeared several times on everybody else's panel and is one row now. Both machines need this version for that to take effect on the other one's screen.

      A deck that answered is no longer counted as unreachable, the list refreshes itself in seconds while somebody is deciding rather than at the next minute, and a failed round says what happened — not listening, no route to it — with the address and the raw error on the hover.

  54. ccdeck 3.18.0

    Release on GitHub

    • A deck that is switched off no longer reads as on

      A paired deck this one has no address for was drawn live on the strength of being paired — a machine closed an hour ago still sat under 1 deck ready. Every row now leads with whether that machine is actually there, and when it last was: online · 1 login arrived, no answer · last online 20m ago, never reached. The mark beside the name is a traffic light — green for a deck that answered, amber for one that cannot be reached, grey for one nothing has heard from.

      + add a deck opens a dialog now instead of unfolding inside the panel. An address, an invite and the firewall note never fitted a 288px column, and unfolded they turned a list of machines into a form.

  55. ccdeck 3.17.0

    Release on GitHub

    • Pairing is two presses

      When another deck asks to pair, the question now arrives over the deck rather than in a row three sections down a panel: its name, its address, the fingerprint to compare, Accept or Decline. Escape means later — the request stays in the panel until you answer it.

      The rest is one list. Every deck you are paired with, every deck on the network, and every one you turned away, each a row with its state under the name and one verb at the end — and a deck that cannot be reached now reads differently from one that is fine. Saying no also reaches the other machine now, instead of leaving it waiting forever; you can take it back.

      The dialog behind setup is down to the two things it is really about: what this deck is called, and which logins it offers.

  56. ccdeck 3.16.0

    Release on GitHub

    • Pair two decks with one piece of text

      Accounts ▸ Local network ▸ setup… ▸ make an invite. Send the text however you already talk to them; they paste it and the two decks are paired. Nobody presses accept, and neither of you has to know which of your addresses the other can reach — the invite carries them all and their deck tries each one.

      Decks on the same router still find each other on their own and appear under on this network right now. An invite is for the case that does not work: another subnet, a VPN, a firewall.

      The invite lasts 10 minutes and is used once. Anyone who gets hold of the text can pair with your deck until it runs out, so send it the way you would send anything else you would not want forwarded.

    • Both machines have to be on this version

      The two decks no longer speak the old protocol, and there is no fallback: a 3.15 deck and a 3.16 deck cannot see each other at all. Update both.

      The group passphrase is gone. If you had one set, that pairing is not carried over — make an invite and pair again. It was replaced because a passphrase that differs by one character produced a closed socket and no other symptom on either machine, and a secret is the one thing a panel must never print, so neither person could check theirs against the other's.

  57. ccdeck 3.15.0

    Release on GitHub

    • Decks on one network heal each other's dead logins

      A login dies on the machine that has not used it while the same account keeps working on the machine that has. The fix was a blob copied out of one deck and pasted into another. Now: Accounts ▸ Local network, the same passphrase on each deck — it offers you six words — and they find each other and repair themselves.

      A deck only adds an account it does not have, or replaces one it has proven dead — proven by Anthropic refusing the token, not guessed. A credential that works is never touched. The passphrase is the only gate; a stranger on the same wifi sees that a deck exists and nothing else.

    • What sharing a login actually means

      A login you share is a live one, and it cannot be taken back. Turning the switch off stops what has not happened yet; a credential that has left your machine is gone, and the only real revocation is signing in again at Anthropic — which ends the session everywhere at once.

      Sharing a Claude account may also be against Anthropic's terms. Your call; the deck says it once and does not nag.

  58. ccdeck 3.14.0

    Release on GitHub

    • The machine comes back beside the list that covers it

      Busiest processes opens over the machine panel and hides the very readings that sent you looking. They are back beside the list — cores, memory, swap, queued work, temperature — with up to an hour behind each: a column down the side on a wide screen, a band under the table on a narrow one.

      Each is drawn against the line it is measured to — memory and swap at 90%, load at your core count, the GPU at 75° and again at 90° — so swap sitting *on* its line is something you see rather than work out. The processor readings get no line on purpose: a CPU at 90% is your machine doing what you asked for. Throttling appears only once your machine has actually been held back, and the band says how much history it really has rather than claiming an hour it has not had.

    • The process dialog's footnote moved onto the columns it was about

      A band ran along the bottom of Busiest processes saying three things. Two were worth keeping and are now on the header of the column they describe — hover memory to read what that number measures, process to read that the command-line redaction is a filter rather than a promise.

      The third said the list is the busiest by processor and memory, refreshed every four seconds. The heading, the count beside it and the moving numbers were already saying that.

    • These notes render what they were written in

      Every note in this dialog is written in Markdown — bold for the sentence that carries the change, backticks for a flag or a path — and the dialog printed the string raw. So the first window you see after an upgrade has been showing you **this**, backticks and all, since the feature shipped: 25 of 52 notes, 52 bold spans, 54 code spans.

      What you are reading is the first version that does not.

      No Markdown library came along for it. Counted in the file: bold 52, code 54, links 0, headings 0, lists 0 — and the smallest library that reads all of Markdown is 40KB on a bundle the deck fetches while you wait for it to start.

    • ⎋ Esc leaves the machine panel where it is

      The × on This machine read Close (Esc), so Escape put the panel away. Escape belongs to the canvas — it deselects and hands the keyboard back — and pressing it while you are reading your instruments should not close them.

      The panel now closes the ways it opens: its ×, its button on the window's right edge, and S. The × says Close, and names no key it does not answer.

    • The machine moved out of the topbar and into a button

      The small CPU sparkline and memory bar in the topbar are gone. A chip glyph, on the window's right edge now, opens the same This machine panel — cores, memory, swap, load, temperature, busiest processes — and the bar stops moving in the corner of your eye.

      It also stops asking. The deck read your machine every three seconds for the life of every tab to feed that meter; it now reads only while the panel is open, and the history behind the readings is kept by the deck itself, so a panel opened an hour from now still has the hour behind it.

    • The panel's eight process rows became one way in

      The machine panel drew eight processes in a 280px box: three columns, names cut off mid-word, and a ps run every four seconds to keep them moving. Busiest processes is a single row you press now, and the dialog behind it is what it always was — every candidate the deck sees, its memory in bytes, threads, user, pid, and the command line that tells you which node this one is.

      With that dialog closed, the deck reads no process list at all.

    • The restart banner says whether the press is safe, and shows the fuse

      The button read Restart now whether the machine was idle or five agents were mid-turn — and the events fired while the server is down are lost for good. It reads Restart anyway now when something is running, with the count beside it, and Restart now with *nothing is running* when the machine is quiet.

      The automatic restart said only auto when idle, while a 30-second clock ran where nobody could see it. It counts — auto in 18s — which is also how you stop it, since the switch is the label. The amber dot pulses only while that clock runs.

      The switch also says auto-restart off in words rather than in a colour, both its label and the button are readable in the light theme now, and a tab you are not looking at no longer restarts the deck under the tab you are.

  59. ccdeck 3.13.0

    Release on GitHub

    • Usage history stops jumping out from under you

      Pressing H put running ccusage… in a box 186px tall. Two to four seconds later the chart, the totals and the legend arrived and the box became 429px — and because the dialog is centred, that growth moved the whole thing 121px upward, under the cursor that had just pressed something.

      The chart's place is now reserved from the first frame: the 168px the chart is tall plus the 16px it keeps for its day labels, both taken from the chart's own rule so the placeholder and the thing it holds room for cannot drift apart. The jump goes from 243px to 156px. It deliberately stops there — the totals and the legend are content, the legend's height depends on how many models ran, and reserving those would have meant drawing four plausible empty cards for a reading that had not arrived.

      What is drawn in the reserved space is the chart's baseline and nothing else: one line, in the same colour, at the height the columns will land on. Not a skeleton of grey bars — a skeleton stands in for content, an axis is furniture, and furniture is honest before the data exists. The light on it travels rather than fills, because the deck knows a subprocess is running and does not know how far through your transcripts it has got.

      Then the days rise out of that line, oldest first. The stagger is divided rather than fixed — 200ms of spread whether the range is 7 days or 90 — so the longest range is not also the slowest to appear.

      With reduced motion both loops and both entrances are off. The reserved space is layout, not animation, and stays outside that rule: asking for less movement gets you the same dialog that does not jump.

    • The period mark says it is being read

      The first read of today, month or all takes two to three seconds — it walks the transcripts on this machine, and the cost is the walk, not the size of the range you asked for. Until now the panel said nothing for the whole of it, so pressing month looked like pressing nothing, and the honest response was to press it again.

      The mark under the period now pulses while that read is in flight, and it pulses rather than fills: nothing measures how far through the transcripts ccusage has got, so a bar that filled would be inventing a number. Hovering the pending period says which one is being read, and screen readers are told the same thing through a live region rather than being left with a silent button.

  60. ccdeck 3.12.0

    Release on GitHub

    • Busiest processes tells you which one

      The list could say what was eating the machine and not which of nine identical Google Chrome Helper rows was the headless Chrome you left running. It now shows the arguments after the name — --type=renderer beside one, serve admin-portal --port 44440 beside a node — and four columns it did not have: memory in MB and GB instead of a percentage, threads, how long it has been up, and user. Every column sorts; press its heading.

      Command lines have anything secret-shaped removed before they leave your machine — the value of any flag whose name says token, password, key or secret, the password in a URL, and the shapes that identify themselves. It is a filter and not a guarantee: a secret that looks like an ordinary word looks like an ordinary word. The reading happens only while this modal is open, so a deck whose process list you never open never reads a command line at all.

      Memory is resident set size — what ps and Windows Task Manager report. On macOS this is *not* the number Activity Monitor shows in its Memory column; that one is the physical footprint, and on the machine this was built on the two disagree by up to fourteen times on the same process. No unprivileged command reports the footprint quickly, so the deck shows the figure that means the same thing on all three platforms and says which one it is.

      There is no Ports column, and the reason is the same kind of honesty: Mach ports do not exist on Linux, are not what Windows calls a handle, and on macOS the only way to count them takes four seconds — against a list that refreshes every four.

    • A token count that stays a whole number

      Switching the Usage panel from month to today counted down smoothly and then, for a fraction of a second, showed something like in 594.3268260610639 where a token count belongs.

      The count was never wrong; the printing was. The figures animate between two readings, so the formatter is handed a fraction on most of its frames — every size above a thousand was already rounded and the one below it was not.

  61. ccdeck 3.11.0

    Release on GitHub

    • The session list waits to be asked for

      BY SESSION in the Usage panel now starts collapsed. It is the one block in that panel with no ceiling — every other section is two or three rows, or a model table bounded by the models that exist — and it was the reason the panel scrolled at all. Shut, the whole panel is one screen: quota, period, money, models. Press the heading to open it, and it stays open; ccdeck remembers your answer from then on.

      The count of what is behind it is on the heading's tooltip, so collapsing it does not hide how much there is.

      Scrollbars are also gone until you point at the thing that scrolls. Nothing moves when they appear — the track keeps its width in both states, so no text shifts under the pointer as it arrives.

    • today · month · all, as tabs that remember

      The Usage panel's period switcher is a full-width row of tabs rather than a pill floating over the column, with a thin cyan mark under the word it belongs to. It governs the figures beneath it, so it now looks like it does.

      Your chosen period survives a reload. It was the one preference in that panel that did not.

      It costs one Tab stop instead of three. Tab into the strip, then move with ←/→ or Home/End, and press Enter to choose. Arrowing past a period no longer starts reading it — moving and choosing are separate now, which matters on all.

      And month says which month. Hover it: this is the calendar month, from the 1st — not the last 30 days. today and all say what they cover too.

    • Sounds and Notifications are two switches, and Browser notifications is a channel

      The sound menu has been rebuilt. Sounds and Notifications are real switches now instead of words that read like status. Under them, Browser notifications is named as what it is — one of the two ways ccdeck can reach you — rather than sitting there as a third setting that seemed to contradict the one above it.

      There are two notifiers and they never both fire: the page raises one when the deck is open but hidden, and the server raises one when no page is open at all. Only the first needs a browser permission, which is why the permission belongs to a channel and not to the feature. Turning Notifications on now asks the browser on that same press — no second control to hunt for.

      M mutes and unmutes sounds from anywhere. Hear it plays the tone even when Sounds is off, so you can pick one before turning them back on.

    • No agent, no empty panel

      The detail panel no longer appears when nothing is selected. It used to sit there empty, and a tab on the edge of the canvas existed to bring it back after you closed it — both are gone. Select an agent and the panel is there; press D to toggle it yourself.

      The canvas is that much wider whenever you are not reading one agent.

  62. ccdeck 3.10.0

    Release on GitHub

    • Who else can drive your browser, and where to see it

      Browser Watch has a Remote control section. The Claude in Chrome extension holds a connection open to Anthropic's relay, and that connection is registered against your account, not against this machine — so any Claude Code session signed in to the same account, running anywhere, can enumerate and drive this browser, and nothing prompts you on the machine being driven.

      The panel now says whether that is the case here, and what the extension is actually allowed to do in each profile — enabled or switched off, every site or only the ones it was granted, and which of the powerful APIs it holds. That last part is not what chrome://extensions shows you: the per-site list there is enforced by the extension, on itself, while the grant underneath stays exactly as wide as it was.

      If you want it closed, the section hands you the one command that closes it — as text, to paste in your own terminal. ccdeck never runs it and never asks for your password, and it never will: no part of this deck elevates, and a dashboard that could raise a password box on request would be a gift to anything else running on the machine. If the block is already in place, the section offers the command that takes it back out. And if something else in your hosts file already points that name somewhere, it says so and leaves the line alone — ccdeck only removes the line ccdeck wrote.

      All of this is two file reads and no network call. It was written some releases ago and, until now, was not connected to any screen.

      Also: the README said share produces a ccdeck1: blob. It produces ccdeck2: — ccdeck1: has been read-only legacy for a while.

  63. ccdeck 3.9.0

    Release on GitHub

    • Five switches that were not where the thing they control is

      The session list has a button again. It lost one a while back and only the L key was left — and L is written down in one place, a shortcuts sheet behind a small ? in the corner of the canvas. If you use a mouse there was no way to open the list at all. Its button is on the window's left edge now.

      The Notifications switch now tells you whether the browser will actually show one. It said on while this browser had never been asked for permission, which is not the same thing. It now says so on that row and offers the ask right there. Before, the only place to grant it was a button that appears solely while a session is stuck waiting — so on a machine where that rarely happens you could not switch notifications on at all.

      Started with --workspace or --scope and seeing nothing? The empty screen used to tell everyone to "run claude or codex in any folder", which is the one thing that cannot work for you. It now names the folder the deck is actually watching.

      Browser Watch says when a setting did not save. Flipping the switch and having it fail showed a red line reading "Could not read" — about reading history, not about your press — and ten seconds later the panel wiped it and looked perfectly healthy with the setting unchanged. A failed save now says so, in its own words, and stays until you dismiss it. The "nobody browsing for" menu also follows the stored value again: change it in a second tab and this one never caught up.

      The deck no longer restarts itself when nothing on screen offers to stop it. Thirty seconds after the last agent went quiet, with a new version on disk, the server would exit, come back and reload the page. The auto when idle switch that controls that lives inside the update banner — so if you had closed the banner with its ×, it happened with no visible setting anywhere. Closing the banner now also stands down the restart; clicking the version chip brings back both together.

  64. ccdeck 3.8.9

    Release on GitHub

    • Four things that only went wrong on somebody else's operating system

      Ubuntu: the deck knew where Chromium and Brave keep their profiles when installed as a snap or a flatpak — which on a default Ubuntu is the only place Chromium is — but not what those programs are called. So it reported them as not running while they were, and refused to quit them. Both now work.

      Windows: the deck asked the system whether it could write to the folder an update installs into, and Windows always answers yes for a folder whatever the permissions say. It offered you an update that then died inside npm with a permission error. It now finds out by trying, and declines up front with the command to run yourself — which is what every other platform already got.

      Linux: if XDG_DATA_HOME was set to something starting with ~, as it is from a systemd unit or a Dockerfile, the deck and claude-swap looked in two different places for your accounts. The panel said you had none while cswap list showed them all.

      Plain terminals: six messages used a typographic dash the old Windows console and the Linux text console cannot draw, so a box appeared mid-sentence — including in the line that explains why no events are arriving. They use the plain form on those terminals now, like everything else already did.

  65. ccdeck 3.8.8

    Release on GitHub

    • A false 99% on the memory chart, and three other quiet failures

      The machine meter no longer invents a reading. When the deck could not measure memory — a subprocess that would not start under load, or one that took too long — it substituted a number that means something else, and on a Mac that reads as about 99% used. The meter went red for half a minute, and because the chart keeps the highest value in each minute, that false peak stayed on it for a full day. A poll that cannot measure now keeps the last reading and records nothing: a gap in the chart is honest.

      A failed ccusage repair no longer disables the repair. If the deck found a half-installed copy it removes it and starts again. On Windows that removal can fail for a few seconds because the program it just ran still has the folder open — and the deck then treated the attempt as spent and never tried again for the rest of the session, leaving the panel permanently unable to read your usage. It now only counts a repair that happened.

      Changing the auto-switch interval takes effect even during startup. Set it in the first seconds after launch and the timer kept the old value for the life of the process, while the panel showed the new one.

      Codex sessions with very large histories no longer cost hundreds of megabytes to read. The deck read the whole file to find four values that live at its two ends — measured at 185 MB of memory and 95ms of frozen interface for one 44 MB session. It now reads only the ends.

  66. ccdeck 3.8.7

    Release on GitHub

    • Four things in the panel that behaved wrongly

      Today's figure no longer overshoots. Once a minute, when a fresh reading landed, the headline briefly counted past the true number and back down — it was measuring the last minute of spend from a starting point one moment out of date. The reading and its starting point are now recorded together, so there is no moment where they can disagree.

      Browser Watch marks findings read when you close it, not when you open it. It was clearing the badge immediately, and stamping every new finding as read the moment it arrived — so anything that turned up while you were reading was never badged at all. It was also writing to storage four times a second the whole time the panel was open.

      A hidden tool category can always be brought back. Hide one, leave the deck running, and once the canvas had turned over the row of chips disappeared while the filter stayed on — no bubbles, and nothing to press. Only reloading fixed it. The chips now stay for as long as anything is hidden.

      Clicking a session's name no longer switches auto-fit off. The deck was reading its own camera move as you grabbing the canvas, and remembered it across restarts, with nothing said.

  67. ccdeck 3.8.6

    Release on GitHub

    • Two decks can no longer both claim the same log

      When several decks share one events log they elect a single writer for it, so nothing is recorded twice. That election compared the path as typed — so two decks reaching the SAME file by different spellings each thought they were alone, both wrote every event, and each believed the log was theirs to clear.

      Different spellings are ordinary, not exotic: a shortened Windows home directory, a mapped or substituted drive, a junction, or on macOS /tmp against /private/tmp. The visible symptoms were duplicated tool calls after a restart, and Clear wiping history belonging to another deck.

      The path is now canonicalised the same way the watched folder already was. It works on a first run too, before the log file exists.

  68. ccdeck 3.8.5

    Release on GitHub

    • Cancelling a sign-in no longer adds the account anyway

      Press Escape while adding a Claude account and the deck killed the sign-in — and then, sometimes, registered the account regardless, switched to it, and told you it had worked.

      The deck asks the tools it runs whether they finished cleanly. A program that is well behaved about being cancelled tidies up and exits with a success code, and the deck was reading that as "it finished" rather than "I stopped it". claude auth login is exactly that kind of program.

      A cancelled run now reports as cancelled. Everything that was not cancelled is unaffected.

  69. ccdeck 3.8.4

    Release on GitHub

    • Your own hooks can no longer be eaten by two decks starting together

      If you keep hooks of your own in settings.json, the deck parks them while it installs and puts them back afterwards. Two decks starting at the same moment could interleave inside that, and the loser wrote a version of the file computed before the restore — so your hook was gone from settings.json and gone from the park, which was its only other copy.

      There was already a check for this, and it had a hole: if the last-moment re-read of the file failed, it read that as "nothing changed" and wrote anyway. A failed read is the one moment that check was most needed, because the usual reason a file cannot be read for a few milliseconds is that something else has just written it.

      ccdeck --uninstall had no such check at all and could overwrite a deck that was starting, then exit 0 saying it had succeeded. It has one now, and when it declines it says so and tells you to run it again rather than reporting that there was nothing to remove.

  70. ccdeck 3.8.3

    Release on GitHub

    • Windows: two settings files that could refuse to save

      On Windows a file cannot be moved into place while anything else has it open, and Defender and the search indexer open a file the instant it is written. The deck has had a retry for that for a long time, and two files written in the last few days were not using it: the notifications preference, and Browser Watch's episode archive.

      When it bit, the notifications switch silently did not stick, and Browser Watch answered an error and showed an empty panel. Both now retry the way everything else in the deck already did.

      Nothing changes on macOS or Linux, where the operating system never refused the move in the first place — which is why this got past a green test suite on both.

  71. ccdeck 3.8.2

    Release on GitHub

    • A closed-behind-your-back dialog no longer kills every keyboard shortcut

      Open the context ring on a session's card and leave it open. The session finishes, and a couple of minutes later the canvas evicts it — or you press Clear. The dialog vanished, and from that moment every shortcut in the deck stopped working: Space, C, R, F, L, H, U, A, J, K, T, M, and the trash button too. Only reloading the page brought them back.

      The deck was still counting the dialog as open, because it remembered which session you had opened it for rather than whether anything was on screen. It now closes the dialog when its session leaves the board, which is what should have happened in the first place. The end-of-session recap had the same problem and is fixed with it.

  72. ccdeck 3.8.1

    Release on GitHub

    • Security: update if the deck runs on a Mac

      A local process able to reach the deck's port — no token, no browser, no tab — could get a string of its choosing compiled as AppleScript when the deck raised a desktop notification with no page open. On macOS that is code running as you.

      The strings were already passed as arguments rather than pasted into the script, which is normally the whole defence. It is not enough for osascript: its option parser reads any argument starting with a dash as an option, so a name beginning with -e was taken as more script instead of as text. Every place the deck hands osascript or notify-send something from outside now carries an explicit end-of-options marker, so nothing from outside can be read as an instruction again.

      Nothing to change on your side beyond updating. If you would rather keep the deck off the desktop entirely, the Notifications switch in Settings › Notifications does that, and AGENTS_DECK_NO_NOTIFY=1 does it at launch — but the fix is the thing to have.

  73. ccdeck 3.8.0

    Release on GitHub

    • Notifications now have an off switch

      3.7.0 gave you a "notify me" button and no way back. Turning them off meant digging into your browser's site settings — which no page can do for you — and that still left the other notifier, the one the deck raises when no page is open at all. Silencing that one meant quitting the deck and starting it again with AGENTS_DECK_NO_NOTIFY=1 in front. The person who wanted quiet was the one doing the work.

      There is a Notifications switch in Settings › Notifications now. One switch governs both notifiers, it takes effect immediately without a restart, and it is remembered across restarts.

      It is kept by the deck rather than by your browser, because the second notifier runs when no page exists and a setting living in a page could never reach it. AGENTS_DECK_NO_NOTIFY=1 still wins over the switch — a machine told at launch to stay off the desktop stays off it — and when that is the case Settings says so instead of showing an "on" that will not happen.

  74. ccdeck 3.7.1

    Release on GitHub

    • The notifications now fire on the thing that actually stops your agent

      3.7.0 could tell you a session was waiting — but only when Claude Code asked permission to run a tool. If you work with permissions bypassed, that never happens, and the whole feature was silent for you. Measured on one real log: 1683 events, every one of them in bypassPermissions, and a single permission prompt in the entire history.

      What fires constantly on that setup is the other kind: the agent asking you a question and stopping for the answer. The deck was throwing those away — no amber chip, no row in the sidebar, no notification, and no "notify me" button, because the button only appeared while something was actually blocked.

      Now they count. The card carries the question itself rather than a generic "Your turn" — "paycore needs your input: merge both branches to main, or just one?" — and so does the notification, on the desktop, whether the tab is behind something or not open at all.

      An idle prompt still stays quiet: a turn that ended is not a session that is stuck, and a channel that cries wolf is one you switch off.

  75. ccdeck 3.7.0

    Release on GitHub

    • The deck can reach you when you are not looking at it

      The deck's whole point is telling you which agent is waiting on you, and until now it could only say so on screen — the amber chip, the tab title, the favicon. Every one of those is drawn inside a page, so the one moment it matters, when you have walked away and four agents have gone quiet, the deck was silent.

      Now it reaches the desktop, two ways that never overlap. With the deck open behind something, the page raises the notification itself: the browser asks for permission when you turn notifications on in Settings › Notifications — nothing is requested before you do. With no page open at all, the server raises it, because it can see that nobody is connected and therefore that no other surface is saying anything.

      One notification per session, replaced rather than stacked if a second deck raises it too. Clicking it brings the tab forward. AGENTS_DECK_NO_NOTIFY=1 turns the desktop side off entirely, and if you refuse the browser prompt the deck says so plainly instead of leaving you thinking you switched something on — after a refusal only your browser's site settings can undo it, which no page is allowed to touch.

    • A blocked session now says what it is asking for

      "Waiting on you" told you to go and look. The session row and the card now carry the tool the prompt is most likely about, and the tooltip carries the one line of its input that a person actually reads — rm -rf node_modules rather than {"command":"rm -rf node_modules"}.

      It is a guess and it is worded as one: the deck sees the tool calls, not the permission dialog, so it says "likely on". The deck still cannot allow, deny or answer anything for your agent, and it never will.

    • Today's figure was counting some sessions twice

      The panel reads your usage from ccusage once a minute and fills the gap in between from what the deck is watching. The filling-in was wrong: any session that reached the canvas after the reading had landed was added in full, and since the canvas is still loading when the first reading arrives, that was most of them.

      Measured on a deck four seconds old: ccusage said $450 for today and the panel said $1,006. The table underneath it said $450 the whole time, which is the disagreement to trust.

      The deck now adds only work it has actually watched happen. A session that starts while you are looking shows up at the next reading instead of instantly — up to a minute — which is how the panel behaved before the live figure existed at all. Everything already on screen keeps moving as it did.

  76. ccdeck 3.6.0

    Release on GitHub

    • The two figures at the end of the top bar are gone

      The bar used to end with a token count and a dollar figure. Both were sums over what is on the canvas at that moment, and the canvas drops finished sessions a couple of minutes after they end — so both numbers fell on their own, with nothing on screen to explain the fall. They carried the word "board" and a three-line tooltip for exactly that reason.

      The usage panel answers the same question without the apology: it reads the logs on disk, it covers sessions this deck never watched, and it does not forget. Press U for the panel, or H for the full history.

      What is left in the bar is what is true right now — whether the stream is alive, and what your machine is doing.

  77. ccdeck 3.5.0

    Release on GitHub

    • The figures move when the work happens

      Reading your usage off the logs is not free — measured here, one reading is 7.8 seconds of CPU, because ccusage walks every transcript on the machine whatever period you asked for. Once a minute is affordable; once every ten seconds would be three quarters of a core, permanently, for numbers that move slowly.

      So the reading stays on a minute and the deck fills the gap with what it already knows. Every hook event carries its session's running total, so the panel adds whatever has been spent since the last reading and counts up to it. The headline now moves when a turn finishes rather than on the clock, and it costs nothing extra.

      It only ever adds. A session leaving the canvas cannot pull the figure down, and the next reading corrects whatever the estimate got wrong — the tokens are exact, and the dollars in between are priced by the deck's own table.

      Two smaller things with it: pressing today, month or all now counts between the two figures instead of swapping them, and coming back to the tab only re-reads if what is on screen is actually stale.

  78. ccdeck 3.4.0

    Release on GitHub

    • The figures count to their new value, once a minute

      The Usage panel re-reads its numbers every minute now rather than every five, and it is a real minute — the server used to hold a reading for two, so a shorter poll would have handed the same figure back.

      And they no longer teleport. Replaced in a single frame, $170 → $269 says only "this is different now": no direction, no sense of how much, and nothing at all if your eye was a few pixels away. Counted over a fifth of a second, the same change says up, and roughly how far.

      What deliberately does not count: the first paint, a change of period — "today" and "all time" are different quantities rather than one that moved — the tables, a change too small to read, and anything at all if you have reduced motion on or the tab is in the background.

    • The board's own figure is out of the Usage panel

      3.3.0 put the canvas's live spend on its own labelled line, under whichever period you had chosen. In front of a panel that answers today, this month and all time from the logs on disk, that second money figure answers a question nobody asked at that moment — and it invited a comparison it could never win, $7,385 on the board beneath $170 for today.

      It is gone. The panel still shows the board's tokens and cost when ccusage cannot answer at all.

  79. ccdeck 3.3.0

    Release on GitHub

    • The Usage panel answers for a period, not just for the board

      It used to add up the sessions drawn on the canvas — which is an honest number with a scope nobody reads it as having: finished sessions are evicted a couple of minutes after they end, so the figure fell on its own while nothing had happened and nothing was refunded.

      It now reads ccusage, the same source the H modal uses, and offers today, this month and all time. BY MODEL and BY SESSION come from there too, and each session is named by the project the board knows it as rather than by a uuid.

      The live figure is still there, on its own line and labelled — what the sessions currently on the board have spent — because that is a different question from what the month cost.

      One thing worth knowing about the source: ccusage reports a session's LIFETIME total, so the rows under "active today" can add up to more than the day above them. The heading says so.

    • Windows: a deck started from an elevated terminal was being treated as dead

      The hook decides whether a deck is still running by trying to signal it. On POSIX a process you may not signal answers EPERM; on Windows it answers EACCES, and only EPERM was accepted — so a deck started from an elevated terminal, or under another account, read as gone. Its registration was deleted on every event and rewritten five seconds later, while its banner went on saying it was connected and almost nothing arrived.

      Three more Windows-only faults went with it: a read-only settings.json made every hook install fail for good (the atomic write could not replace the file); the machine panel answered 500 every four seconds whenever the process read failed; and a bare command name was looked for in the working directory before PATH, which is where npx ccdeck was run.

    • Browser Watch reads nothing while it is switched off

      The switch used to control only what was KEPT. The read happened anyway — every five minutes, on every deck, the panel's badge poll discovered each Chromium profile and copied its whole History database to a temp file to query it. A switch that says off while that continues is not a switch.

      With the watch off, nothing touches a browser now. Opening the panel still reads live, because that is you looking, and a watch that is ON still records in the background — that is the feature. The trade is that the Browser Watch badge no longer counts findings while the watch is off; open the panel to see them.

      The README has a Browser Watch section now: what is read, when, where the copy goes, and that only visits after the deck started are ever considered.

    • The deck's own data is no longer readable by anything on the machine

      Changing an account needed the deck's credential; reading the event ring did not. Anything running on your machine could curl the events — prompt text, the commands an agent ran, the paths and contents it touched — plus the account list and the browsing episodes.

      Those reads now answer to the same rule the mutations do: the deck's own page, or its token. Nothing changes for you in the browser. A script of yours that reads those routes needs the token from ~/.claude/agent-dag/<pid>.json, sent as x-ccdeck-token.

    • An API-key, Bedrock or Vertex install is told there is no quota window

      Those installs are billed per token and have no five-hour window. The CLI ran, printed no quota lines, and the deck read that as a genuine "under 1%" — drawing two empty bars for a measurement nobody had taken, or telling you to run /usage, which cannot help there.

      It now says what it is, in one line, the way the Codex half already did.

    • The model chip is coloured by its model again

      A session that switched model — Sonnet, then Opus — drew a chip reading "Opus 5 +1" in Sonnet blue, because the colour was picked from the tooltip and the tooltip lists every model the card's spend covers. Add a Fable turn and it went yellow.

      Also fixed on the way past: an account import the CLI rejected could take the whole deck down with it, and a corrupt compressed Codex rollout leaked a file handle on every poll.

  80. ccdeck 3.2.1

    Release on GitHub

    • Sonnet 5 was being costed fifty per cent high

      Sonnet 5 launched at $2/$10 per million tokens as introductory pricing, with a rise to $3/$15 announced for September 1. The deck implemented that schedule, and on September 1 it started charging the higher rate.

      The increase was cancelled. Anthropic's pricing page now says the $2/$10 rate is simply the price and the rise "will not occur" — so every Sonnet 5 session since the 1st has been shown to you at half again what it cost.

      It is corrected, and there is no date logic left in that rate to go stale a second time. Numbers already on your board are recomputed from the log the next time the deck starts; nothing was billed by us, only displayed.

      Fable 5.1 and Mythos 5.1 are also priced now, including the cache read that is a quarter of Fable 5's — which is most of what a long session pays for.

  81. ccdeck 3.2.0

    Release on GitHub

    • Windows shows a temperature where it can find one

      On most Windows laptops there is nothing to show, and that is Windows rather than this deck: modern machines declare no ACPI thermal zone, and the sensors that do exist sit behind an interface only an administrator may read. Measured on real hardware, elevated and not.

      One thing does work, and it costs you nothing to have. If LibreHardwareMonitor happens to be running with its web server on, the deck now reads its numbers over localhost — which needs no privileges at all.

      It is only ever a read. Nothing is installed, nothing is asked of you, and a machine without it shows no section, exactly as before.

  82. ccdeck 3.1.0

    Release on GitHub

    • The first run stops looking like it hung

      npx ccdeck on a machine that has never run it used to sit on a spinner at "checking claude-swap" and say nothing else. Measured on a Windows box: seventeen and a half seconds before it told you where to point a browser. It is now one and a half.

      The deck was waiting for an install nobody asked for during that boot — a Python toolchain being fetched so the accounts panel would work. The port had been open the whole time; there was just nothing on screen to say so.

      It no longer waits. Anything still working past the boot says so on its own line and keeps going in the background, and the deck comes up without it.

    • Every start is quicker, and stays quicker

      The event log was read from the beginning on every boot to fill a buffer that only keeps the last two thousand events — so four fifths of that reading existed to be thrown away, and it got slower the longer you had been using the deck. It reads from the end now and stops when the buffer is full: 258ms down to 20ms here, on a 34 MB log, and it no longer grows.

      The accounts tool is also asked for its version once instead of twice, which on this machine was the single largest thing in an ordinary boot.

    • Ten fewer packages to install

      Opening your browser used to cost a dependency that brought nine more with it — ten downloads on a cold npx ccdeck before the deck's own files were unpacked. It is now done with the commands the operating system already has.

      The package has no runtime dependencies at all.

    • Temperature, on the machines that could not show it

      On Windows the deck was asking somewhere it is not allowed to look: that reading lives behind a namespace that needs administrator, so it failed for everybody and the section never appeared. It reads a performance counter now, which needs nothing.

      On Apple Silicon there is no command that ships with macOS which prints a temperature at all — the sensors are behind an interface only native code can reach. The deck fetches a small signed tool for it, verified against the checksum its release publishes, in the background and only on the Macs that need it. You do not have to install anything. AGENTS_DECK_NO_DOWNLOAD=1 turns that off.

      A machine with no sensor still shows no section, which includes every virtual machine. Nothing is drawn that was not measured.

    • The terminal goes quiet when there is nothing happening

      The dot at the bottom blinked every 800ms for as long as the deck ran, which is what a terminal does while it is working — so a deck that had finished in a second looked like one that never finished.

      It now moves only while something actually is: a job still running, or hooks that cannot find the deck. Otherwise it is drawn once and left alone, and it says what the job is rather than just blinking. A step that takes more than three seconds shows how long it has been going, which is the whole of "is this stuck".

      And a machine with no Claude Code installed stops being told about it every few seconds — that one is said once now, on its own line instead of across the status line.

  83. ccdeck 3.0.0

    Release on GitHub

    • The machine panel now shows what it DID, not just what it is

      Click any section of the machine panel — Cores, Memory, Load average, Thermal — and it opens a chart of what that reading has done since the deck started.

      The panel could always tell you the machine is busy now. It could not tell you whether it got hot while that three-hour build was running, or how deep the queue went while you were away, and those are the questions you actually have afterwards.

      Thermal is new as well. Where the machine will give degrees, it gives degrees; on a Mac it also reports whether the CPU is being held back to cool down, which is the consequence a temperature has to be interpreted into anyway. Nothing is drawn that was not measured — a machine with no sensor gets no section at all, rather than a zero.

    • The whole process list, not just the busiest eight

      "more" beside Busiest processes opens the full list the deck is watching — around fifty processes rather than eight — with the pid and the untruncated name.

      This closes a gap. The panel's eight rows are the busiest, so sorting them by name only reorders those eight: "is my test runner still going" could not be answered if the test runner was not already on screen. Now it can.

      It is deliberately not a task manager. Nothing here ends a process; Activity Monitor and Task Manager are better at that and it is not a thing this deck should own.

    • Process names in Cyrillic, Greek or with accents read correctly

      An application named Яндекс Музыка was showing up as M-PM-/M-PM-=M-PM-4M-PM-5… in the process list, and so was every other name the deck could not spell in plain ASCII.

      The deck was forcing a fixed locale on the commands it runs, to guarantee that a decimal point stays a point on a machine set to German or Russian — and that also forced the character set. It forces only the number format now. Your own character set is left alone, which is what makes the name arrive intact.

    • The text you copy to share accounts is a third of its size

      Sharing three accounts used to produce 6168 characters. It is now 1896.

      Most of that text was never the credentials — two OAuth tokens are about two hundred characters between them, and the rest was the envelope, whose field names repeated in full for every account added. So the saving grows with the number of accounts rather than shrinking.

      A blob you copied before this still imports until it expires. One made now cannot be read by a deck older than this version — that is the one thing in this release that older decks cannot follow.

  84. ccdeck 1.48.0

    Release on GitHub

    • Browser Watch — see what a program opened while you were away

      Browser Watch is new, on the window's right edge (or press B). It watches the browsers on this machine and tells you when a program — an extension, an agent, a command — opened pages while nobody was touching the browser.

      Usually that is your own agent doing what you asked, and the panel says so rather than crying intrusion. What it gives you is the evidence: which pages, in which browser, at what time, with every address written out in full.

      It is off until you switch it on, and nothing leaves this machine. It reads a copy of the browser's own history and only pages newer than the moment the deck started — never anything from before, never cookies, never saved passwords. Open ⚙ inside the panel and "What Browser Watch can access" says exactly what it reads, keeps and sends.

      When it finds something, its button shows a count. You can dismiss a finding once you have looked at it and it stays gone, while the log file on disk keeps the record. On a Mac it can also close the tab it found, or quit the browser.

    • Move all your accounts to another machine in one paste

      Sharing accounts between two decks used to be one account at a time, and step four of six is where people stop — leaving the second deck half set up with nothing saying so.

      Pick the accounts you want, copy one blob, paste it into the other deck. The import adds what is missing, leaves what already works alone, heals an account whose token has died, and tells you which of those happened to each one.

      The blob carries real credentials, so it expires ten minutes after you make it and the deck refuses an expired one before it unwraps anything.

  85. ccdeck 1.47.0

    Release on GitHub

    • The top bar goes quiet when everything is fine

      The green "live" pill used to sit up there permanently to tell you nothing was broken. It is gone while things are working.

      You will still see a pill when it matters: amber when you pause the canvas, with how many events are waiting, and red when the deck loses its connection to the server. No pill means all is well.

    • The browser tab tells you when the connection drops

      The little icon in the tab has always shown what your sessions are doing — grey when it is quiet, blue when something is working, amber when a session is waiting on you.

      It could not say the one thing that matters most: that the deck has stopped hearing from the server. Until now it just kept showing whatever it had last seen. It turns into a broken red ring instead, so you can spot it from another tab without switching over.

  86. ccdeck 1.46.1

    Release on GitHub

    • Pick a volume and a sound for each of the two tones

      Open Settings › Sounds, or press V. There are two tones — one when a turn finishes, one when Claude is waiting for you — and each has its own volume and its own sound, six to choose from. Press "Hear it" to try one straight away, without waiting for a real turn.

      The two lists are separate on purpose, so you can never end up with both tones sounding the same. A finish tone always falls; an asking tone always rises. That is how you tell them apart without looking at the screen.

      M still turns the sound on and off from anywhere.

    • This box is new

      After an update, the deck tells you what changed — once, and only when there is something worth telling. Most updates have nothing to say and you will see nothing at all.

      Click the version at the top of the deck to read it again whenever you like.

  87. ccdeck 1.45.0

    Release on GitHub

    • The deck no longer puts anything in your settings.json

      It used to add a hook there so Claude Code would play a sound when a turn ended. That entry is removed the first time you start this version, and any sound hook you wrote yourself is put back exactly where you had it. Nothing else in that file is touched. The deck makes the sound itself now — which is also why you finally hear one when a Codex turn ends, not just a Claude one.