| id | secret-credential-scan |
| name | Secret / Credential Scan 機密情報の混入検出 |
| description | 差分に追加された API キー・トークン・credential・秘密鍵・.env 値・個人ローカルパスなどの機密情報を、言語・ファイル種別に依存せず検出する。決定論的に判定できる範囲は CI(gitleaks 等)へ移譲しつつ、レビューで取りこぼしを補足する |
| version | 0.1.0 |
| category | midstream |
| phase | midstream |
| applyTo | ["**/*"] |
| tags | ["secret","credential","midstream"] |
| severity | major |
| inputContext | ["diff"] |
| outputKind | ["findings","actions"] |
| modelHint | balanced |
| dependencies | ["code_search"] |
| exclude | ["**/package-lock.json","**/pnpm-lock.yaml","**/yarn.lock","**/*.lock","dist/**","**/*.min.*","**/*.map","**/*.snap"] |
Pattern declaration
Primary pattern: Reviewer
Secondary patterns: Inversion
Why: 機密情報の検出はパターン的・決定論で判定できる領域が大きく、本来は CI に委ねるべき。一方で CI 未整備のリポジトリや、CI が見ない種別(個人パス・ローカル設定)を補足する補助レビューとして機能する。秘匿情報を含む追加が無ければ実行を止めるゲートが必要。
Goal / 目的
- 差分へ新規追加された機密情報を、言語やファイル種別を問わず検出する。対象は API キー / トークン / credential / 秘密鍵 /
.env 値 / 個人ローカルパス / ローカル固有設定とする。
- 既存の言語限定 secret チェック(
security-basic は .ts/.tsx/.js/.jsx、config-json は .json/.yml)が見ない種別・ファイルの取りこぼしを補う。
Non-goals / 扱わないこと
- アプリコード内の SQLi / XSS など機密以外のセキュリティ(
security-basic の領域)。
- BaaS のルール/鍵露出(
firebase-security-rules / supabase-rls-policy の領域)。
- 決定論で完全な判定ができる検出を恒久的な肩代わりとすること(本スキルは CI = gitleaks / trufflehog 等の導入を促し、移譲する)。
Pre-execution Gate / 実行前ゲート
このスキルは以下の条件がすべて満たされない限り NO_REVIEW を返す。
ゲート不成立時の出力: NO_REVIEW: secret-credential-scan — 機密情報の候補が差分に検出されない
False-positive guards / 抑制条件
- プレースホルダ・例値(
xxx / your-api-key / dummy / example / <...> / ***)は指摘しない。
.env.example / .env.sample / .env.template などサンプルファイルのプレースホルダは指摘しない(実値が入っていれば指摘する)。
- テストフィクスチャ・ドキュメントの明らかな擬似値は指摘しない。実在しうる形式(本物の鍵長・接頭辞
sk- / ghp_ / AKIA 等)の場合のみ指摘する。
- 既に環境変数参照(
process.env.X / os.environ[...])に置き換わっている場合は指摘しない。
- 既存行(差分の文脈行)にあるだけで追加・変更されていない機密は対象外(追加・変更行のみ)。