关于 Keyward
Keyward 是面向 AI 编码 Agent 的本地加密密钥代理。Agent 按名称申请密钥,经原生系统对话框逐次审批后,密钥仅注入项目文件,不会返回给模型。
主要功能
- 01本地加密密钥库
- 02按名称申请密钥
- 03系统对话框人工审批
- 04仅向项目文件注入密钥
- 05命令行管理与导入
适用场景
- 01避免密钥进入聊天记录
- 02在不同项目复用密钥
- 03从 .env 文件导入密钥
MCP 相关
提供标准输入输出(stdio)MCP 服务,包含 `list_keys` 和 `request_key` 工具。客户端可按名称申请密钥;审批后密钥注入目标文件,MCP 响应只提供确认信息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
keyward
只需保存一次 API 密钥。任何 AI 工具都可以在获得你批准后请求密钥,而且永远看不到密钥值。
keyward 是一个开源、本地运行的加密AI 编码 Agent 密钥代理。无需将 API 密钥粘贴到聊天中(密钥会泄露到上下文和对话记录中),也无需在每个新会话、项目和 IDE 中重新输入相同的密钥;你只需将密钥保存在一个加密保险库中。当 Claude Code、Cursor、Gemini CLI 或任何支持 MCP 的工具需要密钥时,它会按名称请求密钥,你在原生 OS 提示框中批准这次请求,keyward 随即仅将该密钥注入你的项目。模型永远不会收到密钥值。
问题
- 密钥泄露到 AI 聊天中——将密钥粘贴到提示词中,密钥就会进入上下文、对话记录和日志。
- 重复输入的负担——每次新建会话、项目、IDE 或更换设备时,你都要重新输入相同的密钥。
.env文件散落各处——没有统一的可信来源;你会忘记密钥存放在哪里。- 毫无控制——Agent 可以一次读取或获取所有密钥,而不是只获取所需的密钥。
- 工具绑定带来的麻烦——切换 IDE 或模型后,你必须重新设置所有密钥。
工作原理
AI tool ──request_key("STRIPE_KEY", project)──▶ keyward ──native approval──▶ you
│ approved
◀── "injected STRIPE_KEY → ./.env" ─────────┘ (value never shown to the model)
- 保险库——使用 age 加密的文件(
~/.keyward/vault.age,权限为0600)。主密钥保存在 OS 密钥库(macOS Keychain / Windows Credential Manager / Linux libsecret)中,不会以明文形式存储在磁盘上。 - 双重接口——面向 AI 工具的 MCP 服务(
list_keys、request_key),以及处理其他事务的keywardCLI。 - 带外审批——审批对话框由 keyward 自行弹出,而不是在 Agent 的消息流中呈现,因此 Agent 无法自动批准。你可以选择批准一次、在本次会话中批准或拒绝。
- 从设计上杜绝密钥值泄露——
list_keys只返回名称;request_key返回确认信息;审计日志会记录决定,但绝不会记录密钥值。
安装
# Homebrew (macOS / Linux)
brew install arturayupov/tap/keyward
# Scoop (Windows)
scoop bucket add arturayupov https://github.com/arturayupov/scoop-bucket
scoop install keyward
# Go
go install github.com/arturayupov/keyward/cmd/keyward@latest
我们也会在每个版本发布页附上预编译二进制文件(macOS/Windows/Linux,amd64+arm64)。各 OS 的说明(包括 Linux libsecret)请参阅 INSTALL.md;遇到问题请参阅 TROUBLESHOOTING.md。
快速开始
# 1. create the encrypted vault (master key goes into your OS keystore)
keyward init
# 2. import keys you already have scattered in .env files
keyward import ~/projects
# 3. point your AI tool at keyward's MCP server (see below), then just ask:
# "use my STRIPE_KEY for this project" → approve the prompt → done
将其用作 MCP 服务
keyward 是一个标准的 stdio MCP 服务,注册方式与官方 MCP 服务相同。只需两步:
1. 安装二进制文件(仅需一次)——使用上文中的 go install,或使用 Homebrew/Scoop(即将推出),也可以下载版本发布页中的二进制文件。
2. 在你的 AI 工具中注册:
# Claude Code — one command:
claude mcp add keyward -- keyward serve-mcp
也可以手动将其添加到配置中(~/.claude.json 或项目中的 .mcp.json):
{ "mcpServers": { "keyward": { "command": "keyward", "args": ["serve-mcp"] } } }
Cursor、Windsurf、Cline 和其他 MCP 客户端在其 MCP 设置中使用相同的 command/args 格式。重启工具,然后让它按名称使用某个密钥。
为什么不能“粘贴仓库 URL”? MCP 客户端不会从 GitHub 链接自动安装服务——这是有意为之,客户端不会运行任意远程代码。keyward 也特意设计为本地运行(它需要访问你的 OS 密钥库,并会写入本地文件),因此它不是远程/托管 URL 服务。以上两步是标准且安全的安装方式。完整操作指南请参阅 USAGE.md。
CLI 参考
| 命令 | 说明 |
|---|---|
keyward init | 创建加密保险库和主密钥 |
keyward import [root] | 从 root 下的 .env 文件导入密钥,并按项目分组 |
keyward add NAME --ns NS | 添加/更新一个密钥,值从标准输入读取(适用于非 .env 凭据) |
keyward ls [--ns NS] | 列出密钥名称和命名空间(绝不显示密钥值) |
keyward inject NAME --ns NS --into PATH | 将一个密钥注入目标环境文件(会请求批准) |
keyward serve-mcp | 通过 stdio 运行 MCP 服务 |
安全模型
- 密钥值绝不会返回给 AI Agent——
request_key会将其注入目标文件,并且只返回确认信息。 - 密钥值绝不会写入审计日志(
~/.keyward/audit.jsonl会记录工具、密钥、命名空间、目标和决策,不包含密钥值),也绝不会由ls/inject打印。 - 批准通过带外方式进行:使用 Agent 无法点击的原生 OS 对话框。所有对话框后端都会在故障时拒绝——任何错误或取消操作都会被视为拒绝。
- 保险库使用
age进行静态加密;主密钥存储在 OS 密钥库中。
这些不变量通过自动化测试来保证。详情和威胁模型请参阅 SECURITY.md。
比较
| keyward | envchain | pass / sops | 1Password CLI | |
|---|---|---|---|---|
| 本地加密存储 | ✅ | ✅ (Keychain) | ✅ | ✅(云端) |
| Agent 按名称请求密钥 | ✅ | ❌ | ❌ | ❌ |
| 每次请求都需人工批准 | ✅ | ❌ | ❌ | ❌ |
| 密钥值绝不传给模型 | ✅ | 不适用 | 不适用 | 不适用 |
| 面向 AI 工具的 MCP 服务 | ✅ | ❌ | ❌ | ❌ |
| 开源 | ✅ (MIT) | ✅ | ✅ | ❌ |
加密存储问题已经解决;keyward 在此基础上补上了缺失的面向 Agent、需经批准的代理层。诚实、详尽的比较(包括各替代方案更适用的场景)请参阅 docs/comparisons。
路线图
完整详情请参阅 ROADMAP.md。主要内容:
- v0.2 — 已签名/公证的二进制文件(无需密钥库提示)、Homebrew/Scoop、生物识别批准(Touch ID / Windows Hello)、Windows ACL 加固。
- v1.0 — 托盘/菜单栏应用、按密钥设置策略和允许列表、轮换提醒、
target: "env"注入。 - v2.0 — 加密的多设备同步(用户自有后端)、团队模式。
参与贡献
欢迎贡献——请参阅 CONTRIBUTING.md。发现安全问题?请参阅 SECURITY.md 了解负责任的漏洞披露方式。
许可证
MIT © 2026 Artur Ayupov
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。