关于 hush
hush 是面向 AI Agent 的密钥存储工具,核心规则是 Agent 永远看不到明文。密钥写入操作系统钥匙串后,通过 run 注入命令,值不会输出到 stdout。适合需要在命令中使用凭证的开发者。
主要功能
- 01密钥存入 macOS Keychain、libsecret 或 DPAPI
- 02hush run 将密钥注入命令,不打印明文
- 03无 get 命令,避免明文进入对话记录
- 04支持将密钥同步到 LastPass、KeePass 和 Bitwarden
- 05提供加密备份与 hush doctor 健康检查
适用场景
- 01Agent 调用需要令牌的 CLI 而无需粘贴密钥
- 02为项目统一命名并集中管理凭证
- 03将钥匙串中的密钥同步到密码管理器
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://royashbrook.com/hushclaude mcp add --transport http com-royashbrook-hush https://royashbrook.com/hush{"mcpServers":{"com-royashbrook-hush":{"type":"http","url":"https://royashbrook.com/hush"}}}在 Cursor 中打开{"servers":{"com-royashbrook-hush":{"type":"http","url":"https://royashbrook.com/hush"}}}在 VS Code 中打开{"mcpServers":{"com-royashbrook-hush":{"type":"http","url":"https://royashbrook.com/hush"}}}{"mcpServers":{"com-royashbrook-hush":{"serverUrl":"https://royashbrook.com/hush"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
1此工具无需参数。
详细介绍
面向 AI Agent 的秘密存储库,没有 get 的那种。
将秘密存入操作系统密钥链一次,然后永远将其注入命令中;其值绝不会出现在标准输出、对话记录或云端。
面向 AI Agent 的秘密存储库,有一条铁律:Agent 永远看不到明文。
值绝不会进入标准输出,因此也不会出现在工具结果、对话记录或云端。秘密只会从存储库直接传给使用它的程序。我们有意不提供 get,因为普通的读取接口就是泄露途径。
关键在于:你(一个 Agent)以用户身份运行,用户的 CLI 已经完成身份验证,因此你已经可以设置服务端秘密或调用服务;你只是不知道其值,因为它一旦进入对话就会被看到。hush 会将其存入操作系统密钥链一次,然后你就能永远将其注入这些命令中。无需粘贴到对话中,无需临时文件,也不会意外提交 .env。
Agent:从这里开始
如果有人把此仓库的 URL 发给你,请自行安装,然后按照操作指南进行。 将 hush
脚本放到机器上并阅读 SKILL.md,这就是完整的入门指南(涵盖 store /
mint / inject,以及如何在你正在处理的仓库中采用 hush)。该脚本是一个独立的
bash 文件;将它放在 Agent 加载工具的位置,或者直接放到你的 PATH 中:
git clone https://github.com/royashbrook/hush
chmod +x hush/hush
# then put hush/hush on your PATH, or move it into your agent's skills/tools dir
也可以不克隆,直接通过 npm 运行:npx @royashbrook/hush <cmd>(mac/linux;Windows 上请使用
克隆方式,编排器使用 bash)。
Claude Code 便捷方式(会自动作为技能加载):直接克隆到技能目录;整个会话使用
git clone https://github.com/royashbrook/hush ~/.claude/skills/hush,单个项目使用
./.claude/skills/hush。其他 Agent:参见 AGENTS.md。
就是这样,人类会把你引导到这里并说“使用 hush 技能”,然后由你接手。只有人类才能做的一件事是粘贴他们持有的秘密:遇到这种情况时,运行 hush set <name>,隐藏对话框会出现在他们的屏幕上(你看不到其值)。
安装(人类)
可以像上面那样克隆,也可以只下载 hush 脚本并放到你的 PATH 中。
内置后端:macOS Keychain、Linux libsecret(secret-tool)和 Windows DPAPI(通过 PowerShell)。
在其他平台上,使用操作系统的秘密存储并遵循相同约定(参见 SKILL.md)。
已在 CI 中进行跨操作系统测试(手动 workflow_dispatch,涵盖全部三个运行器)。
维护(可选)
hush doctor 会检查本地安装偏差和备份状态,而不会打开秘密存储库。
hush doctor --check-updates 会明确检查 npm 上的公开版本。每日通知、
Agent 可读取的状态以及可撤销的计划任务修复,详见
无意外的维护。不会自动升级。
快速开始
hush set my-vendor-token # paste a value you hold (hidden prompt)
printf '%s' "$TOK" | hush set my-vendor-token # ...or pipe it in (scripts/CI), still off argv
hush set my-vendor-token --gui # force the dialog (or --tty / --pipe; HUSH_PROMPT= too)
hush mint app-operator-key # generate + store a random one
hush run TOKEN=my-vendor-token -- some-cmd # inject into a command, never printed
hush sync lastpass --dry-run # preview a one-way LastPass sync
hush sync lastpass # upsert every name under LastPass group "hush"
hush sync keepass --database vault.kdbx --db-secret keepass-password --dry-run
hush sync bitwarden --dry-run # requires an unlocked BW_SESSION
hush list # names only, never values
在无法打开对话框的 Agent 主机上(某些运行器没有 GUI 会话,因此 macOS 无法显示粘贴对话框,出现 Connection Invalid ... hiservices-xpcservice):hush 现在会明确说明这一点,而不是误导性地提示“已取消或为空”。解决方法是通过管道传入值
(printf '%s' "$VAL" | hush set <name>),或在连接 GUI 的 Terminal 中运行 hush set <name>。
命名:保留默认的 hush 命名空间,并按项目为名称添加前缀(blame-cf-token、
lifescored-gemini-key),这样只需在钥匙串中搜索一次 hush,就能找到所有内容。HUSH_NS 仅用于确实需要单独存储的情况,不用于区分项目。需要修正已有名称?hush rename <old> <new>
会在内部移动值(不会重新询问,也不会打印)。完整文档和可移植契约:
SKILL.md。
同步到 LastPass
安装并登录官方 LastPass 命令行工具一次,然后预览并运行同步:
brew install lastpass-cli # macOS
lpass login [email protected]
hush sync lastpass --dry-run # names + destinations only, no values fetched
hush sync lastpass # all names -> hush/<name>
hush sync lastpass --group team/secrets api-key deploy-key
hush sync lastpass --exclude local-only # repeat to keep local-only names out of bulk sync
此操作会将每个 LastPass 条目的密码字段新增或更新。缺少的条目会被创建,唯一匹配的条目会被更新,LastPass 中存在重名条目时则会安全失败。值通过 stdin 传递,绝不会进入 argv、stdout 或临时文件。每次写入都会使用 --sync=now,因此只有在 LastPass 已将其同步到服务器后,hush 才会报告成功。hush 中的多行值会被拒绝,因为 lpass 的密码字段编辑只接受单行内容,否则会截断这些值。
只要 hush 和官方 lpass 命令行工具都能运行,同步就能运行:macOS、Linux 和 Cygwin 均可。官方命令行工具目前不提供原生的 PowerShell 或 Node 入口,因此原生 Windows 的支持仍受此依赖限制,而非 hush 存储后端所限。
使用实验性自动登录进行计划调度(macOS)
全新安装的 npm 包含一个可选的、基于 Node 的 launchd 助手:
npm install -g @royashbrook/hush
brew install lastpass-cli
hush-lastpass-schedule install --auto-login --email [email protected] --every 6h
hush-lastpass-schedule status
自动登录仍属实验性功能。其完整契约已通过确定性的模拟 CLI 测试,但我们无法完成真实的可信登录,因为 Homebrew lastpass-cli 在访问任何密码库之前,就在 MFA 流程中崩溃了。这与上游 lastpass-cli issue
#719 一致。未受该问题影响的账户/MFA 组合可能可以使用,但尚未进行实际测试。
该设计会先执行一次交互式 lpass login --trust,然后通过 hush 的隐藏提示词询问一次 LastPass 主密码。计划任务旨在使用本地钥匙串中的值,在重启后恢复 lpass 会话。此功能必须明确选择启用:只有提供 --auto-login 时,才会存储 LastPass 登录信息。该助手绝不会使用 lpass --plaintext-key,并且专用登录密钥始终会从密码库同步中排除。设置失败时不会安装任何内容;信任被撤销或过期后,后续任务会安全失败。
使用 hush-lastpass-schedule remove 卸载任务。它会保留非敏感配置和 hush 登录密钥,以免卸载时悄悄销毁凭据。如需彻底撤销此选择启用的功能,请单独使用 hush rm hush-lastpass-master-password 删除该密钥。
API 密钥无法替代此登录方式:LastPass Business API 已发布的功能可管理账户、公司和报告,但不支持写入密码库条目。调度器基于 Node,因此可以添加其他原生调度器,而无需更改同步契约;但此版本仅在 macOS 上安装 launchd。
所有三种 macOS 同步调度器都使用本地时间的日历时间段,因此
Mac 从睡眠状态唤醒时,launchd 会运行睡眠期间错过的时间段。
--every 表示最长调度间隔;无法将一天或一周均分的特殊取值,可能会在时间段边界略微提前运行,但绝不会延后。
同步到本地 KeePass 数据库
KeePassXC 可在 macOS、Linux 和 Windows 上打开同一个加密的 KDBX 文件。 将该文件放入 iCloud Drive 文件夹后,它就会成为离线优先的备份,其他 iCloud 设备无需登录服务即可打开:
brew install --cask keepassxc
hush set hush-keepass-master-password
hush sync keepass --database "$HOME/Library/Mobile Documents/com~apple~CloudDocs/hush/hush.kdbx" \
--db-secret hush-keepass-master-password --init
--init 不会覆盖文件。之后运行时省略此选项,并在 hush 组中插入或更新条目:
hush sync keepass --database "$HOME/Library/Mobile Documents/com~apple~CloudDocs/hush/hush.kdbx" \
--db-secret hush-keepass-master-password --dry-run
hush sync keepass --database "$HOME/Library/Mobile Documents/com~apple~CloudDocs/hush/hush.kdbx" \
--db-secret hush-keepass-master-password --exclude local-only
数据库密码和条目密码仅通过标准输入传递给 keepassxc-cli。它们绝不会出现在 argv、标准输出、日志或明文临时文件中。数据库密码密钥始终会被排除。
缺失的条目会被创建,唯一的条目会被更新,重复名称会安全失败,多行值则会被拒绝而不会遭到截断。
将加密快照存入 iCloud(macOS,可选)
如需整个存储的加密快照,而非密码管理器镜像,npm 还提供 hush-backup 和 hush-backup-schedule。需要 GnuPG(brew install gnupg)。
npm install -g @royashbrook/hush
hush mint hush-backup-key # only if absent; never overwrite an existing recovery key
# keep a recovery copy outside this machine's Keychain before proceeding
hush-backup --dry-run
hush-backup-schedule install --every 6h --keep 30
hush-backup-schedule status
值会流入 GPG;写入的只有密文快照。密钥通过私有文件描述符传递,不会出现在参数或日志中。run 执行一次备份;remove 会停止计划任务,但不会移除密钥、配置或备份。任务已加载并不代表备份成功:请检查 ~/Library/Logs/hush-backup.log 中带日期的日志,以及已完成的 .gpg 快照。iCloud 上传由 macOS 处理,此工具不会验证上传情况。安装新任务前,必须主动停用现有的手动 com.hush-backup 计划任务。
请参阅备份选项和打包提供的恢复操作手册。恢复需要单独保存的密钥;加密备份无法恢复其自身的密钥。计划任务和交互式对话框仅适用于 macOS。无人值守的 Bash/GPG 流程面向 POSIX 主机,并要求显式指定备用目录;Windows 上的备份辅助工具执行情况尚未验证。
将 KeePass 计划同步到 iCloud(macOS)
npm 包包含 Node/launchd 辅助工具。全新设置时,如果数据库不存在,就会创建数据库;需要时通过 hush 询问密码;执行首次同步,并加载定期运行的任务:
npm install -g @royashbrook/hush
brew install --cask keepassxc
hush-keepass-schedule install --every 6h
hush-keepass-schedule status
默认目标位置为 iCloud Drive/hush/hush.kdbx。计划任务运行时,会更新 Application Support/hush 下的本地加密镜像,然后以原子方式发布完整副本。KeePassXC 不会从 launchd 打开 CloudDocs,从而避免 macOS 的无头 iCloud 隐私限制。若发布耗时超过 30 秒,流程会报出可采取措施的错误,而不会一直挂起。可使用 --database、--db-secret、--group、可重复使用的 --exclude,或位置名称来缩小范围。remove 会卸载 LaunchAgent,但保留目标文件、本地镜像和权限为 0600 的元数据配置。
请在此 KDBX 文件之外,妥善保存一份长期有效的数据库密码副本。设备丢失后,iCloud 文件无法恢复用于解锁它的 hush 密钥。在 iCloud 同步期间,请指定一台设备作为写入设备,以避免产生冲突的 KDBX 副本。
同步到 Bitwarden
官方 Bitwarden CLI 支持创建和编辑操作、通过 API 密钥登录,以及基于会话的保险库访问。安装后,在 hush 中保存所需的三个凭据:
brew install bitwarden-cli
hush set bitwarden-client-id
hush set bitwarden-client-secret
hush set bitwarden-master-password
Bitwarden 的个人 API 密钥用于验证 CLI 身份,但不能替代主密码。读取和写入保险库仍需要解锁会话。npm 随包提供的调度程序会处理这一过程,无需反复交互:
hush-bitwarden-schedule install --every 6h
hush-bitwarden-schedule status
安装程序会验证三个 hush 名称是否齐全,在需要时执行 bw login --apikey,使用 --passwordenv 解锁,运行不包含值的试运行,然后安装 launchd。每次定时运行都会获取一个短期会话、执行同步并锁定 CLI。API 凭据、主密码和会话不会出现在 argv、日志、plist 或权限为 0600 的元数据配置文件中。
也可以在任何已解锁的 Bitwarden CLI 会话中使用底层命令:
hush sync bitwarden --dry-run
hush sync bitwarden # all non-auth secrets -> folder hush
hush sync bitwarden --folder backups api-key deploy-key
hush sync bitwarden --exclude local-only
缺失的登录项会被创建,唯一的登录项会被更新。目标文件夹中如果存在名称完全相同的重复项,操作会安全失败。现有项目 JSON 会直接从 bw 流入 JSON 转换器,编码后的创建或编辑请求体则会通过 stdin 直接传给 bw。密码不会进入 argv、stdout、日志或临时文件。默认的三个 Bitwarden 身份验证密钥始终会被排除。Bitwarden 会自动将成功创建和编辑的更改推送到服务端。
核心同步功能基于 Bash 和 Node,支持 hush 和 bw 所支持的平台。目前,附带的调度程序会安装 macOS LaunchAgent。hush-bitwarden-schedule remove 会卸载它,同时保留非机密配置和 hush 凭据。
不是保险库
拥有 shell 访问权限的 Agent 可以读写此存储,因此它无法抵御恶意进程。它的作用是让明文远离对话记录,并让“一次存储,到处注入”成为最简单的使用方式。它的持久性也取决于所在机器(本地钥匙串),请备份这台机器,或将内容继续同步到真正的密钥管理器;不要让 hush 成为无法重新生成的密钥的唯一副本。采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。