Add it to Claude Code
claude mcp add jamjet -- jamjet mcpMake your agent remember this setup
jamjet's config, env vars, and the gotchas you hit — recalled in every future Claude Code, Cursor, and Codex session.
npx conare@latestFree · one command · indexes the sessions already on disk. Set up in the browser instead →
What it does
- Durable graph execution with event-sourced, crash-safe resume capabilities.
- Native MCP and A2A protocol support for inter-agent communication.
- High-performance Rust core with support for Python and Java SDKs.
- Built-in observability with full event timelines and OTel GenAI traces.
- Governance and guardrails including policy engines and OAuth delegation.
Try it
Original README from jamjet-labs/jamjet
The agent-native runtime — durable, composable, built for production.
jamjet.dev · Quickstart · Concepts · API Reference · Examples · Blog · Discord

JamJet is a performance-first, agent-native runtime for AI agents. It is not another prompt wrapper or thin agent SDK — it is a production-grade orchestration substrate for agents that need to work, not just demo.
The runtime core is Rust + Tokio for scheduling, state, and concurrency. The authoring surface is Python, Java, Go (planned), or YAML. All compile to the same IR graph and run on the same engine.
Why JamJet?
| Problem | JamJet's answer |
|---|---|
| Agent runs lose state on crash | Durable graph execution — event-sourced, crash-safe resume |
| No way to pause for human approval | Human-in-the-loop as a first-class workflow primitive |
| Agents siloed in their own framework | Native MCP + A2A — interoperate with any agent, any framework |
| Slow Python orchestration at scale | Rust core — no GIL, real async parallelism |
| Weak observability, no replay | Full event timeline, OTel GenAI traces, replay from any checkpoint |
| No standard agent identity | Agent Cards — every agent is addressable and discoverable |
| Hard-coded agent routing | Coordinator Node — dynamic routing with structured scoring + LLM tiebreaker |
| Can't use agents as tools | Agent-as-Tool — wrap any agent as a callable tool (sync, streaming, conversational) |
| No governance or guardrails | Policy engine — tool blocking, approvals, autonomy enforcement, audit log |
| Agents with unchecked access | OAuth delegation — RFC 8693 token exchange, scope narrowing, per-step scoping |
| PII leaking into logs | Data governance — PII redaction (mask/hash/remove), retention policies, auto-purge |
| No tenant isolation | Multi-tenant — row-level partitioning, tenant-scoped state, isolated audit logs |
| Locked into one language | Polyglot SDKs — Python, Java (JDK 21), Go (planned), YAML — same IR, same runtime |
| Can't run without a server | In-process execution — pip install jamjet and run immediately |
Quickstart
Requirements: Python 3.11+
Fastest path — pure Python, no server
pip install jamjet
from jamjet import task, tool
@tool
async def web_search(query: str) -> str:
return f"Search results for: {query}"
@task(model="claude-haiku-4-5-20251001", tools=[web_search])
async def research(question: str) -> str:
"""You are a research assistant. Search first, then summarize clearly."""
result = await research("What is JamJet?")
print(result)
No server. No config. No YAML. Just pip install and run.
Full runtime path — durable execution
pip install jamjet
jamjet init my-first-agent
cd my-first-agent
jamjet dev
In another terminal:
jamjet run workflow.yaml --input '{"query": "What is JamJet?"}'
Hello World
YAML
# workflow.yaml
workflow:
id: hello-agent
version: 0.1.0
state_schema:
query: str
answer: str
start: think