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.2-py3-none-win_arm64.whl (4.6 MB view details)

Uploaded Python 3Windows ARM64

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

Uploaded Python 3Windows x86-64

onyx_cli-1.3.2-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.2-py3-none-musllinux_1_2_aarch64.whl (4.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

onyx_cli-1.3.2-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.2-py3-none-manylinux_2_17_aarch64.whl (4.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

onyx_cli-1.3.2-py3-none-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 a125c65936d25c46f568cfbe0e09f75c34311afb159634e7b2d26b25b72007f1
MD5 38e366b2329ec854f1909d0ba2bc5bca
BLAKE2b-256 594fecf2f4bbec9067694ab9e736d1f7d9c3a33c3ecdc23b7489423bfd807e7d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9394f6abc05735d79c4b37426df06441dba6dc08e8b9b39d159bebc0a1c82841
MD5 62f77037faa6d27a8d3ea554c3d7eda6
BLAKE2b-256 7a10af39f476ec71e31e0e16d73545d56d3a14519da8662d84fde2daa0fb43ed

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 597469ebce840a0a10552cfb7990693fe5ad37485ba6339cde0f2469ff8a165d
MD5 75d3584b55aa2c47d1e50c6c6c20d39f
BLAKE2b-256 65c4e115b70d61a316a0aad5d15885fa66594b232239b02be3fd0ba468e82e77

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b2bf26af6e428f45c987aed09c0fbf59be333f9380555bea7425311d130055d4
MD5 2a5b20944858ea4a61eb28ac1b8e1732
BLAKE2b-256 8a47008c6702a89288893dec6461a0dd50d987c38c355614286629c322a610d9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 da309ae567e0fbe2aafce9bb80ad64b3fc9dfd39e1d85c9d93d473ef07106721
MD5 4c47d1df52a8af3ca596449dde67b361
BLAKE2b-256 6e6930f5978f386ccf5eadcaa2daf82a68e140af21dc1cde7a83c7e21df64516

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 ac4ca37d3720bc009a71233d68059565d91b5b1aa7ebe1c6e61633da59d425ef
MD5 7e81eb17f4651750702b0e5a35ceb715
BLAKE2b-256 6ccce2102a58124fcc1153205c979ca6ba30735fed409912fb2010cfcc948617

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-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.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac2be0cdccbf8f2fb4737e86f68d407d93b2ab40b18a9c07f15c38998b4a8f62
MD5 4f28ee0fc536868e5e3b7748669045d2
BLAKE2b-256 ceff856e5af0f951f312125219c1bb8598609be6fcacc8b747384f6df51d0f51

See more details on using hashes here.

File details

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

File metadata

  • Download URL: onyx_cli-1.3.2-py3-none-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 5.0 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.2-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a2e90126d9dfdca928c2c05e2cd4db9cf28dc07b470b9f86c839dd46956577b1
MD5 7f28871d6330e1616416463ae3e2b254
BLAKE2b-256 8ba17146926746671ccfe40793149640e1fb947ab7a25e5bf81b3a9ff3af3168

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