CCCC v0.4.38 Release Notes
v0.4.38 makes it easier to watch and operate several Actors at once, brings cross-Group message notifications into Codex Voice, and unifies managed Runtime sessions across the Actor and Voice Analyst roles. It also improves Windows startup, terminal history, voice transcripts, mobile controls, and updates.
Platform change: v0.4.37 is the final release for Intel Macs. Starting with this release, native packages target Linux x86-64 (glibc 2.28+), Apple Silicon macOS 11+, and Windows x86-64.
Operate Up to Four Terminals Together
Each Group now offers Messages and Terminals views. Terminals displays up to four interactive Actor TUIs per page, with pagination for larger Groups. You can type directly into each tile and expand an Actor when more space is needed.
The view replaces only the message history area: the Group header, composer, and Presentation controls remain available. Each Group remembers its chosen view and terminal page in the browser. Input focus and write ownership remain specific to the terminal being operated.
The surrounding controls are simpler:
- Group actions, context, search, view switching, and Presentation stay within reach; global preferences such as appearance, language, and Account move into the Settings menu.
- Actor headers prioritize interrupt, connection/control recovery, and expand. Terminal History remains available in the Actor's More menu.
- Sidebar ordering updates immediately, and opening a Group menu no longer starts a drag. Mobile menus close when their trigger disappears or the selected Group changes, with consistent keyboard focus on return.
Touch scrolling also follows terminal ownership. Writable applications receive their supported mouse-scroll input; read-only connections in the normal buffer can still browse local history, including during control handoff.
One Managed Session, with a Real Native TUI
Codex, Claude Code, Grok Build, OpenCode, and Kilo now use shared managed session adapters for Group Actors and Voice Analyst. Within each role, the writable native TUI and structured turn observation follow the same provider conversation. CCCC chooses the appropriate surface automatically, removing the PTY-versus-Headless configuration choice.
Runtime Profiles retain supported provider/model options and private environment settings. Session identity, MCP routing, and lifecycle remain owned by CCCC; unsupported launch wrappers and session-control overrides produce explicit errors instead of opening a different conversation.
This release also addresses practical session failures:
- Empty Codex and Claude conversations can start and resume without a dummy model prompt. Initial input waits for terminal readiness, avoiding truncated first messages.
- Claude retains proxy and custom CA settings, recovers its retained transcript after worktree moves, and accepts supported launcher/Agent View worker version differences after CLI updates.
- OpenCode and Kilo handle early stream events and follow-up turns without mixing answers between requests. Kilo's official Windows npm launcher is supported by its managed adapter.
- Kimi Code setup respects the effective provider home and official MCP configuration, while first-use trust and login remain in its native CLI.
Claude's effective bypass-permissions configuration is also clearer in the UI. See the Runtime guide for supported configuration and version requirements.
Cross-Group Notifications in Codex Voice
Codex Voice can now receive Actor messages from subscribed Groups. In Message notifications, choose To user or All chat messages per Group; subscriptions are off by default and begin with new messages. Replies to requests made through Voice are tracked independently, including requests sent to recipient aliases such as @foreman, @all, and @peers.
The console shows message sources, delivery states, and skip reasons, with navigation back to the original Group. By default, messages already viewed in Web are suppressed before speech submission. Source Group and sender information travel with the notification, and the Analyst and Realtime instructions now emphasize attribution and the selected level of detail.
Delivery recovery has been tightened: large context updates are split to fit the provider's limit, waits and output queues are bounded, and known-unsent results remain available for a later call. A stalled speech turn no longer holds the entire submission queue indefinitely. Voice polling also avoids a dispatcher lock cycle during Actor startup.
Codex Voice remains Experimental. “Submitted” means the content was handed to Realtime Voice, not that every detail was spoken. Interruptions and model behavior can still produce incomplete narration; CCCC does not repeatedly replay uncertain results. The original messages and visible delivery state remain the way to check what arrived.
A More Flexible Voice Console
The Conversation and Analyst areas have a draggable divider, with browser preferences retained between visits. Voice settings, expression detail and style, and audio controls are consolidated in the console. Transcript updates from the same provider turn are combined, reducing repeated or truncated opening words.
Voice Analyst can use Codex, Claude Code, Grok Build, OpenCode, or Kilo with its own supported Runtime Profile. Realtime audio still uses the host's Codex login; changing the Analyst does not change the voice provider.
The Analyst starts in a stable neutral workspace and keeps context between calls. Selecting another Group does not retarget that session; requests can explicitly name the Group or repository to work with.
More Dependable Recording and Transcription
Voice Secretary, the recording and transcription workflow in the composer, receives a separate set of improvements:
- A complete final SenseVoice result supersedes the live Paraformer transcript while retaining revision history. The document workflow avoids consuming both versions as duplicate input.
- Final transcript events finish processing before the connection closes; normal completion no longer appears as a WebSocket error.
- Browser speech recovery has a finite retry budget and releases microphone capture when recovery is exhausted.
- Mobile recording options use a scrollable menu with larger touch targets, and recording/saving status stays visible above the input area.
More Reliable Status, History, and Shutdown
Runtime Dock bubbles use recent live activity instead of repeatedly surfacing replayed output. Buffered stream updates are preserved when switching Groups, so returning to an Actor does not lose the beginning of its response.
Long terminal histories retain newer lines while older pages load, preserve ANSI rendering across pages, and report truncation or expired snapshots. History dialogs also handle keyboard focus and loading failures more consistently. Broadcast messages no longer reactivate disabled Actors.
On Windows, executable lookup respects PATHEXT, npm batch shims launch correctly, and command paths and UTF-8 message delivery survive quoting and console defaults. Claude settings are passed through a private file instead of inline JSON. Web startup can recover from reserved-port errors and reports the effective address.
Process cleanup retains ownership until exit is confirmed, including failed stops and forced shutdown. Windows managed children join their Job before executing, and daemon takeover checks the actual command before targeting a recorded process.
Updates and Cross-Origin Web Clients
The native updater now uses a published release index to avoid GitHub API rate limits, while retaining checksum checks and installation-channel ownership.
Cross-origin browser clients can opt in with CCCC_WEB_CORS_ORIGINS for named origins or CCCC_WEB_ALLOW_ANY_ORIGIN=1 for wildcard HTTP CORS. Wildcard mode does not enable cross-origin Cookie credentials: clients need explicit Bearer authentication. Neither setting bypasses authentication, Cookie write-origin checks, or WebSocket origin checks. Both are off by default. See the Web UI guide before enabling either option.
Upgrade
Stop running Actors and the foreground CCCC application before replacing the executable. If the daemon was started separately, stop it with cccc daemon stop.
For a website-installer-owned command:
cccc update --check
cccc updateIf an older updater is already blocked by GitHub API rate limits, rerun the website installer for the same installation channel.
For a pip-owned command:
python -m pip install -U "cccc-pair>=0.4.38"Then verify the active installation in a new terminal:
cccc --version
cccc doctor
cccc daemon statusThe website installer and native pip wheel continue to distribute the same Rust executable. Keep the current installation channel when upgrading. Intel Mac users should remain on v0.4.37. Custom Runtime launchers or legacy session receipts rejected by the managed adapters need to be reviewed using the reported error; there is no automatic fallback to the retired Claude Hook/claude -p paths.