Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

セルフホストマシンを使い、Cloudflare 上で Cursor Cloud Agents を実行する

最終更新 Markdown で表示Agent セットアップ

セルフホストマシン 経由で、Cloudflare 上に Cursor Cloud Agents を実行します。デプロイに割り当てられた各 Cursor セッションは、Cloudflare Containers 上の分離されたコンテナで動きます。

Cursor はエージェントループ、推論、計画をホストします。Cloudflare は、コマンド、ファイル編集、リポジトリ操作、その他のツールを、自分で制御するインフラ内で実行します。

前提条件

次が必要です。

  • セルフホストマシンが有効な Cursor Enterprise プラン
  • agent スコープを持つ Cursor チームのサービスアカウント API キー
  • Containers と R2 を使える Cloudflare Workers Paid アカウント
  • Node.js 20 以降
  • デプロイとローカル開発用の稼働中の Docker デーモン

Cursor のチームプールを設定する

チームプールを作るには、シェルで CURSOR_API_KEY を設定します。その後、Cursor Agent CLI でローカルの worker を起動します。

CURSOR_API_KEY="$CURSOR_API_KEY" agent worker --pool cloudflare-test start

このコマンドはプールを登録し、一時的にローカルマシンを worker として接続します。Cursor にプールが表示されたら、Ctrl+C で worker を止め、unset CURSOR_API_KEY を実行します。CURSOR_POOL 用にプール名を控えます。Cloudflare デプロイを試すあいだは、ローカル worker を止めたままにして、エージェントリクエストを奪わないようにします。

詳細は Cursor team pools を参照してください。

テンプレートをデプロイする

テンプレートは、Worker、Durable Object 名前空間、コンテナアプリケーション、R2 バケットバインディング、cron トリガーをデプロイします。

  1. テンプレートをクローンし、依存関係をインストールします。

    git clone https://github.com/anysphere/cloudflare-workers.git
    cd cloudflare-workers
    npm install
  2. Cloudflare アカウントにログインします。

    npx wrangler login
  3. 任意のリポジトリスナップショット用に R2 バケットを作成します。

    npx wrangler r2 bucket create cursor-pool-worker-snapshots

    別のバケット名を使う場合は、wrangler.jsoncbucket_name を更新します。

  4. 必要な Cursor のサービスアカウントキーを Worker シークレットとして保存します。

    npx wrangler secret put CURSOR_API_KEY

    agent スコープを持つチームのサービスアカウントキーを入力します。個人用 API キーはプール worker では使えません。

  5. プライベートリポジトリにアクセスする場合は、Git の認証情報を Worker シークレットとして保存します。

    npx wrangler secret put GIT_USERNAME
    npx wrangler secret put GIT_TOKEN

    GitHub では、GIT_USERNAMEx-access-token にします。GIT_TOKEN には、エージェントが使うリポジトリへアクセスできるトークンを設定します。

  6. wrangler.jsonc で、vars.CURSOR_POOL を Cursor のチームプール名に設定します。

    {
      "vars": {
        "CURSOR_POOL": "default"
      }
    }
  7. containers[].max_instances を、デプロイが支える同時リクエストの最大数に設定します。

  8. Worker とコンテナをデプロイします。

    npx wrangler deploy

    Wrangler はイメージをビルドし、Worker、Durable Object、コンテナアプリケーション、cron トリガーをデプロイします。

    新しいコンテナイメージのロールアウトは、稼働中のコンテナを停止します。更新をデプロイする前に、進行中の Cursor セッションが終わるのを待ってください。

リポジトリ固定のエージェントを実行する

リポジトリ固定のエージェントは、Git リモートで作業を振り分けます。チームプール名は、追加の振り分け条件になります。

  1. Cursor Cloud Agents を開きます。

  2. エージェントを開始し、リポジトリを選びます。

  3. Self-hosted を選び、続けて CURSOR_POOL に設定した名前を選びます。

  4. Cursor がセッションをデプロイに割り当てるまで待ちます。その後、Worker がセッション用のコンテナを起動します。最初のスケジュール済みコントローラー実行は、開始まで最大 5 分かかることがあります。

リクエストはリポジトリ URL を渡します。コンテナはそのリポジトリを $HOME/workspaces/repo-0 に復元またはクローンします。その後、Cursor worker を起動します。

agent worker --worker-dir "$HOME/workspaces/repo-0" --pool "$CURSOR_POOL" start --verbose

Cursor worker は、リポジトリラベルを Git リモートから導出します。repo= ラベルを手動で設定しないでください。

任意リポジトリのエージェントを実行する

任意リポジトリのエージェントは、チームプール名で作業を振り分けます。空の作業ディレクトリで始まり、Git リモートはありません。

  1. Cursor Cloud Agents を開きます。

  2. エージェントを開始し、Any repo グループを選びます。

  3. CURSOR_POOL に設定したチームプール名を選びます。

コンテナは Git リモートなしで $HOME/workspaces/repo-0 を作成します。セッション中に、エージェントまたはプロジェクトフックがリポジトリをクローンできます。

リポジトリスナップショットを設定する

リポジトリスナップショットは、リポジトリ固定エージェント向けの任意キャッシュです。スナップショットは、クローン後の作業ツリーを R2 に保存します。任意リポジトリのエージェントはこのキャッシュを使いません。

  1. スナップショット用ルートを保護するシークレットを保存します。

    npx wrangler secret put SNAPSHOT_AUTH_TOKEN
  2. wrangler.jsonc で、vars.WORKER_PUBLIC_URL をデプロイした Worker URL に設定します。

    {
      "vars": {
        "CURSOR_POOL": "default",
        "WORKER_PUBLIC_URL": "https://cursor-pool-workers.<ACCOUNT_SUBDOMAIN>.workers.dev"
      }
    }
  3. 更新した設定をデプロイします。

    npx wrangler deploy

キャッシュミス時は通常の Git クローンを行います。エージェントの起動は妨げません。

テンプレートの仕組み

テンプレートは、割り当てられた Cursor セッションごとに 1 つのコンテナを管理します。

  • 一覧: cron トリガーが 5 分ごとに動きます。Worker は CURSOR_POOL を待っているセッションを一覧します。
  • ストリーム: Worker は、次のスケジュール実行まで Cursor の server-sent events ストリームを開いたままにします。
  • 割り当て: Worker は、一意の worker ID で待機中のセッションを受け付けます。Cursor はそのセッションを Worker に排他割り当てするため、重複処理を防ぎます。
  • 起動: Durable Object が、セッション環境とリポジトリ情報付きでコンテナを 1 つ起動します。
  • 停止: 設定したアイドルタイムアウト後にコンテナは終了します。Durable Object は最大実行時間も適用します。

コンテナは Cursor へのアウトバウンド接続を開きます。コンテナにインバウンドポートや公開 IP アドレスは不要です。

Worker が公開するのは、ヘルス用と任意のスナップショット用ルートだけです。エージェントループとセッションのオーケストレーションは Cursor が担います。

デプロイを監視する

コントローラーとコンテナのログをストリームするには、次を実行します。

npx wrangler tail

コンテナインスタンスを一覧するには、次を実行します。

npx wrangler containers list

ローカル開発でスケジュール済みコントローラー実行を 1 回試すには、スケジュールイベントのテスト付きで wrangler を起動します。

npx wrangler dev --test-scheduled

別のターミナルで、スケジュール済みルートを呼び出します。

curl "http://localhost:8787/cdn-cgi/local/scheduled?cron=*/5+*+*+*+*"

cron 間隔を変える場合は、wrangler.jsonctriggers.cronssrc/config.tsCONTROLLER_RUN_BUDGET_MS の両方を更新します。

トラブルシューティング

症状 原因 対処
セッションが割り当てられない cron が動かない、キーがない、またはチームプール名が一致しない npx wrangler tail を実行します。コントローラー実行、401 レスポンス、設定したチームプール名を確認します。
コントローラーが 401 を返す キーが個人用、または agent スコープがない CURSOR_API_KEY を、agent スコープを持つチームのサービスアカウントキーに置き換えます。
リポジトリ向けにチームプールが表示されない worker がリポジトリラベルなしで起動した Any repo を選ぶか、設定済みの Git リモート付きでリポジトリ固定エージェントを開始します。
セッションは割り当てられるが起動しない コンテナが起動できない、リポジトリをクローンできない、または認証できない npx wrangler containers list を実行し、npx wrangler tail を確認します。容量と Git シークレットを確認します。
コンテナが Error: Container exited with unexpected exit code: 1 で終了し、それより前のログに cursor-agent CLI not found on PATH がある Cloudflare WARP やほかの TLS 検査プロキシが、Docker による Cursor CLI のダウンロードを妨げた可能性があります。ガードのないシェルパイプラインはインストール失敗を隠し、不完全なイメージを作ることがあります。 npx wrangler tail を実行し、直前のコンテナログを確認します。Cursor CLI がない場合は、WARP を切断し、Docker のビルドキャッシュを消して、もう一度 npx wrangler deploy を実行します。または、組織のルート証明書を信頼するよう Docker を設定します。
最初のリポジトリ起動が遅い スナップショットキャッシュが空、または未設定 WORKER_PUBLIC_URLSNAPSHOT_AUTH_TOKEN の両方を設定するか、コールドな Git クローンを許容します。

関連リソース

役に立ちましたか?