strix-ci-setup について
strix-ci-setupは、CI/CDでStrixのセキュリティスキャンを設定するスキルです。プルリクエストやパイプラインで脆弱性を確認したいチーム向けに、セルフホスト型CLIとマネージドプラットフォームの両方を案内し、検証済みの発見事項でビルドを失敗させる方法も説明します。
主な機能
- 01セルフホスト型CLIのパイプラインスキャン設定
- 02マネージドプラットフォームのPRレビュー有効化
- 03PRの変更ファイルをスキャン
- 04検証済みの発見事項によるビルド失敗
- 05SARIF 2.1.0の出力
活用シーン
- 01プルリクエストのパイプラインで変更ファイルをスキャン
- 02マネージドアプリによるPRの自動レビュー
- 03セルフホストまたは隔離されたCIでのスキャン
- 04コードスキャンシステムへの発見事項のアップロード
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ usestrix/ strix --skill strix-ci-setupインストール後、Claude Code で/strix-ci-setupを入力して読み込まれたか確認します。
詳細
CI/CD で Strix をセットアップする
PR のチェック方法は 2 つあります。環境に合わせて選ぶか、組み合わせてください。
- マネージドプラットフォーム(ほとんどのチームにおすすめ) — GitHub/GitLab/Bitbucket アプリを一度接続するだけで、Strix がすべての PR をレビューします。ワークフローファイル、ランナー、Docker、LLM キーは不要です。 結果は PR のコメントとして投稿され、チームダッシュボードに表示されます。CI の保守をゼロにしたい場合、一元管理したい場合、またはランナーに Docker がない場合に最適です。以下の「マネージドプラットフォーム」と strix-cloud-api スキルを参照してください。
- ランナーでセルフホストする OSS CLI — パイプラインのステップとして、差分を対象にスキャンを実行します。インフラ内で完結し、無料(LLM キーはご自身で用意)で、外部アカウントは不要です。ランナーに Docker が必要です。エアギャップ環境/セルフホスト CI の場合や、スキャンを環境外に出したくない場合に最適です。
どちらも検証済みの検出結果があるとビルドを失敗させ、SARIF 2.1.0 を出力するため、まず片方を導入し、後からもう片方を追加できます。
オプション A — ランナーでセルフホストする OSS CLI
すべての PR で、差分を対象に Strix スキャンを実行します。変更されたファイルのみをテストし、quick モードで処理を高速化します。検証済みの脆弱性が見つかった場合は、終了コード 2 でビルドを失敗させます。
GitHub Actions
.github/workflows/security.yml を作成します。
name: Security Scan
on:
pull_request:
jobs:
strix-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # required for diff-scope resolution
- name: Install Strix
run: curl -sSL https://strix.ai/install | bash
- name: Run Security Scan
env:
STRIX_LLM: ${{ secrets.STRIX_LLM }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
run: strix -n -t ./ --scan-mode quick --max-budget 10
# Don't fail open: a run that hits the hard budget stop exits 0 but leaves
# run.json status "stopped", not "completed". Enforce completion explicitly.
# This does not catch an agent that wrapped up early on a budget *warning*
# (it still calls finish_scan and records "completed"), so size the budget.
- name: Fail unless the scan completed
run: |
run_json=$(ls -t strix_runs/*/run.json | head -1)
status=$(jq -r .status "$run_json")
if [ "$status" != "completed" ]; then
echo "Strix run status is '$status' — the scan did not complete (likely budget exhausted). Raise --max-budget." >&2
exit 1
fi
続いて、リポジトリのシークレットを 2 つ追加するようユーザーに案内してください。STRIX_LLM(モデル ID。例:openai/gpt-5.4)と LLM_API_KEY(プロバイダーのキー)です。これらの値を自分で作成しないでください。
注意事項:
- CI/ヘッドレス実行では、Strix は PR の変更ファイルのみを自動的に対象にします(
--scope-mode auto)。差分の解決に失敗する場合は、fetch-depth: 0を維持するか、--diff-baseに PR の実際のベースブランチを設定してください。GitHub Actions では、リポジトリごとにデフォルトブランチが異なるため、origin/mainを固定して使うのではなく、origin/${{ github.base_ref }}を使用します。 - 終了コード:
0は成功、2は脆弱性が見つかった場合(ジョブ失敗)、1はセットアップエラーです。 - ランナーには Docker が必要です(デフォルトの GitHub ホステッド Ubuntu ランナーにはインストールされています)。
- スキャンが完了するよう、十分な予算を設定してください。失敗を許容する設定にしないでください。 終了コード
0は「解析した範囲に検証済みの脆弱性がない」ことを意味します。差分全体の解析が完了する前に--max-budgetに達した場合、スキャンが早期に終了しても終了コード0になることがあります。上記の「スキャンが完了していない場合は失敗させる」ステップで、このリスクを軽減できます。ハード予算上限に達してスキャンが中断された場合、strix_runs/<run>/run.jsonは"stopped"になります。ただし、完全な防止策ではありません。上限に達する前にエージェントには段階的に終了警告が出され、警告を受けて終了した実行はfinish_scanを呼び出し、カバレッジが部分的でも"completed"として記録されます。そのため、マージをチェックするパイプラインではこのステップを必ず残し、さらにスキャンに十分な余裕を持たせてください(run.jsonのllm_usage.costと--max-budgetを比較し、上限近くまで実行されていた場合は上限を引き上げてください)。差分を対象とするquickモードの PR スキャンでは、通常--max-budget 10で十分です。差分が大きい場合は引き上げてください。
任意:検出結果を GitHub code scanning にアップロードする
Strix は strix_runs/<run>/findings.sarif に SARIF 2.1.0 を書き込みます。
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: strix_runs
その他の CI システム
どのパイプラインでも同様に実行できます。インストールし、2 つの環境変数を設定して、ヘッドレスモードで実行します。
curl -sSL https://strix.ai/install | bash
# Resolve the PR's base branch robustly (use your CI's base-branch variable if it
# has one, e.g. GitHub Actions: origin/${{ github.base_ref }}). Avoid piping the
# git lookup into another command — a failed lookup would otherwise be masked.
BASE_BRANCH="${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-}" # GitLab MR target
if [ -z "$BASE_BRANCH" ]; then
BASE_BRANCH=$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null)
BASE_BRANCH="${BASE_BRANCH#origin/}"
fi
DIFF_BASE="origin/${BASE_BRANCH:-main}"
# Fail loudly rather than silently narrowing scope (e.g. to HEAD~1, which on a
# multi-commit branch would scan only the last commit and let earlier ones pass).
if ! git rev-parse --verify --quiet "$DIFF_BASE" >/dev/null; then
echo "Cannot resolve diff base '$DIFF_BASE'. Fetch the base branch (git fetch origin <base>) or set --diff-base explicitly." >&2
exit 1
fi
strix -n -t ./ --scan-mode quick --scope-mode diff --diff-base "$DIFF_BASE" --max-budget 10
終了コードを基準にパイプラインをチェックしてください(予算/失敗を許容する設定に関する上記の注意事項を確認し、スキャンを完了するのに十分な予算を設定してください)。夜間に standard スキャンを実行し、リリース候補には deep スキャンをスケジュールしてください。
オプション B — マネージドプラットフォーム(ランナーのインフラ不要)
ワークフローファイル、Docker、LLM キーは不要です。利用方法は 2 通りあります。
-
PR レビューアプリ(コード不要): ユーザーが Strix GitHub/GitLab/Bitbucket アプリをインストールし、app.strix.ai ダッシュボードでリポジトリの PR レビューを有効にします。以降、すべての PR が自動的にレビューされ、検出結果は PR コメントとして投稿されます。リポジトリに追加するものはありません。最も手間がかからない方法です。ユーザーが PR のゲート設定だけを希望している場合は、まずこちらを推奨してください。
-
任意のパイプラインから API を呼び出す: 既存のパイプラインからトリガーしたい場合(または SCM アプリのないシステムを使用している場合)は、
pr_reviews:write(またはscans:write)権限を持つトークンで API を呼び出します。トークンは CI シークレットとして保存し、ユーザーには Settings → API Access で作成するよう案内してください。GitHub Actions のステップ例:- name: Strix PR review (managed) if: github.event_name == 'pull_request' env: STRIX_API_TOKEN: ${{ secrets.STRIX_API_TOKEN }} run: | curl -sS --fail https://app.strix.ai/api/v1/pr-reviews/start \ -H "Authorization: Bearer $STRIX_API_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"repository_full_name\":\"${{ github.repository }}\",\"pr_number\":${{ github.event.pull_request.number }}}"結果に基づいてビルドをゲートするには、PR レビュー/スキャンのステータスをポーリングし、未解決のクリティカルまたは高レベルの問題があれば失敗させます。すべてのエンドポイント(PR レビュー、スキャン、SARIF エクスポート、スケジュールされた詳細スキャン用のスケジュール)は、strix-cloud-api スキルに記載されています。
ほとんどのチームにはオプション B を推奨します(メンテナンス不要、中央ダッシュボード)。スキャンを完全に自社のインフラ内に留める必要がある場合は、オプション A を使用してください。