introspect について
introspect は、ファイルだけでは確認できない実行時情報を収集する読み取り専用のデータベース監査スキルです。カタログを調べ、API 接続が必要な確認項目も示します。
主な機能
- 01データベースカタログを読み取り
- 02インデックス・制約・RLSを確認
- 03エンジンのバージョンとテーブルサイズを収集
- 04読み取り専用クエリ規則を適用
- 05API接続が必要な確認項目を報告
活用シーン
- 01実際のインデックスと制約の状態を検証
- 02行レベルセキュリティの設定を確認
- 03データベース監査用の実行時情報を収集
MCP 対応
接続方法として DB MCP サーバーを優先し、クエリ、読み取り、一覧、説明、スキーマなどの読み取り専用ツールだけを使います。変更を行うツールは避け、汎用クエリツールにも読み取り専用の検証を適用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill introspectインストール後、Claude Code で/introspectを入力して読み込まれたか確認します。
詳細
introspect(Tier-1 — ライブ読み取り専用)
Tier 0 ではファイルを読み取ります。多くのチェックで必要となる実行時の実態は、ファイルからはわかりません。実際のインデックス使用状況、インデックスのない外部キー結合、テーブル/行のサイズ、RLS の状態、拡張機能、エンジンのバージョン、自動バキューム/ラップアラウンドの状態などです。これらを確認する方法は introspect だけであり、契約上、読み取り専用です。references/data-tiers.md を参照してください。
接続方法(MCP を優先)
- DB MCP サーバー(推奨) — 権限の境界を明確にできます。名前が
*query*/*read*/*list*/*describe*/*schema*に一致する読み取りクラスのツールのみを使用してください。書き込み可能な汎用のqueryツールも、以下の読み取り専用バリデーターを経由します。さらに、mcp__.*に対する PreToolUse フックで保護されます。最初に利用可能なツールを一覧表示し、データを変更するツールは決して呼び出さないでください。 - それ以外の場合は、最小権限の読み取り専用接続文字列を環境内の
$DATABASE_URLから読み取ります。決して出力せず、検出結果にも書き込みません。検出結果、レポート、ログに含まれる認証情報はすべてredactSecrets()が除去します。 - どちらも利用できない場合 → 依存するすべてのチェックについて、理由と必要最小限の権限を添えて
status: needs_apiを出力します。暗黙に合格としたり、行数、サイズ、実行計画を捏造したりしないでください。
読み取り専用の契約(クエリの実行前に適用)
SET default_transaction_read_only = on;statement_timeoutに上限を設定します(例:SET statement_timeout = '15s';)。SELECT/EXPLAIN(実行計画以外に書き込みの副作用がないANALYZEは不可)/ カタログ読み取りのみを許可します。それ以外は拒否してください。
読み取るカタログ(行データは読み取りません)
- Postgres:
version()、information_schema、pg_catalog、pg_class、pg_index、pg_indexes、pg_constraint、pg_policies、pg_extension。Tier-2 ではpg_stat_user_indexes/pg_stat_user_tables、pg_stat_statements、age(datfrozenxid)を追加します。 - MySQL/MariaDB:
information_schema(TABLES、STATISTICS、KEY_COLUMN_USAGE)、SHOW ENGINE INNODB STATUS(読み取り)。 - Mongo:
db.stats()、$indexStats、$collStats(Tier-2)。 - Cassandra:
system_schema、nodetool tablehistograms(Tier-2)。
検出結果への影響
ライブの証拠で回答されたチェックは、confidence: established に格上げされ、スコアの上限を設定する場合があります(例:int4/serial 主キーの枯渇が近いこと、TXID のラップアラウンドが差し迫っていること、依存しているテーブルで RLS が無効になっていることを確認した場合)。ライブアクセスがない場合、同じチェックは directional のままか needs_api となり、静的なシグナルだけでスコアの上限を設定することはありません。すべての検出結果は引き続き schema/finding.schema.json に準拠します。verification.reproduce では、認証情報を直接記載せず $DATABASE_URL を参照してください。
出力
呼び出し元の監査担当者が必要とするカタログ情報(インデックス一覧、RLS の状態、バージョン、サイズ)に加え、needs_api のまま残るチェックとその理由を明確に示してください。ユーザーの言語(EN/ES)で応答してください。