# Multi-Agent Coordination SOTA Research Report ## Fleet Knowledge Graph — Architecture Patterns & Integration Recommendations **Date**: 2025-04-14 **Scope**: Agent-to-agent communication, shared memory, task delegation, consensus protocols, conflict resolution **Frameworks Analyzed**: CrewAI, AutoGen, MetaGPT, ChatDev, CAMEL, LangGraph **Target Fleet**: Hermes (orchestrator), Timmy, Claude Code, Gemini, Kimi --- ## 1. EXECUTIVE SUMMARY Six major multi-agent frameworks each solve coordination differently. The SOTA converges on **four core patterns**: role-based delegation with capability matching, shared state via publish-subscribe messaging, directed-graph task flows with conditional routing, and layered memory (short-term context + long-term knowledge graph). For our fleet, the optimal architecture combines **AutoGen's GraphFlow** (dag-based task routing), **CrewAI's hierarchical memory** (short-term RAG + long-term SQLite + entity memory), **MetaGPT's standardized output contracts** (typed task artifacts), and **CAMEL's role-playing delegation protocol** (inception-prompted agent negotiation). --- ## 2. FRAMEWORK-BY-FRAMEWORK ANALYSIS ### 2.1 CrewAI (v1.14.x) — Role-Based Crews with Hierarchical Orchestration **Core Architecture:** - **Process modes**: `Process.sequential` (tasks execute in order), `Process.hierarchical` (manager agent delegates to workers) - **Agent delegation**: `allow_delegation=True` enables agents to call other agents as tools, selecting the best agent for subtasks - **Memory system**: Crew-level `memory=True` enables UnifiedMemory with: - **Short-term**: RAG-backed (embeddings → vector store) for recent task context - **Long-term**: SQLite-backed for persistent task outcomes - **Entity memory**: Tracks entities (people, companies, concepts) across tasks - **User memory**: Per-user preference tracking - **Embedder**: Configurable (OpenAI, Cohere, Jina, local ONNX, etc.) - **Knowledge sources**: `knowledge_sources=[StringKnowledgeSource(...)]` for RAG-grounded context per agent or crew - **Flows**: `@start`, `@listen`, `@router` decorators for DAG orchestration across crews. `or_()` and `and_()` combinators for conditional triggers - **Callbacks**: `before_kickoff_callbacks`, `after_kickoff_callbacks`, `step_callback`, `task_callback` **Key Patterns for Fleet:** - **Delegation-as-tool**: Agents can invoke other agents by role → our fleet agents could expose themselves as callable tools to each other - **Sequential handoff**: Task output from Agent A feeds directly as input to Agent B → pipeline pattern - **Hierarchical manager**: A manager LLM decomposes goals and assigns tasks → matches Hermes-as-orchestrator pattern - **Shared memory with scopes**: Crew-level memory visible to all agents, agent-level memory private **Limitations:** - No native inter-process communication — all agents live in the same process - Manager/hierarchical mode requires an LLM call just for delegation decisions (extra latency/cost) - No built-in conflict resolution for concurrent writes to shared memory ### 2.2 AutoGen (v0.7.5) — Flexible Team Topologies with Graph-Based Coordination **Core Architecture:** - **Team topologies** (5 types): - `RoundRobinGroupChat`: Sequential turn-taking, each agent speaks in order - `SelectorGroupChat`: LLM selects next speaker based on conversation context (`selector_prompt` template) - `MagenticOneGroupChat`: Orchestrator-driven (from Microsoft's Magentic-One paper), with stall detection and replanning - `Swarm`: Handoff-based — current speaker explicitly hands off to target via `HandoffMessage` - `GraphFlow`: **Directed acyclic graph** execution — agents execute based on DAG edges with conditional routing, fan-out, join patterns, and loop support - **Agent types**: - `AssistantAgent`: Standard LLM agent with tools - `CodeExecutorAgent`: Runs code in isolated environments - `UserProxyAgent`: Human-in-the-loop proxy - `SocietyOfMindAgent`: **Meta-agent** — wraps an inner team and summarizes their output as a single response (composable nesting) - `MessageFilterAgent`: Filters/transforms messages between agents - **Termination conditions**: `TextMentionTermination`, `MaxMessageTermination`, `SourceMatchTermination`, `HandoffTermination`, `TimeoutTermination`, `FunctionCallTermination`, `TokenUsageTermination`, `ExternalTermination` (programmatic control), `FunctionalTermination` (custom function) - **Memory**: `Sequence[Memory]` on agents — per-agent memory stores (RAG-backed) - **GraphFlow specifics**: - `DiGraphBuilder.add_node(agent, activation='all'|'any')` - `DiGraphBuilder.add_edge(source, target, condition=callable|str)` — conditional edges - `set_entry_point(agent)` — defines graph root - Supports: sequential, parallel fan-out, conditional branching, join patterns, loops with exit conditions - Node activation: `'all'` (wait for all incoming edges) vs `'any'` (trigger on first) **Key Patterns for Fleet:** - **GraphFlow is the SOTA pattern** for multi-agent orchestration — DAG-based, conditional, supports parallel branches and joins - **SocietyOfMindAgent** enables hierarchical composition — a team of agents wrapped as a single agent that can participate in a larger team - **Selector pattern** (LLM picks next speaker) is elegant for heterogeneous fleets where capability matching matters - **Swarm handoff** maps directly to our ACP handoff mechanism - **Termination conditions** are composable — `termination_a | termination_b` (OR), `termination_a & termination_b` (AND) ### 2.3 MetaGPT — SOP-Driven Multi-Agent with Standardized Artifacts **Core Architecture (from paper + codebase):** - **SOP (Standard Operating Procedure)**: Tasks decomposed into phases, each with specific roles and required artifacts - **Role-based agents**: Each role has `name`, `profile`, `goal`, `constraints`, `actions` (specific output types) - **Shared Message Environment**: All agents publish to and subscribe from a shared `Environment` object - **Publish-Subscribe**: Agents subscribe to message types/topics they care about, ignore others - **Standardized Output**: Each action produces a typed artifact (e.g., `SystemDesign`, `Task`, `Code`) — structured contracts between agents - **Memory**: `Memory` class stores all messages, retrievable by relevance. `Role.react()` calls `observe()` then `act()` based on observed messages - **Communication**: Asynchronous message passing — agents publish results to environment, interested agents react **Key Patterns for Fleet:** - **Typed artifact contracts**: Each agent publishes structured outputs (not free-form text) → reduces ambiguity in inter-agent communication - **Pub-sub messaging**: Decouples sender from receiver — agents don't need to know about each other, just subscribe to relevant topics - **SOP-driven phases**: Define workflow phases (e.g., "analysis" → "implementation" → "review") with specific agents per phase - **Environment as blackboard**: Shared state all agents can read/write — classic blackboard architecture for AI systems ### 2.4 ChatDev — Chat-Chain Architecture for Software Development **Core Architecture:** - **Chat Chain**: Sequential phases (design → code → test → document), each phase is a two-agent conversation - **Role pairing**: Each phase pairs complementary roles (e.g., CEO ↔ CTO, Programmer ↔ Reviewer) - **Communicative dehallucination**: Agents communicate through structured prompts that constrain outputs to prevent hallucination - **Phase transitions**: Phase completion triggers next phase, output from one phase seeds the next - **Memory**: Conversation history within each phase; phase outputs stored as artifacts **Key Patterns for Fleet:** - **Phase-gated pipeline**: Each phase must produce a specific artifact type before proceeding - **Complementary role pairing**: Pair agents with opposing perspectives (creator ↔ reviewer) for higher quality - **Communicative protocols**: Structured conversation templates reduce free-form ambiguity ### 2.5 CAMEL — Role-Playing Autonomous Multi-Agent Communication **Core Architecture:** - **RolePlaying society**: Two agents (assistant + user) collaborate with inception prompting - **Task specification**: `with_task_specify=True` uses a task-specify agent to refine the initial prompt into a concrete task - **Task planning**: `with_task_planner=True` adds a planning agent that decomposes the task - **Critic-in-the-loop**: `with_critic_in_the_loop=True` adds a critic agent that evaluates and approves/rejects - **Inception prompting**: Both agents receive system messages that establish their roles, goals, and communication protocol - **Termination**: Agents signal completion via specific tokens or phrases **Key Patterns for Fleet:** - **Inception prompting**: Agents negotiate a shared understanding of the task before executing - **Critic-in-the-loop**: A dedicated reviewer agent validates outputs before acceptance - **Role-playing protocol**: Structured back-and-forth between complementary agents - **Task refinement chain**: Raw goal → specified task → planned subtasks → executed ### 2.6 LangGraph — Graph-Based Stateful Agent Workflows **Core Architecture (from documentation/paper):** - **StateGraph**: Typed state schema shared across all nodes (agents/tools) - **Nodes**: Functions (agents, tools, transforms) that read/modify shared state - **Edges**: Conditional routing based on state or agent decisions - **Checkpointer**: Persistent state snapshots (SQLite, Postgres, in-memory) — enables pause/resume - **Human-in-the-loop**: Interrupt nodes for approval, edit, review - **Streaming**: Real-time node-by-node or token-by-token output - **Subgraphs**: Composable graph composition — subgraph as a node in parent graph - **State channels**: Multiple state namespaces for different aspects of the workflow **Key Patterns for Fleet:** - **Shared typed state**: All agents operate on a well-defined state schema — eliminates ambiguity about what data each agent sees - **Checkpoint persistence**: Workflow can be paused, resumed, forked — critical for long-running agent tasks - **Conditional edges**: Route based on agent output type or state values - **Subgraph composition**: Each fleet agent could be a subgraph, composed into larger workflows - **Command-based routing**: Nodes return `Command(goto="node_name", update={...})` for explicit control flow --- ## 3. CROSS-CUTTING PATTERNS ANALYSIS ### 3.1 Agent-to-Agent Communication | Pattern | Frameworks | Latency | Decoupling | Structured | |---------|-----------|---------|------------|------------| | Direct tool invocation | CrewAI, AutoGen | Low | Low | Medium | | Pub-sub messaging | MetaGPT | Medium | High | High | | Handoff messages | AutoGen Swarm | Low | Medium | High | | Chat-chain conversations | ChatDev, CAMEL | High | Low | Medium | | Shared state graph | LangGraph, AutoGen GraphFlow | Low | Medium | High | **Recommendation**: Use **handoff + shared state** pattern. Agents communicate via typed handoff messages (what task was completed, what artifacts produced) while sharing a typed state object (knowledge graph entries). ### 3.2 Shared Memory Patterns | Pattern | Frameworks | Persistence | Scope | Query Method | |---------|-----------|-------------|-------|-------------| | RAG-backed short-term | CrewAI, AutoGen | Session | Crew/Team | Embedding similarity | | SQLite long-term | CrewAI | Cross-session | Global | SQL + embeddings | | Entity memory | CrewAI | Cross-session | Global | Entity lookup | | Message store | MetaGPT | Session | Environment | Relevance search | | Typed state channels | LangGraph | Checkpointed | Graph | State field access | | Frozen snapshot | Hermes (current) | Cross-session | Agent | System prompt injection | **Recommendation**: Implement **three-tier memory**: 1. **Session state** (LangGraph-style typed state graph) — shared within a workflow 2. **Fleet knowledge graph** (new) — structured triples/relations between entities, projects, decisions 3. **Agent-local memory** (existing MEMORY.md pattern) — per-agent persistent notes ### 3.3 Task Delegation | Pattern | Frameworks | Decision Maker | Granularity | |---------|-----------|---------------|-------------| | Manager decomposition | CrewAI hierarchical | Manager LLM | Task-level | | Delegation-as-tool | CrewAI | Self-selecting | Subtask | | Selector-based | AutoGen SelectorGroupChat | LLM selector | Turn-level | | Handoff-based | AutoGen Swarm | Current agent | Message-level | | Graph-defined | AutoGen GraphFlow, LangGraph | Pre-defined DAG | Node-level | | SOP-based | MetaGPT | Phase rules | Phase-level | **Recommendation**: Use **hybrid delegation**: - **Graph-based** for known workflows (CI/CD, code review pipelines) — pre-defined DAGs - **Selector-based** for exploratory tasks (research, debugging) — LLM picks best agent - **Handoff-based** for agent-initiated delegation — current agent explicitly hands off ### 3.4 Consensus Protocols No framework implements true consensus protocols (Raft, PBFT). Instead: | Pattern | What It Solves | |---------|---------------| | Critic-in-the-loop (CAMEL) | Single reviewer approves/rejects | | Aggregator synthesis (MoA/Mixture-of-Agents) | Multiple responses synthesized into one | | Hierarchical manager (CrewAI) | Manager makes final decision | | MagenticOne orchestrator (AutoGen) | Orchestrator plans and replans | **Recommendation for Fleet**: Implement **weighted ensemble consensus**: 1. Multiple agents produce independent solutions 2. A synthesis agent aggregates (like MoA pattern already in Hermes) 3. For critical decisions, require 2-of-3 agreement from designated expert agents ### 3.5 Conflict Resolution | Conflict Type | Resolution Strategy | |--------------|-------------------| | Concurrent memory writes | File locking + atomic rename (Hermes already does this) | | Conflicting agent outputs | Critic/validator agent evaluates both | | Task assignment conflicts | Single orchestrator (Hermes) assigns, no self-assignment | | State graph race conditions | LangGraph checkpoint + merge strategies | **Recommendation**: - **Write conflicts**: Atomic operations with optimistic locking (existing pattern) - **Output conflicts**: Dedicate one agent as "judge" for each workflow - **Assignment conflicts**: Centralized orchestrator (Hermes) — no agent self-delegation to other fleet members without approval --- ## 4. FLEET ARCHITECTURE RECOMMENDATION ### 4.1 Proposed Architecture: "Fleet Knowledge Graph" (FKG) ``` ┌─────────────────────────────────────────────────────────────┐ │ FLEET KNOWLEDGE GRAPH │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Entities │ │ Relations│ │ Artifacts│ │ Decisions│ │ │ │ (nodes) │──│ (edges) │──│ (typed) │──│ (history)│ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ Storage: SQLite + FTS5 (existing hermes_state.py pattern) │ │ Schema: RDF-lite triples with typed properties │ └─────────────────────┬───────────────────────────────────────┘ │ ┌───────────┼───────────┐ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌───▼─────┐ │ Session │ │ Agent │ │ Workflow│ │ State │ │ Memory │ │ History │ │ (shared)│ │ (local) │ │ (audit) │ └─────────┘ └─────────┘ └─────────┘ ``` ### 4.2 Fleet Member Roles | Agent | Role | Strengths | Delegation Style | |-------|------|-----------|-----------------| | **Hermes** | Orchestrator | Planning, tool use, multi-platform | Delegator (spawns others) | | **Claude Code** | Code specialist | Deep code reasoning, ACP integration | Executor (receives tasks) | | **Gemini** | Multimodal analyst | Vision, large context, fast | Executor (receives tasks) | | **Kimi** | Coding assistant | Code generation, long context | Executor (receives tasks) | | **Timmy** | (Details TBD) | TBD | Executor (receives tasks) | ### 4.3 Communication Protocol **Inter-Agent Message Format** (inspired by MetaGPT's typed artifacts): ```json { "message_type": "task_request|task_response|handoff|knowledge_update|conflict", "source_agent": "hermes", "target_agent": "claude_code", "task_id": "uuid", "parent_task_id": "uuid|null", "payload": { "goal": "...", "context": "...", "artifacts": [{"type": "code", "path": "..."}, {"type": "analysis", "content": "..."}], "constraints": ["..."], "priority": "high|medium|low" }, "knowledge_graph_refs": ["entity:project-x", "relation:depends-on"], "timestamp": "ISO8601", "signature": "hmac-or-uuid" } ``` ### 4.4 Task Flow Patterns **Pattern 1: Pipeline (ChatDev-style)** ``` Hermes → [Analyze] → Claude Code → [Implement] → Gemini → [Review] → Hermes → [Deliver] ``` **Pattern 2: Fan-out/Fan-in (AutoGen GraphFlow-style)** ``` ┌→ Claude Code (code) ──┐ Hermes ──┼→ Gemini (analysis) ───┼→ Hermes (synthesize) └→ Kimi (docs) ─────────┘ ``` **Pattern 3: Debate (CAMEL-style)** ``` Claude Code (proposal) ↔ Gemini (critic) → Hermes (judge) ``` **Pattern 4: Selector (AutoGen SelectorGroupChat)** ``` Hermes (orchestrator) → LLM selects best agent → Agent executes → Result → Repeat ``` ### 4.5 Knowledge Graph Schema ```sql -- Core entities CREATE TABLE fkg_entities ( id TEXT PRIMARY KEY, entity_type TEXT NOT NULL, -- 'project', 'file', 'agent', 'task', 'concept', 'decision' name TEXT NOT NULL, properties JSON, -- Flexible typed properties created_by TEXT, -- Agent that created this created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Relations between entities CREATE TABLE fkg_relations ( id INTEGER PRIMARY KEY AUTOINCREMENT, source_entity TEXT REFERENCES fkg_entities(id), target_entity TEXT REFERENCES fkg_entities(id), relation_type TEXT NOT NULL, -- 'depends-on', 'created-by', 'reviewed-by', 'part-of', 'conflicts-with' properties JSON, confidence REAL DEFAULT 1.0, created_by TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Task execution history CREATE TABLE fkg_task_history ( task_id TEXT PRIMARY KEY, parent_task_id TEXT, goal TEXT, assigned_agent TEXT, status TEXT, -- 'pending', 'running', 'completed', 'failed', 'conflict' result_summary TEXT, artifacts JSON, -- List of produced artifacts knowledge_refs JSON, -- Entities/relations this task touched started_at TIMESTAMP, completed_at TIMESTAMP ); -- Conflict tracking CREATE TABLE fkg_conflicts ( id INTEGER PRIMARY KEY AUTOINCREMENT, entity_id TEXT REFERENCES fkg_entities(id), conflict_type TEXT, -- 'concurrent_write', 'contradictory_output', 'resource_contention' agent_a TEXT, agent_b TEXT, resolution TEXT, resolved_by TEXT, resolved_at TIMESTAMP ); -- Full-text search across everything CREATE VIRTUAL TABLE fkg_search USING fts5( entity_name, entity_type, properties_text, content='fkg_entities', content_rowid='rowid' ); ``` --- ## 5. INTEGRATION RECOMMENDATIONS ### 5.1 Phase 1: Foundation (Immediate — 1-2 weeks) 1. **Implement FKG SQLite database** at `~/.hermes/fleet_knowledge.db` - Extend existing `hermes_state.py` pattern (already uses SQLite + FTS5) - Add schema from §4.5 - Create `tools/fleet_knowledge_tool.py` with CRUD operations 2. **Create fleet agent registry** in `agent/fleet_registry.py` - Map agent names → transport (ACP, API, subprocess) - Store capabilities, specializations, availability status - Integrate with existing `acp_adapter/` and `delegate_tool.py` 3. **Define message protocol** as typed Python dataclasses - `FleetMessage`, `TaskRequest`, `TaskResponse`, `KnowledgeUpdate` - Validation via Pydantic (already a CrewAI/dependency) ### 5.2 Phase 2: Communication Layer (2-4 weeks) 4. **Build fleet delegation on top of existing `delegate_tool.py`** - Extend to support cross-agent delegation (not just child subagents) - ACP transport for Claude Code (already supported via `acp_command`) - OpenRouter/OpenAI-compatible API for Gemini, Kimi - Reuse existing credential pool and provider resolution 5. **Implement selector-based task routing** (AutoGen SelectorGroupChat pattern) - LLM-based agent selection based on task description + agent capabilities - Hermes acts as the selector/orchestrator - Simple heuristic fallback (code → Claude Code, vision → Gemini, etc.) 6. **Add typed artifact contracts** (MetaGPT pattern) - Each task produces a typed artifact (code, analysis, docs, review) - Artifacts stored in FKG with entity relations - Downstream agents consume typed inputs, not free-form text ### 5.3 Phase 3: Advanced Patterns (4-6 weeks) 7. **Implement workflow DAGs** (AutoGen GraphFlow pattern) - Pre-defined workflows as directed graphs (code review pipeline, research pipeline) - Conditional routing based on artifact types or agent decisions - Fan-out/fan-in for parallel execution across fleet agents 8. **Add conflict resolution** - Detect concurrent writes to same FKG entities - Critic agent validates contradictory outputs - Track resolution history for learning 9. **Build consensus mechanism** for critical decisions - Weighted voting based on agent expertise - MoA-style aggregation (already implemented in `mixture_of_agents_tool.py`) - Escalation to human for irreconcilable conflicts ### 5.4 Phase 4: Intelligence (6-8 weeks) 10. **Learning from delegation history** - Track which agent performs best for which task types - Adjust routing weights over time - RL-style improvement of delegation decisions 11. **Fleet-level memory evolution** - Entities and relations in FKG become the "shared brain" - Agents contribute knowledge as they work - Cross-agent knowledge synthesis (one agent's discovery benefits all) --- ## 6. BENCHMARKS & PERFORMANCE CONSIDERATIONS ### 6.1 Latency Estimates | Pattern | Overhead | Notes | |---------|----------|-------| | Direct delegation (current) | ~30s per subagent | Spawn + run + collect | | ACP transport (Claude Code) | ~2-5s connection + task time | Subprocess handshake | | API-based (Gemini/Kimi) | ~1-2s + task time | Standard HTTP | | Selector routing | +1 LLM call (~2-5s) | For agent selection | | GraphFlow routing | +state overhead (~100ms) | Pre-defined, no LLM call | | FKG query | ~1-5ms | SQLite indexed query | | MoA consensus | ~15-30s (4 parallel + 1 aggregator) | Already implemented | ### 6.2 Recommended Configuration ```yaml # Fleet coordination config (add to config.yaml) fleet: enabled: true knowledge_db: "~/.hermes/fleet_knowledge.db" agents: hermes: role: orchestrator transport: local claude_code: role: code_specialist transport: acp acp_command: "claude" acp_args: ["--acp", "--stdio"] capabilities: ["code", "debugging", "architecture"] gemini: role: multimodal_analyst transport: api provider: openrouter model: "google/gemini-3-pro-preview" capabilities: ["vision", "analysis", "large_context"] kimi: role: coding_assistant transport: api provider: kimi-coding capabilities: ["code", "long_context"] delegation: strategy: selector # selector | pipeline | graph max_concurrent: 3 timeout_seconds: 300 consensus: enabled: true min_agreement: 2 # 2-of-3 for critical decisions escalation_agent: hermes knowledge: auto_extract: true # Extract entities from task results relation_confidence_threshold: 0.7 search_provider: fts5 # fts5 | vector | hybrid ``` --- ## 7. EXISTING HERMES INFRASTRUCTURE TO LEVERAGE | Component | What It Provides | Reuse For | |-----------|-----------------|-----------| | `delegate_tool.py` | Subagent spawning, isolated contexts | Fleet delegation transport | | `mixture_of_agents_tool.py` | Multi-model consensus/aggregation | Fleet consensus protocol | | `memory_tool.py` | Bounded persistent memory with atomic writes | Pattern for FKG writes | | `acp_adapter/` | ACP server for IDE integration | Claude Code transport | | `hermes_state.py` | SQLite + FTS5 session store | FKG database foundation | | `tools/registry.py` | Central tool registry | Fleet knowledge tool registration | | `agent/credential_pool.py` | Credential rotation | Multi-provider auth | | `hermes_cli/runtime_provider.py` | Provider resolution | Fleet agent connection | --- ## 8. KEY TAKEAWAYS 1. **GraphFlow (AutoGen) is the SOTA orchestration pattern** — DAG-based execution with conditional routing beats sequential chains and pure LLM-delegation for structured workflows 2. **Three-tier memory is essential** — Session state (volatile), knowledge graph (persistent structured), agent memory (persistent per-agent notes) 3. **Typed artifacts over free-form text** — MetaGPT's approach of standardized output contracts dramatically reduces inter-agent ambiguity 4. **Hybrid delegation beats any single pattern** — Pre-defined DAGs for known workflows, LLM selection for exploratory tasks, handoff for agent-initiated delegation 5. **Critic-in-the-loop is the practical consensus mechanism** — Don't implement Byzantine fault tolerance; a dedicated reviewer agent with clear acceptance criteria is sufficient 6. **Our existing infrastructure covers ~60% of what's needed** — delegate_tool, MoA, memory_tool, ACP adapter, and SQLite patterns are solid foundations to build on 7. **The fleet knowledge graph is the differentiator** — No existing framework has a proper shared knowledge graph that persists across agent interactions. Building this gives us a unique advantage. --- *Report generated from analysis of CrewAI v1.14.1, AutoGen v0.7.5, CAMEL v0.2.90 (installed locally), plus MetaGPT, ChatDev, and LangGraph documentation.*