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

# The euca CLI

> Drive the engine from a shell — the euca CLI mirrors most of the HTTP API, and is self-describing so an agent can learn the surface at runtime.

The `euca` CLI is the same build / play / experiment surface as the
[HTTP API](/api-reference/introduction), from a terminal. Each command is a thin blocking HTTP
client that calls a route on a running server (default `localhost:3917`), so most of what an agent
can do over HTTP it can do as a shell command — and the CLI is **self-describing**, so an agent
can learn the available surface at runtime instead of being hard-coded against it.

## The loop, as commands

Start a server, then drive it:

```bash theme={null}
cargo run -q -p euca-studio -- --headless
```

The command set mirrors the endpoints — spawning entities, adding rules, stepping the
simulation, observing, forking, snapshotting, diffing — the same [agent loop](/quickstart) you
run over HTTP, one command per route across roughly three dozen command groups.

## Self-describing

This is what lets an agent discover the engine rather than assume it:

* **`euca discover`** — prints the command tree (groups, subcommands, arguments); `--json` for a
  machine-readable form. An agent calls this to learn what it can do.
* **`euca explain <topic>`** — worked, copy-pasteable examples for a topic (entity, combat, rule,
  assert, fork, scenario, …).
* **`euca schema`** — the component and endpoint schema (the engine's `GET /schema`).

## Offline commands

A few commands run with no server — **`asset`** (mesh info / optimize / LOD), **`package`**, and
`discover` / `explain`. GLB → `.emesh` cooking is a separate tool, **`euca-cook`**, not part of the
`euca` CLI.

<Note>
  The CLI targets `localhost:3917` by default; pass `--server <url>` to point at another host.
  Because the CLI is self-describing, **`euca discover` is the authoritative, current
  list** — prefer it over any hard-coded command catalogue.
</Note>
