49 KiB
Changelog
New Features
- QQ Bot inline keyboard: add support for inline keyboard buttons and INTERACTION_CREATE events. Permission requests now render as clickable buttons instead of text replies. Requires enabling the INTERACTION capability (bit 26) in the QQ Open Platform bot settings.
⚠️ QQ Bot Intent Configuration Change
The default intents for QQ Bot now include INTERACTION_CREATE (bit 26, value 1<<26). If you previously set a custom intents value without this bit, inline keyboard buttons will not work — update your intents to include bit 26. If you use the default intents, no action is needed. See config.example.toml for the new intents option.
v1.3.3-beta.4 (2026-05-28)
New Features
max_turn_time_mins: new config option — absolute wall-clock cap per agent turn that does NOT reset on tool-call events. Prevents long-running bash commands from permanently locking the session (#1091). Uses a two-phase shutdown: soft stop (10s grace) then force-kill. Session is preserved and resumed via--resumeon the next message.
Fixed
- Web console 404 regression:
make release-alldid not depend onmake web, so release binaries were built without frontend assets whenweb/dist/was empty (gitignored). All routes on the management port returned404. Fixed by addingwebas a prerequisite ofrelease-all(#1136) - Slack @mention without space:
stripAppMentionTextonly matched"> "(with trailing space), so@Bot/command(no space) was forwarded verbatim to Claude instead of being parsed as a command - DingTalk
msgtype="picture"dropped: image messages delivered as"picture"(instead of"image") were silently dropped. Both types now route to the image handler (#1128) - Feishu
require_mention = falseignored: the platform readgroup_reply_allbut users setrequire_mention = false; now both are treated as equivalent (#1141) - AskUserQuestion resolved with empty answer: delivery receipts and read-notifications (empty messages) were accepted as valid answers to
AskUserQuestion, resolving it within ~500ms before the user could respond. Empty/whitespace content is now rejected (#1086)
v1.3.3-beta.3 (2026-05-24)
Beta release with blackbox testing infrastructure, cursor/opencode agent support, and bug fixes.
New Features
- Blackbox testing framework: Phase 1-2 blackbox testing with P0/P1/P2 coverage, config-switch, and NewEnvWithSetup infrastructure
- Cursor/OpenCode agents: add cursor and opencode agent support in blackbox tests
Fixed
- Core italic wrapping: restore italic wrapping on reply footer
- Feishu footer asterisks: strip asterisks from footer to prevent Feishu markdown italic rendering
- Kimi session UUID: capture session UUID from stderr instead of stdout
- Codex stdio sentinel: add stdio sentinel for Codex app_server backend
- Windows cross-compile: add missing
CheckLingerstub todaemon/windows.goanddaemon/unsupported.gosomake release-allsucceeds for all target platforms
v1.3.3-beta.2 (2026-05-09)
Beta release with Slack Assistant API, DingTalk improvements, MAX platform webhook mode, and numerous platform fixes. No breaking changes.
New Features
- Slack Assistant API: support Slack Assistant API (Agent toggle) with natural on/off switching (#844)
- DingTalk richText: support richText message type for DingTalk platform (#828)
- DingTalk image handling: add DingTalk image message support (#828)
- MAX webhook delivery mode: add webhook delivery mode for MAX messenger platform with deployment docs (#818)
- Claude Code env vars: support project-level environment variables via
envconfig section (#812) - display_mode enum: add
display_modeenum to replace booleanquietconfig, with quiet/compact/normal/full options (#655) - Core reset_on_idle_mins default: default to 30 minutes to prevent context drift (#494)
- Claude Code custom system prompt: add support for custom system prompt configuration via
system_promptoption (#534)
Fixed
- Bridge security: require token when Bridge is enabled to prevent unauthorized access (#408)
- Feishu recalled messages: handle recalled messages gracefully (#841)
- Feishu media download failure: notify user when media download fails instead of silent drop (#815)
- WeChat video messages: send video files as proper video messages in WeChat (#813)
- WeChat incomplete delivery: notify user on incomplete message delivery and enhance retry logging (#771)
- Telegram private topics: preserve private topic session keys (#804)
- Kimi session UUID: capture session UUID from stderr instead of stdout (#766)
- Codex app_server config: app_server backend should honor model/effort/provider config + add stdio sentinel (#837)
- Codex progress rendering: render progress in rich Card 2.0 format (#838)
- Core ellipsis events: suppress ellipsis-only events and handle context indicator in footer
- Core Markdown table: render inline formatting inside GFM table cells (#675)
- Feishu user id resolution: guard user id resolution against edge cases
- Feishu thread topics: skip quote injection in thread-isolated topics (#767)
- Config display mode: honor project display mode setting
- Daemon restart: add --force flag to daemon restart command (#736)
- AskUserQuestion: use question text as answers key for proper answer routing (#822)
v1.3.3-beta.1 (2026-04-25)
Beta release with new agents, new features, and broad platform fixes. No breaking changes.
New Features
- Devin agent: add Devin CLI as a first-class agent with full
/list,/mode, and session management (#672) /pscommand (replaces/btw): send a message to a busy session mid-turn;/btwkept as alias for backward compatibility (#620)!shell shortcut: use!ls -laas shorthand for/shell ls -la, with optional--timeoutparameter (#658)- NO_REPLY suppression: agents can return
NO_REPLYto silently skip platform delivery, useful for cron/analysis tasks (#682) - Feishu shared WebSocket: multiple projects sharing the same
app_idnow share one WebSocket connection with per-projectallow_chat/group_onlyfiltering (#613) - Message queue depth configurable: new
[queue] max_depthconfig option (default 5) (#690) - Claude Code opus[1m]: add 1M-context Opus model option with shorthand descriptions (#660)
- QQ Bot file send/receive: full file attachment support with robustness checks (#685)
- Bridge ImageSender/FileSender:
cc-connect send --image/--filenow works through bridge protocol (#712) - Provider presets: add NekoCode, VisionCoder, and AIHubMix to provider presets; add Trae CLI ACP and COCO ACP config examples (#739)
Fixed
- OpenCode image handling: inbound images from WeChat/WeCom are now correctly passed to OpenCode CLI via
--fileflags (#717) - Slack Markdown: convert standard Markdown to Slack mrkdwn format (bold, italic, strike, links, headings) (#680)
- QQ Bot reconnect: cancel stale goroutines on WebSocket reconnect to prevent race conditions (#678)
- Gemini multiline prompt: pass prompt via stdin to preserve newlines (#695)
- Telegram HTML fallback: upgrade silent HTML parse failures to Warn-level logs (#674)
- Telegram /skills: show Telegram-safe skill command format (#571)
- Feishu webhook mode: skip bot open_id fetch in webhook mode for private deployments (#696)
- Reply footer: suppress footer when only workdir is known (#701)
- Web UI add-platform: fix "project not found" error when adding a new platform to an uncreated project
Contributors
Thanks to all contributors who made this release possible:
- @YoungShook — Devin agent integration, Telegram HTML fallback
- @Cigarrr — /ps command, NO_REPLY feature
- @vinnyxiong — Feishu shared WebSocket and allow_chat
- @happyTonakai — Shell
!prefix and--timeout - @AaronZ345 — Claude Code opus[1m] model
- @ferocknew — QQ Bot file support
- @soaringk — OpenCode image fix
- @Zx55 — Telegram /skills fix
- @zhaomoran — Feishu webhook mode fix
- @LyInfi — Reply footer suppression
- @meloalright — Trae/COCO ACP config examples
v1.3.2 (2026-04-21)
Hotfix release: session filtering is now configurable and defaults to showing all sessions.
Fixed
/listshows all sessions by default: the session filter introduced in v1.3.0 (which hid sessions not created by cc-connect) was accidentally merged and caused confusion. The filter is now off by default —/list,/switch, and/deleteshow all agent sessions regardless of origin.
Added
filter_external_sessionsconfig option: users who do want to hide externally-created sessions can setfilter_external_sessions = truein[[projects]]to restore the old filtering behavior.- Comprehensive integration tests: real-agent E2E tests for both Codex and Claude Code covering the full
/list→/new→ conversation →/listlifecycle with provider-based authentication (no env-var API keys required). Plus 9 adapter-level filter tests using real Codex/Claude Code session file fixtures.
v1.3.1 (2026-04-20)
Patch release with critical bug fixes for session management, config preservation, and Weibo media support.
Fixed
- Session visibility (
/list): historical Codex sessions disappeared after upgrade due toAgentSessionIDbeing cleared on/newor provider switch without preservation. AddedPastAgentSessionIDstracking with legacy data migration so existing sessions remain visible. - Session naming (
/new xxx): custom session names from/newwere not mapped to the agent session ID for agents where the ID is established asynchronously (Codex, Qoder, Kimi, etc.). Added name mapping to allEventResultandEventTexthandlers across interactive, relay, and drain paths. - Config comment preservation:
/provider switch,/model,/lang, display settings, and TTS changes now use surgical text-level editing instead of full TOML re-serialization, preserving all comments, unknown fields, and formatting. - Codex
codex_homepath: session listing, history, and deletion now consistently use the configuredcodex_homeinstead of hardcoded~/.codex. - Feishu card callback hint: log a reminder when interactive card mode is enabled but
card.action.triggermay not be subscribed.
Added
- Weibo image & file support: send and receive images and files in Weibo DMs via base64 encoding within the WebSocket
send_messagepayload. ImplementsImageSenderandFileSenderinterfaces. - Comprehensive session tests: 12 new
SessionManagerunit tests coveringPastAgentSessionIDs, legacy data migration, and version-based schema detection. 9 newEngineintegration tests covering/listvisibility across/new, provider switch, and real-world legacy data scenarios, plus end-to-end session name mapping tests for all three agent ID patterns (immediate, EventText, EventResult). - Config preservation tests: 8 new tests verifying comment and field preservation for
SaveActiveProvider,SaveAgentModel,SaveProviderModel,SaveLanguage,SaveDisplayConfig,SaveTTSMode, multi-project config, and global provider refs.
v1.3.0 (2026-04-19)
First stable release of the 1.3 series. 555 commits since v1.2.1 with major new features, platform improvements, and broad community contributions.
Highlights
- Web Admin UI — Full management dashboard embedded in the binary via
go:embed. Project CRUD, session monitoring, cron editor, provider management, chat interface, and i18n (en/zh/zh-TW/ja/es). Usecc-connect webto open directly in the browser with auto-login. - Lifecycle Event Hooks — New
[[hooks]]config to trigger shell commands or HTTP webhooks on 7 event types:message.received,message.sent,session.started,session.ended,cron.triggered,permission.requested,error. Async by default, fail-open, non-blocking. - Skill Management — New
/skillspage in the web UI with local skill browser (per-project, per-agent) and recommended skill presets fetched from remote. - Global Provider Management — Add, edit, delete providers in the web UI; import from cc-switch config; per-agent-type provider presets with featured/star badges.
New Features
cc-connect webCLI command: auto-configure web admin, open browser with token-based login- Feishu: auto-resolve
@namementions to clickable at-tags (resolve_mentionsconfig) - Feishu: multi-level reply chain recognition; done-emoji reaction after streaming
- Feishu: configurable progress display styles (compact/card)
- Claude Code: support CLI wrappers via
cli_path;/effortcommand for reasoning effort;autopermission mode;disallowed_toolsconfig - Codex: runtime reply footer; preserve workspace app-server options
- Kimi CLI: new agent support
- Pi: new agent support
- Discord: preserve table formatting; proxy support;
@everyone/@herebroadcast - Telegram: forum topic support; markdown table monospace rendering; command menu adaptation
- WeCom: configurable
api_base_urlfor private deployments; file receiving via HTTP callback - Weixin (ilink): personal chat platform with CDN media, QR setup, image/file/audio send
- Config: support
${ENV_VAR}placeholders in TOML values - Core:
/workspace initwith local directory paths;/dirdirectory history;agent-sidcommand; auto-compress context on token threshold; outgoing rate limiting - Daemon: preserve proxy env in systemd service
Bug Fixes
- Fix Windows cross-compilation (duplicate runas stub file)
- Fix web footer double 'v' prefix in version display
- Fix web modal overlay not covering full viewport (portal rendering)
- Fix provider preset cards: action buttons pinned to card bottom
- Fix web page content overlapping footer (global layout restructure)
- Fix Gemini image handling: save to workspace, prompt-based file references
- Fix Claude Code: unblock readLoop when child subprocesses hold stdout pipe
- Fix Codex: multiline prompt on resume; force-kill process group on stop
- Fix core: race condition during session cleanup; follow symlinked skill directories; persist agent_session_id; filter
/listto cc-connect owned sessions - Fix Feishu: slash commands in thread/reply context; user/chat name resolution in async goroutine
- Fix Telegram: UTF-8-safe command menu descriptions
- Fix TTS: don't send empty language_type to Qwen TTS API
- Fix config:
formatTOMLno longer strips user-set zero values - Security: mask bridge token in
/api/v1/status; path traversal protection for static files
Contributors
Thanks to all contributors who made this release possible:
- @leoliang1997 — Feishu card rendering, auto-resolve @mentions
- @xukp20 — Provider env handling, skill discovery, Codex options
- @boyu-zhu — Telegram markdown table rendering
- @RukawaKaede — Claude Code CLI wrapper support
- @meishaoqing — Feishu multi-level reply chain
- @Zx55 — Telegram command menu, symlinked skill dirs
- @leighstillard — Claude Code
/effortcommand - @ht290 — inject_sender display name
- @Sentixxx — Claude Code readLoop subprocess fix
- @bugwz — WeCom private deployment API base URL
- @cold2600438-lgtm — Kimi CLI agent
- @MeteorSkyOne — Discord table formatting
- @happyTonakai — Feishu done-emoji reaction
- @xxb — Codex reply footer, Discord session routing
- @q107580018 — Feishu delete/model card flows
- @Cigarrr — Workspace binding parsing
- @g1f9 — Local directory workspace init
- @0xsegfaulted — agent-sid command
- @yzlu0917 — Env var config placeholders
- @sidney061212-ai — Agent session ID persistence
- @zkunzhu — Daemon proxy env preservation
- @Yuri0314 — TTS language type fix
v1.2.2-beta.5 (2026-03-31)
Beta release with embedded web admin, Discord proxy support, multimodal fixes, and major platform improvements.
New Features
- Embedded Web Admin: Web frontend is now compiled into the binary via
go:embed— no separatenpm installneeded. Use/web setupto configure, or build withno_webtag to exclude. Binary size increases ~1MB (#356) - Web Admin Dashboard: Full-featured management UI with project CRUD, session management, cron job editor, global settings, chat interface with bridge WebSocket, slash commands, and i18n (en/zh/zh-TW/ja/es) (#316)
- Discord Proxy Support: Discord platform now supports
proxy,proxy_username,proxy_passwordoptions for HTTP API and WebSocket Gateway connections - Feishu Progress Styles: Configurable progress display styles (compact/card) to reduce message spam
- Claude Code Auto-Permission Mode: New
autopermission mode for Claude Code agent (#329) - WeCom File Receiving: WeCom HTTP callback now supports receiving files and forwarding them to the agent (#330)
- Outgoing Rate Limiting: Per-platform outgoing message rate limiting
- Telegram Forum Topics: Migrated to
go-telegram/botlibrary with forum topic support (#321) - Global Settings UI: Expose global configurations (language, quiet, display, stream preview, rate limit, log) in the web admin
Bug Fixes
- Gemini Image Handling: Save attachments to workspace directory instead of
/tmpso Gemini CLI tools can access them; use prompt-based file references instead of unsupported--imageflag - Security: Mask bridge token in
/api/v1/statusendpoint; add path traversal protection for static file serving - Codex: Fix multiline prompt preservation on resume (#341); force kill session process group on stop (#340)
- Session Recycling: Wait for old session to close before creating new one (#352)
- Discord: Harden session routing and remove implicit continue bridge (#322); execute slash commands when defer fails (#300)
- Slack: Pass file uploads to agent (#296)
- Telegram: UTF-8-safe command menu descriptions (#301)
- WeCom: Strip @bot mentions from inbound text (#303)
- Daemon: macOS launchd do not respawn on clean exit (#304)
- Core: Route workspace model changes through session context (#339); outgoing rate limit refinements and i18n tightening
- Config:
formatTOMLno longer strips user-set zero values (e.g.quiet = false)
Improvements
- CI: Add Node.js setup for web frontend build in CI pipeline; use
no_webtag for e2e/smoke tests - Tests: Expanded coverage across agents, config, and core packages
- Selective Compilation: Added
no_webbuild tag to exclude web assets from binary
Contributors
Special thanks to all contributors who made this release possible:
- cg33 — Embedded web admin, Discord proxy, Gemini fix, security hardening
- xxb — Discord session routing fix, codex process kill, workspace reconnect (#322, #340, #315)
- dev-null-sec — Codex multiline prompt fix (#341)
- xukp20 — Workspace model routing (#339)
- zhengbuqian — Telegram go-telegram/bot migration and forum topics (#321)
- huangdijia — Claude Code auto permission mode (#329)
- buddhism5080 — Discord file sending (#307)
v1.2.2-beta.4 (2026-03-22)
Beta release with Weixin (ilink) personal chat support, session/continue improvements, and platform fixes.
New Features
- Weixin Personal (ilink): New platform with long-poll
getUpdates/sendMessage, QRweixin setup, CDN decrypt for inbound media andImageSender/FileSenderoutbound (#257) - Telegram: Voice/audio reply support (#225) and async startup recovery
- Discord:
@everyone/@herebroadcast support (#132) - Cron: Optional new session per run and per-job timeout (#236)
- Claude Code:
disallowed_toolsconfiguration option (#232) - Auto-Compress: Compress context when estimated tokens exceed threshold (#231)
- Continue / Sessions: Fork session on
--continueto avoid context contamination (#244); replace persistedContinueSessionsentinel with real agent session id; reserve CLI--continuebridge for real user traffic - Core:
/dirdirectory history;/modelswitching aligned with provider flow (#246) - Providers: MiniMax M2.7 high-speed model added to example configs (#217)
Bug Fixes
- Weixin: Harden send path (empty body skip, response body cap, dedup keys, multi-voice segments); treat
sendMessageJSONret != 0as failure so quota/API errors surface correctly - Feishu: Always reply to the original message; dispatch message handling asynchronously (#57)
- Codex: Mode switch and
--jsonflag position fixes (#240, #239) - Multi-Workspace: Workspace command prefix missing leading slash (#135)
- Non-Claude Agents: Ignore
ContinueSessionsentinel where inappropriate (#244 follow-up) - npm / Update: Version sync after update; pre-release version comparison normalization
Improvements
- Tests: Expanded coverage across
config,core, agents, and platforms - Logging / Errors: Additional error logging in several code paths
Contributors
Special thanks to all contributors who made this release possible:
- cg33 — Weixin ilink platform, setup CLI, and CDN media (#257)
- Shawn — Feishu async dispatch and reply-to-original fixes (#57)
- quabug — Discord broadcast and non-Claude ContinueSession handling (#132, #244)
- huluma1314 — Auto-compress when token threshold exceeded (#231)
- Leigh Stillard — Fork session on
--continue(#244) - Deeka Wong — Telegram audio replies and core
/modelprovider flow (#225, #246) - q107580018 — Telegram async startup recovery
- just4zeroq — Codex mode and JSON flag fixes (#240)
- 术士木星 — Cron session-per-run and job timeout (#236)
- hushicai — Claude
disallowed_tools(#232) - Octopus — MiniMax M2.7 high-speed in examples (#217)
- alinnb —
/dirdirectory history - Claude — Continue-session bridge fixes, auto-compress/cron edge cases, Weixin send hardening and API error handling, and broad test improvements
v1.2.2-beta.3 (2026-03-19)
Beta release with major multi-user mode, improved workspace stability, and platform enhancements.
New Features
- Multi-User Mode: Per-user rate limits, role-based ACL (allow_from/admin_from), and audit logging
- ImageSender: Unified image sending support for 6 platforms (Feishu, Telegram, Discord, Slack, DingTalk, QQ)
- MiniMax M2.7: Upgraded default model from M2.5 to M2.7 for improved reasoning
- /whoami Command: Display user ID for allow_from/admin_from configuration
- /btw Command: Inject messages into busy sessions without interrupting
- /dir Command: Dynamic runtime work directory switching
- Cron Muting: Mute/unmute cron jobs with platform wrapper and UI integration
- Interrupt Support: Send interrupt signal to agent sessions (Ctrl+C equivalent)
- CORS Support: Cross-origin requests enabled for Bridge API
- Message Queuing: Queue messages when agent is busy instead of discarding
- QQ Bot Markdown: Full Markdown message support for QQ Bot
Bug Fixes
- Workspace Session Persistence: Sessions now persist to disk in multi-workspace mode
- Race Conditions: Multiple data race fixes (adminFrom, degraded field, userRolesMu)
- Memory Leaks: Fixed pendingAcks leak on WeCom WebSocket disconnect, goroutine leaks
- i18n: Complete translation coverage for error messages
- Relay Timeout: Return partial text after timeout instead of error
- QQ Bot Reconnect: Handle nil wsConn on failed reconnect
Improvements
- Message Queue: Extracted message queue handling into dedicated method
- Cron UX: Improved human-readable cron expressions
- Slack: Typing indicator, file download error handling, auth diagnostics
- Provider Config:
modelslist for per-provider model selection via alias - Build: Test infrastructure with P0/P1分层测试targets
Contributors
Special thanks to all contributors who made this release possible:
- sean2077 - Multi-user mode, ACL, and audit logging
- 0xsegfaulted - Multi-workspace fixes and interrupt support
- octo-patch - MiniMax M2.7 upgrade
- windli2018 - Bridge CORS support
- jenvan - CORS fixes
v1.2.2-beta.2 (2026-03-16)
Beta release with significant improvements to agent stability, platform onboarding, and user experience.
New Features
- Feishu/Lark CLI Onboarding: New
cc-connect feishu setupcommand with QR code terminal display for quick bot configuration, supporting both new bot creation and existing bot binding - Pi Agent: Added support for Pi coding agent with full session management and tool handling
- Session TUI Browser: New
cc-connect sessionssubcommand with terminal UI for browsing session history - Multi-Workspace Mode: Channel-based workspace resolution with auto-binding by convention and interactive init flow
- Design Documentation: Added comprehensive design plans for multi-workspace and session resilience features
- Slack Enhancements: Typing indicator via emoji reactions, mrkdwn formatting guidance in system prompt
- Session Resilience: Automatic
--continueon first connection, resume-failure fallback, and context usage indicators - Management API: HTTP REST API endpoints for external management tools with WebSocket bridge support
- Cron Setup Command:
/cron setupfor easy cron job configuration with memory file integration
Bug Fixes
- RateLimiter Goroutine Leak: Fixed cleanup goroutine not stopped on replacement and engine shutdown
- DrainEvents Infinite Loop: Fixed infinite loop when channel is closed in
drainEvents - InteractiveKey Consistency: Fixed
executeCardActionusing wrong key forinteractiveStateslookup in multi-workspace mode - Workspace Command Prefix: Fixed missing leading slash in workspace command prefix check
- Agent Session Close: Always close events channel on session timeout to prevent goroutine leaks
- Pi Agent Mutex: Move thinking field read inside mutex in
StartSessionto prevent race condition - Session AgentID Protection: Protect
Session.AgentSessionIDwrites with mutex to prevent data races - Session Routing Race: Prevent session routing race when
/newruns during active turn - Discord Duplicate Messages: Deduplicate gateway
MessageCreateevents causing duplicate responses - Codex JSON Lines: Handle large stdout JSON lines without scanner buffer overflow
- UTF-8 Safety: Use rune-based splitting in
splitMessageto prevent invalid UTF-8 sequences
Improvements
- Gemini Display: Enhanced tool display with diff syntax highlighting and improved Telegram markdown rendering
- Thread Safety: Added comprehensive thread-safe accessors for Session fields
- Test Engine: Thread safety improvements to test engine and fixed test assertions
- Input Validation: Consolidated interactive state cleanup and added input validation
- i18n: Updated rate limit messages to mention
/btwcommand for adding context during processing
Contributors
Special thanks to all contributors who made this release possible:
- kevinWangSheng - Multiple critical bug fixes (RateLimiter, drainEvents, UTF-8 safety, session routing)
- q107580018 - Feishu CLI onboarding with QR code integration
- sean2077 - Session TUI browser and sessions management
- quabug - Pi agent implementation and Discord fixes
- AtticusZeller - Gemini tool display and Telegram markdown enhancements
- leighstillard - Multi-workspace design, session resilience, and Slack improvements
- Shawn - Thread safety fixes and test improvements
- zhuguanqi - Session management and data race fixes
- Steve-Rye - JSON lines handling improvements
- Xihui He - iFlow and agent enhancements
- Mr.QiuW - Various platform improvements
v1.2.2-beta.1 (2026-03-12)
Beta release with major new features and security improvements.
New Features
/usageCommand: Add a built-in quota usage command with a generic agent usage-reporting interface; Codex now supports ChatGPT OAuth usage lookup via~/.codex/auth.json- Feishu Interactive Cards: Beautiful card-based UI for slash commands (/help, /list, /status, etc.) with tabbed navigation and in-place updates
- Lark Platform Support: Added support for Lark (飞书国际版) with proper domain handling
- Codex Reasoning Effort: New
/reasoningcommand to switch reasoning effort levels (low/medium/high) - Codex Model Cache Fallback:
/modelcommand now falls back to local~/.codex/models_cache.jsonwhen API is unavailable - Gemini Timeout Config: New
timeout_minsoption to configure per-turn timeout for Gemini agent - Batch Session Deletion:
/deletenow supports comma lists, ranges, and mixed forms for batch deletion - TTS Support: Text-to-speech with Qwen and OpenAI providers
- Admin Privilege System: Admin-only commands for privileged operations
- iFlow Tool Timeout: Configurable tool timeout and reset timer on partial completion
- Card-based Permission Prompts: Permission requests now use interactive cards with callback support
- Shared Session Support: Share sessions across all platforms with
share_session_in_channeloption
Bug Fixes
- Security Hardening: Socket permissions tightened (0600), token redaction in logs, warning for open
allow_from - Slack @mention Support: Fixed AppMentionEvent handling for channel @mentions
- Update Fallback: Self-update now falls back to .tar.gz/.zip archive when bare binary returns 404
- Skill Symlink: Fixed skill directory scanning to follow symbolic links
- QQBot Error Handling: Added error logging for json.Unmarshal and WriteJSON calls
- Claude Code Path: Fixed underscore handling in findProjectDir path matching
Improvements
- Daemon Config Flag: Support daemon install with config file path
- Message Tracing: Added message tracing and threaded replies
- Scanner Buffer: Optimized scanner buffer sizes for large outputs
v1.2.1 (2026-03-09)
Patch release with bug fixes and minor enhancements.
Bug Fixes
- Engine: Idle Timer During Permission Wait - Stop idle timer while waiting for user permission response to prevent session termination
- Feishu: Nil Pointer Checks - Add nil checks for
SenderId.OpenIdandmsg.Contentto prevent panics - Feishu: URL Validation - Validate URLs before creating hyperlinks to prevent rejection of non-HTTP(S) URLs
- Cron: Error Logging - Log
json.Unmarshalerrors instead of silently ignoring when cron file is corrupted - Engine: Stale Event Prevention - Add
drainEventsutility to clear buffered events between turns
New Features
- Bind Setup Command -
/bind setupwrites relay instructions to memory file for better bot-to-bot relay configuration
v1.2.0 (2026-03-08)
This is the first stable release of cc-connect 1.2.0, consolidating all beta changes and adding new features.
New Features (since beta.7)
- Official QQ Bot Platform: Native integration with Tencent's official QQ Bot Platform via WebSocket, supporting text, image, and document messages
- iFlow CLI Agent: Full support for iFlow CLI agent with interactive tool-call handling and mode switching
- Shell Command Execution: Custom commands can execute shell commands directly with
execfield in config - Telegram Bot Menu: Auto-register bot command menu on startup for better discoverability
- DingTalk Reply Preprocessing: Improved markdown content preprocessing for reply messages
- Multi-Bot Relay Persistence: Relay bindings now persist across restarts with improved binding messages
Improvements
- Quiet Mode:
/quietnow supports both per-session and global scope modes - Compression Command: Improved
/compresscommand handling and code refactoring - i18n: Added new message keys and improved command formatting
All 1.2.0 Highlights (from beta releases)
- Bot-to-Bot Relay: Forward messages between different messaging platforms
- Streaming Preview: Real-time message preview on Telegram, Discord, and Feishu
- Typing Indicators: Visual processing feedback on supported platforms
- Session Search: Search sessions by name, ID prefix, or summary
- Custom Slash Commands: Define reusable prompt templates
- Agent Skills Discovery: Auto-discover and invoke user-defined skills
- Daemon Mode: Run as background service with systemd/launchd support
- Rate Limiting: Per-session sliding-window rate limiter
- Command Aliases: Define shortcut aliases for commands
- Self-Update: In-place binary updates with auto-restart
- And many more improvements and bug fixes...
v1.2.0-beta.7 (2026-03-07)
New Features
- Multi-Bot Relay Binding:
/bindnow supports binding multiple bots in a group chat; use/bind <project>to add,/bind -<project>to remove specific project - System-level Systemd: Daemon mode now supports system-level systemd (
/etc/systemd/system/) when running as root, useful for servers and containers - Config Example Command:
cc-connect config-exampleprints embedded config template for quick reference - Interactive Command Buttons:
/lang,/model,/modecommands now show interactive button menus for easy selection - Exec Commands: Custom commands can execute shell commands directly with
execfield in config - Configurable Idle Timeout: Agent idle timeout can be configured via
idle_timeout_minsin config
Improvements
- Daemon Error Messages: Improved systemd detection and error messages for WSL2, containers, and SSH environments
- Codex CLI Visibility: Patched codex session source to make CLI output visible
Bug Fixes
- Streaming Preview: Fixed stale preview messages when streaming degrades
v1.2.0-beta.6 (2026-03-06)
New Features
- Bot-to-Bot Relay: Forward messages between different messaging platforms via CLI (
cc-connect relay) and internal API; enables cross-platform bot communication - Session Search: Search sessions by name, ID prefix, or summary with
/search <keyword>command - List Pagination:
/listnow supports pagination with--pageand--page-sizeflags for large session counts - Per-Platform Streaming Preview Control: Configure streaming preview per platform via
streaming_previewsetting (Telegram, Discord, Feishu) - Silent Cron Mode: Suppress cron job notification messages with
silent = truein cron job config - Voice Qwen Mode: Voice function now supports Qwen audio model for speech-to-text
- Feishu Three-Tier Rendering: Intelligent markdown rendering strategy — simple text uses plain messages, rich markdown uses Post, code blocks/tables use Card
Improvements
- Status Display: Improved
/statuscommand output with better formatting and Feishu message rendering fixes - Self-Update: Auto-restart after update; added Gitee mirror support for Chinese users
- Windows Self-Update: Full Windows support for in-place binary updates
- Message Splitting: Improved boundary checks for cleaner message chunking
- Platform Startup: Better error handling and logging during platform initialization
- Session Switch i18n: Added translation for session switch success message
Bug Fixes
- Idle Session Timeout: Added timeout for unresponsive agent sessions to prevent hangs
- Streaming Preview: Removed
maxCharscheck that caused premature preview termination - Message Deduplication: Deduplicate messages by process start time to prevent duplicate processing
v1.2.0-beta.5 (2026-03-06)
New Features
- Streaming Preview: Real-time message preview that updates in-place as the agent streams output; supported on Telegram, Discord, and Feishu with configurable interval, min delta, and max length
- Rate Limiting: Per-session sliding-window rate limiter to prevent message flooding; configurable
max_messagesandwindow_secs - Typing Indicators: Visual processing feedback — Telegram/Discord show native typing action, Feishu adds emoji reaction (auto-removed on completion)
- Command Aliases: Define shortcut aliases for commands (
[[aliases]]in config.toml or/alias add); e.g. map "帮助" → "/help" - Banned Words Filter: Block messages containing configured sensitive words (
banned_wordsin config.toml) - Project-level Command Disabling: Disable specific commands per project via
disabled_commandsconfig - Session Deletion: Delete sessions with
/delcommand /switchFuzzy Matching: Switch sessions by name, ID prefix, or summary substring in addition to numeric index
Improvements
- Streaming Preview + Tool Messages UX: In non-quiet mode, when thinking/tool messages are sent, the streaming preview freezes and the final response is delivered as a new message at the bottom of the chat (instead of silently updating an older message above the tool messages)
- Telegram Markdown→HTML: Full Markdown-to-HTML conversion with proper escaping, placeholder-based tag nesting, and automatic fallback to plain text on parse errors
- Discord Code-Fence-Aware Splitting: Message chunking now respects code block boundaries, closing and re-opening fences across splits
- Feishu Dual Rendering: Simple markdown uses Post messages (normal font), code blocks/tables use Card messages (native rendering); matches Claude-to-IM's approach
- Feishu Permission Interaction: Confirmed WebSocket mode incompatibility with card button callbacks; uses text-based
/permcommands (consistent with Claude-to-IM) - Session Creation & Naming: Improved session naming with last user message as summary
- Graceful Shutdown: Improved context handling and lock release during shutdown
- Unit Tests: Added ~50 new test cases covering markdown conversion, message splitting, session management, and engine logic
Bug Fixes
- Telegram HTML Crossed Tags: Fixed
<b><i>...</b></i>nesting issues by using placeholder-based formatting pipeline - Telegram HTML Attribute Escaping: Fixed
"in URLs breaking<a href>attributes (escape to") - Telegram Duplicate Messages: Fixed duplicate sends caused by streaming preview optimization skipping final HTML update
- Streaming Preview Cursor: Removed trailing
▍cursor from final messages - Feishu Message Recall: Unified preview and final message types to Card, eliminating unnecessary delete-and-resend
- Feishu Reaction Cleanup: Register empty handler for
im.message.reaction.deleted_v1to suppress error logs fmt.SprintfWarnings: Remove non-constant format strings flagged bygo vet
v1.2.0-beta.2 (2026-03-01)
New Features
/upgradeCommand: Check for available updates (including beta) and self-update the binary in-place; queries both GitHub and Gitee releases/restartCommand: Restart cc-connect service from chat with post-restart success notification/config reloadCommand: Hot-reload configuration (display, providers, commands) without restarting/nameCommand: Set custom display names for sessions (e.g./name my-feature,/name 3 bugfix); names persist across restarts and show in/list,/switch,/status- Default Quiet Mode: Configure
quiet = trueglobally or per-project in config.toml to suppress thinking/tool progress by default; users can still toggle with/quiet - Command Prefix Matching: Type shortened commands like
/pro lfor/provider list,/sw 2for/switch 2; works for all commands and subcommands - Numeric Session Switching:
/listshows numbered sessions;/switch 3switches by number instead of copying long IDs - Group Chat Mention Filtering: Feishu, Discord, and Telegram bots now only respond to @mentions in group chats instead of all messages
- Claude Code Router Support: Integration with Claude Code Router for enhanced routing capabilities
- Third-party Provider Proxy: Local reverse proxy rewrites incompatible
thinkingparameters for third-party LLM providers (e.g. SiliconFlow)
Improvements
- Session History for Claude Code:
/historynow works after/switchby reading from agent JSONL files - List Summary:
/listnow shows the most recent user message as summary instead of the first - Session Names in UI: Custom session names display with 📌 prefix in
/list,/switch,/status - API Server Shutdown: Clean shutdown without "use of closed network connection" error
- Agent Session Timeouts: 8-second graceful shutdown timeout for all agent sessions with kill fallback
- Feishu Rich Text: Use Post (rich text) messages instead of Interactive Cards for normal font size
Bug Fixes
- DingTalk Startup: Fix false startup failure when stream client returns nil error
- Deadlock on /new and /switch: Release lock before async agent session close to prevent hangs
- Provider Command: Correctly list providers when no active provider is set
- Unknown Command Handling: Show i18n-friendly warning and fall through to agent for native commands
Security & Reliability
- Race Condition Fixes:
sync.Oncefor channel close, mutex protection for concurrent fields, non-blocking event sends - Atomic File Writes: Config, session, and cron files use temp+rename pattern
- Message Deduplication: Platform-level dedup for Feishu and DingTalk webhooks
- HTTP Client Timeouts: Shared 30s-timeout HTTP client for all outbound requests
- Path Traversal Protection: Validate command file paths
- Sensitive Data Redaction: Redact API keys and tokens in logs
v1.2.0-beta.1 (2026-03-01)
New Features
- Custom Slash Commands: Define reusable prompt templates as global slash commands (
[[commands]]in config.toml or/commands add); supports positional parameters ({{1}}), rest parameters ({{2*}}), default values ({{1:default}}), and runtime add/del/list - Agent Skills Discovery: Auto-discover and invoke user-defined skills from agent directories (e.g.
.claude/skills/<name>/SKILL.md); list with/skills, invoke with/<skill-name> [args]; supports all agents (Claude Code, Cursor, Gemini, Codex, Qoder) /configCommand: View and modify runtime configuration (e.g.thinking_max_len,tool_max_len) from chat, with persistent save toconfig.toml/doctorCommand: Run system diagnostics covering agent authentication, platform connectivity, system resources, dependencies, and network latency; fully i18n-supported- Discord Slash Commands: Register native Discord Application Commands so typing
/shows an autocomplete menu; supports per-guild instant registration viaguild_idconfig - Daemon Mode: Run cc-connect as a background service (
cc-connect daemon install/start/stop/status/logs); supports systemd (Linux) and launchd (macOS) - Qoder CLI Agent: Full support for the Qoder coding agent with streaming JSON, mode switching, and model selection
- Telegram Proxy: Support HTTP/SOCKS5 proxy for Telegram bot API connections
- WeChat Work Proxy Auth: Add
proxy_username/proxy_passwordfor authenticated forward proxies - i18n Expansion: Add Traditional Chinese (zh-TW), Japanese (ja), and Spanish (es) language support
--stdinSupport: Read prompt from stdin for CLI usage (echo "hello" | cc-connect send --stdin)
Improvements
- Slow Operation Monitoring: Warn-level logs for slow platform send (>2s), agent start (>5s), agent close (>3s), agent send (>2s), and agent first event (>15s); turn completion logs now include
turn_duration tool_max_len=0Fix: Remove hardcoded 200-char truncation in all agent sessions (Claude Code, Cursor, Codex, Gemini, Qoder), making the user-configurabletool_max_lensetting authoritative- Cursor
/listImprovements: Parse binary blob structure to show accurate message counts and first user message summary
Bug Fixes
- Telegram proxy: Only override
http.Transportwhen proxy is actually configured - Discord interaction fallback: Gracefully fallback to channel messages when interaction token expires
v1.1.0 (2026-03-02)
New Features
/compressCommand: Compress/compact conversation context by forwarding native commands to agents (Claude Code/compact, Codex/compact, Gemini/compress); keeps long sessions manageable- Auto-Compress: Added optional automatic context compression when estimated token usage exceeds a configurable threshold (
[projects.auto_compress]). - Telegram Inline Buttons: Permission prompts on Telegram now use clickable inline keyboard buttons (Allow / Deny / Allow All) instead of requiring text replies
/modelCommand: View and switch AI models at runtime; supports numbered quick-select and custom model names. Fetches available models from provider API in real-time (Anthropic, OpenAI, Google), with built-in fallback list/memoryCommand: View and edit agent memory files (CLAUDE.md, AGENTS.md, GEMINI.md) directly from chat; supports both project-level and global-level (/memory global)/statusCommand: Display system status including project, agent, platforms, uptime, language, permission mode, session info, and cron job count
Improvements
- Cron list display: Multi-line card-style formatting with human-readable schedule translations and next execution time
- Model switch resets session: Switching model via
/modelnow starts a fresh agent session instead of resuming the old one, preventing stale context from affecting the new model - Permission modes docs: README now documents permission modes for all four agents (Claude Code, Codex, Cursor Agent, Gemini CLI)
- Natural language scheduling docs: INSTALL.md now explains how to enable cron job creation via natural language for non-Claude agents
- README revamp: Redesigned project header with architecture diagram, feature highlights, and multi-agent positioning
Bug Fixes
- Gemini
/listsummary: Fixed session list showing raw JSON ({"dummy": true}) instead of actual user message summary - GitHub Issue Templates: Added structured templates for bug reports, feature requests, and platform/agent support requests
v1.1.0-beta.7 (2026-03-02)
(see v1.1.0 above — beta.7 changes are included in the stable release)
v1.1.0-beta.6 (2026-02-28)
New Features
- QQ Platform (Beta): Support QQ messaging via OneBot v11 / NapCat WebSocket
- Cron Scheduling: Schedule recurring tasks via
/croncommand or CLI (cc-connect cron add), with JSON persistence and agent-aware session injection - Feishu Emoji Reaction: Auto-add emoji reaction (default: "OnIt") on incoming messages to confirm receipt; configurable via
reaction_emoji - Display Truncation Config: New
[display]config section to control thinking/tool message truncation (thinking_max_len,tool_max_len); set to 0 to disable truncation /versionCommand: Check current cc-connect version from within chat
Bug Fixes
- Windows
/listfix: Claude Code sessions now discoverable on Windows despite drive letter colon in project key paths - CLAUDECODE env filter: Prevent nested Claude Code session crash by filtering CLAUDECODE env var from subprocesses
Docs
- Clarified global config path
~/.cc-connect/config.tomlin INSTALL.md - Fixed markdown image syntax in Chinese README
v1.1.0-beta.5 (2026-03-01)
New Features
- Gemini CLI Agent: Full support for
geminiCLI with streaming JSON, mode switching, and provider management - Cursor Agent: Integration with Cursor Agent CLI (
agent) with mode and provider support
v1.1.0-beta.4 (2026-03-01)
Bug Fixes
- Fixed npm install: check binary version on install, replace outdated binary instead of skipping
- Added auto-reinstall logic for outdated binaries in
run.js
v1.1.0-beta.3 (2026-03-01)
New Features
- Voice Messages (STT): Transcribe voice messages to text via OpenAI Whisper, Groq Whisper, or SiliconFlow SenseVoice; requires
ffmpeg - Image Support: Handle image messages across platforms with multimodal content forwarding to agents
- CLI Send:
cc-connect sendcommand and internal Unix socket API for programmatic message sending - Message Dedup: Prevent duplicate processing of WeChat Work messages
v1.1.0-beta.2 (2026-03-01)
New Features
- Provider Management:
/providercommand for runtime API provider switching; CLIcc-connect provider add/list - Configurable Data Dir: Session data stored in
~/.cc-connect/by default (configurable viadata_dir) - Markdown Stripping: Plain text fallback for platforms that don't support markdown (e.g. WeChat)
v1.1.0-beta.1 (2026-03-01)
New Features
- Codex Agent: OpenAI Codex CLI integration
- Self-Update:
cc-connect updateandcc-connect check-updatecommands - I18n: Auto-detect language,
/langcommand to switch between English and Chinese - Session Persistence: Sessions saved to disk as JSON, restored on restart
v1.0.1 (2026-02-28)
- Bug fixes and stability improvements
v1.0.0 (2026-02-28)
- Initial release
- Claude Code agent support
- Platforms: Feishu, DingTalk, Telegram, Slack, Discord, LINE, WeChat Work
- Commands:
/new,/list,/switch,/history,/quiet,/mode,/allow,/stop,/help