メインコンテンツまでスキップ

Cursor での Grok Bot のセットアップ

Cursor Grok Bot ガイド

Cursor の Grok Bot は、AI 駆動の自動化ルーティンを開発ワークフローに直接もたらします。Webhook ルーティン、Slack トリガー、自動化ワークフローを設定することで、外部サービスを接続し、ボットに反復タスクを自動的に処理させることができます。本ガイドは、初期設定から高度なトラブルシューティングまでの完全なセットアッププロセスをカバーします。

Grok Bot とは?​

Grok Bot は、Webhook ベースのルーティンを使用して外部サービスからのイベントに応答する Cursor の自動化レイヤーです。トリガーが発火すると、ボットは定義済みのルーティン(コード分析の実行、要約の生成、通知の送信など)を実行します。

Grok Bot セットアップのコアコンポーネントは以下の通りです:

  • ルーティン: トリガーされたときにボットが実行する一連のアクション
  • トリガー: ルーティンを開始するイベント(Slack メッセージや Webhook 呼び出しなど)
  • Webhook URL: 外部サービスがデータを送信するエンドポイントアドレス
  • アクション: ファイル編集、ターミナルコマンド、API 呼び出しなどのルーティン内の個々のステップ
ヒント

Grok Bot をセットアップする前に、Cursor のインストールが最新であることを確認してください。Webhook ルーティン機能は頻繁に改善されており、古いバージョンでは本ガイドで説明されているすべてのトリガータイプをサポートしていない場合があります。

初期設定​

Grok Bot の有効化​

Cursor で Grok Bot を有効にするには、自動化設定に移動します:

  1. Cursor 設定を開く(Ctrl+, または Cmd+,)
  2. 左サイドバーの Automations セクションに移動
  3. Enable Grok Bot を切り替えて機能を有効化
  4. Generate Webhook Secret をクリックして、受信リクエストの認証用シークレットキーを作成
// settings.json に保存される生成された設定の例
{
"cursor.grokBot.enabled": true,
"cursor.grokBot.webhookSecret": "whsec_abc123def456ghi789",
"cursor.grokBot.defaultModel": "cursor-agent-pro",
"cursor.grokBot.maxConcurrentRoutines": 3
}
警告

Webhook シークレットは秘密にしてください。このシークレットを持つ人は誰でも、あなたのマシンでルーティンをトリガーできます。シークレットが漏洩した場合は、設定パネルから直ちに新しいシークレットを生成してください。

最初のルーティンの作成​

ルーティンは、トリガーされたときにボットが従う一連の指示です。Automations パネルから作成します:

  1. Automations パネルを開く(Ctrl+Shift+A)
  2. New Routine をクリック
  3. ルーティンに説明的な名前を付ける(例:「Slack Code Review Request」)
  4. トリガータイプを選択(Webhook、Slack、Manual、Schedule)
  5. ルーティンが実行すべきアクションを定義
  6. ルーティンを保存して有効化
# ルーティン設定の例
name: "Slack Code Review Request"
description: "When a Slack message mentions @code-review, analyze the referenced file"
trigger:
type: slack
condition: "message.contains('@code-review')"
actions:
- type: parse_message
extract:
file_path: "regex:review\\s+(.+)"
question: "regex:asking\\s+(.+)"
- type: read_file
path: "{{file_path}}"
- type: analyze
prompt: "Review this code for potential issues, security vulnerabilities, and improvement suggestions."
- type: slack_reply
message: "{{analysis_result}}"

Webhook ルーティン​

Webhook ルーティンは、外部サービスが指定 URL に HTTP POST リクエストを送信することで Cursor のアクションをトリガーできるようにします。

Webhook URL の理解​

Webhook トリガーのルーティンを作成すると、Cursor は一意の Webhook URL を生成します。この URL は、外部サービスがペイロードを送信するアドレスです。

# Webhook URL 形式の例
http://localhost:7541/webhooks/routines/rtn_abc123def456
警告

ユーザーから報告される一般的な問題は、Webhook ルーティン設定に POST URL が表示されないことです。これは通常、ルーティンが完全に保存されていないか、保存前にトリガータイプが「Webhook」に設定されていない場合に発生します。POST URL が表示されない場合は、以下の手順に従ってください:

  1. ルーティンエディタを再度開く
  2. トリガータイプが「Webhook」に設定されていることを確認
  3. Save を明示的にクリックする(パネルを閉じるだけでは不可)
  4. URL が表示されているか確認するためルーティンを再度開く

URL がまだ表示されない場合は、Cursor を再起動して再試行してください。これは報告済みの既知の問題であり、修正が追跡されています。

Webhook ルーティンの登録​

Webhook トリガーのルーティンをステップバイステップで作成する方法は以下の通りです:

  1. Automations パネルを開く
  2. New Routine をクリック
  3. 名前を「GitHub PR Notification」に設定
  4. トリガータイプを Webhook に設定
  5. Webhook URL を生成するためにルーティンを保存
  6. 表示された POST URL をコピー
  7. 外部サービスがその URL にリクエストを送信するように設定
# 例:GitHub Action から Webhook を送信
import json
import urllib.request

webhook_url = "http://localhost:7541/webhooks/routines/rtn_abc123def456"
webhook_secret = "whsec_abc123def456ghi789"

payload = {
"event": "pull_request.opened",
"repository": "my-org/my-repo",
"pr_number": 42,
"pr_title": "Add payment gateway integration",
"author": "jane-dev",
"changed_files": ["src/payment/stripe.ts", "src/api/routes.ts"],
}

req = urllib.request.Request(
webhook_url,
data=json.dumps(payload).encode("utf-8"),
headers={
"Content-Type": "application/json",
"X-Webhook-Secret": webhook_secret,
},
method="POST",
)

try:
with urllib.request.urlopen(req) as response:
print(f"Status: {response.status}")
print(f"Response: {response.read().decode()}")
except urllib.error.URLError as e:
print(f"Webhook delivery failed: {e}")

Webhook リクエストの検証​

受信 Webhook リクエストが信頼できるソースからのものであることを確認するため、常に検証してください。セットアップ中に生成した Webhook シークレットは X-Webhook-Secret ヘッダーに含まれている必要があります。

// 検証ロジックの例(Node.js)
const crypto = require("crypto");

function validateWebhook(req, res, next) {
const secret = req.headers["x-webhook-secret"];
const expectedSecret = process.env.CURSOR_WEBHOOK_SECRET;

if (!secret || secret !== expectedSecret) {
return res.status(401).json({ error: "Invalid webhook secret" });
}

// オプション:リプレイ攻撃を防ぐためリクエストタイムスタンプを検証
const timestamp = req.headers["x-webhook-timestamp"];
const now = Date.now();
const maxAge = 5 * 60 * 1000; // 5 分

if (timestamp && now - parseInt(timestamp) > maxAge) {
return res.status(401).json({ error: "Webhook timestamp expired" });
}

next();
}
ヒント

本番環境のセットアップでは、ngrok や Cloudflare Tunnel などのツールを使用してローカル Webhook エンドポイントをインターネットに公開します。これにより、GitHub、Slack、Jira などの外部サービスがローカルの Cursor インスタンスにアクセスできます。

Slack 統合​

Slack は Grok Bot ルーティンの最も一般的なトリガーソースの1つです。特定のイベントが発生したときに Slack が Cursor にメッセージを送信するように設定できます。

Slack トリガーのセットアップ​

  1. Slack API アプリケーションページに移動
  2. Create New App をクリックし、From scratch を選択
  3. アプリに「Cursor Grok Bot」と名付け、ワークスペースを選択
  4. Event Subscriptions でイベントを有効化
  5. Cursor の Webhook URL を Request URL として入力
  6. message.channels と reaction_added ボットイベントをサブスクライブ
  7. OAuth & Permissions で chat:write と channels:read スコープを追加
  8. ワークスペースにアプリをインストールし、Bot User OAuth Token をコピー
// 例:Grok Bot ルーティンの Slack トリガーハンドラ
const slackTrigger = {
type: "slack",
events: ["message.channels"],
conditions: {
// メッセージが @cursor-bot をメンションした場合のみトリガー
mentions_bot: true,
// 特定のチャンネルでのみトリガー
channels: ["#code-review", "#bug-reports", "#deployments"],
// ボット自身のメッセージは無視
ignore_bots: true,
},
};

Slack への返信​

ルーティンが完了したら、結果を元の Slack チャンネルに送り返すことができます:

const { WebClient } = require("@slack/web-api");

const slack = new WebClient(process.env.SLACK_BOT_TOKEN);

async function replyToSlack(channel, text) {
await slack.chat.postMessage({
channel: channel,
text: text,
// オプション:Slack Block Kit メッセージとしてフォーマット
blocks: [
{
type: "section",
text: {
type: "mrkdwn",
text: text,
},
},
{
type: "divider",
},
{
type: "context",
elements: [
{
type: "mrkdwn",
text: ":robot_face: Generated by Cursor Grok Bot",
},
],
},
],
});
}
警告

Slack トリガーが発火しない場合は、以下の一般的な原因を確認してください:

  1. Slack アプリが正しいイベントタイプにサブスクライブされていない
  2. ボットユーザーがターゲットチャンネルを読み取る権限を持っていない
  3. Webhook URL が正しくない、またはインターネットから到達できない
  4. X-Webhook-Secret ヘッダーが期待される値と一致しない
  5. ルーティンの条件フィルタが受信メッセージに一致しない

Slack はデフォルトで失敗した Webhook 配信を再試行しません。エンドポイントが非 200 レスポンスを返した場合、イベントはサイレントにドロップされます。Slack API ログで配信エラーを常に確認してください。

トリガー設定​

Grok Bot は Webhook と Slack 以外にも複数のトリガータイプをサポートしています。各トリガータイプを理解することで、ユースケースに適切なものを選択できます。

利用可能なトリガータイプ​

トリガータイプ説明ユースケース
Webhook任意の外部サービスからの HTTP POST リクエストGitHub イベント、Jira 更新、CI/CD パイプライン
SlackSlack メッセージまたはリアクションチーム通知、コードレビュー依頼
Schedule時間ベースのトリガー(cron 式)定期チェック、毎晩の要約
File Watchディスク上のファイル変更時にトリガー保存時の自動フォーマット、自動テスト
Manualキーボードショートカットまたはコマンドでトリガーオンデマンドのコード分析

スケジュールトリガーの例​

name: "Nightly Dependency Audit"
description: "Check for outdated dependencies every night at 2 AM"
trigger:
type: schedule
cron: "0 2 * * *"
actions:
- type: terminal_command
command: "npm audit --json"
- type: analyze
prompt: "Analyze these npm audit results and summarize the critical vulnerabilities."
- type: slack_reply
channel: "#security-alerts"
message: "{{analysis_result}}"

ファイルウォッチトリガーの例​

name: "Auto-Format on Save"
description: "Run formatter whenever a TypeScript file is saved"
trigger:
type: file_watch
patterns:
- "**/*.ts"
- "**/*.tsx"
events: ["save"]
actions:
- type: terminal_command
command: "npx prettier --write {{file_path}}"
- type: terminal_command
command: "npx eslint --fix {{file_path}}"
ヒント

ファイルウォッチトリガーは、頻繁に保存する場合にノイズが多くなる可能性があります。トリガー設定にデバウンス期間を追加して、急速な保存を単一の実行にバッチ化します。これにより、同じファイルに対して複数の重複するルーティンが実行されるのを防ぎます。

ルーティンの編集​

ルーティンは YAML 設定ファイルとして保存され、直接編集するか、Cursor のビジュアルエディタで編集できます。

ビジュアルエディタの使用​

Automations パネルのビジュアルエディタは、ルーティンを構築するためのドラッグアンドドロップインターフェースを提供します:

  1. 左側のパレットからアクションブロックをドラッグ
  2. 希望の順序に配置
  3. 各ブロックをクリックしてパラメータを設定
  4. Test ボタンを使用してサンプル入力でルーティンを実行
  5. ルーティンを保存して有効化

YAML の直接編集​

より制御が必要な場合は、ルーティン YAML ファイルを直接編集できます。ルーティンファイルは .cursor/automations/ ディレクトリに保存されます:

# すべてのルーティンを一覧表示
ls -la .cursor/automations/

# 特定のルーティンを編集
code .cursor/automations/nightly-audit.yaml
# .cursor/automations/code-review-bot.yaml
name: "Smart Code Review Bot"
description: "Analyzes changed files and posts a review comment"
trigger:
type: webhook
filter:
event: "pull_request.opened"
actions:
- type: parse_payload
extract:
pr_number: "$.pull_request.number"
changed_files: "$.pull_request.changed_files"
repo: "$.repository.full_name"

- type: loop
over: "{{changed_files}}"
actions:
- type: read_file
path: "{{item}}"
- type: analyze
prompt: |
Review this file for:
1. Security vulnerabilities
2. Performance issues
3. Code style violations
4. Missing error handling

- type: format_output
template: |
## Automated Code Review

{{#each results}}
### {{this.file}}
{{this.review}}
{{/each}}

- type: webhook_response
status: 200
body: "{{formatted_output}}"
警告

ルーティン YAML ファイルを直接編集する場合は、保存前に必ず構文を検証してください。不正な YAML ファイルはルーティンをサイレントに失敗させます。コマンドパレットで cursor.automations.validate を使用してすべてのルーティンをチェックしてください。

自動化ワークフロー​

複数のルーティンを組み合わせることで、開発パイプライン全体を接続する強力な自動化ワークフローを作成できます。

ワークフロー例:PR ライフサイクル自動化​

このワークフローは Pull Request のライフサイクル全体を自動化します:

# ルーティン 1:PR オープン - 初期分析
name: "PR Initial Analysis"
trigger:
type: webhook
filter:
event: "pull_request.opened"
actions:
- type: analyze
prompt: "Summarize this PR and identify the main changes."
- type: slack_reply
channel: "#pr-updates"
message: "New PR: {{pr_title}}\nSummary: {{analysis_result}}"

---

# ルーティン 2:PR レビュー依頼 - 深掘り分析
name: "PR Deep Analysis"
trigger:
type: slack
conditions:
mentions_bot: true
contains_keyword: "deep-review"
actions:
- type: analyze
prompt: "Perform a comprehensive code review including security, performance, and architecture."
- type: slack_reply
channel: "{{trigger_channel}}"
message: "{{analysis_result}}"

---

# ルーティン 3:PR マージ - ドキュメント更新
name: "PR Merged - Update Docs"
trigger:
type: webhook
filter:
event: "pull_request.closed"
merged: true
actions:
- type: analyze
prompt: "Update the README and CHANGELOG based on the merged changes."
- type: terminal_command
command: "git add README.md CHANGELOG.md && git commit -m 'docs: update for PR #{{pr_number}}'"

ワークフロー例:インシデント対応​

name: "Incident Response Bot"
description: "When an error alert is posted to Slack, analyze and suggest fixes"
trigger:
type: slack
channels: ["#alerts", "#incidents"]
conditions:
contains_keyword: "ERROR"
actions:
- type: parse_message
extract:
error_text: "regex:ERROR:\\s*(.+)"
stack_trace: "regex:at\\s+(.+)"

- type: search_codebase
query: "{{error_text}}"

- type: analyze
prompt: |
An error has occurred. Here is the error message and the relevant code.
Suggest a fix and explain the root cause.
Error: {{error_text}}
Stack trace: {{stack_trace}}
Relevant file: {{search_result}}

- type: slack_reply
channel: "{{trigger_channel}}"
message: |
:rotating_light: *Automated Analysis*
*Likely cause:* {{analysis_result.cause}}
*Suggested fix:* {{analysis_result.fix}}
*File to check:* {{search_result}}
ヒント

ワークフローは段階的に構築してください。シンプルな通知ルーティンから始め、十分にテストしてから、より複雑なアクションを追加します。これにより、問題が発生したときにどのステップが失敗しているかを特定しやすくなります。

トラブルシューティング​

Webhook URL が表示されない​

これは最もよく報告される問題です。Webhook トリガーのルーティンを作成するとき、POST URL フィールドが空になる場合があります。

根本原因: トリガータイプを設定する前にルーティンが保存された、またはルーティンが部分的にしか保存されていない。

解決策:

  1. ルーティンを削除して新しく作成する
  2. 他の詳細を入力する前にトリガータイプを「Webhook」に設定
  3. Save をクリックして URL が生成されるのを待つ
  4. URL がまだ表示されない場合は、Cursor 出力パネルでエラーを確認(View > Output > Cursor Automations)
  5. 回避策として、YAML ファイルのルーティン ID を使って URL を手動で構築できます:
http://localhost:7541/webhooks/routines/{ROUTINE_ID}

Slack トリガーが発火しない​

Slack トリガーがメッセージに応答しない場合:

  1. Slack アプリがワークスペースにインストールされていることを確認
  2. イベントサブスクリプション URL が到達可能であることを確認(Slack API 検証機能を使用)
  3. ボットユーザーがターゲットチャンネルに招待されていることを確認(/invite @cursor-grok-bot)
  4. ルーティン条件が厳しすぎないか確認
  5. Cursor Automations ログで受信イベントを確認:
# 自動化ログを表示
cat .cursor/automations/logs/automation.log | tail -100

# Slack イベントでフィルタ
grep "slack" .cursor/automations/logs/automation.log
警告

Slack はイベントサブスクリプション URL 検証に 3 秒のタイムアウトを持ちます。Cursor が初期検証リクエストに応答するのに 3 秒以上かかると、Slack は URL を拒否します。Slack API ダッシュボードでイベントサブスクリプションを設定するときに Cursor が実行中で応答可能であることを確認してください。

ルーティン編集の問題​

ルーティンを保存または編集できない場合:

  1. コマンドパレットを使用して YAML ファイルが有効か確認
  2. 他のプロセスがルーティンファイルをロックしていないことを確認
  3. .cursor/automations/ ディレクトリに書き込み権限があることを確認
  4. .cursor/automations/cache/ ディレクトリを削除して強制リフレッシュを試行
  5. ビジュアルエディタが応答しない場合は Cursor を再起動

ルーティン実行のデバッグ​

デバッグログを有効にしてルーティン実行の詳細情報を確認します:

// settings.json で
{
"cursor.grokBot.debug": true,
"cursor.grokBot.logLevel": "verbose"
}
# デバッグログをリアルタイムで表示
tail -f .cursor/automations/logs/automation.log

# 特定のルーティンでフィルタ
grep "routine_id: rtn_abc123" .cursor/automations/logs/automation.log

ベストプラクティス​

  • シンプルに始める: 複雑なワークフローを構築する前に、基本的な通知ルーティンから始める
  • サンプル入力でテスト: ルーティンを有効化する前にビジュアルエディタの Test ボタンを使用
  • 条件を賢く使う: すべてのメッセージやイベントでルーティンが発火するのを防ぐため、条件フィルタを追加
  • 実行時間を監視: 長時間実行されるルーティンは他のルーティンの実行をブロックする可能性があります。タイムアウトを設定してください。
  • ルーティンをバージョン管理: チームコラボレーションのためにルーティン YAML ファイルを Git リポジトリに保存
  • ワークフローをドキュメント化: 各ルーティンに明確な説明を追加し、チームメイトがその目的を理解できるようにする
  • Webhook シークレットをローテーション: セキュリティのために定期的に Webhook シークレットを再生成
  • 環境変数を使用: YAML にハードコードするのではなく、環境変数で機密値を参照
ヒント

チームが参照できる共有ルーティンリポジトリを作成してください。各チームメンバーは必要なルーティンをサブスクライブでき、リポジトリがプルされると更新が自動的に取得されます。これによりチーム間の一貫性が促進されます。

まとめ​

Cursor の Grok Bot は、Webhook ルーティンと Slack トリガーを通じてエディタを外部サービスに接続する柔軟な自動化レイヤーを提供します。本ガイドのセットアップ手順に従い、一般的なトラブルシューティングシナリオに対処することで、時間を節約し手作業を減らす堅牢な自動化ワークフローを構築できます。

最も重要な点は:Webhook リクエストを常に検証し、ルーティンを保存する前にトリガータイプを設定し、本番環境でルーティンを有効化する前に組み込みのテストツールで十分にテストすることです。これらのプラクティスを徹底することで、Grok Bot は開発ツールキットの信頼できる一部となります。