All notable changes to this project are documented in this file.
The format follows Keep a Changelog, and versions follow SemVer/PEP 440.
- Voice Secretary workspace with repository-backed markdown documents, Document/Ask/Prompt modes, request history, transcript feedback, document archive/download actions, and dedicated assistant reporting paths.
- Built-in assistant controls in the chat composer for PET and Voice Secretary, plus a dedicated assistant settings surface with larger prompt editors.
- Daemon-owned tracked delegation with task/message linkage, idempotency hardening, and task chip projection in chat messages.
cccc updatecommand with install-source detection.
- Voice Secretary input handling now routes stable transcript/request data through dedicated assistant surfaces instead of noisy chat-style JSON notifications.
- Headless delivery and inbound rendering were tightened for Codex and Claude, including clearer sender/recipient context and safer reply routing.
- Runtime Dock state projection was polished so PTY/headless actors and built-in assistants expose clearer idle, active, and stopped states.
- Web workspace and settings UI received broad composer, modal, assistant, capability, automation, copy, and markdown rendering polish.
- Collaboration follow-up settings were renamed and regrouped around operator-facing behavior instead of internal automation terminology.
- Fixed partial-failure retry handling for tracked delegation so retries do not duplicate tasks after message-send failures.
- Fixed Voice Secretary prompt-refine, Ask reply, idle-review, and document routing edge cases.
- Fixed headless reply recipient routing for ambiguous sender/source contexts.
- Fixed user message bubble background regression after text-color unification.
- Fixed actor secret placeholder examples for Codex and Claude Code so the UI no longer suggests ineffective OpenAI environment variables for Codex.
- Fixed WeCom response URL fallback behavior for streaming and media replies.
- Weixin bridge now uses the Python
wechatbot-sdkintegration instead of the previous packaged Node.js sidecar, reducing bundled bridge assets and keeping Weixin login, inbound, media, and outbound behavior inside the Python adapter stack. - Weixin subscription guidance in Web settings: after Weixin login, the IM Bridge panel now explicitly explains the
/subscribeand Pending Requests flow, including separate guidance for unconfigured, stopped, already-bound, and ready-to-subscribe states. - Runtime Dock ring tone coverage extracted into a dedicated helper so PTY and headless actors share clearer
stopped,ready,queued,active, andattentionstate mapping. - Mention suggestion labels in chat composer now show actor display labels with secondary IDs where useful, and the mention preview can be closed with Escape.
- Weixin packaging was simplified by removing the Node sidecar packages and packaged
.mjsresources;wechatbot-sdk>=0.2.0is now the Python dependency for the Weixin path. - Headless streaming reconciliation was tightened so pending placeholders, canonical reply sessions, stream-id promotion, and terminal reply phases are less likely to reset or regress after final replies.
- Runtime state projection now writes stopped actor entries to the ledger when actors disappear from runtime snapshots, helping the Web clear stale working halos and live indicators.
- Actor edit modal synchronization was cleaned up so profile-backed actors and custom actors open with settings that better match their current stored configuration.
- Web group runtime updates now use SSE/runtime projections more consistently, reducing sidebar state drift after refreshes or lifecycle changes.
- Fixed CLI daemon fallback behavior so daemon rejections are not incorrectly treated as permission to fall back to local mutations.
- Fixed Weixin outbound/context-token handling so cached SDK context can be rehydrated into the running bot and outbound readiness survives bridge restarts more reliably.
- Fixed Weixin IM configuration canonicalization for empty and legacy account fields, with additional route and adapter coverage.
- Fixed missing visibility for
actor.activityledger append failures by logging append errors instead of silently swallowing them. - Fixed EventKind documentation parity gaps by adding internal contract coverage.
- Fixed a bare Chinese placeholder in the Weixin settings panel by moving it into the English, Chinese, and Japanese locale files.
- Claude headless runtime support alongside the generalized headless streaming pipeline, enabling structured headless sessions beyond Codex.
- Runtime Dock and live trace surfaces in Web: richer headless previews, compact activity timelines, grouped runtime inspectors, and better runtime state projection across chat and actor views.
- Headless runtime plumbing and test coverage: cache/projection helpers, broader coverage for headless events, runtime startup, Web actor routes, and Windows PTY behavior.
- Weixin sidecar support refreshed with expanded IM bridge adapter-level validation.
- Headless delivery architecture generalized from Codex-specific to a shared headless model used consistently across daemon, Web, and MCP surfaces.
- Web chat and runtime UX significantly refined: message reconciliation, activity persistence, runtime previews, composer behavior, per-message identity rendering, and group runtime controls.
- Workspace and presentation flows streamlined through enhanced browser/presentation handling and more resilient scope attachment behavior.
- CI and release verification strengthened with longer timeout coverage,
pytest-timeoutin smoke paths, and tighter release workflow checks.
- Fixed multiple headless reply and streaming lifecycle regressions, including fallback flow errors, message identity drift, canonical-reply reconciliation, and startup-state mismatches.
- Fixed missed headless injection for automation-generated
system.notifyevents — automation-triggered notifications now reach running headless agents instead of only landing in the inbox. - Fixed PTY teardown hardening, unread/index parity edge cases, and additional delivery flow stabilization.
- Fixed Web chat rendering regressions: lost avatars, unstable activity bubbles, stale runtime preview state, and composer alignment under text scaling.
- Fixed group start/pause button UI not updating —
setGroupDocnow syncsruntime_status.lifecycle_stateimmediately, andrefreshGroupspatchesruntime_statusandrunningfrom server meta so stale local state no longer overrides the authoritative status. - Fixed Windows PTY wake-path locking problems and related test instability.
- Fixed IM integration reliability: DingTalk mention handling, Weixin sidecar SDK pinning, and adapter behavior.
- WeChat (Weixin) IM bridge: Node.js sidecar, CLI login/logout, QR-code auth in Web UI, and daemon routes for bridge lifecycle, following the same bind-key authorization model as other adapters.
- Text-size accessibility control: three-tier scale selector (90% / 100% / 125%) persisted per-browser. System-theme icon changed to a display icon; mobile menu now cycles light → dark → system.
- Async result contract: formal
async_resultIPC signaling (accepted/completed/queued) across daemon actor operations. - Assistive-jobs layer: explicit pet review and profile job kinds requiring verified completion before marking done.
- Actor launch pipeline unified: add/update/lifecycle/runtime operations now share one resolution path with consistent async-result semantics; group start/stop reliably awaits per-actor results.
- Pet runtime tracks group settings: desktop-pet enablement syncs with group-settings changes.
- Web Pet task advisor is local-first: local evidence evaluation before surfacing proposals, reducing speculative noise.
- Presentation viewer gained inline web-preview support, topic-aware slide navigation, and split-layout mode for simultaneous conversation and viewing.
- Group sidebar extracted into a standalone component with optimized chunk splitting.
- MCP dynamic capability tools reflect real-time actor state.
- Fixed idle-standup suppression and silence-activity filters to stay quiet when there is genuinely nothing to act on.
- Fixed runtime visibility controls so peer and pet tabs show/hide based on actor composition.
- Fixed context sync and group-space writeback to distinguish accepted vs. completed status.
- Fixed automation snippet catalog separation so built-in overrides are distinct from user-authored rules.
- Windows-friendly env snippet support in the Web secret editor:
set KEY=VALUEand$env:KEY="VALUE"forms accepted alongside Unix-style entries. - Terminal-derived working state exposed in the actor list for richer runtime visibility.
- Modularized Web API services for a cleaner frontend integration layer.
- Web Pet substantially reworked: review scheduling, reminder generation, decision handling, and task proposals are more reliable and less noisy.
- Actor startup gained stronger runtime preflight checks and clearer daemon transport diagnostics.
- Peer-created MCP tasks now default to self-assignment instead of unassigned.
- Ledger and unread-index paths made faster with reduced overhead.
- Fixed projected browser session reliability for embedded views and NotebookLM/Google auth flows.
- Fixed task status and update flows being fragile under rapid MCP task operations.
- Fixed Web-to-daemon messaging semantics and context/chat UI behavior after the Web API modularization.
- Presentation workspace: slot-based presentation content managed through daemon, Web, and MCP, with a dedicated Chat Presentation rail and viewer flow.
- Browser-backed presentation views: interactive viewer lifecycle with refresh, fullscreen, replacement, and URL entry.
- Presentation references in chat: messages can point to a specific Presentation view with snapshot and compare support.
- Web branding controls: product name and logo asset configuration from the Web settings surface.
- Task state handling in Web UI is more structured; task/context workflow logic is tighter.
- MCP task update compatibility improved so status changes are less fragile.
- Default
ccccentry path now respects top-level--host/--portoverrides throughout supervised Web startup and restart. - Kimi runtime defaults updated to match the current preferred path.
- Fixed group/context/unread refresh behavior for better state coherence post-mutation.
- Fixed general message, panel, and console usability issues across the Web surface.
- WeCom IM bridge: dedicated adapter, Web-side bridge settings, authentication/readiness behavior, and operator docs including a dedicated WeCom setup guide.
- Built-in role presets: first-wave roster (planner, implementer, reviewer, debugger, explorer) with a faster preset-application UI for common actor role starting points.
- Web context and actor route caching made more deliberate with proper invalidation after writes, reducing stale readback after actor/context updates.
- Prompt and help surface tightened so startup guidance stays lean; richer guidance lives in the help/preset layers.
- Web readiness checks now tolerate
OSErrorandHTTPExceptioninstead of surfacing brittle failure behavior.
- Fixed Windows shutdown cleanup for lingering process/lifecycle edge cases.
- Fixed cache invalidation after actor/context writes to prevent stale Web UI state.
- Fixed WeCom adapter startup and config flows.
- Web Pet panel: task progress, smarter hints, direct jump to chat/task, and post-stop terminal output snippet after an agent ends a session.
- Web health endpoint made publicly reachable for external health checks and probing.
- Supervised Web restart/apply flow surfaced more clearly from the main
ccccsession.
- Desktop pet surface removed: Web Pet is now the primary pet surface (previous Tauri-based implementation retired).
- Web Access panel better aligned with real operator goals: local-only, LAN/private, and externally exposed access postures are clearer.
- POSIX background Python startup now preserves the active virtualenv interpreter path instead of resolving to system Python.
- Fixed Windows Codex MCP setup to prefer a stable absolute
ccccentrypoint and avoid false "already installed" detection. - Fixed supervised Web child shutdown so Ctrl+C and restart flows behave predictably.
- Fixed fail-fast MCP startup checks to avoid over-blocking unrelated lifecycle flows.
- Fixed IM bridge child-process startup to follow the same safer background-process rules as the daemon/Web stack.
- Group settings: Guidance is now the default first-open tab, matching the visible tab order.
- Settings terminology now more clearly separates built-in automation from user-authored rules and snippets.
- Delivery panel simplified to the only user-facing behavior that remains: PTY delivery auto-advance of the read cursor.
- Actor idle alerts default to
0(off) for new/default/reset paths without silently changing existing stored values.
min_interval_secondsremoved from the Web settings UI (daemon/API compatibility preserved).
- User-scoped actor profiles working end-to-end across daemon, Web, and MCP paths.
- NotebookLM runtime guidance injected into the help layer only when the relevant capability is actually active.
- Guidance stack re-layered: startup prompt is slimmer; live capability guidance is in
cccc_help; actor role notes are canonically stored in group help@actorblocks instead of leaking into working-state fields. - Task authority model tightened:
task.restorefollows an archived-only precondition; peers can no longer mutate unassigned tasks outside their own scope. agent_statesemantics aligned across docs, daemon behavior, MCP tooling, and Web expectations.- Group Space bind/unbind status now tracks the current binding accurately without leaking stale sync residue after rebind cycles.
- Runtime support surface narrowed to runtimes CCCC can set up and operate reliably; standalone Web startup follows the same local-first binding model as the main CLI.
- Fixed blueprint export/import round-trips so portable fields survive a full cycle without divergence.
- Fixed Windows MCP reliability: runtime-context resolution and stdio/encoding robustness.
- Fixed DingTalk sender identity, revoke behavior,
@targeting, and streaming fallback edge cases. - Fixed Web settings, modal overflow, context presentation, and translation coverage gaps.
- Fixed global browser surfaces to default-scope users to relevant data, reducing machine-global noise for scoped users.
- IM key-based chat authorization: dynamic bind-key authentication for IM bridges, replacing static trust with per-chat cryptographic binding. Includes
/bindcommand, auto-subscribe on successful bind, pending approval management, and revoke semantics. cccc_im_bindMCP tool: programmatic chat authorization via the MCP surface.- Authorized chats Web UI: view/manage bound IM chats and pending bind approvals from Settings → IM Bridge tab.
- Bind key UI: generate and display bind keys for chat authorization directly from Web settings.
- Actor profiles system: profile linking across daemon, Web, and MCP — including profile runtime, persistent store, and a dedicated Actor Profiles settings tab.
- Remote access control plane: remote daemon access with hardened IM revoke semantics for secure multi-node operation.
- Telegram typing indicators: typing action support with configurable throttling for more natural conversational UX.
- IM authentication IPC documentation: new standards doc covering IM auth IPC methods.
- IM display names: prefer actor titles over raw actor IDs in IM-rendered messages for better readability.
- Modal UX refinements: extracted modal close handlers and adjusted inbox modal height for cleaner interaction.
- Fixed MCP message send incorrectly collapsing
Nonerecipients to empty list, breaking broadcast semantics. - Fixed
authorized_attimestamp handling in IM Web UI. - Fixed IM KeyManager state not reloading from disk on each inbound poll, causing stale authorization data.
- Fixed docs incorrectly requiring post-bind
/subscribestep (now handled automatically).
- Actor lifecycle event coverage: daemon streaming now emits fuller actor/group lifecycle transitions for better observability and downstream automation hooks.
- Secret safety UX upgrade: actor secret keys now support masked previews in Web edit flows, improving operator confidence without exposing plaintext.
- Branding assets refresh: project logos were added and integrated into Web/README surfaces for consistent distribution identity.
- Automation idle semantics were aligned with explicit group-state behavior, reducing ambiguity in scheduled reminder execution during
idlemode. - Terminal safety hardening: resize and related terminal maintenance paths were tightened to avoid unstable behavior in mixed runtime conditions.
- Docs and onboarding were updated to match current
v0.4behavior, including SDK entry points, release hub linking, and refreshed top-level README content.
- Fixed lifecycle edge cases where actor/group state transitions and event emission could diverge.
- Fixed multiple test-surface instability points (especially MCP/environment isolation), improving release reproducibility.
- Chat-native orchestration model: operators can assign and coordinate work in a persistent Web conversation, with full delivery/read/ack/reply state tracking.
- External IM extension of the same workflow: Telegram, Slack, Discord, Feishu/Lark, and DingTalk bridges allow the same group control model outside the browser.
- Prompt-configurable multi-agent workflow design: guidance prompts and automation rules become first-class workflow controls instead of ad-hoc conventions.
- Bi-directional orchestration capability: CCCC schedules agents, and agents can schedule/manage CCCC workflows via MCP tools under explicit boundaries.
- Append-only ledger truth model: every group event is persisted in
groups/<group_id>/ledger.jsonlfor replayable, auditable operations. - Structured automation engine: interval/recurring/one-time triggers with typed actions (
notify,group_state,actor_control) for operational delegation. - Accountable messaging semantics: read cursors, acknowledgement paths, and reply-required obligations for high-signal collaboration.
- Generation shift from v0.3: replaced the tmux-first operating model with a daemon-first collaboration kernel and versioned contracts.
- Control-plane unification: Web/CLI/MCP/IM now operate on one shared state model (thin ports, daemon-owned truth).
- Runtime state standardization: operational state is managed under
CCCC_HOME(default~/.cccc/) instead of repository-local state. - Operating workflow modernization: day-to-day usage aligns around
attach / actor / group / send / mcpover tmux-era command patterns.
- Reliability hardening across RC cycles for delivery flow, automation execution, reconnect/resume handling, and registry normalization.
- Stability and UX fixes in Web interactions (including mobile operation and composer/tasking flows).
- MCP/docs/CLI parity drift reduced through dedicated guardrail tests.
- Deprecated tmux-first orchestration line from active mainline development (archived at
cccc-tmux).
- Web i18n framework: integrated
react-i18nextwith namespace-based locale loading (common,layout,chat,modals,actors,settings) and automatic browser language detection. - Chinese (zh) locale: complete Simplified Chinese translation across all 6 namespaces (735 keys), with native-level phrasing review and unified typography (full-width
:, Unicode…). - Japanese (ja) locale: complete Japanese translation across all 6 namespaces (735 keys), with native-level phrasing review and unified typography (full-width
:, Unicode…, full-width?). - Language switcher UI: minimal trigger button showing only short label (
EN/中/日), positioned at the rightmost of the header; dropdown panel with scale-in animation and left accent bar for active item; React Portal for proper positioning. - i18n key parity test: automated test to verify all locale files have identical key sets across languages.
LanguageSwitcherrefactored from cycle-button to professional popover dropdown.- Language switcher moved to header rightmost position (after Settings button) with separator.
- Shared language configuration extracted to
languages.ts. - README overhaul with comprehensive project details, architecture, features, and quick start guide.
- Installation instructions updated to use TestPyPI for release candidates.
- Docker Claude config updated with bypass permissions flag.
- Chinese locale encoding unified from
\uXXXXescape sequences to direct Unicode characters. - Chinese translation quality:
忙碌中→处理中,义务状态→回复状态,编辑器→输入框,代码片段→模板. - Japanese colon typography: 39 instances of half-width
:after CJK characters corrected to full-width:. tolabel in chat kept as English "To" in ZH/JA (international convention).- Misleading "Clipboard" label corrected to "Context" in EN/ZH/JA layout.
- Daemon modularization: extracted monolithic
server.pyinto 22+ focused ops modules with full dispatch orchestration (request_dispatch_ops.py), preserving identical logic with callback injection for all external dependencies. - MCP parity guardrails: toolspec dispatch parity test, schema guard test, CLI reference parity test, and web automation docs parity test.
- MCP toolspec normalization: consistent indentation and formatting across all 1400+ lines of tool definitions.
- Web UI component extraction:
ModalFrame,SettingsNavigation,ContextSectionJumpBar,ProjectSavedNotifyModal,ScopeTooltipextracted from monolithic modal files. - Docker deployment guide with custom API endpoint configuration and proxy handling.
- Access-token authentication gate and non-root Docker user support.
- Auto-wake disabled recipients: agents are automatically started when they receive a message.
- Message mode selector in the Web UI composer; reply-required workflow with digest nudges.
- DingTalk enhancements: message deduplication, file sending via new API, stream mode documentation.
- IM bridge improvements: proxy environment variable passthrough, implicit send behavior clarification.
cccc_group_set_stateMCP tool now acceptsstopped(mapped togroup_stop).
- Daemon ops modules use dependency injection (callbacks) instead of global imports for testability.
- Serve loop extracted to
serve_ops.py; socket protocol tosocket_protocol_ops.py. - MCP dispatcher split by namespace; tool schemas extracted from handler code.
- Web Settings:
AutomationTabsplit into focused subcomponents. - Runtime behavior tests made runner-independent for cross-platform CI.
- Registry auto-cleans orphaned entries on group load failures.
- Release and standards docs aligned to version-agnostic examples.
- Orphaned PTY actor processes cleaned up on daemon restart.
- Mobile modal UX regressions (composer, runtime selectors).
- Template import now correctly handles
auto_mark_on_delivery. - Tooltip ref callback stability in Web UI.
reply_requiredcorrectly coerced to boolean in MCP message send.
- Release candidate baseline before the rc19/rc20 quality-convergence cycle.
- Established append-only ledger, N-actor model, MCP tool surface, Web UI console, and IM bridge architecture.