agentbox について
agentbox は、Solana の USDC で専用 AI エージェントを構成するスキルです。一時的に OpenClaw ゲートウェイを利用したいユーザー向けに、HTTPS API、ウェブターミナル、延長可能な利用期間を提供します。
主な機能
- 01x402 決済によるインスタンス構成
- 02OpenClaw ゲートウェイと HTTPS API
- 03ウェブターミナルと Solana ウォレット
- 04インスタンスの一覧・管理・延長
活用シーン
- 01短期タスク用の AI エージェント構成
- 02API 経由のチャットリクエスト送信
- 03ウェブターミナルからの VM アクセス
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cascade-protocol/ agentbox --skill agentboxインストール後、Claude Code で/agentboxを入力して読み込まれたか確認します。
詳細
AgentBox
x402 経由で $5 USDC(Solana)を支払い、専用の AI エージェントをプロビジョニングします。各エージェントは、HTTPS、ウェブターミナル、Solana ウォレットを備えた OpenClaw AI ゲートウェイを実行します。インスタンスの有効期間は 7 日間です(延長可能)。
ベース URL:https://api.agentbox.fyi
前提条件
npm install @x402/fetch @x402/svm @solana/kit
USDC 残高のある Solana ウォレットファイル(solana-keygen の JSON 形式:64 バイトの配列)が必要です。
1. プロビジョニング
provision.mjs を作成し、node provision.mjs /path/to/wallet.json [name] を実行します。
import { readFileSync } from "node:fs";
import { createKeyPairSignerFromBytes } from "@solana/kit";
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { registerExactSvmScheme } from "@x402/svm/exact/client";
const keypairBytes = new Uint8Array(
JSON.parse(readFileSync(process.argv[2], "utf8")),
);
const signer = await createKeyPairSignerFromBytes(keypairBytes);
const client = new x402Client();
registerExactSvmScheme(client, { signer });
const x402Fetch = wrapFetchWithPayment(fetch, client);
const res = await x402Fetch("https://api.agentbox.fyi/provision", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(process.argv[3] ? { name: process.argv[3] } : {}),
});
console.log(JSON.stringify(await res.json(), null, 2));
x402 経由で $5 USDC を自動的に支払います。名前は省略可能です(省略した場合は自動生成されます)。DNS で使用可能な形式にする必要があります。小文字の英数字とハイフンのみを使用し、3~63 文字で指定してください。
レスポンス(201):
{
"id": 12345678,
"name": "boreal-enigma",
"status": "provisioning",
"gatewayToken": "pending",
"accessToken": "eyJhbGci...",
"expiresAt": "2026-03-11T10:00:00.000Z"
}
id、name、accessToken を保存します。
2. 起動するまでポーリング
const { id, name, accessToken } = await res.json();
let instance;
for (let elapsed = 0; elapsed < 600; elapsed += 15) {
await new Promise((r) => setTimeout(r, 15000));
const poll = await fetch(`https://api.agentbox.fyi/provision/${id}`, {
headers: { Authorization: `Bearer ${accessToken}` },
});
instance = await poll.json();
console.log(`[${elapsed}s] status=${instance.status} step=${instance.provisioningStep || "-"}`);
if (instance.status === "running") break;
if (instance.status === "error" || instance.status === "deleted") {
throw new Error(`Provisioning failed: ${instance.status}`);
}
}
15 秒ごとにポーリングします。起動には 2~4 分かかります。10 分経過するとタイムアウトします。
ステータスの遷移:provisioning -> minting -> running。minting 状態は短時間です(SATI NFT のミント処理)。レスポンスには、詳細なサブ状態(vm_created、configuring、wallet_created、openclaw_ready、services_starting)を示す provisioningStep フィールドも含まれます。
status が "running" の場合、レスポンスに実際の gatewayToken が含まれます。
{
"status": "running",
"gatewayToken": "a58310a5f1f07...",
"chatUrl": "https://boreal-enigma.agentbox.fyi/chat#token=...",
"terminalUrl": "https://boreal-enigma.agentbox.fyi/terminal/..."
}
API とのやり取りに使用する gatewayToken を保存します。
3. チャット補完
VM 上の OpenAI 互換 API を使用してメッセージを送信します。
curl -s https://NAME.agentbox.fyi/v1/chat/completions \
-H "Authorization: Bearer GATEWAY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "Hello, what can you do?"}]}'
NAME をインスタンス名に、GATEWAY_TOKEN をポーリングレスポンスの gatewayToken に置き換えます。標準的な OpenAI チャット補完の JSON が返されます(ストリーミングなし)。
各リクエストはステートレスです。複数ターンの会話では、メッセージ履歴全体を含めてください。
curl -s https://NAME.agentbox.fyi/v1/chat/completions \
-H "Authorization: Bearer GATEWAY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"messages": [
{"role": "user", "content": "What is 2+2?"},
{"role": "assistant", "content": "4"},
{"role": "user", "content": "Multiply that by 10"}
]}'
レスポンスには、例に示されているもの以外にも、追加のフィールド(ownerWallet、ip、vmWallet、nftMint、terminalToken、provisioningStep、createdAt)が含まれます。これらは必要に応じて保存できますが、安全に無視することもできます。
ポーリングレスポンスの terminalUrl を開くと、VM にシェルアクセスできるウェブターミナルが表示されます。
延長
$5 USDC を支払うと、さらに 7 日間延長できます。ステップ 1 の x402 クライアントを再利用してください。
const res = await x402Fetch("https://api.agentbox.fyi/provision/INSTANCE_ID/extend", {
method: "POST",
headers: { Authorization: "Bearer ACCESS_TOKEN" },
});
新しい expiresAt と accessToken を含む更新済みインスタンスが返されます。有効期間の上限は 90 日間です。
インスタンス一覧
Ed25519 署名を使って、ウォレットが所有するすべてのインスタンスを一覧表示します。
import { readFileSync } from "node:fs";
import { createKeyPairFromBytes, signBytes, getAddressFromPublicKey } from "@solana/kit";
const keypairBytes = new Uint8Array(JSON.parse(readFileSync("/path/to/wallet.json", "utf8")));
const keyPair = await createKeyPairFromBytes(keypairBytes);
const address = await getAddressFromPublicKey(keyPair.publicKey);
const timestamp = Date.now();
const message = `List AgentBox instances\nTimestamp: ${timestamp}`;
const signature = await signBytes(keyPair.privateKey, new TextEncoder().encode(message));
const sig64 = Buffer.from(signature).toString("base64");
const res = await fetch(
`https://api.agentbox.fyi/provision?wallet=${address}&signature=${encodeURIComponent(sig64)}×tamp=${timestamp}`
);
稼働中のインスタンスについては gatewayToken と terminalToken を含む { instances: [...] } が返されます(ウォレット署名による認証です。自分のインスタンスを一覧表示できるのはウォレットの所有者のみです)。タイムスタンプはサーバー時刻から 5 分以内である必要があります。
エラー
| HTTP | 意味 |
|---|---|
| 402 | 支払いが必要です(x402 によって自動的に処理されます) |
| 409 | インスタンス名はすでに使用されています |
| 502 | プロビジョニングに失敗しました(料金は請求されません) |
| 401 | アクセストークンがないか、無効です |
| 404 | インスタンスが見つかりません |
支払いの詳細
- ネットワーク: Solana mainnet(
solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) - 金額: 7 日間につき $5 USDC
- アセット: USDC(
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v)
プロビジョニングに失敗した場合(502)、支払いは確定されません。