OpenClaw Architecture

Jarvis — Scott's personal AI assistant · Generated 2026-03-12

v2026.3.2
OpenClaw Version
9
Models Available
50
Skills Installed
4
Remote Servers

Overview

A personal AI assistant ("Jarvis") running on a Mac Mini (Apple Silicon), powered by OpenClaw v2026.3.2. The system combines cloud LLMs (Anthropic Claude) with local models (Ollama) and connects through WhatsApp and iMessage as primary interfaces. It has persistent memory, file access, shell execution, web browsing, and can manage remote servers via SSH.

Hardware & Host

MachineMac Mini (Apple Silicon arm64) — WOPR
OSmacOS 26.2 (Darwin 25.2.0)
Node.jsv25.7.0
OpenClawv2026.3.2 stable
Gateway PID92118 (LaunchAgent, auto-start)
LAN IP192.168.1.81
Dashboardhttp://192.168.1.81:18789

Architecture Diagram

┌─────────────────────────────────────────────────────────────────┐
│                        WOPR (Mac Mini)                          │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │              OpenClaw Gateway (port 18789)                │   │
│  │              LaunchAgent · local mode · LAN bind          │   │
│  │                                                           │   │
│  │   ┌─────────┐  ┌──────────┐  ┌─────────┐  ┌──────────┐  │   │
│  │   │ Session  │  │ Memory   │  │  Cron   │  │  Tools   │  │   │
│  │   │ Manager  │  │ (Vector) │  │ Sched.  │  │ Runtime  │  │   │
│  │   │ 12 active│  │ 614 files│  │         │  │ profile: │  │   │
│  │   │ sessions │  │ 3185 chks│  │         │  │ full     │  │   │
│  │   └─────────┘  └──────────┘  └─────────┘  └──────────┘  │   │
│  └──────────────┬───────────────┬────────────────────────────┘   │
│                 │               │                                │
│    ┌────────────┴───┐   ┌──────┴──────────┐                     │
│    │  Channels       │   │  Model Providers │                    │
│    │                 │   │                  │                    │
│    │  [OK] WhatsApp  │   │  [C] Anthropic   │                    │
│    │  [!!] iMessage  │   │    Claude Opus 4  │                    │
│    │                 │   │    Claude Sonnet 4│                    │
│    │                 │   │                  │                    │
│    │                 │   │  [L] Ollama(local)│                    │
│    │                 │   │    Qwen3 8/14/32b │                    │
│    │                 │   │    Gemma3         │                    │
│    │                 │   │    Phi4           │                    │
│    │                 │   │    Kimi K2.5 [C]  │                    │
│    │                 │   │    MiniMax M2.5[C]│                    │
│    │                 │   │    nomic-embed    │                    │
│    └─────────────────┘   └─────────────────┘                    │
│                                                                 │
│    ┌─────────────────────────────────────────────────────────┐  │
│    │  Workspace (~/.openclaw/workspace)                       │  │
│    │                                                          │  │
│    │  SOUL.md · USER.md · IDENTITY.md · MEMORY.md            │  │
│    │  AGENTS.md · TOOLS.md · HEARTBEAT.md                    │  │
│    │  memory/ (daily logs) · config/                          │  │
│    └─────────────────────────────────────────────────────────┘  │
│                                                                 │
│    ┌────────────────────────────────┐                           │
│    │  Ollama (127.0.0.1:11434)     │                           │
│    │  7 models · ~47 GB total       │                           │
│    └────────────────────────────────┘                           │
└─────────────────────────────────────────────────────────────────┘
         │                    │                    │
         │ SSH          │ SSH          │ SSH          │ SSH
         ▼              ▼              ▼              ▼
  ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
  │ .13.210    │ │ .197.146   │ │ .110.96    │ │ .11.147    │
  │ SavvyNow  │ │ Managed    │ │ RiskTools  │ │ CloudColl. │
  │            │ │ Services.ca│ │ Next.js    │ │ Static     │
  │ Ubuntu     │ │ Ubuntu     │ │ Ubuntu     │ │ Ubuntu     │
  └────────────┘ └────────────┘ └────────────┘ └────────────┘

Model Configuration

Primary (Cloud)

ModelProviderAliasRole
Claude Opus 4AnthropicopusDefault primary + fallback
Claude Sonnet 4AnthropicsonnetAvailable for lighter tasks

Local (Ollama @ 127.0.0.1:11434)

ModelSizeAliasContext
Qwen3 8B5.2 GBQ131k
Qwen3 14B9.3 GBqwen14200k
Qwen3 32B20 GBqwen32200k
Gemma33.3 GBgemma3200k
Phi49.1 GBphi4200k
Kimi K2.5 cloud relaykimi200k
MiniMax M2.5 cloud relayminimax200k
nomic-embed-text274 MBEmbeddings only

Total local disk: ~47 GB for models

Communication Channels

ChannelStatusPolicyNotes
WhatsApp Active DM allowlist · Group allowlist Linked to +17788520926 · media up to 50MB
iMessage Warning DM pairing · Group allowlist imsg CLI configured, RPC not ready

Memory System

Architecture Principle

Markdown files are the source of truth. Always. The vector database (LanceDB) is a disposable search index — it can be wiped and rebuilt from the .md files at any time. All memories, decisions, context, and logs are written to markdown first. Search is secondary.

Primary Storage (Markdown)

MEMORY.mdCurated long-term memory — distilled insights, preferences, project context
memory/YYYY-MM-DD.mdDaily logs — raw notes of what happened each day
USER.mdAbout the human — preferences, permissions, contact rules
SOUL.mdAgent identity and personality
AGENTS.mdOperating procedures and conventions
TOOLS.mdEnvironment-specific notes (SSH hosts, camera names, etc.)
HEARTBEAT.mdPeriodic task checklist

Search Index (Disposable Cache)

EngineLanceDB (local)
Embedding modelnomic-embed-text (Ollama, 274MB)
Indexed sourcesWorkspace .md files + session transcripts
Extra indexed pathsrisktools, savvynow, managedservices repos
Hybrid searchVector 0.7 + Text 0.3 weight
MMR rerankingλ = 0.7
Temporal decay30-day half-life
Min score0.25
Session memory hookEnabled (experimental)
Sync triggersOn session start, on search, file watch (5s debounce)

Data Flow

Write path:  Agent → .md files (MEMORY.md, daily notes, etc.)
                         │
                         ▼
              LanceDB re-indexes automatically (file watch)

Read path:   Query → Hybrid search (vector + text) → LanceDB
                         │
                         ▼
              Returns snippets with file path + line numbers
                         │
                         ▼
              Agent reads full context from .md file (memory_get)
  

Recovery

If the vector DB is lost or corrupted:

  1. Delete ~/.openclaw/memory-search/ (LanceDB files)
  2. Restart OpenClaw — it re-indexes all .md files automatically
  3. Zero data loss — everything lives in the markdown

Installed Skills (50)

Productivity & Notes
apple-notes apple-reminders bear-notes obsidian things-mac trello notion
Communication
imsg wacli himalaya discord slack
Development
coding-agent github gh-issues mcporter
Media & Voice
openai-whisper sag songsee video-frames gifgrep openai-image-gen voice-call spotify-player
Smart Home
openhue sonoscli blucli eightctl camsnap
Web & Search
summarize oracle gemini blogwatcher xurl
System & Ops
healthcheck peekaboo clawhub skill-creator model-usage tmux session-logs canvas
Other
nano-pdf gog ordercli weather nano-banana-pro goplaces

Remote Servers

1. 172.105.13.210 — SavvyNow

HostsSavvyNow (/var/www/savvynow)
OSUbuntu 24.04
SSHssh -i ~/.ssh/jarvis_linode root@172.105.13.210

2. 139.177.197.146 — ManagedServices.ca

HostsManagedServices.ca (/var/www/html)
OSUbuntu 24.04.3 LTS
Stacknginx + static HTML/CSS + SSL via Certbot
FirewallUFW — SSH + HTTP/HTTPS
SSHssh -i ~/.ssh/id_ed25519 root@139.177.197.146

3. 172.105.110.96 — RiskTools

HostsRiskTools.ai (/var/www/risktools)
OSUbuntu 24.04.3 LTS
StackNext.js 16 + Tailwind CSS 4 + TypeScript + PM2
SSHssh root@172.105.110.96

4. 172.105.11.147 — CloudCollective

HostsCloudCollective (/var/www/cloudcollective)
OSUbuntu 24.04.4 LTS
Stacknginx 1.24.0, static HTML + Tailwind CDN, Node.js + PM2 (form API on port 3001)
Disk25 GB (16% used)
FirewallUFW — SSH + Nginx Full
Pages40+ (homepage, 14 industry verticals, 8 service areas, 4 service pages, blog, careers, contact, support, assessment, testimonials)
Form API/opt/cc-form-api/ — IT assessment form with lead scoring, Postfix email to scott@cloudcollective.com
Deploymentrsync from ~/Documents/cloudcollective/ (no git on server)
SSHssh root@172.105.11.147

Agent Configuration

Concurrency4 max concurrent · 8 max sub-agents
HeartbeatEvery 30 minutes
Context pruningcache-ttl · 1h TTL
CompactionSafeguard mode
Tool profileFull (unrestricted exec)
Session scopeper-channel-peer
Boot hooksboot-md + session-memory

Security Posture

ItemStatus
Gateway authToken-based
Gateway bindLAN (192.168.1.81)
TailscaleOff
Rate limitingNot configured
Credentials dirWorld-readable (755)
Plugin allowlistNot set (1 untracked extension)
Node denied commandscamera.snap, camera.clip, screen.record, contacts/calendar/reminders.add, sms.send
Exec securityFull (unrestricted)

Warnings

No auth rate limiting — gateway.bind is not loopback but no rate limiting configured. Brute-force risk.
Credentials dir world-readable~/.openclaw/credentials is mode 755. Should be 700.
Plugin allowlist not set — 1 untracked extension (openclaw-web-search) loads without explicit trust.

Recommendations

Set gateway.auth.rateLimit to mitigate brute-force
Run chmod 700 ~/.openclaw/credentials
Set plugins.allow to pin trusted plugin IDs
Consider Tailscale for remote access instead of LAN-only

Plugins

PluginStatus
whatsappEnabled
imessageEnabled
openclaw-web-searchEnabled (untracked extension)

Data Flow

User (WhatsApp/iMessage)
    │
    ▼
OpenClaw Gateway (port 18789)
    │
    ├──▶ Session Manager (routes to agent)
    │        │
    │        ├──▶ Anthropic API (Claude Opus/Sonnet)
    │        │
    │        ├──▶ Ollama (local models)
    │        │
    │        ├──▶ Memory Search (vector + text hybrid)
    │        │
    │        ├──▶ Tool Execution (shell, browser, files)
    │        │
    │        └──▶ Sub-agents (up to 8 concurrent)
    │
    ├──▶ Cron Scheduler (isolated sessions)
    │
    └──▶ Heartbeat (30min polling)

Cloud Collective Site Map

As of 2026-03-12 · Deployed to 172.105.11.147 via rsync from ~/Documents/cloudcollective/

Core Pages (10)

  • index.html
  • contact.html
  • careers.html
  • get-support.html
  • free-it-assessment.html
  • it-assessment.html
  • happy-clients.html
  • managed-it.html
  • it-support.html
  • tisax.html
  • penetration-testing.html

Industry Verticals (14)

  • manufacturing
  • law-firms
  • accounting-firms
  • architecture-firms
  • engineering-firms
  • real-estate
  • healthcare
  • financial-services
  • marketing-creative
  • property-management
  • non-profits
  • colleges
  • construction
  • country-clubs

Service Areas (8)

  • vancouver
  • burnaby
  • surrey
  • richmond
  • north-vancouver
  • coquitlam
  • langley
  • new-westminster

Service Detail Pages (4)

  • service/cybersecurity
  • service/network-engineering
  • service/cloud-services
  • service/penetration-testing

Blog (28 articles)

  • blog/index.html
  • 27 individual posts