Skip to main content

Command Palette

Search for a command to run...

Cloud Agents

Bugbot

Bugbot はプルリクエストをレビューし、バグ、セキュリティ上の問題、コード品質の問題を検出します。

自動化で Bugbot を設定します。

仕組み

Bugbot は PR の差分を分析し、説明と修正の提案を含むコメントを残します。PR が更新されるたびに自動で実行され、手動でトリガーすることもできます。

  • PR の更新ごとに自動確認を実行
  • 任意の PR に cursor review または bugbot run とコメントして手動でトリガー
  • 既存の PR コメントをコンテキストとして使用: 接続されている PR コメント (トップレベルとインライン) を読み取り、重複する提案を避け、過去のフィードバックを活用
  • Fix in Cursor リンクから問題を Cursor で直接開く
  • Fix in Web リンクから問題を cursor.com/agents で直接開く

セットアップ

Cursor ダッシュボードでリポジトリを接続し、Bugbot の利用を開始します。

接続後、自動化の Bugbotを開き、特定のリポジトリで有効にします。

CI チェックのステータス

Bugbot はレビューの実行ごとにステータスを公開します。GitHub では Cursor Bugbot という名前のチェックとして、Bitbucket ではキーが cursor-bugbot のビルドステータスとして、Azure DevOps ではコンテキストが cursor-bugbot/review のステータスとして表示されます。ステータスには次の結論が使用されます。

  • success: Bugbot が問題を見つけず、以前の実行による未解決の Bugbot コメントもない。
  • neutral: Bugbot が問題を見つけた、より新しいコミットによって実行がキャンセルされた、または Bugbot で内部エラーが発生した。Bugbot が検出結果を報告した場合のデフォルトの結論です。
  • failure: Bugbot が問題を見つけ、未解決の問題がある場合にチェックを失敗させるよう設定されている。

ブランチ保護を使用している場合は、マージ前に Bugbot が実行されるよう、Bugbot のチェックまたはビルドステータスを必須にしてください。検出結果はデフォルトで neutral となるため、ステータスを必須にするだけでは、検出結果があってもマージはブロックされません。組織で「未解決の問題がある場合に失敗させる」挙動を利用できる場合は、有効にすると、未解決の検出結果で失敗ステータスが生成されます。Bugbot は skipped の結論を出力しません。

Bugbot Autofix が有効な場合、GitHub では別途 Cursor Bugbot Autofix チェックが表示されることもあります。このチェックでは success または neutral のみが使用されます。

設定

利用分析

自動化の Bugbot を開くと、確認のアクティビティと結果を確認できます。

API

Enterprise チームは Bugbot API を使用してレビューをトリガーし、レビューごとの利用分析を取得できます。Cursor Dashboard → API キーで API キーを作成し、ベーシック認証で認証してください。

レビューをトリガーする

POST/bugbot/review

プルリクエストまたはマージリクエストに対する Bugbot レビューをキューに追加します。レビューがキューに追加されるとリクエストは返され、レビューは非同期で実行されます。

admin:* スコープを持つ API キーが必要です。このエンドポイントはチームあたり 1 分間に 30 リクエストまでに制限されています。

dryRuntrue に設定すると、レビューコメント、インラインコメント、チェック、その他の SCM 側の副作用を投稿せずに、完全な分析パイプラインを実行します。dry-run レビューでも検出結果は保存され、通常のレビューと同様に課金されます。GET /analytics/team/bugbot-reviews で取得できます。dry-run リクエストには、チームあたり 1 分間に 10 リクエストという追加の制限があります。

リクエスト本文

prUrl string (必須)

GitHub プルリクエストまたは GitLab マージリクエストの完全な URL。

dryRun boolean (任意)

true の場合、SCM プロバイダーには何も投稿せずに分析を実行し、検出結果を保存します。デフォルト: false
curl --request POST \  --url https://api.cursor.com/bugbot/review \  -u YOUR_API_KEY: \  --header 'Content-Type: application/json' \  --data '{    "prUrl": "https://github.com/your-org/your-repo/pull/42"  }'
curl --request POST \  --url https://api.cursor.com/bugbot/review \  -u YOUR_API_KEY: \  --header 'Content-Type: application/json' \  --data '{    "prUrl": "https://github.com/your-org/your-repo/pull/42",    "dryRun": true  }'

レスポンス:

{  "outcome": "success",  "message": "Bugbot review queued",  "request_id": "6e0d261c-86a2-4383-89f0-9162c1c10662",  "dry_run": false}

dry-run のレスポンスでは、"message": "Bugbot dry-run review queued""dry_run": true が返されます。

利用分析エンドポイントで完了したレビューと照合できるよう、request_id を保存してください。

Bugbot がプルリクエストをレビューできない場合、エンドポイントは理由とともに 400 Bad Request を返します。

{  "outcome": "error",  "message": "Bugbot is disabled for this repository"}

レビュー分析

GET/analytics/team/bugbot-reviews

完了したBugbotレビューごとに、レビュー対象のコミット、検出結果数、請求コスト、検出結果ごとの解決データを含む項目を1件返します。

投稿済みレビューとdry-runレビューの両方を含みます。投稿済みの検出結果はcomment_idresolution_statusで識別されます。SCMには何も投稿されないため、dry-runの検出結果では代わりにtitledescriptionlocationsが返されます。

read:*スコープを持つAPIキーが必要です。

クエリパラメータ

startDate string (任意)

分析対象期間の開始日時。デフォルトは7日前です。Date Formatsを参照してください。

endDate string (任意)

分析対象期間の終了日時。デフォルトはnowです。Date Formatsを参照してください。

repo string (任意)

host/owner/repo形式のリポジトリフィルター。プロトコルと.git接尾辞は任意です。

prNumber number (任意)

プルリクエストまたはマージリクエストの番号。

page number (任意)

ページネーションのページ番号。デフォルト: 1

pageSize number (任意)

ページあたりのレビュー数。デフォルト: 100、最大: 250

dryRun boolean (任意)

dry-run (true) または投稿済み (false) のレビューのみに絞り込みます。
curl --get https://api.cursor.com/analytics/team/bugbot-reviews \  -u YOUR_API_KEY: \  --data-urlencode 'startDate=2026-06-01' \  --data-urlencode 'endDate=2026-06-29' \  --data-urlencode 'repo=github.com/your-org/your-repo' \  --data-urlencode 'prNumber=42' \  --data-urlencode 'page=1' \  --data-urlencode 'pageSize=100'
curl --get https://api.cursor.com/analytics/team/bugbot-reviews \  -u YOUR_API_KEY: \  --data-urlencode 'dryRun=true' \  --data-urlencode 'repo=github.com/your-org/your-repo' \  --data-urlencode 'prNumber=42'

レスポンス (投稿済みのレビュー) :

{  "data": [    {      "request_id": "6e0d261c-86a2-4383-89f0-9162c1c10662",      "timestamp": "2026-06-29T19:42:18.000Z",      "repo": "github.com/your-org/your-repo",      "repo_node_id": "R_kgDOABCDEF",      "pr_number": 42,      "commit_sha": "9f3c2a1b7d8e4f5061728394a5b6c7d8e9f0a1b2",      "bugs_found": 2,      "cost_cents": 42.5,      "dry_run": false,      "publication_status": "posted",      "bugs": [        {          "comment_id": "2147483999",          "resolution_status": "resolved",          "severity": "high"        },        {          "comment_id": "2147484000",          "resolution_status": "unresolved",          "severity": "medium"        }      ]    }  ],  "pagination": {    "page": 1,    "pageSize": 100,    "totalItems": 1,    "totalPages": 1,    "hasNextPage": false,    "hasPreviousPage": false  },  "params": {    "metric": "bugbot-reviews",    "teamId": 12345,    "startDate": "2026-06-01",    "endDate": "2026-06-29",    "repo": "github.com/your-org/your-repo",    "prNumber": 42,    "page": 1,    "pageSize": 100  }}

レスポンス (ドライランレビュー) :

{  "data": [    {      "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",      "timestamp": "2026-06-29T20:15:03.000Z",      "repo": "github.com/your-org/your-repo",      "repo_node_id": "R_kgDOABCDEF",      "pr_number": 42,      "commit_sha": "9f3c2a1b7d8e4f5061728394a5b6c7d8e9f0a1b2",      "bugs_found": 1,      "cost_cents": null,      "dry_run": true,      "publication_status": "dry_run",      "bugs": [        {          "comment_id": null,          "resolution_status": null,          "severity": "medium",          "title": "Unbounded retry loop",          "description": "retry() recurses without a ceiling.",          "locations": [            { "file": "src/net.ts", "start_line": 5, "end_line": 9 }          ]        }      ]    }  ],  "pagination": {    "page": 1,    "pageSize": 100,    "totalItems": 1,    "totalPages": 1,    "hasNextPage": false,    "hasPreviousPage": false  },  "params": {    "metric": "bugbot-reviews",    "teamId": 12345,    "startDate": "2026-06-01",    "endDate": "2026-06-29",    "repo": "github.com/your-org/your-repo",    "prNumber": 42,    "dryRun": true,    "page": 1,    "pageSize": 100  }}

repo_node_idpr_numbercommit_shacost_centsbugs[].comment_idbugs[].resolution_statusbugs[].severityは、利用不可の場合nullになることがあります。レビューが個別に請求されない場合、cost_centsnullです。ドライランのレビューでは、bugs[].titlebugs[].descriptionbugs[].locationsに検出内容が含まれます。ドライランの検出結果はSCMに何も投稿されないため、comment_id: nullおよびresolution_status: nullになります。

レビューを開始して取得する

  1. プルリクエストの URL を指定して POST /bugbot/review を呼び出します。SCM に投稿せずに分析するには、"dryRun": true を指定します。
  2. 返された request_id を保存します。
  3. repoprNumber でフィルタリングして、GET /analytics/team/bugbot-reviews をポーリングします。ドライランでレビューを開始した場合は、dryRun=true を使用します。
  4. request_id が開始時のレスポンスと一致する項目を見つけます。

レビューがキューに追加されてから、利用分析で確認できるようになるまで少し時間がかかる場合があります。

増分レビュー

デフォルトでは、Bugbot はプッシュのたびにプルリクエストの差分全体を確認します。Bugbot AutomationsIncremental Review をオンにすると、前回の Bugbot による確認以降の変更のみを確認します。

推論レベル

推論レベルでは、Bugbot が確認中にどれだけ時間をかけて推論するかを設定します。推論レベルを高くするとより多くのバグを見つけられる可能性がありますが、各確認に時間がかかり、利用量も増える場合があります。

次の推論レベルから選択できます。

  • デフォルト: 効率と速度を優先します。確認のコストは抑えられますが、Bugbot が見つけられるバグは少なくなる可能性があります。
  • : 推論により多くの時間をかけます。確認のコストが高くなり、時間もかかりますが、Bugbot がより多くのバグを見つけられる可能性があります。
  • カスタム: Bugbot により時間をかけた詳細な確認を行わせる条件を指定できます。Cursor は、指示に基づいて推論レベルを動的に設定します。

ルール

チーム ルール、リポジトリ ルール、プロジェクトの .cursor/BUGBOT.md ファイルを使って確認をガイドします。

チーム ルール

チーム管理者は、Bugbot Automations で、チーム内のすべてのリポジトリに適用されるルールを作成できます。これらのルールは有効になっているすべてのリポジトリで使用できるため、組織全体の標準を簡単に徹底できます。

ルールの上限

各ルールは、確認に含まれる場合、30,000文字で切り詰められます。Bugbotが確認に含めるルールの合計文字数は、100,000文字が上限です。この合計上限を超えると、一部のルールが省略されることがあります。必須のチーム ルールは、必須ではないルールより優先されます。

確認で使用されたルールを確認する

プルリクエストに bugbot run verbose=true または cursor review verbose=true とコメントします。Bugbot は、その実行で使用されたすべてのルールを表形式で投稿し、切り詰められたルールや省略されたルールにフラグを付けます。

リポジトリ ルール

プロジェクトルール

レビュー用にプロジェクト固有のコンテキストを提供するには、.cursor/BUGBOT.md ファイルを作成します。Bugbot は、ルートの .cursor/BUGBOT.md ファイルと、変更されたファイルから上方向にたどって見つかった追加ファイルを常に含めます。

project/  .cursor/BUGBOT.md          # 常に含まれる(プロジェクト全体のルール)  backend/    .cursor/BUGBOT.md        # backend のファイルを確認する際に含まれる    api/      .cursor/BUGBOT.md      # API のファイルを確認する際に含まれる  frontend/    .cursor/BUGBOT.md        # frontend のファイルを確認する際に含まれる

学習済みルール

Bugbot repository rulesで、組織とリポジトリに対する学習を有効にします。

ルールは、そのリポジトリでのチームのGitHub上のアクティビティから自動生成されるほか、リポジトリの履歴から手動で追加することもできます。

任意のPRに@cursor remember [fact]とコメントすると、Bugbotに新しいルールをその場で教えることもできます。Bugbotはその内容を学習済みルールとして保存し、以降の確認に適用します。

Cursorは、時間の経過とともにチームのアクティビティをより多く学習し、ルールを自動的に有効化または無効化します。

フィールド説明
名前ルールの短いタイトル。
ルール内容Bugbotが従うべき指示 (例:スタイルゲート、パス、確認時の期待事項) 。
対象パスsrc/components/**などの任意のグロブパターン。リポジトリ全体にルールを適用するには、空欄のままにします。

手動ルール

Bugbot repository rulesでは、個々のリポジトリ用の手動ルールを作成できます。

フィールド説明
名前ルールの短いタイトル。
ルール内容Bugbot が従うべき指示 (スタイルゲート、パス、確認時の要件など) 。
対象パスsrc/components/** などの任意のグロブパターン。ルールをリポジトリ全体に適用する場合は、空欄のままにします。

ルールの利用分析

Bugbot ルールの利用分析では、実際の PR でのパフォーマンスを確認できます。

指標意味
検出された問題このルールに関連して Bugbot が報告した検出結果の数。
確認された PRそれらの検出結果が報告されたプルリクエストの数。
承認された問題チームが承認した検出結果の数。
承認率承認された検出結果の割合。

変更ファイルに文字列パターン /\beval\s*\(|\bexec\s*\(/i が含まれる場合:- タイトルを「危険な動的実行」、本文を次の内容とするブロッキング Bug を追加します:  「eval/exec の使用が見つかりました。安全な代替手段に置き換えるか、詳細なコメントとテストで正当性を示してください。」- Bug を PR 作成者に割り当てます。- 「security」ラベルを適用します。

PR が依存関係ファイル(package.json、pnpm-lock.yaml、yarn.lock、requirements.txt、go.mod、Cargo.toml)を変更する場合:- 組み込みの License Scan を実行します。- 新たに追加またはアップグレードされた依存関係のライセンスが {GPL-2.0, GPL-3.0, AGPL-3.0} のいずれかである場合:  - タイトルを「許可されていないライセンスを検出」とするブロッキング Bug を追加します  - 該当するパッケージ名、バージョン、ライセンスを Bug の本文に含めます  - 「compliance」と「security」ラベルを適用します

React プロジェクト内で **/*.{js,jsx,ts,tsx} に一致するファイルの場合:変更ファイルに /componentWillMount\s*\(/ が含まれる場合:- タイトルを「非推奨の React ライフサイクルメソッド」とするブロッキング Bug を追加します- 本文: 「componentWillMount を constructor または useEffect に置き換えてください。React ドキュメントを参照してください。」- 副作用を useEffect に移行する Autofix スニペットを提案します。

PR が {server/**, api/**, backend/**} 内のファイルを変更し、{**/*.test.*, **/__tests__/**, tests/**} に変更がない場合:- タイトルを「バックエンドの変更に対するテストが不足」とするブロッキング Bug を追加します- 本文: 「この PR はバックエンドのコードを変更していますが、対応するテストが含まれていません。テストを追加または更新してください。」- 「quality」ラベルを適用します

変更ファイルに /(?:^|\s)(TODO|FIXME)(?:\s*:|\s+)/ が含まれる場合:- タイトルを「TODO/FIXME コメントを検出」とする非ブロッキング Bug を追加します- 本文: 「TODO/FIXME を追跡可能な issue リファレンス(例: `TODO(#1234): ...`)に置き換えるか、削除してください。」- TODO がすでに issue パターン /#\d+|[A-Z]+-\d+/ を参照している場合、Bug を自動的に解決済みとしてマークします。

エージェントで実行

コードをプッシュする前に、/review-bugbot または /review スキルを使ってエージェントから Bugbot を実行します。

確認対象の diff: デフォルトでは、/review-bugbot はベースブランチとの差分にある、コミット済み・未コミットを含むブランチ上のすべての変更を確認します。より限定的なフィードバックが必要な場合は、未コミットの変更のみを確認するよう依頼してください。

比較対象のブランチ: /review-bugbot はデフォルトのベースブランチと比較します。ベースブランチがデフォルトのブランチ (main など) ではない場合は、比較対象のブランチをエージェントに伝えるか、コンテキストから推測させてください。

プルリクエストと同期

/review-bugbot による確認は、接続済みの SCM (GitHub、GitLab、Bitbucket) 上の Bugbot と同期されます。

/review-bugbot は内部的に、確認した diff の patch ID を保存します。SCM 上の Bugbot が同じ patch ID を持つ diff を検出すると、確認をスキップし、その diff はすでに確認済みであることをコメントで通知します。

たとえば、/review-bugbot を実行した後、同じ diff を含むプルリクエストを作成すると、Bugbot がその確認を認識し、リモートの PR 確認をスキップします。

Autofix

Bugbot Autofix は、PR レビューで見つかったバグを修正するために Cloud Agent を自動的に起動します。

仕組み

Bugbot は PR の確認中にバグを見つけると、次の操作を自動的に実行できます。

  1. Cloud Agent を起動して、報告された問題を分析・修正する
  2. 修正を既存のブランチまたは新しいブランチにプッシュする (設定に応じて)
  3. 結果を元の PR にコメントとして投稿する

設定

Bugbot AutomationsでAutofixの挙動を設定します。

要件

Autofix を使用するには、以下が必要です。

  • オンデマンド利用の料金設定が有効であること
  • ストレージが有効であること (Legacy Privacy Mode では非対応)

請求

Autofix では Cloud Agent クレジットを使用し、ご利用のプラン料金に基づいて請求されます。Cloud Agent の請求は、現在の料金プランに従います。

MCP サポート

Bugbot は MCP サーバーと統合されており、AI ツールから Bugbot と直接やり取りできます。MCP サーバーを使用して、Bugbot の確認プロセスを支援する追加ツールを提供できます。

はじめ方:

  1. MCP ドキュメントに従って、MCP サーバーをセットアップします。
  2. 自動化の Bugbotにツールを追加します。

管理者向け設定 API

チーム管理者は、Bugbot Admin API を使用してリポジトリを管理し、Bugbot を利用できるユーザーを制御できます。リポジトリ管理の自動化、複数のリポジトリでの Bugbot の有効化、社内ツールとのユーザープロビジョニングの統合に活用できます。

認証

すべてのエンドポイントで、Bearer トークンとしてチーム Admin API Key を渡す必要があります。

Authorization: Bearer $API_KEY

API キーを作成するには:

  1. Cursor ダッシュボードの API キーにアクセスします
  2. New API Key をクリックします
  3. API キーを保存します

すべてのエンドポイントでは、チームごとに 1 分あたり 60 リクエストまでに制限されています。

リポジトリの有効化と無効化

/bugbot/repo/update エンドポイントを使用して、リポジトリごとに Bugbot を有効または無効にします。

curl -X POST https://api.cursor.com/bugbot/repo/update \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "repoUrl": "https://github.com/your-org/your-repo",    "enabled": true,    "manualTriggerOnly": false  }'

パラメータ:

  • repoUrl (string、必須) : リポジトリの完全な URL
  • enabled (boolean、必須) : Bugbot を有効にするには true、無効にするには false
  • manualTriggerOnly (boolean、任意) : true の場合、このリポジトリでは PR の更新時に Bugbot が自動実行されません。cursor reviewbugbot run のコメントによる手動トリガーは引き続き機能します。

リポジトリの一覧

/bugbot/repos エンドポイントを使用して、チームの Bugbot 設定とともにすべてのリポジトリを一覧表示します。

curl https://api.cursor.com/bugbot/repos \  -H "Authorization: Bearer $API_KEY"

レスポンスには、各リポジトリの有効化状態、手動のみの設定、タイムスタンプが含まれます。

ユーザーアクセスの管理

/bugbot/user/update エンドポイントを使用して、チームの Bugbot ライセンスを利用できる GitHub、GitLab、Bitbucket ユーザーを管理します。エンタープライズでは、Bugbot のプロビジョニングを社内のアクセスリクエストツールと連携させるために使用します。

前提条件

このエンドポイントを呼び出す前に、チームの Bugbot 設定で許可リストモードまたはブロックリストモードを有効にしてください。

  • 許可リストモード (「Only...」) : リストに含まれるユーザーのみが Bugbot を使用できます
  • ブロックリストモード (「Everyone but...」) : リストに含まれるユーザー以外は全員 Bugbot を使用できます

どちらのモードも有効でない場合、API はエラーを返します。

ユーザーの追加と削除

curl -X POST https://api.cursor.com/bugbot/user/update \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "username": "octocat",    "allow": true  }'

パラメータ:

  • username (文字列、必須) : GitHub、GitLab、または Bitbucket のユーザー名 (大文字・小文字を区別しません)
  • allow (ブール値、必須) : アクセスを許可するか、取り消すか

allow の動作は、現在有効なモードによって異なります。

モードallow: trueallow: false
許可リストユーザーをリストに追加 (Bugbot を使用可能)ユーザーをリストから削除 (Bugbot を使用不可)
ブロックリストユーザーをブロックリストから削除 (Bugbot を使用可能)ユーザーをブロックリストに追加 (Bugbot を使用不可)

レスポンス:

{  "outcome": "success",  "message": "Updated team-level allowlist for @octocat",  "updatedTeamSettings": true,  "updatedInstallations": 0}

例: 社内ツールを使用したユーザーのプロビジョニング

この API を社内のアクセス申請ポータルに接続します。従業員が Bugbot へのアクセスを申請すると、ポータルが API を呼び出してそのユーザーを追加します。退職するかアクセス権を失った場合は、API を呼び出してそのユーザーを削除します。

アクセスを付与する:

curl -X POST https://api.cursor.com/bugbot/user/update \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{"username": "employee-scm-username", "allow": true}'

アクセス権を取り消す:

curl -X POST https://api.cursor.com/bugbot/user/update \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{"username": "employee-scm-username", "allow": false}'

料金

Bugbot は従量課金を採用しています。

請求

トラブルシューティング

Bugbot が動作しない場合:

  1. cursor review verbose=true または bugbot run verbose=true をコメントして詳細モードを有効にし、詳細なログ、読み込まれた Bugbot ルール、リクエスト ID を確認します
  2. 権限を確認し、Bugbot にリポジトリへのアクセス権限があることを確認します
  3. インストールを確認し、リポジトリプロバイダーとの連携がインストール済みで有効になっていることを確認します

問題を報告する際は、詳細モードで取得したリクエスト ID を含めてください。

よくある質問

はい。Bugbot は、接続済みプロバイダーのトップレベルおよびインラインのプルリクエストコメントを読み取り、確認時のコンテキストとして使用します。これにより、重複した提案を避け、レビュー担当者からの過去のフィードバックを活用できます。

プルリクエストに bugbot run verbose=true または cursor review verbose=true とコメントしてください。Bugbot は、その実行で使用されたすべてのルールを表形式で投稿し、切り詰められたルールや省略されたルールを示します。ルールが見つからない、または途中で切れている場合は、ルールの上限を参照してください。

はい。Bugbot は Cursor と同じプライバシー要件に準拠しており、他の Cursor リクエストと同様にデータを処理します。

含まれる Bugbot の利用量をすべて使い切ると、追加の Bugbot レビューは従量課金分の支出から請求されます。

各連携ページのセットアップおよびネットワークガイドを参照してください。