jvagent — the production harness for AI agents
The model is the pilot. Tools are the controls. Skills are the flight plan. jvagent is the airframe — the production harness that holds it together.
A modular agentive harness and framework. Declare multi-tenant, multi-agent, Claude-style agents in YAML and serve them over HTTP — with persistent per-user memory, a load-on-demand plugin system, drop-in Anthropic Agent Skills, built-in messaging-channel delivery, and a single-loop Orchestrator that turns every incoming message into tool calls. No hand-written state machine. No glue code to ship an agent.
pip install jvagent
# scaffold an app around a ready-made agent profile
jvagent app create --dir ./my_app --app-id my_app \
--agent jvagent/main_bot@minimal --profile minimal
cd my_app && cp .env.example .env # set admin password, JWT secret, model key
jvagent # serves on http://127.0.0.1:8000 · /docs
Built-in profiles ship for the common shapes — minimal, conversational, whatsapp_voice, and research — so a voice agent on WhatsApp or a research agent is a flag, not a project. A bundled jvchat web UI (jvagent chat) gives you a chat window immediately.
Why jvagent
- Multi-tenant by construction. Every user's history is a connected subgraph (
User → Conversation → Interaction). Isolation is a property of the data model — not aWHERE user_id =you have to remember. Deleting a tenant is one edge-walk. - One loop, not a state machine. A single Orchestrator runs each turn: resume an in-flight flow, otherwise let the model think-act-observe over every available tool. Adding a capability means adding a tool — no router, intent classifier, or capability registry to maintain. Routing is tool selection.
- Drop-in Anthropic Agent Skills. A standard Skill folder (
SKILL.md+ scripts) activates as a tool, staged into a per-user code-execution sandbox. Bring Claude's skill ecosystem into your own app — no rewrite. - Load-on-demand actions. Namespaced plugins discovered from
info.yaml. Only what an agent declares is imported; everything else stays dormant and its endpoints stay closed. - Thin harness. Steering, extraction, and orchestration live in Markdown skills and the model's own tool calls — not in server-side special-casing. Predictable behavior, small codebase.
- Many agents, one app. Real channels, built in. Declare any number of agents per deployment, each with its own identity, memory, and tools — then voice the same agent to WhatsApp, Messenger, email, and web.
View jvagent on GitHub · Read the docs · pip install jvagent
jvspatial — the object-spatial graph engine
Everything an agent knows and does is a Node or an Edge. jvspatial is the async-first library that makes that practical: an object-spatial graph layer with FastAPI integration and entity-centric database operations, built for modern cloud-native concurrency.
Inspired by Jaseci's object-spatial paradigm and Python's async model, jvspatial lets you model complex relationships, traverse object graphs, and implement agent architectures that scale.
from jvspatial.core import Node
from jvspatial.api import Server, endpoint
server = Server(title="My API", db_type="json", db_path="./jvdb")
class User(Node):
name: str = ""
email: str = ""
@endpoint("/api/users", methods=["POST"])
async def create_user(name: str, email: str):
user = await User.create(name=name, email=email)
return await user.export()
Why jvspatial
- A clean hierarchy. Object → Node → Edge → Walker, with a singleton Root. Model entities, relationships, and graph traversal as first-class objects.
- Entity-centric persistence.
Entity.get(),find(),create(),save(),delete()— with automatic context management andObjectPagerpagination. - Four backends, one API. JSON, SQLite, MongoDB, and DynamoDB — multi-database support with a prime database for core persistence, and custom database registration when you need it.
- Unified decorators.
@attributedefines entity fields with protection, transient flags, and validation;@endpointexposes both functions and Walker classes as API routes with automatic schemas. - FastAPI out of the box. A built-in server with OpenAPI docs, auth/authorization, and automatic endpoint registration from your decorators.
- Performance when it counts.
DeferredSaveMixinbatches rapid sequential writes into a single database call, with serverless-safe defaults.
View jvspatial on GitHub · pip install jvspatial
Integral — the whole organization, agent-ready
One agent is a feature. An organization where people and agents operate as peers is a transformation. Integral is what the stack becomes at that scale: a typed knowledge graph with an agent-authorable schema, a single authorization gate that fail-closes for agents, and one audit stream across every action — human, agent, connector, or system. The canonical place your agents read from and write to.
Built on jvspatial and jvagent by the team behind TrueSelph, Integral is the substrate that makes a real AI transformation possible — capability and substrate, stood up together. Explore AI Transformation.
How jvagent compares
Most agent frameworks are libraries that orchestrate model calls — you bring the server, the tenancy, the persistence, and the channels. jvagent is a harness: it ships them. The table maps each project against its primary, native design as of mid-2026 (most gaps are bridgeable with extra code — this is about what you get out of the box).
| jvagent | LangGraph | CrewAI | AutoGen / AG2 | Letta | Agno / AgentOS | |
|---|---|---|---|---|---|---|
| Primary form | Harness + HTTP server | Orchestration library | Orchestration library | Conversation library | Memory-agent runtime | Framework + runtime |
| Define an agent in | YAML (declarative) | Python | Python (+ some YAML) | Python | Python / API | Python |
| Many agents per deploy | ✅ first-class | ➖ you compose | ✅ crews | ✅ teams | ✅ | ✅ teams |
| Per-tenant isolation | ✅ by data model | ➖ DIY | ➖ DIY | ➖ DIY | ✅ memory-scoped | ✅ per-session |
| Persistent memory | ✅ graph (User→Conv→Interaction) + pruning |
✅ checkpoints | ➖ task passing | ➖ in-context | ✅ OS-tiered memory | ✅ sessions + knowledge |
| Built-in channels | ✅ WhatsApp / Messenger / email / web / SSE | ❌ | ❌ | ❌ | ❌ (API) | ➖ Slack / AG-UI |
| Drop-in Anthropic Skills | ✅ SKILL.md → per-user sandbox |
❌ | ❌ | ❌ | ❌ | ➖ via Claude Agent SDK |
| HTTP API + auth built in | ✅ | ➖ via Platform | ❌ | ❌ | ✅ server | ✅ FastAPI |
| Routing | model picks tools (no router) | explicit graph edges | role / process | conversation | agent loop | model + teams |
| License | MIT | MIT | MIT | Apache / MIT | Apache-2.0 | MPL-2.0 |
✅ native · ➖ partial / with setup · ❌ not built in.
Where to reach for each: LangGraph when you want to hand-draw a control graph with checkpoints; CrewAI or AutoGen for quick multi-agent prototypes; Letta when self-managing long-term memory is the whole point; Agno for a polished Python-first runtime. Reach for jvagent when you want to embed multi-tenant, multi-agent, Claude-skill-capable agents into your own application — and have the harness (memory, channels, auth, deployment) already solved.
Comparisons reflect each project's primary documented design and aren't exhaustive; all are capable frameworks.
Don't want to run it yourself?
We deploy and manage agents on this stack as Selph Cloud — grounded, evaluated, and live on your channels. See the platform or talk to us.