nao Core is your analytics context builder with the best chat interface.
Project description
nao CLI
Command-line interface for nao chat.
Installation
Install the core package (lightweight, no database or LLM dependencies):
pip install nao-core
Then add only the providers you need:
# Database backends
pip install 'nao-core[postgres]'
pip install 'nao-core[bigquery]'
pip install 'nao-core[snowflake]'
pip install 'nao-core[duckdb]'
pip install 'nao-core[clickhouse]'
pip install 'nao-core[databricks]'
pip install 'nao-core[mysql]'
pip install 'nao-core[mssql]'
pip install 'nao-core[athena]'
pip install 'nao-core[trino]'
pip install 'nao-core[redshift]'
pip install 'nao-core[fabric]'
# LLM providers
pip install 'nao-core[openai]'
pip install 'nao-core[anthropic]'
pip install 'nao-core[mistral]'
pip install 'nao-core[gemini]'
pip install 'nao-core[ollama]'
# Integrations
pip install 'nao-core[notion]'
Combine multiple extras in a single install:
pip install 'nao-core[postgres,openai]'
pip install 'nao-core[snowflake,bigquery,anthropic]'
Or install everything at once (equivalent to the previous default):
pip install 'nao-core[all]'
Convenience groups are also available:
pip install 'nao-core[all-databases]' # all database backends
pip install 'nao-core[all-llms]' # all LLM providers
Usage
nao --help
Usage: nao COMMAND
╭─ Commands ────────────────────────────────────────────────────────────────╮
│ chat Start the nao chat UI. │
│ debug Test connectivity to configured resources. │
│ init Initialize a new nao project. │
│ sync Sync resources to local files. │
│ test Run and explore nao tests. │
│ --help (-h) Display this message and exit. │
│ --version Display application version. │
╰───────────────────────────────────────────────────────────────────────────╯
Initialize a new nao project
nao init
This will create a new nao project in the current directory. It will prompt you for a project name and ask you to configure:
- Database connections (BigQuery, DuckDB, Databricks, Snowflake, PostgreSQL, Redshift, MSSQL, Trino)
- Git repositories to sync
- LLM provider (OpenAI, Anthropic, Mistral, Gemini, OpenRouter, Ollama)
ai_summarytemplate + model (prompted only when you enableai_summaryfor databases)- Slack integration
- Notion integration
The resulting project structure looks like:
<project>/
├── nao_config.yaml
├── .naoignore
├── RULES.md
├── databases/
├── queries/
├── docs/
├── semantics/
├── repos/
├── agent/
│ ├── tools/
│ └── mcps/
└── tests/
Options:
--force/-f: Force re-initialization even if the project already exists
Start the nao chat UI
nao chat
This will start the nao chat UI. It will open the chat interface in your browser at http://localhost:5005.
Test connectivity
nao debug
Tests connectivity to all configured databases and LLM providers. Displays a summary table showing connection status and details for each resource.
Sync resources
nao sync
Syncs configured resources to local files:
- Databases - generates markdown docs (
columns.md,preview.md,description.md) for each table intodatabases/ - Git repositories — clones or pulls repos into
repos/ - Notion pages — exports pages as markdown into
docs/notion/
After syncing, any Jinja templates (*.j2 files) in the project directory are rendered with the nao context.
Optional ai_summary generation:
- Add
ai_summaryto a database connectiontemplateslist to renderai_summary.md. - Use
prompt("...")inside Jinja templates to generateai_summarycontent. prompt(...)requiresllm.provider,llm.annotation_model, andllm.api_key(except for ollama).
Run tests
nao test
Runs test cases defined as YAML files in tests/. Each test has a name, prompt, and expected sql. Results are saved to tests/outputs/.
Options:
--model/-m: Models to test against (default:openai:gpt-4.1). Can be specified multiple times.--threads/-t: Number of parallel threads (default:1)
Examples:
nao test -m openai:gpt-4.1
nao test -m openai:gpt-4.1 -m anthropic:claude-sonnet-4-20250514
nao test --threads 4
Explore test results
nao test server
Starts a local web server to explore test results in a browser UI showing pass/fail status, token usage, cost, and detailed data comparisons.
Options:
--port/-p: Port to run the server on (default:8765)--no-open: Don't automatically open the browser
BigQuery service account permissions
When you connect BigQuery during nao init, the service account used by credentials_path/ADC must be able to list datasets and run read-only queries to generate docs. Grant the account:
- Project:
roles/bigquery.jobUser(orroles/bigquery.user) so the CLI can submit queries - Each dataset you sync:
roles/bigquery.dataViewer(or higher) to read tables
The combination above mirrors the typical "BigQuery User" setup and is sufficient for nao's metadata and preview pulls.
Snowflake authentication
Snowflake supports three authentication methods during nao init:
- SSO: Browser-based authentication (recommended for organizations with SSO policies)
- Password: Traditional username/password
- Key-pair: Private key file with optional passphrase
Development
Building the package
cd cli
python build.py --help
Usage: build.py [OPTIONS]
Build and package nao-core CLI.
╭─ Parameters ──────────────────────────────────────────────────────────────────╮
│ --force -f --no-force Force rebuild the server binary │
│ --skip-server -s --no-skip-server Skip server build, only build Python pkg │
│ --bump Bump version (patch, minor, major) │
╰───────────────────────────────────────────────────────────────────────────────╯
This will:
- Build the frontend with Vite
- Compile the backend with Bun into a standalone binary
- Bundle everything into a Python wheel in
dist/
Installing for development
cd cli
pip install -e '.[all]'
Publishing to PyPI
# Build first
python build.py
# Publish
uv publish dist/*
Architecture
nao chat (CLI command)
↓ spawns
nao-chat-server (Bun-compiled binary, port 5005)
+ FastAPI server (port 8005)
↓ serves
Backend API + Frontend Static Files
↓
Browser at http://localhost:5005
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nao_core-0.1.15-py3-none-win_amd64.whl.
File metadata
- Download URL: nao_core-0.1.15-py3-none-win_amd64.whl
- Upload date:
- Size: 58.4 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9224ed7d48d41554862db3bd9d4d70c4cf345b62b4ed98781adf12e34047ab2
|
|
| MD5 |
54ef2dc898f28c18537c6564d3ce8fa6
|
|
| BLAKE2b-256 |
d5bcef9c07fa6f11955c0324506de9c8d2c7179df6813a96dfef2df307bdd805
|
File details
Details for the file nao_core-0.1.15-py3-none-manylinux2014_x86_64.whl.
File metadata
- Download URL: nao_core-0.1.15-py3-none-manylinux2014_x86_64.whl
- Upload date:
- Size: 91.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a24749a9aee45f8f48e04f018ff83e581ba28d772d73b4a0f53f509f57a5bf63
|
|
| MD5 |
62e6ef34af5a9583b88dbfdfe80fff96
|
|
| BLAKE2b-256 |
54a09176aee503ace15cc8947abc6d0b5e3a7d04fa7c2bcef3189f47224a9b31
|
File details
Details for the file nao_core-0.1.15-py3-none-manylinux2014_aarch64.whl.
File metadata
- Download URL: nao_core-0.1.15-py3-none-manylinux2014_aarch64.whl
- Upload date:
- Size: 56.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c02dbd05b9290f82a7968ed12523497c2766de4de607c01bfd522e4a243185de
|
|
| MD5 |
01af075de2315dc594c56f15f5cac0a3
|
|
| BLAKE2b-256 |
fa758a27414f2e16747fb065a12769cfcf91af49b0f4800964b7c60cc0ea24cf
|
File details
Details for the file nao_core-0.1.15-py3-none-macosx_15_0_x86_64.whl.
File metadata
- Download URL: nao_core-0.1.15-py3-none-macosx_15_0_x86_64.whl
- Upload date:
- Size: 41.3 MB
- Tags: Python 3, macOS 15.0+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85ef2636af727dc58b685b0e7c8fc50d1be4cdc2a0c81c03acef4962830ca929
|
|
| MD5 |
701ed8e33d371b05c2e2803d9ca1d5ae
|
|
| BLAKE2b-256 |
5c929b7f26adaa96d30bcc372aa37fc6e13b6b204e7ab7223f330336c09b1b8f
|
File details
Details for the file nao_core-0.1.15-py3-none-macosx_15_0_arm64.whl.
File metadata
- Download URL: nao_core-0.1.15-py3-none-macosx_15_0_arm64.whl
- Upload date:
- Size: 70.2 MB
- Tags: Python 3, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69ef89c2979b6b9f434230b7f064f85a20c019e6f41bba50650f2e42b4ec75c9
|
|
| MD5 |
a2e1face01bcf643a851f0d374d7f430
|
|
| BLAKE2b-256 |
013781004345c10ae1ac1d479dfcec44b57c7918258192655b9c063d6ad85abd
|