Changelog

DevThrottle ships continuously. The authoritative, always-current changelog is the GitHub releases feed, where every version lists its merged changes. Highlights of the recent line:

v2.37.0 - November 7, 2026

No machine should stop on a full Claude account while another account has room, and if one is heading that way you now hear about it every hour until it is fixed, not once.

  • A warning that keeps going until it is fixed. When a machine is on an account at 80% of a limit, or the forecast says it reaches 97% within 12 hours, and the machine holds no sign-in it could switch to, you get a phone notification every hour, an email whose subject names the machine and the hours left, and a bar across the top of every Cockpit, Director and phone screen. At night the phone stays quiet until the account is past 90%. The bar is yellow, and turns red only at 97%. It stops the moment the machine can switch.
  • A coverage grid on the Licenses page. One row per machine, one column per paid account, saying whether that machine holds a fresh sign-in for that account. A missing sign-in is yellow at any usage level, and also appears as one quiet line in the daily report.
  • A daily license fire drill. Once a day the Gateway checks that every machine holds a fresh sign-in for every paid account, and runs one real switch out and back on a machine you choose. The result is a line in the daily report, and a failure raises the hourly warning. The drill does nothing until you choose its machine.
  • Sign-ins are kept and renewed. Anything that would drop or overwrite a sign-in a machine holds now refuses, or keeps the old one as a spare. Every sign-in is renewed seven days before it ends, and a failed renewal raises a warning and is tried again every day. When claude.ai asks a browser to sign in again, cc-devthrottle license reauth reads the code from the account's own mailbox and types it in, after checking the page names the right account.
  • See how hard each machine is working. A memory and processor meter in the Director's toolbar, a banner when a machine is short, capacity on the Fleet and Machines pages, and cc-devthrottle machine diagnose to say what made a machine slow at a given time.
  • Your inbox for factories. A factory's messages reach a Your inbox screen on the phone and in the Cockpit, with an unread count, and the 08:00 factory email is replaced by one Your inbox message per factory with news.
  • Also in this release. The Mission button in the Director; a held spoken message to a factory is never dropped by the daily clean-up; a 7-day Pro trial for hosted accounts at their first Director, off by default; and every build job now has a time limit.

v2.36.1 - November 6, 2026

On a Mac, the permission dialogs stop coming back after every update.

  • Mac permissions are granted once. Every Mac build is now signed with one unchanging identity, so a permission you grant stays granted across updates. Expect one last round of dialogs when you install this release. The launcher and the setup command line are signed too.
  • A Mac Director started from the desktop finds your tools. It puts the usual tool folders back on the search path its sessions inherit, and starts sessions in its own folder instead of the root of the disk.
  • Also in this release. Close can be offered for a session that has done work; factories can take work through their own inbox; a Mission carries a link to its document; and the idle rescan of every repository runs once an hour instead of every five minutes.

v2.35.1 - November 5, 2026

Any of your machines can now switch to any of your Claude accounts, and the Mac Director no longer crashes when it starts a background command.

  • Any machine can use any of your accounts. Every machine now offers its browser profiles to help sign other machines in to your Claude accounts. Before, this was off unless you turned it on by hand, so a machine could only switch between the accounts it was already signed in to. When the Director starts, and once a day after that, it checks each browser profile on the machine to see which claude.ai account it is signed in to. That can briefly start a stopped browser or open a claude.ai tab in a running one. To turn it off on a machine, set "offerApprovers": false under licenseSwitching in that machine's config.json.
  • The Mac Director no longer crashes when it runs a command. macOS could stop the Director, and every session in it, while it started a background command such as a git read. The Director now starts commands in a way that cannot trigger that crash.
  • Also in this release. The Licenses page no longer shows an account as not known when Claude reports only a weekly limit and no 5-hour window, and no longer reports a license problem for a machine whose spare account has room again before its current account is expected to run out. When every worktree slot for a repository is in use, a new session is refused straight away with the reason, instead of after a long wait. The help assistant and the public documentation describe DevThrottle correctly. An install into a folder of its own with --root no longer changes the machine's Start Menu shortcut, PATH or app menu.

v2.35.0 - November 4, 2026

DevThrottle now updates from devthrottle.com. This is the last release your machine fetches from GitHub; every update after it comes from our own download server.

  • Updates come from devthrottle.com. Once this release is installed, the Director, the launcher, the Gateway, the setup wizard and command line, and the tools all look for new releases on devthrottle.com and download every file from there. Nothing reads GitHub to update any more.
  • Each release is checked before it is used. The release's file list must match the version devthrottle.com names, and every download is checked against the release's fingerprints, as before.
  • A clear message when the download server cannot be reached. An update check that cannot reach devthrottle.com says so and names the address it tried. It never claims you are up to date.
  • One-line installers on devthrottle.com. The Mac and Linux install commands are now curl -fsSL https://devthrottle.com/install-mac.sh | bash and curl -fsSL https://devthrottle.com/install-linux.sh | bash, and the scripts themselves download from devthrottle.com.
  • Also in this release. Nothing to do on your side: your machine installs this release the usual way, and from then on it updates from devthrottle.com by itself. A test install into a folder of its own (--root) no longer changes the machine's Start Menu shortcut or PATH.

v2.34.0 - November 3, 2026

Every DevThrottle release now lives in full on our own download server, ready for downloads and updates to move off GitHub.

  • Every release on our own download server. Each release now copies every file it ships - the Director, the launcher, the Gateway, the Cockpit, the mobile app, the setup wizard and command line, ffmpeg, Python and the tools - to devthrottle.com, in a folder of its own for each version. Each file is downloaded back and checked against the release's fingerprints before the release is published, and a release that cannot reach the download server is stopped rather than published without it.
  • One address for downloads. devthrottle.com/download/files now serves those files. The Download button on devthrottle.com works exactly as before.
  • Also in this release. Nothing changes on your machine yet. Updates still come the way they always have; a later release switches every part of DevThrottle to update from devthrottle.com.

v2.33.0 - November 3, 2026

Switching between sessions in the Director is fast again, and git in your worktrees can no longer be left locked.

  • Faster session switching. Clicking from one session to another no longer waits on git. Each switch used to start a git status and a network fetch for the Source Control page on the screen's own thread, which cost about two seconds per switch even when you were looking at the Terminal tab. The Source Control page now does its git work in the background, and only when you open it.
  • No more idle freezes. The Source Control page kept checking git every 15 and 30 seconds all day, even while it was hidden. It now checks only while it is on screen.
  • No more stuck git locks. The Director's background git checks no longer take git's optional lock, so a check that is cut short can no longer leave an index.lock file behind that made every later commit, pull or checkout in that folder fail with "File exists".
  • Also in this release.
    • Voice sessions recover by themselves after a slow spell at the model host: a narration that came back with no words is now retried automatically instead of staying silent until you press a button.
    • A factory Boss can start a seat of its own factory with cc-devthrottle factory seat start. The seat runs from the published definition with its full kit, the Boss owns it, and it hands back when finished.
    • Every Boss is now told by the Gateway, on every start, that it directs the work rather than doing it, and a scheduled Boss starts only work that can come back before its shift ends.
    • The release script no longer stops halfway when git prints a harmless warning, and its download link now points at the right address.

v2.32.0 - October 27, 2026

A machine left on a full account now tells you at once, the login you replace by hand is kept as a spare, and sessions stopped on a usage limit carry on by themselves after a switch. Factory pages lead with why each factory exists and what it needs from you, and there is one factory email a day.

  • A machine stuck on a full account is loud. When an account reaches its limit and a machine on it has no sign-in for any account with room, you get one email, one push notification and one banner line naming the machine, the account it is stuck on and the account it needs. Nothing more is sent while it stays stuck, and the alarm closes by itself when the machine moves off the account or the account resets. It stays quiet while DevThrottle is already signing the machine in for you, and speaks up if that sign-in gets no answer.
  • An early warning at 80%. When the account in use passes 80% of either its five-hour or its weekly limit, and a machine on it could not switch to an account with room, you are warned before it runs out. One machine gets one alert: the warning gives way to the stuck-machine alarm if the account then fills up.
  • A login you replace is kept as a spare. cc-devthrottle license sign-in <email> --make-active signs in a new account and keeps the one it replaces as a spare, instead of overwriting it. A /login typed inside a Claude Code session is covered too: the Director keeps a copy of the active sign-in and moves it to a spare when another account takes its place. If the replaced login cannot be kept, the sign-in is refused with the reason and nothing is changed.
  • Sessions stopped on a usage limit carry on. After a switch to an account that has been checked and has room, the Director sends one "continue" to each Claude Code session whose last turn ended on a usage-limit reply. Each limit reply is answered once, and a session you have typed into since is left alone.
  • The approver check works, and says why when it does not. The Director's checks that an approver account can approve sign-ins failed every time since 19 October. They now run, leave any browser profile another session is driving untouched, and a failed check shows its reason on the machine's readiness line on the Licenses page. An account a machine needs that no approver can approve now raises one alarm with the one thing to do.
  • A factory page answers your questions in order. The Overview opens with the Boss's why, goal and limits, then open problems and failures, "What we are doing now" (the newest document the Boss wrote), "Needs you" (which says "Nothing today." when nothing waits), and every seat with when it runs and how its last run ended. The drawing moves to the Floor tab, linked from the end of the Overview. Each factory's page also shows why it exists under its name, and a goal number nobody has posted says "Not measured", never 0.
  • One factory email a day, at 08:00. It lists everything the factories are waiting on you for, each linked to its item, and one line for every factory saying what it did in the last 24 hours. The 16:00 and midnight emails are gone; a new problem shows first in the next morning's email.
  • Scheduled factory runs never stop on a permission question. A session a schedule or trigger starts in a factory loads no ask or deny rules, while keeping the folder's instructions, skills, servers, hooks, environment and output style.
  • Also in this release.
    • A later run can read your answers to a dev report: cc-dev-reports answers shows each question with the option you chose, your comment and the time, and whether a run has acted on it. Answers to a report whose session has ended are now saved instead of refused.
    • The recording bars in the Cockpit and the phone app now move like the Director's: a real nine-band display calibrated to normal speech, so a working microphone no longer looks dead. Every microphone meter, including Test microphone, Test transcription and the phone recorder, reads on the same scale. The dictation dialog's Pause button now has a name a screen reader can say.
    • The hosted service is deployed more safely: a new version must start and answer health checks before it goes live, a deploy refuses to run onto a site that is already down, and a version that never comes up is rolled back to the last good one automatically.
    • A boss.md heading is recognised with or without "The", in any case, so "## Why" and "## Goal" no longer show "not set yet".
    • Test fixes: the Mac setup tests no longer touch the machine's own installed launcher, and the license tests no longer depend on the day they run.

v2.31.1 - October 25, 2026

A fresh install on Windows now finishes cleanly, instead of ending on "Setup finished with problems".

  • A clean Windows install ends on a clean Complete screen. The v2.31.0 installer told a brand-new user "Tools did not install - please report this" (Archive asset requires extraction), even though nothing was wrong. The installer places the Director and the launcher, and the Director sets up the command line tools the first time it opens, as it always has. The installer no longer reports that as a failure.

v2.31.0 - October 25, 2026

Everything that needs your answer now lives in one place, Alerts, on the phone and in the Cockpit. DevThrottle runs properly on a Mac, a scheduled run that cannot work says so at once, and the Director sets up GitHub for you.

  • Alerts. One bell in the header of the phone app and the Cockpit, with a red count of the things that need your answer: a Director restart request, a secret transfer, or a session asking to message another session. The phone opens Alerts as a full screen of its own. Each request is a card with the question in plain words, who asked and why, and its Approve/Deny (or Accept/Decline) buttons right on the card. An answer takes one tap, and a restart still asks you to confirm. Anything already answered moves down to Earlier, folded away, where an X clears it and Clear all clears the lot. Clearing is remembered on the Gateway, so it holds on every device and after a reload. A failed answer shows in red. A push notification opens the app straight onto its alert. The request cards that used to sit inside the session list, and could not be cleared, are gone.
  • DevThrottle on a Mac. The app is called DevThrottle and installs to /Applications. Copy and paste in the terminal work with Cmd+C, Cmd+V and Cmd+A, with an Edit menu, and Copy now comes first in every terminal menu. The command line tools are on the path for unattended shells too, because the installer writes its path settings to .zshenv.
  • A schedule that cannot work says so. A scheduled run whose prompt never reached the agent, whose seat is at its usage or spend limit, or that is stuck, is now a failed run at once, never a "started" one. The schedule's owner is told by default, in one plain sentence. A scheduled Claude Code session never waits on the folder-trust question. A schedule's folder is checked on its machine when you save the schedule. The owner can see every account's schedule runs.
  • The Director sets up GitHub. It finds git and the GitHub command line, installs them when they are missing, signs the GitHub command line in, and shows on Home whether GitHub is connected.
  • Sessions come back after a crash. When a Director is killed or crashes, its sessions are offered back the next time it starts.
  • Also in this release.
    • Update now no longer ends with "the launcher is too old".
    • The Cockpit shows every session on every machine, and a session started from another machine is linked under the session that started it.
    • Typing and pasting into a session from the phone or the Cockpit behave as they do at the keyboard. Prompts get past an agent's usage-limit dialog, and no input is dropped silently.
    • Pi sessions are handled in the terminal as well as the other agents, and report their state the same way.
    • A rule in a factory that would refuse an action outright becomes a question for you instead: the owner's word is final, and a permission prompt shows as needs-you.
    • Factory attachments are stored once and can be removed when no longer needed. Factory working documents keep their newest three versions.
    • The setup commands find a cc-* tool where it actually is, and say so plainly when a tool has no download. The shared Python tools bundle shows as a component of its own.
    • The Chat answers each poll from an index of the conversation, one poll at a time.
    • History retention deletes only the expired sessions' turns, so it no longer holds the store while it reads every row.
    • The hosted Gateway is faster under load: account settings and active device keys are kept in memory, the plan lease is kept, and the thread pool starts larger.
    • On the Cockpit's Directors page, machine rows line up with the table columns again.
    • errors list and errors groups name the account on the scope line when you pass --email or --account.
    • New remote terminal input routes and on-demand terminal conformance checks, for testing how each agent receives input.
    • The test suites run on Linux and macOS as well as Windows, and the build installs a named .NET SDK version so a broken "latest" download can no longer stop it.

v2.30.0 - October 23, 2026

A session's request to message another session can now be answered from your phone, the Chat opens fast on long conversations, and a factory's checks can read the factory's own records on the Gateway.

  • Answer message requests from your phone. When a session asks for permission to message another session, your phone gets one notification and you can approve or refuse it there. The request shows on the Home screen and on its own page, with who is asking, who they want to reach, and the reason in the session's own words. The notification on a locked screen shows only the two session numbers, never the reason or a name. A request you answer at the Director or in the Cockpit disappears from the phone by itself.
  • The Chat opens fast on long conversations. The Chat, in the Cockpit and on the phone, now opens on the last ten turns instead of loading the whole conversation. Scroll up, or press Load earlier messages, to bring in the ten before. While it loads it says "Loading the conversation...", and picking another session in the Cockpit clears the previous conversation at once.
  • Factory checks can read the factory's records. Every document a factory keeps on the Gateway whose name begins with check-inputs/ is handed to each of that factory's checks as a read-only file in the folder named by CC_CHECK_INPUTS_DIR. A factory can now keep the files its checks decide from on the Gateway instead of on one machine's disk. No credential is handed to a check, and a check whose inputs cannot be fetched does not run, so it never decides from nothing.
  • Also in this release. The command line reference (docs/cli-reference.md) has a new Factory check inputs section describing the folder, the size limit and what a check receives.

v2.29.0 - October 21, 2026

Every factory now has a Boss that runs it, Factories come with the Pro plan, switching to a spare Claude account works on every machine without a hand-edited setting, and a prompt can now be added to a draft you have started.

  • Every factory has a Boss. A factory cannot be saved, imported, published or registered without a Boss seat. The Boss publishes changes to its own factory itself, with no trip to the Cockpit; a change to the Boss's own seat still needs your approval, given in your own words.
  • Talk to a factory's Boss directly. A Boss you open yourself, to talk with it, now sits inside its factory, with the factory's memory, journals, triggers and schedules. Only the Boss changes when the factory's seats start.
  • Factories come with Pro. On the hosted Gateway, Factories are on for accounts on the Pro plan. An account without them sees an upgrade page in the Cockpit with a link to Pro and a Try again button, instead of a page that only says Factories are off.
  • License switching works on every machine by default. A machine that holds a spare Claude account now switches to it at the limit without anyone editing a settings file. You can still keep a machine out by turning it off with the new cc-devthrottle license switching off command, and status and on do what they say. A machine that holds spares but has switching off now says so on its card on the Licenses page, and a switch records every machine it did not move, so a missed machine can no longer look switched.
  • Add to a draft, and let agents press Enter and Escape. A prompt sent to a session whose box already holds text is now typed after that text instead of being refused, so you can start a sentence and let it be finished for you. Agents can press Enter in another session, as the phone's Enter key does, and Escape to clear a stuck session or close a dialog, with the new cc-devthrottle session enter and session escape. The Fleet Manager may press them in any session; every other session only in sessions it started or owns, and every press is logged. A prompt still waits while you are typing, so your half-finished sentence is never sent with it.
  • Also in this release. A change that widens what a factory's Boss may do - its grants, or the rule sets it names - now needs your approval too, not only a change to its own seat. CC Recorder on the phone can share a recording's audio, every part in order, to OneDrive, email or Teams; the Gateway deletes the audio once it is transcribed, so this is the way to get a copy off the phone without a cable. The Gateway no longer fails with "unable to delete/modify user-function due to active statements" when two requests open the database at the same moment. A Pi session no longer misses something Pi said just before its turn was read. You can delete a factory once it is archived; its schedules and triggers go with it, and DevThrottle tells you which ones were deleted. When you set up a Director, your own account is the first choice and the team question is always asked, so a new machine can no longer join a team without you choosing it. A Director that is connected to the Gateway after it starts, which is every first run, now gives its sessions their Gateway key again, so those sessions can reach the fleet. Mail Desk, a preview that is off by default, can screen a Gmail mailbox as well as Outlook, and acts on the model's answer when the model gives no confidence score. cc-outlook calendar get, update, delete and respond work again, and calendar get shows the event instead of failing.

v2.28.0 - October 21, 2026

See which sessions are using up a Claude license, and plan what to stop so it lasts until the next one is free.

  • What is using the license. The Licenses page in the Cockpit has a new What is using it tab, and the command line has cc-devthrottle license sessions. Both show, for every session, how much of the account's weekly limit it is using right now, over the last four hours and so far, grouped by session, by the session that started it, or by Mission.
  • Make it last. Pick a time - the moment another account has room again, this account's weekly reset, or any time you choose - and DevThrottle tells you whether the license will last until then, how fast it may be used to get there, and which sessions to stop if it will not. Tick sessions on the tab, or use cc-devthrottle license plan --stop, to see what stopping them would change. It only suggests; nothing is ever stopped for you.
  • No paid plan. An account whose Claude plan has lapsed now says "No paid plan - renew it on claude.ai" instead of reading as out of date and asking you to sign in again, which could never help. DevThrottle will not switch a machine to such an account.
  • Also in this release. The weekly forecast now works from this week's average use, so it no longer says the weekly limit will not run out while the average says it will, and it keeps its history through a Gateway restart. The Fleet Manager knows how to answer "what should we cut to make this license last", and brings its suggestion to you as a decision rather than acting on it. Buttons in the desktop app have their label centred, and a blue button stays blue under the pointer instead of turning grey. On the What is using it tab you can enter what an account's plan costs a month, and the tab then shows each session's use in dollars.

v2.24.0 - October 18, 2026

License switching now keeps every machine ready to move before an account runs out, says loudly and in one place when something stops it, and lets you tidy up machines that are gone. The launcher brings a crashed Director back by itself, a busy Director can install an update through Smart Restart, and named Director instances are safer and quicker to set up. Pi sessions can now run in API mode, as an opt-in choice when you start them.

  • License switching keeps machines ready, and moves them when it counts. These changes apply only where license switching is turned on (licenseSwitching.enabled in a Director's config.json, off by default). Every minute the Gateway works out, for each machine, which account it would move to next and whether it is ready to, and the Licenses page shows that on the machine's line. A machine that is not ready is signed in to that account automatically, through the same Add a spare and Renew now steps you would use by hand, and the Licenses log marks the sign-in as automatic. A failed automatic sign-in is tried again after 2, 5, 15 and 30 minutes, then hourly. When an account is nearly full, every ready machine moves at once to the best account it is ready for, and one machine that is not ready no longer holds the others back. The active sign-in is also renewed when no Claude Code session is using it, so it does not quietly expire on an idle machine.
  • One license alarm, loud until it is fixed. A license problem now opens an alarm that shows as a red banner on every page of the Cockpit, sends one push and one email to the owner, and closes by itself once the problem is gone. On the phone the alarm arrives as the push, with no banner, so the app stays usable. It is raised when an account in use is at 80% or more and a machine on it is not ready to move; when an account in use is at 80% or more and no other account has room, as one alarm for the account that says which account has room again first and when; when a machine's reports are refused; when a machine has sent nothing for more than ten minutes; and when an account's approver cannot approve. Each alarm names the one thing to do. The push names only the machine and the kind of problem, never an account address. An alarm that comes back within six hours of closing is shown again but sends no second email or push, and its banner line says how many times in a row it has come back.
  • Standing approvers you can see and trust. The Licenses page has a usable approver form: pick lists, the browser profiles read from that machine's own Director, and a Save that says what is missing. Each approver row shows who set it, its health, why a sign-in cannot reach it and the one thing to do. The Director that approves checks each of its approvers once at start and once a day, by opening a real approval page and pressing nothing, and an approver you have just set is checked within ten minutes while that Director is running. The new cc-devthrottle license check-approver command runs the same check by hand. Each approval relayed for a renewal is written to the Licenses log. A machine can also offer its own browser profiles as approvers with the setting licenseSwitching.offerApprovers, which is off by default; with it off, nothing new is registered and only the approvers already set are checked.
  • Forget this machine. The owner can remove a machine that has been renamed or taken out of service from the Licenses page. It is offered only for a machine whose reports are refused or that has stopped reporting, and never while a sign-in on it is under way. Forgetting it closes its alarms, ends any switch it can never answer, removes its approvers and keeps its earlier log rows. A forgotten machine that reports again comes back.
  • The launcher restarts a Director that crashed. The installed launcher now watches its Director and starts it again when it ends without a clean shutdown, so a crash no longer leaves a machine down until someone notices. A deliberate quit, an update and Smart Restart are left alone. After five restarts in ten minutes it stops trying and says so.
  • A busy Director can install its update. An update waiting for a Director that always has sessions running now offers Smart Restart: every session hands over, and the Director restarts and installs the update as it starts. The plain install is still never offered while sessions run, and the Cockpit says the same.
  • API mode for Pi. New Session has a Connection choice, Terminal or API mode, on the Cockpit, the phone and the desktop Director. It is offered only for an agent that supports it, which is Pi today. Terminal stays the default, and cc-devthrottle session spawn --connection api does the same from the command line. In API mode the Director runs Pi through Pi's own protocol instead of a terminal: the Chat shows the conversation live, each prompt carries a receipt that says whether it was queued (with its place in line), delivered or refused and why, and a session interrupted by a crash continues in API mode. Take the wheel opens the real terminal on the same conversation, and Hand back returns it to API mode, with prompts sent in the meantime written in order. A Director older than v2.23.0 is refused an API-mode session rather than quietly starting a terminal. Sessions you start in Terminal are unchanged.
  • Also in this release. Named Director instances: Create named director instance can copy settings from an existing instance, such as the Gateway address, agent settings, folders, repositories, agent templates and dictation corrections. The Gateway key is never copied, so the new instance signs in once. Two Directors can no longer run on the same data folder, from any program file, and an --instance name that is not registered refuses to start instead of quietly running as the default. A failed launcher self-update no longer leaves the machine without a launcher. Codex sessions no longer stop on Codex's update offer, or on trusting a folder that is already trusted for Claude Code. A session started by another session, or a factory seat, is refused before it starts when Claude Code would stop on its one-time Bypass Permissions warning or on its "Teach auto mode about your environment?" question, and the refusal names what to do. The Director never answers either for you, and sessions you open yourself are unchanged. Voice: switching voice on for a waiting session now narrates the stop in front of it, and a brand-new voice session says there is nothing to narrate instead of counting up to "Voice did not arrive". Chat links: plain Linux and macOS paths such as /home/name/report.pdf are now clickable, in the terminal and in the Chat alike. The phone's file viewer opens a named folder as a listing whose files open in place, as the Cockpit does. Session file access guards the real home folder even when HOME is redirected, applies when a session works in the home folder itself, and refuses the macOS keychain folders. Where the factory area is turned on, the Factories screen leads with the factories, published first and drafts after, each with its seat count, next start and last run, and the Factory Manager moves to its own tab. Factory pages open on a drawing of what the factory does: a lane per seat, from how it starts through the steps its definition lists to how it ends, with the newest run painted on it, and a factory definition may now list its steps. cc-devthrottle session review starts a reviewer session and, when a seat cannot work (a usage or spend limit, a refused model, a signed-out agent), moves on to the next one by itself, saying which seat is reviewing and why. On macOS and Linux, a Director started on a test data root no longer rewrites the tool links in your own ~/.local/bin, so deleting that root no longer breaks the command line tools for every session. Linux: the Tools box shows tools as available whatever PATH the Director was started with, and cc-devthrottle setup repair removes a broken launcher unit that restarted for ever. Groundwork for Mail Desk, which screens a mailbox for you: it is off for every account and is turned on for one account at a time by an administrator, so nothing changes for you in this release.

The Gateway's side of the license changes, API mode, the voice fixes, the Factories screen and its drawings, the Chat's link detection and the phone's folder listing are in the hosted Gateway. The download carries the Director's side of license switching and API mode, the launcher's crash restart and self-update fix, Smart Restart for a held update, the named instance changes, the start-up question refusals, the reviewer command, the terminal's link detection, the file access guards and the macOS and Linux tool fixes.

v2.19.0 - October 13, 2026

Desktop dictation now works on a Linux Director, every schedule can be paused in one tap and the whole scheduler can be paused and resumed exactly as it was, every scheduled run says how it went, and a machine holding several Claude accounts can be switched to a spare when one runs out, as an opt-in setting.

  • Desktop dictation on Linux. The Dictate dialog in a Director on Linux now records from your microphone and transcribes exactly as it does on Windows. It records through PipeWire when that is installed, where you can pick any input, and otherwise through ALSA's default input. A machine with neither is told which package to install. On a Mac the dialog says dictation is not available there yet.
  • Pause everything. The Schedule page and the Factories screen in the Cockpit have one switch that stops every schedule from starting, and a banner shows while it is on, so a paused fleet never looks like a broken one. Resuming changes no schedule: each is exactly as active or as paused as it was. Pausing stops new runs from starting; it does not stop a session that is already running, and no missed run is recorded for a time that passed while everything was paused.
  • Pause one schedule where you read it. Each schedule on a factory's Seats tab has a Pause or Resume button beside it, and the schedule editor has an Active or Paused control, so editing a paused schedule never resumes it by accident. The state is called Paused everywhere, in place of Disabled.
  • Every scheduled run says how it went. A scheduled session ends by calling cc-devthrottle run result ok or cc-devthrottle run result problem "<why>", and a run whose session ended without saying is recorded as "did not report". cc-devthrottle run problems lists the open problems, and cc-devthrottle run resolve clears one with a reason that is kept.
  • License switching, off by default. A machine that holds more than one Claude account can now be moved to a spare when the active one runs out. With licenseSwitching.enabled set to true in a Director's config.json, that Director reports each account's 5-hour and weekly use, the Gateway checks once a minute and sends a switch when one is due, and the new Licenses page in the Cockpit shows the accounts, each machine's active account, the switch log and a Switch now button. The setting is off unless you turn it on, and with it off the Licenses page has nothing to show.
  • Claude account usage and sign-ins from the command line. cc-devthrottle license usage prints each held account's 5-hour and weekly use and when each resets. cc-devthrottle license sign-in adds a spare account by signing it in through one of the Director's browser profiles, and cc-devthrottle license renew signs in again every account whose sign-in ends within five days.
  • Also in this release. A session with a voice clip ready is no longer marked "retrying" on the phone. Before, a failed read after the clip was made could take the play button off the row and drop the session out of the voice queue. Factories, where the factory area is turned on: every seat on the Seats tab says whether it closes itself, from how its recent scheduled runs ended, and a factory with a seat that does not is flagged on the list, its card and its page. A factory's page lists its open problems, each with Handle the issue, which opens a talk with the factory's boss, and Resolve, which asks for a one-line reason. The Seats tab is grouped by shift, and the Schedule page shows each schedule's shift and warns when a run is due close to the end of one. The Factory Manager, where the factory area is turned on: one standing session can be set over all of an account's factories with cc-devthrottle factory manager set, and the Factories screen shows it on a card with a talk button. A problem in a factory that has no boss goes to the Factory Manager. The factory email, off by default: the Gateway can send a report at 08:00 and checks at 16:00 and midnight about your factories' scheduled runs, and keeps each one as it was sent. Turn it on with cc-devthrottle factory email on; cc-devthrottle factory email list and show read the kept ones, and a factory's page lists the emails that covered it. cc-devthrottle license refresh renews a spare account's key when it has under an hour left. The Accounts dialog is gone from the Director's Developer menu. cc-devthrottle license holds and switches accounts now. The old accounts file is left where it is and is no longer read. The release process: the test run before a release is much shorter, the largest suite going from about two hours to about nine minutes, and a test that depends on the machine it runs on - a sleep, the real clock, a real process - is refused before it can decide a release.

The scheduler pause, the run results, the Licenses page and the once-a-minute license check, the factory email, the factory page's open problems, the Factory Manager, the shifts, the seat markers and the voice clip fix are in the hosted Gateway. The download carries desktop dictation on Linux, the Director's license reporting and switching, the cc-devthrottle run, cc-devthrottle license, cc-devthrottle factory email and cc-devthrottle factory manager commands, and the removal of the Accounts dialog.

v2.16.0 - October 5, 2026

When you correct the Fleet Manager, the correction is kept as a lesson on the Gateway, and every Fleet Manager after it is given that lesson.

  • Fleet Manager lessons. A correction you gave the Fleet Manager used to live only in that one conversation, so it was lost at the next restart, move or compaction. Now it is kept as a lesson, in your words and with the date, and stored on the Gateway rather than on one machine. Every confirmed lesson is given to the Fleet Manager when it starts, when it is restarted or moved, when you mark a session as the Fleet Manager by hand, and after a compaction on the agents that have a session-start hook.
  • Two ways to keep a lesson. On the Cockpit's Fleet Manager page, press "That was a mistake", type the correction and press Keep: it is stored at once, confirmed, and the running Fleet Manager is told at its next free moment. The Fleet Manager can also keep one itself with cc-devthrottle fleet lesson "<your words>"; a lesson kept that way waits for you to confirm it with one press before it is given to a later Fleet Manager.
  • Lessons and preferences on one list. The Cockpit's Fleet Manager page shows your lessons first, then your standing preferences, each with the date and who kept it, and for a lesson whether it is confirmed. You can confirm a lesson, and edit or remove a lesson or a preference, there. An account holds at most 20 confirmed lessons of at most 500 characters each; nothing is ever shortened or pushed out.
  • Also in this release. cc-devthrottle fleet preferences --kind lesson lists the lessons, and cc-devthrottle fleet digest prints them first, before the sessions. After a compaction the lessons are put back by the session-start hook, on the agents that have one; on the other agents the Fleet Manager reads them again with fleet digest, and the Fleet Manager's agent setting says which agents are which. When a Director reconnects to the Gateway, it now sends its sessions' keys before it lists its sessions, which closes the moment in which another machine could claim a session started while the connection was down. If a key cannot be read or is refused, the session is still listed and that moment stays open until the key reaches the Gateway.

The lessons, the Cockpit page and the Fleet Manager's new instructions are in the hosted Gateway. The download carries the cc-devthrottle fleet lesson command and the Director change that puts lessons back after a compaction.

v2.15.0 - October 5, 2026

You can let two of your sessions talk to each other, and a session that needs to talk to another one can ask you.

  • Message links. A session can normally message only the session that started it and the sessions it started. You can now let any two of your sessions talk: once, once with a reply, or as much as they need. Set it up from a session's menu in the Cockpit ("Let this session talk to..."), or with cc-devthrottle message link add. You never approve the messages themselves; the two sessions decide what to send. A link for as much as they need ends when either session ends or when you remove it.
  • A session can ask you for a link. When a message is refused, the session is told how to ask: cc-devthrottle message request <session> "why it needs to talk". You see a card at the top of the Sessions screen in the Cockpit with who is asking, whom it wants to talk to and its reason, and you answer with One message, One message and a reply, As much as they need, or No. The session hears your answer in its inbox. A session may have at most three requests waiting, and after a No it may not ask for the same thing again for an hour.
  • Also in this release. cc-devthrottle message link list and message link remove show and end the links you have set up. A Fleet Manager session that you have given the right to manage links can list and answer requests with cc-devthrottle message link requests and message link answer.

The links, the requests and the Cockpit screens are in the hosted Gateway and are already live there. The download carries the cc-devthrottle message commands that sessions use to ask, and that you can use from the command line.

v2.14.0 - October 4, 2026

The Director asks the Gateway for far less while it sits idle, and links in the terminal are drawn where they are and open exactly what is written.

  • The session list is read at most once every 30 seconds. Before, the full rescan every five minutes asked the Gateway for the whole list once per repository, so a machine with 75 repositories made 75 downloads of about 68 KB each time - about 80 MB an hour from one machine doing nothing.
  • Skills, workflows and injected text are downloaded only when they have changed. The Director still checks once a minute, but the Gateway now answers "not changed" with no body when the Director already holds the current copy. The first check after the Director starts is always a full download.
  • Links in the terminal are exact. A link on the second or later row of a wrapped line is underlined and clickable on the row it is on, not on the row above. An address is no longer cut short at a bracket or an apostrophe, and a piece of a path is no longer linked as a drive letter. Rows are joined into one line only where the text really wrapped.
  • The terminal honours the links a program marks itself. When a program such as Codex sends a link with its own address, the terminal uses that address exactly instead of guessing it from the text. When a link's text is not its address, hovering shows the full address and it is the first line of the click menu.
  • Also in this release. A file an agent names before writing it becomes a link once it exists: a path found missing is checked again after two seconds, the next time the terminal redraws. More kinds of path are recognised as links: home-folder paths, network paths, bare file names in the repository, and file positions written as :line 12 or (42,7). The chat view shows a link as it was written. A failed read of the skill list no longer removes every installed skill. The AI summaries on the Cockpit History page are removed; the page keeps its record of which session came from which. Narration clips are read from disk when played, and a clip at least 14 days old whose session is gone is removed.

v2.7.0 - September 18, 2026

Several sessions can now work on one repository at the same time, each in its own ready-made copy, and a copy is only cleared for reuse once its work has provably landed on the remote.

  • Pooled worktrees: a ready-made copy per session, cleared only when the work has landed. DevThrottle keeps a small pool of copies of a repository. A session takes a free one, works in it, and gives it back when it closes; a returned copy is reset and handed to the next session, so the build output in it stays warm. A copy is reset only when its work is proven to have landed: the copy is the one it claims to be, nothing is uncommitted or untracked, nothing of its own is sitting in a stash, and every commit in it is either on the freshly fetched default branch or is the same change as something that is. When git cannot prove it - a squash, a rebase, a merge git cannot compare - GitHub or Azure DevOps is asked whether a pull request carrying exactly those commits was merged into the default branch. A host can only turn "held" into "free", never the reverse. Anything unproven leaves the copy held: nothing in it is reset or deleted, and the reason is printed. Turn it on for a repository with cc-devthrottle worktree pool on --repo <path>. It is off by default, there is no machine-wide switch, and the default pool is four copies. The tool is cc-worktrees and it ships in the toolbelt on Windows, macOS and Linux. Tested end to end on Windows. One thing to know before turning it on: a git gc holds every copy in that repository's pool, including free ones, because it rewrites the record the proof depends on; cc-worktrees release <slot> --confirm-abandon gives them back, one at a time.
  • The Wingman tab: one screen to read a stop and answer it. The Now view says which session it is on the first line of every state, has one place to type with one sending button per state, and no longer carries Stop, Interrupt, Compact and Clear context directly under where you click answers. "Stopped at" is the real stopping time, taken from the Director's own record rather than a join key - which is why three sessions on two machines used to claim the same minute. A finished session has somewhere to type, a snoozed one says when it comes back and offers to wake it, the pill wears the session's own colour, and an answer that cannot be taken back says so and asks once.
  • Room for the report. The left rail and the queue dock collapse, both remembered per browser, and collapsing never hides the attention badge. A report has its own address at /report/{id} with nothing beside it, so a printed link opens the report rather than the Reports tab of a session the reader does not have. Export HTML saves exactly the bytes the Gateway serves for the version on screen.
  • Voice: whose session it is, and the clip belongs to the turn on screen. A session held by another session says so and offers nothing, and the banner claims only what the product does - the sessions you own. A narration that failed can be asked for again, while automatic paths still never re-attempt one. The rule that drops an old clip now fires on a state check rather than a sampled edge, so a quick turn can no longer slip past it and leave the phone playing the previous turn as though it were this one. A failed switch or generate stays on screen until it is retried instead of being wiped by the next poll.

v2.6.0 - September 18, 2026

One session now runs your fleet for you, and messages between sessions stop interrupting the work.

  • The Fleet Manager: one session you talk to that runs the rest. You tell it what you want. It starts the sessions that do the work, gives each one your words, watches them without you, and comes back with only three kinds of news: something is ready, something was found, or something needs your decision. It never does the work itself, so it is always free to talk. It replaces the Assistant on the Cockpit, on the phone and in Settings, it is pinned first in your session list with the sessions it started collected under it, and its news is held by the Gateway so a restart or a move to another machine loses none of it.
  • A message is a record, not an interruption. cc-devthrottle message send places the message in the other session's inbox and answersqueued; the session reads it with cc-devthrottle message inbox. A session may message only the session that started it and the sessions it started. When a session has finished its turn and its composer is genuinely empty, the Director rings one fixed doorbell line - and if anything you typed is sitting there, even three spaces, it waits for the next opportunity. A doorbell never ends a snooze you armed.
  • Passwords your sessions use but never see. cc-secrets ships in the toolbelt on Windows, macOS and Linux. You add a secret by hand on each machine and a session can then use it without the secret ever reaching the model. Adding, editing, removing and importing are for you only and are refused inside a session.
  • Linux: an app menu entry, and updates that work. Installing on Linux adds DevThrottle to the app menu with its icon, the command-line install finishes cleanly instead of failing at the last step, and a Linux Director now checks for updates, downloads its own build and can install it. Before this the check reported "up to date" every time.

v2.5.0 - September 17, 2026

Your sessions can now use a password without the model ever seeing it, and a Linux machine installs, appears in the app menu, and updates itself like the other platforms.

  • cc-secrets: passwords your sessions use but never see. cc-secrets is a new tool in the shipped toolbelt. You add a secret by hand on each machine, and a session can then use it without the secret ever reaching the model. cc-secrets run starts a command with the secret supplied on its input, in an environment variable, or to a password prompt, and removes every recognisable form of the secret from what comes back. cc-secrets login fills a login form in a browser profile the Director owns, after checking the page is on the site the secret belongs to. cc-secrets import moves a whole credentials file into the store, one entry per line, without printing any value, and run --with hands several entries to one command at once, such as a service key and the secret that goes with it. Values that are not secret, such as a host or an email address, can be stored as settings beside the secrets (add --setting, import --settings); cc-secrets get prints a setting, and a secret is never printed. cc-secrets editchanges an entry's user name, allowed site addresses, uses or agent access without re-entering its secret. Adding, editing, removing and importing are for you only and are refused inside a session. The store is one file per user per machine, readable by that user alone; every use checks this, and on macOS it also checks access control lists and refuses drives that ignore file ownership. Every use is written to an audit log, which never contains the secret. It runs on Windows, macOS and Linux.
  • Linux: an app menu entry, and updates that work. Installing on Linux now adds DevThrottle to the app menu, with its icon, so there is something to click. The command-line install finishes cleanly instead of failing at the last step, and uninstall removes the entry. A Linux Director now checks for updates, downloads its own build, and can install it. Before this release the check stopped before asking GitHub and reported "up to date" every time.
  • Fleet messages are queued, not typed. cc-devthrottle message send no longer types text into the other session's terminal. It places the message in that session's inbox and answers queued; the session reads it in full with the new cc-devthrottle message inbox, which marks it read. A session may message only the session that started it and the sessions it started, at most 6 messages an hour and 1 per recipient every 10 minutes. cc-devthrottle message ask has been removed.
  • Also in this release. The Cockpit has a Wingman tab on each session: every stop the Wingman judged, with the outcome, the colour it produced at the time, and why. Thecc-devthrottle command line is easier for agents to use: lists show full identifiers, names and paths instead of cutting them short, filters work the same with--json, empty results say count: 0, running it with no arguments shows the live state, and a wrong flag fails with the valid choices listed. Dictation: the ready sound no longer ends up in the transcribed audio, the recorder keeps listening for a quarter of a second after you press Send or Pause so your last word is not cut off, and the time the microphone took to start is logged and shown. The stored raw transcript is the speech model's full output on every path, as the transcription rules require. The Fleet Map draws the same ownership tree as the Sessions list, across machines, so a session started from another machine shows under the session that owns it. The Fleet Map keeps a colour legend on screen, and hovering a session dot now gives the same words as its colour. The Missions board no longer says "needs you" under a session that does not need you. Voice narration is no longer silenced when a verdict check fails. The Wingman now judges sessions owned by a Fleet Manager session, so the Fleet Manager can act on its verdicts; those sessions are still never read aloud to you. On Windows, the Director prepares a spare Director slot in the background the first time it starts after updating. No reinstall is needed.

v2.4.0 - September 16, 2026

The session list now tells you what every colour means, and the Wingman can tell a stop that needs you from one that is only reporting - as an opt-in setting, off by default.

  • What do the colours mean? The session list in the Cockpit and on the phone has a new link that opens a short legend: every colour a session can show, what the session is doing, and whether it is asking for you. The words come from the Gateway, next to the rules that decide the colours, so the legend and the dots always agree. If you ever see magenta, the legend says what that means too.
  • The Wingman says whether a stop needs you (opt-in, off by default). When a session stops, the Wingman can now read the screen and decide whether the stop needs you. With the account setting on: a stop that only reports finished work shows cyan, labelled Done or Report, and is not counted as needing you; a session that said it will carry on by itself shows purple, and turns red if it does not; while the Wingman is still reading a stop, the row is yellow; in the Cockpit a judged stop shows its options as buttons, with a This is wrong action for a verdict you disagree with; and a snooze that ends with nothing new comes back calm instead of red. Brand-new sessions stay green, labelled Ready, so a finished session never looks like a new one.
  • The launcher updates itself on Mac and Linux. Until now only Windows launchers updated themselves. From this release the launcher updates itself on every platform.
  • Also in this release. Voice mode names the right session when it speaks. When voice mode gives up on a spoken summary, the session no longer stays yellow: it asks for you instead. On Mac and Linux, cc-devthrottle setup looks for its commands in the right folder and downloads the setup tool built for that machine. The phone's Chat tab has its full screen back; answering a judged stop from its options is done from the Cockpit. A Director older than this release shows finished sessions in magenta until it updates.

v2.3.0 - September 15, 2026

You can now see every machine you own in one place, see which ones are behind the newest release, and update them from the Cockpit without walking over to the machine.

  • A Machines tab: every machine, its launcher and its Directors. The Directors page used to list Directors and nothing else. A machine whose Director was closed but whose launcher was still running did not appear at all, and there was no single place that showed every machine, its launcher and the Directors on it together. The page now opens on a Machines tab: one row per machine, with its launcher and how recently it was heard from, and the Directors on that machine listed underneath. Each launcher is described in plain words - connected, offline, or too old to be sent commands - and the last two say what to do about it. The Directors tab is the list you had before, with one change: the version column now says whether each Director is current or behind, and sorting by version puts the ones that are behind at the top.
  • The Gateway knows the newest release. Every Director used to check for new releases on its own and keep the answer to itself, so the Cockpit could show a version number on every machine but could not say whether any of them was out of date. The Gateway now reads the newest release itself, about once an hour, and every version on the page is compared against it. If it cannot read the newest release, the page says so rather than calling everything current.
  • Update now. A machine whose Director is behind and has no sessions running now offers an Update now button, on the Machines tab and on that Director's own page. Pressing it installs the downloaded update straight away: the Director restarts into the new version, and if the new version does not start, the previous one is put back. If the machine has not downloaded the new build yet, it says so and installs nothing. It is the same update your launcher already performs by itself once a Director is empty - it simply no longer waits for the launcher's next check - and the rules are unchanged: an update is never installed while sessions are running. A busy machine says how many sessions are running and that it will update by itself once it is empty. Each Director's page also has a new Version and updates card: the version it runs, the newest release, whether a newer build is downloaded and waiting, what the launcher can do, and the result of the last update on that machine.
  • Update now needs a launcher from this release. A launcher updates itself, so machines pick this up on their own. Until one has, its machine says its launcher is older than remote updates and keeps updating the way it always has.
  • Also in this release. Restart and Start for a Director are now buttons on the Machines tab and the Director page. Restart only happens when the Director is empty - the launcher checks again at the moment it restarts, and refuses if it is not.

v2.2.0 - September 15, 2026

The session list is now the shape of the work: sessions fold underneath the session that started them, on the Director, the Cockpit and your phone, by the same rules and in the same words. A session now wakes when its conversation actually moves, not whenever its screen redraws.

  • Your sessions fold under the session that started them. A flat list stops telling you anything the moment you run a real amount of work - one Architect with nine sessions under it took ten rows of a fourteen-row rail, and the four sessions you were actually looking for were off the bottom of the screen. Any session that started other sessions is now a parent, and the sessions it started sit underneath it, folded away by default. A session that started nothing is an ordinary row, exactly as before, which is most of them - so on a quiet day nothing looks different at all. The relationship is ownership, not grouping: it is the session a session answers to, the same fact the product already uses to decide whether something interrupts you. It goes as deep as it really goes, so an Architect's Manager's Workers are all there, each nested under the session that actually started it.
  • A folded group hides nothing. A folded parent carries one small square per session underneath it, at every level, in that session's own colour; the counts - working, stopped, and how many need you; and how long the oldest session in the group has been going, ticking as you watch it. A group that is hiding a session that needs you says so without being opened: the count is on the line, and that session keeps its own colour in the row of squares. Open it and its sessions appear underneath, indented behind a guide line, each with its own chevron if it started sessions of its own. Which groups you left open is remembered, per group, and survives a restart.
  • One switch: your order, or what needs you most. There are no tabs and there is no second list. My order is the one you made by dragging rows around, and it is unchanged. Attention puts the session that has been waiting for you longest at the top, then the rest that need you, then the ones still working, then the snoozed ones at the bottom. Nothing is hidden; the order simply changes. Sessions never re-sort underneath their parent, because a session with a live supervisor is not waiting on you in the first place. Dragging still works, and now understands ownership: a row moves among its own siblings and never across a parent boundary, so rearranging your list cannot tell you something untrue about who started what.
  • The same answer on every screen. The Cockpit, your phone and the Director now compute none of this for themselves. The tree, the counts, the age and the attention order are worked out once and read everywhere, and the two implementations - one for the browser, one for the desktop - are checked against a single shared file of worked examples that neither of them owns. Change one side alone and its own tests go red. That is deliberately harder than letting each screen do its own arithmetic, and it is the reason the same group of sessions cannot be described three different ways depending on where you are standing.
  • A session wakes when its conversation moves, not when its screen redraws. Until now a settled session went blue the moment any output arrived, so an agent redrawing its own screen could make a session look busy - and end a snooze - with nothing new in the conversation. A settled session now opens a turn only when the conversation gains a new row. It is on by default on every Director, with nothing to configure. It targets a measured problem: on one Director over one day, 107 wake-ups were a single burst of output with nothing behind it, 85 of them fell on an exact 30-minute cycle while the agent's footer drew "Checking for updates", and 81 snoozes ended on one of those repaints. Checked against 4,328 pinned screen pairs, the new rule kept 93.8 percent of short unexplained wakes red, while 229 of 231 longer ones still opened a turn. Its effect on live snoozes has not been measured yet. If it misbehaves on a machine, settingCC_DIRECTOR_CONTENT_TURN_RULE=off restores the old rule on that one Director.
  • Also in this release. A failed session-key registration now says why. A single invalid value used to produce an unexplained error and take every other session key registering at the same time down with it - on one machine, 2,310 identical errors in a row, none of which named what was actually wrong. Built-in skills now have one source rather than two copies that drifted apart, with a check that keeps them that way, and the skills the product ships no longer teach a way of starting a session that the product refuses. Groundwork for the Wingman judging every stop has landed, switched off: the two per-account switches that will let it change how a stop is shown are both off by default.

v2.1.3 - September 14, 2026

A release about who a session answers to, and about being able to see the shape of the thing you are running.

  • A session that starts a session has to say who owns the result.Every session answers to something: either another session is holding it and gets told when its turn ends, or it is yours and it goes red and asks you. That rule shipped in v2.1.2, but nothing enforced it - the refusal lived only in the cc-devthrottle command line tool, a convention the tool chose to follow rather than something the product required, so anything that skipped the tool got an unowned session. Three things were wrong underneath, all the same shape: the spawn path trusted the request for facts the caller should not have been able to choose. The origin of a spawn - a person, an agent, or a schedule - was read out of the request itself, and only one of the two spawn routes checked it at all, and not the common one, so a caller could simply say it was a person. Nothing required an agent to say who would own what it started. And a caller that did declare an owner but got the identifier slightly wrong had that declaration silently discarded, producing exactly the unowned session it had been trying to avoid, with no error to say so.
  • Who is asking now comes from the credential, not the request. All three are closed, on both routes, in one shared place. A person - the desktop, the Cockpit, the phone - is recognised from their signed-in device and is never asked who owns anything: a session you open is yours. A session starting another session is recognised from its own key; it cannot claim to be a person, its parent is taken from the key rather than from what it says, and it must declare who will own the result or the spawn is refused with the options spelled out. A scheduled run declares nothing and is yours, exactly as before. A malformed owner is now refused, naming the value, instead of being dropped. One limit, stated rather than left to be found: the refusal applies where the caller can be identified. A spawn relayed between machines by a Director carries that Director's own credential and is trusted, because its request was written by a command line that had already been through the gate. A test says so, and it will be the first thing to change if that ever stops being true.
  • Handing work to you now says why. --standalone means the user owns the session: it goes red and asks you when it finishes, and the agent that started it hears nothing back. It exists for real cases - you asked for the session, or the work genuinely needs you - but it cost exactly as much to type as --controlled-by self, and agents were reaching for it. On a fleet of nineteen sessions, three of the thirteen that agents had started had chosen it, and two of those were sitting red waiting for attention that need never have been asked for. It now requires a reason. The choice is not forbidden; an agent that cannot say why the work is yours keeps it and collects it itself.
  • The architecture documentation is five documents and has pictures.The architecture tree had grown to 192 files across two directories, and most of it was leftover instructions rather than description: briefs addressed to sessions that finished months ago, phase plans, dated review rounds, handovers. Several still announced themselves as active work, and two were the same document in two formats that had drifted apart. It is now five documents - sessions, the fleet, the Director and Gateway, terminology, and an index - each owning its subject completely, with nothing stated twice. Every claim was re-checked against the code rather than carried across, which turned up three documents describing a product that no longer existed, including one instructing agents to connect to a network port removed months ago. The diagrams draw the outbound-only model - Directors dialling out, nothing reaching in, no ports on any machine, with the mechanisms that used to need a way in marked - and also what decides whether a session interrupts you, who gets told when a turn ends, and the shape of a mission.
  • Also in this release. The test suite now builds its own PostgreSQL rather than assuming one, and a missing database fails the run instead of quietly skipping the tests that need it.

v2.1.2 - September 14, 2026

A release about sessions you are not watching: the ones nobody is holding, the ones that finish and never say so, and the one you are trying to stop.

  • Stopping a session asks you once, and takes your word for it. The Director and the Cockpit had turned a stop into an interrogation - four sentences explaining the audit trail, a box demanding a written reason, a Stop button that stayed switched off until you filled it in, and a panel afterwards reporting what had happened to a session you had just watched disappear. Both now ask one question with Cancel, Stop, and a note you may leave blank. If the stop works the window simply closes; only a failure says anything. The reason requirement stays where it belongs - on the REST interface, because one agent can stop another agent's session and the trail has to say why - and a stop you make yourself is recorded as coming from you. The phone was changed this way two days earlier, so all three screens now behave the same.
  • A session stays quiet only while somebody is holding it.Whether a session could go quiet used to be decided by what kind of session it was, fixed when it was born - so sessions were quietened for the category they belonged to rather than because anyone was there to catch them. On 13 September six sessions sat grey and labelled "Snoozed" with nothing snoozed, and five of the six had nobody who would ever come back for them. The question is now asked fresh every pass: is there a supervisor alive right now? If not, the session turns red and asks you. Alongside it, owning a session is something a session must now say out loud - a session that spawns another must declare who owns the result, where before it took ownership silently just because it could.
  • A session tells its parent when the work comes back. Going quiet is only safe if somebody is told when it is over, and until now nothing was: a session finished delegated work and simply stopped, so "quiet" could quietly mean "lost". A session that was given work now reports back in its own words, and that report interrupts its parent - the right cost, because a session that took ownership took on being interrupted when the work returns.
  • A dictation to a session that has exited stops retrying forever. It was refused and left unresolved, so the phone kept trying it every few seconds, paying for a full transcript each time and throwing it away, repainting a dead session orange on every lap. The only way to stop it was to delete the session. It now resolves the first time, tells you the session has gone, and keeps your audio.
  • Also in this release. The Gateway's own unit tests had grown past the time limit on the everyday test run, which meant they were being stopped before they finished and counted for nothing. They now run on the release check instead, where they count.

v2.0.6 - September 3, 2026

A small release with one fix that matters if you run the Pi coding agent: a new Pi session no longer shows, or reads aloud, a conversation that belongs to an earlier session.

  • A new Pi session showed the previous session's conversation. Open a Pi session in a repository where you had used Pi before, and the chat screen filled with the conversation from that earlier session - a review from weeks ago, in one case - before you had typed a word. The spoken narration read that same old conversation out, and the turn counter on the session card counted the old session's turns as well. DevThrottle was finding a Pi session's transcript by taking the newest transcript file in the repository, and Pi only writes a session's file when the first message is sent - so at the moment a new session started, the newest file was always the previous session's, and that wrong answer was kept for the whole life of the session.
  • Every Pi session now starts with its own session id, and Pi names the transcript file after it, so DevThrottle knows which file belongs to which session from the moment it starts and never has to guess. Reopening a Pi session brings its conversation back, because the same id is what Pi uses to resume. Clearing a Pi session's context is followed correctly: Pi starts a fresh transcript when you clear, and DevThrottle now follows the new file rather than staying on the old one. The context gauge and the model shown for a Pi session come from that session's own file, not the newest file in the repository.
  • A Pi session that was already open when you install keeps the old behaviour until you close it. Sessions opened after the update behave as described above.
  • Also in this release. The cc-devthrottle command line tool gains session raise and session workers: a session that is being driven by another session can put its hand up when it is blocked, and the driving session can see who is blocked.

The two new commands need the hosted service update that follows this release. They do not work until it is deployed.

v2.0.5 - September 3, 2026

Install this release before the hosted service is updated. It teaches your computer to send its conversations up to DevThrottle instead of being asked for them every time, and the next update to the hosted service expects that. The order matters, and it is explained at the end of this entry.

  • Your computer now sends each finished turn as it happens, and DevThrottle keeps it. Until now, every time DevThrottle needed a conversation - to draw the chat screen, to read a turn aloud, to wait for a spoken answer - it sent a request down to your computer asking it to open the agent's transcript file and read it back. On the chat screen that happened every two and a half seconds. Chat, the transcript view and the spoken narration now all read from the copy that is already there, so the chat screen stops waiting on a round trip to your machine, and a conversation you have already had stays readable when your computer is briefly unreachable. To be exact, because this is easy to overstate: the session itself still needs your computer - that is where the agent runs. What changed is that reading what has already been said no longer waits on reaching it.
  • The narration that went silent for hours is fixed. A session could stop producing spoken narration and never recover, with nothing on screen saying why. Chat in the same session kept working, which made it look like the voice feature was broken. DevThrottle worked out where the agent's transcript lived by building a path from the session's folder; when an agent moved into a Git worktree the transcript moved with it, and every read from then on opened an empty spot, forever. The path is now resolved in one place, following the pointer the agent itself reports - and because conversations are sent up as they happen, nothing reads that file at all any more on the path that failed.
  • Dictation stops changing words you never asked it to change. The correction list is for words you have listed, and it had been guessing at words you had not: between 8 and 17 August the fuzzy matcher turned "sure" into "Soren" 261 times, "many" into "Banya" 138 times, and did the same to "code", "single" and "focus". Only words on your list are replaced now. That matching is off, and stays off. A model may check a candidate before an unlisted word is touched, but it can only choose between candidates - it never supplies text of its own. Dictation transcripts are kept for 90 days, matching session history, so you can go back and see what was actually said.
  • Smaller things. The session picker on the phone is searchable, so a long list is usable. An empty recording no longer retries forever, and a stuck dictation no longer holds its session locked. The Gateway starts listening before it opens its database, so a slow database no longer looks like a dead service during startup. And cc-scrub, a screenshot scrubber, removes private details from an image before you share it.

Install this before the hosted service is updated. This release is safe to install right now, while the hosted service is still the current one: your computer checks whether the service is ready to receive conversations and simply does not send them if it is not, so nothing changes for you today. The hosted service will then be updated to read conversations from the copy your computer sends. A computer still on v2.0.4 or earlier cannot send them, and after that update its chat and voice screens will say so and ask you to update, rather than showing the conversation. That message is correct, and installing this release clears it - but you can avoid seeing it at all by updating now.

v2.0.4 - August 16, 2026

A small release with two fixes, both named in the v2.0.3 notes as things that were still wrong: a session waiting for voice now has a clock and can admit defeat, and the Gateway waits longer for its database before the platform gives up on it.

  • The wait is now on the screen. A session waiting for voice says how long it has been waiting, in whole minutes, timed from the moment the wait began rather than from the last time anything happened. A row reading "Preparing voice" used to read exactly the same at two seconds and at forty-eight minutes.
  • After three minutes the product stops promising. The row turns red and says the voice did not arrive, with the elapsed time, instead of another calm "on its way". Three minutes is the standard the product already held itself to and had written down; it is now shown rather than merely intended. The Gateway keeps trying in the background - what ends is the promise, not the effort. And the reason you can act on still wins: if the speech service is down, or the account is out of credit, or setup is unfinished, the row says that, and none of those sentences is replaced by the give-up message. A session that has audio, has an attempt in flight, or has nothing to read aloud is unaffected.
  • The Gateway waits longer for its database. A deploy on 12 August took the hosted service off the air for 46.7 seconds: the container gave up on its database after ninety seconds and exited, and stopping a failed container during startup also takes down the healthy one serving traffic next to it - while the same database opened cleanly minutes later. The Gateway now waits inside the startup budget it actually has, with room left to finish starting up. This is a mitigation, not a cure: it widens the window in which a slow database can recover, and the real fix - a Gateway that starts answering before it touches the database at all - is not built yet. It has one deliberate cost: a Gateway that cannot reach its database at all now takes about eighty seconds longer to report the error.
  • Known and not fixed here. Five faults are known, filed, and deliberately left for the next release: every new account gets a 14-day Pro trial, but the trial is invisible in the app, so no screen says a trial is running or how many days are left; a snooze does not survive the agent's own update check, so a snooze on an idle session can die within about half an hour; a Gateway serving an evicted Director shows an empty fleet as though it were a fact while the sessions are running normally; spawning a session with a prompt can lose the prompt and tell the caller nothing went wrong; and the hosted morning report can say no sessions ran on days when they did.

Both fixes live on the Gateway side. If you use the hosted service they are already running, and updating the app is all you need. If you run your own Gateway, update it too. There is no migration and no new setting.

v2.0.3 - August 12, 2026

Sessions no longer go quiet without saying why, you can sign out of the mobile app, and two accounts can share one browser.

  • Sessions no longer go quiet without saying why. A session in voice mode could stop speaking and never start again. Its row sat on "Preparing voice" indefinitely, no narration was produced, and nothing anywhere reported a fault - one session was found sitting like that for forty-eight minutes. Reading a session's conversation could fail and be reported as a success with nothing in it, so narration concluded there was nothing to say and never tried again. A failed read is now treated as a failure: the narration is attempted again on its own, and the row says voice is on its way instead of claiming it is being prepared when nothing is happening.
  • The row tells you the real reason. Where it used to say "Preparing voice" for every possible cause, it now says "Nothing to read aloud" when the session is waiting on a question rather than a written answer, "Voice service down" when the speech service cannot be reached, and "Voice needs credit" when that is what is wrong. An agent that keeps no conversation at all is said so once, rather than promising a narration that could never arrive. And asking for a narration by hand no longer reports a failed read as a session that has not produced anything to summarize yet.
  • You can sign out, and keep two accounts. The mobile app previously had no way to sign out at all. You can now sign out, and you can keep two accounts and switch between them on both the phone and the desktop Cockpit, without a password and without a connection. Signing out always asks first, and the confirmation says which of the two outcomes will happen, because signing out of one account and signing out of all of them are different things.
  • Also in this release. An administrator can extend a member's Pro trial, so a promise made to somebody about their trial can be honoured; this is an administrator action on the hosted service, not something a member does. The project now carries a contributing guide and a security policy, so anyone reporting a vulnerability has a stated route. And repairs to the build and the test suites.
  • Known and not fixed here. There is still no clock on a session waiting for voice, so no screen can tell you how long it has been without narration; and there is still no point at which a session whose narration keeps failing admits defeat rather than saying voice is on its way. Both are stated in the release note.

The voice fixes need both halves to be current. The part that reads a session's conversation runs in the app on your own machine; the part that decides what to say about it runs on the Gateway. Until the app is updated, a transcript that cannot be found is still reported as an empty conversation, and the session it belongs to can still go quiet. Update the app, and update your Gateway too if you run your own. There is no migration and no new setting.

v2.0.2 - August 8, 2026

A small release that finishes the mission lifecycle. Missions could be started but never ended, and the fleet was found in exactly that state - eleven missions, several of them finished days earlier, with no way out of the list. You can now end one - from the command line, which is the whole surface for this until the Cockpit gets an archive view.

  • A mission can be ended, renamed, or brought back. A mission is the body of work a session belongs to. Until now nothing anywhere could end one, so the list only ever grew, and finished work sat beside live work with no way to tell them apart. Five commands now do the whole lifecycle: cc-devthrottle mission rename, mission complete, mission remove, mission reopen, and mission list filtered by state - --all or --state active|complete|removed. All of them are in the agent-discoverable actions list, not just the help text, so an agent that finishes a body of work can find the verb that ends it.
  • The wording is most of the work here, because these commands are the only surface for it. A rename names the old name too, so it is visible which mission moved, and says the identifier is unchanged - because "will this detach my sessions" is the first thing anyone wonders. Ending a mission says where the record went and how to get it back, naming both the list command and reopen: there is no other way to see an ended mission yet, so a bare "done" would leave you unable to find it. An empty filtered list says which list is empty, because a bare "no missions" under a filter reads as "you have none at all" - a different and much more alarming thing. And a mission with no stated reason for existing is flagged rather than shown as an empty cell, the same rule the Cockpit card follows.
  • Your agents can actually use those commands. The commands above reached a service that refused them: every mission verb answered 403 for an agent session, on a service that had just been given the routes - a session key could create a mission and read one, but not change one. An agent may now change a mission it can already create and read. This is no wider than what it already held - the mission is resolved inside the caller's own account, and another account's mission answers "not found" exactly as a read does.
  • Also in this release. mission create --parent is gone: missions are flat now, and the flag was still sending a parent identifier to a service that no longer has the field. Resolving a mission by name or short identifier now looks at every mission rather than only the active ones - without that, reopen was impossible, and rename failed on exactly the missions most likely to need correcting.

v2.0.1 - August 7, 2026

A hardening release. Every item here is a defect found during or just after v2.0.0, several of them by walking the product on a clean machine as a new user would, and several more by an independent review that sent the work back before it shipped.

  • Your dictionary now reaches your own dictation. If you use DevThrottle in the cloud, the words you added to your dictionary were not affecting your dictation at all: the correction pass read a shared dictionary rather than yours, so adding a term you say all day changed nothing, and the promise that your dictionary follows you everywhere quietly failed. Your dictation now reads your glossary. Two details worth stating plainly, because either could have been got wrong and both were checked: if you have written no dictionary you get no correction, never somebody else's terms; and running DevThrottle on your own machine is unchanged.
  • A broken dictionary no longer costs you the transcription. A malformed or unreadable dictionary file could fail the whole transcription instead of stepping aside - backwards, since the dictionary exists to improve a transcript. One that cannot be read is now skipped and you get your raw text. It does not fall back to anyone else's terms either: failing open means your own words, not a stranger's spelling.
  • The dictionary never did bias speech recognition, and now says so. The product told you, in the app and on the phone, that your terms were "biased into speech-to-text". They were not, and the code path that would have done it had no caller - your audio goes to speech recognition untouched, and your terms are applied afterwards to the finished transcript. The wording is now what actually happens everywhere it appeared, and the dead path is gone. This changes no behaviour; it stops the product describing a design it does not have.
  • A request we cannot place is refused rather than guessed at. On the hosted service, one voice route would accept a request whose account could not be resolved and quietly treat it as a local, single-machine request - reading the shared dictionary and filing the transcript in the wrong place. Every comparable route already refused; this one now refuses too.
  • Also in this release. The Missions board groups sessions by the mission they belong to, hides missions with nothing in them, and always tells you how many there are. Dictation no longer carries a finished recording into a session you have since moved on from - the guard now arms from both ways of starting to speak. The root folders caption says what actually happens: discovery is the local scan. And workflow run accepts the short run id it prints to you, while a web page answer is never mistaken for data.

v2.0.0 - August 6, 2026

On 5 August every session on every machine was locked out at once. The cloud Gateway was older than the app talking to it, so it refused each session's credential, and every command an agent ran answered "missing or invalid token". The outage lasted hours rather than minutes because nothing said so - the Home page showed no problem, and the error the command line printed blamed the credential, which was fine all along. That is what this release fixes.

  • The Home page shows a red Sessions row when the Gateway will not accept this Director's session keys, and says that it affects every session rather than one. Previously that state produced no row at all, so the one screen built to surface it was blank while the whole fleet was locked out.
  • The command line no longer blames your credential. A refused session key now explains that the Gateway may simply be older than the app - and says which line in the log tells the two apart - instead of asserting that your token is wrong. It deliberately does not guess which cause applies, because it cannot tell from where it stands.
  • The app asks the Gateway what it can do the moment it connects, and says plainly in its log when the Gateway is missing something it needs. Before, it discovered this one failed call at a time, from an error carrying no version and no detail.
  • Sessions no longer go permanently silent. A session could stop speaking forever with nothing reporting a fault - its rail sat on "Preparing voice" indefinitely, it was never played, and no error was raised anywhere. The cause was a corrupted internal pointer: something could overwrite a session's record of its own transcript with a value that was not a transcript at all, after which the session could never be narrated again. Running DevThrottle's own test suite from inside a live session did exactly that, which is how it was found. Both halves are fixed, and a session already damaged this way is repaired by restarting it.

If you run your own Gateway, update it as well as the app. This release changes what the app asks the Gateway for. An older Gateway will still work - that is tested in both directions, and the app now says clearly when it happens - but the fleet features are only fully available once both sides are current.

v1.9.11 - August 5, 2026

Your plan now includes the AI features, the phone recorder lasts all day, and the Windows application finally carries the current mark.

  • The AI features are included in your plan - no credits needed. Dictation, spoken replies, session naming and the Wingman come with DevThrottle Pro and with the 14-day Pro trial, and the app no longer asks you to add credits for any of them. Dictation and voice work on a brand-new account from the first minute, with no balance to top up. The Wingman, session naming and dictation cleanup run on DevThrottle's included models, and the model settings offer exactly those models, so a saved setting can never route your included features onto paid API models. If your trial has ended and you have no subscription, the app says so plainly and points you to the pricing page rather than asking you to buy credits for features credits do not buy. Prepaid credits remain what they always were: optional, and only for calling the DevThrottle model APIs directly with your own API key.
  • The phone recorder lasts all day. Recording no longer stops at a default time cap, keeps capturing while you navigate between screens, and shows a recording indicator on every screen. It holds a wake lock and asks Android to exempt it from battery Doze, so long recordings are not silently killed in your pocket. If a recording ever has to be cut short, it is cut short loudly - you are told, instead of discovering a truncated file later.
  • The Windows Director shows the current mark, not the old name. Every surface had moved to the new mark except the Windows executable, which still carried the old two-C icon in the taskbar, Alt+Tab, the title bar and the installer's file properties. Windows and macOS now match, and the icon carries nine drawn sizes instead of four, so it no longer looks soft at taskbar scale. Windows caches application icons aggressively: if a pinned shortcut still shows the old mark after updating, unpin and re-pin it, or sign out and back in.

v1.9.10 - August 5, 2026

A single fix: the Handovers list in the New Session dialog now shows your newest handover first.

The tab ordered documents by their filename rather than by their date. Handovers written by the product itself are named for what they are - a session move, a rebuild manifest - while the ones you write are named for the day and minute they were written, and sorting those names as text floated every name beginning with a letter above every name beginning with a date. The result was a list that looked sorted but was not: a handover written minutes ago sat thirteenth of a hundred and forty-three, below a dozen machine-written files, and the date shown against each row ran out of order the whole way down - so the one column you would use to find your document was the one column you could not trust. The list is now ordered by that same visible date, newest first, which is how the Cockpit has always shown it. Reading the list is also no longer done on the interface thread, so opening the tab with a few hundred handovers no longer briefly holds up the window.

v1.9.9 - August 5, 2026

The portless release. Until now both the Director and the launcher listened on a local network port, and agents could reach the fleet two different ways - through the Gateway, or directly through that port. Neither listens any more: everything an agent does now goes through the Gateway, one door, always.

  • Windows will not ask about the network on first launch, and cannot start asking again. The security prompt that appeared on top of the setup wizard, swallowing the clicks meant for it so a new install looked frozen in its first minute, was caused by the Director opening candidate ports to test them. v1.9.8 stopped the prompt by narrowing what that code touched; this release deletes the code outright, so the cause is gone rather than avoided.
  • Your agents stop having a wrong door to find. An agent that can reach the fleet two ways will eventually use the wrong one, and documentation does not fix that. There is now one way, so there is nothing to choose - and the product stopped shipping agents instructions that pointed at the old door. A machine that never accepted a connection cannot have one guessed at, scanned, or exhausted.
  • A security fix you did not ask for. Skill, workflow, schedule and mission commands used to read your account-wide credential from disk and present it, which meant any agent running one of those commands held authority over your entire account, on every machine - true of every release before this one. Each session now gets its own credential instead: bound to that session, limited in what it may call, expiring, and revoked when the session ends. An agent can still change how the product behaves - settings, handovers, sessions, missions - but it cannot change who is allowed in. Device enrolment and account identity are refused to it.
  • What you will notice day to day. Fleet-wide commands are slightly faster, since the local hop is gone. A session reading its own terminal is slower - roughly a third of a second to under a second against a hosted Gateway - because what used to be a local read is now a round trip. With no Gateway reachable, agent tooling does not work: a deliberate trade, not a regression, and the error says so plainly and names the self-hosted gateway as the answer. Starting, stopping and updating the application still work with the Gateway down, because process lifecycle never asks the Gateway anything.

Update the launcher with or before the Gateway. A launcher older than this release registers normally but cannot be commanded by an upgraded Gateway, because commands now travel down the connection the launcher itself opens; if that state occurs, the refusal names the cause rather than failing vaguely. Stated honestly: the Director still opens a local listener during interactive sign-in, to receive the callback from your browser - loopback-only, lasting as long as the sign-in, and carrying nothing an agent can call. The Director runs without a listening socket; it is not that it never opens one.

v1.9.8 - August 3, 2026

Sessions can now move in and out of missions while they run - shipped quietly in v1.9.7 and announced here - and a brand-new Windows machine's first minute no longer looks broken.

  • Move any session in and out of any mission. The v1.9.7 release included this and its notes never said so, so it is announced here. A session no longer has to be born into a mission: attach any running session to a mission, move it between missions, or detach it entirely - from the command line, with no restart and no respawn. cc-devthrottle mission attach attaches a session, or moves it if it already belongs to another mission, and tells you which mission it left; --with-children also brings along every session the target controls, all the way down; cc-devthrottle mission detach returns a session to belonging to no mission, the ordinary state. The session's workflow seat moves with it, so a session shown under one mission is never quietly governed by the conduct of the one it left, and a seat you chose yourself at spawn is preserved. Sessions spawned by a controlling session now also inherit that session's mission by default, so a team stays a team without anyone remembering a flag. One honest limit: a running agent keeps the instructions it was handed at birth, so after a move the command tells you exactly how to ask the session to fetch its current conduct.
  • The setup wizard no longer appears frozen on a brand-new Windows machine. Windows showed its firewall security prompt directly on top of the wizard's first button, where it silently swallowed every click aimed at it - no error, the product simply looked broken in its first minute of use. DevThrottle no longer does the thing that made Windows ask: it now checks candidate ports on the machine's internal address only, so the firewall prompt does not appear at all.
  • Browser profiles is one clickable row again. The entry in the Director's side rail used to unfold into a list of every profile with its own Start link, taking a third of the visible rail. It is now a single row showing the profile count and a green dot when at least one is running; clicking it opens the Browsers settings screen, where all the actions already lived.
  • A logging fault can no longer take down the work that was being logged. Stopping and restarting the application's log writer left it in a state where every later log line threw an error into whichever operation happened to be logging - so one defect surfaced as several unrelated, unreproducible failures. The writer is now replaced rather than revived, and a log call that cannot be accepted is dropped and counted instead of thrown. This one fault was behind most of the sporadic test failures seen on the local gate.

For people running the source, two test-suite fixes make the local gate more trustworthy: a backoff test now measures the code's behaviour rather than the machine's load at that moment, and a test that takes the machine-wide gateway lock is kept out of the parallel run, where it could stall the whole run indefinitely. Known and not fixed here: the Director's large-object heap still grows on an instance left running for days, a vault catalog scan over a synced folder can run away (diagnosed, not fixed), and four repository views still show a failed git read as an empty result rather than saying the read failed.

v1.9.3 - July 31, 2026

A security release. The Director's local control interface now requires a credential, and terminal session recording is off unless you switch it on.

  • The local control interface requires a credential. Anything on your machine that talks to the Director - the command line, hooks, the launcher, the settings tools - now presents a credential it is given automatically, and requests coming from a web page in your browser are refused. The tools that needed credentials were updated in the same change, so there is nothing for you to do.
  • Terminal session recording starts off. It used to record by default and keep everything indefinitely. It is now a visible setting that starts off, recordings are deleted when their session is removed, and recordings left behind by earlier versions are cleaned up the first time this version starts. If you have old session recordings you want to keep, copy them out before you upgrade.
  • The download comes from DevThrottle's own storage. The download link on this site used to point into GitHub's release storage; the release pipeline now publishes it directly.

v1.9.2 - July 31, 2026

The main window fits the screen it opens on, a first install stops reporting its own success as a failure, and sessions stay in the Director when a machine's connection wobbles.

  • The window fits the screen. The main window could open larger than the display it was on, putting the Settings button off the right edge - which quietly broke every "you can change this later in Settings" the setup wizard says. The window is now measured against the screen's usable area and centred before it is shown, down to a 1280x720 display.
  • A first install stops calling a healthy launcher dead. On a clean machine the launcher unpacks itself on first run, which took longer than the installer's fixed twenty-second allowance - so the install ended on an error while the launcher was answering perfectly well. Waiting is no longer treated as a verdict.
  • Sessions survive a wobbly connection instead of vanishing from the Director, and renaming a Director now carries everywhere.

v1.9.1 - July 30, 2026

The app stops getting slower as sessions pile up, and one number was removed on purpose.

  • The context percentage is gone where it was guessed. The gauge divided real usage by a context window inferred from the model's name, which was wrong for the model DevThrottle is most often run with - a session with roughly 800,000 tokens of room left could read 92 percent in red. DevThrottle now shows a context window only when the agent itself reports one; where it does not, you get the raw token count with no percentage. A missing number is an annoyance, a confident wrong one gets acted on.
  • The app stops feeling slow as sessions accumulate - three costs that grew with every open session were measured and cut - and buttons answer the moment you click them.
  • Auto-update says which situation you are in rather than leaving you to guess.

v1.9.0 - July 30, 2026

DevThrottle speaks French and Spanish, and several things that used to fail quietly now say so.

  • Pick a language and everything spoken follows it. DevThrottle speaks from four places - the narration of what a session just did, the direct reply when you ask it something, the in-product help, and the assistant. The speaking rules now live in one place, so a language reaches every spoken path. What is translated is what DevThrottle says: the on-screen text stays English, deliberately, for now.
  • The voice choice is not evenly matched, and the screen says so. English has twenty-eight voices, Spanish three, French exactly one. English is unchanged unless you choose otherwise.
  • Car Mode is out of the product for now. The assistant that shared its underlying brain stays - it is the same thing that answers you in the app.
  • A prompt that was never delivered is surfaced instead of being recorded where nobody would look.

v1.8.1 to v1.8.8 - July 27 to 30, 2026

A fast line of releases between the work-history release and 1.9. The ones worth knowing about:

  • Updating became something you can check (v1.8.8). DevThrottle has updated itself for a long time; from this version something is left behind to verify that the update worked, and to put the previous version back when it did not.
  • Agents launch ready to work (v1.8.6) instead of asking for approval on every call, and a whole skill directory can be held and placed where each agent looks for it.
  • The installer offers Git (v1.8.3), which the app needs to read repositories at all, and the macOS file-search guidance now names the path to grant access to.
  • Every session records who started it (v1.8.2), and History shows the shape the work had rather than a flat list. The screenshots folder you set is the one you see.
  • Cockpit dictation matches the phone (v1.8.1) - live level bars and a Speak button that sends without making you wait on it.

v1.8.0 - July 27, 2026

Every session now tells you its story: when it started, how long it has been open, how long it has been waiting on you, and what it did - live on the session cards, and kept in a durable work history you can read back across all your repositories.

  • Session cards answer the supervision questions. Every card in the Cockpit and on the phone now shows when the session started, how long it has been open, how long it has spent waiting on you, and how many turns the agent has completed - ticking live. Waiting time turns amber after an hour and red after four, so a neglected session looks neglected.
  • Work history. DevThrottle keeps a durable record of every session as it runs - what it was asked to do, how it ended, and a summary of what it built. The new History page shows your work across all repositories, grouped by repository and day, and survives crashes and power cuts because the record is written while the session runs, never at the end.
  • First-run wizard. Setting up a new machine is now one guided journey instead of a chain of dialogs - it finds your coding agents, offers to install what is missing, locates your repositories and screenshots, and explains each step as an offer, never a demand.
  • Fleet Assistant. Ask questions about your whole fleet in plain language - by chat or voice, from the Cockpit or the phone - without being tied to any one session.
  • Trustworthy voice input. Test your microphone and test transcription from Settings on both surfaces, and DevThrottle now measures every dictation's microphone quality in the background and shows the detail in a Transcription Health view, so a bad microphone gets caught before it ruins a day of dictation.
  • One Settings page. The phone and the Cockpit now show the same Settings - same tabs, same names, same cards - so a setting you find on one surface is where you expect it on the other.
  • A 14-day Pro trial for every new account.

Also in this release: voice mode is a real switch with the way out on every screen, and the voice queue plays the waiting sessions first-in-first-out with big buttons on top; the phone's voice recorder is back, with durable segments that survive interruptions and transcripts on both surfaces; the mobile Snooze button lets you pick a length, and a session returning from an expired snooze is labeled so you know to go see why it went quiet; repositories are a first-class subsystem - an always-current monitor, safe worktree and branch cleanup with an orphaned-worktree reaper, and a worktree that an open session is using is never touched; the shared workflow library lets you browse the built-in workflows, switch them on or off per account, and clone one to customize it; each session's uncommitted file count shows in the roster, so you can see who is sitting on unpushed work; the session roster puts Sessions first in the rail, and the Needs-you group is a waiting line with the longest-waiting session on top; the phone says nothing about the network unless something is actually wrong; no user is ever shown a bare status code - errors arrive as plain sentences, and browser errors also land in the Gateway log so they can be diagnosed after the fact; the About page reports the Gateway, Cockpit, and mobile app versions; one Director executable can run several named profiles, and a staged update applies itself automatically when no sessions are running; scheduled runs name their sessions after the schedule and fire time, and asking an agent to clear a session's context now asks you first; and many reliability improvements to the hosted service, including safer deploys with a warmed standby, honest network verdicts, and per-account serving of settings, statistics, and transcripts.

v1.7.4 - July 23, 2026

The macOS setup wizard now mirrors the Windows one, the hosted gateway now scopes every surface by account, and dictation is more reliable and more honest when something goes wrong.

  • The Mac setup wizard, rebuilt to match Windows. A cleaner Welcome screen, the obsolete Standard/Developer choice and the separate Gateway step are gone, and uninstall is fully ported - so setting up on a Mac is the same simple flow as on Windows.
  • Strict account isolation on the hosted gateway. A large hardening pass makes every hosted surface account-aware - directors, sessions, voice, devices, stats, and keys all now enforce account-scoped authorization - and per-device keys are stored hashed at rest.
  • More reliable, more honest dictation. Dictation keeps your last word instead of clipping it, pads trailing silence, and warns you when a send drops audio instead of shipping silence - across the desktop, the Cockpit, and your phone.
  • macOS tools fix. The command-line Python tools now find their config on macOS, shipped through the tools bundle.

Also in this release: the desktop status box shows which gateway you are on and its connection state; Send-direct from the Cockpit Speak box sends the transcribed text; scrollbar thumbs draw at full thickness instead of a hover-only sliver; and many correctness and test fixes across the fleet.

v1.7.1 - July 21, 2026

You can now change which gateway a Director connects to right from the app - disconnect and reconnect to a gateway on your own machine or the hosted one, without editing any files.

  • Change gateway from the app. Settings -> Gateway has a new "Change gateway" button: it disconnects this Director and takes you back to the connect screen to pick another - your own machine or the DevThrottle hosted gateway. No config files, no command line.
  • One-click hosted connect. The "Use hosted" choice is live - sign in with your DevThrottle account in the browser and the machine joins the hosted gateway under your account, with no address to type.

Also in this release: if a new connection does not take effect immediately, the app now tells you clearly instead of sitting on "Connecting".

v1.7.0 - July 21, 2026

Sign in with your DevThrottle account and control a hosted cc-director from the Cockpit and your phone - on the shared hosted gateway, with each account seeing only its own work.

  • Sign in on the hosted gateway. Open the Cockpit or the phone app, sign in with your DevThrottle account, approve the device once, and land in your own hosted Cockpit - no tokens to paste. Everything you see is scoped to your account.
  • The Cockpit opens from the gateway address. Clicking Cockpit on a hosted director now opens the real hosted Cockpit in your browser. The Cockpit and the phone app are both reached from the one gateway address - its cockpit and mobile paths - the same way whether the gateway is hosted or running on your own machine.
  • Strict separation between accounts. The gateway works out which account a request belongs to from the signed-in identity alone, never from anything the browser or app claims, and refuses by default anything it cannot place. One account's directors, sessions, voice, and usage stay entirely separate from another's.
  • A hosted gateway is a paid gateway. Signing a device in to the hosted gateway now requires an active subscription. A gateway you run yourself is unchanged and needs no subscription.

Also in this release: the phone app now lives at the gateway's mobile path, with the old address redirecting so nothing you have bookmarked breaks; the in-window Fleet Map was removed from the desktop app; voice recordings still uploading are cleaned up on an activity-aware schedule; and a plain-English guide to trying the hosted gateway is in the documentation.

v1.5.0 - July 16, 2026

The Gateway becomes the single source of truth for what each session is doing, you can install from the command line with no wizard, and the Gateway core gains the groundwork to run beyond Windows.

  • One honest picture of every session. The Gateway now decides each session's state and pushes it out, so the desktop rail, the Cockpit, and the mobile roster all show the same thing - including how long a session has been snoozed and when it is winding down - instead of each surface guessing on its own.
  • Install from the terminal, no wizard. A command-line installer sets DevThrottle up end to end from the terminal on Windows and macOS, and macOS gets a curl-based install that Gatekeeper cannot block. Command-line sign-in is Windows-only today; on macOS a machine joins your gateway with enroll instead.
  • Groundwork to run the Gateway anywhere. The Gateway now runs headless on Linux and macOS, proven in a Linux container, and ships with a Dockerfile you can build yourself. This is foundation work - the Gateway downloads are still Windows-only.
  • See what you have spent. New governance screens show your usage by day, week, and month, and each session's token spend is stored and sliced by hour and model.

Also in this release: the text injected into every new session is now a Gateway-owned setting you can view and replace; a self-imposed hold now goes through the Gateway and actually takes effect; Your Throttle stats recognize Azure DevOps remotes alongside GitHub; remote session spawn works over a tunnel-only connection; the move-session skill ships; and the Speak box opens instantly without ever opening a second copy.

v1.4.0 - July 16, 2026

A big reliability-and-visibility release: the fleet's voice is steadier, your stats now show which AI model did the work, and the desktop app gains a live fleet map.

  • See which model did the work. Your usage stats now break down by the AI model and the agent tool behind each turn, and each session's token spend is carried up to the Gateway, so you can see what you actually ran.
  • Live fleet map in the desktop app. Watch every session across your machines at a glance, click to select, with the supervisor spawn tree laid out.
  • Know who is speaking. The wingman says which session is talking before it reads a summary, so when you are listening without looking you always know who is speaking.
  • Steadier voice. A single slow moment on one session no longer silences narration for the whole fleet, and when speech genuinely fails you are told the truth instead of getting silence.
  • Pick a snooze length. The desktop and Cockpit menus now offer a list of snooze durations, not just one default.

Also in this release: the Gateway now runs as a background service with a simple Start and Stop tray, and first run no longer asks for a pairing code or a consent window; the mobile app's layout was reworked to sit correctly in the visible screen area, with play controls that mean the same thing everywhere; the Cockpit's settings are organized by topic, the session rail scans by icon, and workflows are served straight from the Gateway; many session-state corrections, so a session's colour and status always tell the truth; and more resilient dictation - a dropped dictation is now loud and gives your words back rather than failing quietly.

v1.3.0 - July 14, 2026

A reliability-and-honesty release: when something goes wrong you are told, and a session's state always tells the truth.

  • Honest failures. A dropped command now explains itself instead of hanging or returning a bare error, and writing into an agent's terminal tells you when it fails.
  • Session state you can trust. A working session is always blue, matching the spec, so a session's colour and status tell the truth.
  • Full prompt-and-reply logging. Every prompt and reply, for all agents, is recorded with where it came from.

Also in this release: the inbound network port was closed and Director Settings restored, removing a connection check that could only mislead; and a cleanup pass deleted dead code, corrected the public API reference, and removed documentation describing features that never shipped.

v1.2.0 - July 14, 2026

This release brings session rename and close back, fixes glitches on large replies, and adds full macOS support.

  • Session rename and close work again across the fleet.
  • No more glitches on large replies. Voice, Wingman, History, and the mobile session roster stop blinking when a reply is large.
  • macOS support. Mac builds, app-bundle placement, launcher start, and the command-line tools.
  • Clear All screenshots deletes the files on disk after a warning.
  • New Session picks the agent, not the model.

Also in this release: Tailscale is no longer required to install; a per-repository default for Open in Browser; Repos becomes a fourth tab of Your Throttle; the terminal verifies every prompt actually submits, not just large ones; snooze honors a requested duration; and fleet-wide "message all" is back.

v1.1.0 - July 10, 2026

This release gives your sessions real roles and missions, lets your other machines connect without opening a port, and makes voice dictation and long recordings far more reliable.

  • Session roles and missions. Every session now shows a role at a glance - Architect, Manager, or Worker - and related sessions group into a named mission. Roles are worked out automatically from how you start and connect sessions; you set the Architect yourself for the session that plans and oversees the work.
  • Connect other machines without opening a port (preview). Let your other computers connect to your main machine without opening or forwarding a network port - the other machine reaches out instead of waiting to be contacted, which is simpler to set up and safer. Opt-in and off by default for now.
  • More reliable voice dictation on your phone. Dictation holds your audio in a durable queue and keeps trying to deliver it, so a brief network problem or an app restart no longer loses what you said - with clear status instead of silent failure.
  • Long recordings and clearer transcription. Long voice clips are split at natural pauses and transcribed in parallel, and a failure now shows a plain-language message instead of a raw error.

Also in this release: a clearer signed-in version and self-repair in the phone app; fewer duplicate and stale notifications; Wingman voice fixes; a security fix that stops the Gateway leaking extra service keys; in-app image generation available again; and a simpler, more focused interface with several in-progress panels removed while they are finished.

v1.0.6 - July 6, 2026

  • Cockpit: major port of the Director experience to the new React Cockpit - session roster and rail, reply and action bar, fleet views, schedule, dictionary, and account pages.
  • Mobile: voice-mode audio player (resume, restart, seek), durable server-owned dictation upload (a refresh never loses recorded audio), and screens that stay awake.
  • Reliability: crash-safe Python tools install and Director self-repair of a broken shared runtime.

v1.0.0 - July 4, 2026

  • First stable release: the signed Windows installer line (Azure Trusted Signing) that ships from devthrottle.com today.

Before 1.0

The 0.9.x line was the pre-release run-up during quiet launch week. Its history is preserved in full on the releases feed.

Note
Pricing lives on its own pricing page. We keep prices public and never raise yours without telling you first.
Talk to usBook a 20-minute call