DeepSeek Harness (DSH) 目前处于开发者预览阶段,其“一切皆插件”的架构让开发者可以灵活扩展功能。在实际开发中,Agent 需要记忆上下文以完成多轮任务,但传统的日志记录会泄露敏感信息,如密码或原始工具调用参数。dsh-focal 是一个插件,旨在解决这一矛盾:它提供任务隔离的本地记忆,并仅将活跃任务的上下文注入模型请求,同时确保所有存储的数据经过隐私过滤。
插件定位¶
这是一个隐私优先的任务记忆和自适应本地桌面观察插件,由 Haoran2099 维护。它基于论文 FOCAL 实现,将 Agent 会话过滤为任务隔离的记忆,并仅在需要时提供有限的上下文快照。
核心功能¶
dsh-focal 在本地对会话记录进行过滤和整理,主要包含以下能力:
- 会话观察与过滤:插件观察已提交的会话/事件记录。它使用一个小的、确定性的相似性过滤器,将直接用户消息路由到任务隔离的记忆中。
- 选择性记录:只记录工具名称、成功/失败状态以及路径参数,从不记录助手 token 流、原始工具参数或原始工具结果内容。
- 隐私保护:存储的文本经过去标记,常见凭据和电子邮件地址会被撤销。绝对路径会被处理(仅保留文件名,不写入工作区绝对路径),且绝对路径外的路径也会被缩减为 basename。
- 上下文注入:当启用
injectContext时,插件会提供一个活跃任务的运行时上下文快照和反注入策略部分,并将其加入下一次模型请求。 - 数据存储:每个会话在
$DSH_HOME/focal-dsh/v1下存储一个有界的 JSON 文档。 - 命令与工具:
- 人类命令:
/focal status、/focal tasks、/focal forget task-1、/focal forget all。 - 模型工具:
focal_status、focal_recall。
- 人类命令:
安装与启用¶
安装前请确保已安装 DeepSeek Harness v0.1.0-rc.6,并确保环境满足 Node.js 版本要求(^22.19.0 || >=24.0.0)。
使用官方命令添加插件:
dsh plugin --profile web add github:Haoran2099/focal-dsh#v0.1.1
dsh --profile web --dump-config
dsh --profile web
如果需要在无头 CLI 运行中使用,请使用 --profile headless。
安装后,可以通过覆盖插件配置文件中的 cordis.patch.yml 行来调整行为。该配置支持以下项:
- id: focal-memory
config:
captureUserText: false
captureToolPaths: true
injectContext: true
maxTasks: 32
maxObservationsPerTask: 40
maxContextObservations: 8
maxContextChars: 4000
captureUserText: false:将存储的请求文本替换为通用标记。injectContext: false:保持收集和显式回忆可用,但不再自动添加到模型请求中。
典型用法¶
安装并运行 DSH 后,可以通过以下命令与记忆系统交互:
- 查看当前状态:
/focal status - 列出所有任务记忆:
/focal tasks - 删除特定任务记忆:
/focal forget task-1 - 清空所有任务记忆:
/focal forget all
模型可以通过调用只读工具 focal_status 和 focal_recall 来读取记忆,但删除操作必须通过人类命令执行。
适用场景与注意¶
该插件适合需要在 DeepSeek Harness 中实现持久化任务记忆,且对数据隐私有严格要求的开发者。
注意事项:
1. 不可信数据:记忆数据被显式标记为不可信数据,不应将其视为指令。
2. 防御深度:过滤是防御深度措施,不能保证识别所有敏感值。请勿在提示词或工具参数中放置凭据。
3. 本地运行:插件无网络请求,无遥测,所有存储均本地化。
4. 兼容性:DeepSeek Harness 目前处于开发者预览阶段,存在破坏性变更的可能。该插件目前仅支持 Host 模式,暂无 Web UI 扩展。
短结尾¶
dsh-focal 通过在本地对 Agent 会话进行隐私过滤和任务隔离,为 DeepSeek Harness 提供了可控的记忆能力。它不记录敏感的原始数据,仅将必要的上下文注入模型,适合追求数据安全的开发者使用。