前言¶
在 DeepSeek Harness(DSH)里给智能体挂载插件时,文件读取、外连、子进程、工具调用往往混在一起发生。出问题时你只能事后猜「是哪个插件、干了什么」;平时也看不到每一次调用是否落在声明过的能力契约里。社区插件目录 SkillHub 把 dsh-dashcam 归在 admin-security,定位不是替你判决「能不能做」,而是像行车记录仪一样把观测到的行为逐条写入可离线校验的账本。下面介绍它是什么、默认会改变什么、如何安装,以及在什么前提下才适合装。
这是什么¶
dsh-dashcam 由维护者 odysseykernelt 发布,简介概括为:面向 DSH 的 dashcam 插件——能力清单(capability manifests)、运行时守卫(runtime guards)、防篡改审计账本(tamper-evident audit ledger)。README 用一句话收紧产品边界:它记录插件实际做了什么,不负责替你决定它们可以做什么。
运行环境要求 Node.js >= 20(CommonJS);npm 包名为 dsh-dashcam,package.json 中当前版本为 2.0.3,许可证 MIT。项目自 1.11.0 起由 dsh-covenant 改名为 dsh-dashcam,能力模型语义仍以仓库内 docs/SPEC.md 为准。
安装后默认发生什么¶
零配置、默认挂载、空 config 时,插件进入 dashcam 模式:不拦截任何一次工具调用,只观测并记账。
| 维度 | 安装前 | 安装后(默认) |
|---|---|---|
| 插件活动 | 不可见,常在故障后才察觉 | 每次观测到的工具调用单独落账 |
| 归因 | 靠猜 | 账本每行带 plugin / pluginVersion |
| 是否在契约下 | 不可知 | 每行带 profiled、manifestHash |
| 防篡改 | 无 | SHA-256 哈希链;可离线逐行复算校验 |
| 拦截 | — | 无;dashcam 模式不拒绝调用 |
账本默认路径为 ~/.dsh/dsh-dashcam/ledger.jsonl(JSONL,一行一条记录)。README 中的示例字段包括:读文件 fs.read、执行 proc.spawn(如 git),decision 为 allow,ruleId 为 unprofiled,profiled: false 表示处于零契约观测。
若之后在 config 中配置 requests(插件声明可做之事)与 grants(宿主授予),同一哈希链可走 Two-Key(声明与授予的交集)做裁决;默认仍是 advisory,也可在 enforce: true 下真正拒绝。记录与裁决共用一条账链,升级路径不会分叉审计轨迹。
核心能力(已核实部分)¶
观测面¶
账本覆盖 README 明确列举的观测类型:读文件、访问主机、运行命令、调用工具。未映射的工具会以观测记录写入,并带输入预览;挂载记录会说明当前链处于何种模式,避免把未覆盖能力说成已全覆盖。
诚实记账规则¶
- 默认 fail-open:记账失败不会因此拒绝调用;会告警并尽力写入
ledger_fail标记。若需要「记账失败则拒绝运行」,可设policy.ledger.failMode: 'closed'。 decision: deny只在确有拒绝时写入;intercepted: true表示未声明的调用被实际拦截,而非假设场景。- 可选 HMAC 封存:设置
ledgerMacKey可增强防篡改(README 建议若在意账本完整性应配置)。
安装期闸门(附录能力)¶
README 附录说明:结构 / 安全 / 签名等 install-time gates 在 dashcam 产品定位下仍以证据与标签形式运行;dashcam 模式 above the fold 的主线是录制。附录演示可用 CLI 对示例恶意插件跑闸门,例如:
node bin/dsh-dashcam.js gates examples/negative-plugin --skip-signature
输出中会标明结构门阻断(如 patch 路径越界、安装脚本不在白名单等),失败信息可指向具体 manifest 字段。
底层能力面(附录 B)包括 fs.*、net.outbound、net.listen、proc.spawn 等;详细 scope 语义见仓库 docs/SPEC.md。这部分主要为「在录制之上加裁决」或企业通道场景服务,普通零契约用户可先只关心账本文件。
安装与启用¶
官方 TL;DR 为一条命令安装完整插件包,然后重启 DeepSeek Harness:
dsh plugin --profile web add dsh-dashcam
桌面配置将 --profile web 换为 --profile desktop 即可,README 写明两种方式等价。安装后默认仅观测、不阻断。
社区目录页:https://www.skillhub.cn/plugins/odysseykernelt/dsh-dashcam。源码与说明:https://github.com/odysseykernelt/dsh-dashcam。
典型用法与后续升级路径¶
第一步:零契约跑通。 保持默认空 config,正常使用 DSH 与插件;工作中打开 ~/.dsh/dsh-dashcam/ledger.jsonl,按行查看 capability、action、scope、plugin、profiled 等字段,对照当时操作是否一致。
第二步(可选):在录制之上加契约。 当需要「声明 + 授予」双重对齐时,在配置中补充 config.requests 与 config.grants;同一账本继续追加,哈希链不断裂。需要强制拒绝时再配合 enforce: true 等企业向选项(细节见 README 附录与 SPEC)。
第三步(可选):完整性。 若账本含敏感路径与时间线,按 README 建议设置 ledgerMacKey,并自行决定账本是否进入不可信备份介质。
适用场景与安装前注意¶
适合谁: 需要在本地或团队环境留存 可离线复验 的插件行为轨迹;想区分「在契约内 / 契约外(profiled)」调用;或计划在观测稳定后再叠加 Two-Key 裁决的 DSH 使用者。
必须接受的代价: README 把话说得很直白——若你不愿有组件旁观插件活动,就不要安装。宿主适配器跑在 agent 主进程内;「只记录、不拦截」恰恰意味着能看见几乎全部调用。账本本身是高价值目标(记录哪些文件何时被触碰)。安装前应自行审查源码与 MIT 许可,核对 CI 与发布渠道;不要将账本自动同步到你不信任的备份。插件以当前 DSH 进程权限运行,权限边界与 DSH 本身一致。
生态上,DSH 强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文不构成官方应用商店推荐。
结尾¶
dsh-dashcam 把 DSH 插件活动从「事后猜」变成「默认就有一条带归因与契约标记的 JSONL 账本」,并用哈希链(及可选 HMAC)支撑离线校验。默认零配置、不阻断,适合先看清再决定是否加 requests / grants。进一步了解请阅 SkillHub 目录页与 GitHub 仓库 README(含中文 README.zh-CN.md)。