メインコンテンツへ移動

VercelSandbox

Vercel Sandbox 内でコマンドを実行します。これは Amazon Linux 2023 を実行する一時的な Firecracker MicroVM です。セッション内で永続化される Filesystem、sudo アクセス、公開ポート、バックグラウンドプロセスを提供します。インターフェースの詳細は、WorkspaceSandbox インターフェースを参照してください。

注記

これは、ステートレスな Vercel サーバーレス Function としてコマンドを実行する VercelServerlessSandbox とは異なります。VercelSandbox は、永続的な Filesystem と長時間稼働するプロセスを備えた完全な Linux MicroVM を実行します。

インストール
インストールへの直接リンク

npm install @mastra/vercel

認証
認証への直接リンク

明示的な認証情報を指定しない場合、@vercel/sandbox SDK は Vercel OIDC トークンを自動的に使用します。tokenteamIdprojectId のいずれかを指定する場合は、3つすべてを指定してください。

ローカル開発では、プロジェクトをリンクして開発用トークンを取得します。

vercel link
vercel env pull

Vercel 上では認証が自動的に処理されるため、設定は不要です。

使用方法
使用方法への直接リンク

Workspace に VercelSandbox を追加して Agent に割り当てます。

import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { VercelSandbox } from '@mastra/vercel'

const workspace = new Workspace({
sandbox: new VercelSandbox({
runtime: 'node24',
timeout: 600_000,
}),
})

const agent = new Agent({
id: 'code-agent',
name: 'Code Agent',
instructions: 'You are a coding assistant working in this workspace.',
model: 'anthropic/claude-sonnet-4-6',
workspace,
})

const response = await agent.generate('Print "Hello, world!" and show the Node.js version.')

console.log(response.text)

リソースと公開ポート
リソースと公開ポートへの直接リンク

vCPU(1 vCPU あたり 2048 MB のメモリ)を割り当て、Sandbox 内で動作するネットワークサービスへアクセスするためのポートを公開します。

const sandbox = new VercelSandbox({
runtime: 'node24',
resources: { vcpus: 4 },
ports: [3000],
})

const workspace = new Workspace({ sandbox })
await sandbox.start()

// The public HTTPS domain for an exposed port is available via getInfo()
const { metadata } = sandbox.getInfo()
console.log(metadata?.domains) // { 3000: 'https://....vercel.run' }

出力のストリーミング
出力のストリーミングへの直接リンク

onStdoutonStderr コールバックを介して、コマンド出力をリアルタイムでストリーミングします。

await sandbox.executeCommand('sh', ['-c', 'for i in 1 2 3; do echo "line $i"; sleep 1; done'], {
onStdout: chunk => process.stdout.write(chunk),
onStderr: chunk => process.stderr.write(chunk),
})

どちらのコールバックも任意で、個別に使用できます。

コンストラクターパラメーター
コンストラクターパラメーターへの直接リンク

id?:

string
= Auto-generated
この Sandbox インスタンスの一意な識別子。

sandboxName?:

string
Vercel API に渡す任意の名前。省略すると自動生成されます。

token?:

string
Vercel API トークン。未指定の場合は環境変数 VERCEL_TOKEN を使用します。OIDC トークンを使用する場合は省略します。

teamId?:

string
Vercel チーム ID。未指定の場合は環境変数 VERCEL_TEAM_ID を使用します。

projectId?:

string
Vercel プロジェクト ID。未指定の場合は環境変数 VERCEL_PROJECT_ID を使用します。

runtime?:

'node24' | 'node22' | 'node26' | 'python3.13'
= 'node24'
Sandbox のランタイム。

timeout?:

number
= 300000 (5 minutes)
Sandbox が自動終了するまでのタイムアウト(ミリ秒)。

resources?:

{ vcpus?: number }
リソース割り当て。各 vCPU に 2048 MB のメモリが付属します。

ports?:

number[]
Sandbox から公開するポート(最大15個)。公開 HTTPS ドメインは getInfo().metadata.domains で取得できます。

env?:

Record<string, string>
= {}
すべてのコマンドが継承するデフォルト環境変数。

metadata?:

Record<string, unknown>
= {}
getInfo() で公開するカスタムメタデータ。

instructions?:

string | ((opts) => string)
getInstructions() が返すデフォルトの指示を上書きします。置き換えるには文字列を、デフォルトを拡張するには関数を渡します。

onStart?:

SandboxLifecycleHook
Sandbox が running ステータスになった後に呼び出すライフサイクルフック。

onStop?:

SandboxLifecycleHook
Sandbox の停止前に呼び出すライフサイクルフック。

onDestroy?:

SandboxLifecycleHook
Sandbox の破棄前に呼び出すライフサイクルフック。

プロパティ
プロパティへの直接リンク

id:

string
Sandbox インスタンスの識別子。

name:

'VercelSandbox'
人が読みやすい名前。

provider:

'vercel-sandbox'
Provider の種類を表す識別子。

status:

ProviderStatus
'pending' | 'starting' | 'running' | 'stopping' | 'stopped' | 'destroying' | 'destroyed' | 'error'

sandbox:

Sandbox
基盤となる @vercel/sandbox の Sandbox インスタンス。Sandbox が起動していない場合は SandboxNotReadyError をスローします。

processes:

VercelSandboxProcessManager
バックグラウンドプロセスマネージャー。SandboxProcessManager リファレンスを参照してください。

バックグラウンドプロセス
バックグラウンドプロセスへの直接リンク

VercelSandbox には、バックグラウンドプロセスを起動・管理するプロセスマネージャーが含まれます。起動した各プロセスは MicroVM 内でデタッチ済みコマンドとして動作し、出力はコマンドログを介してストリーミングされます。

const sandbox = new VercelSandbox({ runtime: 'node24', ports: [3000] })
await sandbox.start()

const handle = await sandbox.processes.spawn('node server.js', {
env: { PORT: '3000' },
onStdout: data => console.log(data),
})

console.log(handle.stdout)
await handle.kill()

完全な API は、SandboxProcessManager リファレンスを参照してください。

注記

Vercel Sandbox SDK は実行中のコマンドに stdin チャネルを公開しないため、handle.sendStdin() はエラーをスローします。この Provider は Filesystem のマウント(FUSE)にも対応していません。

制限
制限への直接リンク

  • 最大32 vCPU。1 vCPU あたり 2048 MB のメモリ。
  • 公開ポートは最大15個。
  • Filesystem は一時的です。セッション内でのみ維持され、Sandbox の停止時に失われます。
  • 最大実行時間はプランによって異なり(Hobby は45分、Pro と Enterprise は最大24時間)、デフォルトは5分です。

現在の制限と料金は、Vercel Sandbox ドキュメントを参照してください。