> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runloop.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Runloop CLI

> Explore, experiment with, and test the Runloop API using the Runloop CLI.

The Runloop CLI (`rli`) provides both an interactive terminal UI and traditional CLI commands for managing your Runloop resources.

<CardGroup cols={2}>
  <Card title="npm Package" icon="npm" href="https://www.npmjs.com/package/@runloop/rl-cli">
    @runloop/rl-cli
  </Card>

  <Card title="GitHub Repository" icon="github" href="https://github.com/runloopai/rl-cli">
    runloopai/rl-cli
  </Card>
</CardGroup>

## Installation

<CodeGroup>
  ```bash npm theme={null}
  npm install -g @runloop/rl-cli
  ```

  ```bash yarn theme={null}
  yarn global add @runloop/rl-cli
  ```

  ```bash pnpm theme={null}
  pnpm add -g @runloop/rl-cli
  ```
</CodeGroup>

## Setup

Configure your API key:

```bash theme={null}
export RUNLOOP_API_KEY=your_api_key_here
```

<Tip>
  Get your API key from the [Settings page](https://platform.runloop.ai/settings#api-keys) in the Runloop Dashboard.
</Tip>

## Quick Start

<Tabs>
  <Tab title="Interactive Mode">
    Launch the interactive UI with a beautiful terminal interface:

    ```bash theme={null}
    rli
    ```

    Navigate with arrow keys, select with Enter, and manage all your resources visually.

    <Frame>
      <img src="https://raw.githubusercontent.com/runloopai/rl-cli/main/misc/demo.gif" alt="Runloop CLI Interactive Mode" />
    </Frame>

    ### Search Devboxes

    Press `/` to search and filter through your devboxes by name or ID.

    <Frame>
      <img src="https://raw.githubusercontent.com/runloopai/rl-cli/main/misc/rli-demo-search.gif" alt="Search devboxes in interactive mode" />
    </Frame>

    ### SSH to Devbox

    From the interactive menu, select a devbox and choose **SSH** to open a secure shell session directly into your devbox. The CLI handles all the SSH key setup and connection details automatically.

    <Frame>
      <img src="https://raw.githubusercontent.com/runloopai/rl-cli/main/misc/rli-ssh-demo.gif" alt="SSH into a Devbox" />
    </Frame>
  </Tab>

  <Tab title="CLI Mode">
    Use traditional commands for scripting and automation:

    ```bash theme={null}
    # List all devboxes
    rli devbox list --output json
    ```

    ```json Example Output theme={null}
    [
      {
        "id": "dbx_1234567890",
        "name": "my-devbox",
        "status": "running",
        "blueprint_id": "bpt_abcdef"
      }
    ]
    ```

    ```bash theme={null}
    # Create a new devbox
    rli devbox create --name my-devbox --blueprint my-blueprint
    ```

    ```text Example Output theme={null}
    dbx_1234567890
    ```

    ```bash theme={null}
    # Execute a command in a devbox
    rli devbox exec dbx_1234567890 echo "Hello World"
    ```

    ```text Example Output theme={null}
    Hello World
    ```

    ```bash theme={null}
    # SSH into a devbox
    rli devbox ssh dbx_1234567890
    ```
  </Tab>
</Tabs>

## Command Groups

<CardGroup cols={2}>
  <Card title="Devbox" icon="server" href="#devbox-commands">
    Create, manage, and interact with devboxes
  </Card>

  <Card title="Benchmark Job" icon="chart-bar" href="#benchmark-job-commands">
    Run and manage orchestrated benchmarks
  </Card>

  <Card title="Snapshot" icon="camera" href="#snapshot-commands">
    Create and manage devbox snapshots
  </Card>

  <Card title="Blueprint" icon="diagram-project" href="#blueprint-commands">
    Manage reusable devbox templates
  </Card>

  <Card title="Object" icon="box-archive" href="#object-commands">
    Upload and manage file objects
  </Card>
</CardGroup>

## Command Reference

### Devbox Commands

<AccordionGroup>
  <Accordion title="create" icon="plus">
    Create a new devbox

    ```bash theme={null}
    rli devbox create
    ```

    <ParamField query="name" type="string">
      Devbox name
    </ParamField>

    <ParamField query="template" type="string">
      Snapshot ID to use (alias: --snapshot)
    </ParamField>

    <ParamField query="snapshot" type="string">
      Snapshot ID to use
    </ParamField>

    <ParamField query="blueprint" type="string">
      Blueprint name or ID to use
    </ParamField>

    <ParamField query="resources" type="string">
      Resource size (X\_SMALL, SMALL, MEDIUM, LARGE, X\_LARGE, XX\_LARGE)
    </ParamField>

    <ParamField query="architecture" type="string">
      Architecture (arm64, x86\_64)
    </ParamField>

    <ParamField query="entrypoint" type="string">
      Entrypoint command to run
    </ParamField>

    <ParamField query="launch-commands" type="string[]">
      Initialization commands to run on startup
    </ParamField>

    <ParamField query="env-vars" type="string[]">
      Environment variables (format: KEY=value)
    </ParamField>

    <ParamField query="secrets" type="string[]">
      Secrets to inject as environment variables (format: ENV\_VAR=SECRET\_NAME)
    </ParamField>

    <ParamField query="code-mounts" type="string[]">
      Code mount configurations (JSON format)
    </ParamField>

    <ParamField query="idle-time" type="string">
      Idle time in seconds before idle action
    </ParamField>

    <ParamField query="idle-action" type="string">
      Action on idle (shutdown, suspend)
    </ParamField>

    <ParamField query="available-ports" type="string[]">
      Available ports
    </ParamField>

    <ParamField query="root" type="boolean">
      Run as root
    </ParamField>

    <ParamField query="user" type="string">
      Run as this user (format: username:uid)
    </ParamField>

    <ParamField query="network-policy" type="string">
      Network policy ID to apply
    </ParamField>

    <ParamField query="tunnel" type="string">
      Tunnel authentication mode (open, authenticated)
    </ParamField>

    <ParamField query="gateways" type="string[]">
      Gateway configurations (format: ENV\_PREFIX=gateway\_id\_or\_name,secret\_id\_or\_name)
    </ParamField>

    <ParamField query="mcp" type="string[]">
      MCP configurations (format: ENV\_VAR\_NAME=mcp\_config\_id\_or\_name,secret\_id\_or\_name)
    </ParamField>
  </Accordion>

  <Accordion title="list" icon="list">
    List all devboxes

    ```bash theme={null}
    rli devbox list
    ```

    <ParamField query="status" type="string">
      Filter by status (initializing, running, suspending, suspended, resuming, failure, shutdown)
    </ParamField>

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>
  </Accordion>

  <Accordion title="delete" icon="trash">
    Shutdown a devbox

    ```bash theme={null}
    rli devbox delete <id>
    ```
  </Accordion>

  <Accordion title="exec" icon="terminal">
    Execute a command in a devbox

    ```bash theme={null}
    rli devbox exec <id> <command...>
    ```

    <ParamField query="shell-name" type="string">
      Shell name to use (optional)
    </ParamField>
  </Accordion>

  <Accordion title="upload" icon="upload">
    Upload a file to a devbox

    ```bash theme={null}
    rli devbox upload <id> <file>
    ```

    <ParamField query="path" type="string">
      Target path in devbox
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get devbox details

    ```bash theme={null}
    rli devbox get <id>
    ```
  </Accordion>

  <Accordion title="suspend" icon="pause">
    Suspend a devbox

    ```bash theme={null}
    rli devbox suspend <id>
    ```
  </Accordion>

  <Accordion title="resume" icon="play">
    Resume a suspended devbox

    ```bash theme={null}
    rli devbox resume <id>
    ```
  </Accordion>

  <Accordion title="shutdown" icon="power-off">
    Shutdown a devbox

    ```bash theme={null}
    rli devbox shutdown <id>
    ```
  </Accordion>

  <Accordion title="ssh" icon="terminal">
    SSH into a devbox

    ```bash theme={null}
    rli devbox ssh <id>
    ```

    <ParamField query="config-only" type="boolean">
      Print SSH config only
    </ParamField>

    <ParamField query="no-wait" type="boolean">
      Do not wait for devbox to be ready
    </ParamField>

    <ParamField query="timeout" type="string" default="180">
      Timeout in seconds to wait for readiness
    </ParamField>

    <ParamField query="poll-interval" type="string" default="3">
      Polling interval in seconds while waiting
    </ParamField>
  </Accordion>

  <Accordion title="scp" icon="copy">
    Copy files to/from a devbox using scp (e.g. rli devbox scp dbx\_id:/remote ./local)

    ```bash theme={null}
    rli devbox scp <src> <dst>
    ```

    <ParamField query="scp-options" type="string">
      Additional scp options (quoted)
    </ParamField>
  </Accordion>

  <Accordion title="rsync" icon="rotate">
    Sync files to/from a devbox using rsync (e.g. rli devbox rsync dbx\_id:/remote ./local)

    ```bash theme={null}
    rli devbox rsync <src> <dst>
    ```

    <ParamField query="rsync-options" type="string">
      Additional rsync options (quoted)
    </ParamField>
  </Accordion>

  <Accordion title="tunnel" icon="network-wired">
    Create a port-forwarding tunnel to a devbox

    ```bash theme={null}
    rli devbox tunnel <id> <ports>
    ```

    <ParamField query="open" type="boolean">
      Open the tunnel URL in browser automatically
    </ParamField>
  </Accordion>

  <Accordion title="read" icon="file">
    Read a file from a devbox using the API

    ```bash theme={null}
    rli devbox read <id>
    ```

    <ParamField query="remote" type="string">
      Remote file path to read from the devbox
    </ParamField>
  </Accordion>

  <Accordion title="write" icon="pencil">
    Write a file to a devbox using the API

    ```bash theme={null}
    rli devbox write <id>
    ```

    <ParamField query="input" type="string">
      Local file path to read contents from
    </ParamField>

    <ParamField query="remote" type="string">
      Remote file path to write to on the devbox
    </ParamField>
  </Accordion>

  <Accordion title="download" icon="download">
    Download a file from a devbox

    ```bash theme={null}
    rli devbox download <id>
    ```

    <ParamField query="file-path" type="string">
      Path to the file in the devbox
    </ParamField>
  </Accordion>

  <Accordion title="exec-async" icon="terminal">
    Execute a command asynchronously on a devbox

    ```bash theme={null}
    rli devbox exec-async <id> <command...>
    ```

    <ParamField query="shell-name" type="string">
      Shell name to use (optional)
    </ParamField>
  </Accordion>

  <Accordion title="get-async" icon="clock">
    Get status of an async execution

    ```bash theme={null}
    rli devbox get-async <id> <execution-id>
    ```
  </Accordion>

  <Accordion title="send-stdin" icon="keyboard">
    Send stdin to a running async execution

    ```bash theme={null}
    rli devbox send-stdin <id> <execution-id>
    ```

    <ParamField query="text" type="string">
      Text content to send to stdin
    </ParamField>

    <ParamField query="signal" type="string">
      Signal to send (EOF, INTERRUPT)
    </ParamField>
  </Accordion>

  <Accordion title="logs" icon="scroll">
    View devbox logs

    ```bash theme={null}
    rli devbox logs <id>
    ```
  </Accordion>
</AccordionGroup>

### Benchmark Job Commands

Run orchestrated benchmarks at cloud scale. See [Orchestrated Benchmarks](/docs/benchmarks/orchestrated-benchmarks) for detailed usage.

<AccordionGroup>
  <Accordion title="run" icon="play">
    Run a benchmark job with one or more agents

    ```bash theme={null}
    rli benchmark-job run \
      --agent "claude-code:claude-sonnet-4-6" \
      --benchmark "terminal-bench-2" \
      --n-concurrent-trials 100 \
      -n "my-benchmark-run"
    ```

    <ParamField query="agent" type="string[]" required>
      Agent(s) to run. Format: `agent:model` (e.g., `claude-code:claude-sonnet-4-6`). Can specify multiple.
    </ParamField>

    <ParamField query="benchmark" type="string">
      Benchmark ID or name to run
    </ParamField>

    <ParamField query="scenarios" type="string[]">
      Scenario IDs to run (alternative to --benchmark)
    </ParamField>

    <ParamField query="job-name" type="string">
      Name for this job
    </ParamField>

    <ParamField query="env-vars" type="string[]">
      Environment variables (format: KEY=value)
    </ParamField>

    <ParamField query="secrets" type="string[]">
      Secrets to inject (format: ENV\_VAR=SECRET\_NAME)
    </ParamField>

    <ParamField query="timeout" type="string" default="7200">
      Agent timeout in seconds
    </ParamField>

    <ParamField query="n-attempts" type="string" default="1">
      Number of attempts per scenario
    </ParamField>

    <ParamField query="n-concurrent-trials" type="string" default="10">
      Number of concurrent trials
    </ParamField>

    <ParamField query="timeout-multiplier" type="string" default="1.0">
      Timeout multiplier
    </ParamField>

    **Supported public agents:** `claude-code`, `codex`, `opencode`, `goose`, `gemini-cli`
  </Accordion>

  <Accordion title="watch" icon="eye">
    Watch benchmark job progress in real-time (full-screen)

    ```bash theme={null}
    rli benchmark-job watch <job_id>
    ```
  </Accordion>

  <Accordion title="summary" icon="chart-simple">
    Get benchmark job summary and results

    ```bash theme={null}
    rli benchmark-job summary <job_id>
    ```

    <ParamField query="extended" type="boolean">
      Show individual scenario results
    </ParamField>
  </Accordion>

  <Accordion title="list" icon="list">
    List benchmark jobs

    ```bash theme={null}
    rli benchmark-job list
    ```

    <ParamField query="days" type="string" default="1">
      Show jobs from the last N days
    </ParamField>

    <ParamField query="all" type="boolean">
      Show all jobs (no time filter)
    </ParamField>

    <ParamField query="status" type="string">
      Filter by status (comma-separated). Valid: initializing, queued, running, completed, failed, cancelled, timeout
    </ParamField>
  </Accordion>

  <Accordion title="logs" icon="scroll">
    Download devbox logs for all scenario runs in a benchmark job

    ```bash theme={null}
    rli benchmark-job logs <job_id>
    ```

    <ParamField query="output-dir" type="string">
      Output directory for logs
    </ParamField>

    <ParamField query="run" type="string">
      Download logs for a specific benchmark run only
    </ParamField>

    <ParamField query="scenario" type="string">
      Download logs for a specific scenario run only
    </ParamField>
  </Accordion>
</AccordionGroup>

### Snapshot Commands

<AccordionGroup>
  <Accordion title="list" icon="list">
    List all snapshots

    ```bash theme={null}
    rli snapshot list
    ```

    <ParamField query="devbox" type="string">
      Filter by devbox ID
    </ParamField>

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>
  </Accordion>

  <Accordion title="create" icon="plus">
    Create a snapshot of a devbox

    ```bash theme={null}
    rli snapshot create <devbox-id>
    ```

    <ParamField query="name" type="string">
      Snapshot name
    </ParamField>
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete a snapshot

    ```bash theme={null}
    rli snapshot delete <id>
    ```
  </Accordion>

  <Accordion title="get" icon="eye">
    Get snapshot details

    ```bash theme={null}
    rli snapshot get <id>
    ```
  </Accordion>

  <Accordion title="prune" icon="code">
    Delete old snapshots for a devbox, keeping only recent ready ones

    ```bash theme={null}
    rli snapshot prune <devbox-id>
    ```

    <ParamField query="dry-run" type="boolean">
      Show what would be deleted without actually deleting
    </ParamField>

    <ParamField query="yes" type="boolean">
      Skip confirmation prompt
    </ParamField>

    <ParamField query="keep" type="string" default="1">
      Number of ready snapshots to keep
    </ParamField>
  </Accordion>

  <Accordion title="status" icon="info">
    Get snapshot operation status

    ```bash theme={null}
    rli snapshot status <snapshot-id>
    ```
  </Accordion>
</AccordionGroup>

### Blueprint Commands

<AccordionGroup>
  <Accordion title="list" icon="list">
    List all blueprints

    ```bash theme={null}
    rli blueprint list
    ```

    <ParamField query="name" type="string">
      Filter by blueprint name
    </ParamField>

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>
  </Accordion>

  <Accordion title="create" icon="plus">
    Create a new blueprint

    ```bash theme={null}
    rli blueprint create
    ```

    <ParamField query="name" type="string" required>
      Blueprint name (required)
    </ParamField>

    <ParamField query="dockerfile" type="string">
      Dockerfile contents
    </ParamField>

    <ParamField query="dockerfile-path" type="string">
      Dockerfile path
    </ParamField>

    <ParamField query="system-setup-commands" type="string[]">
      System setup commands
    </ParamField>

    <ParamField query="resources" type="string">
      Resource size (X\_SMALL, SMALL, MEDIUM, LARGE, X\_LARGE, XX\_LARGE)
    </ParamField>

    <ParamField query="architecture" type="string">
      Architecture (arm64, x86\_64)
    </ParamField>

    <ParamField query="available-ports" type="string[]">
      Available ports
    </ParamField>

    <ParamField query="root" type="boolean">
      Run as root
    </ParamField>

    <ParamField query="user" type="string">
      Run as this user (format: username:uid)
    </ParamField>

    <ParamField query="metadata" type="string[]">
      Metadata tags (format: key=value)
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get blueprint details by name or ID (IDs start with bpt\_)

    ```bash theme={null}
    rli blueprint get <name-or-id>
    ```
  </Accordion>

  <Accordion title="logs" icon="scroll">
    Get blueprint build logs by name or ID (IDs start with bpt\_)

    ```bash theme={null}
    rli blueprint logs <name-or-id>
    ```
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete a blueprint by ID

    ```bash theme={null}
    rli blueprint delete <id>
    ```
  </Accordion>

  <Accordion title="prune" icon="code">
    Delete old blueprint builds, keeping only recent successful ones

    ```bash theme={null}
    rli blueprint prune <name>
    ```

    <ParamField query="dry-run" type="boolean">
      Show what would be deleted without actually deleting
    </ParamField>

    <ParamField query="yes" type="boolean">
      Skip confirmation prompt
    </ParamField>

    <ParamField query="keep" type="string" default="1">
      Number of successful builds to keep
    </ParamField>
  </Accordion>

  <Accordion title="from-dockerfile" icon="code">
    Create a blueprint from a Dockerfile with build context support

    ```bash theme={null}
    rli blueprint from-dockerfile
    ```

    <ParamField query="name" type="string" required>
      Blueprint name (required)
    </ParamField>

    <ParamField query="build-context" type="string">
      Build context directory (default: current directory)
    </ParamField>

    <ParamField query="dockerfile" type="string">
      Dockerfile path (default: Dockerfile in build context)
    </ParamField>

    <ParamField query="system-setup-commands" type="string[]">
      System setup commands
    </ParamField>

    <ParamField query="resources" type="string">
      Resource size (X\_SMALL, SMALL, MEDIUM, LARGE, X\_LARGE, XX\_LARGE)
    </ParamField>

    <ParamField query="architecture" type="string">
      Architecture (arm64, x86\_64)
    </ParamField>

    <ParamField query="available-ports" type="string[]">
      Available ports
    </ParamField>

    <ParamField query="root" type="boolean">
      Run as root
    </ParamField>

    <ParamField query="user" type="string">
      Run as this user (format: username:uid)
    </ParamField>

    <ParamField query="metadata" type="string[]">
      Metadata tags (format: key=value)
    </ParamField>

    <ParamField query="ttl" type="string">
      TTL in seconds for the build context object (default: 3600)
    </ParamField>
  </Accordion>
</AccordionGroup>

### Object Commands

<AccordionGroup>
  <Accordion title="list" icon="list">
    List objects

    ```bash theme={null}
    rli object list
    ```

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>

    <ParamField query="starting-after" type="string">
      Starting point for pagination
    </ParamField>

    <ParamField query="name" type="string">
      Filter by name (partial match supported)
    </ParamField>

    <ParamField query="content-type" type="string">
      Filter by content type
    </ParamField>

    <ParamField query="state" type="string">
      Filter by state (UPLOADING, READ\_ONLY, DELETED)
    </ParamField>

    <ParamField query="search" type="string">
      Search by object ID or name
    </ParamField>

    <ParamField query="public" type="boolean">
      List public objects only
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get object details

    ```bash theme={null}
    rli object get <id>
    ```
  </Accordion>

  <Accordion title="download" icon="download">
    Download object to local file

    ```bash theme={null}
    rli object download <id> <path>
    ```

    <ParamField query="extract" type="boolean">
      Extract downloaded archive after download
    </ParamField>

    <ParamField query="duration-seconds" type="string" default="3600">
      Duration in seconds for the presigned URL validity
    </ParamField>
  </Accordion>

  <Accordion title="upload" icon="upload">
    Upload a file as an object

    ```bash theme={null}
    rli object upload <path>
    ```

    <ParamField query="name" type="string">
      Object name (required)
    </ParamField>

    <ParamField query="content-type" type="string">
      Content type: unspecified|text|binary|gzip|tar|tgz
    </ParamField>

    <ParamField query="public" type="boolean">
      Make object publicly accessible
    </ParamField>
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete an object (irreversible)

    ```bash theme={null}
    rli object delete <id>
    ```
  </Accordion>
</AccordionGroup>

### Network-policy Commands

<AccordionGroup>
  <Accordion title="list" icon="list">
    List network policies

    ```bash theme={null}
    rli network-policy list
    ```

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>

    <ParamField query="starting-after" type="string">
      Starting point for pagination
    </ParamField>

    <ParamField query="name" type="string">
      Filter by name
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get network policy details

    ```bash theme={null}
    rli network-policy get <id>
    ```
  </Accordion>

  <Accordion title="create" icon="plus">
    Create a new network policy

    ```bash theme={null}
    rli network-policy create
    ```

    <ParamField query="name" type="string" required>
      Policy name (required)
    </ParamField>

    <ParamField query="description" type="string">
      Policy description
    </ParamField>

    <ParamField query="allow-all" type="boolean">
      Allow all egress traffic
    </ParamField>

    <ParamField query="allow-devbox-to-devbox" type="boolean">
      Allow devbox-to-devbox communication
    </ParamField>

    <ParamField query="allow-agent-gateway" type="boolean">
      Allow Agent gateway access
    </ParamField>

    <ParamField query="allow-mcp-gateway" type="boolean">
      Allow MCP gateway access
    </ParamField>

    <ParamField query="allowed-hostnames" type="string[]">
      List of allowed hostnames for egress
    </ParamField>
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete a network policy

    ```bash theme={null}
    rli network-policy delete <id>
    ```
  </Accordion>
</AccordionGroup>

### Secret Commands

<AccordionGroup>
  <Accordion title="create" icon="plus">
    Create a new secret. Value can be piped via stdin (e.g., echo 'val' | rli secret create name) or entered interactively with masked input for security.

    ```bash theme={null}
    rli secret create <name>
    ```
  </Accordion>

  <Accordion title="list" icon="list">
    List all secrets

    ```bash theme={null}
    rli secret list
    ```

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get secret metadata by name

    ```bash theme={null}
    rli secret get <name>
    ```
  </Accordion>

  <Accordion title="update" icon="code">
    Update a secret value (value from stdin or secure prompt)

    ```bash theme={null}
    rli secret update <name>
    ```
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete a secret

    ```bash theme={null}
    rli secret delete <name>
    ```

    <ParamField query="yes" type="boolean">
      Skip confirmation prompt
    </ParamField>
  </Accordion>
</AccordionGroup>

### Gateway-config Commands

<AccordionGroup>
  <Accordion title="list" icon="list">
    List gateway configurations

    ```bash theme={null}
    rli gateway-config list
    ```

    <ParamField query="name" type="string">
      Filter by name
    </ParamField>

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>
  </Accordion>

  <Accordion title="create" icon="plus">
    Create a new gateway configuration

    ```bash theme={null}
    rli gateway-config create
    ```

    <ParamField query="name" type="string" required>
      Gateway config name (required)
    </ParamField>

    <ParamField query="endpoint" type="string" required>
      Target endpoint URL (required)
    </ParamField>

    <ParamField query="bearer-auth" type="boolean">
      Use Bearer token authentication (default)
    </ParamField>

    <ParamField query="header-auth" type="string">
      Use custom header authentication (specify header key name)
    </ParamField>

    <ParamField query="description" type="string">
      Description
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get gateway configuration details

    ```bash theme={null}
    rli gateway-config get <id>
    ```
  </Accordion>

  <Accordion title="update" icon="code">
    Update a gateway configuration

    ```bash theme={null}
    rli gateway-config update <id>
    ```

    <ParamField query="name" type="string">
      New name
    </ParamField>

    <ParamField query="endpoint" type="string">
      New endpoint URL
    </ParamField>

    <ParamField query="bearer-auth" type="boolean">
      Use Bearer token authentication
    </ParamField>

    <ParamField query="header-auth" type="string">
      Use custom header authentication (specify header key name)
    </ParamField>

    <ParamField query="description" type="string">
      New description
    </ParamField>
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete a gateway configuration

    ```bash theme={null}
    rli gateway-config delete <id>
    ```
  </Accordion>
</AccordionGroup>

### Mcp-config Commands

<AccordionGroup>
  <Accordion title="list" icon="list">
    List MCP configurations

    ```bash theme={null}
    rli mcp-config list
    ```

    <ParamField query="name" type="string">
      Filter by name
    </ParamField>

    <ParamField query="limit" type="string" default="20">
      Max results
    </ParamField>
  </Accordion>

  <Accordion title="create" icon="plus">
    Create a new MCP configuration

    ```bash theme={null}
    rli mcp-config create
    ```

    <ParamField query="name" type="string" required>
      MCP config name (required)
    </ParamField>

    <ParamField query="endpoint" type="string" required>
      Target endpoint URL (required)
    </ParamField>

    <ParamField query="allowed-tools" type="string" required>
      Allowed tool patterns, comma-separated (required, e.g. '*' or 'github.search\_*,github.get\_\*')
    </ParamField>

    <ParamField query="description" type="string">
      Description
    </ParamField>
  </Accordion>

  <Accordion title="get" icon="eye">
    Get MCP configuration details

    ```bash theme={null}
    rli mcp-config get <id>
    ```
  </Accordion>

  <Accordion title="update" icon="code">
    Update an MCP configuration

    ```bash theme={null}
    rli mcp-config update <id>
    ```

    <ParamField query="name" type="string">
      New name
    </ParamField>

    <ParamField query="endpoint" type="string">
      New endpoint URL
    </ParamField>

    <ParamField query="allowed-tools" type="string">
      New allowed tool patterns, comma-separated
    </ParamField>

    <ParamField query="description" type="string">
      New description
    </ParamField>
  </Accordion>

  <Accordion title="delete" icon="trash">
    Delete an MCP configuration

    ```bash theme={null}
    rli mcp-config delete <id>
    ```
  </Accordion>
</AccordionGroup>

### Mcp Commands

<AccordionGroup>
  <Accordion title="start" icon="play">
    Start the MCP server

    ```bash theme={null}
    rli mcp start
    ```

    <ParamField query="http" type="boolean">
      Use HTTP/SSE transport instead of stdio
    </ParamField>

    <ParamField query="port" type="string">
      Port to listen on for HTTP mode (default: 3000)
    </ParamField>
  </Accordion>

  <Accordion title="install" icon="download">
    Install Runloop MCP server configuration in Claude Desktop

    ```bash theme={null}
    rli mcp install
    ```
  </Accordion>
</AccordionGroup>

### Scenario Commands

<AccordionGroup>
  <Accordion title="info" icon="eye">
    Display scenario definition details

    ```bash theme={null}
    rli scenario info <id>
    ```
  </Accordion>
</AccordionGroup>

## MCP Server (AI Integration)

<Note>
  The CLI includes a Model Context Protocol (MCP) server that allows AI assistants like Claude to interact with your devboxes.
</Note>

### Quick Setup for Claude Desktop

```bash theme={null}
# Install MCP configuration
rli mcp install
```

After installation, restart Claude Desktop and ask Claude to "List my devboxes" or "Create a new devbox".

### Server Modes

<Tabs>
  <Tab title="Stdio (Claude Desktop)">
    ```bash theme={null}
    rli mcp start
    ```

    Standard input/output mode for Claude Desktop integration.
  </Tab>

  <Tab title="HTTP (Web/Remote)">
    ```bash theme={null}
    rli mcp start --http
    rli mcp start --http --port 8080
    ```

    HTTP/SSE mode for web applications and remote access.
  </Tab>
</Tabs>

## Output Formats

All commands support multiple output formats via the `--output` flag:

<ResponseField name="--output json" type="flag">
  JSON output for programmatic parsing
</ResponseField>

<ResponseField name="--output yaml" type="flag">
  YAML output for configuration files
</ResponseField>

<ResponseField name="--output text" type="flag">
  Plain text output for human readability
</ResponseField>

```bash theme={null}
rli devbox list --output json
rli devbox list --output yaml
rli devbox list --output text
```

## Contributing

The Runloop CLI is open-source. We welcome contributions!

<CardGroup cols={2}>
  <Card title="GitHub Repository" icon="github" href="https://github.com/runloopai/rl-cli">
    View source code and submit PRs
  </Card>

  <Card title="Report Issues" icon="bug" href="https://github.com/runloopai/rl-cli/issues">
    Report bugs or request features
  </Card>
</CardGroup>
