OpenClaw Architecture
Jarvis — Scott's personal AI assistant · Generated 2026-03-12
v2026.3.2
OpenClaw Version
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
Machine Mac Mini (Apple Silicon arm64) — WOPR
OS macOS 26.2 (Darwin 25.2.0)
Node.js v25.7.0
OpenClaw v2026.3.2 stable
Gateway PID 92118 (LaunchAgent, auto-start)
LAN IP 192.168.1.81
Dashboard http://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)
Model Provider Alias Role
Claude Opus 4 Anthropic opusDefault primary + fallback
Claude Sonnet 4 Anthropic sonnetAvailable for lighter tasks
Local (Ollama @ 127.0.0.1:11434)
Model Size Alias Context
Qwen3 8B 5.2 GB Q131k
Qwen3 14B 9.3 GB qwen14200k
Qwen3 32B 20 GB qwen32200k
Gemma3 3.3 GB gemma3200k
Phi4 9.1 GB phi4200k
Kimi K2.5 cloud relay — kimi200k
MiniMax M2.5 cloud relay — minimax200k
nomic-embed-text 274 MB — Embeddings only
Total local disk: ~47 GB for models
Communication Channels
Channel Status Policy Notes
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.md Curated long-term memory — distilled insights, preferences, project context
memory/YYYY-MM-DD.md Daily logs — raw notes of what happened each day
USER.md About the human — preferences, permissions, contact rules
SOUL.md Agent identity and personality
AGENTS.md Operating procedures and conventions
TOOLS.md Environment-specific notes (SSH hosts, camera names, etc.)
HEARTBEAT.md Periodic task checklist
Search Index (Disposable Cache)
Engine LanceDB (local)
Embedding model nomic-embed-text (Ollama, 274MB)
Indexed sources Workspace .md files + session transcripts
Extra indexed paths risktools, savvynow, managedservices repos
Hybrid search Vector 0.7 + Text 0.3 weight
MMR reranking λ = 0.7
Temporal decay 30-day half-life
Min score 0.25
Session memory hook Enabled (experimental)
Sync triggers On 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:
Delete ~/.openclaw/memory-search/ (LanceDB files)
Restart OpenClaw — it re-indexes all .md files automatically
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
Hosts SavvyNow (/var/www/savvynow)
OS Ubuntu 24.04
SSH ssh -i ~/.ssh/jarvis_linode root@172.105.13.210
2. 139.177.197.146 — ManagedServices.ca
Hosts ManagedServices.ca (/var/www/html)
OS Ubuntu 24.04.3 LTS
Stack nginx + static HTML/CSS + SSL via Certbot
Firewall UFW — SSH + HTTP/HTTPS
SSH ssh -i ~/.ssh/id_ed25519 root@139.177.197.146
3. 172.105.110.96 — RiskTools
Hosts RiskTools.ai (/var/www/risktools)
OS Ubuntu 24.04.3 LTS
Stack Next.js 16 + Tailwind CSS 4 + TypeScript + PM2
SSH ssh root@172.105.110.96
4. 172.105.11.147 — CloudCollective
Hosts CloudCollective (/var/www/cloudcollective)
OS Ubuntu 24.04.4 LTS
Stack nginx 1.24.0, static HTML + Tailwind CDN, Node.js + PM2 (form API on port 3001)
Disk 25 GB (16% used)
Firewall UFW — SSH + Nginx Full
Pages 40+ (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
Deployment rsync from ~/Documents/cloudcollective/ (no git on server)
SSH ssh root@172.105.11.147
Agent Configuration
Concurrency 4 max concurrent · 8 max sub-agents
Heartbeat Every 30 minutes
Context pruning cache-ttl · 1h TTL
Compaction Safeguard mode
Tool profile Full (unrestricted exec)
Session scope per-channel-peer
Boot hooks boot-md + session-memory
Security Posture
Item Status
Gateway auth Token-based
Gateway bind LAN (192.168.1.81)
Tailscale Off
Rate limiting Not configured
Credentials dir World-readable (755)
Plugin allowlist Not set (1 untracked extension)
Node denied commands camera.snap, camera.clip, screen.record, contacts/calendar/reminders.add, sms.send
Exec security Full (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
Plugin Status
whatsapp Enabled
imessage Enabled
openclaw-web-search Enabled (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