Een persoonlijke assistent bouwen met OpenClaw
OpenClaw is een WhatsApp + Telegram + Discord + iMessage gateway voor Pi-agents. Plugins voegen Mattermost toe. Deze gids behandelt de “persoonlijke assistent”-setup: één dedicated WhatsApp-nummer dat zich gedraagt als je always-on agent.
⚠️ Veiligheid eerst
Je geeft een agent de mogelijkheid om:
- commando’s op je machine uit te voeren (afhankelijk van je Pi-toolsetup)
- bestanden in je workspace te lezen/schrijven
- berichten terug te sturen via WhatsApp/Telegram/Discord/Mattermost (plugin)
Begin conservatief:
- Stel altijd
channels.whatsapp.allowFromin (draai nooit open-to-the-world op je persoonlijke Mac). - Gebruik een dedicated WhatsApp-nummer voor de assistent.
- Heartbeats staan nu standaard op elke 30 minuten. Schakel ze uit totdat je de setup vertrouwt door
agents.defaults.heartbeat.every: "0m"in te stellen.
Vereisten
- OpenClaw geinstalleerd en onboarded — zie Aan de slag als je dit nog niet hebt gedaan
- Een tweede telefoonnummer (SIM/eSIM/prepaid) voor de assistent
De twee-telefoon-setup (aanbevolen)
Dit is wat je wilt:
flowchart TB
A["<b>Your Phone (personal)<br></b><br>Your WhatsApp<br>+1-555-YOU"] -- message --> B["<b>Second Phone (assistant)<br></b><br>Assistant WA<br>+1-555-ASSIST"]
B -- linked via QR --> C["<b>Your Mac (openclaw)<br></b><br>Pi agent"]
Als je je persoonlijke WhatsApp aan OpenClaw koppelt, wordt elk bericht aan jou “agent-input”. Dat is zelden wat je wilt.
5 minuten snelstart
- Koppel WhatsApp Web (toont QR; scan met de assistenttelefoon):
openclaw channels login
- Start de Gateway (laat draaien):
openclaw gateway --port 18789
- Zet een minimale config in
~/.openclaw/openclaw.json:
{
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}
Stuur nu een bericht naar het assistentnummer vanaf je allowlisted telefoon.
Na afronding van onboarding opent het systeem automatisch het dashboard en toont een schone (niet-getokeniseerde) link. Als het om authenticatie vraagt, plak dan het token uit gateway.auth.token in de Control UI-instellingen. Later heropenen: openclaw dashboard.
Geef de agent een workspace (AGENTS)
OpenClaw leest bedieningsinstructies en “geheugen” vanuit de workspace-directory.
Standaard gebruikt OpenClaw ~/.openclaw/workspace als agent-workspace en maakt deze automatisch aan (plus starter-bestanden AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md) bij setup/eerste agent-run. BOOTSTRAP.md wordt alleen aangemaakt als de workspace gloednieuw is (verschijnt niet opnieuw nadat je het verwijdert). MEMORY.md is optioneel (wordt niet automatisch aangemaakt); als het er is, wordt het geladen voor normale sessies. Subagent-sessies injecteren alleen AGENTS.md en TOOLS.md.
Tip: behandel deze map als OpenClaw’s “geheugen” en maak er een git-repo van (bij voorkeur privé) zodat je AGENTS.md + geheugenbestanden geback-upt zijn. Als git geinstalleerd is, worden gloednieuwe workspaces automatisch geïnitialiseerd.
openclaw setup
Volledige workspace-indeling + back-upgids: Agent workspace Geheugenworkflow: Geheugen
Optioneel: kies een andere workspace met agents.defaults.workspace (ondersteunt ~).
{
agent: {
workspace: "~/.openclaw/workspace",
},
}
Als je al je eigen workspace-bestanden vanuit een repo levert, kun je het aanmaken van bootstrap-bestanden volledig uitschakelen:
{
agent: {
skipBootstrap: true,
},
}
De config die het een “assistent” maakt
OpenClaw staat standaard al goed ingesteld als assistent, maar meestal wil je het volgende aanpassen:
- persona/instructies in
SOUL.md - thinking-standaarden (indien gewenst)
- heartbeats (zodra je het vertrouwt)
Voorbeeld:
{
logging: { level: "info" },
agent: {
model: "anthropic/claude-opus-4-6",
workspace: "~/.openclaw/workspace",
thinkingDefault: "high",
timeoutSeconds: 1800,
// Begin met 0; schakel later in.
heartbeat: { every: "0m" },
},
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: {
"*": { requireMention: true },
},
},
},
routing: {
groupChat: {
mentionPatterns: ["@openclaw", "openclaw"],
},
},
session: {
scope: "per-sender",
resetTriggers: ["/new", "/reset"],
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 10080,
},
},
}
Sessions en geheugen
- Sessiebestanden:
~/.openclaw/agents/<agentId>/sessions/{{SessionId}}.jsonl - Sessiemetadata (tokengebruik, laatste route, etc.):
~/.openclaw/agents/<agentId>/sessions/sessions.json(legacy:~/.openclaw/sessions/sessions.json) /newof/resetstart een nieuwe sessie voor die chat (configureerbaar viaresetTriggers). Als het als los bericht wordt verstuurd, reageert de agent met een korte begroeting om de reset te bevestigen./compact [instructions]comprimeert de sessiecontext en rapporteert het resterende contextbudget.
Heartbeats (proactieve modus)
Standaard voert OpenClaw elke 30 minuten een heartbeat uit met de prompt:
Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.
Stel agents.defaults.heartbeat.every: "0m" in om uit te schakelen.
- Als
HEARTBEAT.mdbestaat maar effectief leeg is (alleen lege regels en markdown-headers zoals# Heading), slaat OpenClaw de heartbeat-run over om API-calls te besparen. - Als het bestand ontbreekt, draait de heartbeat nog steeds en beslist het model wat te doen.
- Als de agent reageert met
HEARTBEAT_OK(optioneel met korte padding; zieagents.defaults.heartbeat.ackMaxChars), onderdrukt OpenClaw de uitgaande bezorging voor die heartbeat. - Standaard is heartbeat-bezorging aan DM-stijl
user:<id>-targets toegestaan. Stelagents.defaults.heartbeat.directPolicy: "block"in om directe bezorging te onderdrukken terwijl heartbeat-runs actief blijven. - Heartbeats draaien volledige agent-turns — kortere intervallen verbranden meer tokens.
{
agent: {
heartbeat: { every: "30m" },
},
}
Media in en uit
Inkomende bijlagen (afbeeldingen/audio/documenten) kunnen via templates aan je commando worden aangeboden:
{{MediaPath}}(lokaal tijdelijk bestandspad){{MediaUrl}}(pseudo-URL){{Transcript}}(als audiotranscriptie is ingeschakeld)
Uitgaande bijlagen van de agent: zet MEDIA:<path-or-url> op een eigen regel (geen spaties). Voorbeeld:
Here's the screenshot.
MEDIA:https://example.com/screenshot.png
OpenClaw haalt deze eruit en verstuurt ze als media bij de tekst.
Beheerchecklist
openclaw status # lokale status (credentials, sessions, events in wachtrij)
openclaw status --all # volledige diagnose (alleen-lezen, plakbaar)
openclaw status --deep # voegt gateway health probes toe (Telegram + Discord)
openclaw health --json # gateway health snapshot (WS)
Logs staan onder /tmp/openclaw/ (standaard: openclaw-YYYY-MM-DD.log).
Volgende stappen
- WebChat: WebChat
- Gateway-beheer: Gateway-runbook
- Cron + wakeups: Cron-jobs
- macOS menubalk-companion: OpenClaw macOS-app
- iOS node-app: iOS-app
- Android node-app: Android-app
- Windows-status: Windows (WSL2)
- Linux-status: Linux-app
- Beveiliging: Beveiliging