Statefulai speaks MCP natively. Claude Code, Codex, and Cursor each get a dedicated extension; anything else can plug in through the MCP server or a small SDK call. The store is the same for all of them — write from one agent, read from another.
Claude Code talks to Statefulai over MCP from the moment you open a project. Sessions persist by branch — close the laptop, open it tomorrow, pick up the same thread with the same architectural memory.
{ "mcpServers": { "statefulai": { "command": "statefulai-mcp", "args": ["--workspace", "."], "env": { "CTX_API_KEY": "ctx_••••" } } } }
A drop-in memory backend for the Codex CLI. Ambient tasks (cron, GitHub Actions, scheduled runs) get the same project memory humans do — perfect for nightly refactors and PR-bot workflows.
codex --with-context flag enables retrieval$ codex login statefulai › signed in as @rena · workspace billing-prod $ codex run "refactor billing.ts for usage api" \ --with-context --branch feat/usage-meter ↳ retrieved 6 memories · 1.2k tokens ↳ applied @idempotent-writes · @zod-on-boundary ↳ diff: 3 files · 84 lines · suggested PR ok session stored to episodic memory
A Cursor extension that augments Composer with cross-branch, cross-team retrieval. Your Composer chat reads the same memory layer as Claude Code and Codex — no more reintroducing the project to every agent.
/memory show to inspect retrieval.cursorrules — procedural memory complements, doesn't replace// .cursor/statefulai.json { "workspace": "billing-prod", "branchScope": "current", "include": ["episodic", "semantic", "procedural"], "budget": 1200 }
Any agent that speaks the Model Context Protocol can read and write Statefulai memory. We ship a stdio / WebSocket server with a small, well-typed surface.
Hybrid search with budget & branch scope.
Write episodic events from agent actions.
One-hop traversal from a symbol.
Active procedural rules in current scope.
Snapshot the active session for resume.
Return source for any retrieved memory.
# run the server, expose to any MCP client $ statefulai mcp serve --transport stdio › listening on stdio · workspace billing-prod # or over websocket $ statefulai mcp serve --transport ws --port 7700 › ws://127.0.0.1:7700/mcp
Webhook ingest for commits, PRs, reviews, and merges. Statefulai replays the last 90 days on connect, then streams new events as they happen — your episodic memory is current by definition.
[09:14:01] PR #482 merged · feat/usage-meter ↳ episodic: 1 event · semantic: +3 nodes ↳ procedural: +1 rule (derived) @idempotent-writes [09:14:02] PR #482 review thread captured (4 comments) [09:14:02] ok indexed 1.1s · branch main
Whitelisted channels and pages feed episodic memory. A team-decision in #eng-billing gets captured, linked to the code that resulted from it, and surfaced when future agents ask "why."
@rena let's drop the queue here, run inline @marko +1 — keep it idempotent though @rena yep, lock per invoice @statefulai remember this as ADR ↳ captured as ADR-014 · billing.flush ↳ linked to: BillingService, InvoiceQueue ↳ derived rule: @idempotent-writes
A small, typed surface for custom agents and bespoke tooling. Same calls as the MCP server; same memory store. Bring your own agent — the memory is portable.
retrieve(), store(), graph(), rules(), session()import { Statefulai } from "@statefulai/sdk" const ctx = new Statefulai({ apiKey: process.env.CTX_KEY }) const hits = await ctx.retrieve({ query: "refactor billing.ts", branch: "feat/usage-meter", budget: 1200, include: ["episodic", "semantic", "procedural"] })
A native plug-in for IntelliJ, WebStorm, PyCharm, GoLand, and Rider. Same memory layer, exposed inside the IDE's built-in AI assistant pane. Sign up below and we'll let you know when the beta opens.
// preview · BillingService.ts // 🧠 Statefulai · 3 memories pinned // ↳ ADR-014 · stripe usage switch (apr 12) // ↳ rule · @idempotent-writes // ↳ incident · double-flush · may 11 async flush(invoiceId: string) { // memory consulted before completion }
One memory layer. Three retrieval surfaces today, five tomorrow. Zero re-prompting.