マスキング

exec_with_secrets がモデルに返すもの、つまり stdout と stderr は、すべて事前にマスキングされます。注入されたシークレットが出現するたびに、そのシークレットの名前と、検出されたエンコーディングを示すプレースホルダーに置き換えられます。

Authorization: Bearer [STRIPE_KEY:REDACTED]
QXV0aG9yaXphdGlvbjogQmVhcmVyIH[STRIPE_KEY:base64:REDACTED]Ao=

パターンではなく値で照合する

keygrant は、自分が注入したすべてのシークレットの実際の値を知っています。そのため、「キーらしく見えるもの」を推測するのではなく、その値そのものを照合します。プレフィックス(sk-、ghp_、AKIA…)のブロックリストは存在しないので、プロバイダーが新しい形式を導入しても対応が後れを取ることはありません。

照合される形式は次のとおりです。

CLI の場合

keygrant exec は、--redact を指定した場合にのみマスキングを行います。

keygrant exec --redact STRIPE_KEY -- sh -c 'echo "$STRIPE_KEY"'   # [STRIPE_KEY:REDACTED] と表示されます
keygrant exec STRIPE_KEY -- ./deploy.sh                           # 出力はそのままターミナルに表示されます

このフラグを指定しない場合、出力はそのままターミナルに流れます。自分で何かを実行するときは、これが望ましい動作です。エージェントが CLI を呼び出す場合は、必ず --redact を指定しなければなりません。MCP ツールは常にマスキングを行います。

限界

マスキングはあくまで補助的な安全策であり、防御の境界ではありません。境界となるのは、そもそも値がモデルのコンテキストに一切入らないという点です。