CLI Commands

The Caged CLI organizes commands into groups. The main sandbox management commands are under caged sandboxes, with shortcut aliases available for convenience.

caged login

Authenticate with your Caged account via browser.

caged login

Opens your browser to caged.dev/auth/device where you approve the CLI access. The CLI automatically receives your credentials once approved — no manual key copying needed.

$ caged login
Logging in to Caged...

  Your code: ABCD-EFGH

  Opening browser to: https://caged.dev/auth/device?code=ABCD-EFGH

  Waiting for authorization...

  Logged in as josh@bytangle.com
  Credentials saved to ~/.config/caged/config.json

Manual login (API key)

If you prefer to paste an API key directly (CI environments, headless servers):

caged login --manual

Prompts for your API URL and API key interactively. Stores credentials at ~/.config/caged/config.json.

caged up

Create a sandbox from .caged.yaml in the current directory.

caged up [flags]
Flag Description Default
--template Override base image from config
--cpus Override vCPU count from config
--memory Override memory in MB from config
--disk Override disk in GB from config
--repo Git repo URL to clone
--repo-token PAT/OAuth token for private repos
--repo-branch Branch to checkout main
--repo-commit Specific commit SHA
--repo-subdir Monorepo subdirectory to extract
--budget Max spend in USD
--network Network mode: full, none, allowlist from config
--allowlist Comma-separated host allowlist
--env Environment variables (KEY=VAL,KEY2=VAL2)
--packages Packages to pre-install (comma-separated)
--agents AI agents to install (claude, aider, codex)
--config Path to config file .caged.yaml

Examples:

# From .caged.yaml in current directory
caged up

# Override template and budget
caged up --template python-312 --budget 10

# Clone a private repo with Claude Code
caged up --template node-20 \
  --repo https://github.com/your-org/private-repo \
  --repo-token $GITHUB_TOKEN \
  --agents claude

# Clone a specific branch
caged up --repo https://github.com/user/project --repo-branch develop

# With custom config file
caged up --config ./sandbox.yaml

caged sandboxes

The sandboxes command group manages sandbox lifecycle.

caged sandboxes list

List all sandboxes. Alias: caged list, caged ls.

caged sandboxes list [flags]
Flag Description Default
--format Output format: table, json table

Examples:

caged sandboxes list
caged sandboxes list --format json

Table output:

ID              STATUS    TEMPLATE     CPUs  MEMORY   CREATED
cage_abc123     running   node-20      2     1024MB   2024-01-15T10:30:00Z
cage_def456     sleeping  python-3.12  4     2048MB   2024-01-14T08:00:00Z

JSON output:

[
  {
    "id": "cage_abc123",
    "status": "running",
    "template": "node-20",
    "cpus": 2,
    "memory_mb": 1024,
    "created_at": "2024-01-15T10:30:00Z"
  }
]

caged sandboxes create

Create and start a new sandbox. Alias: caged run.

caged sandboxes create [flags]
Flag Description Default
--template Base image node-20
--cpus vCPU count 2
--memory Memory in MB 512
--disk Disk in GB 5
--network Network mode: full, none, allowlist full
--allowlist Comma-separated host allowlist
--repo Git repo to clone
--env Environment variables (KEY=VAL,KEY2=VAL2)
--budget Max spend in USD

Examples:

caged sandboxes create --template node-20 --cpus 2 --memory 1024
caged sandboxes create --template python-3.12 --budget 5 --repo https://github.com/user/project
caged sandboxes create --network allowlist --allowlist "registry.npmjs.org,github.com"

caged sandboxes connect

Connect to a running sandbox's interactive terminal. Alias: caged connect.

caged sandboxes connect <sandbox-id>

Opens a full interactive terminal (real PTY over WebSocket) — like ssh into the sandbox. Output streams live, so long-running commands and AI agents show their progress in real time. Arrow keys, tab completion, Ctrl+C, colors, and terminal resizing all work.

Connected to sandbox cage_abc123 (node-20). Type 'exit' or press Ctrl+D to disconnect.
root@caged-sandbox:~# npm test
✓ All tests passed
root@caged-sandbox:~# exit

For non-interactive/scripted use, prefer caged exec.

caged sandboxes exec

Execute a single command in a sandbox and return the output. Alias: caged exec.

caged sandboxes exec <sandbox-id> <command>

Examples:

caged sandboxes exec cage_abc123 "npm test"
caged sandboxes exec cage_abc123 "cat package.json"
caged sandboxes exec cage_abc123 "git status"

caged sandboxes sleep

Pause a running sandbox. No compute charges while sleeping. Alias: caged sleep.

caged sandboxes sleep <sandbox-id>

caged sandboxes wake

Resume a sleeping sandbox. Alias: caged wake.

caged sandboxes wake <sandbox-id>

caged sandboxes destroy

Destroy a sandbox permanently. Alias: caged destroy, caged rm.

caged sandboxes destroy <sandbox-id>

caged sandboxes logs

View sandbox event logs. Alias: caged logs.

caged sandboxes logs <sandbox-id> [flags]
Flag Description
-f Follow log output in real-time
caged sandboxes logs cage_abc123
caged sandboxes logs -f cage_abc123

caged pipeline

Manage pipelines and pipeline runs.

caged pipeline list

List all pipelines for your account.

caged pipeline list [flags]
Flag Description Default
--format Output format: table, json table

Example:

caged pipeline list
caged pipeline list --format json

caged pipeline get

Get details of a specific pipeline.

caged pipeline get <pipeline-id>

caged pipeline run

Start a new run of a pipeline.

caged pipeline run <pipeline-name-or-id> [flags]
Flag Description
--env Environment variables (KEY=VAL,KEY2=VAL2)
--repo Git repository URL
--branch Git branch

Examples:

# Run a pipeline with environment variables
caged pipeline run agent-feature --env FEATURE_SPEC="Add dark mode toggle"

# Run with a specific repo
caged pipeline run ci-pipeline --repo https://github.com/org/app --branch develop

caged pipeline runs

List runs for a pipeline.

caged pipeline runs <pipeline-id> [flags]
Flag Description Default
--limit Max number of runs to return 20
--format Output format: table, json table

caged pipeline cancel

Cancel a running pipeline run.

caged pipeline cancel <pipeline-id> <run-id>

caged pipeline state

Manage the shared state store for a pipeline run. State entries allow stages to share data (analysis results, artifacts, configuration) without committing to git.

caged pipeline state list

List all state entries for a run.

caged pipeline state list <pipeline-id> <run-id> [flags]
Flag Description Default
--format Output format: table, json table

Example:

caged pipeline state list pipe-abc123 run-xyz789

Output:

KEY                TYPE      SIZE      CREATED BY    EXPIRES
analysis_results   json      1.2 KB    analyze       2026-08-09T10:05:30Z
build_config       json      256 B     setup         2026-08-09T10:04:00Z
status             string    12 B      api           2026-08-03T10:10:00Z

caged pipeline state get

Get a single state entry.

caged pipeline state get <pipeline-id> <run-id> <key>

Example:

caged pipeline state get pipe-abc123 run-xyz789 analysis_results

Output:

{
  "files": ["src/main.ts", "src/utils.ts"],
  "score": 85,
  "issues": []
}

caged pipeline state set

Create or update a state entry.

caged pipeline state set <pipeline-id> <run-id> <key> [value] [flags]
Flag Description Default
--type Value type: string, json, file, patch, artifact string
--ttl TTL in seconds (max 2592000 = 30 days) 604800 (7 days)
--mime-type MIME type for file/artifact types
-f Read value from file

Examples:

# Set a simple string
caged pipeline state set pipe-abc123 run-xyz789 status "completed"

# Set JSON data
caged pipeline state set pipe-abc123 run-xyz789 config '{"debug": true}' --type json

# Set from file
caged pipeline state set pipe-abc123 run-xyz789 report -f ./analysis-report.json --type json

# Set with custom TTL (1 hour)
caged pipeline state set pipe-abc123 run-xyz789 temp_cache '{"hot": true}' --type json --ttl 3600

# Set a file reference
caged pipeline state set pipe-abc123 run-xyz789 artifact ./dist/app.zip --type file

caged pipeline state delete

Delete a state entry.

caged pipeline state delete <pipeline-id> <run-id> <key>

Example:

caged pipeline state delete pipe-abc123 run-xyz789 temp_cache

State Limits

Limit Value
Max key length 256 characters
Max value size 1 MB
Max entries per run 100
Max total size per run 10 MB
Default TTL 7 days
Max TTL 30 days

caged mcp

Run a Model Context Protocol server over stdio, bridged to a running sandbox. MCP clients like Claude Desktop and Cursor spawn this command locally — no WebSocket setup or session tokens required.

caged mcp <sandbox-id>

Add it to your MCP client configuration:

{
  "mcpServers": {
    "caged": {
      "command": "caged",
      "args": ["mcp", "cage_abc123"]
    }
  }
}

The AI client gets sandbox tools (filesystem_read, filesystem_write, terminal_exec, git_commit, and more) that execute inside the isolated VM. The sandbox must be running — wake it with caged wake <sandbox-id> first if it's sleeping.


caged version

Print CLI version.

caged version

Shortcut Aliases

For convenience, sandbox commands have shortcuts at the top level:

Shortcut Equivalent
caged list caged sandboxes list
caged ls caged sandboxes list
caged run caged sandboxes create
caged connect <id> caged sandboxes connect <id>
caged exec <id> <cmd> caged sandboxes exec <id> <cmd>
caged destroy <id> caged sandboxes destroy <id>
caged rm <id> caged sandboxes destroy <id>
caged sleep <id> caged sandboxes sleep <id>
caged wake <id> caged sandboxes wake <id>
caged logs <id> caged sandboxes logs <id>

These shortcuts are provided for backward compatibility and convenience. Both forms work identically.


caged policy

Manage security policies (Cage Rules).

caged policy list

List all policies for your account.

caged policy list

caged policy templates

Show available policy templates.

caged policy templates

caged policy apply

Apply a built-in template to your account.

caged policy apply <template>

Templates: soc2, hipaa, dev-only, restrictive, permissive

caged policy delete

Delete a policy by ID.

caged policy delete <policy-id>

caged eval

Manage agent eval scenarios and runs (Cage Eval).

caged eval list

List all eval scenarios.

caged eval list

caged eval load

Load scenarios from a YAML file. Supports suite files (.caged-eval.yaml) and single scenario files (*.scenario.yaml).

caged eval load <file.yaml>

caged eval discover

Find eval scenario files in a directory.

caged eval discover [directory]

caged eval run

Run a specific scenario.

caged eval run <scenario-id>

caged eval flakiness

Run a scenario multiple times to detect flakiness.

caged eval flakiness <scenario-id> [--iterations 10]

caged eval regression

Detect performance regression against baseline runs.

caged eval regression <scenario-id>

caged eval runs

List run history for a scenario.

caged eval runs <scenario-id>

caged eval delete

Delete a scenario.

caged eval delete <scenario-id>
Was this page helpful?