mcpField
H
hush

hush

リモート
github.com/royashbrookセキュリティ215 週間前に更新
リポジトリ

hush について

hush は AI エージェント向けのシークレットストアで、エージェントが平文を一切見ないことを基本ルールとしています。シークレットは OS のキーチェーンに保存され、run で コマンドに注入されるため、値が stdout に出力されることはありません。エージェントが CLI で認証情報を必要とする開発者に向いています。

主な機能

  1. 01macOS Keychain、libsecret、DPAPI への保存
  2. 02hush run によるコマンドへの非表示の注入
  3. 03get コマンドを持たない設計
  4. 04LastPass、KeePass、Bitwarden への同期
  5. 05暗号化バックアップと hush doctor による健全性確認

活用シーン

  1. 01トークン認証が必要な CLI をキーを貼り付けずに実行
  2. 02プロジェクトの認証情報を一つのストアで統一管理
  3. 03キーチェーンのシークレットをパスワードマネージャーへ反映

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://royashbrook.com/hush
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

1

このツールにパラメーターはありません。

詳細

hush

AI エージェントのためのシークレットストア。get がないのが特徴です。

CI MIT クロスプラットフォーム get なし

シークレットを一度 OS のキーチェーンに保存すれば、その後はコマンドに注入して使えます。値が標準出力、トランスクリプト、クラウドに出ることはありません。


AI エージェントのためのシークレットストアです。ひとつだけ厳格なルールがあります。エージェントは平文を決して見ません。

値は標準出力に出ないため、ツールの結果、トランスクリプト、クラウドに残ることもありません。シークレットはストアから利用先へ直接渡されるだけです。意図的に get はありません。値をそのまま取得できる仕組みは漏えいにつながります。

目的はこうです。あなた(エージェント)は、CLI の認証がすでに済んでいるユーザーとして動作しているため、サーバー側のシークレットを設定したり、サービスを呼び出したりできます。ただし、値をチャットに出さずに確認することはできません。hush を使えば、その値を一度 OS のキーチェーンに保存し、以降はコマンドに注入して使えます。チャットへの貼り付けも、一時ファイルも、誤ってコミットする .env も必要ありません。

エージェント:まずはこちら

このリポジトリの URL を渡されたら、自分でインストールしてからプレイブックに従ってください。 hush スクリプトをマシンに置き、SKILL.md を読んでください。これが導入手順のすべてです(ストアへの保存/ミント/注入の方法と、作業中のリポジトリに hush を導入する方法を説明しています)。スクリプトは単独で動作する bash ファイルです。エージェントがツールを読み込む場所か、PATH 上の好きな場所に置いてください。

git clone https://github.com/royashbrook/hush
chmod +x hush/hush
# then put hush/hush on your PATH, or move it into your agent's skills/tools dir

または、クローンせずに npm から直接実行できます:npx @royashbrook/hush <cmd>(mac/Linux の場合。Windows ではクローンを使用してください。オーケストレーターは bash です)。

Claude Code で便利に使う方法(スキルとして自動読み込み):代わりにスキルディレクトリへ直接クローンします。セッション全体で使う場合は git clone https://github.com/royashbrook/hush ~/.claude/skills/hush、プロジェクト単位で使う場合は ./.claude/skills/hush です。その他のエージェントについては、AGENTS.md を参照してください。

これで完了です。人間がここを案内して「hush スキルを使って」と伝えたら、あとはあなたが進めます。人間にしかできないことは、手元にあるシークレットを貼り付けることだけです。その場面になったら hush set <name> を実行してください。人間の画面に非表示のダイアログが表示されます(あなたが値を見ることはありません)。

インストール(人間向け)

上記と同じ方法でクローンするか、単独の hush スクリプトだけを入手して PATH 上に置いてください。

バックエンドとして、macOS のキーチェーン、Linux の libsecret(secret-tool)、Windows の DPAPI(PowerShell 経由)が組み込まれています。それ以外のプラットフォームでは、OS のシークレットストアを使って同じ仕様を維持してください(SKILL.md を参照)。CI でクロス OS テストを実施しています(手動の workflow_dispatch、3 種類すべてのランナー)。

メンテナンス(オプトイン)

hush doctor は、シークレットストアを開かずにローカルインストールの不整合とバックアップの状態を確認します。 hush doctor --check-updates は、公開されている npm のバージョンを明示的に確認します。毎日の通知、エージェントが読み取れるステータス、元に戻せるスケジューラーの修復については、予期せぬ変更のないメンテナンスを参照してください。自動アップグレードは行われません。

クイックスタート

hush set my-vendor-token                      # paste a value you hold (hidden prompt)
printf '%s' "$TOK" | hush set my-vendor-token # ...or pipe it in (scripts/CI), still off argv
hush set my-vendor-token --gui                # force the dialog (or --tty / --pipe; HUSH_PROMPT= too)
hush mint app-operator-key                    # generate + store a random one
hush run TOKEN=my-vendor-token -- some-cmd    # inject into a command, never printed
hush sync lastpass --dry-run                  # preview a one-way LastPass sync
hush sync lastpass                            # upsert every name under LastPass group "hush"
hush sync keepass --database vault.kdbx --db-secret keepass-password --dry-run
hush sync bitwarden --dry-run                 # requires an unlocked BW_SESSION
hush list                                     # names only, never values

ダイアログが開かないエージェントホストの場合(一部のランナーには GUI セッションがないため、macOS が貼り付けダイアログを表示できず、Connection Invalid ... hiservices-xpcservice となります):hush は「キャンセルされたか、空でした」という誤解を招くメッセージではなく、その旨を明確に伝えるようになりました。対処するには、値をパイプで渡す(printf '%s' "$VAL" | hush set <name>)か、GUI に接続された Terminal から hush set <name> を実行してください。

名前付け:デフォルトの hush 名前空間を維持し、名前の先頭にプロジェクト名を付けてください(blame-cf-token、lifescored-gemini-key など)。そうすれば、hush を検索するだけでキーチェーン内のすべての項目が見つかります。HUSH_NS は本当に別のストアが必要な場合にのみ使用し、プロジェクトごとには使用しないでください。既存の名前を変更する必要がある場合は、hush rename <old> <new> で値を内部的に移動できます(再入力を求められることも、表示されることもありません)。完全なドキュメントと移植可能な仕様については、SKILL.md を参照してください。

LastPass と同期する

公式の LastPass CLI を一度インストールしてログインし、その後プレビューして同期を実行します。

brew install lastpass-cli                     # macOS
lpass login [email protected]
hush sync lastpass --dry-run                  # names + destinations only, no values fetched
hush sync lastpass                            # all names -> hush/<name>
hush sync lastpass --group team/secrets api-key deploy-key
hush sync lastpass --exclude local-only       # repeat to keep local-only names out of bulk sync

これは、各 LastPass エントリのパスワードフィールドへの upsert です。エントリがない場合は作成され、一意のエントリがある場合は更新され、LastPass に同じ名前のエントリが複数ある場合は安全のため処理を中止します。値は stdin 経由で渡され、argv、stdout、一時ファイルには渡されません。各書き込みでは --sync=now を使用するため、LastPass がサーバーと同期した後にのみ hush は成功を報告します。lpass のパスワードフィールドの編集では 1 行しか受け付けず、複数行の値は切り詰められてしまうため、hush の複数行の値は拒否されます。

この同期は、hush と公式の lpass CLI の両方が動作する macOS、Linux、Cygwin で実行できます。公式 CLI には現在、ネイティブの PowerShell または Node エントリーポイントがないため、ネイティブ Windows での制限は hush のストアバックエンドではなく、この依存関係によるものです。

実験的な自動ログインでスケジュールする(macOS)

クリーンな npm インストールには、オプションの Node ベースの launchd ヘルパーが含まれています。

npm install -g @royashbrook/hush
brew install lastpass-cli
hush-lastpass-schedule install --auto-login --email [email protected] --every 6h
hush-lastpass-schedule status

自動ログインは実験的な機能です。完全な仕様は決定的なフェイク CLI テストに合格していますが、Homebrew の lastpass-cli が MFA 処理中にクラッシュし、ボルトにアクセスする前に終了したため、実際の信頼済みログインを完了できませんでした。これは上流の lastpass-cli の問題 #719 と一致しています。このバグの影響を受けないアカウントと MFA の組み合わせでは動作する可能性がありますが、実環境ではテストされていません。

この設計では、対話型の lpass login --trust を一度実行した後、hush の非表示プロンプトで LastPass のマスターパスワードを一度だけ入力します。スケジュールされた実行では、再起動後に lpass セッションを復元するため、このローカルの Keychain の値を使用する想定です。これは明示的なオプトインです。--auto-login が指定されない限り、LastPass のログイン情報は保存されません。ヘルパーは lpass --plaintext-key を使用せず、専用のログインシークレットは常にボルトの同期対象から除外されます。セットアップに失敗した場合は何もインストールされません。信頼が取り消されたり期限切れになったりすると、後続のジョブは安全のため処理を中止します。

ジョブをアンロードするには hush-lastpass-schedule remove を使用してください。削除しても、シークレットではない設定と hush のログインシークレットは保持されるため、削除によって認証情報が気付かないうちに破棄されることはありません。オプトインを完全に取り消す場合は、hush rm hush-lastpass-master-password でそのシークレットを別途削除してください。

API キーでこのログインを代用することはできません。公開されている LastPass Business API ではアカウント、会社、レポートを管理できますが、ボルト項目への書き込みは提供されていません。スケジューラーは Node で実装されているため、同期の仕様を変更せずに他のネイティブスケジューラーを追加できますが、このリリースで macOS にインストールされるのは launchd のみです。

3 種類の macOS 同期スケジューラーはすべて、ローカル時刻のカレンダースロットを使用します。そのため、Mac がスリープから復帰すると、launchd はスリープ中に実行されなかったスロットを実行します。 --every は実行頻度の上限です。1 日または 1 週間を均等に割り切れない特殊な値では、境界でわずかに早く実行されることがありますが、遅くなることはありません。

ローカルの KeePass データベースに同期する

KeePassXC は、同じ暗号化済み KDBX ファイルを macOS、Linux、Windows で開けます。 そのファイルを iCloud Drive フォルダーに置くと、別の iCloud マシンがサービスにログインせずに開ける、オフラインファーストのバックアップになります:

brew install --cask keepassxc
hush set hush-keepass-master-password
hush sync keepass --database "$HOME/Library/Mobile Documents/com~apple~CloudDocs/hush/hush.kdbx" \
  --db-secret hush-keepass-master-password --init

--init はファイルの上書きを拒否します。以降の実行ではこれを省略し、グループ hush のエントリーをアップサートします:

hush sync keepass --database "$HOME/Library/Mobile Documents/com~apple~CloudDocs/hush/hush.kdbx" \
  --db-secret hush-keepass-master-password --dry-run
hush sync keepass --database "$HOME/Library/Mobile Documents/com~apple~CloudDocs/hush/hush.kdbx" \
  --db-secret hush-keepass-master-password --exclude local-only

データベースのパスワードとエントリーのパスワードは、標準入力経由でのみ keepassxc-cli に渡されます。これらが argv、標準出力、ログ、一時的な平文ファイルに書き込まれることはありません。データベースのパスワードのシークレットは常に除外されます。 存在しないエントリーは作成され、一意のエントリーは更新されます。重複する名前がある場合は安全側に倒して処理を失敗させます。また、複数行の値は切り詰めずに拒否します。

暗号化スナップショットを iCloud に保存する(macOS、オプトイン)

パスワードマネージャーのミラーではなく、ストア全体の暗号化スナップショットを使う場合、npm には hush-backup と hush-backup-schedule も含まれています。GnuPG が必要です(brew install gnupg)。

npm install -g @royashbrook/hush
hush mint hush-backup-key  # only if absent; never overwrite an existing recovery key
# keep a recovery copy outside this machine's Keychain before proceeding
hush-backup --dry-run
hush-backup-schedule install --every 6h --keep 30
hush-backup-schedule status

値は GPG にストリームされ、書き込まれるのは暗号文のスナップショットのみです。鍵は引数やログではなく、非公開のファイルディスクリプター経由で渡されます。run はバックアップを 1 回実行し、remove は鍵、設定、バックアップを削除せずにスケジュールを停止します。ジョブが読み込まれていても、バックアップが成功した証拠にはなりません。日付入りのログ ~/Library/Logs/hush-backup.log と、完成した .gpg スナップショットを確認してください。iCloud へのアップロードは macOS が処理するもので、このツールでは検証されません。既存の手動設定による com.hush-backup スケジュールは、新しいジョブをインストールする前に、意図的に廃止する必要があります。

バックアップのオプションと、パッケージに含まれる復旧手順書を参照してください。復旧には別途保存した鍵が必要です。暗号化されたバックアップから、それ自体の鍵を復元することはできません。スケジュール設定と対話型ダイアログは macOS 専用です。非対話型の Bash/GPG の処理は、明示的に指定した代替ディレクトリーを使う POSIX ホストを対象としています。Windows でのバックアップヘルパーの実行は、まだ検証されていません。

KeePass を iCloud にスケジュール同期する(macOS)

npm パッケージには Node/launchd ヘルパーが含まれています。初回セットアップでは、データベースが存在しない場合に作成し、必要に応じて hush 経由でパスワードを尋ね、最初の同期を実行して、定期実行ジョブを読み込みます:

npm install -g @royashbrook/hush
brew install --cask keepassxc
hush-keepass-schedule install --every 6h
hush-keepass-schedule status

デフォルトの保存先は iCloud Drive/hush/hush.kdbx です。スケジュールされた実行では、暗号化されたローカルミラーを Application Support/hush に更新した後、完成したコピーをアトミックに公開します。KeePassXC が launchd から CloudDocs を開くことはありません。これにより、macOS のヘッドレス環境における iCloud のプライバシー制限を回避します。公開に 30 秒以上かかる場合、処理が停止するのではなく、対処方法が分かるエラーで失敗します。対象を絞るには、--database、--db-secret、--group、複数回指定できる --exclude、または位置引数の名前を使用します。remove は LaunchAgent の読み込みを解除しますが、保存先、ローカルミラー、モード 0600 のメタデータ設定は保持します。

この KDBX の外部に、データベースのパスワードを確実に保持できるコピーを 1 つ保管してください。マシンを紛失した場合、iCloud ファイルから hush のシークレットを復元してロックを解除することはできません。競合した KDBX のコピーが作成されないよう、iCloud の同期中は 1 台のマシンを更新担当にしてください。

Bitwarden との同期

公式の Bitwarden CLI は、作成・編集操作、API キーでのログイン、セッションベースの保管庫アクセスに対応しています。インストールしたら、必要な 3 つの認証情報を hush に保存します。

brew install bitwarden-cli
hush set bitwarden-client-id
hush set bitwarden-client-secret
hush set bitwarden-master-password

Bitwarden の個人用 API キーは CLI の認証に使われますが、マスターパスワードの代わりにはなりません。保管庫の読み書きには、引き続きロック解除セッションが必要です。npm で配布されるスケジューラーを使えば、繰り返し操作することなくこのライフサイクルを管理できます。

hush-bitwarden-schedule install --every 6h
hush-bitwarden-schedule status

インストール時には、hush に必要な 3 つの名前がすべてあることを確認し、必要に応じて bw login --apikey を実行してから、--passwordenv でロックを解除し、値を含まないドライランを実行した後、launchd に登録します。スケジュールされた実行のたびに有効期間の短いセッションを取得して同期し、CLI をロックします。API 認証情報、マスターパスワード、セッションは、argv、ログ、plist、モード 0600 のメタデータ設定ファイルには記録されません。

基盤となるコマンドは、ロック解除済みの Bitwarden CLI セッション内であれば、どこでも使用できます。

hush sync bitwarden --dry-run
hush sync bitwarden                         # all non-auth secrets -> folder hush
hush sync bitwarden --folder backups api-key deploy-key
hush sync bitwarden --exclude local-only

存在しないログイン項目は作成され、重複のない項目は更新されます。対象フォルダー内に名前が完全一致する項目が複数ある場合は、安全のため処理を中止します。既存の項目 JSON は bw から JSON トランスフォーマーに直接渡され、エンコードされた作成・編集用の本文は標準入力経由で bw に直接渡されます。パスワードが argv、標準出力、ログ、一時ファイルに入ることはありません。Bitwarden のデフォルトの認証シークレット 3 つは常に除外されます。作成・編集が成功すると、Bitwarden が変更をサーバーに自動でプッシュします。

同期の中核部分は Bash と Node で構成され、hush と bw が対応するプラットフォームで動作します。付属のスケジューラーは、現在 macOS の LaunchAgent を登録します。hush-bitwarden-schedule remove を実行すると、シークレットではない設定と hush の認証情報は保持したまま、LaunchAgent の登録を解除します。

保管庫ではありません

シェルアクセス権を持つエージェントはこのストアを読み書きできるため、悪意のあるプロセスに対するロックではありません。平文をトランスクリプトに残さず、「一度保存して、どこでも注入する」方法を簡単にするための仕組みです。また、耐久性はマシン(ローカルのキーチェーン)と同程度にしかありません。マシンをバックアップするか、実際のシークレットマネージャーにも同期してください。再生成できないシークレットの唯一のコピーを hush にしないでください。MIT ライセンスです。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。