CCCC v0.4.49 Release Notes
CCCC v0.4.49 finishes runtime switching: an agent can now move to or from a Web Model, directly from a native session or through a Profile, under the same rules as any other switch; see Switch To and From a Web Model. Messages now reach what is actually running, so saving another runtime for a running agent no longer sends its work to the wrong place, and a message cut off part way into a terminal is kept for review instead of being written again automatically. The interface moves toward an e-ink look, in a soft paper light theme and a graphite dark theme. An eligible plain message between agents can now arrive in a Claude session's notification, repeating reminders can stop after a chosen number of runs, a native foreman gets the same default capabilities as a managed one, and a stuck attachment upload can be stopped. This release covers the changes since v0.4.48; see Before You Upgrade before installing.
Before You Upgrade
Before upgrading, let sends and recordings in progress finish, and restore or discard any sends waiting to be restored. Waiting sends and unsent drafts live only in the open page, so reloading it loses them.
Then upgrade the CCCC executable and restart the daemon and Web through your usual launch method to load the new code and bundled Web assets, and reload open CCCC pages. The standalone installer behind cccc update stops a running daemon and starts it again from the new version. Before a pip upgrade, run cccc daemon stop and close any foreground CCCC so pip can replace the executable, especially on Windows, then start CCCC again. A daemon left running keeps the previous version. Runtime history remains in CCCC_HOME.
- For already connected native sessions, update and reload the CCCC integration and reconnect its MCP server in each app. Restarting the CCCC daemon alone does not reload those processes. For Claude Code, quit and run
claude --resume: on Claude Code 2.1.317,/reload-pluginsleaves a running Monitor on the old executable. Until a Claude session restarts, a notification can arrive cut off, with a note to read the whole message from the ledger. TheccccMCP server says when it differs from the daemon address file and which side to restart. Follow the native-session upgrade steps for your app. - A Home that used manual Group Bridge early on may have kept its old credential, pairing and registration files, with a warning at every start, because of a finished early delivery. That delivery no longer prevents their retirement. Damaged state is still kept, with the warning, and the instance's private key stays.
Switch To and From a Web Model
An administrator can now switch an agent to or from a Web Model the same way as any other runtime, including directly between a Web Model and a native session, or through a Profile. In the agent editor, Runtime no longer greys out those choices. The CLI offers the same switch as cccc actor switch.
- Entering a Web Model starts nothing. Connect the agent to a conversation in its settings, and its messages wait until then. The switch's result offers Set up connection.
- Leaving a Web Model retires its connection, so coming back means connecting again.
- While CCCC is handing a message to the browser, a switch asks you to try again in a moment, and so do removing the agent, deleting or resetting its Group, and a save that changes its connection.
- A reply the old conversation is still writing may not come back to CCCC, and an unsent draft stays in that conversation for you to handle. Work whose delivery is uncertain at the switch is not delivered again; the handoff notice lists it for the new runtime to check.
- Saving a different runtime without restarting is refused while the agent has an unfinished Web Model turn. Wait for it, or use Save and restart, which switches safely.
See Connect existing native sessions for details.
Messages Reach What Is Running
- After you save another runtime or Profile for a running agent, its terminal keeps receiving messages, with the submit key it launched with, until a launch replaces it. A Profile change takes effect at that launch, and a connector no longer takes work from a terminal that still runs.
- A message cut off part way into a terminal is kept for review, and CCCC does not automatically write it again. Work claimed for a terminal that has since stopped, and never written to it, moves to the agent's current runtime.
- When a browser delivery has to wait, CCCC retries the same batch. If its retries run out, or a daemon restart or upgrade leaves it unconfirmed, CCCC keeps the batch for review once the page is ready, because the conversation may still hold its draft. Later messages wait until you review it.
Other Changes
- An eligible plain message between agents can now arrive in a Claude session's notification, with no separate read. A message from you, Mail, a long message, a message with attachments or its own project path, or one containing
<,>or&still asks for a read, and so does the next delivery when the Group's instructions are due. - CCCC offers native agents their Group instructions more often: the next delivery after a compaction that Claude or Codex reports, after the instructions change, or in a new hour carries them or asks for a read. Between those deliveries, an agent works from its own summary. Codex, Pi and OpenCode now receive the instructions with a message about once an active hour.
- A repeating reminder can stop after a chosen number of runs. The rule editor has an optional Maximum runs, and the list shows progress and completed rules. Only firings while a limit is set count: raising or lowering the limit keeps the count, and removing it resets the count.
- An automation change in the Group's ledger now records the version change and which sections changed, without rule IDs, rule contents or snippet text.
- The interface moves toward an e-ink look: a soft paper light theme and a graphite dark theme, with text colors retuned for each. Layout, fonts and components are unchanged.
- A native foreman now gets the default foreman capabilities, as a managed one does: when it joins a running Group, on Start or a daemon restart, and when a switch makes it native. A capability you blocked stays blocked.
- While a message with attachments is uploading, a stop button next to Send ends the wait and keeps your draft for recovery. It does not recall the message, which may already have arrived, so check the conversation before sending it again.
- Opening a message from a notification now says so when the message cannot be opened, and offers Try again, instead of failing silently.
- An agent can now take up a planned or active task that nobody holds.
- A message sent with
cccc send --pathnow belongs to that project, and a relative path means the directory you ran the command in.
Validation Scope
Release preparation ran the Rust workspace tests and static checks, the Web tests and static checks, and repository checks in isolated homes. Runtime switching and delivery to what is actually running were tested through the daemon's own operations. Browser delivery was tested with a real daemon and an isolated Chrome against a local page, not ChatGPT: a batch that had to wait came back and was sent once, and batches in the states a restart or v0.4.48 leaves went to review without being sent.
Isolated smoke tests of the release candidate's Linux executable covered its served Web assets and, with synthetic native sessions and no provider process, runtime switches through the CLI between managed, native and Web Model, including a refused option, an unfinished completion and its retry, and the answer a replaced native session gets from the cccc MCP server. On the candidate's own page in an isolated browser, with synthetic native sources, connection setup was opened after moving a native agent to ChatGPT and to Grok, after Save and restart on a managed agent and after retrying a pending switch; a Web Model agent moved back to a native session; and the pages were walked at desktop and phone width. A held upload was stopped and kept its draft, a message that could not be opened offered Try again and opened on retry, a reminder limit survived a change of interval, and a limited reminder ran to its limit, showed as completed and was cleared.
Upgrades from the published v0.4.48 executable were run in isolated homes: a Home with a Group, agents and messages; a Web Model agent holding an unfinished batch and one holding a failed batch, through the daemon's own operations; and a real Claude Code 2.1.317 terminal against a fake model on a private network, through the upgrade, the documented reload and a compaction. A DeepSeek agent restarted during a turn was run against a fake provider.
This is not complete live acceptance. After a restart onto the release candidate, real Claude Code and Codex sessions that were already active kept exchanging messages, still on their previous MCP servers and, for Claude, its previous Monitor, whose notifications arrived cut off with the read instruction. A real Grok Web Model agent on a pull connection took a scheduled notice and finished its turn. Browser delivery to a real Web Model conversation and a switch between a real native session and a Web Model were not tried, and whether a real model reads less often was not measured. claude --resume after an upgrade was seen in one working session, not in the isolated checks. Native Windows and macOS were not tried.
Thanks to chriscoveries for the repeating-reminder limit and the automation event summary, to jianhuiyang92-byte for the interface feedback behind the e-ink look, and to everyone who contributed code, tested and reported issues.