scheduler Plan Research Analyze Review Synthesize

Your agents crash.
Ours recover.

JamJet checkpoints every step as it happens. When a worker dies mid-run, the scheduler reclaims the lease and resumes from exactly where it stopped — no lost work, no duplicate actions, no reruns.

$ pip install jamjet
Read the docs

See it run

jamjet · research-pipeline.yaml
$ jamjet run research-pipeline.yaml
▸ Starting execution exec_7f3a...
▸ [Plan]       ✓ completed  420ms
▸ [Research]   ✓ completed  1.2s
▸ [Analyze]    ✗ worker crashed
▸ Lease expired · reclaiming...
▸ [Analyze]    ✓ resumed    890ms
▸ [Review]     ✓ completed  650ms
▸ [Synthesize] ✓ completed  1.1s
▸ Execution complete · 5/5 nodes · 0 events lost
View full example on GitHub →
pipeline.py Python · 12 lines
from jamjet import task, workflow

@task
async def analyze(data: dict) -> dict:
    # your logic here — crash-safe by default
    return {"summary": llm.call(data)}

@workflow
async def pipeline():
    raw  = await fetch_data()
    out  = await analyze(raw)
    return out

12 lines of Python. Crash-safe by default.

Why teams care

Lower rerun cost

Completed steps stay completed. No wasted tokens after failure.

Safer side effects

Downstream actions are less likely to be repeated after failure.

Faster debugging

Replay the exact execution instead of reconstructing it from logs.

More reliable operations

Long-running workflows survive crashes, restarts, and lease handoffs.

How teams use JamJet in production

Click any card to expand the code.

Investment Due Diligence

A durable multi-agent workflow for report generation, risk review, and compliance checks.

multi-agenta2adurable
due-diligence.py View on GitHub →
@task(model="claude-sonnet-4-6", tools=[market_data, sec_filings])
async def analyze_company(ticker: str) -> Report:
    """Deep financial analysis with risk assessment."""

RAG Assistant

A retrieval-and-synthesis workflow where every step is checkpointed, traceable, and replayable.

ragtoolsdurable
rag-agent.py View on GitHub →
@task(tools=[search, retrieve, summarize])
async def answer(question: str) -> str:
    """Search knowledge base, retrieve docs, synthesize answer."""

Human Approval Workflow

Pause durably for a human decision, then resume without losing state or re-running prior work.

hitldurableproduction
approval.py View on GitHub →
@workflow.step(type="human_approval")
async def approve(state):
    return await state.wait_for_approval()

MCP Tool Integration

Use external tools through MCP while keeping each tool call inside the durable runtime.

mcptoolsinterop
mcp-agent.py View on GitHub →
@task(tools=[web_search, calculator], strategy="react")
async def research(q: str) -> str:
    """Research with MCP tools, crash-safe."""

Agent-to-Agent Delegation

Delegate to specialized agents via A2A with identity-aware, cost-aware, replayable execution.

a2aroutingproduction
delegation.py View on GitHub →
card = await discover("/.well-known/agent.json")
result = await delegate(card, task="analyze report")
Open source — Apache 2.0
pip install jamjet