Repository navigation
CCCC 0.4.48
CCCC v0.4.48 Release Notes
CCCC v0.4.48 lets you switch the runtime that runs an agent, between native
sessions and CCCC-managed runtimes, without losing the agent or automatically
resending a message whose delivery is uncertain; see
Switch an Agent's Runtime. It also
keeps more of your work when something goes wrong. A Web send
whose result never came back can be restored, and sending it again unchanged
does not create a duplicate. Voice recordings keep the words already recognized
in more of the ways they can end early, and a stopped voice model download can
continue where it stopped. A Connect remote workspace waits, with its unsent
work, while its access is renewed instead of closing. After an instruction file
changes, a later message can remind agents to check it, mentions are
highlighted in each agent's colour, and NotebookLM refusals are reported
instead of being treated as success. It also closes a gap that let a Group
member without administrator access run an agent with another user's private
Actor Profile and its keys; see Profile Access. This release
covers the changes since v0.4.47; 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; the browser's leave warning
does not save anything.
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.
- If other people sign in to your CCCC with access tokens that are not
administrators, check existing Profile links after upgrading; see
Profile Access. - 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. From this release on, theccccMCP server
says when its version differs from the daemon's, or, with the same version,
when it was built from different sources, and which side to restart. Servers
from earlier releases cannot check this themselves; a native agent reading a
message through one may see a note suggesting a reconnect. Reconnect them
after upgrading even without a note. Follow the
native-session upgrade steps
for your app. - Voice Secretary recording with the local or external speech recognizer needs
the browser's AudioWorklet support as well as microphone permission. A page
without AudioWorklet says so instead of starting those recognizers; browser
speech recognition is unaffected. - Agents may see a new line in their messages after an instruction file
changes; see Instruction Files and Mentions. - A Connect remote workspace waits for its access to return instead of closing
only when both instances run this release or later; with an older instance on
either side it closes as before. With an older entry, a remote page from this
release cannot reload itself, for example from its update notice; reload the
entry's page instead. - This CCCC release does not include an SDK update.
cccc-sdk0.4.47 was
released separately on PyPI, npm and crates.io; its Python package needs
Python 3.10 or later. On Linux, fresh installs of all three packages passed
their smoke tests against CCCC 0.4.47 and against a development build with
most of this release's changes.
Switch an Agent's Runtime
An administrator can now move an agent to another runtime and keep the agent:
from one connected native session to another, from a native session to a
CCCC-managed runtime and back, or between managed runtimes and Profiles. In the
agent editor, Runtime first offers CCCC managed, Native session or
Web Model, then the item within it. The agent keeps its ID, role, tasks,
Mail, reply requests, message history, agent state and notes. An agent on a
native session now opens this same editor, so you can change its avatar,
display name, behavior preset and notes there; its working directory is
read-only, and settings that apply only to a process CCCC starts are hidden.
- CCCC stops the managed process that ran the agent. It cannot close a native
application's process; stop the old session yourself if it is still running. - A message the old runtime may have received without a confirmed result is not
delivered again automatically. A handoff notice lists such messages and asks
the new runtime to check them. When the new runtime can receive during the
switch, the notice comes before the messages still waiting; an agent that is
stopped, paused or has its access paused receives them all later, in the
order they were written. - CCCC does not move the old runtime's own conversation; whether it is still
available depends on the provider. - Switching to a native session removes the agent's managed configuration,
including its own private environment variables, which cannot be recovered.
Save as Profile first keeps a custom configuration; a linked Profile is
not changed. - Do not start after switching leaves a managed agent stopped so you can add
private environment variables before Start. Leaving a native session, the
new runtime starts with a running Group; Save and restart after changing a
managed agent's runtime, mode or Profile switches it in the same way and
starts it at once. - The old native session is told it was replaced if it calls CCCC, and its
reconnection does not take the agent back. Switch back explicitly to use it. - If the final step of a switch fails, the agent stops receiving and shows
Retry completion; CCCC also retries when the daemon starts. Its messages,
and changes to the agent other than Stop, wait meanwhile.
Web Model agents keep Save and Save and restart in this release, and a
native agent switches to CCCC managed before choosing a Web Model. Those changes
do not check unfinished work: make sure the previous runtime has finished first.
The CLI offers the same switch as cccc actor switch. See
Connect existing native sessions
for details.
Profile Access
Linking an agent to an Actor Profile now requires permission to read that
Profile. Before this release, a Group member without administrator access
could link another user's private Profile to an agent, through the Web or by
asking an agent to do it, and the agent then started with that Profile's
command and private environment, such as API keys. This matters only for a
CCCC that others sign in to with access tokens that are not administrators.
Elsewhere, the one visible change is that agents can link global Profiles only;
link a Profile from My Profiles to an agent in the Web instead.
Adding an agent with a Profile, linking or relinking one, changing which
user's Profile a link points to, and converting a linked agent to a custom one
now check that the person asking may read the Profile. A request made by an
agent can link global Profiles only, whatever it claims about its sender. The
Web takes the caller from the signed-in session rather than from the request,
and the cccc MCP server drops authority fields that a model supplies. Local
cccc commands keep administrator access.
Links made before this release are not checked again. If others can sign in to
your CCCC, an administrator can open Settings → Agent Profiles and use
Usage on each user Profile to see which agents use it. Remove an agent that
should not use a Profile, or link it to one it may use. Do not turn it into a
custom agent instead: Convert to Custom, and deleting the Profile with
Delete anyway and convert linked agents to custom, both copy the Profile's
configuration and keys into the agent. If such an agent has run, consider
replacing the keys in that Profile.
Sends That Did Not Confirm
A Web send whose result never came back, for example because the connection
dropped before the response arrived, can be restored and sent again unchanged
without creating a duplicate, and a draft you started in the meantime is not
overwritten.
- A failed message returns to the composer by itself when its own Group is
open, the composer is still empty and the routing is unchanged. Otherwise it
waits under N sends to restore with its destination, recipients, reply
target, references and attachments. - Sending a restored message again without changes reuses the first attempt's
client ID, so the daemon returns the message it already accepted instead of
creating a second one. Editing it, even back to the same text, makes it a new
message. The retry is remembered only in the open page; reloading it starts
over. - A failed slash command is kept the same way. A failed send may still have
arrived and a command may already have run, so the list says to check the
conversation before sending again. - The list appears in every Group, and a send's content shows only in its own
Group. A send whose Group is no longer available cannot be viewed or restored
unless that Group becomes available again. - While sends wait, a message or slash command is in flight, or a Voice
Secretary recording is starting, running or being finalized, the page asks
the browser to warn before a reload or close. Switching away from a Connect
remote workspace asks first once that workspace has reported such work or an
unsent message draft. Browsers may suppress the warning, and waiting sends
live only in the open page. - While a message is being sent, the Send button shows that it is still
sending and comes back when the attempt ends; you can keep writing the next
draft. A second send during that time used to look possible but do nothing.
Slash commands are unchanged. - A draft addressed to another Group keeps its destination and recipients
across Group switches, and a send naming a recipient who is no longer
available stays in the composer instead of going without that recipient.
The recipients row shows that recipient as unavailable until you remove it,
including in a reply to an agent that has left the Group.
Voice Secretary
Recording was reworked so that each recording owns its text, state and
resources. This closes several ways recognized words could be lost; audio that
was never recognized can still be lost.
- Dictation continues the draft instead of starting a new paragraph. Chinese
and Japanese text joins without a space, Latin words get one space, and short
answers such as 好, 嗯, OK, yes or no are kept. - After you stop, the panel shows that the recording is being finalized. With
the local or external recognizer, stopping releases the microphone at once,
and a recording outside a document that has waited 20 seconds for its final
transcript offers Stop waiting. It keeps the text recognized so far;
audio not yet recognized may be lost. - For a recording outside a document, when the connection fails, the final
transcript fails or is incomplete, a polish or Ask request fails or its
result is not confirmed, or you cancel a polish or it comes back unchanged,
any words the recognizer has returned go into the message box of the Group
where the recording started, with a notice saying what happened. If the page
leaves the Group view while recording, that text is saved to the same message
box. Document recordings keep browser-recognition pieces not yet sent, and a
local-recognizer part whose save was still in progress, in the same place. - Polishing tells the voice secretary that the text is your own words to tidy,
not a request to carry out. - With the local or external recognizer, a hint suggests checking the
microphone when no audio frames arrive, or all samples are zero, for about
six seconds. When a recording cannot start because the selected microphone is
no longer available, the error offers Use system default microphone. - A model download is treated as stalled only after 60 seconds without data.
A download that stops partway continues with a range request instead of
starting over, when the server supports range requests as GitHub release
downloads do. What arrived is kept in the model's.download-resumefolder
and uses disk space until it is used or deleted. A kept file is deleted when
it fails its SHA-256 check or its model is removed, and cleanup deletes kept
files that the model definition no longer lists or that nothing has added to
for seven days.
Instruction Files and Mentions
- CCCC watches
AGENTS.override.md,AGENTS.md,CLAUDE.md,CLAUDE.local.md
and.claude/CLAUDE.mdin an agent's workspace and each directory above it.
After one of them changes, appears or is removed, the next message that has
room for it carries one line asking the agent to check the current project
instructions; Claude's notification gets a short form. This covers agents
CCCC starts, connected native sessions and Web Model agents. Changes made
before CCCC began watching a session, or while the daemon was stopped, are
not reported. See
When instruction files change
for the limits. @and#suggestions open at the cursor, including after punctuation or
Chinese, Japanese or Korean text, and choosing one keeps the text after the
cursor. Messages highlight only references to the Group's current agents,
the selectors such as@all, and the Groups a message refers to. An agent's
reference takes the colour of its name; links, common email addresses and
code are not highlighted. A highlight marks a recognized name, not who
received the message.- Ctrl+Enter (Cmd+Enter on macOS) now sends a message that ends in a mention
matching no suggestion.
NotebookLM, Web Model Tools and Connect
- NotebookLM source refresh, rename and delete, artifact listing and artifact
generation no longer report a recognized refusal as success, and a status
CCCC cannot read is reported as a changed response format. Rate limits,
timeouts and authentication failures are reported as such. A chat reply that
holds only stream bookkeeping and an end-of-stream frame, with no answer or
heartbeat, the form NotebookLM is reported to use when the chat quota runs
out, is reported as rate limited with a note that the quota may be exhausted.
The answer marked final is used rather than a longer earlier draft. Error
handling follows the notebooklm-py source as of 2026-11-03, shortly after
v0.8.6; request formats are unchanged. - Commands a Web model runs with
cccc_exec_commandturn off the common pagers
by default, sogit logno longer waits for a key press; a pager set in the
call'senvstill applies.cccc_code_execno longer advises rerunning a
cell whose earlier calls may already have taken effect. - A Connect remote workspace no longer closes, or asks its administrator to
sign in again, when one periodic access check fails with a network error or
an HTTP 5xx; the page and its unsent work stay. - It also stays open when its access proof expires, for example after the
computer slept, when the account directory is briefly unavailable, or when
the target's Web service restarts. The page is kept as it was, hidden behind
a notice with the time of the last connection attempt. Meanwhile it pauses
new requests and live updates and disconnects agent terminals and browser
views. It comes back once both instances confirm the same account,
administrator access on each side and a fresh access proof, and Close this
page asks first when it has unsent work. A change of account, device or
address, revoked administrator access on the entry, or the target refusing
access during recovery still closes it. A change being saved when the
connection dropped may already have been made; recovery does not
automatically resend it. - A remote page that needs to reload, from its update notice, its error screen
or after part of its code failed to load, now asks the entry to open it
again, and the entry asks first when it has unsent work. Reloading inside the
frame ended the connection. - A Connect delivery whose window ended, or whose connection was
disconnected, before the target received it now says so and that it can be
sent again, instead of saying the target did not accept it.
Other Changes
- A managed Claude agent whose startup confirmation closed before CCCC
connected shows Confirmation closed. CCCC does not start it again by
itself; an explicit retry such as Launch, or a CCCC restart, clears the
pause. An agent or automation that tries to start it is told that starts are
paused. - When Mail names an agent that is disabled or reported as not running, or
whose Group is paused or stopped, the send result can now list it, with a
note that Send, or delivering the Mail, can request delivery to an enabled
agent in an active Group. Writing Mail still starts nothing, and a result
without that list does not promise the Mail will be read. - The terminal interface marks a managed agent waiting for its startup
confirmation asconfirm Weband counts these in the Members heading. Web
Model agents showaccess onoraccess paused, because enabled access
does not show whether a browser is connected. - Waiting for you no longer reopens empty. When you come back to a Group
after answering everything, and both the page and the count confirm that
nothing is waiting, the chat shows All; a request that arrives later
shows its count on the tab without switching the view. Requests answered
while you are in the view stay listed until you leave. - Images read with
cccc_filenow reach the model in Codex. For Codex's MCP
client (codex-mcp-client), a tool result that contains an image leaves out
structuredContentand carries the same metadata as text. Error results
whosestructuredContentholds anerror, and results for other clients,
are unchanged. - Agents can read or reply to a message by the short ID that delivery headers
show, such as56712672from(reply:56712672). It resolves only among the
messages that agent can read; when several match, the error lists them. - A native session CCCC cannot deliver to is no longer shown as Stopped in
the Runtime Dock; it shows the same receive status as its tab. For Codex,
which can receive only through its shared app-server, the agent's panel asks
you to check that the session is open in a Codex connected to it. When the
ccccMCP server identifies that session on a tool call, the tool result can
tell the agent that new messages may not reach it, so it can ask you to
check. - The default name of a native session is shorter and has no spaces, such as
Codex_cccc_0632d7. Agents already in a Group are not renamed at once; one
that still has its default name can take the new form when its session is
restored. - A custom agent avatar now appears in the agent editor and the agent list after
you upload it, and stays after a reload. Before, the upload was saved but
those views kept the default image. The picker no longer offers SVG, because
CCCC's file route serves SVG as binary data rather than as an image. - Codex sessions started in a terminal are no longer labelled VS Code in
Connect existing sessions when Codex records the client that created the
thread, as Codex 0.166 does; that version records terminal threads with the
sourcevscode. A session listed before this change can keep its old badge. - A DeepSeek turn no longer times out while its provider keeps sending valid
ACP updates or permission requests; the 300-second timeout restarts with
each one. Such turns used to be cut off at 300 seconds and sent again from
the start. - A notification an agent sends with
cccc_notifyand no target now goes to
the Group's agents, as documented; before, it reached no one. A target the
daemon cannot read is refused instead of turning the notification into a
broadcast, and notifications no longer store the session binding they were
checked against in the Group's history. cccc_file_sendsends up to 10 files as one message with one caption, and
itsidempotency_keynow also applies to sends on this instance, so a retry
returns the first message instead of posting the files again.- Chinese and Japanese interface text uses the names from the published
READMEs, and the status of a delegation sent from a Group follows the
interface language.
See the changelog,
Web UI guide,
local sessions guide
and Voice Secretary guide
for the full changes and operational details.
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 was tested through the daemon's own operations in isolated homes:
switches in each direction, refused and interrupted switches, an unfinished
completion and its retry, the handoff notice with a thousand unconfirmed
messages, a terminal submission and a DeepSeek turn cut off by the switch, and
work that arrives while a switch is under way. Isolated smoke tests of the
release candidate's Linux executable covered its served Web assets, Mail
results and adding agents with Profiles through the Web, and runtime switches
through the Web and the CLI with synthetic native sessions and no provider
process, including the answer a replaced native session gets from the cccc MCP
server, a refused mode and working directory, a Group starting while one
agent's switch is unfinished, and the default names the native hooks write. The
agent editor was checked on the candidate's own page in an isolated browser at
desktop and phone widths, for native and managed agents, including an avatar
upload, its display after a reload and a switch right after it. With synthetic
keys and no outside network, the smoke tests also checked Profile access. A
user without administrator access could neither read nor link another user's
private Profile, and its keys reached no agent process; on an earlier candidate
of this release, the same user could link it and its keys reached the agent.
That user's own Profile could still be linked and started, agents could link
global Profiles only, and an update's patch did not link a Profile. A candidate
built before Profile access and runtime switching were added was also checked
for the composer's send, mention and recipient states, a dialog that fails to
load, Waiting for you and the terminal interface. Earlier packages of this
release covered the instruction-file line on a real daemon with a negative
control on the previous build, mention input in Chromium, and the voice capture
worklet in the production bundle.
This is not complete live acceptance. One switch between two real Codex native
sessions ran on an earlier candidate of this release; switches between a real
native session and a managed provider were not tried before release. NotebookLM
was checked with offline fixtures rather than a real account, and voice with
component tests and a synthetic audio source rather than real recordings.
Connect retries were checked with synthetic responses. A remote workspace
staying open, with the same page and draft, through an expired account
directory, an expired access proof and a restart of the target's Web service
was checked with two real instances in isolated homes and Chromium; the
sleeping computer was simulated by pausing the browser process for 130 seconds,
not by real sleep. The Windows and macOS builds come from release CI and were
not checked by hand. Live Voice remains experimental.
Thanks to waterbang for the inline mention work this release builds on, to
chriscoveries for the DeepSeek timeout and Connect notice fixes and for
diagnosing the lost agent notifications, and to everyone who contributed code,
tested and reported issues.