dsh-secrets:在 DSH 中通过安全表单收集密钥,避免凭证进入模型上下文

前言

在 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

工作流程

典型一轮交互如下:

  1. 智能体调用 request_secret,传入变量名、用途说明以及目标 dotenv 文件路径。
  2. 聊天输入框上方弹出密码表单并聚焦首字段;会话工作区折叠时仍可从工具行看到请求状态。
  3. 你输入的值经已认证的 /api/dsh-secrets.* 路由直达 Host,不作为工具参数、工具结果或会话事件传给模型。
  4. 值写入 dotenv,文件模式 0600;已有行、注释与换行符尽量保留。
  5. 智能体只收到 { 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜