Skip to content

Repository files navigation

Agent Vaults

自托管零知识凭据库。人管授权,库管秘密。模型永远不接触明文。

仓库 · 当前版本 v0.1.0 · 署名 Orgin MovingDOT 动点科技

Agent Vault 把「谁可以拿哪一个字段」从模型上下文里拿出来,交给人来批。服务器只保存密文。每台设备独立隔离。默认拒绝。Agent 全程只负责申请与粘贴,看不到密码。

目录

  1. 安装
  2. 第一次使用
  3. 接入 Agent
  4. Agent 如何取密
  5. 功能一览
  6. 安全模型
  7. HTTP 接口
  8. Dangerous Only · Beta
  9. 开发

安装

需要 Node.js 22。数据目录与程序文件分开:升级只换程序,不碰凭据库。

Docker(推荐)

git clone https://github.com/WilliamWang1721/Agent-Vaults.git
cd Agent-Vaults
docker compose up -d

打开 http://localhost:8080。数据在命名卷 agent-vault-data,换镜像或 docker compose pull 都不会清掉。

指定版本:

git checkout v0.1.0
docker compose up -d

源码

git clone https://github.com/WilliamWang1721/Agent-Vaults.git
cd Agent-Vaults
npm install
npm run dev

开发服务默认监听 0.0.0.0:8080。未设置 DATABASE_URL 时用本机 PGLite(目录 .pglite);设置了则连 Postgres。

生产构建:

npm run build
npm run preview

从 Release 安装 / 升级

  1. 打开 Releases,下载 v0.1.0 的 Source code(zip / tar.gz)。
  2. 解压覆盖程序目录。不要覆盖数据目录(.pglite 或 Postgres;Docker 则是 agent-vault-data)。
  3. npm install && npm run build 后重启。

已经在跑的实例:控制台 → 设置 → 版本切换,选择 GitHub Release,会覆盖 src / migrations 等程序文件,凭据库不动。

部署方式 怎么升级 数据在哪
本实例 / 源码 设置里点版本,或覆盖源码目录 .pglite 或 DATABASE_URL
Docker docker compose pull && docker compose up -d 卷 agent-vault-data
二进制 替换可执行文件 数据目录原处保留

第一次使用

浏览器打开实例后是全屏引导,每页只做一件事:

  1. 新建凭据库,或上传加密备份包恢复整套数据
  2. 设定主密码(至少 10 个字符)
  3. 抄下 12 词恢复码
  4. 可选:打开浏览器通知

结束后进入主界面。侧栏「帮助」有全部功能说明。

主密码只在这台浏览器里派生密钥。服务器看不到,也不能替你重置。主密码和恢复码同时丢失则无法恢复。


接入 Agent

控制台 设备 → 新建设备 后打开设备详情,签发配对码。

Agent 只做两件事:安装官方助手,用助手登录。不要让它自己写密钥或调用凭据库 HTTP。

方法 A:Skill + 变量提示词(推荐)

  1. 把 skills/agent-vault-device/SKILL.md 放到 Agent 的 skills 目录。
  2. 设备页点 复制变量提示词,交给 AI。
  3. 助手会克隆本仓库并运行:
npm run agent -- pair --origin <VAULT_ORIGIN> --device-id <DEVICE_ID> --code <INVITE_CODE>
  1. 屏幕上出现短认证串后,你在控制台点「允许此设备」。
  2. 登录网站时:
npm run agent -- fill https://github.com --purpose "log in"

助手把字段拷到剪贴板,Agent 在登录框粘贴即可。

方法 B:单提示词(旧)

设备页打开 单提示词,复制整段。内容同样是安装助手并跑 pair / fill。

可选:MCP

配对完成后,设备页 MCP 标签复制 mcpServers。密钥已写在本机 ~/.agent-vault/device.json,不必再填私钥。


Agent 如何取密

  1. Agent 用命令行向服务器申请某一账户的一个或多个字段(例如 GitHub 的用户名、密码、一次性验证码)。
  2. 申请必须写明:时间、设备、账户、字段、次数、用途、交付方式(剪贴板 / MCP / SSH Agent)。
  3. 若含 TOTP:命令行立刻收到「停止推理、准备快速粘贴」。你批准后,控制台等到新的 30 秒窗口初期才封装当前 6 位数字。
  4. 你在控制台看到 Agent 自己写的用途,选择批准或拒绝。拒绝必须写明原因。
  5. 批准后,服务器把所申请字段的密封包回传命令行(不是整条条目)。
  6. 命令行本地解密。clipboard 时按「用户名 → 密码 → 其他 → 验证码」依次写入剪贴板,Agent 只负责粘贴。
  7. 粘贴完成或超时后,命令行清空剪贴板,并 POST /v1/access-requests/:id/consume。
  8. 授权用尽。失败或验证码窗口已过,必须重新申请,不能复用旧值。

没有 Computer 的 Agent 绑定 MCP(POST /v1/mcp,工具 vault_catalog / vault_request / vault_poll)。MCP 客户端持有设备密钥并负责解密;模型仍不应复述明文。


功能一览

  • 凭证:登录、GitHub(账号与 PAT)、API、SSH、信用卡;自定义字段、TOTP、条目图标
  • CSV:兼容 Apple Passwords / Google Password Manager / Microsoft Edge / 1Password;导出必须验证主密码
  • 设备配对、短认证串、按「设备 × 来源」策略(拒绝 / 每次确认 / 会话自动)
  • Agent 命令行一次申请多字段;一次性剪贴板;MCP;本机 SSH Agent
  • 登录时限、到期退出截图、断线告警
  • 浏览器通知 + ntfy / Telegram / Discord / Slack / Bark / 飞书 / 钉钉 / 企业微信 / Gotify / Pushover / Server酱 / Webhook
  • Passkey 登录控制台(解锁条目仍要主密码)
  • 加密整库备份与恢复(和 CSV 不是一回事)
  • 空闲自动锁定、12 词恢复码、控制台 TOTP
  • 版本切换器读取 GitHub Release

安全模型

用途 算法
口令拉伸 Argon2id(64 MiB,t=3)
条目封装 AES-256-GCM,带 AAD
字段一次性包 独立 AES 密钥 + X25519 封装到设备
密钥派生 HKDF-SHA256
设备身份 Ed25519 签名请求(x-av-* 头)
SSH OpenSSH Ed25519

原则:

  • 零知识:主密码只在本机派生。条目封装后才离开浏览器。
  • 按字段发放:批准只封装申请的那几个字段。
  • 一次性:剪贴板用毕即销毁。remaining_uses 归零后密封包删除。
  • 默认拒绝:未授权的来源立刻拒绝。
  • 按设备隔离:封装密钥、申请、策略都绑定到单台设备。

明文、主密码、恢复码、GitHub PAT 不会上传。配对码只登记身份。

GitHub PAT 在「新增条目 → GitHub → Personal Access Token」里保存,可标注仓库与权限。不要把 PAT 提交进本仓库或写进对话。

加密整库备份与 CSV 不同:备份打包条目密文、设备、策略、设置、Passkey 公钥、通知渠道,再用你单独设定的备份密钥加密成 ZIP。空实例可在首次引导里恢复。条目仍需原来的主密码才能解锁。


HTTP 接口

设备请求一律要带 x-av-device / x-av-ts / x-av-nonce / x-av-sig。

方法 路径 用途
POST /v1/pair/start 用配对码登记公钥,返回短认证串
POST /v1/pair/complete 控制台确认后激活设备
GET /v1/catalog 列出本设备被授权的条目(无秘密)
POST /v1/access-requests 申请一个或多个字段
GET /v1/access-requests/:id 轮询批准结果
POST /v1/access-requests/:id/consume 用尽并销毁密封包
POST /v1/mcp MCP JSON-RPC
GET /v1/review/inbox Dangerous Only:待审批档案
GET /v1/review/:id 单条档案
POST /v1/review/:id/decide 批准或拒绝(拒绝必须带原因)

Dangerous Only · Beta

默认关闭。开启必须在设置里输入「我了解风险」并验证主密码。

  • 本机审批接口:本地 AI 用令牌拉取待处理申请的全量元数据(不含明文),直接批准或拒绝。
  • Auto Review:按 OpenAI 协议接入本机小模型。提示词已锁死,只能输出 {"decision":"是|否","deny_reason":"..."}。

模型看不到密码。误判仍会错误发放凭据。生产关键路径不要开。


开发

npm run typecheck
npm test
npm run build

署名:Orgin MovingDOT 动点科技。

About

Agent Vault — 零知识凭据库。人管授权,库管秘密。

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages