
機密性の高い値をLLMリクエストから除外し、会話を中断させません。
インストール · クイックスタート · ポリシー · モニタリング · Pi / OMP · セキュリティ
Coverは、Codex、Claude Code、Cursor、SDK、その他のHTTPベースのAIクライアント向けのローカルプライバシープロキシです。送信JSONをスキャンし、一致した値をローカルで置換し、JSONおよびストリーミングレスポンス内で可逆的な置換を復元します。LLMは保護された値を受け取り、エージェントは元の値を引き続き使用できます。
Coverは、ポリシー駆動の置換、決定論的な仮名、運用チェック、Codexサポート、厳格な障害処理を備えた透過的なリバースプロキシとして動作します。ローカルに留まり、観測可能であり、検査できないものについて明確であるように設計されています。
flowchart LR
A["Agent"] -->|"JSON request"| C["Cover<br/>detect · transform · enforce"]
C -->|"protected request"| L["LLM or router"]
L -->|"JSON or SSE response"| C
C -->|"restored response"| A
インストーラはCoverをクローンし、Goでビルドして~/.local/bin/coverにインストールし、選択したクライアントを設定してプロキシを起動します。
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | bash
要件: gitとgo.modで宣言されているGoバージョン。
ビルド済みのLinux、macOS、WindowsアーカイブとそのチェックサムはGitHub Releasesから入手できます。
非対話インストールの場合:
COVER_AGENTS=openai,claude \
curl -fsSL https://raw.githubusercontent.com/DavidCarliez/cover/main/scripts/install.sh | bash
git clone https://github.com/DavidCarliez/cover.git
cd cover
go build -o cover ./cmd/cover
install -m 0755 cover ~/.local/bin/cover
コアバイナリにはcgo依存関係はありません。標準のGoクロスコンパイルが機能します:
GOOS=linux GOARCH=arm64 go build -o cover-linux-arm64 ./cmd/cover
GOOS=windows GOARCH=amd64 go build -o cover.exe ./cmd/cover
cover init # write ~/.config/cover/config.yaml
cover start --detach # run in the background
cover doctor # verify the local setup
cover test # local redaction round trip, no network call
cover monitor # watch privacy-safe request metadata
cover initは、OpenAI、Anthropic、またはカスタムアップストリームを尋ねます。完全な設定はconfigs/config.example.yamlに文書化されています。
Coverを停止してもクライアント設定は変わりません。Coverを指したままのクライアントは、Coverが再起動されるか、クライアントが直接のプロバイダーまたはルーターに再設定されるまで接続に失敗します。
組み込みの正規表現検出は、AWS・GCPキー、GitHub、GitLab、Slack、Stripe、Anthropicのトークン、秘密鍵ブロック、JWT、明示的な汎用シークレット代入、メール、SSN、クレジットカード、電話番号、IBANをカバーします。素のOpenAI sk-...値は、意図的に専用の組み込みカテゴリにはしていません。環境で必要な場合は、明示的なルールを定義してください。
ルールは~/.config/cover/config.yamlのrulesの下にあります。セレクタには、正規表現、builtin_*検出器、JSONオブジェクトキーのリストを使用できます。
rules:
password_fields:
keys: [password, passwd, pwd, passphrase, user_password, database_password]
category: password
action: pseudonymize
generator: password
priority: 220
ipv4_addresses:
detector: builtin_ipv4
category: ip_address
action: pseudonymize
generator: ipv4
priority: 100
customer_name:
pattern: '(?i)\bNIKE\b'
category: customer
action: pseudonymize
generator: alias
priority: 80
forbidden_secret:
pattern: '(?i)secret\s*[:=]\s*(?P<value>[^\s,;]+)'
action: block
priority: 200
キーセレクタは完全な文字列値を保護します。たとえば、{"password":"admin"}は保護されますが、無関係な{"username":"admin"}がパスワードとして扱われることはありません。名前付き(?P<value>...)グループを使うと、正規表現はキャプチャされた値のみを置換できます。
仮名ジェネレータ: ipv4、ipv6、hostname、domain、fqdn、email、username、password、secret、uuid、url、alias。
ルールは起動時に検証されます。無効なセレクタ、式、アクション、ジェネレータ、キャプチャグループがあると、Coverは起動しません。検出エラー、マッピング枯渇、不正なJSON、圧縮ボディ、明示的なブロックが発生しても、元のリクエストを転送するフォールバックは行われません。
Coverは、所有者のみがアクセスできる~/.config/cover/pseudonym.keyを作成します。HMAC-SHA-256は、同じ元の値からセッションや再起動をまたいで同じ仮名を導出します。インストールが異なれば、異なる仮名が生成されます。
キーから元の値を復元することはできません。復元には、プロセスメモリ内にのみ保持される境界付きマッピングを使用します。マッピングはX-Cover-Sessionで分離され、設定されたTTL後に失効し、分離されたリクエストが完了すると削除されます。安定した仮名の継続性が重要になる場合にのみ、キーをバックアップしてください。
cover inspect request.json
cover inspect request.json --session demo
レポートには、変換後のリクエスト、一致したルール、カテゴリ、アクション、警告、ブロック状態が含まれます。ネットワークリクエストは送信されず、可逆マッピングも出力されません。
cover doctor
cover doctor --json
Doctorは、構成、リスナーポリシー、制限、仮名キー、編集のラウンドトリップ、アップストリームループ保護、デーモン、フェイルクローズ動作、監査ログ、環境ルーティング、Codexプロバイダー、Codexリクエスト圧縮を検証します。そのライブプローブはローカルで拒否され、モデルトークンを消費しません。
cover monitor
cover monitor --follow=false -n 50
cover monitor --json
デフォルトのモニターは、許可リストに登録されたメタデータのみを表示します: 時刻、HTTPステータス、変換数、バイト数、レイテンシ、カテゴリ、一般的なエラー。監査ログにリクエスト/レスポンスボディ、一致した値、マッピング、パス、クエリ、アップストリームの資格情報が含まれることはありません。
cover monitor --show-content
cover monitor --show-content --once
cover monitor --show-content --json
このオプトインビューは、検出された各オリジナルと置換を表示し、その後にアップストリームのトランスポートに渡される正確な変換後JSONを表示します。ライブ専用であり、監査ログには一切追加されません。キャプチャは、認証されたローカルビューアが接続した後に開始され、切断されると停止します。ストリームはループバック専用で、インストールキーから導出されたトークンを使用し、遅いビューアは切断されます。
[!WARNING] このターミナル出力は機密情報です。共有ターミナル、録画セッション、CIログ、サポートのトランスクリプトでは
--show-contentを使用しないでください。
Coverは、リクエストメソッド、パス、クエリ、ヘッダーを設定済みのアップストリームに転送します。Coverは認証ヘッダーを書き換えないため、既存のプロバイダー認証は引き続き機能します。
CodexはResponses APIを使用します。~/.codex/config.tomlにユーザーレベルのプロバイダーを追加し、Coverがボディを検査できるようにリクエスト圧縮を無効にします:
model_provider = "cover"
[model_providers.cover]
name = "Cover"
base_url = "http://127.0.0.1:8317"
wire_api = "responses"
requires_openai_auth = true
supports_websockets = false
[features]
enable_request_compression = false
これらのキーは、公式のCodex設定リファレンスに従います。[features]が既に存在する場合は、そのテーブルに設定を追加してください。環境からトークンを読み取るルーターの場合は、requires_openai_authをenv_key = "YOUR_ROUTER_KEY_ENV_NAME"に置き換えます。
Coverのupstreamは実際のルーターURLを指したままにしてください。出発点としてconfigs/codex-router.example.yamlを使用します。選択したモデルはOpenAI、Anthropic、Gemini、DeepSeek、または他のモデルにできます。Coverはルーターの一般的なJSONトラフィックに対して動作するためです。
Responses APIのencrypted_contentフィールドは不透明で、暗号的に検証されます。Coverは、リクエストのスキャンとレスポンスの復元中にこれらを変更しないままにします。
export ANTHROPIC_BASE_URL=http://127.0.0.1:8317
export OPENAI_BASE_URL=http://127.0.0.1:8317/v1
Claude Codeは最初の形式を使用します。OpenAI互換のSDKとクライアントは一般的に/v1形式を使用します。インストーラーはこれらの設定を永続化でき、cover envはインストール時に選択したクライアントのエクスポートを出力します。
SDKコンストラクタでも同じベースURLを直接設定できます:
client = OpenAI(base_url="http://127.0.0.1:8317/v1", api_key=os.environ["OPENAI_API_KEY"])
client = anthropic.Anthropic(base_url="http://127.0.0.1:8317", api_key=os.environ["ANTHROPIC_API_KEY"])
Cursorや他のアプリケーションは、APIベースURL設定を公開している場合、同じエンドポイントを使用できます。ルーティングはcover doctorまたはcover monitorで確認してください。
公式ハーネス拡張機能は、プライバシーエンジンをローカルのGoプロキシに置いたまま、PiまたはOh My PiからCoverを制御します:
pi install npm:cover-harness
# or
omp plugin install cover-harness
現在のCoverアップストリームを経由する必要があるプロバイダーだけを設定します:
/cover providers openai-codex,deepseek=/
/cover on
/cover doctor
OpenAI系プロバイダーはデフォルトで/v1プロキシパスを使用します。=/は、DeepSeekなど独自のリクエストパスを追加するトランスポート向けにプロキシルートを選択します。通常の操作には/cover status、/cover start、/cover stop、/cover monitorを使用します。/cover offで直接のプロバイダールーティングに戻ります。
保護はフェイルクローズです: 有効にしている間、設定済みプロバイダーはCoverのデーモンが利用できない場合もCoverを指し続けるため、プロキシを迂回するのではなくリクエストはローカルで失敗します。拡張機能の状態は、~/.config/cover/harness.jsonにプライベートかつローカルに保持されます。
同じパッケージはPiパッケージギャラリーに掲載されています。OMPユーザーはこのリポジトリをマーケットプレイスとして追加することもできます:
omp plugin marketplace add DavidCarliez/cover
omp plugin install cover-harness@cover
正規表現とキー認識ルールでは、すべての名前、住所、顧客ID、内部コードネームを識別できません。Coverは、追加のセマンティック検出器として、小さなローカルllama.cppモデルを実行できます。
cover models pull
cover models status
cover restart
デフォルトモデルは、約490MBのQ4 GGUF形式のQwen2.5-0.5B-Instructです。Coverはllama-serverをループバックで起動し、呼び出しごとおよび全体のリクエスト予算を適用します。バイナリの欠落、起動失敗、タイムアウト、検出エラーは、検出器が有効な場合フェイルクローズします。返されたスパンは、Coverが受け入れる前に、入力にそのまま存在している必要があります。
サポートされていないプラットフォームでは、この機能は無効のままにしてください。制限、バッチ処理、並行性、モデルパスについては、configs/config.example.yamlのdetectors.llm_fallbackセクションを参照してください。
Coverは、実際にプロキシを通過するJSONボディ内の一致する文字列値を保護します。すべての機密値を発見できるとは主張していません。
データは、次の場所に現れる場合、依然としてマシンの外に出る可能性があります:
allowルールでカバーされるフィールドencrypted_contentインライン画像の処理は、media.images: allow、warn、blockで設定できます。Coverはピクセルを検査せず、どのメディアポリシーも考えられるすべてのエンコーディングを認識できるわけではありません。
Coverは、network.allow_remote: trueが明示的に設定されていない限り、非ループバックリスナーを拒否します。Coverとそのアップストリームルーターが異なるホストで実行されている場合は、TLSまたは他の信頼できるトランスポートを使用し、個別のネットワークアクセス制御を適用してください。Cover自体は通常のプロキシトラフィックを認証しません。
リクエスト、バッファリングされたレスポンス、ストリーム全体、SSEイベントごとの制限により、メモリ使用量が制限されます。大きすぎるリクエストはHTTP 413を返し、大きすぎるバッファリングレスポンスはHTTP 502を返し、大きすぎるストリームは終了されます。
脆弱性を報告する前にSECURITY.mdをお読みください。公開issueを開くのではなく、そこに記載されている非公開の報告経路を使用してください。
CONTRIBUTING.mdCODE_OF_CONDUCT.md| 領域 | Coverの機能 |
|---|
| ポリシー | allow、placeholder、pseudonymize、mask、redact、blockアクションを持つ宣言型ルール |
| 現実的な置換 | IPアドレス、ホスト、ドメイン、メール、ユーザー名、パスワード、UUID、URL、エイリアス用の決定論的ジェネレータ |
| コンテキスト認識ルール | JSONキーによる値全体の保護。adminなどの短いパスワードや、正規表現・組み込み検出セレクタも対象 |
| 安定したID | インストールキーに基づくHMAC仮名は、リクエスト、セッション、再起動をまたいで一貫します |
| マッピングの安全性 | TTLと容量制限を備えた、境界付き・セッション分離・メモリのみの可逆マッピング |
| 検査 | cover inspectはLLMに接続せずに保護されたJSONをプレビューします |
| 診断 | cover doctorはポリシー、デーモンの健全性、ローカルのフェイルクローズ動作、Codexルーティングを検証します |
| モニタリング | メタデータのみの監査・モニタービューに加え、検出・転送されたコンテンツの明示的なライブ専用検査 |
| プロキシの堅牢化 | デフォルトのループバックリスナー、ボディ・ストリーム制限、汎用的な安全なエラー、フェイルクローズ解析 |
| Codex互換性 | Responses APIとルーター設定、圧縮チェック、安全なSSE復元、不変のencrypted_contentフィールド |
| オプションのセマンティックパス | ローカルのllama.cpp検出器が、正規表現では見逃す自由形式のテキストを検査できます |
| コマンド | 目的 |
|---|
cover install | クライアント、シェルエクスポート、バックグラウンドプロキシを設定 |
cover init | 設定ファイルを作成 |
cover start [--detach] | Coverをフォアグラウンドまたはバックグラウンドで起動 |
cover stop | バックグラウンドプロセスを停止 |
cover restart | バックグラウンドで再起動 |
cover status [--json] | プロセス、リスナー、編集されたアップストリームの状態を表示 |
cover version [--json] | ビルドバージョン、コミット、日付を表示 |
cover env | 設定済みクライアント用のシェルエクスポートを出力 |
cover test | 合成ローカルの編集・復元チェックを実行 |
cover inspect request.json | Coverが転送する内容を正確にプレビュー |
cover doctor [--json] | 設定、プライバシー、デーモン、ルーティングのチェックを実行 |
cover monitor | 最近の安全なメタデータを表示し、新しいイベントを追跡 |
cover monitor --show-content | 機密性の高いライブ変換と送信JSONを表示 |
cover models pull | オプションのローカル検出ランタイムとモデルをダウンロード |
cover models status | ローカル検出のインストールと設定を報告 |
cover completion | シェル補完スクリプトを生成 |
| アクション | 結果 |
|---|
allow | 一致を記録するが、変更せずに残す |
placeholder | 短い可逆トークンに置き換える |
pseudonymize | 現実的で決定論的な値に置き換える |
mask | 最初と最後の文字を残し、中間をマスクする |
redact | [REDACTED]に置き換える |
block | リクエスト全体をローカルで拒否する |