ユーザーマニュアル

コード監査

コード監査は実験的機能です。

コード監査は、ローカルのコーディングエージェントを使って、プロジェクトのセキュリティレビューを行う機能です。サイドバーでプロジェクトを右クリックし、「実験的機能」→「コード監査」を選んでから、「新規監査」を選びます。「ローカルアシスタント」で「Codex」または「Claude」を選び、続いて「モデル」「思考の深さ」「監査範囲」を選んで、「監査を開始」をクリックします。レポートのページには、スキャンの現在のフェーズが表示されます。「アシスタントのセッション」には、エージェントによる元のツール呼び出し、分析、保留中の権限リクエストが表示されます。監査を続行させるには、そこでリクエストに応答します。レポートは、Codex Security が結果を確定した時点で表示されます。

監査はプロジェクトがあるマシン上で実行され、選んだエージェントのインストール済みの CLI を、既存のログイン情報、設定、権限の扱いのまま使います(「ローカルアシスタントのログインと設定を引き継ぎます。モデル API の個別設定は不要です。」)。VelaTerm は、監査用のセッションに限って Codex Security の MCP サーバーを追加します。ほかの MCP サーバーはそのままで、VelaTerm 自身がモデルの API を呼び出すことはありません。CLI はインストール済みでログインしており、アカウントの上限に達していない必要があります。CLI 自体の設定でモデルのプロバイダーが指定されている場合もありますが、VelaTerm はその設定を変更しません。

「コード監査」の項目は、コレクションにも表示されます。ルートフォルダーのないコレクションは監査できません。

モデルと思考の深さ

モデルの一覧は、新規セッションのダイアログでそのエージェントに使われるものと同じです。エージェントのデフォルトの起動引数も考慮されるため、一覧は監査の実際の実行方法と一致します。「既定のモデル」を選ぶと、エージェント自身の選択が使われます。「思考の深さ」は、思考の深さを選べるモデルを選んだときに使えるようになります。「自動」を選ぶと、エージェント自身の選択が使われます。一覧を読み込めない場合は、再試行ボタンが表示されます。明示的に指定した組み合わせはバックエンドで確認され、選んだ値は履歴とその後の実行のために監査に保存されます。一覧にモデルが表示されていても、お使いのアカウントでそのモデルを使えるとは限りません。利用上限に達した場合を含め、プロバイダー側でエラーが起きると、監査は失敗として終了します。

新しい監査では、インターフェースの言語で分析を行うよう求めます。プロトコルのフィールド、パス、識別子、引用したソースの証拠は、元のまま残されます。

Codex Security との統合

VelaTerm には、Apache-2.0 ライセンスで公開されている @openai/codex-security@0.1.26 が同梱されています。このリリースのプラグインマニフェストのバージョンは 0.1.95 で、新規監査のページには両方のバージョンが表示されます。元のスキル、リファレンス、スキーマ、スクリプト、ランタイム、ライセンスが含まれ、UPSTREAM.json にはパッケージの入手元、完全性の値、ファイルのハッシュが記録されています。

新しい監査では、毎回アップストリームのワークベンチに実際のスキャンが登録されます。エージェントは同梱の入口となるスキルを読み、アップストリームの MCP ツールと結果の形式を使います。以前の独自実装によるバッチ処理のワークフローの記録は引き続き読むことができ、「旧方式の監査 · この記録では Codex Security の手順を使用していません。」と表示されます。

どちらのエージェントも、同じアップストリームのワークフローを使います。公開されている TypeScript SDK は Codex のランタイムを動かすもので、Claude Code 用の実行機能を提供していないため、VelaTerm はアップストリームの MCP サーバーとローカルのワークベンチを通じて統合しています。Claude Code への対応は VelaTerm によるアダプターであり、アップストリームが Claude を公式にサポートしているわけではありません。

ランタイムには、アップストリームのパッケージが対応するバージョンの Node.js が PATH 上にあることと、Python 3.10 以降が必要です。Python 3.10 では tomli パッケージも必要ですが、Python 3.11 以降では組み込みの tomllib がその代わりになります。VelaTerm は同梱のリソースを確認し、データディレクトリに展開します。これらを Codex や Claude の設定にインストールすることはありません。

監査範囲とワークフロー

  • リポジトリ全体は、対象を固定したスナップショットとリポジトリのセキュリティポリシーに対して、アップストリームの Standard スキャンを実行します。
  • ディレクトリまたはファイルは、正確な「相対パス」を指定して Standard を実行します。呼び出しの連鎖を理解するためにほかのソースファイルを読むことがありますが、それらの部分を完全に監査したとはみなしません。
  • 作業ツリーの変更は、固定した Git の変更セットに対して、アップストリームの差分スキルを実行します。アップストリームの対象解決機能が対応している、ステージ済み、未ステージ、未追跡の変更が含まれ、削除されたファイルについては変更前の証拠を保持します。

Standard は、skills/security-scan/SKILL.md と references/core-scan.md を読み込みます。実行前チェック、独立したベースラインとアーキテクチャの分析、ソースに基づく調査、候補のチェックポイント、反証の検討、検証、確認範囲の照合を行います。エージェントが対応していれば独立したワーカーを使い、対応していなければアップストリームの逐次処理による代替手段が適用されます。その場合は、その制約を明示する必要があります。ワーカー数の設定だけでは、独立したワーカーが実行された証拠にはなりません。

作業ツリーの監査では、skills/security-diff-scan/SKILL.md を読み込みます。対象を固定し、脅威モデルを作成し、レビュー項目を準備して列挙し、候補を見つけて検証し、攻撃経路を分析してから、結果の下書きを提出して完了させます。変更されたファイルの現在の内容を確認するだけでは、この手順の代わりにはなりません。

アップストリームのワークベンチは、監査範囲としてディレクトリしか受け付けません。ファイルを選べるようにするため、インストールされたランタイムには、ハッシュを記録した、適用範囲の限られた2つのパッチが適用されます。これにより、既存のファイルを監査範囲に指定でき、そのファイルはスナップショットの1項目として扱われます。同梱の元のファイルは変更されず、インストールされた ADAPTER.json に元のハッシュと適用後のハッシュの両方が記録されます。ファイルを選んだ場合に、そのディレクトリ全体がスキャンされることはありません。

監査の指示では、ソースの編集、修正、公開、エージェントの設定の変更を禁止しています。エージェント自身のツールの権限も引き続き適用されます。ただし、これらの指示はオペレーティングシステムのサンドボックスではありません。検証では実際に何を確認したかを明記する必要があり、静的な検出結果は、攻撃が再現されたことを意味しません(「静的なレビューのみを行います。報告された確認範囲は、すべての脆弱性の検出を保証するものではありません。動的な攻撃の再現は行いません。」)。

レポート、確認範囲、キャンセル

正式な結果は、アップストリームの scan-manifest.json、findings.json、coverage.json です。アップストリームの最終処理がこれらを検証して確定し、その後で読みやすいレポートを生成します。VelaTerm はこれらのファイルを取り込み、各検出結果の場所とソースの行を厳密に照合します。その際、改行コードの LF と CRLF は同じものとして扱います。構造が有効でソースの行が一致していても、それだけで検出結果が悪用可能であることの証明にはなりません。ソースの証拠が一致しない場合、監査は「失敗」のままとなり、その検出結果は検証済みとして受け入れられません。確定済みのアップストリームのレポートは引き続き参照でき、Markdown のエクスポートでは、レポートを書き換えずに、検証の失敗を先頭に記載します。

確定の前に、VelaTerm は取り込み時と同じ検証機能を使って、下書きのパス、行の範囲、抜粋を確認します。証拠が一致しない場合、スキャンは未確定のままとなり、修正が必要な箇所がエージェントに伝えられます。その後、Codex Security の完了ツールがレポートを生成して確定します。この確認によって、抜粋が書き換えられたり、検出結果が削除されたり、確定済みの結果が変更されたりすることはありません。取り込み時にも同じ確認が繰り返されるため、後からソースが変更されても、無効な証拠が気付かれないまま成功した結果に変わることはありません。

確認範囲は、エージェントが読んだと主張するファイルの数ではなく、アップストリームのレビュー記録と判断に基づいて決まります。未解決の候補、先送りした作業、除外、完了時の警告は、表示されたまま残ります。確認範囲が不完全なまま確定したスキャンは、「一部のみ確認済み」と表示されます。確認範囲が完全であっても、すべての脆弱性が見つかったことは保証されません。

スキャンにまだ作業が残っている状態でエージェントがターンを終えた場合、VelaTerm は既存の検出結果とワーカーの結果を保ったまま、同じセッションとスキャンを続行します。権限リクエストは保留のまま残り(「権限の承認または入力が必要」)、キャンセルやプロバイダーのエラーが起きると、自動的な続行は止まります。アップストリームのレビューの進捗、検出結果、確認範囲のいずれにも変化がないまま3回続けてターンが終わった場合、監査はスキャン未完了のエラーで停止し、チェックポイントは保持されます。

「レポート」タブには、保持された検出結果、ソースの証拠、確認範囲の制限が表示されます。各検出結果には固有の URL があり、攻撃経路、検証の方法と結論(提供されている場合)、修正の助言、報告されたソースの抜粋が表示されます。これらの抜粋を検証済みとして扱う前に、監査の状態を確認してください。「レポート成果物」タブには、アップストリームで生成された完全なレポートとスキャン ID が保存されています。実行中のスキャンでは、アップストリームのパッケージとプラグインのバージョン、実際のフェーズと進捗、警告が表示されます。確定済みのレポートができるまでは、空の評価の代わりに進捗とチェックポイントの情報が表示されます。「アシスタントのセッション」では、関係のないターンによって監査が置き換えられないよう、通常のメッセージ入力欄と巻き戻しが無効になっています。権限リクエストには引き続き応答できます。

「キャンセル」は、アップストリームのスキャンとエージェントを停止します。保存済みのチェックポイントは、アップストリームのワークベンチがそれを確定できる場合に引き続き利用でき、キャンセル済みまたは失敗の状態が維持されます。後から届いた結果によって、キャンセルした監査が再開されることはありません。再起動後、VelaTerm はアップストリームの状態と照合します。完了して確定済みの結果は取り込むことができ、完了していない実行は「中断」となります。その実行で保持されたファイルは、完了した結果と区別できる状態で残ります。

既存の記録で「監査を開始」を選ぶと、保存されたエージェントと選択内容を使って、現在の対象に対する新しいスキャンが作成されます。停止したモデルのターンを再開したり、以前の判定を再利用したりすることはありません。

監査履歴、新規監査のフォーム、レポートの詳細、エージェントのセッションにはそれぞれ固有の URL があるため、直接開いたり、再読み込みしたり、ブラウザの「戻る」「進む」ボタンで移動したりできます。幅の狭い画面では、履歴と詳細は別々のビューとして表示されます。

エクスポートと制限

「レポートをエクスポート」では、Markdown と JSON を選べます。Markdown のエクスポートには、アップストリームのレポートがあればそれが含まれ、ない場合は完了していないスキャンの記録であることが明示されます。JSON のエクスポートには、取り込んだすべてのデータが VelaTerm 独自のメタデータとともに含まれます。アップストリームのスキャンフォルダーには、生成された SARIF などのファイルも保存されています。エクスポートにはソースの抜粋や脆弱性の詳細が含まれることがあるため、共有する際は注意してください。

この画面で実行できるのは、Standard の監査と、作業ツリーの差分の監査です。詳細スキャン、修正、修正の検証、外部の課題管理などのほかの同梱スキルは、アップストリームのリソースとして保持されていますが、個別の操作としては使えません。監査によって修正が適用されたり、検出結果が公開されたり、Issue やプルリクエストが作成されたりすることはありません。

診断

バックエンドは、監査のライフサイクルとアップストリームのフェーズの情報を、アプリケーションのログディレクトリにある runtime-*.log に記録します。VLX_LOG_DIR は共通の出力先を指定します。これが設定されていない場合は、VLX_SECURITY_LOG_DIR で監査イベントの出力先を指定します。VLX_SECURITY_LOG_LEVEL=error を指定すると失敗だけが記録され、off を指定すると記録されなくなります。プロンプトと応答は、サイズと SHA-256 ダイジェストで記録されます。ソースコード全体、認証情報、AI の応答全体がログにコピーされることはなく、プロバイダーからの生のメッセージも保持されません。独自のモデル名は、現在のプロセス内でのみ有効な匿名の識別子に置き換えられます。トークン数は、取得できる場合はセッションの累計の使用量です。エージェントの会話は、通常どおり記録されます。

監査が失敗した場合は、レポートに表示されたプロバイダーの説明を読むか、「アシスタントのセッション」を開いてください。別の監査を始める前に、ログイン、ランタイム、権限、アカウントの上限に関する問題を解決してください。MCP サーバーが接続されていることは、ツールが使える状態であることを示すだけで、モデルがスキャンを完了したことを示すものではありません。

アップストリームの資料:CLI の概要、CLI リファレンス、公開ソース。