Metadata-Version: 2.4
Name: amx-cli
Version: 0.19.0
Summary: Agentic Metadata Extractor — AI-powered CLI to infer and manage database metadata
Author: Omer Yasir Kucuk
License: Apache-2.0
Project-URL: Homepage, https://github.com/omeryasirkucuk/amx
Project-URL: Documentation, https://omeryasirkucuk.github.io/amx-docs/
Project-URL: Repository, https://github.com/omeryasirkucuk/amx
Project-URL: Issues, https://github.com/omeryasirkucuk/amx/issues
Project-URL: Changelog, https://github.com/omeryasirkucuk/amx/blob/main/CHANGELOG.md
Keywords: metadata,database,documentation,llm,rag,data-catalog,agentic,cli
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Documentation
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.1
Requires-Dist: rich>=13.0
Requires-Dist: prompt_toolkit>=3.0.40
Requires-Dist: sqlalchemy>=2.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: litellm>=1.83.7
Requires-Dist: requests>=2.31
Requires-Dist: keyring>=24.0
Requires-Dist: truststore>=0.10
Requires-Dist: fastapi>=0.110
Requires-Dist: uvicorn[standard]>=0.27
Requires-Dist: sse-starlette>=2.0
Requires-Dist: python-multipart>=0.0.7
Requires-Dist: duckdb>=1.0
Requires-Dist: duckdb-engine>=0.13
Requires-Dist: croniter>=2.0
Provides-Extra: rag
Requires-Dist: chromadb>=0.5; extra == "rag"
Requires-Dist: langchain-text-splitters>=0.3; extra == "rag"
Requires-Dist: tiktoken>=0.7; extra == "rag"
Provides-Extra: docs
Requires-Dist: chromadb>=0.5; extra == "docs"
Requires-Dist: langchain-community>=0.3; extra == "docs"
Requires-Dist: langchain-text-splitters>=0.3; extra == "docs"
Requires-Dist: tiktoken>=0.7; extra == "docs"
Requires-Dist: unstructured>=0.15; extra == "docs"
Requires-Dist: python-magic>=0.4; extra == "docs"
Requires-Dist: pypdf>=4.0; extra == "docs"
Requires-Dist: openpyxl>=3.1; extra == "docs"
Requires-Dist: python-docx>=1.1; extra == "docs"
Requires-Dist: markdownify>=0.11; extra == "docs"
Requires-Dist: lxml>=6.1.0; extra == "docs"
Provides-Extra: pages
Requires-Dist: markdown-it-py>=3; extra == "pages"
Requires-Dist: xhtml2pdf>=0.2.11; extra == "pages"
Requires-Dist: markdownify>=0.11; extra == "pages"
Requires-Dist: openpyxl>=3.1; extra == "pages"
Provides-Extra: pdf
Requires-Dist: weasyprint>=60; extra == "pdf"
Requires-Dist: jinja2>=3.1; extra == "pdf"
Provides-Extra: lineage
Requires-Dist: sqlglot>=23; extra == "lineage"
Requires-Dist: networkx>=3.0; extra == "lineage"
Requires-Dist: matplotlib>=3.7; extra == "lineage"
Provides-Extra: quality
Requires-Dist: sacrebleu>=2.4; extra == "quality"
Requires-Dist: rouge-score>=0.1; extra == "quality"
Provides-Extra: bertscore
Requires-Dist: bert-score>=0.3; extra == "bertscore"
Requires-Dist: transformers>=4.57; extra == "bertscore"
Provides-Extra: cloud-sources
Requires-Dist: boto3>=1.34; extra == "cloud-sources"
Requires-Dist: google-api-python-client>=2.0; extra == "cloud-sources"
Requires-Dist: google-auth>=2.0; extra == "cloud-sources"
Requires-Dist: msal>=1.24; extra == "cloud-sources"
Provides-Extra: batch
Requires-Dist: openai>=1.0; extra == "batch"
Requires-Dist: anthropic>=0.30; extra == "batch"
Provides-Extra: git-sources
Requires-Dist: gitpython>=3.1; extra == "git-sources"
Provides-Extra: code-intel
Requires-Dist: sqlglot>=24.0; extra == "code-intel"
Provides-Extra: local-embeddings
Requires-Dist: sentence-transformers>=3.0; extra == "local-embeddings"
Requires-Dist: transformers>=4.57; extra == "local-embeddings"
Provides-Extra: postgresql
Requires-Dist: psycopg2-binary>=2.9; extra == "postgresql"
Provides-Extra: snowflake
Requires-Dist: snowflake-sqlalchemy>=1.6; extra == "snowflake"
Requires-Dist: snowflake-connector-python>=3.6; extra == "snowflake"
Provides-Extra: databricks
Requires-Dist: databricks-sqlalchemy>=1.0; extra == "databricks"
Requires-Dist: databricks-sql-connector>=3.0; extra == "databricks"
Provides-Extra: bigquery
Requires-Dist: sqlalchemy-bigquery>=1.9; extra == "bigquery"
Requires-Dist: google-cloud-bigquery>=3.13; extra == "bigquery"
Provides-Extra: mysql
Requires-Dist: pymysql>=1.1; extra == "mysql"
Requires-Dist: cryptography>=42.0; extra == "mysql"
Provides-Extra: oracle
Requires-Dist: oracledb>=2.0; extra == "oracle"
Provides-Extra: mssql
Requires-Dist: pyodbc>=5.0; extra == "mssql"
Provides-Extra: redshift
Requires-Dist: redshift_connector>=2.1; extra == "redshift"
Requires-Dist: sqlalchemy-redshift>=0.8; extra == "redshift"
Provides-Extra: clickhouse
Requires-Dist: clickhouse-connect>=0.7; extra == "clickhouse"
Requires-Dist: clickhouse-sqlalchemy>=0.3; extra == "clickhouse"
Provides-Extra: trino
Requires-Dist: trino[sqlalchemy]>=0.330; extra == "trino"
Provides-Extra: hive
Requires-Dist: pyhive>=0.7; extra == "hive"
Requires-Dist: thrift>=0.16; extra == "hive"
Requires-Dist: thrift-sasl>=0.4.3; extra == "hive"
Requires-Dist: pure-sasl>=0.6; extra == "hive"
Provides-Extra: all
Requires-Dist: psycopg2-binary>=2.9; extra == "all"
Requires-Dist: snowflake-sqlalchemy>=1.6; extra == "all"
Requires-Dist: snowflake-connector-python>=3.6; extra == "all"
Requires-Dist: databricks-sqlalchemy>=1.0; extra == "all"
Requires-Dist: databricks-sql-connector>=3.0; extra == "all"
Requires-Dist: sqlalchemy-bigquery>=1.9; extra == "all"
Requires-Dist: google-cloud-bigquery>=3.13; extra == "all"
Requires-Dist: pymysql>=1.1; extra == "all"
Requires-Dist: cryptography>=42.0; extra == "all"
Requires-Dist: oracledb>=2.0; extra == "all"
Requires-Dist: pyodbc>=5.0; extra == "all"
Requires-Dist: redshift_connector>=2.1; extra == "all"
Requires-Dist: sqlalchemy-redshift>=0.8; extra == "all"
Requires-Dist: clickhouse-connect>=0.7; extra == "all"
Requires-Dist: clickhouse-sqlalchemy>=0.3; extra == "all"
Requires-Dist: trino[sqlalchemy]>=0.330; extra == "all"
Requires-Dist: pyhive>=0.7; extra == "all"
Requires-Dist: thrift>=0.16; extra == "all"
Requires-Dist: thrift-sasl>=0.4.3; extra == "all"
Requires-Dist: pure-sasl>=0.6; extra == "all"
Requires-Dist: chromadb>=0.5; extra == "all"
Requires-Dist: langchain-community>=0.3; extra == "all"
Requires-Dist: langchain-text-splitters>=0.3; extra == "all"
Requires-Dist: tiktoken>=0.7; extra == "all"
Requires-Dist: unstructured>=0.15; extra == "all"
Requires-Dist: python-magic>=0.4; extra == "all"
Requires-Dist: pypdf>=4.0; extra == "all"
Requires-Dist: openpyxl>=3.1; extra == "all"
Requires-Dist: python-docx>=1.1; extra == "all"
Requires-Dist: markdownify>=0.11; extra == "all"
Requires-Dist: markdown-it-py>=3; extra == "all"
Requires-Dist: lxml>=6.1.0; extra == "all"
Requires-Dist: weasyprint>=60; extra == "all"
Requires-Dist: jinja2>=3.1; extra == "all"
Requires-Dist: sacrebleu>=2.4; extra == "all"
Requires-Dist: rouge-score>=0.1; extra == "all"
Requires-Dist: bert-score>=0.3; extra == "all"
Requires-Dist: transformers>=4.57; extra == "all"
Requires-Dist: sentence-transformers>=3.0; extra == "all"
Requires-Dist: boto3>=1.34; extra == "all"
Requires-Dist: google-api-python-client>=2.0; extra == "all"
Requires-Dist: google-auth>=2.0; extra == "all"
Requires-Dist: msal>=1.24; extra == "all"
Requires-Dist: openai>=1.0; extra == "all"
Requires-Dist: anthropic>=0.30; extra == "all"
Requires-Dist: gitpython>=3.1; extra == "all"
Requires-Dist: sqlglot>=24.0; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.6; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"
Requires-Dist: pre-commit>=3.7; extra == "dev"
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Provides-Extra: perf
Requires-Dist: pytest-benchmark>=4.0; extra == "perf"
Requires-Dist: psutil>=5.9; extra == "perf"
Dynamic: license-file

<p align="center">
  <img src="https://raw.githubusercontent.com/omeryasirkucuk/amx/main/docs/assets/amx-readme.gif" alt="AMX in action" width="760">
</p>

<p align="center">
  <strong>Cryptic columns, reviewed comments.</strong>
</p>

<p align="center">
  AMX walks your database, reads your codebase and docs, then drafts a
  <code>COMMENT</code> for every table, view, and column — with confidence
  scores and a human review before anything lands in the live database.
</p>

<p align="center">
  <a href="https://amxcli.com/"><strong>Documentation</strong></a>
  ·
  <a href="https://amxcli.com/getting-started/quickstart/">Quickstart</a>
  ·
  <a href="https://github.com/omeryasirkucuk/amx/blob/main/CHANGELOG.md">Changelog</a>
  ·
  <a href="https://github.com/omeryasirkucuk/amx/issues">Issues</a>
</p>

---

_AMX is in early development — expect breaking changes between releases. Stay current with `pip install --upgrade amx-cli`._

Three independent sub-agents — **Profile** (schema, stats, sample values), **RAG** (ingested docs), and **Code** (references mined from your repos) — gather evidence in parallel. An orchestrator merges and ranks them, you accept / edit / skip each suggestion, and AMX writes the approved text back as native `COMMENT` statements on the engine.

Five minutes from `pip install` to your first reviewed comment. **Ten database engines, seven LLM providers.**

## Install

```bash
pip install amx-cli
```

The PyPI distribution is `amx-cli`; the import package is `amx` (`import amx`). Requires Python 3.10+. See the [installation guide](https://amxcli.com/getting-started/installation/) for prerequisites, source builds, and where AMX writes config / history / logs.

## Quick start

```bash
amx                       # open the interactive session (the AMX REPL)
/setup                    # one-time wizard: DB profile + LLM profile
/connect                  # sanity-check the active connection
/run sales.orders         # generate suggestions, review, accept
/apply                    # write approved descriptions back to the database
```

`/run` without an argument opens a scope picker (Database / Schema / Asset). `/run-apply` short-circuits review-and-apply when you already trust the model. If anything misbehaves, `amx doctor` runs from any shell — even when AMX itself can't start — and prints actionable hints next to each ✗.

The full guided walkthrough is at the [5-minute quickstart](https://amxcli.com/getting-started/quickstart/) and [first-run walkthrough](https://amxcli.com/getting-started/first-run/).

## AMX CLI

A typical session — running `/run`, inspecting ranked suggestions inline, accepting or editing each one before it lands in the database.

<p align="center">
  <img src="https://raw.githubusercontent.com/omeryasirkucuk/amx/main/docs/assets/amx-banner.png" alt="AMX REPL — interactive session showing /run output with ranked suggestions, confidence scores, and review prompts" width="900">
</p>

## AMX Studio (`/studio`) — same workflow on a local web UI

From inside the REPL, `/studio` boots **AMX Studio**, a token-protected web UI on `127.0.0.1`, and opens your browser. Same review-and-apply workflow as the REPL — runs, results, the pending queue, the `/ask` chat, and full DB / LLM / Docs / Code profile management — but on a denser surface. **Browse** any database / schema / table to inline-edit comments or hit per-asset **Generate** to draft just one comment through the same human-in-the-loop queue. The SPA bundle ships inside `amx-cli`; no Node toolchain or extra install needed.

<p align="center">
  <img src="https://raw.githubusercontent.com/omeryasirkucuk/amx/main/docs/assets/studio-overview.png" alt="AMX Studio Catalog landing page — sidebar with Catalog selected, four quick-action cards (Browse, New run, Ask, Audit), and a Recent activity feed" width="900">
</p>

Full walkthrough at [`/studio`](https://amxcli.com/cli/studio/).

## How it works

<p align="center">
  <img src="https://amxcli.com/assets/amx-flow.png" alt="AMX flow — Profile, RAG, and Code agents feed evidence to an orchestrator that ranks suggestions; you review accept/edit/skip and AMX writes the approved text back as COMMENT ON COLUMN native DDL" width="900">
</p>

Each agent runs independently, surfaces its own evidence, and assigns its own confidence. The orchestrator picks the narrower, defensible description and ranks up to N alternatives. You never apply anything you didn't approve.

### A column, before and after

A typical column in `orders`, the kind every analytics codebase has:

```
orders.shipped_dt   DATE   NULL   -- (no comment)
```

What AMX produces, after you approve:

```
COMMENT ON COLUMN orders.shipped_dt IS
  'Date the carrier scanned the package at origin. Distinct from
   order_dt (when the customer placed the order) and delivered_dt
   (when the carrier recorded proof of delivery).';

confidence: high · logprob: 0.91
sources: code (3 refs) · docs · db profile
```

Every approval is recorded in local run history — re-evaluate later with `/history review` to see how the same column scores under a different model, prompt detail, or evidence mix.

## Supported database backends

PostgreSQL · Snowflake · Databricks (Unity Catalog) · BigQuery · MySQL / MariaDB · Oracle · SQL Server · Redshift · ClickHouse · DuckDB

Per-backend setup, connection details, and the capability matrix live in the [Backends section](https://amxcli.com/backends/).

## Supported LLM providers

OpenAI · Anthropic · Google Gemini · DeepSeek · OpenRouter · Ollama · vLLM / LM Studio · any OpenAI-compatible endpoint

Provider-specific guides (including OpenAI / Anthropic Batch mode and local-model setups) live in the [LLM providers section](https://amxcli.com/llm-providers/).

## Next up

- **dbt integration** — Connect dbt projects so the AMX code agent extracts table and column metadata from the transformation layer.
- **MCP integration for docs and repo** — Expose the AMX repo and docs over the Model Context Protocol so LLM clients can query them as live context.
- **CDC integration** — Detect schema changes in upstream sources and keep AMX metadata in sync.

See the [full roadmap](https://amxcli.com/roadmap/) for details.

## Documentation

Full user, operator, and contributor docs live at **[amxcli.com](https://amxcli.com/)** — concepts, the slash-command map, configuration, data sources, collaboration, troubleshooting, and the [Python API](https://amxcli.com/api/reference/) for headless use. Release notes are in [`CHANGELOG.md`](https://github.com/omeryasirkucuk/amx/blob/main/CHANGELOG.md) and on the [GitHub Releases page](https://github.com/omeryasirkucuk/amx/releases).

Recent: Studio Lineage & Variations, Confidence Scoring, and explicit cache controls — see the [changelog](https://amxcli.com/changelog/).

Recent: Studio Lineage & Variations, Confidence Scoring, and explicit cache controls — see the [changelog](https://omeryasirkucuk.github.io/amx-docs/changelog/).

## Contributing & support

- [Contributing guide](https://github.com/omeryasirkucuk/amx/blob/main/CONTRIBUTING.md) — development setup, branching, commit format, release process
- [Security policy](https://github.com/omeryasirkucuk/amx/blob/main/SECURITY.md) — how to report a vulnerability
- [Open an issue](https://github.com/omeryasirkucuk/amx/issues) — bugs, questions, feature requests

## License

Apache-2.0 — see [`LICENSE`](https://github.com/omeryasirkucuk/amx/blob/main/LICENSE).

---

_This project is developed with the help of multiple AI coding agents._
