Start, stop, and restart the OmniRoute server from the CLI. Manage daemon mode, port configuration, auto-recovery, system tray integration, and the dashboard open shortcut.
58
66%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Risky
Do not use without reviewing
Fix and improve this skill with Tessl
tessl review fix ./skills/cli-serve/SKILL.mdStart, stop, and restart the OmniRoute server from the CLI. Manage daemon mode, port configuration, auto-recovery, system tray integration, and the dashboard open shortcut.
npm install -g omniroute # or: npx omniroute
omniroute --versiondashboardFlags:
--url--port <port>--tuiExample:
omniroute dashboardrestartFlags:
--port <port>Example:
omniroute restartserveFlags:
--port <port>--no-open--daemon--log--no-recovery--max-restarts <n>--tray--no-tray--tls-cert <path>--tls-key <path>Example:
omniroute servestopExample:
omniroute stopThe omniroute binary ships with the OmniRoute server. It is both the server launcher and a full management CLI with 250+ commands across 39 groups.
npm install -g omniroute # npm registry
# or: use the binary bundled with the desktop appRequires Node.js ≥22.22.2 or ≥24.
Verify:
omniroute --version # prints installed version
omniroute --help # full command treeEvery CLI command that talks to the server reads two values:
| Source | Variable / Flag |
|---|---|
| Base URL | OMNIROUTE_BASE_URL or --base-url |
| API key | OMNIROUTE_API_KEY or --api-key |
Default base URL: http://localhost:20128
export OMNIROUTE_BASE_URL="http://localhost:20128"
export OMNIROUTE_API_KEY="sk-..." # from Dashboard → API ManagerFor a remote server:
export OMNIROUTE_BASE_URL="https://your-server.com"| Flag | Description |
|---|---|
--base-url <url> | Override server URL for this invocation |
--api-key <key> | Override API key for this invocation |
--output <format> | Output format: table (default), json, jsonl, csv |
--json | Shorthand for --output json |
--non-interactive | Disable prompts — for CI / shell scripts |
--no-open | Don't auto-open the browser on start |
--port <n> | Override default port 20128 |
--help, -h | Show help for the current command |
--version, -v | Print the installed version |
All listing commands support --output:
omniroute combo list # human-readable table
omniroute combo list --output json # JSON array
omniroute combo list --output jsonl # one JSON object per line
omniroute combo list --output csv # CSV with header row# 1. Start server
omniroute
# 2. (First run) interactive setup wizard
omniroute setup
# 3. Verify everything is healthy
omniroute doctor| Capability | Skill |
|---|---|
| Server admin + backup | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omniroute-cli-admin/SKILL.md |
| Provider & key management | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omniroute-cli-providers/SKILL.md |
| Cloud agents (Codex / Devin / Jules) | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omniroute-cli-cloud/SKILL.md |
| Evals & benchmarking | https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/omniroute-cli-eval/SKILL.md |
Connection refused → server not running; run omniroute or omniroute serve401 Unauthorized → wrong or missing API keycommand not found: omniroute → not in PATH; check npm root -g or re-installdoctor reports SQLite incompatible → npm rebuild better-sqlite3 in the app directoryRequires the omniroute CLI. See CLI entry-point skill for install + global flags.
omniroute # Start server (default port 20128)
omniroute serve # Explicit alias
omniroute --port 3000 # Override port
omniroute --no-open # Don't auto-open browser
omniroute --mcp # Start as MCP server (stdio transport)
omniroute stop # Stop the running server
omniroute restart # Restart the server
omniroute dashboard # Open dashboard in browser
omniroute open # Alias for dashboard
omniroute status # Runtime status (uptime, requests, providers)omniroute setup # Step-by-step interactive setupomniroute setup --non-interactive \
--password 'admin-password' \
--add-provider \
--provider openai \
--api-key 'sk-...' \
--test-providerEnvironment variables for non-interactive setup:
| Variable | Purpose |
|---|---|
OMNIROUTE_SETUP_PASSWORD | Admin password (≥8 chars) |
OMNIROUTE_PROVIDER | Provider id (e.g. openai, anthropic) |
OMNIROUTE_PROVIDER_NAME | Display name for the connection |
OMNIROUTE_PROVIDER_BASE_URL | Optional OpenAI-compatible base URL override |
OMNIROUTE_API_KEY | Provider API key |
OMNIROUTE_DEFAULT_MODEL | Optional default model |
DATA_DIR | Override OmniRoute data directory |
omniroute doctor # Full health check
omniroute doctor --json # Machine-readable JSON
omniroute doctor --no-liveness # Skip HTTP health probe
omniroute doctor --host 0.0.0.0 # Override liveness host
omniroute doctor --liveness-url <url> # Full URL overrideChecks performed: Config, Database, Storage/encryption, Port, Node runtime, Native binary (better-sqlite3), Memory, Server liveness.
Exit code is non-zero if any check fails — useful in CI:
omniroute doctor --json | jq '.checks[] | select(.status=="fail")'omniroute backup # Snapshot config + SQLite DB to ~/.omniroute/backups/
omniroute restore # Restore from a previous snapshot (interactive picker)omniroute autostart enable # Register OmniRoute as a system startup item
omniroute autostart disable # Remove startup registration
omniroute autostart status # Show current autostart stateOn Linux: creates a systemd user service (~/.config/systemd/user/omniroute.service) and enables linger so the service can start after reboot without a graphical login; on desktop sessions it also adds an XDG autostart entry with --tray. On macOS: LaunchAgent plist. On Windows: registry startup entry.
Expose a local OmniRoute instance via a secure tunnel:
omniroute tunnel list # List active tunnels
omniroute tunnel create cloudflare # Start a Cloudflare Tunnel (free)
omniroute tunnel create tailscale # Start a Tailscale funnel
omniroute tunnel create ngrok # Start an ngrok tunnel
omniroute tunnel stop <id> # Stop a running tunnelThe tunnel URL is printed and can be used as OMNIROUTE_BASE_URL from remote machines.
omniroute config show # Display current effective configuration
omniroute env show # List all OmniRoute environment variables
omniroute env get <KEY> # Get a single env var value
omniroute env set <KEY> <value> # Set an env var (temporary — until restart)omniroute reset-password # Reset the admin password interactively
omniroute reset-encrypted-columns # Dry-run: show encrypted credential columns
omniroute reset-encrypted-columns --force # Null out encrypted credentials in SQLiteUse reset-encrypted-columns --force only if STORAGE_ENCRYPTION_KEY was lost and you need to re-enter all provider API keys.
omniroute logs # Stream live request logs
omniroute logs --json # JSON log entries
omniroute logs --search <term> # Filter by term
omniroute logs --follow # Tail mode (keep streaming)omniroute update # Check for a newer version and prompt to updatedoctor shows STORAGE_ENCRYPTION_KEY missing → set the key in .env or run reset-encrypted-columns --force to wipe and re-enter credentialsdoctor reports native binary fail → npm rebuild better-sqlite3 in the OmniRoute app directorytunnel create cloudflare hangs → ensure cloudflared is installed: brew install cloudflare/cloudflare/cloudflared3070925
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.