You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Migrated from issue #112, originally opened by @AIwork4me. Moved to a discussion for broader design conversation.
Core pain point
Multiple executive customers report the same scenario every day:
Come back from a meeting, and WeChat / Feishu / DingTalk / WeCom have 99+ unread group messages, several of which @-mention me with action items. Skimming is exhausting, important information is drowned in noise, things that should have been answered weren't, things that should have been done get missed.
This is a daily, extremely high-frequency pain across essentially every knowledge worker:
Too many groups, too many messages, the human brain can't process them.
Important information (@-me, action items, decision asks) gets buried in noise.
High reply pressure — every message needs reading plus reply composition.
Particularly severe for executives — more managed groups, more cross-team groups, higher information density.
This issue proposes a skill, chat-copilot, that automatically reads group messages from multiple chat platforms, generates a structured digest, ranks priorities, suggests replies, and — after user confirmation — sends them with one click.
Smart bot + long-poll mode; limitation: still limited group-message ingest
WeChat (personal)
❌ No official API
❌ No official API
Low
Manual forwarding / screenshot → OCR parsing as a workaround
Priority strategy: Feishu first (most complete APIs) → DingTalk / WeCom next → WeChat via workaround.
Functional design
1. Scheduled message fetch
On the configured cadence (default every 30 min), automatically fetch:
- All new messages in joined groups (since last fetch)
- Messages that @-mention me (flagged separately)
- Messages containing action-item / decision keywords (auto-detected)
- DMs (optional)
Fetch strategy:
Platform
Mode
Notes
Feishu
Event subscription (WebSocket)
Real-time push, no polling
DingTalk
Stream mode + scheduled backfill
@-bot real-time + history backfill
WeCom
Smart-bot long connection
@-bot ingest + app-message read
WeChat
Manual trigger / forwarding bot
Forward group messages to the bot, or screenshot + OCR
2. Smart digest
Structure collected messages as:
📋 Group message daily — 2026-04-28 08:00
🔴 Urgent (3)
├─ [Product] @you Director Zhang needs Q2 roadmap by tomorrow → suggested: "Got it, will send Q2 roadmap draft this afternoon"
├─ [Customer] Customer reports prod bug affecting payment → suggested: "Received, investigating, ETA 1h to fix"
└─ [Ops] Server CPU alert, need to confirm scale-out plan → suggested: "Approve plan B, please proceed"
🟡 Important (5)
├─ [Design] Design spec updated, needs sign-off → suggested: "Approved, ready to hand off to dev"
├─ [Hiring] HR confirmed 3 candidates for interviews next week → suggested: "OK, Tuesday afternoon works"
└─ ...
🟢 Normal (12)
├─ [Casual] Non-work chatter...
└─ ...
📝 Action items (2)
1. Send Q2 roadmap to Director Zhang by tomorrow [due: tomorrow]
2. Confirm server scale-out plan [due: today]
Digest dimensions:
Dimension
Notes
Priority ranking
🔴 Urgent / 🟡 Important / 🟢 Normal, based on @-mentions, keywords, sender role
LLM-generated suggestions follow these principles:
Concise and professional — default 1–2 sentences, no filler.
Tone match — adjusts to group style (formal / informal) and sender relationship.
Editable — users can modify before sending.
Multi-option — offers 2–3 candidates.
Style-learning — gradually learns the user's personal reply style from history.
5. Confirm & send
User flow:
1. Review digest → pick messages to reply to
2. Read suggestions → edit / pick / rewrite
3. Confirm → auto-send to the target group / DM
4. Mark processed → won't reappear in the next digest
Safety:
Every reply must be user-confirmed; never auto-sent.
Sensitive groups (customer-facing, executive) support "double confirm."
Preview the final message before send.
Support recall within the platform-allowed window.
The project's channels module already supports config management for 6+ platforms (Feishu, DingTalk, WeCom, etc. — appId / appSecret / credentials). chat-copilot reads those configs directly — no duplicate credential setup. The user configures credentials once in channels, and chat-copilot picks them up.
---name: chat-copilotdescription: Group-message assistant. Use when the user needs help processing a flood of unread group chat messages — auto-digest, priority ranking, suggested replies, and confirmed sending. Works with Feishu, DingTalk, WeCom, and WeChat.metadata:
openclaw:
requires:
anyBins:
- node---# chat-copilot
Use this skill when the user returns to a flood of unread messages
across Feishu, DingTalk, WeCom, or WeChat groups and needs help
processing them efficiently.
This skill reads messages from configured chat platforms, generates
a structured digest with priority ranking, suggests replies, and
sends them after user confirmation.
## Critical rule- NEVER auto-send without explicit user confirmation
- ALWAYS show the final message content before sending
- Mark sensitive groups (customer-facing, executive) for double-confirm
## Commands# Fetch new messages and generate a digest
node ${SKILL_DIR}/scripts/fetch-messages.mjs --platform feishu --since last
# Produce a prioritized digest
node ${SKILL_DIR}/scripts/generate-digest.mjs --summary --top 20
# Generate suggested replies for a message
node ${SKILL_DIR}/scripts/suggest-replies.mjs --message-id xxx --count 3
# Confirm and send a reply
node ${SKILL_DIR}/scripts/confirm-send.mjs --message-id xxx --reply "Confirmed, received" --platform feishu
# Learn user reply style
node ${SKILL_DIR}/scripts/learn-style.mjs --from-history
Handling the high volume of unread group messages is crucial to streamline workflow, especially when important information is buried in noise. I'd tackle this by developing a chat-copilot skill that integrates with Feishu first, using event subscriptions to fetch messages, summarize, prioritize, and suggest replies, before expanding to DingTalk and WeCom. I can have a prototype PR ready within 5 days. I've previously developed similar solutions for enterprise chat systems, ensuring robust integrations and effective user-driven automation.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Core pain point
Multiple executive customers report the same scenario every day:
This is a daily, extremely high-frequency pain across essentially every knowledge worker:
This issue proposes a skill,
chat-copilot, that automatically reads group messages from multiple chat platforms, generates a structured digest, ranks priorities, suggests replies, and — after user confirmation — sends them with one click.Design: the
chat-copilotskillCore flow
Per-platform feasibility
im:message.group_msgreads all group messagesPOST /open-apis/im/v1/messages, 1000/minPriority strategy: Feishu first (most complete APIs) → DingTalk / WeCom next → WeChat via workaround.
Functional design
1. Scheduled message fetch
Fetch strategy:
2. Smart digest
Structure collected messages as:
Digest dimensions:
3. Priority scoring
Weights are user-tunable.
4. Suggested reply generation
LLM-generated suggestions follow these principles:
5. Confirm & send
Safety:
Architecture
Coordination with the existing
channelsmodule:The project's
channelsmodule already supports config management for 6+ platforms (Feishu, DingTalk, WeCom, etc. — appId / appSecret / credentials).chat-copilotreads those configs directly — no duplicate credential setup. The user configures credentials once in channels, and chat-copilot picks them up.Directory layout
Frontend module (companion):
SKILL.md sketch
Example user config
{ "platforms": { "feishu": { "appId": "cli_xxx", "appSecret": "***", "mode": "websocket", "groups": { "include": ["Product", "Customer", "Ops"], "exclude": ["Casual"] } }, "dingtalk": { "clientId": "xxx", "clientSecret": "***", "mode": "stream", "groups": { "include": ["*"], "policy": "mentioned_only" } }, "wecom": { "corpId": "xxx", "agentId": "xxx", "secret": "***" } }, "schedule": "*/30 * * * *", "digest": { "maxItems": 50, "groupBy": "priority", "showReplies": true }, "reply": { "autoSuggest": true, "style": "professional", "sensitiveGroups": ["Customer", "Executive"], "requireDoubleConfirm": true }, "priorityWeights": { "isMentioned": 1.0, "senderAuthority": 0.7, "urgencyKeywords": 0.8, "isActionItem": 0.9, "threadReplies": 0.3, "timeDecay": 0.5 } }Rollout plan
Phase 1 — Feishu MVP
chat-copilotskill directory and script framework.Phase 2 — DingTalk + WeCom + multi-group management
Phase 3 — WeChat workaround + smarter digest
clawprobe-cost-digest).Key design decisions
Why is "never auto-send" a core principle?
Executive customers have strong concerns about "AI replying for me":
Therefore the core principle is: AI suggests, human decides, system executes.
Why reuse the
channelsmodule?The project's
channelsmodule already handles platform config (credentials, policies, permissions). Reuse over rebuild:channelsdmPolicy/groupPolicynaturally apply to message-collection scope.Why Feishu first?
Feishu has the most complete API:
im:message.group_msgreads all group messages (not only @-bot).Technical constraints (project conventions)
AdapterResult<T>.exec— same pattern asclawprobe-cost-digest.~/.openclaw/chat-copilot/cache/.Relation to existing issues / skills
channelsmoduleclawprobe-cost-digest--summarymode; daily/weekly reports can coordinate.content-draftpaddleocr-doc-parsingAcceptance criteria
bundled-skills/chat-copilot/directory complete.__tests__/coverage.npm testpasses locally.Prior comments (from original issue)
@snakefood3232 (2026-04-28T10:44:57Z):
Handling the high volume of unread group messages is crucial to streamline workflow, especially when important information is buried in noise. I'd tackle this by developing a
chat-copilotskill that integrates with Feishu first, using event subscriptions to fetch messages, summarize, prioritize, and suggest replies, before expanding to DingTalk and WeCom. I can have a prototype PR ready within 5 days. I've previously developed similar solutions for enterprise chat systems, ensuring robust integrations and effective user-driven automation.All reactions