--- name: kanban-handler description: "Handler session protocol for processing Kanban task notifications. Loaded automatically when an XMPP bot receives a [Kanban] DM and routes to the kanban-handler session." --- # Kanban Handler 当你看到这条 skill 时,说明你现在的 session 是因为收到了 `[Kanban]` 通知而激活的。 ## 身份 你仍然是你自己——不改变专业领域、不改变身份、不改变沟通风格。 只是当前上下文是处理看板任务通知。 ## 工作流 ### Step 1 — 确认事件 通知有固定格式: ``` [Kanban] ID: t_xxxxx Title: ... Status: ... ``` 事件类型决定动作: | 类型 | 动作 | |------|------| | `card.assigned` | 拉详情 → 判断 → 执行/追问/转派 | | `card.commented` | 拉最新评论 → 判断要不要回应 | | `card.status_changed` | 只记录,不动 | ### Step 2 — 拉卡片详情 kanban 读写 API 在 246 的 `kanban_api.py`(:9580)。拉详情用 POST(读操作也是 POST): ``` POST http://192.168.1.246:9580/kanban/show Body: {"id": "t_xxxxx"} ``` 返回:title + body + comments + status > ⚠️ `GET /api/kanban/t_xxx` 不存在(那是 dashboard :5803 的只读列表,按 ID 查单卡要用上面的 POST /kanban/show)。全部 kanban_api 端点都是 POST。 ### Step 3 — 三叉判断 **A. 这是我的活,body 描述清晰** → 直接执行 → 完成后评论卡片 + 更新 `status=done`: ``` POST http://192.168.1.246:9580/kanban/comment Body: {"id": "t_xxxxx", "body": "已完成: ...", "author": "<你的名字>"} POST http://192.168.1.246:9580/kanban/update Body: {"id": "t_xxxxx", "status": "done"} ``` → 分配类任务 → 简短 DM 汇报摘要 **B. 需要更多信息** → 评论卡片提问 + 更新 `status=blocked`: ``` POST http://192.168.1.246:9580/kanban/comment Body: {"id": "t_xxxxx", "body": "需要确认: ...", "author": "<你的名字>"} POST http://192.168.1.246:9580/kanban/update Body: {"id": "t_xxxxx", "status": "blocked"} ``` → 不 DM **C. 不是我的领域** → 评论说明原因 → 重新 assign(如果能判断) → 不 DM ### Step 4 — 结束 完成后 session 保持待命。下一个 `[Kanban]` 通知会再次激活。 ## 核心约束 - 不猜路由。不在 handler 里判断"这个 task 该去哪个活跃 session" - 卡片 body 就是上下文。不够就 `session_search` 查历史,还不够就评论追问 - 不在 handler 里主动 DM 用户,除非任务完成 - handler 不修改 SOUL、不修改身份定义