Sandbox'lar
Betiklerinizin ve yapay zekâ ajanlarınızın çalıştırdığı kod için izole Linux mikro sanal makineleri. Bir sandbox yaklaşık bir saniyede açılır, Python, Node.js veya bash çalıştırır ve sunucularınızla aynı bakiyeden saniye bazında ücretlendirilir.
Sandbox nedir
API veya MCP üzerinden oluşturduğunuz, birkaç saniye ya da birkaç gün kullanıp sildiğiniz küçük bir Linux makinesi. Giden internet çalışır (pip install, npm install, git clone). Gelen port ve SSH yoktur: komutlar ve dosyalar API üzerinden gider. İçinde: pip ile Python 3.12, npm ile Node.js 22, bash, git ve curl.
İki mod
Tarifeler
| Tarife | vCPU | RAM | Disk | Ağ | Saatlik | Kalıcı, aylık en fazla |
|---|---|---|---|---|---|---|
| micro | 0.25 | 512 MB | 3 GB | 50 Mbit/s | $0.0165 | $9.03 |
| small | 0.5 | 1 GB | 5 GB | 100 Mbit/s | $0.033 | $18.07 |
| standard | 1 | 2 GB | 10 GB | 200 Mbit/s | $0.066 | $36.14 |
| plus | 2 | 4 GB | 15 GB | 300 Mbit/s | $0.132 | $72.27 |
| pro | 4 | 8 GB | 20 GB | 400 Mbit/s | $0.264 | $144.54 |
| max | 8 | 16 GB | 40 GB | 500 Mbit/s | $0.528 | $289.08 |
Seçtiğiniz tarifenin vCPU ve RAM'i için ödersiniz: vCPU-saat başına $0.040 ve GiB-saat başına $0.013. Güncel fiyatlar, token gerekmeden: GET /sandboxes/tariffs.
Bilinmesi gereken sınırlar
Bir komut en fazla 55 saniye çalışır; daha uzun işler arka plan görevi olarak çalışır ve sonucunu sorgularsınız. Dosyalar istek başına 5 MB'a kadar, daha büyükleri (2 GB'a kadar) tek kullanımlık indirme ve yükleme bağlantılarıyla. Bir hesap aynı anda 20 sandbox ve 2 komut çalıştırabilir.
Ortam değişkenleri
Gizli bilgileri ve ayarları env olarak iletin. Oluşturma sırasında verilirse sandbox'taki her komut için geçerlidir; exec veya run içinde verilirse yalnızca o çağrı için geçerlidir ve sandbox değerlerinin üzerine yazar. En fazla 64 değişken, değer başına 32 KB ve toplam 64 KB. Değerler şifreli saklanır, API tarafından asla döndürülmez ve günlüklere yazılmaz: yanıtlar yalnızca adları gösterir (env_keys).
API=https://api.eqvps.com/api/v1/eqvps
AUTH="Authorization: Bearer $EQVPS_API_KEY"
# env for the whole sandbox (only the names come back, as env_keys)
SB=$(curl -s -X POST $API/sandboxes -H "$AUTH" -H "Content-Type: application/json" \
-d '{"tariff":"small","env":{"DB_URL":"postgres://user:pass@db/app","MODE":"test"}}' | jq -r .id)
# env for one call, merged over the sandbox env
curl -s -X POST $API/sandboxes/$SB/exec -H "$AUTH" -H "Content-Type: application/json" \
-d '{"command":"echo $MODE $RUN_ID","env":{"RUN_ID":"42"}}'Harcama sınırı
Varsayılan olarak sandbox'ların harcama sınırı yoktur. Panelden veya PUT /sandboxes/budget ile günlük ve aylık bir tavan belirleyebilirsiniz. Tavana ulaşıldığında yeni sandbox'lar 429 budget_exceeded alır, çalışan geçici olanlar silinir ve kalıcı olanlar diskleri korunarak duraklatılır. Tavanı yükselttiğinizde veya yeni bir gün ya da ay başladığında (UTC) devam ederler.
# daily cap $5, monthly cap $50 (null = no cap)
curl -s -X PUT $API/sandboxes/budget -H "$AUTH" -H "Content-Type: application/json" \
-d '{"daily_usd":5,"monthly_usd":50}'
# spent today / this month and when the caps reset (UTC)
curl -s $API/sandboxes/budget -H "$AUTH"Hızlı başlangıç: MCP (Claude Code, Cursor ve diğer istemciler)
MCP sunucusunu bir kez bağlayın, sonra ajana ne istediğinizi kendi cümlelerinizle söyleyin. Sandbox araçları: create_sandbox, run_code, exec_command, get_task, kill_task, get_upload_url, get_download_url, list_sandboxes, get_sandbox, kill_sandbox, sandbox_pricing.
claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp \
--header "Authorization: Bearer $EQVPS_API_KEY"Küçük bir sandbox oluştur, Python'da print(2 + 2) çalıştır, çıktıyı göster ve sandbox'ı sil.Hızlı başlangıç: Python ve Node.js'ten REST
Ek paket gerekmez. Token'ınızı EQVPS_API_KEY ortam değişkenine koyun (nasıl alınacağı: “Hesabınızı bağlama”).
# first_sandbox.py — Python 3.8+, standard library only
import json, os, urllib.request
API = "https://api.eqvps.com/api/v1/eqvps"
KEY = os.environ["EQVPS_API_KEY"]
def call(method, path, body=None):
req = urllib.request.Request(API + path, method=method,
data=json.dumps(body).encode() if body is not None else None,
headers={"Authorization": "Bearer " + KEY,
"Content-Type": "application/json", "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=90) as r: # HTTPError on 401/402/…
return json.loads(r.read() or b"{}")
sb = call("POST", "/sandboxes", {"tariff": "small"})
try:
r = call("POST", f"/sandboxes/{sb['id']}/run",
{"language": "python", "code": "print(2 + 2)"})
print(r["exit_code"], r["stdout"]) # 0 4
finally:
call("DELETE", f"/sandboxes/{sb['id']}")// first_sandbox.mjs — Node.js 18+ (built-in fetch), run: node first_sandbox.mjs
const API = "https://api.eqvps.com/api/v1/eqvps";
const KEY = process.env.EQVPS_API_KEY;
async function call(method, path, body) {
const r = await fetch(API + path, {
method,
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json", Accept: "application/json" },
body: body ? JSON.stringify(body) : undefined,
});
const data = await r.json();
if (!r.ok) throw new Error(`${r.status} ${data.error ?? ""} ${data.message ?? ""}`);
return data;
}
const sb = await call("POST", "/sandboxes", { tariff: "small" });
try {
const r = await call("POST", `/sandboxes/${sb.id}/run`, { language: "node", code: "console.log(2 + 2)" });
console.log(r.exit_code, r.stdout); // 0 4
} finally {
await call("DELETE", `/sandboxes/${sb.id}`);
}Python ve TypeScript için SDK
Kütüphane mi tercih edersiniz? Python ve TypeScript paketleri aynı REST çağrılarını yapar, 429 ve 503'te kendileri yeniden dener ve blok bitince sandbox'ı her zaman siler. Kurulum ve örnek:
# pip install -U eqvps https://pypi.org/project/eqvps/ (0.2.0+ for env)
# "eqvps sandbox create" = Sandbox.create() here · create_sandbox in MCP · POST /sandboxes in REST (no CLI)
from eqvps import Sandbox
# EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
with Sandbox.create(tariff="small", env={"DB_URL": "postgres://user:pass@db/app"}) as sb:
r = sb.run("print(2 + 2)")
print(r.stdout, r.exit_code) # "4\n" 0
sb.upload("/root/data.csv", "a,b\n1,2\n")
print(sb.exec("wc -l /root/data.csv").stdout)
print(sb.exec("echo $RUN_ID", env={"RUN_ID": "42"}).stdout) # env for one call
# the sandbox is deleted when the block exits, also on errors// npm i @eqvps/sdk@latest https://www.npmjs.com/package/@eqvps/sdk (0.2.0+ for env)
import { Sandbox } from "@eqvps/sdk";
// EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
await Sandbox.with({ tariff: "small", env: { DB_URL: "postgres://user:pass@db/app" } }, async (sb) => {
const r = await sb.run("print(2 + 2)");
console.log(r.stdout, r.exit_code); // "4\n" 0
console.log((await sb.exec("echo $RUN_ID", { env: { RUN_ID: "42" } })).stdout); // env for one call
}); // deleted afterwards, also on errorsHesabınızı bağlama: token, yapılandırma, ilk sandbox, bakiye →
Yorumlar
Henüz yorum yok. İlk olun.