botu (Python CLI)
Agent-first CLI for botu — the embeddable AI agent for any website.
Register a site, get an embed key, verify your domain, and inject the
<script> snippet — all from the command line, no web console needed.
Install
pip install botu-cli
# or, run once without installing:
uvx botu --help
pipx run botu --help
Quickstart
botu login # OAuth device-flow, opens browser
botu sites create --name acme --domain acme.com # create a site + first embed key
botu embed --site <site-id> --new-key --write index.html # inject the <script>
botu sites verify <site-id> --domain acme.com # start domain verification
botu test --site <site-id> # check the embed key works
All commands accept --json (or env BOTU_JSON=1) for machine-parseable
output that's friendly to agents and CI.
Commands
| Command | Purpose |
|---|---|
botu login / logout / whoami |
OAuth device-flow session |
botu sites create|list|get|delete |
Manage sites |
botu sites verify <id> --domain <d> [--check] |
Domain ownership (DNS TXT) |
botu keys create|list|revoke --site <id> |
Manage site embed API keys |
botu tokens create|list|revoke |
Account access tokens (PATs) for CI |
botu embed --site <id> |
Print / write the <script> embed snippet |
botu usage [--site <id>] |
Per-site quota and usage |
botu test --site <id> |
Verify an embed key via the loader auth exchange |
Non-interactive use (CI / headless agents)
botu login needs a browser. For CI or headless agents, create an account
access token once and pass it via the BOTU_TOKEN env var — no login,
no browser:
botu tokens create --name ci --json # → {"token": "bpat_...", ...} shown ONCE
export BOTU_TOKEN=bpat_...
botu sites list # uses BOTU_TOKEN, no ~/.paradigx needed
Interactive sessions don't need this — the device-flow JWT is cached and
auto-refreshed, so botu login is a one-time step per machine.
About embed keys vs account tokens
pk_live_*/pk_test_*— site embed keys, go in the<script>tag.bpat_*— account access tokens, authenticate the CLI itself.
Both plaintexts are shown once, at creation. botu embed can't retrieve
an existing site's key — pass --key or use --new-key to mint a fresh one.
Configuration
| Env var | Default | Purpose |
|---|---|---|
BOTU_API_URL |
https://botu.io |
Target deployment (https://qa.botu.io for QA) |
BOTU_TOKEN |
— | Account access token — skips login (CI / agents) |
BOTU_JSON |
— | 1 forces JSON output globally |
Credentials are stored in ~/.paradigx/auth.json, shared with other
Paradigx product CLIs (e.g. tokenroute) — log in once, reuse everywhere.
Exit codes
0 ok · 1 user error (4xx) · 2 network error · 3 server error (5xx)
© 2026 Paradigx. All Rights Reserved.
Metadata
Release files for botu-cli 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| botu_cli-0.4.0.tar.gz | 17.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| botu_cli-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.2 kB
Release files / botu_cli-0.4.0.tar.gz
| Download URL | botu_cli-0.4.0.tar.gz |
|---|---|
| Size | 17.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f12f782825d4a80e9cedd68071a320e5cacb5b19ac6b761cc561385525b3ac58
|
|
BLAKE2b-256 checksum How to use checksums |
4d7242e9b97f66db6700e44190dc28a479ef03e5de555938cfb1148320a662a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / botu_cli-0.4.0-py3-none-any.whl
| Download URL | botu_cli-0.4.0-py3-none-any.whl |
|---|---|
| Size | 13.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d5fdadb8cbcb47fd010851302adc8eed80d6b62990889084b4f51e3d167d5294
|
|
BLAKE2b-256 checksum How to use checksums |
618ba0695c94aecf980833582d3abac1a4de76c70c129f3fb312e77bc0a476dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Security for botu-cli 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.