Skip to main content

Onyx CLI

Release CLI PyPI

A CLI for querying enterprise knowledge from Onyx. Includes an interactive chat TUI for humans and non-interactive commands for AI agents and scripts.

Installation

pip install onyx-cli

Or with uv:

uv pip install onyx-cli

Standalone binaries for Linux, macOS, and Windows (amd64/arm64) are also attached to each cli/v* GitHub release.

Setup

Run the interactive chat TUI — on first launch it will guide you through setup:

onyx-cli chat

This prompts for your Onyx server URL and personal access token (PAT), tests the connection, and saves config to ~/.config/onyx-cli/config.json (or $XDG_CONFIG_HOME/onyx-cli/config.json if set). To reconfigure later, use the /configure command inside the TUI.

Environment variables override config file values:

Variable Required Description
ONYX_SERVER_URL No Server origin or already-prefixed API base (default: https://cloud.onyx.app)
ONYX_API_PREFIX No API path prefix (default: /api); set to empty for direct backend access
ONYX_PAT No Personal access token for authentication (required if no config file)
ONYX_PERSONA_ID No Default agent/persona ID
ONYX_STREAM_MARKDOWN No Enable/disable progressive markdown rendering (true/false)
ONYX_SSH_HOST_KEY No Path to SSH host key for serve command

Usage

Interactive chat

onyx-cli chat
onyx-cli chat --no-stream-markdown
Flag Description
--no-stream-markdown Disable progressive markdown rendering during streaming

One-shot question

onyx-cli ask "What is our company's PTO policy?"
onyx-cli ask --agent-id 5 "Summarize this topic"
onyx-cli ask --json "Hello"
Flag Description
--agent-id <int> Agent ID to use (overrides default)
--json Output NDJSON stream events instead of plain text
--prompt <string> Question text (use with piped stdin context)
--quiet Buffer output and print once at end
--max-output <int> Max bytes before truncating (0 to disable)

List agents

onyx-cli agents
onyx-cli agents --json

Serve over SSH

# Start a public SSH endpoint for the CLI TUI
onyx-cli serve --host 0.0.0.0 --port 2222

# Connect as a client
ssh your-host -p 2222

Clients can either:

  • paste a personal access token (PAT) at the login prompt, or
  • skip the prompt by sending ONYX_PAT over SSH:
export ONYX_PAT=your-pat
ssh -o SendEnv=ONYX_PAT your-host -p 2222

Useful hardening flags:

  • --host-key (default ~/.config/onyx-cli/host_ed25519)
  • --idle-timeout (default 15m)
  • --max-session-timeout (default 8h)
  • --rate-limit-per-minute (default 20)
  • --rate-limit-burst (default 40)
  • --rate-limit-cache (default 4096)

Commands

Command Mode Description
chat Interactive Launch the interactive chat TUI (requires terminal)
ask Agent / Script Ask a question and print the answer to stdout
agents Agent / Script List available agents (ID, name, description)
validate-config Agent / Script Check CLI configuration and server connectivity
install-skill Agent / Script Install the Onyx CLI agent skill file
experiments Agent / Script List experimental features and their status
serve Interactive Serve the Onyx TUI over SSH

Global Flags

Flag Description
--version, -v Print client and server version information
--debug Run in debug mode (verbose logging)

Agent / Non-Interactive Use

When called without a TTY (e.g., by an AI agent or piped into another command), onyx-cli adjusts its behavior:

  • No subcommand: prints help and exits 0 (instead of launching the TUI)
  • Results to stdout, progress/errors to stderr
  • No ANSI codes or interactive prompts
  • ask output truncated to 50000 bytes by default; full response saved to a temp file. Use --max-output 0 to disable.
  • search stdout stays valid JSON: over the limit, whole results are dropped and a truncation object carries metadata plus the temp file path of the full response.

Configuration

If a human has already run onyx-cli chat (which includes first-time setup), the CLI works out of the box — no additional setup needed. Environment variables can override the config file or serve as an alternative when no config file exists:

export ONYX_SERVER_URL="https://your-onyx-server.com"
export ONYX_PAT="your-pat"

Exit Codes

Code Name When
0 Success Command completed
1 General Unknown error
2 BadRequest Invalid arguments
3 NotConfigured Missing config/PAT
4 AuthFailure Invalid PAT (401/403)
5 Unreachable Server unreachable
6 RateLimited Server returned 429
7 Timeout Request timed out
8 ServerError Server returned 5xx
9 NotAvailable Feature/endpoint doesn't exist

Skill File

Install the bundled SKILL.md so AI coding agents can discover the CLI:

onyx-cli install-skill
onyx-cli install-skill --global
onyx-cli install-skill --copy
onyx-cli install-skill --agent claude-code
Flag Description
--global, -g Install to home directory instead of project
--copy Copy files instead of symlinking
--agent, -a Target specific agents (e.g. claude-code; can be repeated)

Slash Commands (in TUI)

Command Description
/help Show help message
/clear Clear chat and start a new session
/agent List and switch agents
/attach <path> Attach a file to next message
/sessions List recent chat sessions
/configure Re-run connection setup
/connectors Open connectors in browser
/settings Open settings in browser
/quit Exit Onyx CLI

Keyboard Shortcuts

Key Action
Enter Send message
Escape Cancel current generation
Ctrl+O Toggle source citations
Ctrl+D Quit (press twice)
Scroll / Shift+Up/Down Scroll chat history
Page Up / Page Down Scroll half page

Building from Source

Requires Go 1.24+.

cd cli
go build -o onyx-cli .

Development

# Run tests
go test ./...

# Build
go build -o onyx-cli .

# Lint
golangci-lint run ./...

Publishing to PyPI

The CLI is distributed as a Python package via PyPI. The build system uses hatchling with manygo to cross-compile Go binaries into platform-specific wheels.

CI release (recommended)

Tag a release and push — the release-cli.yml workflow builds wheels for all platforms and publishes to PyPI automatically:

tag --prefix cli

To do this manually:

git tag cli/v0.1.0
git push origin cli/v0.1.0

The workflow builds wheels for:

  • linux/amd64 manylinux
  • linux/amd64 musllinux
  • linux/arm64 manylinux
  • linux/arm64 musllinux
  • darwin/amd64
  • darwin/arm64
  • windows/amd64
  • windows/arm64

Manual release

Build a wheel locally with uv. Set GOOS and GOARCH to cross-compile for other platforms (Go handles this natively — no cross-compiler needed):

# Build for current platform
uv build --wheel

# Cross-compile for a different platform
GOOS=linux GOARCH=amd64 uv build --wheel

# Build a musllinux-tagged Linux wheel for Alpine/musl environments
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \
  ONYX_CLI_WHEEL_PLATFORM_TAG=musllinux_1_2_x86_64 \
  uv build --wheel

# Upload to PyPI
uv publish

Versioning

Versions are derived from git tags with the cli/ prefix (e.g. cli/v0.1.0). The tag is parsed by internal/_version.py and injected into the Go binary via -ldflags at build time.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

onyx_cli-1.3.4-py3-none-win_arm64.whl (4.6 MB view details)

Uploaded Python 3Windows ARM64

onyx_cli-1.3.4-py3-none-win_amd64.whl (5.1 MB view details)

Uploaded Python 3Windows x86-64

onyx_cli-1.3.4-py3-none-musllinux_1_2_x86_64.whl (5.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

onyx_cli-1.3.4-py3-none-musllinux_1_2_aarch64.whl (4.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

onyx_cli-1.3.4-py3-none-manylinux_2_17_x86_64.whl (5.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

onyx_cli-1.3.4-py3-none-manylinux_2_17_aarch64.whl (4.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

onyx_cli-1.3.4-py3-none-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

onyx_cli-1.3.4-py3-none-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file onyx_cli-1.3.4-py3-none-win_arm64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-win_arm64.whl
  • Upload date:
  • Size: 4.6 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 f3931b6b86e1502dab35981fb1c194ba751f772494d8654fc1ce6ac68d1dc32e
MD5 f753166e1c5e7c5fc8dd8e34672627e0
BLAKE2b-256 9373ae2ff8e75695a46c9f0f992d06a79876384f02306ca5b9c296b4ebf6e82e

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-win_amd64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-win_amd64.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 904867f87e3c5b545aeb6de42c094f8a1ba3ef3c7c2a95c1e88ba2715260b433
MD5 0c83a0fc621a2086c04ed61dcd2f610e
BLAKE2b-256 d418f4084ee1f43249fa5e6532b6c0adde5310b15ca937dad8714416c70c4ca6

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: Python 3, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1a0cf492bb4c3143a9dbf886307a072927f01aeb4308bc925f84d3f6ec6c8169
MD5 f3f286364d71119b7ee3ccc5b111695e
BLAKE2b-256 c941441314ec9526927078b257d8d36c0801610f7f927abe42e8a243e9199418

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 4.5 MB
  • Tags: Python 3, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fcd69c3c47f2ef7d4190806ab8a233c07dcc6e4558d8fcc3db7aee586c879b45
MD5 1f359f9b74b6652972481ef87ba0bdd0
BLAKE2b-256 48e446f5dbc74d75e1e5afad11fa9c0d20607100c3ed58cfd20828d6c2bb4a16

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-manylinux_2_17_x86_64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: Python 3, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d2bf81aef8508b1408e6a48e78b0b20f3dbdf5a23b3e1d930b44aff777b56f5d
MD5 a413d2a6022fb242e4efda6346139115
BLAKE2b-256 643ce8d9814aa133d34587d99dd9a31ce93658160b5ac0a597c7cecce1bb1878

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-manylinux_2_17_aarch64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-manylinux_2_17_aarch64.whl
  • Upload date:
  • Size: 4.5 MB
  • Tags: Python 3, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 0d59487c7e0552bf833d836f51fd6fecfc3169e5aa5e59291c60ea23ffd0b075
MD5 fc90bcea79c8256589f3abaa657dfec7
BLAKE2b-256 3461045c2da7b709899be9edb85c3a6ed6fc9c4a86c226e5db3f9e38aa272480

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 4.7 MB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4d8c8e8775fdec98e8c74ca3bd7b3c6676ee66df30e07090b71c76dc991d6220
MD5 9593ae43d5bba9034f5ef7f4afad7d01
BLAKE2b-256 e8c5bf1bd13372b2d45e1dc1ae70525bb97d4c8d0927769715001bfa51b801f0

See more details on using hashes here.

File details

Details for the file onyx_cli-1.3.4-py3-none-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: onyx_cli-1.3.4-py3-none-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: Python 3, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for onyx_cli-1.3.4-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 040b55cdab2b158da3374215454b45935eb6b7fce41d9183b68a3e1ad27d3076
MD5 b580f784e68c8708037ef84f48d793f2
BLAKE2b-256 3f1cc82f7001ac65dec9ae965f5124c1adbfe227e8f4bf3917f4e05498180988

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page