Can Claude Code Replicate OpenClaw’s Architecture? A Layer‑by‑Layer Mapping
This article analyzes how Claude Code’s native features map onto OpenClaw’s four‑layer architecture, detailing each layer’s correspondence, the remaining gaps, and practical guidance for building a hybrid ClaudeClaw system that leverages hooks, skills, remote control, and channel plugins.
OpenClaw Architecture Overview
OpenClaw is organized into four layers:
Gateway : a local process that creates a session per conversation, routes inbound messages from any platform to the LLM, and dispatches responses. It also maintains a tool registry and session state.
Skills : a directory of SKILL.md files that describe tool metadata, required permissions and usage instructions.
Multi‑channel inbox : a single agent instance can receive messages from dozens of platforms (Telegram, Slack, Discord, etc.). Each channel maps to its own session, preserving context.
Event bus : an internal publish/subscribe system that emits lifecycle events (message received, tool invoked, task completed, error) for plugins to react to.
Claude Code Feature Stack (v2.1.80)
Claude Code provides native building blocks that correspond closely to the OpenClaw layers.
Agent Execution Model
---
name: my-agent
description: What this agent does
model: sonnet # opus, sonnet, haiku, or full model ID
effort: medium # low | medium | high
maxTurns: 25 # caps autonomous execution
disallowedTools: [Bash, Write]
isolation: worktree # each invocation gets its own git worktree
background: true # run as a background task
memory: project # persistent memory scope (user|project|local)
--- maxTurnsprevents runaway token consumption; disallowedTools enforces a least‑privilege tool set; isolation: worktree gives each agent an isolated Git worktree.
Hook System
Hooks fire shell commands or HTTP POSTs on lifecycle events such as SessionStart, PreToolUse, PostToolUse, Stop, StopFailure, and TaskCompleted. Example HTTP hook configuration:
{
"hooks": {
"PostToolUse": [
{
"type": "http",
"url": "http://localhost:8080/events",
"timeout": 5000
}
]
}
}Remote Control and Headless Mode
Remote Control creates an outbound relay to Anthropic servers, allowing external devices to connect without opening inbound ports:
claude remote-control --name "my-agent-session"Headless mode runs Claude Code as a non‑interactive CLI process. Common flags:
# Single prompt, JSON output
claude-p "Analyze this PR" --output-format json
# Resume a previous session
claude-p "Now fix the issues" --resume "$SESSION_ID" --output-format json
# Stream newline‑delimited JSON
claude-p "Review the code" --output-format stream-json
# Restrict tools
claude-p "Check the deploy" --allowedTools "Bash,Read,WebFetch"Task Management
Since v2.1.16 the Task system supports dependency tracking, background execution, and metrics (token count, tool usage, duration). A TaskCompleted hook can be used to chain multi‑step pipelines (research → analysis → drafting → review).
Agent Teams (Experimental)
When the environment variable CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, a leader agent can distribute work to teammate agents running in separate processes. Hooks such as TeammateIdle and TaskCompleted enable responsive orchestration.
Memory System
Auto‑memory (v2.1.32) persists useful context across sessions. The /memory command manages three scopes: user, project, and local. Memory files carry timestamps so Claude can assess freshness.
Scheduler
The /loop command runs a prompt or slash command at regular intervals:
/loop5m check if the deploy succeeded
/loop10m /my-custom-monitoring-commandChannels (Research Preview)
Channels allow external platforms to push messages directly into a Claude Code session. Example to start Claude Code with Telegram and Discord channels enabled:
claude--channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-officialOnly paired sender IDs are accepted, providing built‑in security.
Mapping OpenClaw → ClaudeClaw
Layer 1: Gateway
ClaudeClaw replaces the Node.js gateway with a thin TypeScript gateway that launches claude -p (headless) processes and wires HTTP hooks. Responsibilities include:
Mapping each platform channel/thread to a Claude Code session (store session_id in SQLite for persistence).
Routing inbound messages to the appropriate claude -p process and parsing the JSON response.
Managing session lifecycle: start a new process on first message, resume with --resume on subsequent messages.
Applying per‑channel tool whitelists via --allowedTools.
Optional remote‑control can be used to expose a human‑in‑the‑loop UI.
Layer 2: Skills
Claude Code uses the same SKILL.md convention. Skills are discovered under .claude/skills/ (project), ~/.claude/skills/ (user) or inside plugins. The frontmatter can declare allowed-tools and reference relative files via ${CLAUDE_SKILL_DIR}.
Layer 3: Multi‑Agent Orchestration
Agent Teams together with the Task dependency graph replace OpenClaw’s pipeline. An orchestrator agent distributes work to specialist agents (research, code, communications, monitoring) and listens for TaskCompleted events.
# .claude/agents/orchestrator.md
---
name: claudeclaw-orchestrator
description: Coordinates multi‑agent workflows
model: sonnet
effort: medium
maxTurns: 50
---Layer 4: Event Bus
Claude Code’s HTTP hooks act as the event bus. Each lifecycle event can POST to a local router, which can forward to monitoring dashboards, trigger downstream workflows, or log to observability stacks.
{
"hooks": {
"Stop": [{"type": "http", "url": "http://localhost:9090/events/stop"}],
"StopFailure": [{"type": "http", "url": "http://localhost:9090/events/error"}],
"TaskCompleted": [{"type": "http", "url": "http://localhost:9090/events/task-done"}],
"SubagentStop": [{"type": "http", "url": "http://localhost:9090/events/agent-done"}],
"PostToolUse": [{"type": "http", "url": "http://localhost:9090/events/tool-used", "timeout": 3000}]
}
}Advantages of ClaudeClaw over OpenClaw
Native sandboxed Bash execution with per‑agent Git worktree isolation.
First‑class Git workflow (branch, commit, push) with safety checks.
Deep VS Code integration for in‑IDE sessions.
Fine‑grained agent governance via maxTurns, disallowedTools, and effort levels.
Zero‑code native channels for Telegram and Discord.
Remaining Gaps
No built‑in persistent daemon; sessions end when the terminal closes (use a gateway service to keep them alive).
Channel support limited to Telegram and Discord (other platforms require custom adapters).
Agent Teams are experimental and may change.
HTTP hooks are fire‑and‑forget; no guaranteed delivery (gateway should persist events locally).
No native web dashboard; monitoring must be built on top of hook data.
Token‑cost management requires careful selection of model and effort.
Minimal Viable ClaudeClaw Prototype
A functional prototype consists of roughly 500 lines of TypeScript for the gateway, plus markdown‑based agents and skills. Excluding platform adapters, the total code footprint is about 1,000 lines.
Choosing ClaudeClaw vs. OpenClaw
Use OpenClaw when you need out‑of‑the‑box support for dozens of messaging platforms or a chat‑first UI for non‑developers. Choose ClaudeClaw when the workflow is code‑centric, you want deep IDE integration, fine‑grained agent governance, or your primary channels are Telegram/Discord with native plugins. A hybrid setup can run OpenClaw adapters for unsupported platforms while ClaudeClaw handles the code‑heavy pipelines.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
