Git for agent state.
Fork, rewind and replay your AI agent's state, while emails, payments and API calls never run twice, no matter how many times you retry.
The problem
Your agent crashed after charging the card.
Retrying is the obvious fix, and the dangerous one. Transcript stores happily let the re-run charge twice and email twice. forked records every side effect by idempotency key inside the commit: the naive full re-run becomes safe, because already-performed steps return their stored result instantly instead of executing again.
Run this example yourself$ node agent.mjs # attempt #2, naive full re-run ↩ payment.charge already done, reusing {"txn":"txn_1","amount":184} ↩ flight.book already done, reusing {"pnr":"PNR101"} ↩ email.send already done, reusing {"messageId":"msg_1"} ⚡ loyalty.credit EXECUTED ✓ complete, charges: 1, bookings: 1, emails: 1
EFFECT LOG
Side effects stay done.
Emails, payments and API calls are recorded by idempotency key inside commits. Re-run a crashed agent from the top and the recorded steps return their stored results instead of executing twice. Rewinds never undo an effect.
O(1) FORK
A thousand branches, zero copies.
State is a persistent, structurally shared tree. A fork writes one ref: 1,000 branches in ~1.4 ms, zero bytes of state copied. Explore twenty candidate plans from identical state and keep the winner.
REWIND
Byte-exact time travel.
Move any branch to any commit. Abandoned history stays anchored and auditable.
DIFF
Diff by hash.
Content-addressed subtrees are skipped wholesale, so diffs scale with the change, not the state.
ONE API
Self-hosted ≡ cloud.
Both deployments run the same open dispatcher. Switch with one baseUrl change.
LangGraph
Drop-in checkpointer, real time travel.
@forked-run/langgraph turns LangGraph's time
travel into an actual branch rewind, the console shows every fork point your graph ever
took.
compile({ checkpointer })The API
Five calls. That's the whole model.
Sessions, branches, commits, effects. Point the client at your own server or at forked cloud, the API is identical by construction, because both run the same open-source dispatcher.
import { ForkedClient } from "@forked-run/client"; const forked = new ForkedClient({ baseUrl: "https://api.forked.run" }); const session = await forked.createSession(); const main = session.branch(); await main.put({ plan: ["draft", "review", "send"] }); const alt = await main.fork("alternative"); // O(1), nothing copied await main.checkout(earlier); // rewind, byte-exact await session.recordEffect({ // survives every rewind key: "send-email:42", kind: "email.send", result: { messageId: "abc" }, });
Simple pricing
Everything a single developer needs is open source. The cloud sells operations.
Free
$0
- ✓100k requests / day
- ✓Unlimited branches & forks
- ✓Visual branch-tree console
- ✓No credit card
Pro
Soon
- ✓Higher limits & burst tier
- ✓Long retention & exports
- ✓Teams
- ✓Priority support
Prefer your own metal? docker run forked-server , same API, forever free.