74 PRs from 28 contributors. Big batch: new agents (Antigravity, GitHub Copilot), QQ / WeCom file
attachments, Feishu audio+video media, /timer and /cancel commands, agent-driven TTS, plus broad
platform fixes across Telegram, Discord, DingTalk, Feishu, WeCom, WeiXin, Cursor, OpenCode, Pi, and Codex.
New Features
- Google Antigravity (
agy) agent: first-class integration of Google's Antigravity CLI (#1123) - GitHub Copilot agent: first-class integration of
copilotCLI (#865) /timercommand: one-shot delayed task system (#1012)/cancelcommand: interrupt and reset current session (#957)- Session prune command: remove duplicate sessions across projects (#603)
- Agent-driven TTS send: agents can emit TTS audio output (#1230)
- Reply to unauthorized IM senders: optional acknowledgement to non-allowlisted users (#1190)
- Configurable shell + shell profile for
exec(#870) - CLI
cron add --silent: suppress cron start notification (#1285, closes #858) - Daemon EnvDiscoverer plugin hook + hardened service-file env capture (#1034)
- QQ Bot inline keyboards + INTERACTION_CREATE events — permission requests render as clickable buttons (#1131)
- QQ (OneBot): file send & receive via HTTP API (#323)
- WeCom
SendFilein WebSocket mode (#1199) - Feishu audio + video attachments as native media (#1202)
- Feishu rich card rendering + panel handling refresh (#1204)
- DingTalk reaction emoji support (#1213)
- DingTalk @mention via
send --at-users/--at-all(#1188) - Slack + tmux per-thread session scope with per-session tmux windows (#1179)
- Cron manual-trigger alignment with
exec(#1201) - Codex
request_user_inputapp-server events (#1200) - Codex relay group visibility configuration (#1209)
- Claude Code custom
append_system_promptoption (#1175) - Claude Code PermissionRequest hooks respected (#850)
- Pi
ContextUsageReporter: token stats in reply footer (#1235) - Send
--audio/--videoroutes to dedicated AudioSender / VideoSender paths (#1359)
Fixed
Engine / Core
- Permission keyword matching tolerates leading/trailing @mention (#1358)
- Validate session ID belongs to project before resume (#1276, closes #599)
/stoppreserves AgentSessionID so the next message resumes the session (#1196)- Drop stale platform permission callbacks instead of forwarding to agent (#1280, closes #826)
- Route relay through multi-workspace bindings (#328)
- Use
interactiveKeyconsistently inexecuteCardActionfor multi-workspace mode (#141) - Honor
CC_LOG_MAX_SIZEenv var at log rotation (#1243) - Handle
reset_on_idle_minscorrectly in v1.3.3-beta.4 follow-up (#1238)
Agents
- Codex:
-c sandbox_modeoverride on exec resume — fixes silent resume failure (#1360) - Codex: align suggest mode with description; replace deprecated
--full-auto(#1351) - Claude Code: preserve active provider across session resume (#1356)
- Claude Code: encode
.and@in project key to match Claude Code behavior (#1055) - Cursor: implement
interaction_querypermission flow for default mode (#1252, closes #785) - Cursor: discover CLI chat storage and show readable session titles (#1232)
- Cursor: discover skills under native
.cursor/skillslayout (#885) - OpenCode: surface tool rejection error as text to prevent empty response (#1247)
- OpenCode: eliminate TempDir cleanup race in
TestAvailableModelsunder-cover(#1254) - ACP: improve vendor compatibility for session/update parsing (#434)
- Agent runner: skip bypass-permissions flags when running as root (#1056)
- Pi: add
SetWorkDirto enable/dircommand (#1177) - Pi: read
enabledModelsfromsettings.jsonfor/model(#1178) - Pi: pipe prompt via stdin to avoid CLI option parsing (#1185)
- Pi: correct agent directory paths —
SkillDirs+GlobalMemoryFile(#1206)
Platforms
- Telegram, Discord: default
progress_styleto compact for streaming edits (#1354) - Telegram: handle "message too long" errors from HTML table expansion (#873)
- Telegram: drain pending updates before polling to prevent 409 Conflict (#425)
- Discord: platform recovery loop so transient gateway errors don't permanently break startup (#1355)
- DingTalk: handle
msgtype=fileinbound — route to FileAttachment (#1357, closes #981 file half) - DingTalk:
extractAtUserIdsregex now matches 4+ digit user IDs (#1237) - DingTalk: use
senderStaffIdfor private chat cardspaceId(#1145) - Feishu: forward link href and card button URLs to agent (#1154)
- Feishu: drop stale redelivered user messages by
create_timewatermark (#1168) - WeCom: split long messages at semantic boundaries instead of mid-word (#963)
- WeCom: strip multi-token @-mentions before slash commands (#1225)
- WeiXin: start
pollLoopafter ilink ready signal (#1242)
Other
- Update: try archive format first when downloading updates (#444)
- Windows: implement instance lock using
CreateFileexclusive mode (#1160) - Misc: P1/P2 fixes batch from post-merge QA review (#1246)
⚠️ Behavior Notes
progress_styledefault for Telegram and Discord is nowcompact(waslegacy). Streaming
edits look cleaner out of the box. Setprogress_style = "legacy"in[[projects.platforms]]
to restore the old behavior. (#1354)- DingTalk
msgtype=fileinbound messages now reach the agent. Previously silently dropped.
If you relied on this drop, you'll start receiving the file payloads. (#1357) - Engine permission keyword matching is now @mention-tolerant. Commands like
@Bot/permit
now match the same as/permit. (#1358)
Docs
- FAQ: OpenClaw via ACP, WeChat group
chat_id, Telegram proxy (#1284, closes #501/#805/#245) - Community tools page (#1137)
- Sponsors: add runapi.co (#1277)
- Prompt: clarify cron edit workflow (#1126)
- Telegram proxy config (#389)
admin_fromplacement for privileged commands (#393)
Build / CI
- Upgrade
golangci-lintto v2.11.4 for Go 1.25 support - Add
go mod verifystep in CI - Fix
go.sumhash forBurntSushi/toml v1.6.0 - Update MiniMax model to M3 in provider presets
- Maintenance path improvements (#1142)
Contributors
Thanks to all 28 contributors in this release:
- @chenhg5 — release lead, ~31 PRs across engine, agents, platforms, and tests
- @happyTonakai — 8 PRs: pi agent (
/dir,/model, paths, stdin),/timer, configurable shell, Claude Code hooks (#850, #870, #1012, #1177, #1178, #1185, #1206, #1235) - @AaronZ345 — 6 PRs: agent-driven TTS, Feishu media + rich cards, codex request_user_input, relay visibility, cron alignment (#1200, #1201, #1202, #1204, #1209, #1230)
- @kagura-agent — 2 PRs: claudecode project key + agent root bypass (#1055, #1056)
- @kevinWangSheng — 2 PRs: cursor skills layout, interactiveKey consistency (#141, #885)
- @realraelrr — 2 PRs: WeCom long-message split, reply to unauthorized senders (#963, #1190)
- @wgx521 — 2 PRs: DingTalk @mention CLI + 4-digit user ID regex (#1188, #1237)
- @7a3lv7 — QQ Bot inline keyboards (#1131)
- @GLY2024 — QQ file send/receive (#323)
- @JazzuLu — Google Antigravity agent (#1123)
- @JupiterTheWarlock — cron edit prompt docs (#1126)
- @MASAKASUNO1 — Slack/tmux per-thread sessions (#1179)
- @MMMarcinho — DingTalk reaction emoji (#1213)
- @Marvae — GitHub Copilot agent (#865)
- @STAR-REIN — community tools docs (#1137)
- @bingkxu — Windows CreateFile instance lock (#1160)
- @dcstrange — WeCom WebSocket SendFile (#1199)
- @otjdiepluong — maintenance path improvements (#1142)
- @re-f — Cursor readable session titles (#1232)
- @shellus — core
/stoppreserves AgentSessionID (#1196) - @shenyingjun5 — Feishu stale redelivered message filter (#1168)
- @skkka-2 — WeCom multi-token @mention strip (#1225)
- @sonhineboy — DingTalk private chat streaming (#1145)
- @soonwang — Claude Code custom append_system_prompt (#1175)
- @ssc806 — daemon env capture + EnvDiscoverer (#1034)
- @xukp20 — admin_from docs (#393)
- @xxb — multi-workspace relay routing (#328)
- @yzlu0917 — Telegram proxy docs (#389)
Breaking Changes
- None.
Upgrade
# npm (beta channel)
npm install -g cc-connect@beta
# or with existing install
cc-connect updateFull Changelog: v1.3.3-beta.4...v1.3.3-beta.5