Platform
Upload assets, manage sandbox variables, rebuild the sandbox image, and check integrations, analytics, budget, and usage from the terminal.
Everything on this page drives the same /v1 API the dashboard uses. Install and authenticate first: Agent CLI.
Assets
agent asset stores PNG images past the sandbox they were made in, each behind a link gated on org membership, so it grants nothing by possession and is safe to paste anywhere your team reads. The primary caller is an agent that screenshotted a UI change and wants a link for its PR comment, but the same commands work from your laptop. The workflow: Add screenshots to every pull request.
agent asset upload stores a PNG (10 MiB limit) and prints only the URL, so a script or an agent can capture it directly:
$ agent asset upload schedule-grid.png
https://app.ellipsis.dev/assets/9f2c4b7d1e8a4c02b6f3a1d5e7c90842A file that is not a PNG fails before upload, and the error names what it actually is (only PNG images are supported (got what looks like JPEG)).
agent asset list shows stored assets newest first (--session <id> scopes to one session's uploads, -l/--limit caps results at up to 250); agent asset get prints one asset's metadata, or downloads its bytes with -o:
$ agent asset list --limit 2
ID FILENAME SIZE CREATED SESSION
9f2c4b7d1e8a4c02b6f3a1d5e7c90842 schedule-grid.png 312.4 KiB 2026-07-30 15:21 session_7Hq2mX4p
4c81d95f2ab74e6f90d3c7b8a1e52f04 trade-modal.png 189.7 KiB 2026-07-28 11:46 session_3Vd8nQ2j
$ agent asset get 9f2c4b7d1e8a4c02b6f3a1d5e7c90842 -o schedule-grid.png
✓ wrote schedule-grid.png (312.4 KiB)agent asset delete (alias rm) removes an asset, so its link stops resolving. A missing, foreign, or already-deleted id prints asset not found: <asset-id> and exits nonzero. An agent's own in-sandbox token cannot delete, so an agent cannot destroy the evidence it posted. Every verb accepts --json (on get, the JSON includes a short-lived download_url; fetch it immediately).
Variables
agent variable (aliases var, env) manages the variables injected into every sandbox, the store that a config's sandbox.variables entries resolve from. Values are write-only: you can set and delete them, never read them back. Injecting them into an agent: Defining the environment.
agent variable list # names and timestamps; values stay hidden
agent variable set LOG_LEVEL=debug # inline KEY=VALUE pairs (several at once)
agent variable set --from-file .env # or load from a .env or flat-JSON file
agent variable delete NPM_TOKEN # delete one variable (alias rm)set accepts inline pairs, -f/--from-file, or both; file pairs load first, so an inline pair with the same name wins.
$ agent variable set NPM_TOKEN=npm_9vKq3xTd8wYz SENTRY_DSN=https://4b7d@o1192.ingest.sentry.io/6301
✓ stored 2 variable(s) (values hidden): NPM_TOKEN, SENTRY_DSN
NAME CREATED UPDATED
NPM_TOKEN 2026-07-31 09:40 2026-07-31 09:40
SENTRY_DSN 2026-07-31 09:40 2026-07-31 09:40An agent's own in-sandbox token can list variable names but not set or delete them, so a prompt-injected agent cannot overwrite your credentials.
Rebuild
agent session start --rebuild skips the sandbox image cache for that session: a fresh full build (image layers, clones, image.setup), whose snapshot then refreshes the cache for later sessions. Combined with a verification prompt, this tests a config's environment definition end to end; the session streams every provisioning phase, and the full log persists as a download.
agent session start --config-file agents/ci-triager.yaml --rebuild --watch "Verify this environment: run gh auth status and pytest --version."The rest of the workflow: Testing the environment.
Integrations
agent integration shows which integrations are connected, in one table, so you know what a config can name before writing it:
$ agent integration
INTEGRATION STATUS DETAILS
github connected splitshift-hq (Organization), 5 repos, all repositories
slack connected Splitshift (T04J8K2LM)
linear connected 2 teams, 2 enabled
jira not connected
sentry connected splitshift
List resources: agent github repos, agent slack channels, agent linear teams, agent sentry orgsOne command per resource lists what a connected integration can reach:
agent github repos # repositories the GitHub installation can reach
agent github members # org roster, with linked Slack identities
agent slack channels # channels in the connected Slack workspace
agent slack members # workspace members, with linked GitHub identities
agent linear teams # Linear teams, marking which have Ellipsis enabled
agent sentry orgs # connected Sentry organizationsagent github members lists the logins that --author filters accept elsewhere in the CLI, and the member tables show cross-linked identities both ways: a GitHub member's linked Slack user id, a Slack member's linked GitHub login. A Slack or Linear command against an unconnected workspace says so (Slack is not connected. Connect it in the Ellipsis dashboard, then retry.); Sentry lists nothing, because for Sentry the organization is the connection. Every command accepts --json.
Analytics and budget
agent analytics answers the same questions as the dashboard's analytics page, from the terminal: pull request and review activity across the org, human and bot alike.
agent analytics reviewer --account-type bot # which apps review the most PRs
agent analytics pr --days 90 # PR volume and trend, human vs bot
agent analytics review --repo splitshift-api # review totals, verdicts, top reviewers$ agent analytics reviewer --account-type bot --limit 3
reviewer reviews approved changes req comments lines reviewed
ellipsis[bot] 214 168 31 492 61,408
dependabot[bot] 57 0 0 57 4,912
vercel[bot] 31 0 0 31 0All three take the window flags --days <n> (default 30, mutually exclusive with --since) and --since/--until, which accept ISO 8601 or today, yesterday, N days ago. --account-type is all, user (humans), or bot (apps and agents). reviewer adds -r/--repo (owner/name, repeatable), --sort reviews|approved|changes-requested|comments|lines, and -l/--limit (default 10). pr adds --status open|draft|merged|closed (repeatable). review adds -r/--repo (bare name, repeatable), --author (reviewer login, repeatable), --review-state APPROVED|CHANGES_REQUESTED|COMMENTED (repeatable), and -l/--limit.
agent budget shows this period's spend against the account budget, and agent usage breaks the period's tokens and cost down by model. What the numbers mean and how limits work: Billing.
$ agent budget
period: monthly
spent: $37.41 of $100.00 (37.4%)
remaining: $62.59
pause at limit: yes
$ agent usage
period: 2026-07-02 → 2026-07-31
tokens: 9,381,204
cost: $41.62
by model:
claude-opus-5 6,942,310 $33.78
claude-haiku-4-5-20251001 2,438,894 $7.84Both accept --json for the raw numbers, so a cron job can watch spend with agent budget --json | jq .fraction_used.