前言¶
用 Agent 做开发时,讨论中常常冒出一件值得单独做的事:一个待验证的报错、一次该补的回归、一个可以拆出去的小任务。它当时不宜打断主线,但如果不记下来,关掉窗口就没了。交给模型记录要消耗一个回合,切出去记到别处又容易断掉上下文。
Glean 把这件事降级成一次纯本地写入:看到助手回复里有个候选,点一下或敲一条命令,它就进候选池文件;标记过程不唤醒模型、不占 token、不打断当前话题。候选攒够了,再打开任务台决定哪些真的要派发。
Glean 由 Morange1 维护,属于客户端插件,作者是 Morange1,在 skillhub.cn 的目录页能找到。插件名的含义是「收割后在地里拾起遗落的谷穗」。
这是什么东西¶
一句话定位:Glean 是一个工作区级别的候选任务台,抓对话里的候选事项,存到 tasks/candidates.json,并提供一个按会话分组的面板来查看、进入、完成、删除候选,以及查看已派出任务。
它解决的不是任务调度问题,而是「对话中出现的次要事项如何暂存」这个问题。候选与已派发任务是两套数据:候选在 tasks/candidates.json,已派发在 tasks/agents.json,互相不引用。
核心功能¶
标记候选,不唤醒模型。 标记动作由宿主执行,只在会话日志里留下 command/run / command/done,不派发、不打断、不花 token。
两种操作入口。 每条助手回复的操作行里有书签按钮,点击即写入;也可以在输入框敲 /candidate。按钮实际执行的是 /candidate --id=<消息ID>,所以标记的一定是你点的那条,而不是最新一条。命令可带备注:/candidate 这个值得单独做。
候选列表只读。 /candidates 打印当前候选池,最多 20 条,超出提示剩余数量;每条摘要前 80 字,不回读原文。
写回执分三种:
已标记为候选 #3 · 第 12 轮 · 写入 tasks/candidates.json
已存在候选 #3(第 12 轮)。
没有可标记的助手消息。
任务台面板。 侧栏新增 任务台 入口,按工作区展示两栏:候选区按主会话分组、可折叠,每条可「进入 / 完成 / 删除」;已派出区读 tasks/agents.json,可折叠、可星标、可删除,星标置顶。
交互语义。 「进入」让候选转 entered,宿主用 agent.followup() 唤醒主 agent 写任务书并派发;「完成」转 done;「删除」转 dropped;删除任务转 archived,台账保留。分组标题写入 tasks/sessions.json。
数据来自插件自有路由,都不缓存、不抛错:
GET /candidate-pool/data?root=…
POST /candidate-pool/enter
POST /candidate-pool/update
POST /candidate-pool/agent
POST /candidate-pool/session
未用 workspaceFiles Remote 的原因:任务台是 root 级面板,无会话绑定,而那个 Remote 需要一个可解析的会话。
安装与启用¶
插件以工作区目录形式交付,安装走插件管理器的 install_bundle,不要手写 dsh plugin add:
target: <绝对路径>/plugins/candidate-pool
安装后当前会话即可使用。宿主一侧的改动需要重启才加载新一代模块,客户端一侧刷新页面即可。
依赖分两层。宿主服务:commands、sessions、workingDirectory、webServer。客户端服务:slots、remote、remote.commands、locale;客户端插槽 conversation.chat.assistant-actions、sidebar.panellist、main,分别由 @deepseek-ai/dsh-client-ui-chat、dsh-client-ui-sidebar、dsh-client-ui-layout 提供。插件只依赖公开的 Cordis 服务与插槽,不读写其他插件的 DOM、样式或组件。
典型用法¶
1、聊到一半发现某个事项值得单独做,不打断当前话题,在助手回复的操作行点书签图标,候选即写入 tasks/candidates.json。
2、需要补一句说明时,用命令形式:
/candidate 这个值得单独做
3、查看当前候选池:
/candidates
输出形如:
候选 1 条
#1 · 第 17 轮 · 11-03 22:07 · 备注:可以都有了
插件写完了,已经装进当前 profile…
文件:tasks/candidates.json
4、决定真的要做时,打开侧栏 任务台,在候选区点「进入」。候选转 entered,宿主唤醒主 agent 写任务书并派发。之后在已派出区跟踪状态:已交付用品牌色、已采纳用绿、进行中用黄、已归档用灰。
适用场景与注意¶
适合这几类使用:长对话里攒待办、把讨论中出现的次要事项先登记后派发、想在转发前看到候选清单再决定。它也适合不想为记一条待办而打断模型的人。
有几项限制需要在用之前知道。
- 需要会话对工作区有写权限;只读沙箱下命令会返回写入失败。
- 本版只有标记与只读看板;派发、交付、归档仍由主任务手动完成并写台账。
- 任务台不显示子任务对话,也不会自动刷新,要点「刷新」或切换面板。
- 摘要截断在 200 字;需要原文时按
sessionId+seq回读会话日志,如果该消息已被压缩则为不可读。 - 查找分组目前只显示短 ID;会话标题是投影,尚未开放读取。
另需注意,插件以当前 DSH 进程的权限运行,能读写工作区文件。安装前应检查源码与许可证,本插件许可证为 MIT。当前版本 0.6.0,目录页显示星标为 0,属于个人维护的小规模项目。
结尾¶
Glean 的价值不在于做一个任务管理器,而在于把「标记候选」这一步做得足够轻:不唤醒模型、不消耗 token、不打断讨论,候选先落盘,是否派发由你后续决定。用它之前只需确认工作区有写权限,并接受「派发仍走主任务手动写台账」这一版边界。