Skip to main content
Ziro installs a single console script, ziro, which is the same entry point as python -m ziro_cli.main. Everything else is a module you run with python -m.

The main entry point

Subcommands

ziro setup and ziro flavour strip their subcommand and keep parsing the normal flags, so ziro setup --theme nord works.

Flags

All of these apply to ziro and python -m ziro_cli.main equally.
string
User ID. Scopes long-term memory. Omit it to reuse the last-used user, or to get the first-run picker.
string
Agent ID to run. Omit it to pick interactively. An agent that is disabled, or that falls outside the active flavour, is rejected or corrected to the flavour’s default agent.
string
Flavour to launch. Scopes which agents are visible, which threads exist, and which shared memory is used. Omit it to pick interactively when several are configured, or to resume the last one. Bundled flavours are chat, development, engineering, research, and safe.
string
Thread ID to resume a previous session. Alias: --resume.
boolean
default:"false"
Force the plain rich REPL instead of the Textual TUI.
boolean
default:"false"
Enable push-to-talk voice I/O. Requires the agent’s voice section (was voice_policy.yaml) to have enabled: true. Implies the rich REPL.
string
Headless: run one turn and print the reply, then exit. -p "message" sends that message; a bare -p reads the message from stdin.
boolean
default:"false"
With -p, emit the chat_once JSON line instead of plain text.
path
Path of a file to attach to the first message. Repeatable. May point outside the project (media only there). A model that cannot take that kind of media receives a text stub naming the file instead. See File references.
string
UI theme name for this launch, overriding the saved preference. Bundled themes are ziro (the default), carbon, nord, and gruvbox.
path
Load a plugin for this session only: a plugin folder, or a .zip that holds one. Repeatable. The plugin loads as inline/<hash>/<name>, replaces an installed plugin with the same name for the session, and is not trusted: its hooks, stdio and remote MCP servers stay off until you run /plugins trust <id>. A path that is not a plugin, or that holds a : (or ; on Windows), is refused with exit code 2. The flag is read by the chat session only; ziro plugin ... honours the ZIRO_PLUGIN_DIRS variable instead. See Try a plugin for one session.
string
Seed the reasoning effort for this session: high, medium, low, or off. Change it live with /think.

Which front end you get

The entry point picks one of three front ends. The rule is short:
1

-p is present

Run exactly one turn headless, print the reply (or the JSON line with --json), and exit. Textual is never imported. The wizard and pickers never run: the user is resolved from --user or the last-used user, and a missing user or missing API key fails fast to stderr.
2

A TTY with Textual available

Launch the Textual TUI. The shell paints in roughly 1.6 seconds and is usable immediately; anything you type before the engine finishes building is queued and runs in order once it is ready.
3

Anything else

Fall back to the rich REPL. This is also what --no-tui and --voice force, and what you get when Textual is not installed or stdout is not a terminal.
The TUI is import-guarded. No Textual, or no TTY, degrades to the REPL rather than failing.

Examples

Other entry points

Supporting commands

Dev and prod modes

The runtime mode is selected by one environment variable, not a flag. See environment variables for the full list.

Next steps

Slash commands

Everything you can do once a session is running.

Headless runs

The -p and --json contracts in detail.

Environment

Keys, providers, model tiers, and the runtime switches.