Skip to content
Navigation

1. Introduction

agent-core is the core SDK of openJiuwen, a Chinese-origin open-source AI Agent framework (Apache 2.0, Python 3.11+). It provides a comprehensive, monolithic toolkit for building self-optimizing agents with features spanning LLM abstraction, multi-agent orchestration, Pregel-based graph execution, enterprise-grade RAG pipelines, context engineering, multi-dimensional memory, and security guardrails.

Exo is a modular Python monorepo that reimplements and extends agent-core’s most valuable features as independent, composable packages. Rather than porting agent-core wholesale, Exo selectively adapted the strongest patterns — typed rails, context processors, memory evolution, retrieval pipelines — while replacing others with simpler alternatives (e.g., Swarm transfers instead of Pregel channels).

This guide documents every architectural decision made during the port, providing migration paths for developers familiar with either framework.

For a detailed feature-by-feature comparison, see agent-core-vs-exo-analysis.md.

2. Architecture Comparison

agent-core: Single-Package Monolith

agent-core ships as a single openjiuwen package (~540+ files) where all features are bundled together:

code
openjiuwen/
├── llm/                # LLM abstraction, prompts, KV stores
├── tool/               # Tool system, vector store tools
├── agent/              # ReActAgent, ControllerAgent
├── agent_group/        # Multi-agent coordination
├── workflow/           # Pregel-based DAG execution
├── memory/             # 5-type taxonomy, encryption, deduplication
├── context_engine/     # Offloading, compression, windowing
├── retrieval/          # Embeddings, vector stores, hybrid search, reranking
├── session/            # Session lifecycle, checkpointing, streaming
├── runner/             # Global resource registry, callbacks
├── security/           # Guardrails, risk assessment
├── agent_evolution/    # LLM-driven optimization of prompts/tools/memory
├── deep_agent/         # Autonomous task execution (file/shell/code/todo)
└── extensions/         # Redis, Pulsar, context evolution algorithms

Exo: Modular Monorepo

Exo splits these concerns across 18 independently installable packages:

code
packages/
├── exo-core/         # Agent, Swarm, Tool, HookManager, Runner
├── exo-models/       # ModelProvider ABC, 11 provider adapters
├── exo-memory/       # Typed memory hierarchy, stores, search
├── exo-context/      # ProcessorPipeline, token budgeting
├── exo-guardrail/    # RiskAssessment, guardrail backends
├── exo-retrieval/    # Embeddings, vector stores, retrievers
├── exo-train/        # Operator, Optimizer, textual gradient tuning
├── exo-sandbox/      # Isolated code execution
├── exo-eval/         # Evaluation framework
├── exo-mcp/          # Model Context Protocol integration
├── exo-a2a/          # Agent-to-Agent protocol
├── exo-server/       # FastAPI server runtime
├── exo-web/          # Astro frontend + FastAPI backend
├── exo-cli/          # Command-line interface
├── exo-distributed/  # Redis task queue, workers
├── exo-observability/ # OpenTelemetry logging, tracing, metrics
├── exo-search/   # Search-focused agent example
└── exo/              # Meta-package (convenience re-exports)

Package Mapping Diagram

code
agent-core (openjiuwen/)            Exo (packages/)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

llm/, tool/, agent/          ──→    exo-core + exo-models
    runner/                  ──→    exo-core (Runner)
workflow/                    ──→    exo-core (Swarm, BranchNode, LoopNode)
memory/                      ──→    exo-memory
context_engine/              ──→    exo-context
security/                    ──→    exo-guardrail
retrieval/                   ──→    exo-retrieval
agent_evolution/             ──→    exo-train
deep_agent/                  ──→    exo-sandbox + exo-core (Tools)
session/                     ──→    exo-core (state) + exo-observability
agent_group/                 ──→    exo-core (Swarm handoffs)
extensions/redis             ──→    exo-distributed
extensions/context_evolver   ──→    exo-memory (evolution strategies)

3. Design Philosophy Differences

Dimensionagent-coreExo
Package structureSingle package, all-or-nothingModular monorepo, install what you need
Resource managementGlobal Runner singleton with registryDependency injection through package hierarchy
Agent compositionInheritance-heavy (ReActAgentControllerAgent)Composition via Swarm transfers + HookManager
Workflow executionPregel graph with super-steps, channels, barriersSwarm DSL ("a >> b >> c") + topological sort
Context lifecycleStateful ContextManager orchestrates all processingEvent-driven ProcessorPipeline — processors are independent
Agent lifecycle guardsAgentRail callbacks with untyped context dictTyped Rail ABC with Pydantic event models
Memory modelFlat MemoryItem with 5 string typesTyped hierarchy (SystemMemory, HumanMemory, AIMemory, ToolMemory)
SecurityPluggable guardrail backends on callback frameworkBaseGuardrail integrates via HookManager
Evolution/optimizationLLM-driven Operators (prompt, tool, memory tuning)Textual gradient optimization + genetic algorithms
ObservabilitySession tracing with spansFull OpenTelemetry (logging, tracing, metrics, cost tracking)
Provider support4 providers (OpenAI-compatible, DashScope, SiliconFlow)11 providers (OpenAI, Anthropic, Gemini, Vertex, Ollama, etc.)

4. Package Mapping Table

agent-core DirectoryPurposeExo Package(s)
openjiuwen/llm/LLM abstraction, prompt templatesexo-models (ModelProvider ABC, adapters)
openjiuwen/tool/Tool definitions, executionexo-core (Tool, ToolResult)
openjiuwen/agent/ReActAgent, ControllerAgentexo-core (Agent, Swarm)
openjiuwen/agent_group/Multi-agent coordinationexo-core (Swarm handoffs)
openjiuwen/workflow/Pregel-based DAG executionexo-core (Swarm, BranchNode, LoopNode, GroupNode)
openjiuwen/memory/5-type memory, encryption, dedupexo-memory (MemoryCategory, typed stores, SearchManager)
openjiuwen/context_engine/Offloading, compression, windowingexo-context (ProcessorPipeline, processors)
openjiuwen/retrieval/Embeddings, vector stores, searchexo-retrieval (EmbeddingProvider, VectorStore, Retriever)
openjiuwen/security/Guardrails, risk assessmentexo-guardrail (BaseGuardrail, RiskAssessment)
openjiuwen/session/Session lifecycle, checkpointingexo-core (WorkflowState, checkpointing)
openjiuwen/runner/Global resource registry, callbacksexo-core (Runner, HookManager)
openjiuwen/agent_evolution/LLM-driven prompt/tool optimizationexo-train (Operator, BaseOptimizer, OperatorTrainer)
openjiuwen/deep_agent/Autonomous file/shell/code/todo toolsexo-sandbox + exo-core (Tool definitions)
openjiuwen/extensions/redis/Redis checkpointer, distributedexo-distributed (Redis task queue, workers)
openjiuwen/extensions/context_evolver/ACE, ReasoningBank, ReMe algorithmsexo-memory (MemoryEvolutionStrategy subclasses)

5. Per-Epic Porting Guides

EpicGuideSummary
1 — Security Guardrailsguardrails.mdEvent-driven content moderation with RiskAssessment models and multiple detection backends
2 — Advanced Workflow Engineworkflow-engine.mdPregel graph engine replaced by Swarm orchestrator with flow DSL, branch/loop/group nodes
3 — RAG/Retrieval Pipelinerag-retrieval.mdComplete RAG pipeline mapping: embeddings, vector stores, 5 retriever types, reranking
4 — Context Enginecontext-engine.mdMonolithic ContextManager decomposed into composable ProcessorPipeline with pluggable processors
5 — Enhanced Memory Systemmemory-system.md5-type memory taxonomy with AES-256 encryption mapped to typed hierarchy with pluggable stores
6 — Typed Agent Railsrails.mdRail lifecycle guards with 10 callback events mapped to typed Rails with Pydantic models
7 — Task Managementtask-management.mdTaskManager and TaskScheduler mapped to Pydantic-based TaskManager with mid-execution steering
8 — Deep Agent Toolkitdeep-agent-toolkit.mdAutonomous toolkit (file I/O, shell, code, todo) distributed across Exo’s tool system and sandbox
9 — Context Evolutioncontext-evolver.mdThree memory evolution strategies (ACE, ReasoningBank, ReMe) mapped to composable strategy subclasses
10 — Operator & Self-Optimizationoperator-optimization.mdIterative optimization system mapped to exo-train with Operator ABC and textual gradient tuning
11 — DeepAgent Example Port../design/deepagent-port-plan.mdMulti-agent ReAct system ported from openjiuwen to Exo (Agent, Swarm, MCP)

6. Acknowledgments

This porting effort builds extensively on the work of the openJiuwen project and its contributors. The agent-core SDK represents a thoughtful and comprehensive approach to AI agent development, and many of Exo’s features — particularly the typed rail system, context engine processors, memory evolution strategies, and retrieval pipeline architecture — were directly inspired by or adapted from openJiuwen’s designs.

We are grateful to the openJiuwen team for releasing their work under the Apache 2.0 license, making this kind of cross-project knowledge transfer possible.