Skip to main content
The Arc Studio CLI brings Arc Studio to the command line. The agent, inference, contract pipeline, and sandbox stay server-side, so the CLI is a thin client: you send a prompt and files, and you get back deployed addresses, diffs, and a live preview. It works two ways. Run 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:
Authenticate with a browser device-link flow. The page you authorize mints a revocable personal access token, stored in the macOS Keychain (or ~/.arc-studio/credentials.json with 0600 permissions on other platforms):
Pass --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:
Responses stream as they’re generated, alongside a live task checklist and the agent’s file and command activity. Deployments and the preview URL are surfaced at the end of each turn, and plan-mode questions appear as an interactive picker. Type / 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:
Ask for the outcome rather than the commands, for example: “write and deploy an ERC-20 called DEMO on Arc testnet, then pull the contracts into this repo.” Your agent runs the turn, waits for it, and reports deployed addresses, what changed, and a link to the workspace. Any other agent or script can drive Arc Studio through the same command the skill uses underneath:
Add --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.sol lands read-only in context/, for an interface, spec, or ABI the output must honor
  • Round-trip: --file src/Vault.sol:contracts/Vault.sol lands at that workspace path, the agent edits it in place, and you get it back with real before and after diffs
Destinations are sandbox-relative. The sandbox is a Vite and Foundry app, so Solidity belongs under 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:
Bring artifacts back with 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 attached run 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:
Prose, tool activity, and the task list stream as ACP updates, and each turn ends with a summary of deployments, the workspace link, and files changed. Files you @-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.