🐟 Bonito CLI
Unified multi-cloud AI management from your terminal.
Bonito gives enterprise AI teams a single CLI to manage models, costs, and workloads across AWS Bedrock, Azure OpenAI, Google Vertex AI, and more.
Install
pip install bonito-cli
Quick Start
bonito auth login # Authenticate
bonito models list # Browse 381+ models across 3 clouds
bonito projects create --name "My Project" # Create a project
bonito agents create --project <id> --name "Assistant" --prompt "You are a helpful AI assistant"
bonito agents execute <agent-id> "Hello!" # Execute agent
bonito chat -m gpt-4o # Interactive chat
bonito kb create --name docs # Create a knowledge base
Commands
| Command | Description |
|---|---|
bonito auth |
🔐 Authentication & account management |
bonito providers |
☁️ Cloud provider management (AWS/Azure/GCP) |
bonito models |
🤖 AI model catalogue — list, search, enable |
bonito chat |
💬 Interactive AI chat with compare mode |
bonito gateway |
🌐 API gateway — keys, logs, config |
bonito policies |
🎯 Routing policies — cost/latency/quality optimization |
bonito analytics |
📊 Usage analytics, costs, trends, digest |
bonito deployments |
🚀 Model deployment management |
bonito kb |
📚 Knowledge base (RAG) — documents, search, sync |
bonito agents |
🤖 Bonobot agents — create, execute, manage sessions |
bonito projects |
📁 Agent projects — organize and manage agents |
bonito groups |
👥 Agent groups — RBAC and permissions |
bonito sso |
🔐 SAML Single Sign-On — configure and manage SSO |
bonito deploy |
📦 Apply a whole stack from bonito.yaml |
bonito deploy --plan |
🔍 Show what bonito deploy would change, without changing anything |
Stacks (bonito.yaml)
Declare providers, gateway keys, routing, knowledge bases, MCP servers, agents and (version 2) the relay between agents in your clouds in one file, then plan and apply it:
bonito deploy -f bonito.yaml --plan # what would change; writes nothing
bonito deploy -f bonito.yaml --plan --json # the same plan as JSON (for CI)
bonito deploy -f bonito.yaml # apply it
bonito deploy --plan runs the same engine as bonito deploy, reading your live org and recording each write instead of sending it, so the plan is exactly what deploy does:
┏━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃ Resource ┃ Name ┃ Change ┃
┡━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ + │ agent │ Stack Billing │ model anthropic.claude-haiku-4-5, in │
│ │ │ │ project claims-stack │
│ ~ │ gateway key │ claims-key │ rate_limit: 30 -> 60 │
│ ~ │ agent │ Stack Claims │ model_config.temperature: 0.2 -> 0.5 │
│ ↻ │ provider │ groq │ credentials re-sent and re-verified; stored │
│ │ │ │ secrets can't be compared │
│ = │ knowledge base │ claims-kb │ exists; its settings and documents are left │
│ │ │ │ as they are │
│ = │ agent │ Stack Triage │ │
└───┴────────────────┴───────────────┴─────────────────────────────────────────────┘
1 to create, 2 to change, 1 to refresh, 2 unchanged. plan 2eb2c671a077511e
| Mark | Meaning |
|---|---|
+ |
created |
~ |
changed; each line is field: from -> to. Only the fields the file sets are compared; a block such as model_config is replaced whole, so a key the file drops shows as going to null |
↻ |
refreshed: provider credentials (and retriever secrets) are re-sent and re-verified, because stored secrets can't be read back to compare |
= |
unchanged |
Secrets show as (secret). Deploy never deletes: anything not in the file is left alone. A new gateway key's or agent token's secret appears once, after deploy. The plan hash identifies the exact set of changes; the dashboard Stacks page, the API (POST /api/stacks/plan, POST /api/stacks/apply) and Claude over MCP (plan_stack, apply_stack) refuse to apply when the org has changed since the plan you reviewed. bonito deploy --plan exits 1 when the file has errors.
Version 2 files can also declare who the agents in your clouds are and whom they may call, by name:
tokens:
- name: claims-runtime # a project token, minted once and reused after
relay:
- caller: claims # as the inventory lists it (bonito agents inventory)
cloud: gcp
token: claims-runtime
targets:
- { name: payments, cloud: aws, fallback: payments-backup } # fallback: an agent in this file or another cloud agent
- { resource: "runtime/fraud-check-x1" } # or match the ARN / Google resource name
Bonobot Agents
Create and manage AI agents with persistent conversations and automation:
# Create a project
bonito projects create --name "Customer Support" --budget 100.00
# Create an agent
bonito agents create --project <project-id> --name "Support Bot" \
--prompt "You are a helpful customer support agent" \
--model gpt-4o --max-turns 50
# Execute the agent
bonito agents execute <agent-id> "How do I reset my password?"
# Manage sessions
bonito agents sessions <agent-id> # List conversations
bonito agents messages <agent-id> <session-id> # View conversation history
# Agent connections and triggers
bonito agents connections <agent-id> # View agent connections
bonito agents triggers <agent-id> # View automated triggers
Knowledge Base (RAG)
bonito kb create --name "Product Docs" # Create a KB
bonito kb upload <kb-id> report.pdf notes.md # Upload documents
bonito kb search <kb-id> "How to configure?" # Semantic search
bonito kb info <kb-id> # Stats & details
SAML Single Sign-On
Configure enterprise SSO for your organization:
bonito sso setup --provider okta # Interactive SSO setup
bonito sso test # Test configuration
bonito sso enable # Enable SSO login
bonito sso enforce --breakglass-admin <user> # Enforce SSO-only (disable passwords)
bonito sso status --email user@company.com # Check SSO status
JSON Output
All commands support --json for scripting and CI/CD:
bonito models list --json | jq '.[] | .display_name'
bonito analytics overview --json > report.json
Configuration
Config stored in ~/.bonito/:
- Override with
BONITO_API_KEYandBONITO_API_URLenvironment variables
Development
cd cli/
pip install -e .
bonito --version
License
MIT
Metadata
Release files for bonito-cli 0.16.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 | Actions |
|---|---|---|---|---|
| bonito_cli-0.16.0.tar.gz | 145.6 kB | Without provenance | Details for bonito_cli-0.16.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bonito_cli-0.16.0-py3-none-any.whl | Python 3 | none | any | Details for bonito_cli-0.16.0-py3-none-any.whl |
Total release size: 293.0 kB
Release files / bonito_cli-0.16.0.tar.gz
| Download URL | bonito_cli-0.16.0.tar.gz |
|---|---|
| Size | 145.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3058c81882b3d125730e6b77a884f79ad4502316e004696782a2b449aa98c957
|
|
BLAKE2b-256 checksum How to use checksums |
ad3843fcc861428d4d3b382c59bfd3f44b9c11633aace6ad5c686fae817322eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / bonito_cli-0.16.0-py3-none-any.whl
| Download URL | bonito_cli-0.16.0-py3-none-any.whl |
|---|---|
| Size | 147.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4520f11ad766e0610f71dfb89dc9f380f771440a76c566ce77c8d9fa52aaa46b
|
|
BLAKE2b-256 checksum How to use checksums |
90314a823986b0378bffd7e8ecd0fecbb09772df52d2febfa356c9134771dc9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Security for bonito-cli 0.16.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.