CLI をインストールして構成する

CodeMender は、コードベースの深いサイバーセキュリティの脆弱性をスキャン、検証、パッチ適用する自律型の AI コード セキュリティ エージェントです。CodeMender を実行する前に、CLI をダウンロードしてワークスペース オプションを初期化します。

アーキテクチャとセキュリティ モデル

CodeMender は、ローカル ファーストの実行モデルを使用します。

  • ホスト型推論エンジン: エージェント推論、脅威モデリング、オーケストレーション ロジックは、Gemini Enterprise Agent Platform の Google Cloud で安全に実行されます。
  • ローカル実行 CLI: ソースコードがワークステーションまたは CI/CD コンテナから一括で送信されることはありません。ローカル cm CLI ツールは、ローカル サンドボックスでファイルの読み取り、ローカルビルドのチェック、概念実証(PoC)エクスプロイトの検証を実行し、外科手術のようなコード スニペットとツール実行結果のみを Gemini Enterprise Agent Platform の Interactions API 経由でクラウド バックエンドに送信します。

環境のセットアップ

CodeMender の使用を開始するには、 Google Cloud プロジェクトを設定し、CLI をダウンロードしてインストールし、認証情報を構成して、ワークスペースを初期化します。

プロジェクトの設定と IAM 権限

CLI をダウンロードして認証情報を構成する前に、必要な API と権限を使用してターゲット Google Cloud プロジェクトが正しく設定されていることを確認してください。

必要な API

プロジェクトで次の Google Cloud API が有効になっていることを確認します。

  1. Vertex AI API(aiplatform.googleapis.com) - アクティブなセッションのストリーミングと管理を強化します。
  2. Cloud Resource Manager API(cloudresourcemanager.googleapis.com) - ユーザー認証の状態とプロジェクトのメタデータを検証します。

CLI コマンドを実行するには、ユーザーに次の IAM ロールが割り当てられている必要があります。

  • Vertex AI ユーザー(roles/aiplatform.user) - ユーザーがアクティブ セッションを作成、ストリーミング、管理できるようにします。

CodeMender CLI をダウンロードしてインストールする

CodeMender CLI バイナリは Artifact Registry でホストされています。オペレーティング システムのタブを選択して、CLI をダウンロードしてインストールします。

Linux x86_64

Linux(x86_64)用の CodeMender CLI をダウンロードしてインストールするには:

  1. 次のいずれかの方法でパッケージをダウンロードします。
    • gcloud CLI: 次のコマンドを実行します。
      gcloud artifacts generic download \
        --project=cmoc-prod \
        --location=us \
        --repository=codemender-cli-production \
        --package=cm \
        --version=stable \
        --name=cm-linux-amd64.zip \
        --destination=./
    • curl: 次のコマンドを実行します。
      curl -L -o cm-linux-amd64.zip "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm%3Astable%3Acm-linux-amd64.zip:download?alt=media"
  2. CLI をインストールします。
    unzip cm-linux-amd64.zip
    chmod +x cm
    sudo mv cm /usr/local/bin/cm

Linux ARM64

Linux(ARM64)用の CodeMender CLI をダウンロードしてインストールするには:

  1. 次のいずれかの方法でパッケージをダウンロードします。
    • gcloud CLI: 次のコマンドを実行します。
      gcloud artifacts generic download \
        --project=cmoc-prod \
        --location=us \
        --repository=codemender-cli-production \
        --package=cm \
        --version=stable \
        --name=cm-linux-arm64.zip \
        --destination=./
    • curl: 次のコマンドを実行します。
      curl -L -o cm-linux-arm64.zip "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm%3Astable%3Acm-linux-arm64.zip:download?alt=media"
  2. CLI をインストールします。
    unzip cm-linux-arm64.zip
    chmod +x cm
    sudo mv cm /usr/local/bin/cm

macOS Intel

macOS(Intel)用の CodeMender CLI をダウンロードしてインストールするには:

  1. 次のいずれかの方法でパッケージをダウンロードします。
    • gcloud CLI: 次のコマンドを実行します。
      gcloud artifacts generic download \
        --project=cmoc-prod \
        --location=us \
        --repository=codemender-cli-production \
        --package=cm \
        --version=stable \
        --name=cm-darwin-amd64.zip \
        --destination=./
    • curl: 次のコマンドを実行します。
      curl -L -o cm-darwin-amd64.zip "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm%3Astable%3Acm-darwin-amd64.zip:download?alt=media"
  2. CLI をインストールします。
    unzip cm-darwin-amd64.zip
    chmod +x cm
    mv cm /usr/local/bin/cm

macOS Apple シリコン

macOS(Apple シリコン)用の CodeMender CLI をダウンロードしてインストールするには:

  1. 次のいずれかの方法でパッケージをダウンロードします。
    • gcloud CLI: 次のコマンドを実行します。
      gcloud artifacts generic download \
        --project=cmoc-prod \
        --location=us \
        --repository=codemender-cli-production \
        --package=cm \
        --version=stable \
        --name=cm-darwin-arm64.zip \
        --destination=./
    • curl: 次のコマンドを実行します。
      curl -L -o cm-darwin-arm64.zip "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm%3Astable%3Acm-darwin-arm64.zip:download?alt=media"
  2. CLI をインストールします。
    unzip cm-darwin-arm64.zip
    chmod +x cm
    mv cm /usr/local/bin/cm

Windows x86_64

Windows(x86_64)用の CodeMender CLI をダウンロードしてインストールするには:

  1. 次のいずれかの方法でパッケージをダウンロードします。
    • gcloud CLI: PowerShell で次のコマンドを実行します。
      gcloud artifacts generic download `
        --project=cmoc-prod `
        --location=us `
        --repository=codemender-cli-production `
        --package=cm `
        --version=stable `
        --name=cm-windows-amd64.zip `
        --destination=./
    • PowerShell: 次のコマンドを実行します。
      Invoke-WebRequest -Uri "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm%3Astable%3Acm-windows-amd64.zip:download?alt=media" -OutFile cm-windows-amd64.zip
  2. CLI をインストールします。
    Expand-Archive -Path cm-windows-amd64.zip -DestinationPath ./
    # Move cm.exe to a permanent folder and add it to your system PATH (e.g. Environmental Variables)

Windows ARM64

Windows(ARM64)用の CodeMender CLI をダウンロードしてインストールするには:

  1. 次のいずれかの方法でパッケージをダウンロードします。
    • gcloud CLI: PowerShell で次のコマンドを実行します。
      gcloud artifacts generic download `
        --project=cmoc-prod `
        --location=us `
        --repository=codemender-cli-production `
        --package=cm `
        --version=stable `
        --name=cm-windows-arm64.zip `
        --destination=./
    • PowerShell: 次のコマンドを実行します。
      Invoke-WebRequest -Uri "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm%3Astable%3Acm-windows-arm64.zip:download?alt=media" -OutFile cm-windows-arm64.zip
  2. CLI をインストールします。
    Expand-Archive -Path cm-windows-arm64.zip -DestinationPath ./
    # Move cm.exe to a permanent folder and add it to your system PATH (e.g. Environmental Variables)

Google Cloud 認証情報を構成する

CodeMender CLI は Interactions API を介してクラウドホスト型の推論エンジンとやり取りするため、環境で Google Cloud アプリケーションのデフォルト認証情報(ADC)を構成する必要があります。

認証するには、次のコマンドを実行し、ログイン プロンプトに従います。

gcloud auth application-default login

ワークスペースを初期化する

認証が完了したら、次のステップはローカル環境で CodeMender を初期化することです。CodeMender を初期化すると、状態追跡ファイルが作成され、クラウドホスト型の推論エンジンへの接続設定が確立されて、ローカル ワークスペースが準備されます。

コードベースのルート ディレクトリから cm init を実行して、ローカル状態追跡ファイルを作成し、ベースライン構成を確立します。

cm init

--verify フラグを使用して、クラウドホスト型の推論エンジンへの接続をテストし、ワークスペースの設定を確認します。

cm init --verify

構成パラメータ(config.yaml)

config.yaml の主な目的は、CodeMender のエージェントの動作をローカル システムのセキュリティ、環境の制約、パフォーマンスのニーズに合わせることです。

ホストされている AI エージェントは、ローカル デーモン クライアントを使用してローカル コマンド(コードのビルド、テストの実行、ファイルの編集など)を実行するため、この構成ファイルは、エージェントが実行できることと実行できないことを定義する境界として機能します。

用途

  • 場所: デフォルトでは、CLI は ~/.codemender/config.yaml からこのファイルを読み取ります。ワークスペースと構成ディレクトリは、CM_HOME 環境変数(/path/to/custom/dir/config.yaml を読み取る CM_HOME=/path/to/custom/dir など)を設定することでオーバーライドできます。
  • 実行: cm find、cm verify、cm fix などのコマンドを実行すると、ローカル クライアントはこのファイルを読み取って、安全パラメータを設定し、システム バイパスを適用し、無視するファイルまたはディレクトリを指定します。

コアのデフォルト設定

コアのデフォルト パラメータの意味は次のとおりです。

  • human_confirmation: true(または require_confirmation: true)

    • 意味: デフォルトでは、CodeMender は、ターミナルで [Y/n] 確認を明示的に求めることなく、ディスク上のファイルを変更したり、シェル コマンドを実行したりすることはできません。
    • これがデフォルトである理由: CodeMender は、投機的なパッチを生成したり、エクスプロイト スクリプトを実行して脆弱性を検証したりする場合があります。手動確認を強制することで、ローカル環境での誤ったシステム変更や不正なコード実行を防ぐことができます。
    • バイパス: 非インタラクティブな CI/CD パイプラインの場合、これは false に設定できます。
  • confirm_writes: false

    • 意味: ファイル変更のインタラクティブなプロンプトを無効にします。これにより、CodeMender エージェントは、ユーザーの承認を待たずに、セキュリティ パッチを書き込み、ソースファイルをローカル ディスクに直接変更できます。
    • これがデフォルトである理由: デフォルトでは、CodeMender はこの安全ガードレールを true に設定して、「Human-in-the-Loop」ワークフローを適用します。CodeMender はローカルのコードベースで動作するため、手動での確認(Write? [Y/n] など)を必要とすることで、エージェントがソースファイルに推測的、誤った、または破壊的な変更を加えることを防ぎます。この設定を false に切り替えるのは、分離された使い捨てのサンドボックスまたは自動化されたヘッドレスの CI/CD パイプラインで実行する場合のみにしてください。
  • include: [".py", ".java", ".go", ".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".c", ".cc", ".cpp", ".cxx", ".h", ".hpp", ".cs", ".rs", ".kt", ".kts", ".rb", ".php"]

    • 意味: ワークスペースをスキャンするときに CodeMender が取り込んで分析することを承認するファイル拡張子の明示的なリストを定義します。CodeMender は、このリストに指定されていない拡張子を持つリポジトリ内のファイルを自動的にスキップします。
    • これがデフォルトである理由: このリストは、スキャン効率を最大化し、エージェントが関連性のないテキスト ファイル、ビルド アーティファクト、バイナリ ファイルに時間とトークンを無駄に費やさないように、主要なプログラミング言語をデフォルトとしています。ただし、最新のアプリケーションでは、デプロイ構成や自動化ツールに脆弱性が埋め込まれていることが多いため、config.yaml でこのデフォルト リストを手動で拡張して、構成ファイル、スクリプト形式、IaC ファイル(シェル スクリプト、XML、YAML、プロパティ、JSON ファイルなど)を含めることができます。これにより、CodeMender がこれらのファイルを無視しないようにできます。
  • exclude_dirs: ["node_modules", "vendor", "dist", "bin", "target", "obj", "build", ".gradle"]

    • 意味: CodeMender は、ワークスペースのスキャンとコード分析中にこれらのディレクトリを完全にスキップします。
    • これがデフォルトである理由: 依存関係やビルド フォルダが大きいと、レイテンシとトークン ペナルティが大幅に発生します。デフォルトで除外することで、高いパフォーマンスと迅速なレスポンス時間を確保できます。config.yaml でこのリストをカスタマイズして、プロジェクト構造に応じて特定のディレクトリを含めたり除外したりできます。
  • project_paths: []

    • 意味: ツール実行中に CodeMender がアクセス(読み取り/書き込み)できるディレクトリ パスのリスト。
    • これがデフォルトである理由: デフォルトでは空で、エージェントがスキャン対象ディレクトリに制限されます。ビルドまたはテストプロセスでスキャン ターゲット ディレクトリ外のファイルにアクセスする必要がある場合は、ここにパスを追加する必要があります。
    • アーティファクト ディレクトリ: エージェントは、セッションごとのアーティファクト ディレクトリ(~/.codemender/artifacts/<session_id>/、または $CM_HOME の同等のディレクトリ)に書き込むこともできます。
    • 一時ファイル: サンドボックスが有効になっている場合、/tmp を project_paths に追加しても、ホストの /tmp ディレクトリは常にブロックされます。TMPDIR を尊重するツールは、代わりにアーティファクト ディレクトリ内の一時ディレクトリを使用します。
  • sandbox:

    • 意味: プロセスレベルのサンドボックス環境の構成ブロック。
    • サブパラメータ:
      • enabled: true: (ブール値)サンドボックスを有効または無効にします。これを true(デフォルト)に設定すると、エージェントはローカル サンドボックス内でツールを実行します。false に設定すると、エージェントは分離なしでホストシステムでツールを直接実行します。
      • mounts:(オブジェクト)
        • target_dir: ".":(文字列)サンドボックス内のアクティブ ワークスペースとしてマウントするディレクトリ。CLI は、ワークスペース ルートに対して相対パスを解決します。
      • network:(オブジェクト)
        • profile: "permissive-closed":(文字列)サンドボックス内のアウトバウンド ネットワーク アクセス プロファイル。特定のドメインや URL パターンの詳細な許可リストは、まだサポートされていません。サポートされているプロファイル:
          • permissive-closed(デフォルト): ネットワークを完全に分離します。サンドボックスはすべての送信接続をブロックします。
          • permissive-open: アウトバウンド ネットワークへの完全アクセスを許可します。
  • security:

    • 意味: セキュリティ ポリシーの構成ブロック。
    • サブパラメータ:
      • protected_files: []:(文字列のリスト)変更から保護するために、サンドボックス内で読み取り専用でマウントするホストシステムのファイルまたはディレクトリ(["~/.ssh/*"] など)。パスの展開(~)とワイルドカード(*)をサポートします。
  • model: "gemini-3.8-flash"

    • 意味: バックエンドの推論ループを駆動するデフォルトのインテリジェンス エンジン。
    • これがデフォルトである理由: gemini-3.8-flash は、パッチの提案に必要な速度、費用、分析的推論の最適なバランスを提供します。(ユーザーは必要に応じて、この設定を gemini-3.1-pro に変更して、より深く複雑な推論を行うことができます)。
  • vcs: { type: "git" }

    • 意味: vcs キーを使用して、プロジェクトで使用するバージョン管理システムのタイプを定義します。この設定を行わない場合、ツールは Git リポジトリまたは Mercurial リポジトリを自動的に特定しようとします。vcs を none に設定すると、CLI は警告を出力しますが、VCS 機能なしで実行を続行します。CodeMender は、この設定を使用して投機的なセキュリティ修正を管理し、コードベースの変更を追跡し、ローカル リポジトリと統合します。
    • これがデフォルトである理由: CodeMender は、Git、Mercurial、またはカスタム VCS 構成をサポートしています。Git は、バージョン管理の追跡に関する業界標準であり、差分のシームレスな統合とロールバックの安全性を確保するため、デフォルトになっています。
  • build: { command: "make build && make test" }

    • 意味: CodeMender がプロジェクトのコンパイルとビルド、単体テストと回帰テストの実行に使用する正確なシェル コマンドを定義します。
    • これがデフォルトである理由: ビルドとテストのコマンドの設定は、検証ワークフローにとって非常に重要です。これにより、CodeMender は分離されたサンドボックス環境でプロジェクトをコンパイルし、既存のテストスイートを実行して、生成されたセキュリティ パッチが既存のアプリケーション ロジックを壊すことなく脆弱性を軽減することを証明できます。

実行サンドボックス

ワークステーションを意図しないファイルの変更や予期しないツールの副作用から保護するため、CodeMender CLI はデフォルトで OS レベルのサンドボックス内で実行されます。サンドボックスは、構成で永続的に無効にするか、CLI フラグを使用してコマンドごとにバイパスできます。

このサンドボックスはワークステーションに最初の防御レイヤを提供しますが、完全に分離された仮想マシン(VM)でエージェントを実行するよりもセキュリティ保護が弱くなります。

  • Linux: カーネル名前空間(CLONE_NEWNS、CLONE_NEWUSER など)と seccomp フィルタを使用して、マウント ポイントを分離し、システムコールを制限します。
  • macOS: 組み込みの sandbox-exec(Seatbelt)メカニズムを使用します。
  • Windows(試験運用版): AppContainer 分離とアクセス制御リスト(ACL)を使用します。Windows でのサンドボックス化は試験運用版であり、管理者権限が必要になる場合や、一部のシステム構成と互換性がない場合があります。

サンドボックスの動作

サンドボックスがアクティブな場合:

  1. ファイル システムの分離: エージェントは、許可されたディレクトリ内のファイルのみを読み取り、書き込むことができます。サンドボックスは、これらのディレクトリ外の書き込みをホストシステムに影響を与えることなく、一時的なメモリ内ファイル システム(tmpfs)にリダイレクトします。
  2. ネットワーク分離: サンドボックスは、デフォルトでアウトバウンド ネットワーク アクセスをブロックします。これにより、エージェント(またはエージェントが呼び出すビルドツール)が予期しない外部接続を行ったり、ワークスペース外にデータを送信したりすることを防ぐことができます。

ビルドと検証中のネットワーク アクセス

サンドボックスではデフォルトでネットワーク分離が有効になっているため(sandbox.network.profile のデフォルトは permissive-closed)、エージェントはツールの実行中にインターネットにアクセスできません。

これにより、ビルドまたは検証ステップで外部依存関係の取得が必要なプロジェクト(build.command の一部として npm install、pip install、go get を実行するなど)に制限が導入されます。ビルドプロセスで外部ウェブサービスにアクセスしようとすると、失敗します。

ネットワークの依存関係の処理

プロジェクトでビルドまたはテストにネットワーク アクセスが必要な場合は、次のオプションがあります。

  • 依存関係をプリフェッチする: cm コマンドを実行する前に、必要な依存関係をすべてホストシステムにインストールします。これにより、ビルドコマンドでネットワーク アクセスが不要になります。
  • サンドボックスでネットワーク アクセスを有効にする: config.yaml でネットワーク プロファイルを変更して、アウトバウンド接続を許可します。

    sandbox:
      network:
        profile: "permissive-open"
    
  • サンドボックスをバイパスする: --unrestricted フラグを指定してコマンドを実行すると、その実行についてサンドボックスとファイル システムの境界が完全に無効になります。

サンドボックスの構成

次のオプションを使用して、サンドボックスを構成して制御できます。

  • 永続構成(config.yaml): config.yaml ファイルに sandbox、execution、security ブロックを追加することで、サンドボックスの動作、ファイル システムのマウント、ネットワーク アクセス、セキュリティ ポリシーをカスタマイズできます。詳細については、構成パラメータをご覧ください。
  • CLI(--sandbox)を使用してサンドボックスを制御する: --sandbox=true または --sandbox=false を cm find、cm verify、または cm fix に渡すことで、単一の実行に対してサンドボックスを明示的に有効または無効にできます。
  • CLI を使用して分離をバイパスする(--unrestricted): --unrestricted フラグを渡すことで、1 回の実行ですべてのサンドボックス保護を一時的にバイパスできます。これにより、ファイル システム パスの境界が無効になり(エージェントがホスト上の任意のパスにアクセスできるようになります)、OS レベルのコンテナ分離(ネットワーク分離を含む)が完全に無効になります。

分離レベルの選択

セキュリティ要件と開発環境に応じて、CodeMender CLI の実行に適した分離レベルを選択できます。

メソッド 説明 利点 欠点
組み込みのサンドボックス(OS レベル) デフォルトで有効になっています。config.yaml ファイルで無効にするか、CLI フラグを使用してバイパスできます。組み込みの OS 機能(名前空間/seccomp、sandbox-exec、AppContainer(試験運用版))を使用して実行を分離します。 軽量。起動時のオーバーヘッドがゼロ。きめ細かい制御でローカル ワークスペース ツールに直接アクセスできます。日常的なローカル開発におすすめします。 セキュリティは OS カーネル機能に依存します。完全な VM よりも分離が少なく、Windows のサポートは試験運用版であり、管理者権限が必要になるか、一部の構成と互換性がない可能性があります。
コンテナ コンテナ(Docker など)でエージェントを実行する。 優れた隔離性、標準化された環境。 コンテナ ランタイムが必要。負荷が高い可能性がある。ローカルマシンのツールとの直接的なやり取りができない。
フル VM 専用の VM でエージェントを実行する。 最大限のセキュリティ、完全な分離。 リソースのオーバーヘッドが大きい、起動が遅い、ローカルマシンのツールとの直接的なやり取りができない。

テレメトリー

プロダクトの健全性をモニタリングして改善するために、CLI を介して匿名のテレメトリー データを収集します。収集されたすべてのデータ(基本的な使用状況の指標やパフォーマンス診断など)は完全に匿名化されます。テレメトリーがソースコード、ファイルの内容、検出結果、パッチ、ユーザー ID を収集または送信することはありません。

デフォルトでは、テレメトリーは有効になっています。テレメトリーを無効にする場合は、CM_TELEMETRY_OPT_OUT 環境変数を 1 または true に設定します。

CLI の更新

CodeMender には、CLI の最新バージョンを実行するための組み込みの更新メカニズムがあります。

自動更新チェック

デフォルトでは、CodeMender CLI はコマンドの実行時にバックグラウンドで更新を自動的に確認します。

  • スロットリング: オーバーヘッドを最小限に抑えるため、自動チェックは 24 時間に 1 回のみ実行されます。
  • インタラクティブ ターミナル(TTY)が必要: CLI は、インタラクティブ ターミナルで実行されている場合にのみ更新を確認し、プロンプトを表示します。非対話型環境(CI/CD パイプラインやスクリプトなど)では、チェックはスキップされ、警告が stderr に 1 日に 1 回まで記録されます。
  • プロンプト: 新しいバージョンが利用可能な場合は、stderr にプロンプトが表示されます。 none 🆕 A new CodeMender release is available: 1.1.0 Update now? (y/N): 「はい」(y または yes)を選択すると、CodeMender はアップデートをダウンロードし、バイナリを置き換えて終了します。新しいバージョンで実行するには、コマンドを再度実行する必要があります。[いいえ] を選択すると、更新はスキップされ、元のコマンドが実行されます。
  • オフライン許容度: オフラインの場合やリリース リポジトリにアクセスできない場合、チェックはエラーを返さずに失敗し、CodeMender はコマンドの実行を続行します。
  • バイパス: --yes フラグまたは -y フラグを任意のコマンドに渡すことで、自動更新チェックをバイパスできます。

手動更新(cm update)

update コマンドを実行すると、CodeMender に更新の確認と適用を直ちに強制できます。

cm update

cm update コマンド:

  • 24 時間のスロットリングを無視します。
  • プロンプトを表示せずに、アップデートを直ちにダウンロードして適用します(非インタラクティブ)。
  • インタラクティブ ターミナルは必要ありません(スクリプトと構成管理に安全です)。

CLI が権限昇格が必要なシステム ディレクトリにインストールされている場合は、sudo を使用して更新を実行します。

sudo cm update