API キーを、
コードと Git
から追い出す。
Vaulty は macOS のローカルシークレットストア。API キーは Keychain に保管し、Claude Code や Codex には MCP 経由で——あなたが承認したときだけ——値を渡します。
.env と直書きを、やめる。
API キーは .env やソースに書かれ、うっかり Git に乗り、AI のコンテキストに紛れ込みます。鍵の置き場所を一箇所にまとめます。
これまで
OPENAI_API_KEY=sk-proj-xY7...本物のキー
ANTHROPIC_API_KEY=sk-ant-...本物のキー
- 平文の .env がリポジトリ近くに散在
- .gitignore 漏れで Git 履歴に残る
- どのツールに渡したか追えない
Vaulty
// secrets.json に残るのは名前だけ
{ "version": 1, "secrets": [{ "name": "OPENAI_API_KEY" }] }
- 生値は macOS Keychain のみ
- 取得は vault_get_secret(name) 経由だけ
- 渡すたびに確認ダイアログで承認
保存 → 接続 → 承認して渡す
3 ステップ。鍵は Keychain に置いたまま、AI が必要なときだけ、あなたの許可を経て値が渡ります。
保存する
メニューバーから金庫を開き、名前と値を入力。生値は macOS Keychain だけに保存され、secrets.json には名前しか残りません。
接続する
AI クライアントをローカル MCP に接続。claude mcp add --transport http vaulty http://127.0.0.1:7832/mcp
承認して渡す
AI が vault_get_secret(name) を呼ぶと確認ダイアログが表示。許可すると値が AI に渡ります(20 秒で自動的に拒否)。
これが、Vaulty。
メニューバーから開く金庫、保存済みシークレットの一覧、そして AI に値を渡す前の承認ダイアログ。実際のアプリ画面です。
- 🔑OPENAI_API_KEY✏️🗑
- 🔑ANTHROPIC_API_KEY✏️🗑
ローカル完結。承認は、あなたの手に。
Keychain だけに保存
生値は macOS Keychain のみ。secrets.json や console に値は出ません。reveal UI も持ちません。
二段階の認可
Tray の全体スイッチ(停止/再開)と、1 件ごとの確認ダイアログ。停止中は vault_get_secret が permission_denied になります。
メニューバー常駐
軽量なトレイ常駐アプリ。ログイン時に自動起動し、いつでもメニューバーから取得の停止・再開ができます。
編集できる
保存済みシークレットの名前・値の更新に対応。鍵のローテーションもメニューバーから。
ローカル完結の MCP
127.0.0.1:7832/mcp バインド固定。読み出しは vault_get_secret のみで、書き込み API は MCP に公開しません。
ログを残さない
永続ログや監査メタは保存しません。値は secrets.json にも console にも書き出しません。
誇張しません。境界を、はっきりと。
Vaulty が守る範囲と、守れない範囲を正直に示します。
やること
- API キー等を名前付きでローカル保存(生値は Keychain のみ)
- あなたの承認を経て、AI に値を渡す
- .env やコードへの直書きを避ける運用を提案
やらないこと(責任範囲外)
- 承認後に AI へ渡った値のその後(会話履歴・プロバイダ側ログ・学習データへの混入)
- 永続ログ・監査メタの保存
- 渡した先の AI / ネットワークの安全性の保証
MVP の制約 — シークレット保存数の上限は 3 件 / 対応 OS は macOS のみ。
クローンして、起動する。
配布ビルド(.dmg / Homebrew)は Roadmap(Phase 2+)。いまはソースから起動します。
1 — クローンして起動
$ git clone <repo> vaulty $ cd vaulty $ npm install $ npm run dev
2 — AI クライアントを接続
$ claude mcp add --transport http vaulty http://127.0.0.1:7832/mcp
Codex も同様にハブ画面のカードから設定できます。Cursor / Cline 専用の導線は今後(Phase 2+)。MCP 対応クライアントなら手動接続も可能です。