安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add github:fieldnote-ops/keyringseam
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
KeyringSeam 是面向 DeepSeek Harness ctx.credentials 接缝的独立 macOS 凭证提供方。0.2.0-rc.1 候选版本用 Developer ID 签名并经 Apple 公证的 Broker app 替换旧的 file-Keychain helper:受管值写入私有 Data Protection Keychain access group,执行 get、set、unset 前都要求设备所有者明确认证。
发布状态:
v0.2.0-rc.1已作为公开候选版发布。Agent 隔离本机验收、DSH consumer 启动、Apple 公证、staple、Gatekeeper、quarantine 下的原生/Intel 启动以及公开归档哈希复核均已通过。三台机器/24 小时外部验收暂缓;不宣称独立安全审计或陌生用户已采用。已发布的 v0.1.3 仍是旧的存储增强版本,不能描述为 Agent 隔离。
KeyringSeam 是 FIELD NOTE 独立、AI 辅助的开源项目,与 DeepSeek 或 Apple 无隶属、赞助或背书关系。DeepSeek Harness 仅用于说明兼容性;macOS 和 Keychain 是 Apple 商标。
首屏证据
| 维度 | 已验证行为 |
|---|---|
| Broker 边界 | 持久 stdin/stdout framing、空子进程环境、不使用带 secret 的 argv、有界请求/响应、串行操作与生命周期销毁。 |
| 钥匙串策略 | 私有精确 access group TU8DF2JWHF.org.fieldnote.keyringseam.broker、Data Protection Keychain、仅限本机的保护属性,以及每次 secret 操作都显式要求设备所有者认证。 |
| 同 UID 攻击 | 独立 Security.framework reader 返回 errSecMissingEntitlement (-34018);/usr/bin/security 找不到项目;复制出的原始 Broker 被拒绝;取消直接调用返回 -128 且没有 value。 |
| 二进制来源 | 通用 arm64 + x86_64 Developer ID、Hardened Runtime、安全时间戳、嵌入 profile、Apple 公证 8941cae5-75a5-4f1c-bdfb-998d1ce578c3、staple、Gatekeeper 与 quarantine 启动均已验证。 |
| Harness 集成 | 隔离 DSH 0.1.0-rc.6 完成 plugin add、组合配置替换、Web HTTP 200 启动;DSH bash tool 尝试读取时 fail-closed 且未返回 value。 |
这不是独立安全审计,也不代表陌生用户已采用。
安装公开候选版
dsh 不是系统全局命令。请在运行 Harness 的环境中安装固定 preview CLI 与 pnpm:
npm install --global pnpm @deepseek-ai/dsh@0.1.0-rc.6
dsh --version
pnpm --version
请安装公开的固定候选版本。首次运行建议使用一次性凭证,并在使用生产凭证前检查生成的 profile diff:
dsh plugin --profile web add github:fieldnote-ops/keyringseam#v0.2.0-rc.1
此前的 v0.1.3 命令仍可用于回滚,但明确属于旧的文件存储架构:
dsh plugin --profile web add github:fieldnote-ops/keyringseam#v0.1.3
安全设计
- provider 生命周期内只启动一个固定、已签名的 Broker app,通过匿名管道通信;不传递 host 环境,也不把 secret 放进命令行参数。
- 每次
get、set、unset都显式认证。取消、超时、entitlement 缺失、签名无效、钥匙串锁定、framing 损坏和原生错误都会返回错误;没有明文或旧 helper 回退。 - Broker 面向 macOS 13 及以上,包含 Apple Silicon 与 Intel slice。使用者运行时不需要 Swift、Xcode 或 Apple 命令行开发工具。
- 环境变量仍是只读最高优先级;项目与用户
.envfallback 仍低于受管 Keychain 来源。 - 用户主动批准意外认证窗口、被攻陷的 macOS 账户、对可信 Harness host 的调试权限,以及可信 host 本身,都不在边界内。
维护者验证
npm ci
npm run check
node scripts/broker-architecture-smoke.mjs native
node scripts/broker-architecture-smoke.mjs x86_64
构建新 Broker 必须使用精确 Developer ID 身份与批准的 provisioning profile:
KEYRINGSEAM_SIGN_IDENTITY='Developer ID Application: Legal Name (TEAMID)' \
KEYRINGSEAM_PROVISIONING_PROFILE='/absolute/path/to/profile.provisionprofile' \
npm run build:broker
公证使用本机钥匙串中的 keyringseam-notary profile,通过 scripts/notarize-broker.sh 完成;不得绕过安全时间戳或 staple 验证。
详见 Agent 隔离设计 与 SECURITY.md。