De OpenClaw fieldguide, volledig
Geen lens, geen interpretatie, de complete bron netjes uitgewerkt
Dit is de complete OpenClaw-fieldguide, gepresenteerd door Vic Boomer als onderdeel van de OpenClaw-publicatie. Geen samenvatting, geen interpretatie, geen weglatingen. Voor een geïnterpreteerde lezing, kies een andere Vic Pil op de body-pagina.
OpenClaw Field Guide
Een praktische gids voor installatie, architectuur en gebruik van OpenClaw. Deze handleiding combineert de conceptuele principes achter het systeem met technische instructies die je stap voor stap volgt.
Documentatie bijgewerkt tot v2026.5.22. OpenClaw evolueert in een hoog tempo. Alles in dit document beschrijft hoe het systeem op die versie werkt. Latere releases voegen functies toe of bouwen iets om, en in zeldzame gevallen verdwijnt iets weer. Voor de actuele canonieke documentatie zie
docs.openclaw.ai; deze veldgids is een zorgvuldige snapshot, niet een levend referentiewerk.
De field guide is geschreven als companion bij de architectuurdocumenten in vicboomer/. Die geven de technische diepgang; dit document geeft je het totaalplaatje en de handen.
Wat OpenClaw eigenlijk is
OpenClaw is een persoonlijke AI-agent runtime die lokaal draait. Je praat ermee zoals je met een persoon chat — via de eigen OpenClaw iOS/Android/macOS app (de meest directe weg, met voice, camera en locatie), of via messaging-platforms zoals Telegram, Discord, Slack, Signal, iMessage en — met opgepast! — WhatsApp. In plaats van een webinterface praat je met je AI zoals je met een persoon chat.
Dat is een belangrijk verschil.
De meeste AI-tools werken volgens het model:
vraag → antwoord → klaar
OpenClaw is ontworpen voor:
persoon → agent → samenwerking → automatisering
Je Claw wordt een digitale collega, niet een chatbot. Hij leeft in je bestaande gesprekken, onthoudt waar je mee bezig bent, en kan zelfstandig handelen.
Wat een Claw uniek maakt
Persoonlijkheid
Elke Claw heeft een eigen identiteit, vastgelegd in bestanden als SOUL.md en IDENTITY.md. Hierin staat tone of voice, gedrag, voorzichtigheid, en stijl. Daardoor ontstaat een consistent karakter — niet een generieke assistent die elke keer opnieuw begint.
Geheugen
Een Claw onthoudt informatie over jouw voorkeuren, lopende projecten en eerdere gesprekken. Dit gebeurt via MEMORY.md en USER.md. Het geheugen wordt automatisch meegenomen in elke interactie — de agent weet wie je bent en waar je mee bezig was.
Proactief gedrag
Een Claw kan zelfstandig taken uitvoeren via een mechanisme dat heartbeat heet. Elke X minuten controleert de agent triggers: nieuwe e-mails, agendawijzigingen, notificaties. Voorbeelden:
- Dagelijkse briefing sturen
- Conflicten in je agenda detecteren
- Inbox prioriteren
- Vlucht check-in doen
De regels hiervoor staan in HEARTBEAT.md.
Zelf uitbreiden
Een van de belangrijkste ideeen achter OpenClaw is dat een Claw nieuwe capabilities kan bouwen. Wanneer je vraagt om iets dat nog niet kan, kan de agent nieuwe code schrijven, een integratie bouwen, of een tool toevoegen. “Kun je elke ochtend mijn e-mail samenvatten?” — de Claw kan dan zelf een Gmail-integratie maken, een scheduled task aanmaken, en een rapport genereren.
Architectuur in het kort
OpenClaw bestaat uit drie lagen:
INTERFACES → waar je met de agent praat
↓ (WhatsApp, Telegram, Discord, CLI, web dashboard)
GATEWAY → het centrale systeem
↓ (berichten routeren, sessies beheren, authenticatie, security)
SERVICES → verbindingen met de buitenwereld
(LLM providers, messaging platforms, browser, filesystem)
De Gateway is het hart: een enkel Node.js-proces dat WebSocket en HTTP combineert, alle kanalen beheert, en de agent-runtime draait. Alles draait lokaal op jouw hardware — alleen de API-calls naar het LLM verlaten je netwerk.
Begrippen die je gaat tegenkomen
Voordat we verder gaan, een korte introductie van de termen die in de rest van dit document zonder uitleg terugkomen. Niemand wil halverwege Deel 7 alsnog opzoeken wat een “session” is.
- Claw is een individuele agent met eigen persoonlijkheid, geheugen en kanaalverbindingen. Een OpenClaw-runtime kan meerdere Claws tegelijk draaien, elk met een eigen workspace.
- Gateway is het centrale Node.js-proces dat alle kanalen, sessies en agent-runs orkestreert. Eén gateway per machine; de Claws leven erbinnen.
- Daemon is de gateway wanneer hij als achtergrondservice draait (via launchd op macOS, systemd op Linux, of de macOS-menubar-app), zodat je niet zelf een terminal open hoeft te houden.
- Workspace is de map (standaard
~/.openclaw/workspace/) met de markdown-bestanden die een Claw zijn persoonlijkheid en geheugen geven. Elke Claw heeft één workspace. - Channel is een verbinding met een messaging-platform (WhatsApp, Telegram, Slack, Discord, en zo verder) of een directe interface (iOS-app, macOS-app, TUI). Eén Claw kan op meerdere channels tegelijk aanwezig zijn.
- Session is een doorlopend gesprek tussen jou en een Claw, met geheugen tussen beurten. Sessies zijn gebonden aan een channel plus peer; verschillende chats zijn verschillende sessies.
- Skill is een herbruikbare vaardigheid, opgeslagen als een mapje met een
SKILL.md(instructie plus metadata). De Claw weet wanneer hij een skill kan aanroepen. - Tool is een primitieve actie die de Claw kan uitvoeren, bijvoorbeeld een bestand lezen, een webpagina openen, een bash-commando draaien. Skills zijn opgebouwd uit tools.
- Heartbeat is een interne timer die de Claw periodiek wakker maakt zonder dat jij iets stuurt. Hierdoor kan hij proactief taken doen, geheugen onderhouden, herinneringen sturen.
- Soul is het bestand
SOUL.mdin de workspace dat de persoonlijkheid en waarden van de Claw vastlegt. Wordt bij elke sessie als systeem-context geladen. - Memory is alles wat de Claw onthoudt tussen sessies door: korte-termijn (
MEMORY.md), dagnotities, en optioneel een vector-index voor semantisch zoeken.
Mocht je het later kwijt zijn, deze sectie staat er nog steeds.
Hoe je met een Claw werkt
De grootste fout die mensen maken is hun Claw gebruiken als een zoekmachine.
Niet doen:
Vraag → Antwoord → Klaar
Wel doen:
Project → Samenwerken → Itereren → Automatiseren
Zie je Claw als een assistent, onderzoeker, planner en operator. Niet als een chatbot. Geef context, deel projecten, laat de agent meedenken. Hoe meer je deelt, hoe beter de agent wordt.
Voorbeelden van dagelijks gebruik
Daily briefing — Elke ochtend een overzicht van je agenda, belangrijke mails en nieuws.
Inbox triage — Agent leest e-mails en sorteert: urgent, reply nodig, archiveren.
Planning assistent — Agent herplant taken wanneer meetings uitlopen.
Research assistent — Agent leest documenten, doorzoekt het web, en maakt samenvattingen.
Smart home — “Doe het licht in de woonkamer uit” via WhatsApp.
Code review — Agent bekijkt een PR, vat de wijzigingen samen, en stuurt het resultaat naar Telegram.
Van concept naar praktijk
De rest van deze field guide brengt bovenstaande principes in de praktijk. Elk deel bouwt voort op het vorige — van installatie tot multi-agent setups met geheugen, automatisering en sandboxing. Volg het in volgorde, of spring naar het deel dat je nodig hebt als je al draait.
Deel 1: Installatie en eerste start
Wat je nodig hebt
- macOS, Linux of Windows (macOS is best getest)
- Node.js 22+ — OpenClaw is TypeScript, draait op Node
- Minimaal één LLM API-key — Anthropic Claude is de aanbevolen eerste keuze
Node.js installeren
node --version
# Moet v22.x.x of hoger tonen. Zo niet:
brew install node@22
OpenClaw installeren
npm install -g openclaw@latest
Controleer:
openclaw --version
Troubleshooting: command not found
npm prefix -g # Voeg het pad toe aan ~/.zshrc: export PATH="$(npm prefix -g)/bin:$PATH"
macOS sharp-probleem:
SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install -g openclaw@latest
De onboarding wizard
openclaw onboard --install-daemon
De wizard begeleidt je door vier stappen:
- Gateway-authenticatie — token instellen (genereer met
openssl rand -hex 32) - LLM-provider — API-key invullen (Anthropic, OpenAI, Gemini, of een ander)
- Eerste kanaal — WhatsApp, Telegram, Discord, of later
- Daemon installatie — gateway als achtergrondservice
Na afloop draait de gateway. Controleer:
openclaw status
Wat er nu op je machine staat
~/.openclaw/
├── openclaw.json ← Hoofdconfiguratie
├── workspace/ ← Agent workspace (persoonlijkheid, geheugen, skills)
│ ├── SOUL.md ← Persoonlijkheid en waarden
│ ├── IDENTITY.md ← Naam en emoji
│ ├── USER.md ← Informatie over jou
│ ├── AGENTS.md ← Operationele regels
│ ├── MEMORY.md ← Langetermijngeheugen
│ └── HEARTBEAT.md ← Proactieve taken
├── sessions/ ← Gesprekstranscripten
├── credentials/ ← Auth tokens (0600 permissions)
└── cron/ ← Geplande taken
Deel 2: Security — voordat je verder gaat
Dit is het belangrijkste deel. OpenClaw heeft krachtige beveiligingsopties, maar je moet ze activeren. Sla dit niet over.
Security audit draaien
openclaw security audit
Repareer automatisch wat kan:
openclaw security audit --fix
De zes controles die je MOET doen
1. Gateway bindt op localhost
// ~/.openclaw/openclaw.json
{
gateway: {
bind: "loopback" // Standaard en veiligst. NOOIT "lan" zonder auth.
}
}
2. Gateway-authenticatie staat aan
{
gateway: {
auth: {
mode: "token",
token: "${OPENCLAW_GATEWAY_TOKEN}" // Via env var, NOOIT hardcoded
}
}
}
3. DM-beleid staat op pairing
{
channels: {
whatsapp: { dmPolicy: "pairing" }
}
}
De vier opties:
| Beleid | Betekenis | Veiligheid |
|---|---|---|
pairing |
Onbekenden moeten goedgekeurd worden | Aanbevolen |
allowlist |
Alleen vooraf goedgekeurde afzenders | Strikt |
open |
Iedereen mag berichten sturen | Gevaarlijk |
disabled |
Alle DMs worden genegeerd | Maximaal restrictief |
4. Bestandsrechten
chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/openclaw.json
Als ~/.openclaw/ in een cloud-sync map staat (iCloud, Dropbox): verplaats het. Je credentials worden anders gesynchroniseerd.
5. Tool-beperkingen instellen
Als je OpenClaw als chat-assistent gebruikt (niet als dev-tool):
{
tools: {
profile: "messaging",
deny: ["group:automation", "group:runtime", "group:fs"],
fs: { workspaceOnly: true },
exec: { security: "deny", ask: "always" },
elevated: { enabled: false }
}
}
6. Groepen vereisen @mention
{
channels: {
whatsapp: {
groups: { "*": { requireMention: true } }
}
}
}
Veilige startconfiguratie (copy-paste)
{
gateway: {
mode: "local",
bind: "loopback",
auth: {
mode: "token",
token: "${OPENCLAW_GATEWAY_TOKEN}"
}
},
session: {
dmScope: "per-channel-peer"
},
tools: {
profile: "messaging",
deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"],
fs: { workspaceOnly: true },
exec: { security: "deny", ask: "always" },
elevated: { enabled: false }
},
channels: {
whatsapp: {
dmPolicy: "pairing",
groups: { "*": { requireMention: true } }
}
}
}
Deel 3: Je eerste kanaal verbinden
Begin met één kanaal. Voeg pas meer toe als de eerste werkt.
⚠️ Ban-risico: gebruik NOOIT je eigen hoofdnummer.
WhatsApp heeft géén officiële Bot API voor persoonlijke accounts. OpenClaw verbindt via Baileys — een community-library die het WhatsApp Web-protocol reverse-engineered. Dit valt onder WhatsApp’s “unauthorized clients”-clausule in hun ToS, en WhatsApp’s ML-systeem herkent automation-patterns (snelle replies, 24/7 actief, bot-gedrag). De ban geldt het telefoonnummer, niet OpenClaw — als je je hoofdnummer linkt, kun je je hele WhatsApp-leven kwijtraken (zakelijke contacten, familie, groepen, alles).
Wat dan wel?
- Een tweede nummer (eSIM, virtual number zoals Twilio, een oude Pixel met een prepaid SIM)
- Een dedicated bot-nummer dat alleen voor deze use-case bestaat
- Voor commercieel/multi-user gebruik: de officiële WhatsApp Business API (via Twilio/Meta) — OpenClaw heeft daar geen built-in channel voor, maar je kunt het via een eigen plugin koppelen
Verder beperken:
dmPolicy: "allowlist"(geen"pairing"voor publiek bereikbare bots),allowFrommet expliciete nummers, geen volume of frequentie waardoor je als bot opvalt.
openclaw channels login
# Scan de QR-code met je telefoon (zorg dat het je tweede nummer is!)
WhatsApp gebruikt Baileys (geen officiële API). De sessie verloopt periodiek — koppel opnieuw met openclaw channels login.
Telegram
- Maak een bot via @BotFather
- Voeg het token toe:
export TELEGRAM_BOT_TOKEN="123456:ABC..."
- Herstart de gateway of wacht op hot reload
Discord
- Maak een bot in het Discord Developer Portal
- Zet Message Content Intent aan
- Voeg het token toe:
export DISCORD_BOT_TOKEN="jouw-token"
Controleren of het werkt
openclaw channels status
openclaw channels status --probe # Diepere check
Stuur een testbericht naar je bot. Als alles goed is, krijg je een antwoord.
Deel 4: LLM-providers instellen
API-keys via environment variables
Voeg toe aan ~/.zshrc:
export ANTHROPIC_API_KEY="sk-ant-jouw-key"
# Optioneel:
export OPENAI_API_KEY="sk-..."
export GEMINI_API_KEY="..."
export OPENROUTER_API_KEY="sk-or-..."
Zet API-keys nooit direct in openclaw.json. Gebruik altijd ${VAR_NAME} syntax.
Beschikbare providers
| Provider | Env var | Voorbeeld model |
|---|---|---|
| Anthropic (Claude) | ANTHROPIC_API_KEY |
anthropic/claude-opus-4-7 (default) |
| OpenAI | OPENAI_API_KEY |
openai/gpt-5.4 |
| Google Gemini / Gemma | GEMINI_API_KEY |
google/gemini-3.1-pro, google/gemma-4 |
| OpenRouter | OPENROUTER_API_KEY |
openrouter/anthropic/claude-sonnet-4-6 |
| Ollama (lokaal) | Geen key nodig | ollama/llama3.3 |
| Mistral | MISTRAL_API_KEY |
mistral/mistral-large |
| Amazon Bedrock | AWS-credentials of BEDROCK_* |
bedrock/anthropic.claude-opus-4-7 |
| Bedrock Mantle (OpenAI-compat) | AWS-credentials | bedrock-mantle/<model> |
| Arcee AI | ARCEE_API_KEY (of via OpenRouter) |
arcee/<model> |
| Fireworks | FIREWORKS_API_KEY |
fireworks/<model> |
| xAI (Grok) | XAI_API_KEY |
xai/grok-fast, xai/grok-4 |
| Qwen / DashScope | DASHSCOPE_API_KEY |
qwen/<model> |
| MiniMax | MINIMAX_API_KEY |
minimax/<model> |
Model instellen
openclaw models set anthropic/claude-sonnet-4-5
Of in config:
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-5",
fallbacks: ["openai/gpt-5.2"]
}
}
}
}
De fallback chain probeert modellen in volgorde. Bij een auth-fout wordt eerst de API-key geroteerd; pas als alle keys uitgeput zijn gaat het naar het volgende model.
Multi-key rotatie
Meerdere API-keys van dezelfde provider:
export ANTHROPIC_API_KEYS="key1,key2,key3"
OpenClaw roteert automatisch bij rate limits of billing errors.
Lokaal model via Ollama
ollama pull llama3.3
{
agents: {
defaults: {
model: { primary: "ollama/llama3.3" }
}
}
}
Ollama wordt automatisch ontdekt als het draait op localhost:11434. OpenClaw detecteert vision-capability via /api/show, dus als een Ollama-model multimodal is wordt de juiste image media type automatisch ingesteld zodat je plaatjes kunt sturen.
Amazon Bedrock (AWS)
{
models: {
providers: {
bedrock: {
region: "eu-central-1",
// IAM auth via @aws/bedrock-token-generator (default als AWS-credentials beschikbaar zijn)
}
}
}
}
OpenClaw doet inference profile discovery en region injection automatisch. Voor Bedrock-modellen die alleen via OpenAI-compatible endpoints beschikbaar zijn, gebruik je bedrock-mantle/<model>.
Bedrock kan ook als embedding-provider voor memory search worden gebruikt — handig als je memoryCore volledig binnen AWS wil houden.
Eigen endpoint (LM Studio, vLLM, SGLang)
{
models: {
providers: {
lmstudio: {
baseUrl: "http://localhost:1234/v1",
apiKey: "lmstudio",
api: "openai-completions",
models: [
{ id: "minimax-m2.5", name: "MiniMax M2.5", contextWindow: 200000 }
]
}
}
}
}
Fast mode (lagere latency)
{
agents: {
defaults: {
model: {
params: { fast_mode: true }
}
}
}
}
Werkt met Anthropic (service_tier: "auto") en OpenAI. Cron jobs gebruiken standaard fast mode.
Tiered pricing en sessie-kosten
Veel moderne modellen rekenen verschillende prijzen voor cache-hits, cache-misses en verschillende input/output tiers. OpenClaw houdt sessie-kosten als snapshot bij (niet cumulatief opgeteld), zodat het bedrag dat je in de UI ziet overeenkomt met de werkelijke afrekening, ook bij lange sessies of mid-sessie modelwissels.
openclaw infer — directe inference
Nieuw sub-CLI voor directe LLM-interactie zonder agent-loop:
openclaw infer "Vertaal dit naar Engels: Hallo wereld"
openclaw infer image "Een kat op een skateboard"
openclaw infer tts "Goedemorgen" --voice shimmer
openclaw infer search "OpenClaw release notes"
Handig voor scripts, one-shots en quick tests. Documentatie: docs/cli/capability.md.
Handige commando’s
openclaw models list # Beschikbare modellen
openclaw models status # Auth status per provider
openclaw models fallbacks list # Fallback chain
openclaw models fallbacks add openai/gpt-5.2
openclaw models aliases add opus anthropic/claude-opus-4-6
openclaw infer "vraag" # Directe inference
Deel 5: Je agent personaliseren
De agent leest bij elke sessie een set markdown-bestanden uit de workspace. Dit is zijn “persoonlijkheid” en “geheugen”.
IDENTITY.md — naam en uitstraling
Name: Atlas
Emoji: 🏛️
De agent gebruikt deze naam in gesprekken en de emoji verschijnt in kanaalberichten.
SOUL.md — persoonlijkheid en grenzen
# Persoonlijkheid
Je bent een pragmatische assistent met een droge humor.
Je geeft beknopte antwoorden tenzij expliciet om detail gevraagd.
# Grenzen
- Geef nooit medisch of juridisch advies
- Verwijs bij gevoelige onderwerpen naar professionals
- Wees eerlijk als je iets niet weet
USER.md — informatie over jou
# Tom
- Software architect, gevestigd in Amsterdam
- Tijdzone: Europe/Amsterdam
- Communiceert in het Nederlands
- Werkt met TypeScript, Swift, Kotlin
- Gebruikt Obsidian voor documentatie
Hoe meer je hier schrijft, hoe beter de agent op jou afstemt.
AGENTS.md — operationele regels
# Werkwijze
- Gebruik Markdown in antwoorden
- Voeg bronverwijzingen toe waar mogelijk
- Bij code-vragen: lees altijd eerst de relevante bestanden
- Sla belangrijke informatie op in memory/
MEMORY.md — langetermijngeheugen
Dit bestand wordt automatisch in elke system prompt geïnjecteerd (max 20.000 tekens). De agent ziet het bij elke beurt zonder tools aan te roepen.
# Langetermijngeheugen
## Projecten
- OpenClaw documentatie: 24 hoofdstukken in vicboomer/
- Pantion: dialog protocol voor intent convergentie
## Voorkeuren
- Beknopt en technisch
- Nederlandse communicatie
De agent kan dit zelf ook bijwerken. Na verloop van tijd groeit dit bestand organisch.
HEARTBEAT.md — proactieve taken
# Taken bij elke check-in
## Dagelijks
- Check of er ongelezen herinneringen zijn in memory/
- Samenvatting van lopende projecten updaten in MEMORY.md
## Wekelijks (maandag)
- Weekoverzicht schrijven naar memory/
Deel 6: Geheugen — hoe de agent onthoudt
OpenClaw heeft drie lagen geheugen:
| Laag | Bestand | Zichtbaarheid | Wie schrijft |
|---|---|---|---|
| Werkgeheugen | MEMORY.md |
Altijd in system prompt | Agent + jij |
| Dagnotities | memory/YYYY-MM-DD.md |
Via memory_search tool |
Agent (automatisch) |
| Vector index | SQLite/QMD | Via memory_search tool |
Automatisch geïndexeerd |
Automatische memory flush
Als een sessie bijna de context-window limiet bereikt, schrijft de agent automatisch belangrijke feiten naar memory/YYYY-MM-DD.md voordat het transcript wordt gecompacteerd. Dit voorkomt geheugensverlies bij lange gesprekken.
Bij /reset of /new wordt hetzelfde gedaan — de agent slaat feiten op voordat het transcript gewist wordt.
Semantisch zoeken activeren
{
agents: {
defaults: {
memorySearch: {
enabled: true,
provider: "openai",
model: "text-embedding-3-small"
}
}
}
}
Nu kan de agent memory_search "onderwerp" gebruiken om in alle dagnotities te zoeken. De zoekresultaten combineren vector-similarity met tekstmatch en tijdsverval (recentere notities scoren hoger).
Multimodal geheugen (afbeeldingen en audio)
Je kunt ook foto’s en audio-opnames indexeren:
{
agents: {
defaults: {
memorySearch: {
multimodal: {
enabled: true,
modalities: ["image", "audio"]
},
provider: "gemini",
model: "gemini-embedding-2-preview",
fallback: "none"
}
}
}
}
Ondersteunde types: .jpg, .png, .webp, .gif, .heic (afbeeldingen), .mp3, .wav, .ogg, .m4a, .flac (audio).
Lokale embeddings (geen API-kosten)
{
agents: {
defaults: {
memorySearch: {
provider: "local",
local: {
modelPath: "hf:ggml-org/embedding-model.gguf",
modelCacheDir: "~/.openclaw/models"
},
fallback: "openai" // Fallback als lokaal faalt
}
}
}
}
Sleep phases en aging
memory-core heeft een gefaseerde lifecycle: in plaats van één opaak “dreaming”-proces zijn er configureerbare sleep phases (slapen, REM-preview, wakker schrijven). Je kunt per agent een retention/cleanup beleid instellen:
{
agents: {
defaults: {
memoryCore: {
dreamingAging: {
retentionDays: 365,
autoCleanup: true
}
}
}
}
}
Met REM preview kun je inspecteren wat een memory-cyclus zou doen voordat het echt naar disk schrijft — handig als je net begint met memoryCore en wilt zien wat je agent uit transcripts haalt.
Grounded REM backfill
Het dreaming-subsysteem kan historische dagnotities terugvoeren via een “grounded REM backfill”-lane. Dit betekent:
- Feiten uit oude dagnotities worden opnieuw geëvalueerd en gepromoveerd naar short-term memory als ze relevant zijn
- Een grounded scene lane biedt dagelijkse context-snapshots aan de dreaming-cyclus
- De dreaming diary UI in het Control Panel toont een timeline met backfill/reset knoppen en traceerbare samenvattingen
Dit is nuttig als je agent weken aan gesprekken heeft maar de oudere feiten “vergeten” was — de backfill haalt ze op zonder dat je handmatig hoeft te herindexeren.
Memory Wiki
memory-wiki is een nieuwe extension bovenop memory-core die je geheugen als een wiki/vault structureert (vergelijkbaar met Obsidian). Je krijgt:
- Wiki-pagina’s met backlinks tussen verwante notities
- Een ingest/compile/lint pipeline die transcripts opwerkt naar gestructureerde wiki-pagina’s
- Een agent lint-tool die ontbrekende provenance of dode links signaleert
- Een
wiki applymutation tool waarmee de agent zelf wiki-pagina’s kan aanpassen - Dashboard rapport-pagina’s en wiki doctor diagnostics
- Een Obsidian-style CLI bridge zodat je je vault kan synchroniseren
openclaw plugins install memory-wiki
openclaw wiki doctor # Diagnose
openclaw wiki ingest # Verwerk nieuwe content
De wiki kan ook als shared search bridge dienen voor de gewone memory_search tool — agents kunnen wiki-pagina’s terugvinden zonder dat je een aparte tool nodig hebt.
Active Memory
De nieuwste memory-uitbreiding: een blocking memory sub-agent die vóór elke reply automatisch relevante herinneringen ophaalt en injecteert in de agent-context. Hierdoor voelt de agent “op de hoogte” zonder dat je zelf om memory_search hoeft te vragen.
{
plugins: {
entries: {
"active-memory": {
enabled: true,
config: {
enabled: true,
agents: ["main"],
allowedChatTypes: ["direct"],
queryMode: "recent", // of "semantic", "hybrid"
promptStyle: "balanced", // hoe agressief herinneringen injecteren
timeoutMs: 15000,
maxSummaryChars: 220,
persistTranscripts: false,
logging: true
}
}
}
}
}
Active Memory draait als bounded sidecar met timeout — als het te lang duurt, gaat de reply gewoon door zonder extra context. Configureerbaar per agent en chat-type (standaard alleen DMs, niet groeps). Docs: docs/concepts/active-memory.md.
Handige commando’s
openclaw memory status # Index-statistieken
openclaw memory search "onderwerp" # Zoek in geheugen
openclaw memory index # Herindexeer alles
openclaw wiki doctor # (memory-wiki) sanity-check vault
Deel 7: Skills — wat de agent kan
Skills zijn de “vaardigheden” van de agent. Elke skill is een mapje met een SKILL.md bestand dat beschrijft wat de skill doet en wat hij nodig heeft.
Beschikbare skills bekijken
openclaw skills list # Alle skills
openclaw skills list --eligible # Alleen beschikbare skills
openclaw skills check # Welke skills missen vereisten
openclaw skills info github # Details van een specifieke skill
Hoe skills werken
Er zijn twee uitvoeringspaden:
1. Tool dispatch (snel, deterministisch) — de skill roept direct een ingebouwde tool aan:
/web_search "OpenClaw documentatie"
Geen AI nodig. De CLI parseert het commando en voert de tool direct uit.
2. Model invocation (flexibel, via agent) — de agent leest SKILL.md en voert de instructies uit:
/github "maak een issue voor de memory bug"
De agent leest de GitHub skill-instructies, denkt na over de stappen, en voert ze uit met de beschikbare tools (bash, read, write, etc.).
Claude Code in chat: claude-code-proxy
De claude-code-proxy skill maakt Claude Code conversationeel beschikbaar via je messaging-kanalen. Je kunt vanaf je telefoon (WhatsApp, Telegram, Discord) Claude Code laten coderen alsof je achter je laptop zit:
/claude-code-proxy "fix de regression in src/foo.ts en commit het"
De skill is budget-capped en channel-aware — output wordt geformatteerd voor het kanaal waarop je werkt en je hebt limieten zodat je niet per ongeluk een hele dag aan tokens verbrandt vanaf de bank.
Skill security
Skill-policy validatie wordt ook client-side afgedwongen, vóór de execution naar de server gaat. Probeer je een skill te draaien die niet door je policy is toegestaan, dan krijg je direct feedback in plaats van pas wanneer de server het blokkeert.
Skills installeren
Sommige skills vereisen externe programma’s:
# Controleer welke skills extra software nodig hebben
openclaw skills check --verbose
# Skills vanuit ClawHub (de publieke registry)
npx clawhub install <skill-naam>
Een eigen skill maken
mkdir -p ~/.openclaw/workspace/skills/mijn-skill
Maak SKILL.md:
---
name: mijn_skill
description: "Beschrijving van wat de skill doet"
metadata:
openclaw:
emoji: "🔧"
requires:
bins: ["curl"]
env: ["MY_API_KEY"]
---
# Mijn Skill
Wanneer de gebruiker vraagt om [specifieke taak], doe dan:
1. Gebruik de web_fetch tool om data op te halen van [URL]
2. Verwerk het resultaat
3. Geef een samenvatting terug
De skill is direct beschikbaar (hot reload, 250ms debounce).
Skill configuratie
{
skills: {
entries: {
"github": { enabled: true },
"apple-notes": { enabled: true },
"dangerous-skill": { enabled: false }
}
}
}
Deel 8: Meerdere kanalen tegelijk
OpenClaw kan verbonden zijn met 20+ kanalen tegelijk. Elk kanaal heeft zijn eigen adapter met eigen mogelijkheden.
Kanalen toevoegen
openclaw channels add --channel telegram --account alerts --token $TOKEN
openclaw channels add --channel discord --account work --token $DISCORD_TOKEN
Of interactief:
openclaw channels add
Kanaal-mogelijkheden
| Kanaal | Streaming | Threads | Reacties | Bestanden | Groepen |
|---|---|---|---|---|---|
| — | — | ✓ | ✓ | ✓ | |
| Telegram | ✓ | ✓ (topics) | ✓ | ✓ | ✓ |
| Discord | ✓ | ✓ | ✓ | ✓ | ✓ |
| Slack | ✓ | ✓ | ✓ | ✓ | ✓ |
| Signal | — | — | ✓ | ✓ | ✓ |
| iMessage | — | — | — | ✓ | ✓ |
| — | — | ✓ | ✓ | ✓ |
Slack ondersteunt Block Kit: agents kunnen rijke berichten sturen met knoppen, menus en secties. WeChat heeft een volwaardige integratie, gedocumenteerd in docs/channels/wechat.md.
Kanaal-specifieke opties
Een paar nieuwe knoppen die je per kanaal kunt instellen:
Slack — alleen op expliciete @mention reageren in threads
{
channels: {
slack: {
thread: {
requireExplicitMention: true
}
}
}
}
Voorkomt dat de bot in een lopende thread doorblijft antwoorden zodra hij eenmaal getagged is. Iedere nieuwe vraag moet expliciet @bot bevatten.
WhatsApp — replies met quote
{
channels: {
whatsapp: {
replyToMode: "quoted" // of "auto" voor automatische detectie
}
}
}
Bot-replies tonen nu de originele bericht-quote, zoals een normale gebruiker dat ook zou doen.
Matrix — auto-join tijdens onboarding
Tijdens openclaw onboard kan de Matrix-bot kamer-invitaties automatisch accepteren — handig als je veel rooms tegelijk wilt verbinden zonder ze één voor één handmatig te bevestigen.
Discord — kleine fixes onder de motorkap: gateway-verbindingen gebruiken nu ws voor compat, voice receive heeft een hardened error-recovery pad en lege gateway type-errors bevatten weer stack hints.
Inbound mention policy — gecentraliseerd
Alle kanalen delen één mention-policy: één centrale plek waar je regelt wanneer de Claw mag antwoorden in een groep. Pas je het in één kanaal aan, dan gelden de regels overal hetzelfde. Voorheen had elk kanaal zijn eigen regels, wat tot verwarrende verschillen leidde tussen Slack, Discord, Telegram, Matrix en WhatsApp.
Voice en meetings, wanneer chat niet genoeg is
Een Claw is op de kanalen die het ondersteunen niet beperkt tot tekst. Drie capabilities die werken waar het kanaal ze toelaat:
Voice-gesprekken. Browser, Discord en native nodes (iOS, macOS) delen één unified talk-systeem. Een gesprek dat in de browser start kan worden overgedragen aan iOS of Discord zonder dat het hapert. Voor Discord wordt audio rechtstreeks via ElevenLabs gestreamd, zonder aparte transcribe-stap.
Google Meet. Een Claw kan via een paired-node Chrome-transport meedoen aan Google Meet-meetings. Transcript-entries komen terug als artifacts in de sessie, zodat de Claw er na afloop nog over kan praten.
Telefonie (DTMF). Voor voice-calls ondersteunt OpenClaw keypad-tonen tijdens een gesprek. Essentieel wanneer de Claw zich door een IVR-menu moet werken om bijvoorbeeld terug te bellen.
Durable message lifecycle
Outbound berichten lopen door een gestructureerde levenscyclus: queued, sending, sent of failed. Channels tonen tijdens een lopende agent-run vaak een live-meelopend bericht (“progress draft”) zodat je kunt meekijken terwijl de Claw aan het werk is. Belangrijker: een netwerkstoring of een gateway-restart leidt niet meer tot verloren berichten, ook niet bij hoge volumes.
Multi-account (zelfde kanaal, verschillende bots)
{
channels: {
telegram: {
accounts: {
persoonlijk: {
botToken: "token-1",
dmPolicy: "pairing",
allowFrom: ["+31612345678"]
},
alerts: {
botToken: "token-2",
dmPolicy: "open",
allowFrom: ["*"]
}
},
defaultAccount: "persoonlijk"
}
}
}
Status bekijken
openclaw channels status # Overzicht
openclaw channels status --probe # Diepere check (verbindingstest)
openclaw channels list # Alle accounts
Deel 9: Multi-agent — meerdere persoonlijkheden
Dit is waar OpenClaw pas echt krachtig wordt. Je kunt meerdere agents draaien, elk met een eigen workspace, persoonlijkheid, model en kanaalverbindingen.
Agents aanmaken
openclaw agents add werk --workspace ~/.openclaw/workspace-werk
openclaw agents add thuis --workspace ~/.openclaw/workspace-thuis
Of in config:
{
agents: {
list: [
{ id: "thuis", default: true, workspace: "~/.openclaw/workspace-thuis" },
{ id: "werk", workspace: "~/.openclaw/workspace-werk" },
{ id: "ops", workspace: "~/.openclaw/workspace-ops" }
]
}
}
Agents koppelen aan kanalen
Wie welk kanaal bedient:
{
bindings: [
{ agentId: "thuis", match: { channel: "whatsapp" } },
{ agentId: "werk", match: { channel: "slack" } },
{ agentId: "ops", match: { channel: "telegram", accountId: "alerts" } }
]
}
Of via CLI:
openclaw agents bind --agent werk --bind slack
openclaw agents bind --agent ops --bind "telegram:alerts"
Routing-regels
De router bepaalt welke agent een bericht krijgt. Prioriteit:
- Exacte peer match (Discord: role + guild + peer)
- Thread-overerving (child volgt parent)
- Guild + roles (Discord)
- Account match
- Kanaal match
- Default agent
Elke agent heeft eigen workspace
~/.openclaw/workspace-thuis/ ← Eigen SOUL.md, MEMORY.md, skills
~/.openclaw/workspace-werk/ ← Ander model, andere persoonlijkheid
~/.openclaw/workspace-ops/ ← Minimale persoonlijkheid, focus op monitoring
Configureer per agent:
{
agents: {
list: [
{
id: "werk",
workspace: "~/.openclaw/workspace-werk",
model: { primary: "anthropic/claude-opus-4-6" },
thinking: "high",
heartbeat: {
every: "1h",
target: "slack",
// heartbeat-sectie in system prompt aan/uit per agent
includeSystemPromptSection: true
},
// complete system prompt overschrijven voor deze agent
systemPromptOverride: "Je bent een ops-bot. Antwoord kort en in NL."
}
]
}
}
Per-agent system prompt overrides zijn handig als één agent fundamenteel anders moet praten dan de rest, bijvoorbeeld een ops-bot die alleen droge status-updates geeft. Voor lichte agents zonder heartbeat-loop bespaart heartbeat.includeSystemPromptSection: false ook aardig wat tokens.
Subagents (automatisch gespawnde agents)
De hoofdagent kan subagents spawnen voor parallelle taken:
Gebruiker: "Zoek informatie over X en Y tegelijk"
Agent: spawnt twee subagents, elk met een eigen sessie
Subagent 1: zoekt X → rapporteert terug
Subagent 2: zoekt Y → rapporteert terug
Agent: combineert resultaten
Subagents respecteren dieptelimieten:
| Diepte | Wie | Restricties |
|---|---|---|
| 0 | Hoofdagent | Volledige toolset |
| 1 | Subagent | Beperkte tools |
| 2 | Sub-subagent | Minimale tools |
| 3 | Maximum | Kan niet verder spawnen |
Gesandboxte subagents hebben beperkte zichtbaarheid — ze kunnen alleen hun eigen sessie en door hen gespawnde sessies zien.
Commando’s
openclaw agents list # Alle agents
openclaw agents bindings # Wie is waaraan gebonden
openclaw agents add <naam> --workspace <pad>
openclaw agents delete <naam> --force
Deel 10: Geplande taken met cron
De ingebouwde scheduler laat agents op geplande tijden draaien, resultaten afleveren via kanalen, en automatisch herstellen van fouten.
Eenmalige herinnering
openclaw cron add \
--name "Herinnering" \
--at "2026-04-01T09:00:00Z" \
--session main \
--system-event "Herinnering: documentatie reviewen" \
--wake now \
--delete-after-run
Relatieve tijd (over 20 minuten)
openclaw cron add \
--name "Check" \
--at "20m" \
--session main \
--system-event "Check de status van het deployment" \
--wake now
Dagelijks terugkerend (geïsoleerde sessie)
openclaw cron add \
--name "Ochtendstatus" \
--cron "0 7 * * *" \
--tz "Europe/Amsterdam" \
--session isolated \
--message "Vat de inbox en agenda voor vandaag samen." \
--announce \
--channel whatsapp \
--to "+31612345678"
Wekelijks met zwaarder model
openclaw cron add \
--name "Weekanalyse" \
--cron "0 6 * * 1" \
--tz "Europe/Amsterdam" \
--session isolated \
--message "Wekelijkse analyse van projectvoortgang." \
--model "opus" \
--thinking high \
--announce
Cron in een bestaande sessie (--session-key)
Met --session-key laat je een cron-job in een specifieke bestaande sessie draaien. Handig als je een terugkerende taak wilt die binnen een doorlopende thread blijft, in plaats van iedere keer een nieuwe geïsoleerde sessie te beginnen:
openclaw cron add \
--name "Project standup" \
--cron "0 9 * * 1-5" \
--tz "Europe/Amsterdam" \
--session-key "agent:werk:slack:C12345" \
--message "Vat de openstaande issues van project X samen."
De session key bepaalt welke conversatie de cron raakt — agent:<id>:<channel>:<peer>. De agent ziet hierdoor de hele context van die thread bij elke run, alsof jij zelf het bericht had gestuurd.
Cron vs heartbeat — wanneer wat?
| Cron | Heartbeat | |
|---|---|---|
| Wanneer | Exact geplande tijden | Periodiek interval |
| Sessie | Geïsoleerd of main | Altijd main |
| Aflevering | Naar elk kanaal | Naar laatste of geconfigureerd kanaal |
| Context | Schone start (isolated) of gedeeld (main) | Altijd gedeelde context |
| Gebruik | Dagelijks rapport, herinneringen, webhooks | Geheugenonderhoud, check-ins |
Beheren
openclaw cron list # Alle jobs
openclaw cron status # Status overzicht
openclaw cron runs --id <jobId> # Geschiedenis
openclaw cron run <jobId> # Handmatig uitvoeren
openclaw cron edit <jobId> --message "Nieuwe prompt"
openclaw cron remove <jobId>
Foutafhandeling
Bij transient errors (rate limits, timeouts, 5xx) probeert OpenClaw het opnieuw met exponentieel backoff:
| Poging | Wachttijd |
|---|---|
| 1 | 30 seconden |
| 2 | 60 seconden |
| 3 | 5 minuten |
| 4 | 15 minuten |
| 5+ | 60 minuten |
Je kunt een failure alert instellen:
{
cron: {
failureAlert: {
after: 3,
channel: "telegram",
to: "12345",
cooldownMs: 3600000
}
}
}
Deel 11: Browser-automatisering
De agent kan webpagina’s bezoeken, formulieren invullen, screenshots maken en meer via Playwright.
Activeren
{
browser: {
enabled: true,
defaultProfile: "openclaw"
}
}
Handmatig testen
openclaw browser start
openclaw browser open https://example.com
openclaw browser screenshot
openclaw browser snapshot # ARIA-toegankelijkheidsboom (tekst, niet pixels)
Wat de agent kan doen
De agent heeft browser-tools beschikbaar in skills:
| Actie | Beschrijving |
|---|---|
navigate <url> |
Pagina openen |
click <ref> |
Element klikken (via ARIA ref) |
type <ref> "tekst" |
Tekst invoeren |
screenshot |
Screenshot maken |
snapshot |
ARIA-boom ophalen (tekst) |
fill --fields '{...}' |
Formulier invullen |
pdf |
Pagina als PDF opslaan |
evaluate --fn "code" |
JavaScript uitvoeren |
Browser sessie selectie
De snelste manier om te kiezen welke browser de agent gebruikt:
browserSession |
Gedrag |
|---|---|
"agent" |
OpenClaw’s eigen geïsoleerde browser (schone sessie, geen cookies) |
"user" |
Je echte, ingelogde Chrome (via Chrome MCP attach — je bestaande tabs, cookies, logins) |
De agent kiest automatisch het user profiel als dat beschikbaar is.
Tip: Gebruik
browserSession: "user"wanneer de agent moet inloggen op diensten waar je al geauthenticeerd bent (Google, GitHub, interne tools). Gebruik"agent"voor schone scraping zonder je persoonlijke sessie te raken.
Profielen
| Profiel | Beschrijving |
|---|---|
openclaw |
Geïsoleerd, beheerd door OpenClaw |
user |
Ingelogde Chrome via Chrome MCP (aanbevolen voor taken die authenticatie vereisen) |
chrome-relay |
Chrome via extensie relay (voorheen chrome genoemd) |
| Custom | Eigen profiel met CDP-poort |
{
browser: {
profiles: {
werk: { cdpPort: 18801 },
remote: { cdpUrl: "http://10.0.0.42:9222" }
}
}
}
Browser-profielen, hot-reloading
De browser server context ondersteunt profile hot-reloading: wijzigingen in profielen worden direct opgepakt zonder dat je de browser hoeft te herstarten. Tab-management is robuust, en strakkere guards rond interactieve acties voorkomen dat parallelle agents elkaar hinderen.
Voor Browserbase-gebruikers: directe WebSocket CDP-verbindingen worden nu ondersteund — meetbaar lagere latency dan HTTP polling:
{
browser: {
profiles: {
cloud: {
cdpUrl: "wss://connect.browserbase.com?apiKey=..."
}
}
}
}
SSRF-bescherming
De browser weigert standaard navigatie naar private netwerken. Overschrijven (alleen als je weet wat je doet):
{
browser: {
ssrfPolicy: {
dangerouslyAllowPrivateNetwork: true
}
}
}
Deel 12: Heartbeat — de proactieve agent
De heartbeat is een timer die de agent periodiek wakker maakt zonder dat je een bericht stuurt. Hiermee kan de agent geheugen onderhouden, herinneringen sturen en taken uitvoeren.
Activeren
{
agents: {
defaults: {
heartbeat: {
every: "30m",
activeHours: {
start: "08:00",
end: "22:00",
timezone: "Europe/Amsterdam"
},
target: "last",
model: "anthropic/claude-sonnet-4-5",
// heartbeat-sectie in system prompt aan/uit
includeSystemPromptSection: true
}
}
}
}
| Instelling | Beschrijving |
|---|---|
every |
Interval (bijv. "30m", "2h") |
activeHours |
Stille uren respecteren |
target |
Waar het antwoord naartoe gaat: "last" (laatste kanaal), een specifiek kanaal, of "none" |
model |
Lichter model voor heartbeats (bespaart kosten) |
includeSystemPromptSection |
Heartbeat-instructies wel/niet in system prompt opnemen, uitschakelen bij agents die geen heartbeat-loop nodig hebben bespaart tokens |
Wat de agent doet bij een heartbeat
De agent leest HEARTBEAT.md en voert de instructies uit. Typisch:
- Geheugen bijwerken
- Herinneringen checken
- Lopende taken reviewen
Als er niets te melden is, reageert de agent met HEARTBEAT_OK (onzichtbaar voor jou).
Commando’s
openclaw system heartbeat last # Laatste heartbeat bekijken
openclaw system heartbeat enable # Inschakelen
openclaw system heartbeat disable # Uitschakelen
Deel 13: Docker-sandboxing
Een Claw kan code uitvoeren: bash-commando’s draaien, Python-scripts starten, bestanden aanpassen, een browser bedienen. Dat is precies wat hem nuttig maakt, en precies wat hem risicovol maakt. Een prompt-injection in een binnenkomende e-mail, een verkeerd ingestelde skill, een sub-agent die een onverwachte tool aanroept: in al die scenario’s wil je niet dat de uitvoering zomaar op je hostmachine landt.
Docker-sandboxing draait de tool-executie van een Claw in een geïsoleerde container. De container heeft standaard een read-only root filesystem, geen netwerkverbinding, alle Linux capabilities verwijderd, een geheugen-limiet en een PID-limiet. Een kwaadaardig commando dat je host zou kunnen beschadigen, kan dat binnen de sandbox simpelweg niet.
Wanneer kickt de sandbox in?
Niet bij elke turn. Een sandbox-start kost een paar seconden, dus OpenClaw probeert hem zo gericht mogelijk in te zetten. De mode-instelling bepaalt welke executies door de container gaan:
| Mode | Wat draait in de sandbox? | Wanneer kiezen |
|---|---|---|
off |
Niets, alle tools draaien op de host | Lokaal experiment, je vertrouwt jezelf en je skills |
non-main |
Alleen subagents en hun tools | De default. Hoofdagent blijft snel, gespawnde subagents worden geïsoleerd |
all |
Iedere tool-executie, inclusief de hoofdsessie | Productie, multi-user setups, of als je je Claw via een open kanaal aanbiedt |
non-main is de pragmatische middenweg: jouw eigen interactie blijft direct, maar zodra de Claw zelf een subagent spawnt (vaak voor parallelle taken op onvoorspelbare data) gaat die in de container. Voor publieke bots die voor onbekende gebruikers werken, is all de juiste keuze.
Activeren
Eerst bouw je de Docker image die als basis dient. Het script in scripts/sandbox-setup.sh doet dat in één keer:
scripts/sandbox-setup.sh
Daarna configureer je de sandbox in openclaw.json:
{
agents: {
defaults: {
sandbox: {
mode: "non-main",
docker: {
image: "node:22-slim",
readOnlyRoot: true,
network: "none",
capDrop: ["ALL"],
memory: "512m",
pidsLimit: 100
}
}
}
}
}
memory en pidsLimit zijn zachte bovengrenzen, ze voorkomen dat een uit de hand gelopen tool je host opvreet. De waarden hierboven zijn ruim genoeg voor normale taken (bestanden lezen, korte scripts draaien, een API aanroepen) maar te krap voor zware data-processing. Verhoog ze als je werkelijk grote workloads aan je Claw geeft.
Wat is wel en niet bereikbaar vanuit de container?
De sandbox is niet een complete kopie van je systeem. Standaard:
- Workspace (de map met
SOUL.md,MEMORY.md, skills): read-only mounted, zodat de Claw zijn eigen context kan lezen maar niet zijn persoonlijkheid kan herschrijven vanuit een tool. - Filesystem buiten de workspace: niet bereikbaar. Een tool die
~/.ssh/id_rsaprobeert te lezen, krijgt simpelweg “no such file”. - Netwerk: standaard uit. Als een tool het web op moet (bijvoorbeeld de
web_fetchtool), gaat het netwerkverkeer via een gecontroleerd pad in de gateway, niet via de container zelf. - Geheim-materiaal (
~/.openclaw/credentials/): niet gemount. De gateway stuurt alleen de hoogst-nodige tokens mee, en alleen wanneer de tool ze daadwerkelijk nodig heeft.
Het resultaat is dat een gecompromitteerde tool de Claw zelf niet kan kapen, en zeker je systeem niet.
Wat je kunt verwachten in gebruik
Drie zaken merk je in de praktijk:
- Eerste cold start is langzamer. De image moet één keer geladen worden. Daarna draaien sandbox-aanroepen in honderden milliseconden.
- Tools met netwerk-behoefte vragen om expliciete toestemming. Een tool die
network: "none"overschrijft, vereist een instelling in de tool-config of een toestemming-prompt aan jou. - Logs verschijnen in
openclaw logszoals altijd, maar je ziet erbij dat een tool “in sandbox” liep, zodat je achteraf weet welke executie geïsoleerd is geweest.
Wanneer je het beter uit kunt laten
Op een persoonlijke laptop waar jij de enige gebruiker bent, je zelf alle skills hebt geschreven of geïnstalleerd en niemand anders je Claw kan aansturen, voegt de sandbox vooral overhead toe. mode: "off" is dan een redelijke keuze. Zodra je je Claw aan een publiek kanaal hangt (open WhatsApp-nummer, Discord-bot voor je community, web-form dat naar de gateway post) is non-main of all geen luxe meer maar de norm.
Deel 14: Hooks en automatisering
Een skill is iets dat de Claw zelf kan besluiten te gebruiken. Een hook is het omgekeerde: een stukje code dat zonder dat de Claw erom vraagt wordt uitgevoerd, omdat er iets in het systeem gebeurt. Een bericht komt binnen, een sessie start, een commando wordt aangeroepen, en daar wil je iets aan vasthangen. Loggen, transformeren, doorsturen, blokkeren.
Conceptueel: skills laten je de Claw nieuwe vaardigheden geven. Hooks laten je het systeem zelf gedrag geven dat onafhankelijk van de Claw bestaat. Een hook kan een bericht onderscheppen voordat de Claw het ooit ziet, of juist iets doen nadat de Claw klaar is met antwoorden.
Beschikbare events
| Event | Wanneer |
|---|---|
message:received |
Bericht ontvangen |
message:sent |
Bericht verstuurd |
command:new |
Nieuwe sessie via commando |
session:start |
Sessie gestart |
agent:bootstrap |
Agent geïnitialiseerd |
agent:end |
Agent turn afgerond |
gateway:start |
Gateway opgestart |
Een hook maken
mkdir -p ~/.openclaw/hooks/mijn-hook
HOOK.md:
---
name: mijn-hook
description: "Log elk ontvangen bericht"
metadata:
openclaw:
events: ["message:received"]
---
handler.ts:
export default async function(event) {
console.log(`Bericht van ${event.context.from}: ${event.context.content}`);
}
Gmail-integratie via hooks
openclaw webhooks gmail setup --account jouw-email@gmail.com --project gcp-project
{
hooks: {
enabled: true,
mappings: [
{
match: { path: "gmail" },
action: "agent",
agentId: "main",
deliver: true
}
]
}
}
Wake hooks zijn untrusted
Events die binnenkomen via wake-triggers (externe pings die de Claw wakker maken) worden gemarkeerd als untrusted. Dat betekent dat zo’n event niet stilletjes vertrouwde context kan injecteren in je Claw, alles uit een wake-event wordt behandeld als content van een onbekende afzender.
Waarom het uitmaakt: als je hooks gebruikt om externe systemen te laten “praten” met je agent (webhooks, Gmail Pub/Sub, Discord embeds), kan een aanvaller die een wake-trigger kan activeren niet meer doen alsof zijn payload van een vertrouwde bron komt. Tools die alleen voor trusted content open staan blijven dicht.
Hooks krijgen ook meer context mee (trigger, channelId) zodat je hook-implementaties context-aware beslissingen kunnen nemen over wat ze met een event doen.
Let op: als je een eigen
hooks.internal.handlersconfig gebruikt, dat veld is alleen nog compat-input. De canonical config-key ishooks.internal.entries.
Deel 15: Native apps
Belangrijk om te weten: OpenClaw heeft een eigen iOS en Android app waarmee je rechtstreeks met je agent praat — zonder tussenkomst van WhatsApp/Telegram/Discord. Voor veel gebruikers is dit de primaire dagelijkse interface, niet een aanvulling. De messaging-channels zijn een uitbreiding wanneer je je agent in een gewone chat-app of een groep wilt hebben; de native apps zijn voor directe, persoonlijke conversaties met volledige device-integratie (camera, locatie, voice).
iOS app — volwaardige chat-client
De iOS app verbindt direct met je gateway (lokaal via Bonjour/mDNS of remote via Tailscale) en is een complete OpenClaw-client:
Communicatie:
- Chat met je agent — eigen chat-interface, geen WhatsApp/Telegram nodig
- Talk mode — push-to-talk én continuous voice-conversatie
- Voice wake — achtergrond wake-word detectie (“Hé Atlas…”)
- Apple Watch — chat, voice-input en exec-approvals op je pols
- Push notificaties voor agent-replies en exec-approvals, met approve/deny direct vanaf het lockscreen zonder de app te openen
Device-integratie (de agent kan dit gebruiken):
- Camera (foto + video opname op verzoek)
- Locatie (significant location monitor)
- Scherm (ReplayKit recording)
- Foto-library, kalender, contacten, herinneringen
- Motion data
- Widgets / Live Activities
Onder de motorkap:
- Dual gateway-sessies (één voor device-capabilities, één voor chat/voice)
- TLS certificate pinning (SHA256 fingerprint)
- 11Labs voice integratie met PCM/MP3 fallback
- Een authenticated background presence beacon zodat de gateway weet of de iOS-client actief is zonder dat de app open hoeft te zijn
- Talk handoff naar native nodes: een voice-gesprek dat in de browser begint kan worden overgedragen aan iOS zonder onderbreking
Verbinden:
openclaw qr # genereert pairing QR; scan met de iOS-app
Gateway-verbindingsfoutmeldingen zijn duidelijk geformuleerd en de release-versioning is gepinned op CalVer (apps/ios/version.json).
Android app
Vergelijkbaar met iOS, Kotlin-gebaseerd (StateFlow + coroutines), verbindt direct via WebSocket. Chat-interface, talk mode, push notificaties. Het QR pairing-proces is robuust: stale setup-codes worden automatisch gewist bij nieuwe QR scans en stored device tokens hebben voorrang.
macOS app (menubar)
De macOS app is een menubar-applicatie met:
- Gateway-beheer (start/stop/herstart) — gateway draait als child proces van de app
- Chat-interface met je agent (canonical session keys,
/new,/reset,/clear) - Canvas windows voor web-content
- Talk mode (spraak), met experimentele MLX Talk provider voor lokale speech synthesis (geen API nodig, draait op Apple Silicon)
- Auto-update via Sparkle (de macOS update/restart handoff is robuust en voorkomt dat de app in een half-gestarte staat blijft hangen na een npm-update)
- Screen snapshots voor monitor preview: de macOS-app biedt een
screen.snapshotnode-command waarmee het Control Panel een live preview van je Mac-scherm kan tonen in de monitor-weergave
Welke interface wanneer?
| Interface | Beste voor |
|---|---|
| iOS / Android app | Dagelijks persoonlijk gebruik onderweg. Voice, camera, locatie, snelle approvals |
| macOS app | Dagelijks gebruik op je laptop/desktop. Menubar-snelheid, canvas, MLX talk |
| Telegram / Discord / Slack | Wanneer je je agent in een groep of bestaande chat-context wilt; veilig (officiële Bot APIs) |
| Alleen met tweede nummer. Zie ban-risico bij Deel 3 | |
| Control Panel (web) | Admin, monitoring, sessie-inspectie, configuratie via UI |
| CLI | Setup, scripting, power-user workflows, headless servers |
| TUI | SSH-sessies, terminal-gebruikers die geen native app installeren |
Terminal UI (TUI)
openclaw tui
Volwaardige chat-interface in de terminal. Handig voor SSH-sessies.
Control Panel (web)
openclaw dashboard
# Of navigeer naar http://127.0.0.1:18789/
Web-interface gebouwd met Lit web components. Toont kanaalstatus, sessies, configuratie, logs.
Deel 16: CLI-referentie (de belangrijkste commando’s)
Dagelijks gebruik
openclaw status # Snelle health check
openclaw status --all # Volledig overzicht
openclaw status --deep # Met verbindingstests
openclaw doctor # Diagnose + fixes
openclaw doctor --fix # Automatisch repareren
openclaw logs --follow # Logs volgen (live)
Gateway
openclaw gateway start # Starten
openclaw gateway stop # Stoppen
openclaw gateway restart # Herstarten
openclaw gateway run # Op voorgrond draaien (debug)
openclaw gateway install # Als service installeren
openclaw gateway status # Service-status
Configuratie
openclaw config get <pad> # Waarde opvragen
openclaw config set <pad> <waarde> # Waarde instellen
openclaw config validate # Config valideren
openclaw configure # Interactieve wizard
Berichten
openclaw message send --target "+31612345678" --message "Hallo"
openclaw agent --message "Wat is de tijd?" --deliver
openclaw agent --message "code" --thinking high --local
Updaten
openclaw update # Naar nieuwste versie
openclaw update status # Huidige versie + beschikbare update
openclaw update --channel beta # Naar beta-kanaal
Deel 17: Configuratie-overzicht
Wat hot-reloadt en wat niet
| Wijziging | Hot reload? |
|---|---|
| Kanalen, agents, models, tools, skills, hooks, cron | Ja |
gateway.* (poort, bind, auth) |
Nee — herstart nodig |
| Plugins, infrastructure | Nee — herstart nodig |
Config-bestand structuur
{
// Gateway: netwerk, auth, TLS
gateway: { bind: "loopback", port: 18789, auth: { ... } },
// Agents: modellen, workspace, heartbeat, sessies
agents: { defaults: { ... }, list: [ ... ] },
// Kanalen: WhatsApp, Telegram, Discord, etc.
channels: { whatsapp: { ... }, telegram: { ... } },
// Routing: welke agent bedient welk kanaal
bindings: [ ... ],
// Tools: welke tools de agent mag gebruiken
tools: { profile: "messaging", deny: [ ... ] },
// Skills: welke skills actief zijn
skills: { entries: { ... } },
// Cron: geplande taken
cron: { enabled: true, ... },
// Browser: automatisering
browser: { enabled: true, ... },
// Hooks: event-handlers
hooks: { enabled: true, ... },
// Sessies: scope, reset, threads, compaction checkpoints
session: { dmScope: "per-channel-peer", ... },
sessions: {
compactionCheckpointOptions: { enabled: true, maxCheckpoints: 10 }
},
// Models: provider config, discovery
models: { providers: { ... } },
// Memory: vector search, embeddings
// (in agents.defaults.memorySearch)
// Environment variables
env: { vars: { ... } },
// $include: config opsplitsen in bestanden
agents: { $include: "./agents.json5" },
}
Environment variabelen in config
{
gateway: {
auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }
}
}
Escape letterlijke ${} met $${}.
Deel 18: Troubleshooting
Gateway start niet
lsof -i :18789 # Poort al in gebruik?
openclaw doctor # Automatische diagnose
openclaw config validate # Config-fouten?
Kanaal reageert niet
openclaw channels status --probe
openclaw logs --follow # Zoek naar error-berichten
WhatsApp-koppeling verlopen
openclaw channels login # Scan opnieuw de QR-code
Model niet gevonden
openclaw models list # Welke modellen beschikbaar?
openclaw models status # Auth-status per provider
Sessie loopt vast
openclaw gateway restart
# Of specifiek:
openclaw sessions # Bekijk actieve sessies
Geheugen zoekt niet
openclaw memory status # Is de index opgebouwd?
openclaw memory index # Herindexeer
Alles faalt
openclaw doctor --fix # Automatische reparatie
openclaw security audit --fix
openclaw gateway restart
Deel 19: Updaten en onderhoud
Bijwerken
openclaw update
Dit commando haalt de nieuwste versie op, installeert die, checkt config-compatibiliteit, en herstart de gateway.
Update-kanalen
| Kanaal | Beschrijving |
|---|---|
stable |
Getagde releases (aanbevolen) |
beta |
Pre-releases — nieuwe features eerder testen |
dev |
main branch — voor ontwikkelaars |
openclaw update --channel beta
openclaw update status
Rollback
npm i -g openclaw@2026.3.11 # Pin naar specifieke versie
openclaw gateway restart
Backup
openclaw backup create
Deel 20: Verder leren
De vicboomer architectuurdocumenten
Deze documenten geven de technische diepgang achter alles wat je hierboven hebt geleerd:
| # | Onderwerp | Wanneer lezen? |
|---|---|---|
| 01 | Wat is OpenClaw | Als je het grote plaatje wilt |
| 02 | Architectuur overzicht | Om te begrijpen hoe de lagen samenwerken |
| 03 | Message flow | Hoe een bericht van kanaal naar antwoord reist |
| 04 | Gateway diepgang | WebSocket protocol, HTTP API, RPC |
| 05 | Agent systeem | LLM-orchestratie, tools, model selectie |
| 06 | Kanalen en plugins | Channel plugin-abstractie, uitbreidbaarheid |
| 07 | Configuratie | Alle config-opties in detail |
| 08 | Skills en tools | Skill-systeem, tool dispatch, frontmatter |
| 09 | Memory en sessions | Sessie-opslag, vector search, temporal decay |
| 10 | Security model | Auth, sandboxing, prompt injection defense |
| 11 | CLI en UI | Alle commando’s, TUI, Control Panel |
| 12 | Build en development | Monorepo, tests, CI/CD |
| 13 | Heartbeat, soul en memory | Proactieve taken, persoonlijkheid, geheugen-lifecycle |
| 14 | LLM provider abstractie | Model discovery, fallback chains, auth profiles |
| 15 | Media pipeline | Beeldverwerking, audio, SSRF-bescherming |
| 16 | Browser automatisering | Playwright, CDP, ARIA snapshots |
| 17 | Event hooks | Hook architectuur, Gmail watcher |
| 18 | Message routing | Route resolution, session keys |
| 19 | Cron en taken | Scheduling, delivery, error handling |
| 20 | Onboarding wizard | Setup flow, provider auth |
| 21 | Native apps, canvas en TUI | macOS/iOS/Android, terminal UI |
| 22 | Control Plane (ACP) | Sessie-orchestratie, runtime cache |
| 23 | Media understanding | Vision, audio transcriptie, video-analyse |
| 24 | Daemon management | Gateway als service (launchd/systemd) |
Online bronnen
- Officiële docs: docs.openclaw.ai
- Security: docs.openclaw.ai/gateway/security
- Discord community: discord.gg/clawd
Snapshot van OpenClaw v2026.5.22, mei 2026. Actuele canonieke documentatie: docs.openclaw.ai.