devin worker プロセスのことで、アウトバウンド HTTPS で Devin Cloud に接続し、キューからセッションを取得してローカルで実行します。インバウンドのポート、パブリック IP アドレス、仮想プライベートネットワーク (VPN) は必要ありません。このガイドでは、1 つのサンドボックスで 1 つのワーカーを実行します。そのワーカーは、サンドボックスが存続している間、セッションを順番に処理します。
各ワーカーが同時に処理できる実行中のセッションは 1 つだけです。それ以外のセッションは、ワーカーが空くまで待機します。このガイドでは、起動するワーカーの数は固定です。セッションがキューに溜まっても、サンドボックスが自動で追加されることはありません。ワーカーを手動で追加起動するか、オーケストレーターを使用して自動的にプロビジョニングしてください。
前提条件
始める前に、次のものが揃っていることを確認してください。- Outposts が有効になっている Devin 組織。Devin Cloud の Settings > Environment に Outposts が表示されない場合は、Devin の管理者に問い合わせてください。
SANDBOX_USERaction が付与された CoreWeave API アクセストークン。- SDK (ソフトウェア開発キット) を直接使用する場合は、Python 3.11 以降と
uv、または Node.js 22 以降。
Devin Cloud でアウトポストを作成する
アウトポストを作成してトークンを取得するには、次の手順に従います。- Devin Cloud で、Settings > Environment > Outposts に移動します。
- Create Outpost をクリックし、名前を入力して Linux を選択します。
- アウトポストのトークンをコピーします。トークンは Devin Cloud で一度しか表示されません。
cws-agent または Sandboxes SDK のいずれかでワーカーを起動し、検証セッションを実行します。
cws-agent によるクイックスタート
cws-agent のインストール手順に従ってください。このツールは、ファイルシステムスナップショットでワークスペースを保存およびリストアするためのスナップショットボリュームを設定します。
[OUTPOST-TOKEN] はコピーしたトークンに、[OUTPOST-NAME] はアウトポスト名に、[SANDBOX-NAME] はこのサンドボックス用の cws-agent セッション名に置き換えてください。セッション名は英小文字、数字、ハイフンを使用した 1~40 文字で指定し、先頭は英字または数字にしてください。
--agent devin で起動する対話型の Devin コマンドラインインターフェース (CLI) とは別のものです。
Sandboxes SDK を使用して設定する
cws-agent を使用せずにワーカーを直接起動する場合は、この代替手段を使用します。この方法では永続ストレージは構成されません。
Python のスニペットは、認証情報を設定してクライアントをインストールするで作成した仮想環境で実行してください。TypeScript のスニペットは、クライアントをインストールしたプロジェクトに .mts ファイルとして保存し、npx tsx [FILENAME].mts で実行してください。
認証情報を設定してクライアントをインストールする
スクリプトを実行するターミナルで、アウトポストの作成時にコピーしたトークンをエクスポートします。- Python
- TypeScript
Python 3.11 以降と
uv を使用します。ワーカーを起動する
次のスクリプトは、Cognition の公式ワーカーイメージからサンドボックスを作成し、サンドボックスのメインコマンドとしてdevin worker を実行します。クライアントはローカル環境から DEVIN_OUTPOSTS_TOKEN を読み取り、その値をサンドボックスリクエストに含めて渡すことで、ワーカーの環境変数を設定します。ワーカーの出力はサンドボックスのログとして記録されます。ワーカーがエラーで終了した場合、プラットフォームは再起動の上限に達するまでコンテナーを再起動します。
- Python
- TypeScript
start_outpost_worker.py
- Python
- TypeScript
sandbox.wait() は、サンドボックスが実行中になった時点、またはすでに完了している場合に制御を返します。その時点ではインストールやワーカーの認証がまだ完了していない可能性があるため、タスクを送信する前にワーカーの状態を確認してください。ワーカーは /workspace を作業ディレクトリとして起動します。your-org/app のセッションでは、リポジトリが /workspace/repos/app 配下にチェックアウトされます。
このスクリプトは with ブロックを使用していないため、スクリプトの終了後も実行中のサンドボックスは動作し続けます。
オプション: シークレットストアを使用する
アウトポストトークンの値の代わりに Forge シークレット参照を渡すことができます。このオプションには、Forge 認証とサーバーレス配置が必要です。アウトポストトークンを Forge チームの Secret Manager に保存してから、そのチームの認証情報をエクスポートします。FORGE_API_KEY と FORGE_TEAM は説明用の環境変数名であるため、SDK はこれらを自動的に検出しません。
- Python
- TypeScript
サンドボックスを作成する前に、
AuthHeaders をインポートして auth を定義します。Sandbox.run() に auth=auth を渡します。以降の Python の例でもこの設定を含め、Sandbox.from_id() を呼び出す際にも必ず auth=auth を渡してください。[SECRET-NAME] はチームシークレットの名前に置き換えてください。
- Python
- TypeScript
cwsandbox から Secret をインポートし、environment_variables から DEVIN_OUTPOSTS_TOKEN を削除したうえで、Sandbox.run() に secrets=[Secret(store="wandb", name="[SECRET-NAME]", env_var="DEVIN_OUTPOSTS_TOKEN")] を追加します。Devin セッションを実行して検証する
テストには、このワーカーのみが接続され、キューに追加されたセッションや実行中のセッションが他にないアウトポストを使用してください。このテスト用に、シークレットではない一意の値を決めて、以下のタスク内の[PROOF-VALUE] をその値に置き換えます。Devin Cloud で新しいセッションを開始し、Configuration > Virtual environment でアウトポストを選択します。続いて、Write the exact text で始まる以下のタスクを送信します。Slack を使用する場合は、次のメッセージ全文を送信してください。
[SANDBOX-NAME] を cws-agent のワークスペース名に、または [SANDBOX-ID] を SDK スクリプトが出力した ID に置き換えてください。
- cws-agent
- Sandboxes SDK
ワーカーを確認して停止する
cws-agent の場合は、クイックスタートで示したとおりワーカーのターミナルにアタッチします。SDK を使用する場合は、ステータスと最近のログを確認します。[SANDBOX-ID] は出力された ID に置き換えてください。
- Python
- TypeScript
account.outposts.write) の権限が必要です。認証情報を修正したうえで、サンドボックスを再作成してください。
ワーカーが終了と再起動を繰り返していても、サンドボックスのステータスが running と表示される場合があります。ログを確認し、Python クライアントを使用している場合は、前述の例で示したコンテナーごとの詳細も確認してください。
認証に失敗し続けるワーカーは、代わりのワーカーを作成する前に停止してください。起動に失敗し、原因を特定できる情報が得られない場合は、サンドボックス ID とログを保存し、CoreWeave Support にお問い合わせください。
ワーカーが不要になったら、サンドボックスを停止してください。サーバーレスのセットアップについては、はじめにを参照してください。
実行中の Devin セッションが完了して結果が保存されるのを待ってから、ご利用の構成に応じたコマンドでコンピュートを停止します。
- cws-agent
- Sandboxes SDK
down は停止前にワークスペースのスナップショットを作成します。スナップショットの取得に失敗した場合は、表示されたエラーと cws-agent status [SANDBOX-NAME] の出力を確認し、問題を解決してから再試行してください。保存されていない変更を破棄してもかまわない場合は、cws-agent down [SANDBOX-NAME] --no-snapshot を使用します。cws-agent のワークスペースをリストアする方法については、Devin Outposts ガイドを参照してください。
オプション: 環境をカスタマイズする
ワーカー環境は、次の方法でカスタマイズできます。-
独自のイメージを使用する。 公式イメージには
devinCLI 以外ほとんど何も含まれていません。公式イメージをベースに独自のツールチェーンを追加したイメージをビルドし、Python ではcontainer_image、TypeScript ではcontainerImageとして渡します。Devin にはgitが必要です。画面録画にはffmpegが、ブラウザーツールとコンピューター操作ツールには互換性のあるブラウザーのバイナリが必要です。 公式 Ubuntu イメージをベースにした amd64 イメージの場合は、Google Chrome をインストールしてください。Ubuntu のchromiumパッケージは snap のスタブであり、コンテナー内では動作しません。詳しくは Devin のコンテナーセットアップを参照してください。また、コンピューター操作を行うには、Xvfb などのグラフィカルディスプレイが実行されており、ワーカーにDISPLAYが設定されている必要があります。 ワーカーは標準のインストール場所を検索します。バイナリが見つからない場合は、DEVIN_CHROME_PATHにその絶対パスを設定してください。詳しくは Devin Outposts リファレンスを参照してください。 - GPU を設定する。 使用可能なオプションについては、サンドボックスの GPU 設定を参照してください。このガイドのワーカーの例では CPU リソースのみを使用します。
- ワーカーを増やす。 1 つのワーカーが同時に処理できるセッションは 1 つだけです。同じアウトポスト名でスクリプトを再度実行すると、そのキューに別のワーカーが追加で起動します。
- セッションごとにサンドボックスを作成する。 この例のワーカーは、複数のセッションで同じサンドボックスを使い回します。セッションごとに新しいサンドボックスを用意する方法については、Devin のオーケストレーションガイドを参照してください。