Metadata-Version: 2.4
Name: bottensor-fleet
Version: 0.1.2
Summary: Graph-native multi-agent fleet for Python. BYO-key. Local-first.
Project-URL: Homepage, https://bottensor.xyz
Project-URL: Repository, https://github.com/ramankrishna/bottensor-fleet
Project-URL: Issues, https://github.com/ramankrishna/bottensor-fleet/issues
Author-email: Rama Krishna Bachu <ram@bottensor.xyz>
License: Apache-2.0
License-File: LICENSE
Keywords: agents,anthropic,dag,llm,multi-agent,openai,orchestration
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.11
Requires-Dist: aiosqlite>=0.20
Requires-Dist: fastapi>=0.115
Requires-Dist: httpx>=0.27
Requires-Dist: polyrt[anthropic,openai]>=0.1.0
Requires-Dist: pydantic>=2.7
Requires-Dist: rich>=13.7
Requires-Dist: tenacity>=8.3
Requires-Dist: typer>=0.12
Requires-Dist: uvicorn[standard]>=0.30
Requires-Dist: websockets>=12.0
Provides-Extra: all
Requires-Dist: duckduckgo-search>=6.0; extra == 'all'
Requires-Dist: redis[hiredis]>=5.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: duckduckgo-search>=6.0; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: redis[hiredis]>=5.0; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Provides-Extra: redis
Requires-Dist: redis[hiredis]>=5.0; extra == 'redis'
Provides-Extra: search
Requires-Dist: duckduckgo-search>=6.0; extra == 'search'
Description-Content-Type: text/markdown

# bottensor-fleet

> Graph-native multi-agent fleet for Python. BYO-key. Local-first. Ships with a UI.

[![PyPI](https://img.shields.io/pypi/v/bottensor-fleet.svg)](https://pypi.org/project/bottensor-fleet/)
[![Python](https://img.shields.io/pypi/pyversions/bottensor-fleet.svg)](https://pypi.org/project/bottensor-fleet/)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)

<!-- demo.gif placeholder — will be added after capture run -->

## Why

Most multi-agent frameworks are heavy and locked to one ecosystem. LangGraph is tied to LangChain. CrewAI is opinionated about roles. AutoGen is conversation-first. `bottensor-fleet` is a small, graph-native runtime that runs anywhere Python runs, lets you bring your own provider key, and ships with a real UI in the wheel.

## Install

```bash
pip install 'bottensor-fleet[search]'
export ANTHROPIC_API_KEY=sk-ant-...
```

Extras: `[search]` adds web tools, `[redis]` adds Redis checkpointing, `[all]` gets everything.

## 30-second example

```python
import asyncio
from fleet import Agent, Graph
from fleet.core.state import GraphState
from fleet.providers.client import FleetLLM

llm = FleetLLM("claude", "claude-sonnet-4-6")
researcher = Agent(name="researcher", llm=llm, tools=["web_search", "web_fetch"])

graph = (
    Graph("solo")
    .add_node("researcher", researcher.step)
    .set_entry("researcher")
    .set_exit("researcher")
    .compile()
)

state = asyncio.run(graph.run(GraphState(goal="What is ReasoningBank?")))
print(state.messages[-1].content)
```

## UI

```bash
fleet ui
```

Opens a local dashboard at `http://localhost:8765` with a live DAG view, per-agent logs, token spend, and run history.

## CLI

| Command | What it does |
|---|---|
| `fleet new <name>` | Scaffold a new graph |
| `fleet run <graph.py>` | Run a graph from a file |
| `fleet replay <run_id>` | Re-run a past graph from its saved source path |
| `fleet examples [name]` | List bundled examples or extract one to the current directory |
| `fleet ui` | Launch the local dashboard |
| `fleet add-agent` | Append an agent to an existing graph |
| `fleet ls` | List past runs |
| `fleet --version` | Print version |

## Design

- **Graph-native:** DAGs with conditional edges and bounded cycles, executed async with `asyncio.gather` for parallel fan-out.
- **BYO-key:** Provider abstraction via [polyrt](https://pypi.org/project/polyrt/). Anthropic and OpenAI in the default install; MLX, Ollama, and others via polyrt extras.
- **Checkpointed:** Every run persists to SQLite (default) or Redis (opt-in via `[redis]` extra).
- **Tools and skills:** `@tool` decorator auto-derives JSON schemas from type hints. `@skill` for higher-level capabilities. Web search and fetch built in via the `[search]` extra.
- **UI in the wheel:** No separate Node install for users. The React + Vite frontend is bundled into the published wheel.

## Comparison

| | bottensor-fleet | LangGraph | CrewAI | AutoGen |
|---|---|---|---|---|
| Graph topology | ✅ DAG + cycles | ✅ | ❌ role-based | ❌ conversation |
| Provider-agnostic | ✅ via polyrt | ⚠️ via LangChain | ⚠️ | ⚠️ |
| Ships with UI | ✅ | ❌ | ❌ | ⚠️ Studio (separate) |
| Pip-install size | ~150 KB wheel | heavy | medium | heavy |
| LangChain dependency | ❌ | ✅ required | ❌ | ❌ |

## Roadmap

- **v0.2** — ReasoningBank ([Ouyang et al., ICLR 2026](https://arxiv.org/abs/2509.25140)): self-evolving agents that learn from successful and failed trajectories. Memory-aware test-time scaling (MaTTS).
- **v0.3** — MLX embedder, sequential MaTTS, distributed scheduler.
- **v0.4** — Vector memory backend, cloud deploy templates.

## Security

The `python_exec` tool is unsandboxed in v0.1.x. Do not run untrusted graphs. A Docker sandbox lands in v0.2.

## License

Apache-2.0. © 2026 Rama Krishna Bachu.

## Acknowledgements

Built on [polyrt](https://pypi.org/project/polyrt/). ReasoningBank design (v0.2) follows Ouyang et al., *ReasoningBank: Scaling Agent Self-Evolving with Reasoning Memory*, ICLR 2026.
