Cross-Framework Comparison

All 8 frameworks, side by side, across every dimension I could measure.

Architecture: Most do request-response; HermitClaw runs continuously; Spacebot delegates; the Agents SDK orchestrates multi-agent handoffs. Memory: Three use hybrid search (RRF), two have none, HermitClaw uses 3-factor retrieval, and the Agents SDK gives you 10+ pluggable session backends. Security: IronClaw goes deepest with 5-layer defense; Hermes adds prompt injection scanning; the Agents SDK uses guardrails + human-in-the-loop; pi has none by design. Channels: PicoClaw supports 10, OpenClaw 7, Hermes 6. Footprint: PicoClaw runs in <10MB RAM on a $10 board.

Architecture

Core Loop Patterns

Every framework has a main loop, and they're all different:

FrameworkLoop PatternLanguageConcurrency Model
OpenClawEvent-driven request-response with async tool loopsTypeScriptLane-based command queues (per-session + global)
IronClawEvent-driven message loop with tokio::select!RustSingle async loop, tools in-line
PicoClawMessage bus with goroutine consumersGoGoroutines + channel-based bus
HermitClawContinuous autonomous loop (5s tick)PythonSingle asyncio task per crab
SpacebotConcurrent process model (Channel/Branch/Worker)Rusttokio::spawn per process, broadcast events
pi (pi.dev)Classic agentic loop with steering queuesTypeScriptSingle-threaded with interrupt queues
Hermes AgentSynchronous agentic loop with thread interruptsPythonSynchronous core, subagent parallelism (up to 3)
OpenAI Agents SDKRunner turn loop with guardrails and handoffsPython / TypeScriptasync/await, asyncio.gather for parallel guardrails

Request-response (OpenClaw, IronClaw, PicoClaw, pi, Hermes): Wait for input, run it through an LLM + tool loop, return a response. Most frameworks do this.

Continuous (HermitClaw): No human trigger needed. Every 5 seconds it runs a think cycle -- picks topics, researches, writes. Human messages are just nudges it overhears.

Delegation (Spacebot): The user-facing Channel never executes work itself. It dispatches to Branches (thinking) and Workers (execution) running as concurrent tasks. Results flow back as events.

Orchestration (OpenAI Agents SDK): The Runner manages a turn loop where agents hand off to other agents, tools can pause for human approval, and guardrails validate inputs/outputs. Run state is fully serializable -- you can persist it and resume later.

Module Structure Comparison

FrameworkSource FilesLines (est.)Key Abstraction
OpenClaw~2,100 TS~100K+Channel plugins, tool registry, session lanes
IronClaw~88 RS~30K+Trait-based tools/channels, WASM sandbox
PicoClaw~125 Go~20KInterface-based tools/channels, message bus
HermitClaw~14 Py~3KSingle Brain class, memory stream
Spacebot~88 RS~25K+Process types (Channel/Branch/Worker), memory graph
pi (pi.dev)~50 TS~15K+Operations interfaces, extension events
Hermes Agent~100+ Py~20K+AIAgent class, ToolRegistry singleton, BasePlatformAdapter
OpenAI Agents SDK~230+ Py / ~100+ TS~30K+ (Py)Agent, Runner, Handoff, Guardrail, RunState

Framework Type Spectrum

Most frameworks here are standalone applications -- you run them, you interact with them. The OpenAI Agents SDK is a library -- you import it and build agents in your own code. Hermes Agent lands somewhere in between: it's an application, but the tool registry and platform adapter patterns make it easy to extend.

Memory Systems

Memory Architecture Comparison

FrameworkShort-termLong-termSemantic SearchCompaction
OpenClawSession JSON transcriptWorkspace files (MEMORY.md, daily notes)Hybrid BM25 + vector (SQLite + sqlite-vec)LLM-based summarization when context fills
IronClawIn-memory session + DB persistenceWorkspace filesystem in DBHybrid FTS + vector via RRF (PostgreSQL/pgvector)Context summarization
PicoClawSession JSON filesFile-based (MEMORY.md + daily notes)None -- no embeddings, no vector DBLLM summarization when >20 msgs or 75% tokens
HermitClawLast N thoughts in contextAppend-only JSONL memory stream3-factor retrieval: recency + importance + cosine similarityNone -- memory grows unbounded
SpacebotChannel conversation historyTyped memory graph (8 types) in SQLite + LanceDBHybrid FTS + vector + graph via RRFTiered: 80% background, 85% aggressive, 95% emergency
pi (pi.dev)JSONL session with tree structureAGENTS.md files (no cross-session memory)NoneLLM-based compaction with file tracking
Hermes AgentSession JSON transcriptsMEMORY.md + USER.md (ยง-delimited entries)Honcho AI cross-session memory; SQLite session searchContextCompressor (middle turns summarized by auxiliary model)
OpenAI Agents SDKSession interface (pluggable backends)None built-in (use tools + external stores)None built-in (file_search hosted tool available)Server-side compaction via responses.compact API

Memory Retrieval Approaches

Hybrid Search (RRF) -- OpenClaw, IronClaw, and Spacebot all do this. They combine full-text search (BM25/FTS) with vector similarity, then merge results via Reciprocal Rank Fusion. If something shows up in both result sets, it gets a boosted score.

Three-Factor Retrieval -- HermitClaw's approach, straight from the Generative Agents paper: score = recency + importance + relevance. Each factor is 0-1. Recency decays exponentially, importance is LLM-scored 1-10, relevance is cosine similarity.

External Memory Services -- Hermes Agent uses Honcho for cross-session user modeling, plus SQLite-indexed session search for conversation history.

Pluggable Session Backends -- The OpenAI Agents SDK defines a Session protocol with 10+ backends (in-memory, SQLite, Redis, SQLAlchemy, MongoDB, Dapr, encrypted, OpenAI Conversations). Long-term memory is your problem.

No Retrieval -- PicoClaw and pi skip semantic search entirely. PicoClaw just injects MEMORY.md + the last 3 days into the system prompt. pi relies on AGENTS.md context files and the LLM reading files via tools.

The Workspace File Pattern

Five of the eight frameworks converge on the same pattern for persistent identity and memory:

FilePurposeUsed By
AGENTS.mdOperational instructionsOpenClaw, IronClaw, PicoClaw, Spacebot, pi, Hermes
SOUL.mdPersonality/valuesOpenClaw, IronClaw, PicoClaw, Spacebot, Hermes
USER.mdInfo about the humanOpenClaw, IronClaw, PicoClaw, Spacebot, Hermes
MEMORY.mdCurated long-term memoryOpenClaw, IronClaw, PicoClaw, Hermes
memory/YYYY-MM-DD.mdDaily logsOpenClaw, IronClaw, PicoClaw

HermitClaw does its own thing -- identity.json (genome-derived traits) and memory_stream.jsonl (append-only with embeddings).

The OpenAI Agents SDK has no workspace file convention. Agent instructions live in code, and memory is delegated to the Session interface.

Tool / Function Calling

Tool Inventory

Tool CategoryOpenClawIronClawPicoClawHermitClawSpacebotpiHermesAgents SDK
Shell execโœ…โœ…โœ…โœ… (sandboxed)โœ… (worker)โœ…โœ… (5 backends)โœ… (ShellTool)
File R/Wโœ…โœ…โœ…Via shellโœ… (worker)โœ…โœ…Via tools
File editโœ…Via writeโœ…Via shellVia file toolโœ…โœ… (patch)โœ… (ApplyPatchTool)
Web searchโœ…โœ…โœ…โœ… (OpenAI built-in)โœ… (worker)Via extensionโœ… (Brave/Tavily)โœ… (WebSearchTool)
Web fetchโœ…โœ…โœ…โœ…Via shellVia extensionโœ…Via tools
Browser automationโœ… (Playwright)โŒโŒโŒโœ… (headless Chrome)Via extensionโœ… (Playwright)โœ… (ComputerTool)
Memory searchโœ…โœ…โŒAutomatic (retrieval)โœ… (branch)โŒโœ… (Honcho + SQLite)โœ… (FileSearchTool)
Message/channelโœ…Via channelsโœ…โœ… (respond)โœ… (reply)Via extensionโœ… (send_message)Via tools
Sub-agentsโœ…โŒโœ…โŒโœ… (branch/worker)Via extensionโœ… (delegate_task)โœ… (agent-as-tool)
Cron/schedulingโœ…โœ… (routines)โœ…โŒโœ…Via extensionโœ… (natural language)โŒ
TTSโœ…โŒโŒโŒโŒVia extensionโœ… (OpenAI/ElevenLabs)โœ… (voice pipeline)
Image analysisโœ…โŒโŒโŒโŒโœ… (read)โœ… (vision models)Via tools
Image generationโŒโŒโŒโŒโŒโŒโœ… (fal.ai)โœ… (ImageGenerationTool)
Hardware I/OโŒโŒโœ… (I2C/SPI)โŒโŒโŒโœ… (Home Assistant)โŒ
Code executionโŒโŒโŒโŒโŒโŒโœ… (Python RPC)โœ… (CodeInterpreterTool)
MCP supportโŒโŒโŒโŒโŒโŒโœ…โœ… (local + hosted)

Sandboxing Spectrum

FrameworkIsolation LevelTechnologyNotes
IronClawStrongestWASM sandbox (Wasmtime) + capability modelFuel metering, no filesystem, credential injection at boundary
OpenClawStrongOptional Docker sandboxMulti-layer tool policy pipeline, exec security modes
Hermes AgentStrongDocker (cap-drop ALL, no-new-privileges, PID limits) + SSH + Modal5 terminal backends with varying isolation levels
SpacebotModerateProcess type separationChannel can't exec, Worker can't access memory, path restrictions
OpenAI Agents SDKModerateContainer-based ShellTool + sandbox providersDocker, E2B, Modal, Vercel, Cloudflare, Daytona sandbox clients
HermitClawBest-effortCommand blocklist + Python monkey-patchingExplicitly "not a security boundary"
PicoClawBasicRegex deny patterns (40+ rules)Workspace restriction, no process isolation
piNoneNo sandboxing"YOLO by default" -- full filesystem and shell access

Tool Definition Patterns

Every framework defines tools as name + JSON schema + execute function -- that's just what LLMs expect. The registration patterns differ though:

  • Registry pattern (OpenClaw, IronClaw, PicoClaw, Spacebot, Hermes): Tools register in a central registry, filtered by policy before reaching the LLM
  • Direct assembly (HermitClaw): Tools defined inline as OpenAI function schemas
  • Operations pattern (pi): Tools wrap pluggable I/O interfaces, enabling tool redirection (e.g., SSH)
  • Declarative pattern (OpenAI Agents SDK): Tools declared on agent construction via tools=[] array; the Runner resolves them per turn. Supports @function_tool decorator (Python) or tool() builder (JS) for automatic schema generation from type annotations.

Security

Security Model Comparison

FeatureOpenClawIronClawPicoClawHermitClawSpacebotpiHermesAgents SDK
Process sandboxDocker (optional)WASM (Wasmtime)NoneSubprocessProcess separationNoneDocker/SSH/ModalContainer ShellTool
Credential encryptionN/AAES at rest, inject at boundaryPlaintext JSONEnv vars onlyEncrypted SQLiteEnv vars/config.env (sandboxed from agent)Env vars
Prompt injection defenseExternal content wrappingAho-Corasick + regex detectionNoneNoneNoneNone25+ pattern scannerNone
Leak detectionN/APattern scanning (pre/post request)NoneNoneNoneNoneMemory entry scanning + log redactionTrace data controls
Endpoint allowlistingN/AHost + path + method allowlistNoneCommand blocklistPath restrictionsNonePer-platform user allowlistsNone
Tool policy layers5-layer pipelineCapability-based + approvalAllowFrom per channelCommand blocklistProcess type isolationNone (extension-based)Dangerous command approval (25+ patterns)Guardrails (input/output/tool) + approval
Exec security modesdeny/allowlist/fullApproval per tool callRegex deny patternsBlocklist + env restrictionWorkspace restrictionFull accessConfirmation (CLI) / approval (messaging)needsApproval per tool

IronClaw goes the deepest on security -- five layers (WASM sandbox, credential injection, prompt injection defense, leak detection, endpoint allowlisting). Hermes Agent adds prompt injection scanning and multi-backend isolation. The OpenAI Agents SDK takes a different angle: guardrails (tripwire-based safety checks at input, output, and tool levels) plus human-in-the-loop tool approval with serializable state.

LLM Integration

Provider Support

ProviderOpenClawIronClawPicoClawHermitClawSpacebotpiHermesAgents SDK
Anthropicโœ…โœ…โœ… (native)Via OpenRouterโœ…โœ…Via OpenRouterVia LiteLLM / AI SDK
OpenAIโœ…โœ…โœ…โœ… (primary)โœ…โœ…Via OpenRouterโœ… (primary, Responses + Chat Completions)
Googleโœ…โŒโœ…โŒโŒโœ…Gemini Flash (aux)Via LiteLLM / AI SDK
Ollamaโœ…โœ…โœ…โœ… (custom)โŒโœ…โœ… (custom endpoint)Via LiteLLM
OpenRouterโŒโŒโœ…โœ…โœ…โœ…โœ… (primary, 200+ models)Via LiteLLM
GroqโŒโŒโœ…โŒโœ…โœ…Via OpenRouterVia LiteLLM
DeepSeekโŒโŒโœ…โŒโœ…โŒVia OpenRouterVia LiteLLM
BedrockโŒโŒโŒโŒโŒโœ…โŒVia LiteLLM
Chinese providersโŒโŒโœ… (Zhipu, Moonshot, etc.)โŒโœ… (Zhipu)โŒVia OpenRouterVia LiteLLM
Provider count7+515+31110+200+ (via OpenRouter)100+ (via LiteLLM)

Resilience Features

FeatureOpenClawIronClawPicoClawHermitClawSpacebotpiHermesAgents SDK
Streamingโœ…โœ…โŒโŒโŒ (stubbed)โœ…โŒ (complete before send)โœ… (RunResultStreaming)
Fallback chainsโœ…โœ… (circuit breaker)โœ…โŒโœ…โœ…Graceful tool failureโœ… (retry with backoff + jitter)
Cost trackingโœ… (per-message)โœ… (Decimal precision)โŒโŒโŒโœ… (per-message)โœ… (per-session)โœ… (Usage tracking)
Auth rotationโœ… (multi-key)โŒโŒโŒโŒโŒOAuth token managementโŒ
Context handoffโŒโŒโŒโŒโŒโœ… (cross-provider)โŒโœ… (handoffs between agents)

pi does something no other framework does here: you can start a session with Claude, switch to GPT mid-conversation, and continue with Gemini. It handles the message format conversion automatically. The Agents SDK's handoffs are between agents, not providers -- a different concept entirely.

Multi-Channel Support

PlatformOpenClawIronClawPicoClawHermitClawSpacebotpiHermesAgents SDK
CLI/REPLโŒโœ…โŒโŒโŒโœ… (TUI)โœ… (TUI)โœ… (run_demo_loop)
Telegramโœ…โœ… (WASM)โœ…โŒโœ…โŒโœ…โŒ
Discordโœ…โœ… (WASM)โœ…โŒโœ…โŒโœ…โŒ
Slackโœ…โœ… (WASM)โœ…โŒโœ…โœ… (mom)โœ…โŒ
WhatsAppโœ…โŒโœ…โŒโŒโŒโœ… (Node bridge)โŒ
Signalโœ…โŒโŒโŒโŒโŒโŒโŒ
iMessageโœ…โŒโŒโŒโŒโŒโŒโŒ
Web UIโœ…โœ…โŒโœ… (pixel art)โœ…โœ… (web-ui)โŒโŒ
Home AssistantโŒโŒโŒโŒโŒโŒโœ…โŒ
QQโŒโŒโœ…โŒโŒโŒโŒโŒ
DingTalkโŒโŒโœ…โŒโŒโŒโŒโŒ
Feishu/LarkโŒโŒโœ…โŒโŒโŒโŒโŒ
LINEโŒโŒโœ…โŒโŒโŒโŒโŒ
Realtime/VoiceโŒโŒโŒโŒโŒโŒโŒโœ… (WebRTC, WebSocket, SIP)
Total74-510143-461-2

PicoClaw leads with 10 channels -- mostly because of Chinese platform support (QQ, DingTalk, Feishu, OneBot). OpenClaw has the broadest Western platform coverage at 7. Hermes covers the core Western platforms plus Home Assistant for IoT.

The OpenAI Agents SDK is a library, not an application, so it doesn't ship platform adapters. What it does have is a Realtime API integration for voice agents (WebRTC, WebSocket, SIP) that you wire into your own app.

Channel Abstraction Patterns

Every multi-channel framework abstracts messaging behind a common interface:

  • OpenClaw: ChannelPlugin with optional adapters (setup, status, auth, messaging, streaming, etc.)
  • IronClaw: Channel trait (start() -> MessageStream, respond(), health_check())
  • PicoClaw: Channel interface (Name/Start/Stop/Send/IsAllowed)
  • Spacebot: Messaging trait (start/respond/broadcast/fetch_history)
  • Hermes Agent: BasePlatformAdapter ABC producing normalized MessageEvent dataclass

Identity & Personality

FrameworkIdentity SourcePersonality MechanismUnique Aspect
OpenClawSOUL.md + AGENTS.md + USER.md + MEMORY.mdWorkspace files injected into system promptHeartbeat system for continuous presence
IronClawSOUL.md + AGENTS.md + USER.md + VOICE.mdWorkspace filesystem in system promptVoice profile in VOICE.md
PicoClawSOUL.md + AGENTS.md + USER.md + IDENTITY.mdFiles + memory context in system promptOpenClaw-compatible workspace migration
HermitClawidentity.json (genome-derived)Cryptographic trait derivation from keyboard entropyPersonality is deterministic from a 32-byte genome
SpacebotSOUL.md + IDENTITY.md + USER.mdFiles + pre-computed memory bulletinPer-process model routing (different models for different tasks)
pi~150 word default + AGENTS.mdMinimal system prompt, extensible via extensionsStealth mode (mimics Claude Code tool names)
Hermes AgentSOUL.md + AGENTS.md + USER.md + MEMORY.mdWorkspace files + skills injected into system promptSkills system (agentskills.io compatible markdown docs with progressive disclosure)
OpenAI Agents SDKCode-defined instructions string/functionDynamic instructions via RunContextServer-managed Prompt objects for centralized prompt management

Resource Footprint

FrameworkRAM (typical)Boot TimeBinary/Install SizeExternal Dependencies
OpenClaw~1GB+5-10s~200MB (node_modules)Node.js, npm
IronClaw~50-200MB1-3s~20-50MB binaryPostgreSQL (optional)
PicoClaw<10MB<1s~15-25MB binaryNone (single static binary)
HermitClaw~100-200MB2-5s~50MB (Python + deps)Python, pip
Spacebot~50-200MB1-3s~20-50MB binaryNone (single Rust binary)
pi~200-500MB2-5s~100MB (node_modules)Node.js, npm
Hermes Agent~200-500MB2-5s~100MB (Python + deps)Python, pip, many optional services
OpenAI Agents SDK~50-200MB<1s~20MB (pip) / ~10MB (npm)Python or Node.js; OpenAI API key

PicoClaw wins on footprint by a wide margin -- it was designed for $10 single-board computers, and it shows. The Agents SDK is light as a library, but it still needs an LLM API connection to do anything.

Best For: When to Use Which

If you want...Use this frameworkWhy
Personal assistant across all messaging platformsOpenClaw7 channels, rich tool suite, production-hardened
Maximum security for agent tool executionIronClaw5-layer security with WASM sandbox, leak detection
Agent on embedded/IoT hardwarePicoClaw<10MB RAM, single binary, I2C/SPI hardware tools
Autonomous research agent / digital petHermitClawContinuous thinking loop, Generative Agents memory
Multi-user team agent (Discord/Slack server)SpacebotConcurrent delegation model, multi-agent support
Minimalist coding assistantpi (pi.dev)4 tools, cross-provider handoff, powerful extension system
Self-improving personal agent with skillsHermes AgentPersistent memory, skills system, cron, 5 terminal backends
Multi-agent workflows in your own appOpenAI Agents SDKHandoffs, guardrails, human-in-the-loop, serializable state
Learning agent architecture basicsHermitClaw or PicoClawSmallest codebases, easiest to read
Building a custom agent frameworkpi (pi.dev)Clean extension system, pluggable operations pattern
Maximum LLM provider supportHermes Agent200+ models via OpenRouter
Production multi-agent with typed safetyOpenAI Agents SDKType-safe context, structured output, tracing, 10+ session backends
Voice / realtime agentsOpenAI Agents SDKVoice pipeline (Python), Realtime API, WebRTC/SIP (JS)