Metadata-Version: 2.4
Name: waxell
Version: 0.1.0
Summary: Waxell — build and run governed AI agents. Execution engine, authoring SDK, and the wax CLI.
Author-email: Waxell AI <eng@waxell.dev>
License: MIT
Project-URL: Homepage, https://waxell.ai
Project-URL: Documentation, https://waxell.ai/docs/
Project-URL: Repository, https://github.com/waxell-ai/waxell
Project-URL: Issues, https://github.com/waxell-ai/waxell/issues
Keywords: agents,runtime,ai,asyncio,governance,observability
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
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: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Libraries
Requires-Python: <3.15,>=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: asgiref>=3.7.0
Requires-Dist: httpx>=0.24
Requires-Dist: waxell-observe>=0.1.0
Requires-Dist: click>=8.0
Requires-Dist: rich>=13.0
Requires-Dist: python-dotenv>=1.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Provides-Extra: langgraph
Requires-Dist: langgraph>=0.2; extra == "langgraph"
Requires-Dist: langchain-core>=0.3; extra == "langgraph"
Provides-Extra: crewai
Requires-Dist: crewai>=0.80; extra == "crewai"
Provides-Extra: pydantic-ai
Requires-Dist: pydantic-ai>=0.0.20; extra == "pydantic-ai"
Provides-Extra: autogen
Requires-Dist: autogen-core>=0.4; extra == "autogen"
Provides-Extra: claude-sdk
Requires-Dist: claude-agent-sdk>=0.1; extra == "claude-sdk"
Provides-Extra: all
Requires-Dist: waxell[autogen,claude-sdk,crewai,langgraph,pydantic-ai]; extra == "all"
Dynamic: license-file

# waxell

[![PyPI - Version](https://img.shields.io/pypi/v/waxell?include_prereleases)](https://pypi.org/project/waxell)
[![Docs](https://img.shields.io/badge/docs-waxell.ai-blue)](https://waxell.ai/docs/intro)
[![License: MIT](https://img.shields.io/badge/license-MIT-green)](https://spdx.org/licenses/MIT.html)

**[Docs](https://waxell.ai/docs/intro)** ·
**[Quickstart](https://waxell.ai/docs/runtime/quickstart)** ·
**[CLI Reference](https://waxell.ai/docs/reference/cli)** ·
**[Observability](https://waxell.ai/docs/observe/overview)** ·
**[Coming from LangChain/CrewAI?](https://waxell.ai/docs/migrate/overview)**

**Build and run governed AI agents.** One install gets you the durable execution
engine (spawn/suspend, budget enforcement, governance hooks, lineage), the
authoring decorators, the `wax` CLI, and observability:

```bash
pip install waxell
```

Using another agent framework and just want observability + governance on top?
That's the standalone observe SDK:

```bash
pip install waxell-observe   # LangChain, OpenAI Agents, CrewAI, … — no runtime needed
```

## What you get

| Piece | What it is | How you touch it | Docs |
|---|---|---|---|
| **`waxell`** | The library — author + run agents | `from waxell import agent, workflow, tool` | [Runtime quickstart](https://waxell.ai/docs/runtime/quickstart) |
| **`wax`** | The CLI — push, observe, govern from the terminal | `wax push`, `wax runs`, `wax traces`, … | [CLI reference](https://waxell.ai/docs/reference/cli) |
| **`waxell.observe`** | Observability SDK (the `waxell-observe` package) | mostly automatic | [Observe overview](https://waxell.ai/docs/observe/overview) |

## Quick start

```python
from waxell import agent, workflow

@agent(name="lead_research", description="Research a lead and draft outreach")
class LeadResearch:
    @workflow("draft_email")
    async def draft(self, ctx, domain: str):
        company = await ctx.tool("fetch_company", domain=domain)
        email = await ctx.llm.generate(
            prompt=f"Write a 3-sentence intro for {company['name']}",
            task="outreach_email",
        )
        return {"email": email, "company": company["name"]}
```

Then push and observe it with the CLI
([full command reference](https://waxell.ai/docs/reference/cli)):

```bash
wax login                 # authenticate (or: wax config init)
wax push ./my-agents      # push agents, tools, workflows, and skills
wax runs                  # browse execution runs
wax traces                # explore distributed traces
```

Full walkthrough: [runtime quickstart](https://waxell.ai/docs/runtime/quickstart) ·
agent/workflow/tool spec reference: [SDK docs](https://waxell.ai/docs/sdk/overview)

## What's in the box

- **Execution engine** — `ExecutionContext`, `WorkflowEnvelope`, durable `Step`,
  checkpoint/resume, `ctx.spawn` / `ctx.spawn_many`, tree-budget enforcement.
- **Governance** — pluggable `GovernanceHook`, in-runtime policy bridge, AXID
  mint/verify, lineage.
- **Framework adapters** — run governed LangGraph, CrewAI, Pydantic AI, AutoGen,
  and Claude Agent SDK agents
  ([migration guides](https://waxell.ai/docs/migrate/overview)). Each adapter's
  framework dependency is optional:

  ```bash
  pip install "waxell[langgraph]"
  pip install "waxell[all]"     # every adapter
  ```

- **Authoring** — `agent`, `workflow`, `router`, `tool`, `policy` decorators,
  spec types, memory helpers, and typed `Context` objects for IDE autocomplete.
- **Observability** — every run traced; cost, tokens, and policy decisions in
  the Waxell dashboard via `waxell.observe`.

Import aliases: `from waxell import agent` is the documented path;
`from waxell_runtime import agent` works too and is kept forever. The internal
`waxell_sdk` package bundled in this wheel is an implementation detail — never
import it directly.

## Development (monorepo)

```bash
# Editable install keeps protected modules as readable .py (no Cython)
pip install -e runtime/waxell-runtime

# The internal waxell_sdk is synced into src/ at build/install time from
# ../../sdk/waxell-sdk — that synced copy is gitignored. Source of truth is
# agentforge/sdk/waxell-sdk/.

cd runtime/waxell-runtime && hatch run types:check
pytest runtime/waxell-runtime/tests/ -v
```

## License

`waxell` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
