
aquaman v0.14.0
🔱 唯一独立的AI代理凭据代理:自带保险库隔离和最小权限请求策略。您的密钥仍留在您原本存放的地方,绝不会进入代理的内存。兼容 1Password、keychain、keepassxc 等众多工具。
🔱 Aquaman
🔱 唯一面向 AI 代理的独立凭据代理:自带保险库(bring-your-own-vault)隔离与最小权限请求策略。你的密钥始终留在你原本存放它们的地方,绝不会进入代理的内存。兼容 1Password、keychain、keepassxc 以及许多其他工具。
你配置好了 Claude Code、Codex、OpenClaw、Hermes 或 Docker Sandboxes,现在却盯着 .env 文件,里面明文躺着你的宝贵 API 密钥。你读过那些文章。你知道当代理遭遇提示注入时会发生什么。我们懂。
Aquaman 通过三层防御解决这个问题:
- 进程隔离:API 密钥存放在独立的代理进程中,在出口处注入。代理只持有一个标记,从不持有密钥,因此即使代理发生 RCE 也无法读取密钥。编码代理只能获得你声明的引用,且一次只能执行一条命令。
- 请求策略:按服务设定的规则控制代理可以调用哪些端点。阻止管理 API、防止删除、允许草稿但拒绝发送。被拒绝的请求永远不会获得真实凭据。
- 防篡改审计:每次凭据使用都会以 SHA-256 哈希链记录。你可以证明访问了什么,并在事后检测篡改。
选择你的路径
Aquaman 以四个协同工作的包发布,共享同一个保险库 + 同一个守护进程。只安装你需要的部分:
| 包 | 功能 | 何时安装 |
|---|---|---|
aquaman-proxy | 核心:保险库、守护进程、审计、策略、CLI。所有人都需要的那一块。 | 始终安装。 |
aquaman-plugin | OpenClaw Gateway 适配器。在 Gateway 启动时拉起代理;将模型和 Telegram 流量路由通过它;跨 5 种认证模式提供 25 个内置服务。 | 如果你运行 OpenClaw Gateway。也可在 https://clawhub.ai/plugins/aquaman-plugin 获取 |
aquaman-coder | AI 编码代理适配器。项目作用域的 aquaman://service/key 引用在每次 Bash 工具调用时解析。 | 如果你使用 Claude Code 或 Codex。 |
aquaman-hermes | Hermes 代理宿主插件(Python,发布于 PyPI)。通过其原生 ANTHROPIC_BASE_URL/OPENAI_BASE_URL 将 Hermes 指向一个需主动启用、令牌门控的环回监听器;新增会话内 /aquaman-status 命令、工具和健康探测。隔离在代理侧完成;插件不持有任何凭据。 | 如果你运行 Hermes 代理宿主。pip install aquaman-hermes |
| Docker Sandboxes | 不是包:一条独立路径,只需要 aquaman-proxy。Docker 自带的代理负责注入密钥;aquaman get 从你的保险库提供它们,并附带允许列表和审计日志。 | 如果你在 Docker Sandboxes 中运行代理。参见快速开始 5。 |
| NVIDIA OpenShell | 不是包:aquaman daemon 成为 OpenShell 网关的凭据驱动。OpenShell 将密钥与沙箱隔离;aquaman 通过引用从你的保险库提供它,并附带允许列表和审计日志。 | 如果你在 OpenShell 沙箱中运行代理。参见快速开始 6。 |
单个 aquaman CLI 统一提供全部四项功能:用于 vault 和 audit 的顶层命令、用于 OpenClaw 集成的 aquaman openclaw ...、用于编码代理集成的 aquaman coder ...(底层委托给 aquaman-coder),以及用于 Hermes Python 包的 aquaman hermes ...。
快速开始
aquaman help、aquaman doctor 是你的好帮手。
1. 仅使用 Vault(只需代理 + 你的密钥)
npm install -g aquaman-proxy
aquaman setup # backend wizard + store keys
aquaman daemon & # start the proxy
aquaman credentials list # verify
代理监听 ~/.aquaman/proxy.sock(UDS,chmod 0o600)。将任意工具指向 http://aquaman.local/<service>/<path>,代理便会从你所选的 vault 后端为该服务注入认证头。
2. OpenClaw Gateway
openclaw plugins install aquaman-plugin # 1. install plugin + proxy
openclaw aquaman setup # 2. backend + keys + plugin wire-up
openclaw # 3. done - proxy starts automatically
故障排查:openclaw aquaman doctor。
直接使用 npm? npm install -g aquaman-proxy && aquaman openclaw setup 效果相同——安装代理 CLI、存储你的密钥、将插件安装到 ~/.openclaw/extensions/aquaman-plugin/,并配置好凭据(在 OpenClaw ≥ 2026.6.5 上使用 SecretRef 引用,在旧版本上使用 auth-profiles.json 占位符)。
aquaman openclaw setup 会将 models.providers.<svc>.baseUrl 和 channels.telegram.apiRoot 指向代理的环回监听地址,因为 OpenClaw 的模型传输层及其各通道各自构建自己的 HTTP 客户端,会绕过 fetch 拦截器。除 Telegram 之外的通道不提供端点覆盖,因此它们的令牌会被存储和迁移,但不会在出口处注入(参见 packages/plugin/README.md)。在 openclaw.json 的插件配置下添加通道;支持的通道包括 Slack、Discord、Telegram、MS Teams、Matrix、LINE、Twitch、Twilio、BlueBubbles、Mattermost、Nostr、Tlon、Feishu、Google Chat、ElevenLabs、xAI、Cloudflare AI Gateway、Mistral、Hugging Face 等(共 25 个)。
3. AI 编程代理(Claude Code、Codex)
npm install -g aquaman-proxy aquaman-coder # 1. install daemon + adapter
aquaman setup # 2. vault wizard
aquaman daemon & # 3. start the proxy
aquaman coder project add my-app --path ~/code/my-app \
--env ANTHROPIC_API_KEY=aquaman://anthropic/api_key \
--env GITHUB_TOKEN=aquaman://github/token # 4. declare a project
aquaman coder setup claude-code # 5. wire Claude Code hooks
# (or: aquaman coder setup codex)
aquaman doctor # 6. verify - should show both vault + coder green
亲自体验一下(30 秒即可恍然大悟): 重启 Claude Code(或 Codex),在 ~/code/my-app 内打开一个新会话,然后让 agent 运行:
printenv | grep ANTHROPIC_API_KEY
你会在转录内容中看到以下内容:
ANTHROPIC_API_KEY=[REDACTED:injected-value]
⏺ ANTHROPIC_API_KEY is set and available (injected via aquaman vault).
子进程看到的是真实密钥(你的测试、构建、MCP 服务器、导入脚本——任何真正需要它的东西都能正常工作)。而agent——那个决定在你的机器上运行什么代码的东西——永远看不到这个值,因此对话历史看不到,模型提供商的日志看不到,任何后来截屏你终端的人也看不到。
也可以从你自己的终端使用它。 同一个包装器在没有 agent 的情况下也能工作。只需 cd 进入一个受覆盖的项目,并在命令前加上前缀:
cd ~/code/
aquaman-coder exec -- python app/scripts/import.py
同样的环境变量注入,同样的 stdout/stderr 脱敏。把它放进 Makefile 目标、shell 别名或 CI runner 中——任何你原本会使用 .env 文件的地方。
当 Claude Code 或 Codex 在 ~/code/my-app 中运行 shell 命令时,aquaman 的 hook 会通过 updatedInput.command 重写该命令,将其包装在 aquaman-coder exec 下。该包装器会:
- 通过 broker(基于 UDS 的
POST /broker/resolve)解析每个aquaman://service/key引用。凭据仅为单条命令物化,而非在 agent 的整个生命周期内存在。 - 将 stdout/stderr 通过脱敏器管道处理,该脱敏器会为每个已解析的值前置一个基于值的模式:无论注入的是什么字符串,都会被脱敏,无论其形态如何(Atlassian token、Notion secret、内部 API key——它们都不需要匹配已知的提供商格式)。基于形态的通用模式(sk-ant-、ghp_、sk_live_、AKIA…、JWT、PEM 块、ATATT3xF…)仍会在之后运行,作为纵深防御,用于处理子进程暴露出的、我们并未注入的机密。
- 在命令退出时进行清理。
Claude Code 沙箱: 它默认阻止 Unix socket,因此 aquaman coder setup claude-code 会在 macOS 上将代理 socket 加入允许列表(sandbox.network.allowUnixSockets)。Linux 和 WSL2 会忽略该列表,唯一的选择是 sandbox.network.allowAllUnixSockets: true,这会向沙箱化命令开放所有 Unix socket。
Codex: 在设置完成后,在 Codex 的启动 hook 审查中批准 aquaman hooks(Codex 会跳过新 hook,直到你信任它们)。其沙箱默认也会阻止代理 socket;aquaman coder setup codex 会打印允许该 socket 的 config.toml 权限配置。Codex hooks 无法重写 shell 输出,因此脱敏发生在 aquaman-coder exec 内部。详情见 packages/coder/README.md。
4. Hermes(agent 宿主)
Hermes 是一个外部(Python)宿主,没有可注入的传输 hook,因此隔离在代理侧完成:代理暴露一个可选的、受 token 门控的环回监听器,Hermes 通过其自身的环境变量指向它。
npm install -g aquaman-proxy # 1. install daemon
aquaman setup # 2. vault wizard
aquaman credentials add anthropic api_key sk-ant-... # 3. store a provider key
aquaman hermes setup # 4. enable loopback + write ~/.hermes/.env
aquaman daemon & # 5. start the proxy (UDS + loopback)
aquaman hermes doctor # 6. verify - listener + env + vault + Hermes
aquaman hermes setup 会启用回环监听器,生成一个按安装实例区分的令牌,并向 ~/.hermes/.env(遵循 HERMES_HOME)写入一个由 aquaman 管理的配置块:原生的 ANTHROPIC_BASE_URL/OPENAI_BASE_URL,以及一个等于该令牌的占位 api_key。Hermes 将该令牌作为其提供方密钥发送;代理会剥离该令牌,注入你真实的 vault 凭据,并转发至上游。目前仅支持 LLM 提供方(Anthropic、OpenAI)。
可选的会话内便捷功能 - 该 Python 插件在 Hermes 内添加了一个 /aquaman-status 命令、一个 aquaman_status 工具,以及一个会话启动时的健康探测(不持有任何凭据):