前言¶
在 DeepSeek Harness(DSH)里,智能体调用外部服务时常常需要凭证。直接让模型持有 secret value,容易把密钥带入上下文、命令或 transcript。
下面介绍 accpowered/dsh-credential-manager。它的思路是让模型按引用使用凭证:模型看到凭证名和 DSH_CM_<ID> 变量,secret value 不进入对话。
这是什么¶
accpowered/dsh-credential-manager 是 accpowered 维护的 DSH 插件,采用 MIT license。
它为 DSH 提供 named user credentials,主要包含三类能力:
- model-facing credential tools:
credential_list、credential_create、credential_read、credential_update_note - host service plugin:管理 credential metadata,并提供 secret value access behind the
ctx.credentialsseam - web client plugin:提供 Settings → Credentials 页面,用于输入和管理 write-only secret values
核心功能¶
- secret 值以
DSH_CM_<ID>环境变量的形式提供给 shell 使用。注入发生在每个 model shell execution。 - secret values 是 write-only,不会读回任何页面或 transcript。
- 过期凭证仍可工作;expiry 是 informational,并会标记在页面和
credential_list中。 credential_read只作为 deliberate last-resort escape hatch for non-shell use,不是默认使用路径。
安装¶
先执行安装命令:
dsh plugin --profile web add github:accpowered/dsh-credential-manager
如果安装过程出现 pnpm allowBuilds 提示,只允许可信来源,并考虑固定 commit。
插件会以当前 dsh 进程权限运行,因此安装前应检查源码与许可证。
典型用法¶
1、先创建占位凭证。模型调用 credential_create 时只传 credential name,不传 secret value。
2、再到 Settings → Credentials 页面输入 secret value。这个值是 write-only,之后不会读回页面或 transcript。
3、在 bash 或 pwsh 命令中使用 DSH_CM_<ID>。例如:
curl -H "Authorization: Bearer $DSH_CM_MYAPI" <your-endpoint>
这一步只让命令拿到环境变量展开后的值,不把 secret 写入对话。
4、如果确实需要非 shell 路径,再考虑 credential_read。它只是 last-resort escape hatch,优先使用 DSH_CM_<ID>。
注意¶
credential_read不应作为默认路径。- 过期凭证不会自动失效,只在页面和
credential_list中标记,便于提示轮换。 - 如果 harness 不转发
credential-manager/updated事件,Settings → Credentials 页面可能收不到来自其他 surfaces 的 live push invalidations。 - 卸载不会删除已持久化的 metadata rows 和 stored secret values。
卸载时使用:
dsh plugin --profile web remove dsh-credential-manager
结尾¶
经过上面的安装和用法,accpowered/dsh-credential-manager 把“模型能用凭证”和“secret 明文暴露”分开:模型使用名字和 DSH_CM_<ID>,人负责在 Settings → Credentials 中维护真实 secret。
GitHub:https://github.com/accpowered/dsh-credential-manager