keyward

io.github.arturayupov由 GitHub 帳號 arturayupov 發布v0.1.1更新於 Oct 24, 2026

Local encrypted secret broker for AI agents: request keys by name, approve each use over MCP.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

本機加密密鑰代理:AI 代理可依名稱申請 API 密鑰,每次使用都要在系統原生視窗中核准,模型始終看不到密鑰值。

可以做什麼
  • 列出已存放的密鑰名稱與命名空間,不傳回密鑰值
  • 依專案申請指定密鑰,核准後注入目標 env 檔案
  • 在本機稽核日誌中記錄每次請求與核准決定
  • 透過隨附 CLI 在代理之外管理保險庫:初始化、從 .env 檔案匯入、新增或列出密鑰、注入單一密鑰
適用情境
適合為程式開發代理保管 API 密鑰、希望避免把密鑰貼進對話或在新工作階段、專案、IDE 中反覆輸入,同時保留逐次人工核准與本機加密儲存的情境。
執行需求
需在本機安裝執行檔(Homebrew、Scoop、go install 或發行版),以 stdio MCP 伺服器方式透過 command 與 args 註冊到用戶端。需要作業系統金鑰儲存區(macOS Keychain、Windows 認證管理員或 Linux libsecret),並先用 CLI 建立保險庫。僅限桌面,無遠端端點。
安裝前請注意
它保管真實 API 密鑰:保險庫以 age 加密,主密鑰存於系統金鑰儲存區,需保護好該儲存區。核准的請求會把密鑰寫入磁碟上的目標 env 檔案。核准視窗失敗即拒絕,出錯或取消都視為拒絕。稽核日誌記錄密鑰名稱、命名空間與目標,但不記錄密鑰值。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 keyward,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[keyward — a secret broker for AI agents]

keyward

Store your API keys once. Let any AI tool request them with your approval — without ever seeing the value.

[CI] [MIT] [MCP compatible] [cross platform]


keyward is an open-source, local, encrypted secret broker for AI coding agents. Instead of pasting API keys into chat (where they leak into context and transcripts) or re-entering the same key in every new session, project, and IDE, you keep your keys in one encrypted vault. When Claude Code, Cursor, Gemini CLI, or any MCP-capable tool needs a key, it requests it by name, you approve that single request in a native OS prompt, and keyward injects only that key into your project. The model never receives the value.

The problem

  1. Leaking keys into AI chat — paste a key into a prompt and it lands in context, transcripts, and logs.
  2. Re-entry tax — you type the same key again in every new session, project, IDE, and machine.
  3. Scattered .env files — no single source of truth; you forget which key lives where.
  4. Zero control — an agent can read or grab every secret at once instead of the one it needs.
  5. Tool lock-in friction — switch IDE or model and you redo all key setup.

How it works

AI tool ──request_key("STRIPE_KEY", project)──▶ keyward ──native approval──▶ you                                                    │ approved        ◀── "injected STRIPE_KEY → ./.env" ─────────┘   (value never shown to the model)
  • Vault — an age-encrypted file (~/.keyward/vault.age, 0600). The master key lives in the OS keystore (macOS Keychain / Windows Credential Manager / Linux libsecret), never on disk in plaintext.
  • Two faces — an MCP server (list_keys, request_key) for AI tools, and a keyward CLI for everything else.
  • Out-of-band approval — the approval dialog is fired by keyward itself, not rendered in the agent's stream, so the agent cannot auto-approve. Choose Approve once, Approve for session, or Deny.
  • Value-free by construction — list_keys returns names only; request_key returns a confirmation; the audit log records the decision but never the value.

Install

bash
# Homebrew (macOS / Linux)brew install arturayupov/tap/keyward
# Scoop (Windows)scoop bucket add arturayupov https://github.com/arturayupov/scoop-bucketscoop install keyward
# Gogo install github.com/arturayupov/keyward/cmd/keyward@latest

Pre-built binaries (macOS/Windows/Linux, amd64+arm64) are also attached to each release. See INSTALL.md for per-OS notes (incl. Linux libsecret) and TROUBLESHOOTING.md if something doesn't work.

Quickstart

bash
# 1. create the encrypted vault (master key goes into your OS keystore)keyward init
# 2. import keys you already have scattered in .env fileskeyward 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

Use it as an MCP server

keyward is a standard stdio MCP server, registered the same way as the official MCP servers. Two steps:

1. Install the binary (once) — go install above, or Homebrew/Scoop (soon), or a release binary.

2. Register it with your AI tool:

bash
# Claude Code — one command:claude mcp add keyward -- keyward serve-mcp

Or add it to the config by hand (~/.claude.json, or a project .mcp.json):

json
{ "mcpServers": { "keyward": { "command": "keyward", "args": ["serve-mcp"] } } }

Cursor, Windsurf, Cline, and other MCP clients use the same command/args shape in their MCP settings. Restart the tool and ask it to use a key by name.

Why not "paste a repo URL"? No MCP client auto-installs a server from a GitHub link — by design, clients won't run arbitrary remote code. keyward is also intentionally local (it needs your OS keystore and writes to your local files), so it isn't a remote/hosted URL server. The two steps above are the standard, secure install path. Full walkthrough in USAGE.md.

CLI reference

CommandDescription
keyward initCreate the encrypted vault and master key
keyward import [root]Import secrets from .env files under root, grouped by project
keyward add NAME --ns NSAdd/update one secret, value read from stdin (for non-.env creds)
keyward ls [--ns NS]List key names and namespaces (never values)
keyward inject NAME --ns NS --into PATHInject one key into a target env file (prompts for approval)
keyward serve-mcpRun the MCP server over stdio

Security model

  • The secret value is never returned to the AI agent — request_key injects it into a target file and returns only a confirmation.
  • The value is never written to the audit log (~/.keyward/audit.jsonl records tool, key, namespace, target, decision — no value) and never printed by ls/inject.
  • Approval is out-of-band: a native OS dialog the agent cannot click. All dialog backends fail closed — any error or cancellation is a Deny.
  • The vault is encrypted at rest with age; the master key lives in the OS keystore.

These invariants are enforced by automated tests. Details and threat model in SECURITY.md.

How it compares

keywardenvchainpass / sops1Password CLI
Encrypted local store✅✅ (Keychain)✅✅ (cloud)
Agent requests a key by name✅❌❌❌
Per-request human approval✅❌❌❌
Value never reaches the model✅n/an/an/a
MCP server for AI tools✅❌❌❌
Open source✅ (MIT)✅✅❌

The encrypted-storage problem is solved; keyward adds the missing agent-facing, approval-gated broker on top. See docs/comparisons for honest long-form comparisons (including when each alternative is the better choice).

Roadmap

Full detail in ROADMAP.md. Highlights:

  • v0.2 — signed/notarized binaries (no keystore prompt), Homebrew/Scoop, biometric approval (Touch ID / Windows Hello), Windows ACL hardening.
  • v1.0 — tray/menubar app, per-key policy & allowlists, rotation reminders, target: "env" injection.
  • v2.0 — encrypted multi-device sync (user-owned backend), team mode.

Contributing

Contributions welcome — see CONTRIBUTING.md. Found a security issue? See SECURITY.md for responsible disclosure.

License

MIT © 2026 Artur Ayupov

來源:README.md,提交 8877a0d

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.1最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分