Metadata-Version: 2.5
Name: smythe
Version: 0.8.0
Summary: Generated agent execution graphs with durable, budgeted orchestration
Project-URL: Homepage, https://github.com/petehottelet/smythe
Project-URL: Repository, https://github.com/petehottelet/smythe
Project-URL: Issues, https://github.com/petehottelet/smythe/issues
Project-URL: Changelog, https://github.com/petehottelet/smythe/blob/main/CHANGELOG.md
Project-URL: Security Policy, https://github.com/petehottelet/smythe/security/policy
Author: Pete Hottelet
License-Expression: MIT
License-File: LICENSE
Keywords: agents,checkpointing,dag,llm,multi-agent,orchestration,swarm
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
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
Requires-Python: >=3.11
Requires-Dist: pyyaml>=6.0
Provides-Extra: all
Requires-Dist: anthropic>=1.5; extra == 'all'
Requires-Dist: google-genai>=1.0; extra == 'all'
Requires-Dist: mcp<2,>=1.2; extra == 'all'
Requires-Dist: numpy<3,>=2.0; extra == 'all'
Requires-Dist: openai>=3.8; extra == 'all'
Requires-Dist: openclaw-sdk>=0.1; extra == 'all'
Requires-Dist: pillow==11.1.0; extra == 'all'
Requires-Dist: pillow>=10.0; extra == 'all'
Requires-Dist: scipy<2,>=1.14; extra == 'all'
Requires-Dist: shapely==2.1.2; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=1.5; extra == 'anthropic'
Provides-Extra: benchmarks
Requires-Dist: anthropic>=1.5; extra == 'benchmarks'
Requires-Dist: crewai>=1.0; extra == 'benchmarks'
Requires-Dist: google-genai>=1.0; extra == 'benchmarks'
Requires-Dist: langchain-openai>=1.0; extra == 'benchmarks'
Requires-Dist: langgraph-checkpoint-sqlite>=3.0; extra == 'benchmarks'
Requires-Dist: langgraph>=1.0; extra == 'benchmarks'
Requires-Dist: openai>=3.8; extra == 'benchmarks'
Requires-Dist: pillow>=10.0; extra == 'benchmarks'
Provides-Extra: dev
Requires-Dist: mcp<2,>=1.2; extra == 'dev'
Requires-Dist: mypy==1.17.1; extra == 'dev'
Requires-Dist: numpy<3,>=2.0; extra == 'dev'
Requires-Dist: pillow==11.1.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff==0.16.0; extra == 'dev'
Requires-Dist: scipy<2,>=1.14; extra == 'dev'
Requires-Dist: shapely==2.1.2; extra == 'dev'
Provides-Extra: gemini
Requires-Dist: google-genai>=1.0; extra == 'gemini'
Provides-Extra: glyphs
Requires-Dist: numpy<3,>=2.0; extra == 'glyphs'
Requires-Dist: pillow==11.1.0; extra == 'glyphs'
Requires-Dist: scipy<2,>=1.14; extra == 'glyphs'
Requires-Dist: shapely==2.1.2; extra == 'glyphs'
Provides-Extra: jobs
Requires-Dist: pillow>=10.0; extra == 'jobs'
Provides-Extra: mcp
Requires-Dist: mcp<2,>=1.2; extra == 'mcp'
Provides-Extra: openai
Requires-Dist: openai>=3.8; extra == 'openai'
Provides-Extra: openclaw
Requires-Dist: openclaw-sdk>=0.1; extra == 'openclaw'
Description-Content-Type: text/markdown

<div align="center">
  <img src="https://raw.githubusercontent.com/petehottelet/smythe/v0.8.0/assets/wordmark.svg" alt="SMYTHE" width="340">
  <p><em>Turn a goal into an inspectable agent workflow. Run it with budgets and recovery.</em></p>
  <p>
    <a href="https://pypi.org/project/smythe/"><img src="https://raw.githubusercontent.com/petehottelet/smythe/main/assets/badges/pypi.svg" alt="Latest PyPI release"></a>
    <a href="https://github.com/petehottelet/smythe/actions/workflows/ci.yml"><img src="https://raw.githubusercontent.com/petehottelet/smythe/v0.8.0/assets/badges/ci.svg" alt="CI checks"></a>
    <img src="https://raw.githubusercontent.com/petehottelet/smythe/v0.8.0/assets/badges/python.svg" alt="Python 3.11, 3.12, and 3.13">
    <a href="https://github.com/petehottelet/smythe/blob/v0.8.0/LICENSE"><img src="https://raw.githubusercontent.com/petehottelet/smythe/v0.8.0/assets/badges/license.svg" alt="License: MIT"></a>
  </p>
  <p>
    <a href="#quickstart">Quickstart</a> ·
    <a href="#how-it-works">How it works</a> ·
    <a href="#measured-results">Measured results</a> ·
    <a href="https://github.com/petehottelet/smythe/blob/v0.8.0/docs/index.md">Documentation</a>
  </p>
</div>

**Smythe is a Python framework that plans and runs agent workflows.** Give it a
goal, inspect the generated task graph, and execute independent work in parallel.
Set spending and concurrency limits, verify outputs, and recover saved work after
an interruption.

Use it for research pipelines, document production, and artifact generation
where you need to see what will run and account for what happened.

## Quickstart

Python 3.11+. Install the released library with OpenAI support:

```bash
pip install "smythe[openai]==0.8.0"
```

Set `OPENAI_API_KEY`, then plan and execute with
[GPT-6 Astra](https://developers.openai.com/api/docs/models/gpt-6-astra):

```python
from smythe import OpenAIResponsesProvider, SQLiteWorkflowStore, Swarm, Task

with SQLiteWorkflowStore("smythe-runs.db") as store:
    swarm = Swarm(
        model="gpt-6-astra",
        provider=OpenAIResponsesProvider(
            reasoning_effort="medium",
            max_output_tokens=8192,
        ),
        run_store=store,
        max_budget_usd=5.00,
        parallel=True,
        max_concurrency=8,
    )
    graph = swarm.plan(Task(
        goal="Compare SQLite, PostgreSQL, and DuckDB for a local analytics app.",
        constraints=["Stay under 400 words", "Recommend one database"],
    ))
    print(graph)
    result = swarm.execute(graph)
    print(result.output)
```

This makes paid API calls under a **$5 run allowance**. The SQLite ledger
accounts for planning and execution, reserves requests before dispatch, and
retains responses for recovery. See [budget scope](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/budgets.md) and
[durable text workflows](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/workflow-accounting.md).

To try planning, execution, and recovery with **no API calls**, run the explicit
offline example from a source checkout:

```bash
git clone https://github.com/petehottelet/smythe.git
cd smythe
pip install -e .
python examples/14_durable_text_workflow.py
```

The example uses fixture responses and verifies that resuming produces the same
output. [More examples](https://github.com/petehottelet/smythe/blob/v0.8.0/examples/README.md).

## How it works

**The graph defines the work.** Smythe generates a directed acyclic graph for
the task, including dependencies and agent assignments. Inspect or export it
before execution. Use approved templates or a graph you write yourself when
the workflow is already known.

**The execution envelope governs the run.** Budgets, bounded concurrency,
verification, traces, artifacts, and recovery apply as the graph executes.
Durable Jobs add manifest approval, attempt history, selective rerolls, and
local HTML reports.

<p align="center">
  <img src="https://raw.githubusercontent.com/petehottelet/smythe/v0.8.0/assets/diligence_pipeline.svg" alt="Acquisition diligence: parallel specialists, synthesis, adversarial review, and a final memo" width="900">
</p>

The [acquisition-diligence example](https://github.com/petehottelet/smythe/tree/v0.8.0/examples/acquisition_diligence/) shows
three specialists feeding an editor, a red-team review, and a final decision
memo. Its saved graph, trace, and expected output make the workflow inspectable.

| You need to… | Smythe provides |
|---|---|
| Adapt the workflow to the task | Generated graphs, approved templates, and deterministic planning |
| Control spending and parallel work | Request reservations and bounded concurrency |
| Recover interrupted work | Checkpoints, native response replay, and durable job journals |
| Check the deliverable | Output verification and artifact receipts |
| Understand a run | Graph exports, traces, costs, and inspection reports |

[Architecture](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/architecture.md) · [Execution](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/execution.md) ·
[Jobs](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/jobs.md) · [Verification](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/verifier.md) · [MCP tools](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/mcp.md).

## Measured results

Each result links to its method and retained records.

| Study | Recorded result | Scope |
|---|---|---|
| [Framework comparison](https://github.com/petehottelet/smythe/blob/v0.8.0/benchmarks/README.md#corrected-framework-head-to-head-langgraph-and-crewai-2026-07-12) | 77% fewer mean tokens and 28% less mean wall time than CrewAI | Five tasks, three repetitions; matched executor and fixed pipeline; blind judging |
| [Interruption and recovery](https://github.com/petehottelet/smythe/blob/v0.8.0/benchmarks/durability_benchmark.md) | 8 repeated dispatches versus LangGraph's 32 | Three matched hard-kill trials with 64 operations |
| [SVG catalog workflow](https://github.com/petehottelet/smythe/blob/v0.8.0/benchmarks/svg_v2_results.md) | 256 SVGs in 8.06 seconds median; 2.20× the serial baseline | Local compilation, validation, and export of authored designs; no API calls |

The [200-workflow Astra/Sol study](https://github.com/petehottelet/smythe/blob/v0.8.0/benchmarks/astra_findings.md)
also reports the limits of generated plans: they increased mean time in both
models on its ten synthetic tasks. The frozen rule accepted 191/200 workflows;
human review accepted all eight disputed available answers. One missing usage
receipt limits affected exact cost comparisons. All outcomes remain published.

[All benchmarks, charts, and evidence status](https://github.com/petehottelet/smythe/blob/v0.8.0/benchmarks/README.md).

## Project status

**Smythe 0.8.0** is the current library release. See the
[release notes and upgrade guide](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/release-0.8.0.md). The API is pre-1.0;
minor releases may change it. Later source changes appear in the
[changelog](https://github.com/petehottelet/smythe/blob/v0.8.0/CHANGELOG.md#unreleased).

Next priorities are complete-deliverable checks, broader external-task
benchmarks, and separately controlled Astra scheduler and framework studies.
See the [roadmap](https://github.com/petehottelet/smythe/blob/v0.8.0/ROADMAP.md) for status and acceptance criteria.

The [Glyph Rain screensaver](https://github.com/petehottelet/smythe/blob/v0.8.0/screensaver/README.md) is an artifact-generation
showcase with source builds and a [web explorer](https://github.com/petehottelet/smythe/blob/v0.8.0/screensaver/svg-preview/README.md).
Precompiled screensaver distribution is paused.

[Documentation](https://github.com/petehottelet/smythe/blob/v0.8.0/docs/index.md) · [Contributing](https://github.com/petehottelet/smythe/blob/v0.8.0/CONTRIBUTING.md) ·
[Releases](https://github.com/petehottelet/smythe/releases) ·
[Security](https://github.com/petehottelet/smythe/blob/v0.8.0/SECURITY.md) · [MIT license](https://github.com/petehottelet/smythe/blob/v0.8.0/LICENSE).
