前言¶
在 DeepSeek Harness(DSH)里让智能体使用 API Key、数据库密码或 Token 时,常见做法是把值写进对话、贴进工具参数,或让模型直接读 .env。这些路径都会增加凭证进入会话日志、工具输出或模型上下文的概率。社区插件 dsh-secrets(维护者 SiyuQian,分类 admin-security)换一种方式:智能体只声明需要哪些变量名和用途,你在 Web 界面的密码表单里填写,值经认证 API 写入工作区内的 dotenv 文件(权限 0600),模型侧仅收到状态与元数据,不接触明文。
下面按定位、机制、安装配置与使用注意说明该插件能做什么、不能做什么。
这是什么¶
dsh-secrets 是 DeepSeek Harness 的 bundle 插件,当前 package 版本为 0.1.0,许可证 MIT。它提供 request_secret 工具与配套 secrets skill,教智能体在何时、如何发起密钥请求;界面与审批提示支持中英文,并跟随 Harness 的 locale 设置(缺省为英文)。
仓库与目录页:
- GitHub:https://github.com/SiyuQian/dsh-secrets
- 社区目录:https://www.skillhub.cn/plugins/SiyuQian/dsh-secrets
工作流程¶
典型一轮交互如下:
- 智能体调用
request_secret,传入变量名、用途说明以及目标 dotenv 文件路径。 - 聊天输入框上方弹出密码表单并聚焦首字段;会话工作区折叠时仍可从工具行看到请求状态。
- 你输入的值经已认证的
/api/dsh-secrets.*路由直达 Host,不作为工具参数、工具结果或会话事件传给模型。 - 值写入 dotenv,文件模式
0600;已有行、注释与换行符尽量保留。 - 智能体只收到
{ status, path, names, added, updated, unchanged, kept }一类摘要。
子智能体与 run_code(PTC)程序无法打开该表单;若你在当前轮次取消请求,同名变量不能在同一轮再次申请。
三层防护与日志策略¶
插件在「读文件」「输出泄露」「命令外带」几类风险上做了分层限制,摘要如下:
| 层级 | 机制 | 作用 |
|---|---|---|
| L1 读守卫 | ctx.tools.guard() |
拒绝对已管理文件的 read/edit/write/grep,以及 shell 中 cat、cp、source、python -c open(...) 等读取行为;其他插件不能覆盖该拒绝。 |
| L2 脱敏 | tools/post-execute |
在所有工具结果里把已管理值替换为 [REDACTED:NAME],覆盖 base64、URL 编码、JSON 转义、十六进制等变体;脱敏失败则 withhold 输出。 |
| L3 审批 | tools/pre-execute → ask |
使用已管理变量且涉及 curl、echo、printenv、ssh 等的 shell 命令会先征求你同意。 |
此外,会话日志只记录变量名、路径与计数;registry.json 存名称、路径与 8 字符指纹,不存明文值。默认要求 env_file 位于工作目录内(可通过配置放宽)。
Settings → Secrets 以卡片列出各托管变量:完整路径、指纹、更新时间及「停止托管 / 从文件删除」等操作;长名称与路径在面板内换行,页面不展示明文。
安装与启用¶
依赖 DeepSeek Harness 0.2.x 与 Node.js 22+。
在 Harness 会话中让智能体安装 bundle(命令须与官方 README 一致):
plugin_manager install_bundle target: https://github.com/SiyuQian/dsh-secrets.git
安装后刷新 Web GUI。插件以当前 DSH 进程权限运行,安装前宜自行查看仓库源码与 MIT 许可证条款。
可选配置¶
在 profile 的 cordis.patch.yml 中可按需覆盖:
- id: dsh-secrets
name: dsh-secrets
config:
timeoutMs: 600000 # 表单超时,默认 10 分钟
dataDir: /abs/path # registry 位置,默认 $DSH_HOME/plugins/dsh-secrets
allowOutsideCwd: false # 是否允许 env_file 在工作目录外
典型用法(智能体侧)¶
你无需手写 HTTP;在对话中说明需要哪些环境变量、写入哪个 .env,并启用或已安装本插件后,智能体应通过 skill 调用 request_secret。你在表单中填写后,后续脚本或 CLI 可从 dotenv 读取,而模型上下文与工具往返中不应出现明文。
若智能体要用到已托管变量执行带外泄风险的命令,L3 会弹出审批;当前尚无「本会话始终允许」按钮,审批按单次命令生效。
适用场景与已知限制¶
适合:本地或受信工作区内,需要让 DSH 智能体配置第三方 API、数据库连接等,又希望减少密钥进入 LLM 与聊天日志的场景。
需注意:
- 若智能体自行写程序读文件并在发送前任意变换内容,可能绕过 L1–L3;应在受信工作区使用。这些机制提高门槛,不是沙箱。
- 长度不足 6 字符的值无法脱敏,设置页会标记。
- 仅支持 dotenv 文件,不支持 Keychain 或直接向进程注入环境变量。
结尾¶
dsh-secrets 把「向用户要密钥」收口到认证表单与 Host 写盘,并用读守卫、输出脱敏与命令审批降低误读、误泄风险;适合你已使用 DSH 0.2.x、并希望凭证尽量少经模型与明文日志传递时启用。
- 目录页:https://www.skillhub.cn/plugins/SiyuQian/dsh-secrets
- 仓库:https://github.com/SiyuQian/dsh-secrets