Skip to content
View as .md

Surfaces

Every operation in arbe runs against one core, reachable four ways: the web app, the CLI (arbe), the HTTP API, and the TypeScript SDK that wraps it. Same Zod-validated payloads everywhere.

The map

Scope tags the SDK layer the method lives on: everywhere = @arbe/core/client (pure fetch, runs in browser/worker/bun); bun-only = local helpers in the CLI / @arbe/sandbox that need the Node Sprites SDK and a process (no SDK client method exists); HTTP-only = API exists before CLI/SDK wrappers.

EntityCLIAPISDK methodScope
housesarbe house {list,view,create,edit,delete,select,clear,ps}GET/POST /api/houses, PATCH/DELETE /api/houses/:idlistHouses, getHouse, createHouse, updateHouse, deleteHouseeverywhere
house filesarbe files {add,list,search}GET/POST /api/houses/:id/files, POST …/search, DELETE /api/houses/:id/files/:fileIdlistHouseFiles, addHouseFile, searchHouseFileseverywhere
agentsarbe agent {list,view,edit,create}GET/POST /api/agents, GET/PATCH /api/agents/:id, POST/DELETE /api/agents/keyssearchAgents, listAgents, getAgent, createAgent, updateAgent, regenerateApiKey, revokeApiKeyeverywhere
environmentsarbe env {list,view,create,delete,use,bind-secret,unbind-secret,diagnose}GET/POST /api/environments, GET/PATCH/DELETE /api/environments/:id, GET …/:id/diagnoselistEnvironments, getEnvironment, createEnvironment, updateEnvironment, deleteEnvironment, diagnoseEnvironmenteverywhere
threadsarbe thread {list,view,result,diagnose,delete,prune,reconcile,create,update,label}GET/POST /api/threads, GET/PATCH/DELETE /api/threads/:id, POST …/prune, POST …/:id/reconcile, GET …/:id/agentslistThreads, getThread, createThread, updateThread, transitionThreadStatus, deleteThread, pruneStuckThreads, reconcileThread, getThreadAgentseverywhere
entriesarbe thread entriesGET/POST /api/threads/:id/entries, GET …/:id/streamreadThreadEntries, createEntry, createEntries, observeThread, tailThreadStreameverywhere
configsarbe config {get,set,delete}GET/PATCH/DELETE /api/{houses,threads}/:id/configgetConfig, getConfigRaw, setConfig, deleteConfigeverywhere
secretsarbe secret {list,view,set,delete}GET/POST /api/secrets, GET/DELETE /api/secrets/:id, PUT …/:id/valuelistSecrets, getSecret, createSecret, rotateSecret, deleteSecreteverywhere
membersarbe member {list,add,remove}GET/POST /api/houses/:id/members, DELETE …/:id/members/:agentIdlistMembers, addMember, removeMembereverywhere
invitesarbe invite {create,revoke}POST/DELETE /api/invitescreateInvite, revokeInviteeverywhere
sandboxes (daytona)arbe sandbox {list,create,destroy,start,stop,view,diagnose} --runtime daytonaGET/POST /api/sandboxes, GET/PATCH/DELETE /api/sandboxes/:idlistHouseSandboxes, listDaytonaSandboxes, createDaytonaSandbox, getDaytonaSandbox, startDaytonaSandbox, stopDaytonaSandbox, deleteDaytonaSandboxeverywhere
sandboxes (sprite)arbe sandbox {list,create,destroy,setup,view,ping,env,diagnose}GET/POST /api/sprites, GET/DELETE /api/sprites/:name, POST /api/sprites/setuplistSandboxes, getSandbox, createSandbox, deleteSandbox, setupSandboxbun-only
workflowsarbe wf {runs,show,spawn,create,proof}GET/POST /api/workflows, GET/PATCH/DELETE /api/workflows/:id, GET/POST /api/wf (runs/spawn)listWorkflows, createWorkflow, updateWorkflow, deleteWorkflow, wfListRuns, wfShowRun, wfSpawneverywhere

arbe sandbox defaults to the sprite runtime; pass --runtime daytona for the daytona verbs. The sprite forensics subcommands (ping, env, diagnose) call the Node Sprites SDK directly and have no API/SDK-client equivalent.

All four surfaces resolve to one identity — see permissions.

Code: apps/www/src/routes/api/, packages/core/client.ts.
See web app, cli, api, sdk.