Skip to main content
SMYTHE

An open-source framework for task-based agent swarms with dynamic parallelization, routing, and execution topology.

Latest PyPI release CI status on main Python 3.11, 3.12, and 3.13 License: MIT

Quickstart runs with no API key Providers: OpenAI, Anthropic, and Google Durable runs: SQLite journal Benchmarks with raw records Typed: ships py.typed

Quickstart · How it works · Measured results · Documentation

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 results.

Animated rain showing only the 192 revised Smythe glyphs

Glyph Rain is Smythe's parallel-processing example: each glyph is an independent task, and Smythe runs the tasks concurrently.

Example Task: Smythe generated 192 glyphs in 20.5 seconds, 56.2× faster than serial. Smythe runs the glyph set as one 192-node fan-out graph, one node per glyph, with up to 64 nodes; run one node at a time, the same graph took 1,149.6 seconds. Controlled offline run with fixed latency per call measures Smythe's scheduling. Glyphs are compiled, validated, and exported in parallel: 256 SVG glyphs in 8.06 seconds median with eight process workers, 2.20× faster than one worker, with no API calls. Fan-out benchmark · SVG workflow benchmark

192-glyph sheet · 256-glyph sheet · Individual SVGs · Web explorer · All materials

Quickstart

Python 3.11+:

pip install smythe

Plan, run, and recover a workflow with no API key:

from smythe import OfflineProvider, SQLiteWorkflowStore, Swarm, Task

# The plan a model would generate. OfflineProvider returns it to the planner
# and echoes each step, so everything below runs without an API key.
plan = {
    "topology": ["fork_join"],
    "nodes": [
        {"id": "sqlite", "label": "Assess SQLite"},
        {"id": "postgres", "label": "Assess PostgreSQL"},
        {"id": "duckdb", "label": "Assess DuckDB"},
        {"id": "pick", "label": "Recommend one database",
         "depends_on": ["sqlite", "postgres", "duckdb"]},
    ],
}

with SQLiteWorkflowStore("smythe-runs.db") as store:
    swarm = Swarm(
        provider=OfflineProvider(plan=plan),
        run_store=store,
        max_budget_usd=1.00,
        parallel=True,
    )
    graph = swarm.plan(Task("Compare SQLite, PostgreSQL, and DuckDB for a local analytics app."))
    print(graph)  # inspect the generated graph before anything runs

    result = swarm.execute(graph)
    print(result.output)

    replay = swarm.resume(result.execution_id)  # replayed from the journal, no new calls
    print(replay.output == result.output)

print(graph) shows the graph before anything runs:

TaskGraph(topology="fork-join")
├─ fork (parallel):
│   ├─ agent-sqlite: Assess SQLite
│   ├─ agent-postgres: Assess PostgreSQL
│   └─ agent-duckdb: Assess DuckDB
└─ join: agent-pick: Recommend one database

The three assessments run in parallel under the $1 budget, and the SQLite journal records every call, so resume returns the finished run without calling the provider again.

With a real model

Install a provider extra, set OPENAI_API_KEY, and let GPT-6 Astra write the plan and the answers:

pip install "smythe[openai]"
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=50.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 $50 run allowance. The SQLite ledger accounts for planning and execution, reserves requests before dispatch, and retains responses for recovery. See budget scope and durable text workflows. Claude and Gemini install the same way, with smythe[anthropic] and smythe[gemini]; durable run stores accept the OpenAI Responses and Claude Messages providers. More examples.

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.

Acquisition diligence: parallel specialists, synthesis, adversarial review, and a final memo

The acquisition-diligence example 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 · Execution · Jobs · Verification · MCP tools.

Measured results

Each result links to its protocol and retained records. Charts are generated from the committed records.

Study Recorded result Scope
Framework comparison 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 8 repeated dispatches versus LangGraph's 32 Three matched hard-kill trials with 64 operations
Generated topology 14% less wall time than a fixed pipeline, planning included Five task shapes, three repetitions; wall time and observed quality
SVG catalog workflow 256 SVGs in 8.06 seconds median; 2.20× the serial baseline Local compilation, validation, and export of authored designs; no API calls
Glyph generation at scale 56.2× faster than serial at concurrency 64 Controlled offline runs at 64 to 256 nodes; simulated provider latency
Jobs at 5,000 operations 5,000 accepted artifacts after a hard kill and recovery One offline campaign with identical fixtures; correctness, not speed

Framework efficiency

On a fixed three-stage pipeline, Smythe used 77% fewer tokens and 28% less wall time than CrewAI across five tasks and three repetitions per framework, with the same executor model and blind cross-vendor judging. It also recorded 6% less mean wall time than LangGraph, and the highest observed quality score: 9.73/10, versus 9.53 for both. Token counts describe model usage, not invoice savings.

Smythe uses 77 percent fewer mean tokens and 28 percent less mean wall time than CrewAI on the matched fixed-pipeline suite

Smythe, LangGraph, and CrewAI: observed blind quality, mean token counts, and mean wall time across 15 runs per framework

Recovery after interruption

After a hard kill, Smythe repeated 8 calls versus LangGraph's 32, a 75% reduction, in each of three matched repetitions. Both finished all 64 operations. Recovery protocol.

Three matched interruption tests: Smythe repeated 8 dispatches and LangGraph repeated 32 in every repetition; both finished all 64 operations

Generated execution topology

Across five task shapes, generated plans took 14% less wall time than a fixed pipeline, planning included. They used one node for a simple transformation and 5.3 on average for parallel research. Observed quality averaged 9.47/10 versus 9.33/10, within measured judge variation. Task-shape protocol and records.

Generated plans adapt node count to the task and reduce mean wall time by 14 percent, including planning, across the task-shape suite

The 200-workflow Astra/Sol study 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.

Parallel artifact generation

Smythe compiles, validates at four sizes, compares every pair, and exports 256 SVG glyphs in 8.06 seconds median, 2.20× faster than its concurrency-one baseline with eight process workers. All 36 workflows pass with identical SVG and pixel hashes across repetitions, with zero API calls. Results and scope.

All 36 complete v2 workflows at 192 and 256 glyphs, with medians, ranges and one actual run's stages

Process workers trade more memory for shorter completion time:

Measured parent-plus-worker memory at each catalog size and concurrency

At concurrency 64, generating 192 glyphs took 20.5 seconds versus 1,149.6 seconds serially, 56.2× faster, and all 192 validated as unique. This is a controlled offline measurement with 5.8 seconds of simulated provider latency per call; every 64-, 128-, 192- and 256-node run produced complete sets of valid, unique tiles. Glyph protocol and records.

Controlled offline glyph generation at four graph widths, with all tiles valid and unique at every measured concurrency

Jobs at 5,000 operations

A durable Jobs campaign was killed mid-run and recovered to 5,000 accepted artifacts. Safe resume preserved the 2,492 outputs already accepted and reissued none of them; eight interrupted operations needed explicit rerolls, and resuming the completed job made zero new calls. One offline campaign with identical fixtures, so this shows recovery correctness, not speed. Results and independent reconciliation.

One offline Jobs campaign: 2,492 accepted after the kill, 4,992 after safe resume, and 5,000 after eight explicit rerolls

All benchmarks, charts, and evidence status.

Project status

Smythe 0.8.2 is the current library release. See the release notes and upgrade guide.

Next priorities are complete-deliverable checks, broader external-task benchmarks, and separately controlled Astra scheduler and framework studies. See the roadmap for status and acceptance criteria.

The Glyph Rain screensaver is an artifact-generation showcase with source builds and a web explorer. Screensaver distribution is source only, but you're welcome to compile your own binary.

Documentation · Contributing · Releases · Security · MIT license.

Release files for smythe 0.8.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for smythe 0.8.2
File Size Uploaded
smythe-0.8.2.tar.gz 761.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for smythe 0.8.2
File Interpreter ABI Platform
smythe-0.8.2-py3-none-any.whl Python 3 none any Details

Total release size: 1.1 MB

Release files / smythe-0.8.2.tar.gz

Download URL smythe-0.8.2.tar.gz
Size 761.6 kB
Tags Source
SHA-256 checksum
How to use checksums
06e4940e2f836b4205c159b03ad15fc5675ea69796e89c4f10c4f35db8cd8e9e
BLAKE2b-256 checksum
How to use checksums
cda56d44989af95d24ac6d3bd9b867caa8882e6afd3e9bc6f16a8ee444386c93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / smythe-0.8.2-py3-none-any.whl

Download URL smythe-0.8.2-py3-none-any.whl
Size 355.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d405bc5ea662ba8bd55ef8056e3fba0964e7f33d0c4867d821701632c4b9c052
BLAKE2b-256 checksum
How to use checksums
99520876ffe5ea6c349c6c75ea5ad6e0d78c78bce775ffd643f392bed4254ba1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.2 This release

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page