コンテンツにスキップ

シークレットの難読化

機密値(APIキー、トークン、パスワード)がLLMプロバイダーに送信されるのを防ぎます。有効にすると、シークレットはプロセスを離れる前に決定論的なプレースホルダーに置換され、モデルが返すツール呼び出し引数では元の値に復元されます。

デフォルトで有効です。/settings UIまたは config.yml で直接切り替えできます:

secrets:
enabled: false
  1. セッション開始時に、2つのソースからシークレットが収集されます:

    • 環境変数 — 一般的なシークレットパターン(*_KEY*_SECRET*_TOKEN*_PASSWORD など)に一致し、値が8文字以上のもの
    • secrets.yml ファイル(下記参照)
  2. LLMへの送信メッセージでは、すべてのシークレット値が <<$env:S0>><<$env:S1>> などのプレースホルダーに置換されます。

  3. モデルが返すツール呼び出し引数は深く走査され、実行前にプレースホルダーが元の値に復元されます。

各シークレットの処理方法を制御する2つのモードがあります:

モード動作可逆性
obfuscate(デフォルト)インデックス付きプレースホルダー <<$env:SN>> に置換あり(ツール引数で難読化解除)
replace決定論的な同じ長さの文字列に置換なし(一方向)

YAMLでカスタムシークレットエントリを定義します。2つの場所がチェックされます:

レベルパス用途
グローバル~/.xcsh/agent/secrets.ymlすべてのプロジェクト共通のシークレット
プロジェクト<cwd>/.xcsh/secrets.ymlプロジェクト固有のシークレット

プロジェクトエントリは、content が一致するグローバルエントリを上書きします。

配列の各エントリには以下のフィールドがあります:

フィールド必須説明
type"plain" または "regex"はいマッチ戦略
contentstringはいシークレット値(plain)または正規表現パターン(regex)
mode"obfuscate" または "replace"いいえデフォルト:"obfuscate"
replacementstringいいえカスタム置換文字列(replaceモードのみ)
flagsstringいいえ正規表現フラグ(regexタイプのみ)
# 特定のAPIキーを難読化(デフォルトモード)
- type: plain
content: sk-proj-abc123def456
# データベースパスワードを固定文字列に置換
- type: plain
content: hunter2
mode: replace
replacement: "********"
# AWS形式のキーをすべて難読化
- type: regex
content: "AKIA[0-9A-Z]{16}"
# 明示的なフラグによる大文字小文字を区別しないマッチ
- type: regex
content: "api[_-]?key\\s*=\\s*\\w+"
flags: "i"
# 正規表現リテラル構文(パターンとフラグを1つの文字列で指定)
- type: regex
content: "/bearer\\s+[a-zA-Z0-9._~+\\/=-]+/i"

正規表現エントリは常にグローバルにスキャンされます(g フラグは自動的に適用されます)。正規表現リテラル構文 /pattern/flags は、content + flags を別々に指定する代替手段としてサポートされています。パターン内のエスケープされたスラッシュ(\\/)は正しく処理されます。

replaceモードと正規表現の組み合わせ

Section titled “replaceモードと正規表現の組み合わせ”
# 接続文字列を一方向で置換(不可逆)
- type: regex
content: "postgres://[^\\s]+"
mode: replace
replacement: "postgres://***"

環境変数は常に最初に収集されます。ファイルで定義されたエントリはその後に追加されるため、ファイルエントリは環境変数にないシークレット(設定ファイル、ハードコードされた値など)もカバーできます。同じ値が両方に存在する場合、ファイルエントリのモードが優先されます。

  • src/secrets/index.ts — 読み込み、マージ、環境変数収集
  • src/secrets/obfuscator.tsSecretObfuscator クラス、プレースホルダー生成、メッセージ難読化
  • src/secrets/regex.ts — 正規表現リテラルの解析とコンパイル
  • src/config/settings-schema.tssecrets.enabled 設定の定義