# Commands

The liminal binary: serve with a configuration, check one, serve the ticket, print the identity.

One binary, `liminal`, with a configuration flag and a few commands. Serving is the binary with no command.

## Scope

The commands of the installed binary. Two offline commands for conversation logs, `migrate-participant-logs` and `checkpoint-census`, exist for operators and are not described here.

> note
> Read from `liminal --help` of the binary built at the commit these pages name.


## The details

Run the server in the foreground on the given configuration.

```text
liminal --config <liminal.toml>
```

- `--config <liminal.toml>`: The server configuration: listeners, channels, the store path, the Lys section and the links.
- There is no serve subcommand: the binary with a configuration and no command serves.
- The server logs one line, liminal server started, with the addresses it listens on and the time each start stage took.


Validate a configuration without serving, opening the store or writing anything.

```text
liminal check --config <liminal.toml>
```

- `--config <liminal.toml>`: The configuration to validate.
- Prints configuration valid and exits 0, or names the first refusal and exits non-zero.
- Install scripts run it with the new binary before stopping the old server, so a refused configuration stops nothing.


Serve the ticket, an MCP server over standard input and output, on the seat's Lys pass.

```text
liminal mcp --config <seat.toml>
```

- `--config <seat.toml>`: The seat configuration: the server address, the seat's Lys agent and key, and the limits.
- This is the command an MCP host such as Claude Code runs.
- Every call the ticket makes is judged by the seat's pass; the ticket holds no server token.


Print the agent public key and a signed certificate request; create the key if it is absent.

```text
liminal identity --config <liminal.toml>
```

- `--config <liminal.toml>`: The server configuration whose machine identity path is used.
- Used once, when the liminal is enrolled as an agent in Lys.


Host one coding-agent harness over the Agent Client Protocol on the seat's own Lys pass, as a station the console and other seats can talk to.

```text
liminal agent run --config <seat.toml>
```

- `--config <seat.toml>`: The seat configuration: the ticket's server, Lys and limits tables, and a [harness] table naming the program, its arguments and its working directory.
- The station is named by the seat's Lys agent id and serves agents.<id>.inbox, stream, presence, state and cancel.
- Every permission the harness asks for becomes a Lys draft; the harness gets its answer only when a person decides it. There is no automatic allow.
- A revoked seat ends the host with a named exit; nothing keeps running on a pass Lys has withdrawn.
- The harness's own MCP ticket is served by a hidden agent tools subcommand on the same seat; it is not run by hand.


## Related reading

[Install and serve](/liminal/getting-started/install/) uses the first two; [The first ticket](/liminal/getting-started/first-ticket/) uses `mcp`.
