Skip to main content

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]'
pip install 'nao-core[starrocks]'

# 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, StarRocks)
  • Git repositories to sync
  • LLM provider (OpenAI, Anthropic, Mistral, Gemini, OpenRouter, Ollama)
  • ai_summary template + model (prompted only when you enable ai_summary for 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
  • --yes / -y / --no-tty: Run non-interactively. Skips all prompts and uses sensible defaults — useful for AI agents and automation scripts. When combined with a pre-written nao_config.yaml (e.g. written by an agent skill), only scaffolds the folder structure.
  • --name / -n: Project name. When set without an existing nao_config.yaml, this is used as the project name (and folder). In --yes mode without --name, the current directory name is used and the project is initialized in place.

Non-interactive (agent-friendly) mode

For LLM agents and automation, run nao init without any prompts:

# Initialize the current directory as a nao project (uses the directory name)
nao init --yes

# Or create a new sub-folder named "my-project"
nao init --yes --name my-project

# Pre-write nao_config.yaml then scaffold folders without prompting
cat > nao_config.yaml <<'YAML'
project_name: my-project
databases:
  - type: duckdb
    name: local
    path: ":memory:"
YAML
nao init --yes

In non-interactive mode, nao init never asks for input. Configure databases, LLM provider, and integrations by editing nao_config.yaml directly (or by pre-writing it before nao init).

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 into databases/
  • 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_summary to a database connection templates list to render ai_summary.md.
  • Use prompt("...") inside Jinja templates to generate ai_summary content.
  • prompt(...) requires llm.provider, llm.annotation_model, and llm.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 (or roles/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:

  1. Build the frontend with Vite
  2. Compile the backend with Bun into a standalone binary
  3. 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


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.

nao_core-0.2.0rc1-py3-none-win_amd64.whl (65.1 MB view details)

Uploaded Python 3Windows x86-64

nao_core-0.2.0rc1-py3-none-manylinux2014_x86_64.whl (98.4 MB view details)

Uploaded Python 3

nao_core-0.2.0rc1-py3-none-manylinux2014_aarch64.whl (62.9 MB view details)

Uploaded Python 3

nao_core-0.2.0rc1-py3-none-macosx_15_0_x86_64.whl (47.9 MB view details)

Uploaded Python 3macOS 15.0+ x86-64

nao_core-0.2.0rc1-py3-none-macosx_15_0_arm64.whl (76.8 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

File details

Details for the file nao_core-0.2.0rc1-py3-none-win_amd64.whl.

File metadata

  • Download URL: nao_core-0.2.0rc1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 65.1 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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 nao_core-0.2.0rc1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a8c47d79f5e1aae5e83d2e6b9dd6cbe3109348bccab5d15e7068189f7c235310
MD5 89ec0e64347dff6b65ffd014b712d97f
BLAKE2b-256 ebc136245b8db10acf56fe72a7afb7bb9064bbcdf2daad8bb7454814fd2feaf5

See more details on using hashes here.

File details

Details for the file nao_core-0.2.0rc1-py3-none-manylinux2014_x86_64.whl.

File metadata

  • Download URL: nao_core-0.2.0rc1-py3-none-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 98.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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 nao_core-0.2.0rc1-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8e391f1f201e08c5133f89a5e6e46c45614884eb0b30b404b163a4e0055f85d1
MD5 c7602bc947b4f2f079c68440a9b46d42
BLAKE2b-256 ab909e508502e087b24eeccabb95053815b3ff6a2dccd9666bc27e34d35816f9

See more details on using hashes here.

File details

Details for the file nao_core-0.2.0rc1-py3-none-manylinux2014_aarch64.whl.

File metadata

  • Download URL: nao_core-0.2.0rc1-py3-none-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 62.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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 nao_core-0.2.0rc1-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8bc8322b365d84603a5e98f3144883a9ae0ad54b69f835d8e4744f60e81140a2
MD5 731ed73a3a2c624adb6f222d8a89e73b
BLAKE2b-256 a9a459109c327ce2906d6e4a0dc13a6217c2bcdb6fb1e43189e367897905a663

See more details on using hashes here.

File details

Details for the file nao_core-0.2.0rc1-py3-none-macosx_15_0_x86_64.whl.

File metadata

  • Download URL: nao_core-0.2.0rc1-py3-none-macosx_15_0_x86_64.whl
  • Upload date:
  • Size: 47.9 MB
  • Tags: Python 3, macOS 15.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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 nao_core-0.2.0rc1-py3-none-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 6cb9f3c7960524185d901d3b32a7f76454c201548eff5fae78f87fe78692d66f
MD5 195bd1519b9f4865a6a4f3e4b7b36836
BLAKE2b-256 cba10aec11afc288631744735a549b642b27a749448474b173bc1f117cb210bd

See more details on using hashes here.

File details

Details for the file nao_core-0.2.0rc1-py3-none-macosx_15_0_arm64.whl.

File metadata

  • Download URL: nao_core-0.2.0rc1-py3-none-macosx_15_0_arm64.whl
  • Upload date:
  • Size: 76.8 MB
  • Tags: Python 3, macOS 15.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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 nao_core-0.2.0rc1-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 74b2a0eee840673ca2f0f3ea6a6e7d7b2c6b38622fcc75b9b03aba3d817fe87a
MD5 6c882bfc12e699b1420680a793ed7a61
BLAKE2b-256 67683a293bccbc5ff6ab3a92ac1cf6edb743d0cf901b708608e15d11c40ab7e8

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