Communitygithub.com

maxgfr/secretgate

コーディングエージェント向けのローカルシークレットファイアウォール — プロンプト、ファイル読み込み、ツール出力からLLMに到達する前に認証情報を秘匿化します(Claude Code、Codex、OpenCode対応)。プロキシ不要、npm不要、決定論的なフック。

secretgate とは?

secretgateは、AIコーディングエージェントがLLMにシークレット(認証情報)を送信するのを防ぐためのローカルファイアウォールスキルです。gitleaksから変換された221のルール、エントロピーゲート、Luhnチェックカードに基づく決定論的エンジン(node scripts/secretgate.mjs)を使用して、シークレットを検出・ブロックします。Claude CodeやCodexではプロンプトをブロックして秘匿化コピーを提示し、OpenCodeではプロンプトを直接秘匿化します。ファイル読み込みでは`.env`や`~/.ssh`などのファイルを直接拒否し、ツール出力はプレースホルダに置き換えます。エージェントがプレースホルダをファイルに書き戻すと、元の値が復元される「秘匿化&復元」機能も備えています。インストールはnpm不要で、`node scripts/secretgate.mjs install`コマンドから各エージェントのフックを設定します。

対応✓Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add maxgfr/secretgate

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

secretgate — コーディングエージェント向けローカルシークレットファイアウォール

認証情報がLLM APIに送信されてはなりません。secretgateはそれをローカルで強制します。決定論的エンジン(node scripts/secretgate.mjs、npmインストール不要、キー不要)を使用し、gitleaksから変換された221ルール+エントロピーゲート+Luhnチェックカードを備えています。エージェントのフックAPIが書き換えを許可する場合、シークレットは安定したプレースホルダに秘匿化され、エージェントがファイルに書き戻す際にローカルで復元されます(秘匿化&復元)。プロンプトのブロックのみを許可する場合(Claude Code/Codex)、秘匿化コピーとともにブロックされ、再送信用に提供されます。

アクティベーション → インストール(スキルがトリガーされたら最初に実行)

このスキルがアクティベートされたら(ユーザーがシークレット保護/secretgateインストール/ファイアウォール設定を依頼したら)、doctorを実行し、まだ配線されていないものを配線してください。secretgateはスキルであり、npmパッケージではありません。独自のバンドルを実行します。

node scripts/secretgate.mjs status                  # 現在の配線状況を確認
node scripts/secretgate.mjs install --claude-code   # フック + ~/.claude/settings.json に permissions.deny を追加
node scripts/secretgate.mjs install --codex         # ~/.codex/hooks.json + [features] hooks = true
node scripts/secretgate.mjs install --opencode      # ~/.config/opencode/plugin/ に自己完結型プラグイン
node scripts/secretgate.mjs install --all           # すべてのエージェントを設定

--project を指定すると、Claude Codeのインストールを ./.claude/settings.json にスコープします。install はバンドルのコピーを ~/.secretgate/bin/ に固定し、エージェントがそれを呼び出すように配線するため、スキルキャッシュが削除されても動作し続けます。インストール後は、必ずユーザーにエージェントセッションを再起動するよう伝えてください。フックは起動時に読み込まれます。一度配線されると、秘匿化は自動的かつ決定論的に行われます(フックが実行するので、ユーザーが行う必要はありません)。

コマンド

コマンド説明
statusドクター:エージェントごとの配線、エンジン、ヴォールトの健全性、制限事項を表示
`scan <ファイルディレクトリ
pipe標準入力 → 標準出力(シークレットをプレースホルダに秘匿化)
allow <値> / allow --rule <ルールID> / allow --path <グロブ>許可リストに追加(値はSHA-256ハッシュとして保存、平文では保存しない)
vault list / vault clearプレースホルダマッピングを表示(シークレットは表示しない)
uninstall --<エージェント>インストールで追加したものを正確に削除

保護の仕組み(ユーザーから尋ねられたら説明)

  • プロンプト: Claude Code/Codex → 秘匿化コピーとともにブロック([allow-secret]を追加すると1回だけバイパス)。OpenCode → その場で静かに秘匿化。
  • ファイル読み込み: .env*、鍵、~/.aws、~/.ssh… は直接拒否(.env.example/.sample/.template は読み取り可能)。値はモデルに入力されません。
  • ツール/bash出力: SECRETGATE_<ハッシュ> プレースホルダに秘匿化(Claude Code + OpenCode。Codexはまだ出力の書き換えに対応していません)。
  • 復元: エージェントがファイルにプレースホルダを書き込むと(Write/Edit)、ディスク上には実際の値が保存されます。Bash復元はデフォルトでOFF(プロンプトインジェクションによる情報漏洩防止)。有効にするには ~/.secretgate/config.json で restoreBash: true を設定。
  • クリーンなツール呼び出し: Claude Codeのpre-tool-useフックは、最小限のJSON({}、決定不要=通常の許可フロー)を返し、空の標準出力を返しません。空のフック出力はClaude Codeのバグ(anthropics/claude-code#77782)を引き起こし、autoモードでも一致するすべてのツール呼び出しで対話的な許可プロンプトが強制されます。また、文書化された "defer" 決定値はClaude Code <= 2.1.212で拒否されるため、{} はどこでも機能する棄権となります。

対応していないこと(ユーザーに正直に伝える)

  • Claude Codeの @file メンションは、ツールフックを起動せずにインラインコンテンツを含める(permissions.denyルールのみがカバー)。
  • Codexの非インタラクティブ実行(codex exec)— 上流のバグで、フックが起動しません。
  • 画像/スクリーンショット/クリップボード、MCPツールトラフィック、インストール前に会話にすでに含まれているもの。
  • フックプロセスが強制終了/タイムアウトした場合、エージェントは続行します(エージェント側のフェイルオープン)。secretgate自体は、プレイベントの自社エラーではフェイルクローズします。
  • ブロックされたプロンプトは、Claude Codeによってローカルにエコーバックされます(ターミナルに Original prompt:、claude -p JSONの result)。APIは決してそれを見ませんが、パイプされたヘッドレス出力は機密として扱ってください。

誤検知

最も狭い修正を優先:行にインラインで # pragma: allowlist secret(または gitleaks:allow)→ allow <値>(ハッシュ化)→ allow --path <グロブ> → allow --rule <ルールID>(最終手段)。プロジェクトは .secretgate.json({"allowlist": {"paths": […]}})に追加の許可リストエントリをコミットできます。

関連スキル