| name | cw-workspace-briefing |
| description | 生成坚果云工作台每日任务简报。使用 workspace.jianguoyun.com 的 WebMCP 工具拉取今日待办,两级过滤(1月+非系统提醒),检测 @mention,紧急度评分,输出带超链接的 Markdown 简报。当用户说"今日简报""每日任务""任务简报""坚果云简报""今天的任务"时触发。 |
| category | general |
| tags | ["jianguoyun","briefing","ticket","todo","坚果云","简报"] |
| triggers | {"keywords":["今日简报","每日任务","任务简报","坚果云简报","工作台简报","坚果云任务","今天任务","待办简报","今天有什么任务","看看今天任务"]} |
坚果云工作台每日任务简报
使用 workspace.jianguoyun.com WebMCP 工具生成今日任务简报。
核心数据源
| 工具 | 用途 | 优先级 |
|---|
get_today_todos | 今日待办任务列表 | 主数据源 |
get_unread_messages | 未读消息(检测新的 @mention) | 辅助 |
get_recent_updates | 最近更新任务 | 辅助 |
执行流程
① get_today_todos (page_size=50)
↓
② 两级过滤
↓
③ fetch_ticket_timeline × N (message_count=200, 只对保留项)
↓
④ Python: 时间戳解析 → 过滤今日消息 → @mention 检测 → 评分
↓
⑤ 生成 Markdown 简报(含摘要、行动建议、紧急度)
↓
⑥ 如适用,询问用户是否代发消息 → message_send_text
两级过滤规则
Level 1: update_time > 1个月前 ← 过滤真正僵尸任务
Level 2: latest_msg_type ≠ "SystemMessage" ← 过滤仅靠系统提醒续命的旧任务
⚠️ 只靠 Level 1 不够——「工作台小助手」的系统提醒会虚增 update_time。
应用的逻辑:只对两级过滤后保留的任务拉取时间线,避免浪费请求。
当前用户
从 MEMORY.md 或对话上下文获取当前用户信息。需提取以下字段用于 @mention 检测和消息发送:
- 用户 ID:
MEMORY.md 中的 AaBbCcDd1234... 格式 base64 字符串
- 昵称:
MEMORY.md 中的 nickname: 或中文显示名
示例值(纯 mock):
- 用户 ID:
AbCdEf1234567890abcdef1234567890abcdef12=
- 昵称:
张三
@mention 检测
使用当前用户的 ID 和昵称进行匹配。两种格式都要检测:
- GeneralMessage HTML:
<span data-type="MentionNode" data-id="<USER_ID>" data-display-name="<NICKNAME>">
- GeneralMessage plain text:
[@~<USER_ID>]
SystemMessage 中的 [@~id=] 不计入真人 @mention(那是系统提醒)。
今日消息过滤
在 Python 中计算今日起始时间戳(CST, UTC+8):
from datetime import datetime, timezone, timedelta
cst = timezone(timedelta(hours=8))
today_start = int(datetime.now(cst).replace(hour=0, minute=0, second=0, microsecond=0).timestamp())
只统计 message.time >= today_start 的消息。
紧急度评分
| 条件 | 加分 | 说明 |
|---|
| 今日有新消息 | +3 | 消息时间戳在今日范围内 |
| 真人 @mention 当前用户 | +3 | GeneralMessage 中检测到 MentionNode 指向当前用户 |
| 你是 handler | +2 | handler_user_id == 当前用户 ID |
| 系统催促 ≥ 3 次 | +1 | SystemMessage 中"近期没有更新"次数 |
| 推迟已到期 | +3 | 最新 SystemMessage 为"推迟已到期"且到期日 ≤ 今天 |
| 评分 | 等级 | |
| ------ | ------ | |
| ≥ 6 | 🔴 紧急 | |
| 3-5 | 🟡 需要关注 | |
| < 3 | 🟢 例行跟进 | |
信号展示格式
每条信号独立成行,全中文、带 emoji,不用英文缩略语:
| 含义 | 展示格式 |
|---|
| 你是处理人 | 👤 你是处理人 |
| 推迟已到期 | ⏰ 推迟已到期 |
| 今日有新消息 | 🆕 今日有新消息 |
| 真人 @了你 | 💬 张三、李四 @了你 |
| 系统多次催促 | 🔔 系统已催促 N 次 |
| 近期有讨论 | 📨 近期有讨论 |
URL 拼接规则
ticket_id 和 msg_id 从 fetch_ticket_timeline 返回值获取:
- 任务链接:
https://workspace.jianguoyun.com/task/tickets/{ticket_id}
- 消息链接:
https://workspace.jianguoyun.com/task/tickets/{ticket_id}?msgId={msg_id}
简报输出模板
整体结构
# 📊 今日任务简报 — YYYY-MM-DD (周X)
> 过滤规则: 1个月内 + 非系统提醒 | 原始 N 条 → M 条 真实活跃
## 🔴 紧急
[每个紧急任务一条,含标题链接、评分、信号、摘要、行动建议]
## 🟡 需要关注
[同上]
## 🟢 例行跟进 (K 条)
| # | 任务 | 行动建议 |
|---|------|----------|
| N | [{subject}]({ticket_url}) | {1 句话行动建议} |
---
### 📬 可代发消息
[如有任务需要你在群聊中发声推进,列出拟发送的消息,询问用户是否发送]
单条任务模板
### [#{public_id} {subject}]({ticket_url})
**评分: X/12** | 更新: {update_date}
👤 你是处理人 · ⏰ 推迟已到期({expire_date})
💬 {mentioner_names} @了你
🆕 今日有新消息
> **摘要**:{2-4 句话的中文摘要,描述最近动态和关键进展}
> 🎯 **行动建议**:{必填!具体可执行的下一步行动,分析阻塞点并给出明确指令}
行动建议与卡点分析(每条任务必填)
每条任务都必须包含一段行动建议,以 > 🎯 **行动建议**: 开头。
分析维度
阅读任务时间线的全部消息后,从以下维度分析:
| 维度 | 问自己 | 信号 |
|---|
| 阻塞点 | 任务卡在哪里? | 最后一条消息是谁发的?是否有未回复的问题? |
| 责任人 | 下一步该谁动? | 你在等别人回复,还是别人在等你动手? |
| 时效性 | 是否已过期/即将过期? | 推迟到期日、创建日期距今多久 |
| 可行动性 | 你能做什么? | 是代码修复、排查日志、回复确认、还是协调他人? |
常见模式与建议模板
| 模式 | 特征 | 行动建议模板 |
|---|
| 等你动手 | 别人已提供信息/确认,等你执行 | 尽快处理:{具体做什么}。已有 {谁} 提供了 {什么信息},可以开始执行。 |
| 等别人回复 | 你已提问/请求,对方未回 | 需要催促 {谁} 回复关于 {什么问题}。如超过{X}天未回,可考虑升级或自行决策。 |
| 长期静默 | 超过2周无任何更新 | 任务已停滞 {X} 天。建议:①确认是否仍需处理;②如需处理,明确下一步并@相关人;③如已不重要,可关闭。 |
| 系统反复催促 | 被催促 ≥ 3 次 | 已被系统催促 {X} 次,需排优先级。如无法近期处理,建议标记推迟并写明原因。 |
| 技术排查中 | 有日志/调试/部署类讨论 | 继续跟进 {排查方向}。关注 {什么指标/日志},确认后回复 {谁}。 |
| 等待外部条件 | 等部署、等日志、等第三方 | 当前阻塞于 {外部条件}。预计 {何时} 可就绪。就绪后需 {做什么}。 |
| 决策待定 | 讨论方案但未定论 | 需要推动决策:{方案A vs 方案B}。建议 {你的倾向},@相关人确认。 |
输出格式
每条任务摘要后紧接着行动建议,不可以省略:
> **摘要**:{2-4 句话描述最近动态,提到关键人名和具体事件}
> 🎯 **行动建议**:{具体、可执行的下一步行动,1-2 句话}
摘要要点:根据 fetch_ticket_timeline 返回的消息内容直接用中文生成。覆盖最近动态,提到关键人名和具体事件(如"张三将任务移交给你")。
注意事项
- 建议必须具体可执行,不要说"继续跟进"这种空话,要说明跟进什么
- 如果任务实际上是别人在等你,明确指出
- 对于长期静默任务,给出明确的「关闭 or 推进」二选一建议,不要模棱两可
- 如果任务有多人参与讨论但无定论,建议推动决策而非继续讨论
代发消息
如果行动建议涉及需要你在任务群聊中发声推进,在简报末尾询问用户是否需要代发消息。使用 message_send_text 工具。
触发条件:行动建议涉及需要你在任务群聊中发声推进的任何场景(催促回复、确认状态、推动决策等)。
工具参数:
| 参数 | 必填 | 说明 |
|---|
data | ✅ | 消息正文,可以是纯文本,也支持 JSON: {"content":"...","content_type":"plain"} |
public_id | ✅(群聊时) | 任务数字 ID(从 get_today_todos 返回的 ticket 对象或 fetch_ticket_timeline 响应中提取),如 "123456"。本 skill 只用 public_id 发到任务群聊;nickname/email 用于私信场景,此处不用 |
交互流程:
简报输出完毕
↓
询问用户:「需要我帮你在以下任务中发送消息吗?」
- 列出可代发的任务和拟发送的消息内容
- 用户选择要发送的任务(可多选)
- 依次调用 message_send_text 发送
消息内容要求:
- 以当前用户的口吻(即你的口吻),用中文自然语言
- 简洁直接,说明当前状况和需要对方做什么
- 示例:「@李四 这个任务上次讨论的方案A vs 方案B,你这边倾向哪个?我们定一下方向我好推进。」
时间戳转换
所有时间戳为 Unix 秒,转 CST 需 +8 小时:
dt = datetime.fromtimestamp(ts, tz=timezone.utc) + timedelta(hours=8)