JarvisCore
GitHub ↗

JarvisCore

JarvisCore is an open-source framework designed to orchestrate teams of agents to perform complex tasks from a single, auditable control plane.
Scroll to explore
pip install jarviscore-framework
Developer Center
View Latest Updates
OSS UPDATES

OSS
updates

Keep up to date with the latest releases, features, and community updates in the JarvisCore ecosystem.

View all updates

Loading updates…

PLATFORM CAPABILITIES

Primitives, tools, and protocols to orchestrate deterministic AI.

Everything you need to build, deploy, and scale enterprise-grade multi-agent systems without the underlying infrastructure complexities.

Two execution models

AutoAgent handles the full reasoning loop. CustomAgent exposes each message handler so you decide what runs and when.

Learn about agent profiles
import asyncio
from jarviscore import Mesh, AutoAgent
class ResearcherAgent(AutoAgent):
name = "Researcher"
role = "researcher"
system_prompt = "You are a rigorous research analyst."
async def main():
mesh = Mesh()
mesh.add(ResearcherAgent)
await mesh.start()
result = await mesh.run_task(
agent="researcher",
task="What are the key architectural trade-offs in multi-agent systems?",
)
print(result)
asyncio.run(main())

Four-tier memory

Four tiers compose behind a single object. Each tier activates based on what you pass to UnifiedMemory at startup.

Explore the memory model
from jarviscore.memory import UnifiedMemory
mem = UnifiedMemory(
workflow_id="wf-abc123",
step_id="step-1",
agent_id="researcher",
blob_storage=blob_storage,
)
await mem.log_turn(
turn_id="t1",
thought="Identifying relevant data sources.",
action="http_get",
result="200 OK - 42 records retrieved",
tokens=1240,
)

Peer-to-peer mesh

One flag. Agents discover each other via SWIM gossip over ZMQ. Works the same on one process or ten machines.

Read the P2P docs
# Enable by setting P2P_ENABLED=true in your environment.
P2P_ENABLED=true
P2P_ENABLED=true
JC_SWIM_HOST=0.0.0.0
JC_SWIM_PORT=7947
JC_SEED_NODES=10.0.0.1:7946
analyst = self.peers.get_peer(role="analyst")
workers = self.peers.discover(
capability="data-analysis",
strategy="round_robin", # first | random | round_robin | least_recent
)
worker = self.peers.discover_one(
capability="processing",
strategy="least_recent",
)

Add custom integrations

Write a plain Python function. Drop it in the atoms directory. Every agent on the Mesh picks it up automatically.

Build your first Atom
def crm_get_contact(auth_info: dict, contact_id: str) -> dict:
"""
Fetch a contact from the internal CRM.
Args:
auth_info: Injected by Nexus. Contains the API token.
contact_id: CRM contact ID.
Returns:
{"id": str, "name": str, "email": str}
"""
import httpx
headers = {"Authorization": f"Bearer {auth_info['token']}"}
r = httpx.get(
f"https://crm.internal/contacts/{contact_id}",
headers=headers,
)
return r.json()

Nexus credential layer

Register credentials once. Agents never see raw tokens. Nexus injects auth_info at call time.

Set up Nexus auth
jarviscore nexus register github --client-id=YOUR_GITHUB_CLIENT_ID --client-secret=YOUR_GITHUB_CLIENT_SECRET
jarviscore nexus register stripe --api-key=sk_live_...
jarviscore nexus register airtable --api-key=patXXXXXXXX
jarviscore nexus list

Full-stack tracing

Every turn, tool call, and LLM request is captured automatically. Redis PubSub for live streams, JSONL for compliance, Prometheus for SLO dashboards.

Configure observability
from jarviscore.telemetry import TraceManager
tracer = TraceManager(
workflow_id="wf-abc123",
step_id="step-001",
redis_store=redis_store,
trace_dir="traces",
)
tracer.log_tool_start("slack_send_message", params={"channel": "#alerts"})
tracer.log_tool_result("slack_send_message", result="ok")
tracer.log_thinking("Evaluating whether output meets acceptance criteria")
tracer.log_event("custom_event", data={"detail": "something happened"})

Human-in-the-loop

Pause on irreversible actions and route to a human inbox. Resumption is automatic once resolved.

Learn about HITL escalation
jarviscore.dev/hitl
item_id = self.hitl.request(
title="Approve investor deck before sending",
content="The deck is ready for Q2 distribution. Approve to proceed.",
urgency="high",
category="critical_action",
context={"file": "output/q2_deck.pdf", "recipients": 47},
)
resolution = await self.hitl.wait(item_id, timeout=3600)
if resolution.is_approved:
await self.send_deck()
else:
return {"status": "cancelled", "reason": resolution.reason}

40+ out-of-the-box integrations

SlackSlack
GitHubGitHub
NotionNotion
StripeStripe
HubSpotHubSpot
SalesforceSalesforce
LinearLinear
DatadogDatadog
See all integrations

Migrate from CrewAI, LangGraph, AutoGen, or Swarm

Pick your framework. Every primitive has a direct equivalent in JarvisCore.

Full migration guide

Crew maps to Mesh. Task context maps to depends_on. The intent is the same; the execution is deterministic.

CrewAI
JarvisCore
Agent(role, goal, backstory)
AutoAgent subclass with system_prompt
Task(description, expected_output)
Step dict with explicit result shape
Task(context=[prior_task])
"depends_on": ["step_id"]
Crew
Mesh
Process.sequential
Implicit via depends_on ordering
Process.hierarchical
AutoAgent (delegates internally)
Tool class
Atom function in SystemBundle
Agent(memory=True)
UnifiedMemory (redis_store arg)
Agent(verbose=True)
TraceManager (automatic, zero config)
LLM(model=...)
TASK_MODEL_STANDARD= in .env
DEVELOPER CENTER

Real examples. Clone and run.

EXPLORE ALL EXAMPLES

Five complete programs. Each one demonstrates a distinct coordination pattern, from a single-file workflow to a distributed multi-node cluster.

Researcher
Analyser
Reporter

Financial Pipeline

Start here. One file, one process. Walks through defining agents, wiring a Mesh, and running a sequential workflow DAG from start to finish.

VIEW EXAMPLE
MESHresearchanalysissynthesis

Research Network

Three processes, one Mesh. Each node advertises different capabilities and the Mesh routes tasks automatically across the cluster.

VIEW EXAMPLE
Ticket #2048ROUTED
Mailbox matched keyword
Peer discovered via SWIM
Nexus injected credentials

Support Swarm

Routes tickets by keyword through the mailbox system. Demonstrates SWIM peer discovery and Nexus credential injection for live API calls.

VIEW EXAMPLE
Research
Draft
Edit
Publish

Content Pipeline

Four agents in sequence: research, draft, edit, publish. Each step depends on the one before it and receives its output automatically.

VIEW EXAMPLE
FROM THE BLOG

Recent highlights

View all blog posts

Loading updates…

Try JarvisCore now

Get StartedTalk to Enterprise