How the Claw Agents
Actually Work
Each Claw agent — its runtime, its loop, its trigger, why it lives where it does. Three machines on a Tailscale mesh. No M3 Ultra, no public cloud endpoints yet.
Network Topology
All three machines connected over Tailscale — private WireGuard mesh. No public IPs, no port forwarding. Every agent-to-agent call uses fixed Tailscale IPs directly.
| Machine | Tailscale IP | Hardware | Role | Agents |
|---|---|---|---|---|
| claws-mac-mini | 100.82.244.127 | M4 Mac Mini | Always-on infra | OpenClaw, Paperclip, Hermes, NoClaw |
| jordans-mac-mini | 100.86.248.8 | M4 Mac Mini | Dev machine | Claude Code (kata-managed) |
| macbook-pro-5 | 100.116.140.93 | MacBook M1 Pro | Mobile / monitor | Browser, CLI job submission |
Why two M4 Minis: claws-mac-mini is always-on and must never be interrupted by dev work. Separating infra from dev prevents a runaway Claude Code session from taking down the gateway monitoring it.
Runtime vs Surface — The Core Distinction
Every Claw agent has a runtime (process that runs on a machine) and a surface (HTTP endpoint it exposes). The monorepo contains surfaces. Runtimes live on machines.
The deciding question: Does this agent need state between requests? Yes → persistent process on claws-mac-mini. No → stateless CF Worker in apps/. Claude Code builds the repo and has no surface.
What Lives Where and Why
How Agents Communicate Over Tailscale
OpenClaw — The Gateway
Long-running HTTP server on claws-mac-mini. Maintains a session registry of active agent sessions. Authenticates requests, finds/creates the right session, routes to the correct agent, tracks the result. Does not reason or generate text. Traffic controller with memory.
Event-driven, idle on :18789 waiting for inbound Tailscale HTTP. On request: authenticate → parse intent → check registry → route to agent on correct machine via SSH or HTTP → return job ID → update registry.
Must be alive before Claude Code starts and after it finishes. Running it on jordans-mac-mini (dev machine) would let a CC crash or reboot kill the gateway monitoring the session.
NoClaw — Local Inference
Local inference process on claws-mac-mini — Ollama or MLX on the M4 chip. No external API. Role not fully defined yet. Candidate uses: intent classification before OpenClaw routes, cheap summarization, fallback when API budgets are tight.
Speaks only inward via Tailscale. Never needs to be reachable from the internet. No CF Worker, no wrangler.toml, no apps/ entry. Its only potential monorepo presence: a thin packages/noclaw-client for other agents to call it.
If used for pre-routing classification, co-location means a loopback call instead of a cross-machine Tailscale hop. The M4 chip handles MLX inference natively with no additional hardware.
NoClaw's exact role is open. Pattern (local inference, Tailscale-internal, no monorepo surface) is settled. Model choice (Ollama vs MLX) and specific tasks are decided when you're ready.
NanoClaw — Tracking & Observability
Pure event processor. Receives tracking events (GA4, Meta CAPI, GTM server-side), validates via packages/tracking-utils, enriches from CF-IPCountry header, fans out to GA4 MP + Meta CAPI + D1. Zero state, no LLM, no reasoning.
NanoClaw IS its Worker — entire logic in src/index.ts, imports edge-safe packages, compiles to a single esbuild bundle. Deployed via wrangler deploy. It has a wrangler.toml (a deployment target), not a library. Only Claw agent that runs completely outside the Tailscale network.
ExoClaw — External Interface
Boundary agent between public internet and private Tailscale mesh. External services call ExoClaw, never OpenClaw directly. Authenticates, rate-limits (KV counter), transforms request format, forwards to OpenClaw via Cloudflare Tunnel.
Security boundary. OpenClaw manages live CC sessions with elevated privileges. ExoClaw has intentionally narrow permissions. If ExoClaw gets probed, claws-mac-mini:18789 stays invisible. The Tailscale IPs never appear in responses.
ExoClaw's logic is entirely stateless: auth check, rate-limit counter in KV, request transformation, forward. A CF Worker handles this perfectly. Putting it on claws-mac-mini would require managing TLS, port-forwarding, and DDoS exposure manually.
Hermes — The Messenger
Only Claw-adjacent agent with a closed learning loop. Creates skills from experience, maintains persistent memory (MEMORY.md, FTS5 session search), handles copy generation, messaging, and scheduled reports. Runs two concurrent loops: reactive (HTTP on :7700) and cron (scheduled jobs).
Daemon on claws-mac-mini needs persistent disk state: ~/.hermes/skills/, MEMORY.md, SQLite. Not possible in a stateless CF Worker. But apps/hermes-worker/ is a thin CF receiver for edge-speed inbound HTTP that forwards to :7700 via Cloudflare Tunnel.
Claude Code — The Builder
Receives a task from Paperclip (via OpenClaw via SSH), enters a kata mode on jordans-mac-mini, works through structured phases. Edits monorepo files, runs turbo build, wrangler deploy, verifies health. kata stop hook blocks exit until all phases pass.
Needs the full dev environment: monorepo checkout, pnpm, Wrangler, git credentials. Runs here NOT on claws-mac-mini so infra processes are never on the same machine as active code editing. A runaway CC session can't take down the gateway monitoring it.
Paperclip — The Company
Company-level coordinator. Holds the org chart, ticket system, budget ledger, and heartbeat scheduler. Does not code or generate text. Coordination database with a scheduler and a React dashboard. Co-located with OpenClaw on claws-mac-mini for loopback-speed communication.
Paperclip Node.js server needs PostgreSQL, a scheduler, and always-on availability. Can't be a CF Worker. The apps/clawdbot-dashboard/ React UI deploys to CF Pages and calls Paperclip via OpenClaw or direct Tailscale from macbook-pro-5.
kata’s Role — The Contract Layer
kata runs on jordans-mac-mini inside Claude Code's session. Makes CC's output trustworthy enough for Paperclip to close a ticket.
Everything on the Tailscale Network
One sentence: claws-mac-mini is the always-on infra server. jordans-mac-mini is the dev machine where Claude Code runs kata-managed sessions and deploys Workers. macbook-pro-5 monitors and submits. Everything talks over Tailscale IPs. The monorepo only contains what Wrangler deploys.