Skip to main content
SemanticRun

Temporal replays code. LangGraph orchestrates graphs.
SemanticRun freezes what your agent already committed — and resumes with proof of what drifted.

Python 3.11+ License: MIT PyPI Status

Artifact-aware durable agent environment for Python.
Survive crashes, human waits, model swaps, and tool drift — without redoing completed work or silently replaying side effects.

from semanticrun import SemanticRun, PolicyMapping

env = SemanticRun.open("./runs.db")

run = env.start(
    intent="Onboard lead_42",
    plan=["research", "draft", "approve", "send"],
    policies=PolicyMapping(
        tool_result_hash_mismatch="revalidate",
        model_id_changed="fail_fast",
        outbound_payload_divergence="fail_fast",
    ),
)

for step in run.steps():  # completed steps skipped on resume
    if step.name == "research":
        lead = step.tool("crm_lookup", lambda: crm.lookup("lead_42"),
                         hash_exclude=["created_at"])
    elif step.name == "draft":
        draft = step.llm(lambda: llm.draft(lead), model="gpt-4.1")
        step.remember("draft_email", draft)
    elif step.name == "approve":
        step.require_approval("send_email", {"draft": draft})
    elif step.name == "send":
        step.tool("send_email", lambda: mail.send(draft),
                  side_effect="external",
                  outbound={"to": lead["email"], "body": draft})

run = env.resume(run_id, artifacts=...)  # matrix + policies; cursor continues

Day-one proof: drift recovery

Pause an agent mid-run, inject drift, resume three ways.
Suite: benchmarks/drift_recovery/ (OpenRouter free models when OPENROUTER_API_KEY is set; deterministic stub otherwise).

Drift injected Naive restart Blind resume SemanticRun
Model ID swap continues blind continues blind abort (model_id_changed)
File edit while waiting continues blind continues blind abort (file_tree_hash_mismatch)
Tool schema change continues blind continues blind revalidate
Tool result drift continues blind continues blind revalidate
Re-synthesized outbound re-sends re-sends abort (outbound_payload_divergence)

Score (5/5 scenarios): naive restart safe 0/5 · blind resume safe 0/5 · SemanticRun safe 5/5

That is the visceral loop Temporal had for distributed systems: feel the failure, then watch the environment refuse it. Papers describing the failure mode are not the product proof — this suite is.

python benchmarks/drift_recovery/run_suite.py

Why SemanticRun

Temporal LangGraph SemanticRun
Core idea Replay workflow code Orchestrate agent graphs Diff committed artifacts on resume
Durability Event history Checkpointers Sync checkpoints + plan cursor
Drift (tools / models / files) App-level App-level Divergence matrix + enforced policies
Side effects Activity semantics App-managed Outbound payload hash gate

Not a Temporal or LangGraph plugin — the environment your agent runs in when the question is “what already happened, and is it still true?”

Install

pip install SemanticRun

# from source:
pip install -e ".[dev]"
pytest
python examples/survive_the_swap.py

What you get

  • Durable plan cursor — run.steps() skips finished work after resume
  • Sync checkpoints — written before the step returns (SQLite)
  • Divergence matrix — mechanical diffs; no LLM guessing
  • Enforced policies — fail_fast / revalidate / strict_reset
  • Outbound replay gate — refuse divergent external side effects

License

MIT

Metadata

Release files for SemanticRun 0.4.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 SemanticRun 0.4.2
File Size Uploaded
semanticrun-0.4.2.tar.gz 212.2 kB Details

Built distribution (wheel)

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

Total release size: 248.0 kB

Release files / semanticrun-0.4.2.tar.gz

Download URL semanticrun-0.4.2.tar.gz
Size 212.2 kB
Tags Source
SHA-256 checksum
How to use checksums
51a5cafd8f8f6c0e64705cef56debeebfd47df1230f83b65be4f57da49dcd637
BLAKE2b-256 checksum
How to use checksums
74bd9e66da10cbfc60b0c99834baa9b4f4c1635e91f903798a352d27ea49e48a
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 Aug 4, 2026.

Transparency log

Release files / semanticrun-0.4.2-py3-none-any.whl

Download URL semanticrun-0.4.2-py3-none-any.whl
Size 35.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f0e501fc4e7950e031fa1084baa8c939f78a6a0e31caec7ac1c009a9fe923424
BLAKE2b-256 checksum
How to use checksums
907e66ac2b19c096ed4c1cddfbf05b700381a0fa75d1c09986b73d3c9e6f0e05
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 Aug 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

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