TuskPointGitHub

Save agent state to a network that remembers.

TuskPoint is a drop-in LangGraph checkpointer. Every step is saved as a verifiable Walrus blob, so your agents survive a crash, roll back to any moment, hand a run to another agent, and search their own history in plain English.

mcp server
https://tuskpoint-mcp.onrender.com/mcp

11

MCP tools

2

storage layers

100%

byte-exact reads

0

secrets on-site

  • VERIFIABLE BLOBS
  • BYTE-EXACT READS
  • FORK ANY CHECKPOINT
  • ROLL BACK TO ANY STEP
  • CROSS-AGENT HAND-OFF
  • TAMPER-EVIDENT AUDIT
  • SEMANTIC RECALL
  • SURVIVES A CRASH
  • 11 MCP TOOLS
  • WALRUS · LANGGRAPH · MEMWAL

Agents forget the moment they crash.

Four failures stand between a demo agent and one you can actually run in production: no durable history, no way to rewind, state you can't trust, and a split between what you store and what you can search. TuskPoint closes all four.

/01

No reliable history

When a long-running agent dies, the in-memory graph state dies with it. There is no durable, addressable record of what it knew at each step.

/02

Can't rewind

Even with logs, you cannot rehydrate the exact state at step 7 and continue. Replaying from scratch is slow, costly, and often non-deterministic.

/03

State you can't trust

Mutable databases let history be quietly rewritten. You need the byte you wrote to be the byte you read back, content-addressed and verifiable.

/04

Storage and search don't agree

Raw blob storage keeps the real state but can't be searched; a vector store is searchable but only holds fuzzy text, not the state itself. So you can never go from a plain-English question to the exact run you actually need.

How it works

Three lines from crash-prone to durable.

TuskPoint slots into an existing LangGraph app and turns every step into verifiable, on-network state.

01

Wrap your graph

Pass WalrusSaver to compile() like any LangGraph checkpointer. No new APIs to learn, your nodes don't change.

graph.compile(checkpointer=WalrusSaver())
02

Every step is stored

Each checkpoint is gzipped and written as an immutable Walrus blob, linked into a thread manifest with its parent and a summary.

checkpoint → walrus.blob → manifest
03

Rewind, fork, recall

Resume after a crash, fork any checkpoint into a new branch, or ask your run a question in plain English via MemWal.

saver.search_history("when did the writer start?")

Every step, an immutable receipt.

These are real checkpoints from one researcher → writer run. Each blob ID below resolves to the exact bytes that were written, click any to verify on the public aggregator.

This run, and the live dashboard, run on the Walrus testnet (free writes), so blob links resolve on the testnet aggregator. The same engine runs unchanged on mainnet, point WALRUS_PUBLISHER_URL / WALRUS_AGGREGATOR_URL at mainnet for paid, production writes.

manifestwHK1WMSMhPPDehX8slPGMRZZ3nPaG0K18_ScVo4fBHAthreadrun-43312

Drop-in

Plugs into the tools you're already building with.

One line wires TuskPoint into any MCP client. uvx fetches and runs it from PyPI, and all eleven tools show up in your agent. The config is the same shape everywhere; only the file location changes.

Claude logoClaude
Cursor logoCursor
Windsurf logoWindsurf
Gemini CLI logoGemini CLI
VS Code (Copilot) logoVS Code (Copilot)
OpenAI Codex logoOpenAI Codex
Any MCP client

One command, no adapters

$ uvx tuskpoint-mcp

Prefer not to edit config by hand? Call the tuskpoint_info tool and your agent emits the right snippet for whatever client you're in, or fetch the whole setup as plain text:

$ curl -sL https://tuskpoint.xyz/skills/setup
Per-client setup

Eleven tools, any agent can call.

A complete checkpoint API over the Model Context Protocol, with semantic recall built on MemWal.

Read the docs
PUTWrite

checkpoint_save

Serialize agent state, gzip it, and store it as an immutable Walrus blob. Also writes a one-line summary to MemWal.

{ checkpoint_id, blob_id, thread_id }

GETRead

checkpoint_load

Load a specific checkpoint by ID (or the latest). Deterministic, content-addressed read straight from Walrus.

{ state, checkpoint_id, blob_id }

LSRead

checkpoint_list

List every checkpoint for a thread, newest first, with lineage, timestamps, and summaries from the manifest.

{ count, checkpoints[] }

RESRead

checkpoint_resume

Rehydrate the latest state so an agent can continue exactly where it left off after a crash.

{ state, checkpoint_id }

DIFFRead

checkpoint_diff

Compare two checkpoints and report exactly what was added, removed, or changed between them.

{ added, removed, changed, human_readable }

FINDDiscover

checkpoint_search

Ask a question in plain English. MemWal returns the nearest checkpoint summaries, pointers you then load exactly.

{ results: [{ text, distance }] }

FORKWrite

checkpoint_fork

Git-branch an agent run. Copy any checkpoint into a new thread to replay a different path, the original stays untouched.

{ new_thread_id, checkpoint_id, blob_id, forked_from }

UNDOWrite

checkpoint_rollback

Durable, auditable undo. Re-writes an earlier checkpoint's state as a new head of the same thread, append-only, so history (and the audit trail) stays intact.

{ checkpoint_id, restored_from, blob_id, rolled_back_from }

HANDWrite

handoff_checkpoint

Emit a tiny portable descriptor (blob id + SHA-256 + provenance) so another agent can adopt this exact state. No state is copied, only the Walrus pointer and its hash cross the boundary.

{ source, blob_id, blob_sha256, to_agent }

ADOPTWrite

adopt_checkpoint

Adopt a handoff descriptor: re-fetch the blob from Walrus, verify its SHA-256 against the sender's, and write it as the genesis of a new thread. A tampered blob is rejected before it becomes state.

{ adopted_from, new_thread_id, checkpoint_id, verified }

AUDITRead

verify_trail

Audit a thread end-to-end. Re-fetches every content-addressed blob and recomputes its SHA-256, so tampering or corruption shows up as a FAIL step rather than a silent pass.

{ ok, checkpoint_count, verified, tampered_count, steps[] }

How it works

Two layers, one source of truth.

Exact for trust. Semantic for discovery. Walrus for durability. Vector recall is only ever an index into the exact store, never the source of truth.

01Intercept

Agent takes a step

Your LangGraph agent advances. WalrusSaver.put() intercepts the new checkpoint, no agent code changes required.

02Persist

Serialize → gzip → Walrus

State is serialized with LangGraph's serde, gzipped, and PUT to a Walrus publisher. You get back an immutable blob ID.

03Index

Summarize → MemWal

A one-line natural-language summary is written to MemWal so the run becomes semantically searchable.

04Recover

Resume or rewind

Know the ID? Load it exactly from Walrus. Only a vague memory? Search MemWal in English → get the ID → load exactly.

data flow
source

LangGraph agent

advances one step

intercept

WalrusSaver.put()

no agent code changes

serialize · gzip · PUT
the truth

Walrus blob

immutable, content-addressed

← exact reads by blob id

build 1-line summary
the index

MemWal

semantic recall layer

← search in English → returns ids

manifest blob id cached locally in .walrus_threads.json

LangGraph

Agent framework - TuskPoint plugs into its checkpoint API.

Walrus

Decentralized blob storage - the durable source of truth.

MemWal

Semantic memory - natural-language recall over history.

MCP

Model Context Protocol - eleven tools any agent can call.

Why TuskPoint

Exact for trust. Semantic for discovery.

Other approaches give you one or the other. TuskPoint keeps an immutable Walrus blob as the source of truth and treats vector recall as an index into it.

CapabilityIn-memoryMutable DBVector-onlyTuskPoint
Survives a process crash
Byte-exact, content-addressed reads
Rewind to any prior step
Tamper-evident history
Hand a run to another agent
Plain-English recall over history
One MCP any agent can call
  • VERIFIABLE BLOBS
  • BYTE-EXACT READS
  • FORK ANY CHECKPOINT
  • ROLL BACK TO ANY STEP
  • CROSS-AGENT HAND-OFF
  • TAMPER-EVIDENT AUDIT
  • SEMANTIC RECALL
  • SURVIVES A CRASH
  • 11 MCP TOOLS
  • WALRUS · LANGGRAPH · MEMWAL

Try it

See it survive
a crash.

Walk through a real researcher → writer run: inspect each checkpoint, diff two states, and search the run's history in plain English.