Metadata-Version: 2.4
Name: wont
Version: 0.1.0
Summary: Wont: observe repeated AI-agent work and find what is reusable
License-Expression: Apache-2.0
Project-URL: Homepage, https://usewont.com
Project-URL: Repository, https://github.com/premxai/wont
Project-URL: Issues, https://github.com/premxai/wont/issues
Keywords: ai-agents,agents,observability,tool-calls,llm
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic<3,>=2.10
Provides-Extra: server
Requires-Dist: alembic<2,>=1.14; extra == "server"
Requires-Dist: fastapi<1,>=0.115; extra == "server"
Requires-Dist: psycopg[binary]<4,>=3.2; extra == "server"
Requires-Dist: sqlalchemy<3,>=2.0; extra == "server"
Requires-Dist: uvicorn[standard]<1,>=0.32; extra == "server"
Provides-Extra: dev
Requires-Dist: wont[server]; extra == "dev"
Requires-Dist: build<2,>=1.2; extra == "dev"
Requires-Dist: twine<7,>=5; extra == "dev"
Requires-Dist: httpx2<3,>=2.13; extra == "dev"
Requires-Dist: mypy<2,>=1.13; extra == "dev"
Requires-Dist: pytest<9,>=8.3; extra == "dev"
Requires-Dist: ruff<1,>=0.8; extra == "dev"
Provides-Extra: evidence
Requires-Dist: openai<4,>=3.16.2; extra == "evidence"
Dynamic: license-file

# Wont

Wont watches how your AI agents actually work, finds the steps they repeat, and shows
which of that work is reusable. A *wont* is a habitual way of doing something; that is
what Wont looks for in agent behavior.

> **Status: early release (0.1.0).** Today Wont **observes and measures**.
> It does not execute anything in place of your agent. Every number it shows is a measured
> fact about your own traffic; it makes no savings estimates.

## What it does

- **Observe.** A small Python SDK records each agent run as a structured trace: which tools
  were called, in what dependency order, with what side-effect class. It stores the *shape*
  of values and keyed hashes, not the values themselves.
- **Find repetition.** Wont reconstructs the data flow between steps and groups runs that
  perform the same procedure.
- **Show the lifecycle.** Each repeated procedure is observed, a candidate, qualified, or
  deoptimized, derived from evidence you can inspect. Nothing is "active": Wont does not
  run procedures for you.
- **Measure.** Cost and latency appear only when your traces report them, and are marked
  unavailable otherwise.

## Install

```bash
pip install wont
```

The package is small: it depends only on `pydantic`. The server and dashboard ship in the
source repository and the container image; `pip install "wont[server]"` adds the libraries
they need.

## Use it

```python
import os

from wont import Wont

wont = Wont(
    api_key=os.environ["WONT_API_KEY"],      # a project key from the dashboard (wnk_...)
    base_url=os.environ["WONT_BASE_URL"],
)

with wont.execution(workflow_version="refund-status") as run:
    result = support_agent.run(request)       # your agent, unchanged
```

For tools you call yourself, `observe_tool` records a call without ever raising into your
agent. Instrumentation failures are swallowed by design; an observation problem must never
break a run. See [the SDK guide](https://github.com/premxai/wont/blob/main/docs/PYTHON_SDK_V0.md).

## Coding agents

If your agent is Claude Code, `wont claude-code install` prints a hook block that records
sessions locally first, with an explicit step before anything is sent. See
[the recorder guide](https://github.com/premxai/wont/blob/main/docs/CLAUDE_CODE_RECORDER_V0.md) and the
[pilot runbook](https://github.com/premxai/wont/blob/main/docs/PILOT_RUNBOOK_V0.md).

## Safety stance

Wont is conservative by construction: when it is unsure whether two steps are independent,
it keeps them ordered; a false fallback is acceptable, silent incorrect execution is not.
Project API keys are agent credentials and are never used in a browser. The dashboard signs
people in with their own sessions. See [data handling](https://github.com/premxai/wont/blob/main/docs/DATA_RETENTION_AND_SECRET_SAFETY_V0.md).

## Run the server

From a source checkout (Python 3.12 or newer, Docker for PostgreSQL, Node for the dashboard build):

```bash
pip install -e ".[server]"
(cd apps/web && npm ci && VITE_WONT_DATA_SOURCE=api npm run build)   # once; builds the dashboard
docker compose up -d postgres
wont serve --dev
```

`wont serve --dev` is for local use only: it listens on `127.0.0.1`, uses the local development
database, applies pending migrations, serves the dashboard at `http://127.0.0.1:8000`, and prints
sign-in links in the console (there is no email in development). It refuses to run with
`WONT_ENV=production`. For a real deployment use the container image and the reference
deployment in [`deploy/`](https://github.com/premxai/wont/blob/main/deploy/); see the
[operations runbook](https://github.com/premxai/wont/blob/main/docs/OPERATIONS_RUNBOOK_V0.md).

## Documentation

- [Getting started](https://github.com/premxai/wont/blob/main/docs/GETTING_STARTED.md): sign in to your first data
- [API keys](https://github.com/premxai/wont/blob/main/docs/API_KEYS.md): lifecycle, rotation, and what a key can do
- [Data controls](https://github.com/premxai/wont/blob/main/docs/DATA_CONTROLS.md): what is stored, retention, export, deletion
- [Quickstart](https://github.com/premxai/wont/blob/main/docs/QUICKSTART.md)
- [Python SDK](https://github.com/premxai/wont/blob/main/docs/PYTHON_SDK_V0.md)
- [Claude Code recorder](https://github.com/premxai/wont/blob/main/docs/CLAUDE_CODE_RECORDER_V0.md)
- [Naming and conventions](https://github.com/premxai/wont/blob/main/docs/NAMING.md)

## License

Apache License 2.0. See [LICENSE](https://github.com/premxai/wont/blob/main/LICENSE).

To report a vulnerability, see [SECURITY.md](https://github.com/premxai/wont/blob/main/SECURITY.md).
