Agents that run for days.

Build long-running AI agents that survive crashes and never repeat completed work.

Start building
npm i @trigora/sdk trigora
support-agent Completed
One support-agent execution The plan call is recorded. Two sub-agents, lookupOrders and readPolicy, run in parallel and join. The execution waits 31 hours for an approved event and is not billed while it waits. The host restarts at 14 hours and the execution resumes from its checkpoint. When approved arrives, the reply call is recorded and the run completes. No call ran twice. Host restarted resumed from the checkpoint waiting 31 h effect("plan") invoke("lookupOrders") invoke("readPolicy") waitForEvent("approved") effect("reply")
  1. effect("plan") Recorded

    Every call is recorded once.

  2. invoke("lookupOrders") Joined
  3. invoke("readPolicy") Joined

    Sub-agents run in parallel.

  4. waitForEvent("approved") Waiting

    Waiting is not billed.

  5. Host restarted Resumed

    Resumed from the checkpoint.

  6. event "approved" Received
  7. effect("reply") Recorded
Durable calls run
4
Re-run after the restart
0
Billed while waiting
$0.00

A demo of one execution, sped up. Restart the host or send the approval; no model or tool call runs twice.

Your agent can handle the integration.

Give your coding agent the instructions it needs to add durable execution to your existing codebase.

Agent quickstart

Works with Cursor, Claude Code, Codex and other coding agents. Also as llms.txt and an agent skill.

What the prompt tells your agent
  1. Read the agent quickstart, then pick the TypeScript, Python or Rust SDK.
  2. Wrap each model, tool and network call in a named effect.
  3. Keep durable calls in the program entry.
  4. Add idempotency keys to calls that charge, send or write.
  5. Prove recovery with trigora verify, then ask before deploying.
Read the full prompt
Add Trigora durable execution to this codebase.

1. Read https://trigora.dev/docs/agent-quickstart/ and https://trigora.dev/llms.txt, then https://trigora.dev/docs/quickstart/ and https://trigora.dev/docs/authoring/supported-semantics/.
2. Inspect the project and choose the matching SDK: TypeScript (@trigora/sdk, Node.js 22 or 24), Python or Rust. Python-only and Rust-only projects do not require Node.js.
3. Write one small Program for an existing long-running task. Put every model, tool and network call inside effect("<literal name>", fn). Effect names and event names must be string literals.
4. Keep durable calls (effect, invoke, waitForEvent, sleep) in the program entry, not in helper functions or closures. Use Promise.all, gather or join only in the forms the structured concurrency docs allow.
5. effect() is not exactly-once for external systems: a crash before the outcome commits can run it again. Pass an idempotency key to any API that charges, sends or writes.
6. Run `trigora verify <program> --faults all --effects fixtures.json`, with a fixture result for every effect key. It crashes the Program after each committed boundary, resumes it, and exits non-zero if the result differs or an effect runs twice or goes missing. Fix any failure before moving on. Then run it with `trigora dev`, kill the process while the execution waits, restart it, and confirm that nothing before the wait runs again.
7. Ask me before choosing Trigora Cloud or Trigora Pulse, before creating a TRIGORA_TOKEN and before running `trigora deploy`. Pulse v1.0.0 is published as ghcr.io/trigora-dev/pulse:1.0.0. It runs the Node adapter on Node.js 22 or 24. `trigora pulse start` starts that host; `trigora start` does not. There is no Python or Rust Pulse adapter. Never print, log or commit secrets.
8. Follow this project's conventions, and tell me what configuration I need to provide.

One program, three places to run it.

Write it once in TypeScript, Python or Rust. trigora dev runs it locally.

Your program

TCC checkpoints every durable call and resumes from the latest.
  • Trigora Cloud

    We run the code and keep the checkpoints.

    • Events
    • Timers
    • Triggers
    • Secrets
    • Versions
  • Trigora Pulse

    Your containers run it. We keep the checkpoints.

    • Node adapter
    • Two containers
    • Compute not billed
  • TCC Engine

    Embed it in a host you operate.

    • Node and Python
    • SQLite hosts
    • Conformance suite

Five calls, three languages.

Each one is a durable boundary. A crash resumes from the last one.

Supported language semantics

Commits the result. After a restart it returns that result without running again.

// TypeScript
await effect("plan", fn)

# Python
await effect("plan", fn)

// Rust
effect("plan", f).await?

Suspends until something sends the event. Waiting holds no compute.

// TypeScript
await waitForEvent("approved")

# Python
await wait_for_event("approved")

// Rust
wait_for_event("approved").await?

Commits a wake time and suspends.

// TypeScript
await sleep(60_000)

# Python
await sleep(60_000)

// Rust
sleep(60_000.0).await?

Starts a child Program and waits for its result.

// TypeScript
await invoke("child", a, b)

# Python
await invoke("child", a, b)

// Rust
invoke("child", (a, b)).await?

Runs durable calls together and keeps their state across recovery.

// TypeScript
await Promise.all([a, b])

# Python
await gather(a, b)

// Rust
join(a, b).await?

Recovery reads one checkpoint, not the whole history.

Replay-based engines rebuild state from history on every restart. TCC loads the last checkpoint.

Read the research

Matched history replay

336 ms

TCC recovery

0.065 ms

Median recovery after 5,000 steps. An engine benchmark, not Cloud latency; hardware and method on the research page.

Pay for work, not for waiting.

One plan covers Cloud and Pulse. Full pricing and rates

  • Free

    $0

    $5 of usage a month, no overage.

    ~167K 250K durable operations a month

    Start free
  • Pro

    $50 /month

    $50 of usage, then metered.

    ~1.67M 2.5M durable operations a month

    Start building
  • Enterprise

    Custom

    A 99.99% uptime SLA and custom limits.

    20M+ 20M+ durable operations a month

    Talk to us

Deploy an agent in four commands.

Develop locally with trigora dev, then deploy to Cloud with one token.

  1. npm i @trigora/sdk @trigora/client trigora
  2. export TRIGORA_TOKEN=…

    Create a token in Trigora Cloud.

  3. trigora deploy
  4. trigora start supportAgent --remote