Metadata-Version: 2.5
Name: soothe
Version: 0.10.12
Summary: Soothe - Goal-driven multi-agent orchestration framework
Project-URL: Homepage, https://github.com/mirasoth/soothe
Project-URL: Repository, https://github.com/mirasoth/soothe
License: MIT
Keywords: agents,ai,langchain,langgraph,llm,multi-agent,soothe,subagents
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: <3.14,>=3.11
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
Requires-Dist: jinja2>=3.1.0
Requires-Dist: langchain-core<2.0.0,>=1.2.18
Requires-Dist: langchain<2.0.0,>=1.2.11
Requires-Dist: langgraph-checkpoint-postgres<4.0.0,>=3.1.0
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.0
Requires-Dist: langgraph-checkpoint<5.0.0,>=4.0.0
Requires-Dist: langgraph<2.0.0,>=1.1.1
Requires-Dist: psycopg[binary,pool]<4.0.0,>=3.2.0
Requires-Dist: pydantic-settings<3.0.0,>=2.0.0
Requires-Dist: pydantic<3.0.0,>=2.0.0
Requires-Dist: pyjwt<3.0.0,>=2.8.0
Requires-Dist: pyyaml<7.0.0,>=6.0.0
Requires-Dist: soothe-nano<2.0.0,>=1.1.19
Requires-Dist: soothe-sdk<2.0.0,>=1.0.8
Requires-Dist: watchdog<5.0.0,>=3.0.0
Provides-Extra: dev
Requires-Dist: langfuse<4.0.0,>=3.0.0; extra == 'dev'
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.12.0; extra == 'dev'
Description-Content-Type: text/markdown

# Soothe

Goal-driven multi-agent orchestration framework (in-process host core).

Extends [soothe-nano](https://github.com/mirasoth/soothe-nano) with StrangeLoop
planning, durability, and Autopilot (daemon-dispatched). For a lightweight
one-shot coding CLI on nano alone, see [fj-ai](https://github.com/caesar0301/fj-ai).

## Installation

Full runtime (daemon + CLI):

```bash
pip install soothe soothe-daemon soothe-cli
```

Library only (this package):

```bash
pip install soothe
```

## What's in this package

| Piece | Role |
|-------|------|
| `SootheRunner` | Protocol orchestration + StrangeLoop stream (`astream`) |
| `create_soothe_agent` | Host CoreAgent factory (planner/policy/memory wired) |
| `SootheConfig` | Nano base + host overlay (`nano.yml` / `soothe.yml`) |
| StrangeLoop / Autopilot / CE / cron | Host orchestration (Autopilot needs the daemon) |

## Quick example (StrangeLoop, non-autopilot)

In-process, fj-style one-shot — no daemon:

```python
import asyncio
from soothe.config import SootheConfig
from soothe.runner import SootheRunner


async def main() -> None:
    config = SootheConfig.from_yaml_file("~/.soothe/config/nano.yml")
    runner = SootheRunner(config)
    try:
        async for _ns, mode, data in runner.astream("Summarize this repo"):
            if mode == "messages":
                print(data)  # (message, metadata)
    finally:
        await runner.cleanup()


asyncio.run(main())
```

Runnable script (loads `~/.soothe/config`, SQLite defaults, prints progress):

```bash
uv run python examples/01_strange_loop_example.py
```

Pass `autopilot_job=...` only when embedding a daemon-dispatched worker goal.
Interactive / library use should omit it so StrangeLoop runs the user query.

## Related packages

| Package | Purpose |
|---------|---------|
| `soothe-daemon` | Long-running server (HTTP/WS, channels, Autopilot dispatch) |
| `soothe-cli` | Human CLI + Textual TUI |
| `soothe-sdk` | Shared wire contracts and types |
| `soothe-nano` | SootheNanoAgent (tools, skills, MCP) |

## Testing

```bash
uv run pytest packages/soothe/tests/unit/ -v
```
