为智能体每次工具调用生成可离线验证的签名记录
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/13 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/zhengqiuyang/dsh-attest-chain.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 19 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量
查看扫描证据(共 28 处,展示前 24 条)
- 写入本地文件lib/index.js:66
await mkdir(dirname(config.ledgerPath), { recursive: true }); - 写入本地文件lib/index.js:67
await appendFile(config.ledgerPath, toLineText(line) + '\n', 'utf8'); - 读取本地文件lib/keys.js:24
if (existsSync(priv) && existsSync(pub)) { - 读取本地文件lib/keys.js:26
privatePem: readFileSync(priv, 'utf8'), - 读取本地文件lib/keys.js:27
publicPem: readFileSync(pub, 'utf8'), - 读取本地文件lib/keys.js:28
keyid: keyidFromPem(readFileSync(pub, 'utf8')), - 写入本地文件lib/keys.js:34
mkdirSync(keysDir, { recursive: true }); - 写入本地文件lib/keys.js:35
writeFileSync(priv, privatePem, { mode: 0o600 }); - 写入本地文件lib/keys.js:36
writeFileSync(pub, publicPem); - 读取密钥环境变量lib/vendor/aa-core/keys.js:14
const env = process.env.AGENT_ATTEST_PRIVATE_KEY; - 读取密钥环境变量lib/vendor/aa-core/keys.js:18
const env = process.env.AGENT_ATTEST_PUBLIC_KEY; - 读取本地文件lib/vendor/aa-core/keys.js:47
if (existsSync(privatePath)) { - 写入本地文件lib/vendor/aa-core/keys.js:53
mkdirSync(dir, { recursive: true }); - 写入本地文件lib/vendor/aa-core/keys.js:55
writeFileSync(privatePath, privatePem.endsWith("\n") ? privatePem : privatePem + "\n"); - 写入本地文件lib/vendor/aa-core/keys.js:56
writeFileSync(publicPath, publicPem.endsWith("\n") ? publicPem : publicPem + "\n"); - 写入本地文件lib/vendor/aa-core/keys.js:58
chmodSync(privatePath, 0o600); - 读取本地文件lib/vendor/aa-core/keys.js:68
if (!existsSync(join(root, ".git"))) - 读取本地文件lib/vendor/aa-core/keys.js:74
const existing = existsSync(gitignore) ? readTextNormalized(gitignore) : ""; - 写入本地文件lib/vendor/aa-core/keys.js:80
writeFileSync(gitignore, next); - 读取本地文件lib/vendor/aa-core/keys.js:88
if (!existsSync(join(root, ".git"))) - 读取本地文件lib/vendor/aa-core/keys.js:103
if (!existsSync(privatePath)) { - 读取本地文件lib/vendor/aa-core/keys.js:106
if (!existsSync(publicPath)) { - 执行外部命令固定命令lib/vendor/aa-core/git.js:4
execFile("git", ["-c", "core.quotePath=false", ...args], { - 读取本地文件lib/vendor/aa-core/util.js:8
const raw = readFileSync(path, "utf8");
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 生成签名调用记录
- 哈希链式存证
- 离线验证签名
为 DeepSeek Harness 会话提供签名监管链——哈希链式、ed25519 签名的记录,如实记下智能体做了什么,提交也绑定进链中
README
由 DeepSeek 最新模型翻译生成dsh-attest-chain
为 DeepSeek Harness(dsh)会话提供带签名的监管链。
无头智能体完全绕过 PR 门禁;聊天界面展示的只是智能体自称做了什么。这个插件记录智能体实际做了什么:每个被监视的工具结果(bash、write、edit、web_fetch……)都会向一份持久化 JSONL 账本追加一条哈希链式、ed25519 签名的监管记录。改动任意一行,链就断裂;删掉尾部,它就和已发布的头部对不上。信任路径中零 LLM 调用。
同系列:dsh-read-guard 守护智能体读什么,dsh-pr-gate 把关它写什么,dsh-attest-chain 证明它做了什么。
为什么是现在(核查于 2026-10-12)
dsh 插件生态里还没有任何东西能产出防篡改的智能体活动记录。最接近的邻居要么是清单类插件(dsh-harbor,24★ —— 一份只读列表,列出装了什么),要么是加上基于 LLM 的审查。而 in-toto 形态的那条赛道 —— 带签名、可验证、CI 可消费的智能体会话证据 —— 还是空白。签名核心取自 agent-attest,它的 CI 门禁可以把这份账本当作会话侧证据来消费。
展开完整文档(README 剩余 1 节)
dsh-attest-chain
为 DeepSeek Harness(dsh)会话提供带签名的监管链。
无头智能体完全绕过 PR 门禁;聊天界面展示的只是智能体自称做了什么。这个插件记录智能体实际做了什么:每个被监视的工具结果(bash、write、edit、web_fetch……)都会向一份持久化 JSONL 账本追加一条哈希链式、ed25519 签名的监管记录。改动任意一行,链就断裂;删掉尾部,它就和已发布的头部对不上。信任路径中零 LLM 调用。
同系列:dsh-read-guard 守护智能体读什么,dsh-pr-gate 把关它写什么,dsh-attest-chain 证明它做了什么。
为什么是现在(核查于 2026-10-12)
dsh 插件生态里还没有任何东西能产出防篡改的智能体活动记录。最接近的邻居要么是清单类插件(dsh-harbor,24★ —— 一份只读列表,列出装了什么),要么是加上基于 LLM 的审查。而 in-toto 形态的那条赛道 —— 带签名、可验证、CI 可消费的智能体会话证据 —— 还是空白。签名核心取自 agent-attest,它的 CI 门禁可以把这份账本当作会话侧证据来消费。
工作原理
tool result ──> custody record {time, tool, callId, isError, sha256(content)}
──> chained: digest = sha256(canonicalJSON({seq, prevDigest, record}))
──> signed: ed25519 over the digest (keypair in .dsh-attest-chain/keys/)
──> appended: .dsh-attest-chain/session.jsonl (one line, strict order)
验证是纯离线操作:重放账本,重算每个摘要,检查每一条链接和签名。把头部摘要(或公钥)发布到任何持久的地方 —— PR 描述、CI 变量 —— 之后任何一次比对都能确定性地发现篡改或截断。
首次运行时生成密钥对;私钥那一半永远不会离开运行智能体的机器。如果你只需要针对已发布头部的防篡改能力,sign: false 会跑一条仅摘要的链。
安装
dsh plugin --profile default add dsh-attest-chain
从 npm 安装 —— 无需构建步骤,无需 allowBuilds 授权;git 安装同样是预构建好的(lib/ 随仓库一起发布)。
配置
- id: dsh-attest-chain
name: dsh-attest-chain
config:
tools: [bash, write, edit, str_replace_editor, web_fetch]
ledgerPath: .dsh-attest-chain/session.jsonl
keysDir: .dsh-attest-chain/keys
sign: true
把 .dsh-attest-chain/ 加进你仓库的 .gitignore —— 私钥绝不能提交;验证方检查的是公钥。
开发
npm install
npm test # syncs the vendored agent-attest core, builds, runs unit tests
canonical-JSON 序列化器和 ed25519 PEM 辅助函数取自同级的 agent-attest 检出(npm run sync;CI 跑 sync --check)。
路线图
- 会话结束时的 in-toto statement 信封(与 agent-attest CI 完全互通)
- 按会话 id 索引的每会话账本
- 一张 verify 工具卡片:在 Web UI 里回放 + 给出结论
- GitHub check-run 桥接:把 head digest 发到 PR
终止条件
如果 dsh 先推出第一方签名的会话记录,或者有主流插件原生加上存证,这个项目就冻结在最后一个可用版本,并在这里留一份复盘。无论哪种情况,签名核心都仍归 agent-attest 所有。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zhengqiuyang/dsh-attest-chain
为智能体每次工具调用生成可离线验证的签名记录
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7