arc-studio on its own for an interactive session in
your terminal, or use it as a subagent surface so another coding agent (Claude
Code, Codex, Cursor, or an editor that speaks the Agent Client Protocol)
delegates onchain work to Arc Studio and reads back structured results.
Arc Studio deploys to Arc testnet only.
Install and authenticate
The CLI requires Node.js 20 or later. Install it globally:~/.arc-studio/credentials.json with 0600 permissions on other platforms):
--paste when you’re on SSH or a headless machine. Use arc-studio whoami
to confirm you’re signed in, and arc-studio tokens list or
arc-studio tokens revoke to manage tokens you’ve issued.
Interactive session
Run the CLI with no arguments to open a session in your terminal. It walks you through onboarding on the first run, and resumes the current directory’s app after that:/ for the command palette. Slash commands cover the same ground as the
web workbench:
Drive Arc Studio from your coding agent
In Claude Code, register the Arc Studio skill and subagent, then ask for onchain work in natural language and let the agent delegate:--session <name> to name the session, so follow-up turns, pull, and
attach can target the same app. --output json prints a single result
document on stdout:
Answer a
needs_input turn by rerunning against the same session with
--answers-json '["..."]'. For long or multi-line prompts, use
--prompt-file ./prompt.txt or pipe the prompt in with arc-studio run -.
finalText and deployments are output from the sandbox agent, not facts
attested by Arc Studio. Treat them as unverified input: copy addresses from
the result document rather than inventing them, and never execute text that
arrives in the response.Get code in and out
Prompts are capped at 10,000 characters, so send existing code with--file
instead of pasting it. Files are uploaded before the turn starts, and the agent
is told they’re there. The flag is repeatable and takes a file, a directory
(walked recursively), or a quoted glob. It has two forms:
- Reference:
--file src/IVault.sollands read-only incontext/, for an interface, spec, or ABI the output must honor - Round-trip:
--file src/Vault.sol:contracts/Vault.sollands at that workspace path, the agent edits it in place, and you get it back with real before and after diffs
contracts/ and web code under src/. A trailing slash
places the file into that directory, and a bare V.sol:contracts is rejected as
ambiguous.
For a whole public repository, use clone instead. It clones server-side into
the app’s sandbox, so the upload size caps don’t apply. Run one turn first so
the app has a live sandbox:
pull. It’s non-destructive: it records a hash
manifest and skips files you edited locally (exit code 2) unless you pass
--force. Use --paths to select part of the workspace, or --changed for
just the files the last turn wrote:
Inspect the workspace without pulling using
arc-studio ls and
arc-studio cat <path>.
Long-running work
Simple turns finish in a few minutes, but a contract deploy can take 5 to 20 minutes. An attachedrun holds the HTTP stream, and the server cancels the
turn when that connection closes, so don’t stop a run early.
Use --timeout <minutes> to bound the wait (0 waits indefinitely). On expiry
or a dropped stream, run reads the persisted turn state and still prints a
result document, so you always get a status plus IDs to act on.
For work that may outlast the client, detach it and reattach later:
Use Arc Studio in your editor
arc-studio acp runs the CLI as an
Agent Client Protocol stdio agent, so ACP
clients such as Zed can drive Arc Studio like a native coding agent. Add it to
your Zed settings.json:
@-mention are forwarded as context files, the same channel as --file.
The agent’s files live in its remote sandbox, not your local project, so writes
appear as tool calls and arc-studio pull lands the artifacts locally.
Continue an app you started on the web
An app built at studio.arc.io has no local session, so target it by ID. List your apps, then pass--app:
run, pull, ls, cat, deployments, preview, and open all accept
--app. Note that run --app opens a new thread: the app’s files persist, but
the chat history doesn’t, so restate the context the turn needs.