Hoe je je persoonlijke AI-assistent stap voor stap bouwt met Claude Code, MCP en een Telegram-bot (tutorial 2026)
Door het team van Kiwop · Digital Agency gespecialiseerd in Softwareontwikkeling en toegepaste Kunstmatige Intelligentie voor wereldwijde klanten in Europa en de VS · Gepubliceerd op 19 april 2026 · Laatst bijgewerkt: 19 april 2026
TL;DR — Stap-voor-stap tutorial om je persoonlijke AI-assistent op te zetten op Claude Code MCP als basisstack: vier kanalen (IMAP, Gmail, Slack, Telegram), automatische briefings om 08:00 en 19:00, bidirectionele bot en slash-commando's. Ongeveer 500 regels Python, nul betaalde afhankelijkheden bovenop het Claude Max x20-abonnement. Volledige setup in 60-90 minuten door de stappen te volgen.

Dit is het tweede artikel in de serie over de PA van Kiwop. Het eerste, Van OpenClaw naar PA met Claude Code en MCP, legt uit waarom we hem bouwden na de beleidswijziging van Anthropic op 4 april 2026. Deze tutorial laat zien hoe we hem hebben gebouwd, met de echte code die we al twee weken in productie hebben. Aan het einde heb je een functionele persoonlijke AI-assistent op je machine, met dezelfde architectuur die we dagelijks gebruiken in het agency. De referentie-repository staat op https://github.com/purroy/majordomo.
Het is geen speelgoeddemo. Hij verwerkt productie-e-mail, echte agenda, Telegram-berichten vanaf de mobiel en briefings die om 08:00 en 19:00 landen zonder menselijke interventie. De filosofie is bewust minimalistisch: elk onderdeel doet één ding, de lijm tussen onderdelen is Unix en secrets raken nooit de schijf in plaintext.
Wat je gaat bouwen
Aan het einde van de tutorial heeft jouw PA vier operationele kanalen en een bewust eenvoudige architectuur.
De vier actieve kanalen van de PA zijn:
- Eigen IMAP/SMTP-mail: voor de zakelijke mailbox van je domein (
mail.jouwbedrijf.com), gelezen met Python-scripts op de standaardbibliotheek van Python. Lezen, triage, opstellen en verzenden met expliciete bevestiging. - Google Workspace (Gmail + Calendar + Drive): via de officiële MCP servers — je kunt andere soortgelijke toevoegen zoals Outlook/Microsoft 365 als je organisatie dat gebruikt.
- Slack: DM's en vermeldingen, via de officiële Slack MCP server voor Claude.
- Telegram: een bidirectionele bot die tegelijk uitgaand kanaal (briefings) en inkomend kanaal is (je praat met de PA vanaf de mobiel).
De technische stack bestaat uit vier lagen. Claude Code als conversationele motor. MCP-connectoren voor alles met een officiële server (Google + Slack). Eigen Python-scripts voor de gaten die MCP niet dekt (IMAP en Telegram). En launchd (op macOS) of systemd/Task Scheduler (op Linux/Windows) voor opstart en geplande triggers.
De werkelijke marginale kosten zijn nul bovenop het Claude Max x20-abonnement dat je al betaalt voor ontwikkeling. De ~500 regels Python zijn van jou — geen installeerbare afhankelijkheden, alleen standaardbibliotheek. Geen backend, geen database, geen Docker. Alle persistente state leeft in lokale bestanden en in de sleutelbos van het besturingssysteem.
Op hoog niveau volgt de architectuur drie principes die het waard zijn om expliciet te maken voordat we in de code duiken. Het eerste is dat Claude Code de motor is maar niet de eigenaar van de state: je prompts staan in versieerbare Markdown-bestanden in je eigen repository, je secrets in de sleutelbos van het systeem, je briefings zijn bestanden op schijf. Als je morgen van motor zou willen wisselen, hoef je alleen de oproepen aan claude --print te vervangen door een andere equivalente CLI. Het tweede is dat MCP het zware werk doet wanneer er een officiële server bestaat (Google, Slack) en je alleen code schrijft wanneer die er niet is (IMAP, Telegram). Het derde is dat de beveiliging in drie onafhankelijke lagen leeft — OAuth van de MCP, macOS Keychain en bevestigingsregel in prompts — zodat het compromitteren van één laag het systeem niet compromitteert.
Vereisten en werkelijke kosten
Controleer voordat je begint of je hebt wat nodig is. De tutorial gaat uit van macOS omdat dat is wat wij gebruiken, maar er is een sectie aan het einde over hoe je het naar Linux of Windows overzet.
Account- en abonnementsvereisten:
- Claude Max x20 van Anthropic: het abonnement "for power users", ongeveer 200 USD/maand. Claude Code is inbegrepen en is de motor van de PA.
- Google Workspace-account met rechten om Gmail, Calendar en Drive te autoriseren via OAuth.
- Slack-workspace waar je een account hebt (je hoeft geen admin te zijn voor de MCP om je eigen DM's en vermeldingen te lezen).
- Een maildomein op IMAP als je hoofdmailbox geen Gmail is (optioneel — als al je mail Gmail is, sla stap 3 over).
- Telegram-account (gratis) om de bot aan te maken via
@BotFather.
Systeemvereisten:
- macOS 14+ met Homebrew geïnstalleerd (voor de basisflow van de tutorial).
- Python 3.11+ (komt met recente macOS mee; anders
brew install [email protected]). - Claude Code CLI geïnstalleerd:
npm i -g @anthropic-ai/claude-codeof viabrew. - Terminal met Full Disk Access-rechten als je wilt dat
launchdde briefings kan draaien zonder herhaald om toestemming te vragen.
Geprojecteerde maandelijkse kosten, eerlijke uitsplitsing:
Het belangrijkste punt: de marginale kosten van de PA zijn nul als je al Claude Max hebt. Als je het niet hebt en je het alleen zou kopen voor de PA, verandert de berekening — dan moet je afwegen of de tijdsbesparing de 200 USD/maand waard is. Voor iedereen die Claude Code al gebruikt in ontwikkeling, is het antwoord meestal triviaal ja.
De geschatte tijd om de tutorial vanaf nul te voltooien, inclusief de OAuth's en de onvermijdelijke debug, is 60 tot 90 minuten. Als je alleen de eerste drie kanalen wilt (zonder Telegram of geplande briefings), zak je naar 30-40 minuten.
Stap 1: basisstructuur van het project
De PA leeft in een eigen directory buiten elk ander project. De eerste beslissing is waar je hem plaatst. Wij gebruiken ~/Dev/PA uit gewoonte — vervang als je een ander pad verkiest. De volledige referentie-repository staat op https://github.com/purroy/majordomo — gebruik hem als je verdwaalt in een van de stappen.
De .gitignore moet alles met persoonlijke gegevens uitsluiten — briefings, e-mail drafts, bot state:
Nu het belangrijkste bestand van de repository: CLAUDE.md. Het definieert de persona van de assistent, de standaardtaal en de bevestigingsregel die het hart vormt van de beveiliging van de PA.
De bevestigingsregel is niet onderhandelbaar. Hij is het verschil tussen een PA die je in handen van een taalmodel kunt laten en een die je een gênante e-mail gaat sturen wanneer hij een "ja" van twee beurten geleden verkeerd interpreteert. We hebben hem heel maart getest zonder één enkele false positive.
Initiële commit:
Stap 2: MCP servers verbinden
MCP ([Model Context Protocol](https://modelcontextprotocol.io/specification/2025-11-25)) is de open standaard die Anthropic eind 2024 publiceerde zodat taalmodellen op een uniforme manier verbinding kunnen maken met externe tools. Een MCP server is een proces dat een set functies (e-mails lezen, bestanden zoeken, berichten verzenden) blootstelt via een gemeenschappelijk protocol; een MCP client (zoals Claude Code) start hem op en consumeert die functies alsof het eigen tools zijn. Als je dieper wilt ingaan op waarom MCP het onderdeel is dat AI-agenten ontgrendelt in 2026, hebben we een bredere analyse in WebMCP: jouw website klaar voor AI-agenten.
Voor de PA activeren we vier officiële MCP servers, alle vier gepubliceerd door Anthropic/Claude of door de providers zelf:
- Gmail MCP: lezen, zoeken en opstellen van e-mails.
- Google Calendar MCP: agenda, aanmaken en wijzigen van evenementen.
- Google Drive MCP: zoeken en lezen van bestanden.
- Slack MCP: lezen van DM's, kanalen en verzenden met bevestiging.
De eenvoudigste manier om ze te configureren is via de interface van Claude Code. Vanuit de root van het project (~/Dev/PA), start:
Binnen de interactieve sessie van Claude Code voeg je de MCP servers toe met het commando /mcp add voor elk. Het commando start de bijbehorende OAuth-flow in de browser — autoriseer met het account waarvan je wilt dat de PA het gebruikt, niet noodzakelijkerwijs je persoonlijke hoofdaccount.
Beveiliging van de OAuth-flow. Een belangrijk aspect: de officiële MCP servers gebruiken browser-OAuth, geen credentials op schijf. Je refresh_token wordt bewaard door de MCP server in zijn eigen versleutelde opslag, niet door de PA. Dat betekent dat als iemand je .claude/ of je repository steelt, hij geen toegang tot je Gmail meesleept — hij zou ook de opslag van de MCP server moeten compromitteren en uiteindelijk je macOS Keychain. Het aanvalsoppervlak blijft afgebakend.
Eenmaal alle vier geautoriseerd, controleer of Claude Code ze detecteert:
Je zou de beschikbare tools per service gegroepeerd moeten zien: mcp__claude_ai_Gmail__search, mcp__claude_ai_Google_Calendar__list_events, enzovoort. De naamgeving volgt het patroon mcp__<server>__<tool>.

Op dit punt kun je de PA al vragen "wat heb ik vandaag in de agenda?" of "zoek in Drive het contract met klant X" en het werkt. Wat ontbreekt zijn de twee kanalen die MCP niet goed dekt: de zakelijke IMAP-mail en Telegram.
Stap 3: Python-scripts voor IMAP en Keychain
Als al je mail in Gmail staat, is deze stap optioneel. Als, zoals bij ons, de hoofdmailbox op een eigen IMAP-server draait (mail.kiwop.com in ons geval), moet je de brug schrijven.
De architectuur van de scripts is bewust klein. Een intern _mail.py-module met de gemeenschappelijke logica (IMAP-verbinding, parsing, SMTP), en drie minimale commando's die de PA kan aanroepen:
mail_fetch.py: lijst recente of ongelezen UID's als JSON.mail_read.py: leest het volledige body van een UID (zonder als gelezen te markeren — gebruikBODY.PEEK).mail_send.py: verstuurt een mail of slaat hem op als concept.
Gouden regel over credentials. Bewaar het IMAP-wachtwoord nooit in een bestand in de repo of in een persistente omgevingsvariabele zoals ~/.zshrc. Het risico is niet theoretisch: elke keer dat je een script deelt, een commit doet met getrackte .env, of een VS Code-extensie installeert die je omgeving leest, stel je secrets bloot. Op macOS hebben we Keychain, een versleutelde sleutelbos van het besturingssysteem toegankelijk via het security-commando. De scripts lezen de credential on-the-fly wanneer ze die nodig hebben en schrijven hem nooit naar schijf.
Sla eerst de credentials op in Keychain:
Gebruikelijke poorten: 993 voor IMAP over SSL en 587 voor SMTP met STARTTLS. Als je provider impliciete SMTPS gebruikt, wissel naar 465.
Nu de shell-helper die leest en schrijft in Keychain. We noemen hem scripts/keychain.sh:
De Python-variant gebruikt subprocess om security aan te roepen:
De fallback naar omgevingsvariabele is bewust: wanneer je dit porteert naar Linux (systemd), bestaat security daar niet en gebruik je env vars geëxporteerd vanuit het unit-bestand, gelezen uit een bestand met permissies 600.
Met Keychain aangesloten wordt mail_fetch.py duidelijk. Het is een CLI die JSON afdrukt zodat Claude Code het gemakkelijk kan parsen:
mail_send.py voegt een belangrijke veiligheidsklep toe: zonder de --yes-flag wordt het bericht opgeslagen als .eml in drafts/ en niet verzonden. Alleen met expliciete --yes gaat het via SMTP naar buiten. Dit past de bevestigingsregel van CLAUDE.md toe op codeniveau, niet alleen op promptniveau — zelfs als het model de regel zou overslaan, zou het script niets versturen.
Kritisch detail over `BODY.PEEK`. Wanneer de PA een mail "leest" om hem te triëren, mag hij hem niet als gelezen markeren. Als je hem markeert, verlies je je bak met openstaande items als visueel signaal in de mailclient. De IMAP-vlag die \Seen zet is BODY[]; de vlag die hem niet zet is BODY.PEEK[]. Gebruik die altijd in mail_read.py.
Stap 4: Telegram-bot met persistente sessie
De Telegram-bot is het interessantste onderdeel van de PA omdat het de flow omkeert: in plaats van dat jij een terminal opent en naar Claude schrijft, ontvangt Claude jouw berichten vanaf de mobiel.
Het plan: een Python-daemon die long polling doet tegen de Telegram API (zonder publieke webhook nodig), en elk bericht dat hij ontvangt stuurt hij door naar claude --print met een sessie die binnen de repository van de PA wordt uitgevoerd. Claude voert de prompt uit met al zijn tools (MCP + Python-scripts) en geeft het antwoord terug. De daemon formatteert het voor Telegram en stuurt het terug naar de chat.
De bot aanmaken duurt twee minuten. Open Telegram, praat met @BotFather, start /newbot, geef hem een naam en een username. Hij geeft je een token terug van het type 123456:ABC-XYZ_.... Bewaar hem in Keychain en detecteer vervolgens je chat_id (het ID van het 1-op-1-gesprek tussen jou en de bot):
Nu de daemon. Het skelet van telegram_bot.py is dit:
Drie niet-voor-de-hand-liggende details van het ontwerp.
Ten eerste, `chat_id`-whitelist: de variabele allowed_chat is je eigen chat en elk bericht van een andere chat_id wordt stil weggegooid. Als iemand de username van je bot ontdekt en hem berichten stuurt, antwoordt hij niet. Het is de simpelste maar meest effectieve barrière tegen misbruik.
Ten tweede, `--permission-mode bypassPermissions`: de daemon draait zonder om bevestiging te vragen om scripts uit de repo uit te voeren omdat er geen mens voor staat die kan antwoorden. De beveiliging komt niet van de Claude Code-prompts, maar van (a) de daemon antwoordt alleen de whitelisted chat_id, (b) de PA heeft de bevestigingsregel in CLAUDE.md, en (c) gevoelige scripts zoals mail_send.py vereisen --yes op codeniveau.
Ten derde, vluchtige sessies per bericht. Elke ask_claude genereert een nieuwe session-id met uuid.uuid4(). Dat betekent dat de bot geen gespreksgeheugen tussen berichten behoudt — elke aanvraag vertrekt vanaf nul met je CLAUDE.md en je geladen commando's. Het "lange" geheugen (je voorkeuren, handtekening, prioritaire contacten) leeft in memory/ als bestanden die Claude leest bij het starten van elke sessie, niet in de sessie zelf. Dit voorkomt verouderde context en maakt het gedrag zeer voorspelbaar.
Markdown compatibel met Telegram. Telegram rendert geen Markdown in GitHub-stijl (snapt geen tabellen, begrijpt geen links met haken in veel contexten, interpreteert bepaalde tekens verkeerd). In plaats van te vechten met parse_mode: MarkdownV2 — wat je dwingt alle speciale tekens te escapen en makkelijk breekt — gebruiken we een kleine converter naar leesbare platte tekst (md_to_telegram.py) die de Markdown-syntax verwijdert terwijl de structuur behouden blijft.
Om het te testen vóór launchd:
Open Telegram, schrijf /ping naar je bot. Hij zou pong moeten antwoorden. Stuur vervolgens "hoe laat is het?" — hij zou de huidige tijd moeten antwoorden door het systeem te raadplegen via een Claude-sessie. Gefeliciteerd: je hebt nu een PA die toegankelijk is vanaf de mobiel.

Stap 5: geplande briefings met launchd
[`launchd`](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html) is de proces- en scheduler-manager van macOS. Het is het equivalent van cron + systemd gecombineerd in één systeem. Elke taak wordt gedefinieerd in een XML-bestand (.plist) dat macOS vertelt wat hij moet uitvoeren, wanneer en wat te doen als het mislukt.
We maken drie launchd jobs:
- Telegram-bot als permanente daemon (
KeepAlive: true). - Ochtendbriefing elke dag om 08:00.
- Avondbriefing elke dag om 19:00.
Eerst de wrapper scripts/run_briefing.sh die Claude Code in niet-interactieve modus start om de briefing te genereren:
Nu de .plist van de ochtendbriefing. Sla hem op in scripts/launchd/com.kiwop.pa-briefing-morning.plist:
Belangrijke sleutel: het expliciete `PATH` in EnvironmentVariables. launchd erft jouw PATH niet over van de shell, dus als je het niet meegeeft, is claude niet beschikbaar en zal de briefing stilletjes falen. Neem /opt/homebrew/bin op (Apple Silicon), /usr/local/bin (Intel) en ~/.local/bin (als je Claude Code installeerde via pip --user).
Dupliceer het bestand voor de avondversie door morning te vervangen door evening en het uur naar 19 te zetten. En maak die van de Telegram-bot:
Het trio RunAtLoad: true + KeepAlive: true + ThrottleInterval: 15 betekent: start bij sessiestart, herstart als hij valt, en probeer niet sneller te herstarten dan elke 15 seconden (om faalloops te voorkomen).
Om de drie .plist-bestanden te activeren:
Om te controleren of ze actief zijn:
Je zou de drie entries moeten zien met PID (voor de bot die continu draait) of met - (voor de briefings die alleen op hun uren draaien).

Om een briefing handmatig te triggeren zonder te wachten tot 08:00 (handig voor testen):
Stap 6: slash-commando's /morning, /evening, /inbox, /reply
De slash-commando's van Claude Code leven in .claude/commands/ als Markdown-bestanden. Elk bestand is een prompt template die Claude uitvoert wanneer je /naam aanroept in de sessie. Ze zijn de schoonste manier om repetitieve flows in te kapselen zonder elke keer dezelfde lange prompt te herhalen.
Voor de PA definiëren we vier minimale commando's: /morning, /evening, /inbox, /reply. Dit is het voorbeeld van .claude/commands/morning.md:
Buenos días — <fecha>
Agenda de hoy
- HH:MM–HH:MM · Título · (lugar / asistentes)
Correo (N no leídos)
🔥 Fuego: [UID] Remitente — Asunto · contexto ⚠ Importante: [UID] ... Para revisar: [UID] ... Ruido: N items
Slack
🔥 ... ⚠ ...
Prioridades sugeridas
- ...
- ...
- ...
Het commando /reply is bijzonder belangrijk omdat het de bevestigingsregel toepast:
Let op het patroon: het commando handhaaft de bevestigingsregel op promptniveau (stap 5), en het script handhaaft de regel op uitvoeringsniveau (de verplichte --yes in mail_send.py). Dubbele laag. Als het model stap 5 "vergeet", verstuurt het script niet. Als iemand het script aanpast om --yes over te slaan, vereist de prompt nog steeds bevestiging. Het is dezelfde defense-in-depth-filosofie die we aanbevelen in projecten van LLM-integratie voor elke actie met onomkeerbare effecten.
De vier basiscommando's zijn voldoende voor 90% van het dagelijks gebruik. Je kunt er meer toevoegen: /schedule (vergaderingen aanmaken), /book (plannen vanuit een uitnodiging), /auth (diagnostiek van de status van de MCP's).

Stap 7: setup end-to-end testen
Met alles opgezet is het tijd voor een volledige testronde voordat je het functioneel verklaart. Dit is de checklist die we bij Kiwop gebruiken telkens wanneer we de setup op een andere machine repliceren:
1. MCP's geauthentiseerd. In een Claude Code-sessie vanuit ~/Dev/PA:
De vier servers moeten verschijnen met beschikbare tools. Als er één zegt "not authenticated", herhaal de OAuth.
2. Functionele IMAP-mail. Vanuit terminal:
Zou een JSON moeten teruggeven met je drie meest recente ongelezen mails. Als het faalt met imaplib.IMAP4.error, controleer Keychain en poorten.
3. Handmatige briefing. Vanuit interactieve Claude Code-sessie:
Genereert een volledige briefing. Zou niet langer dan 60 seconden mogen duren.
4. Bidirectionele Telegram-bot. Vanuit Telegram, naar je bot:
/ping→pong(onmiddellijk)- "wat heb ik vandaag in de agenda?" → antwoord met de echte agenda (30-40 seconden)
5. Launchd-logs zonder fouten.
De telegram_bot.err.log moet een regel "Bot up. Allowed chat=..." bevatten. Als er een FATAL: secret read failed staat, controleer of Keychain de items PA-telegram-bot-token en PA-telegram-chat-id heeft.
6. Koude test van de geplande briefing.
Moet de briefing van de dag hebben gegenereerd en een kopie naar je Telegram hebben gestuurd. Als Telegram niet ontvangt, controleer de PA-telegram-*-credentials in Keychain.
Veelvoorkomende problemen en hoe ze te diagnosticeren:
Zodra de zes punten van de checklist slagen, is de PA klaar voor dagelijks gebruik. Vanaf hier is alles verfijning: memory/ toevoegen met je stijlvoorkeuren, meer slash-commando's toevoegen naarmate je repetitieve flows ontdekt, de prompts van morning.md en evening.md afstellen op de exacte output die het nuttigst voor je is.
Praktisch advies voor de eerste zeven dagen. Nadat je het hebt opgezet, gaat de PA suboptimale dingen doen totdat je ontdekt wat hij mist aan context over jou. Wij raden aan de eerste week in "alleen-lezen"-modus te beginnen: laat hem briefings genereren, laat hem inbox triëren, maar gebruik nog geen /reply en bevestig geen schrijfacties. Tijdens die week zul je patronen ontdekken die gecorrigeerd moeten worden — "hij classificeert de mails van deze klant verkeerd omdat hij niet weet dat het VIP is", "hij vat korte Slack-berichten te veel samen", "hij markeert als ruis wat voor mij belangrijk is". Al die correcties gaan naar memory/triage_rules.md en naar CLAUDE.md. Vanaf dag zeven of acht, wanneer de triage consistent is op 85-90%, kun je het schrijfgebruik openstellen met /reply en echt tijd winnen. Deze kalibratiefase overslaan is de meest gemaakte fout en de belangrijkste oorzaak van afhaken in onze steekproef van mensen die we hebben geholpen het op te zetten.
Varianten en schaalvergroting: Linux, Windows, en 24/7 draaien
De tutorial is geschreven voor macOS omdat dat is waar we werken, maar de architectuur is overdraagbaar. De vier belangrijkste aanpassingen:
Procesmanager.
Een systemd-unit voor de Telegram-bot op Linux zou er ongeveer zo uitzien (~/.config/systemd/user/pa-telegram.service):
Activatie: systemctl --user daemon-reload && systemctl --user enable --now pa-telegram.service.
Secrets opslag.
De fallback naar omgevingsvariabelen in een bestand met permissies 600 werkt op alle drie de platforms en is de gemene deler als je één codebase voor alle systemen wilt.
launchd vs systemd, eerlijke vergelijking:
Hem 24/7 op een externe server draaien? Het is haalbaar en we hebben het getest. Het patroon: een kleine Linux-VPS met systemd die de Telegram-bot en de geplande briefings draait, plus een IMAP/SMTP-verbinding naar de mailbox, plus de Claude Code CLI geauthentiseerd met je Anthropic-account. Voordelen: de PA antwoordt zelfs als je laptop uitstaat. Nadelen: de OAuth van de MCP servers is delicater zonder lokale browser (je moet de initiële flow op je machine doen en het refresh token kopiëren), en elke update van de Claude Code CLI vereist SSH en deployment. Voor de meeste professionals die hun Mac dagelijks gebruiken, hem lokaal houden is de optie met de beste verhouding tussen eenvoud en nut.
De sprong naar een multi-user PA (een die een team bedient) is geen variant van dezelfde tutorial — het is een SaaS en vereist zeer andere architecturale beslissingen (multi-tenancy, authenticatie, sessieisolatie). Als je die route wilt verkennen, behandelen we het in de projecten van ontwikkeling van AI-agenten op maat.
Twee uitbreidingen die we in de praktijk zagen werken wanneer de basis-PA al stabiel is. De eerste is een memory/ gevuld met Markdown-bestanden die Claude in elke sessie laadt: een triage_rules.md met je exacte criteria om mail te classificeren, een writing_style.md met voorbeelden van door jou geschreven e-mails zodat de concepten als jouw stem klinken, een vip_contacts.md met de adressen die nooit in "ruis" mogen vallen. De tweede is een watcher van mail op de achtergrond (een daemon vergelijkbaar met de Telegram-bot, maar die in plaats van Telegram naar je IMAP-bak luistert) die een notificatie triggert wanneer er een mail binnenkomt die volgens jouw regels als vuur is gemarkeerd — nuttig voor flows waar de briefing van 08:00 niet genoeg is. Beide uitbreidingen zijn gebouwd met dezelfde filosofie als de rest: korte scripts, secrets in Keychain, efemere Claude Code-sessies.
Veelgestelde vragen
Hoeveel kost het echt om deze PA te bouwen?
Als je al Claude Max x20 hebt (ongeveer 200 USD/maand), zijn de marginale kosten van de PA nul. De MCP servers zijn gratis, de Telegram-bot draait op je Mac zonder hosting, en de Python-scripts vereisen geen betaalde afhankelijkheden. Als je Claude Max niet hebt, verandert de berekening: de 200 USD/maand is de vaste investering. De bouwtijd volgens deze tutorial is 60-90 minuten.
Is het veilig om een zo gebouwde PA toegang te geven tot mijn mail en agenda?
Ja, onder de volgende expliciete voorwaarden. Ten eerste, de officiële MCP servers authentiseren via OAuth zonder je wachtwoord op schijf op te slaan — het token leeft in een versleutelde opslag van de MCP server zelf. Ten tweede, de IMAP/SMTP-credentials staan in macOS Keychain (sleutelbos van het besturingssysteem, versleuteld), nooit in platte bestanden. Ten derde, de Telegram-bot antwoordt alleen de whitelisted chat_id en de verplichte bevestigingsregel in CLAUDE.md voorkomt schrijfacties zonder expliciete "ja". Het aanvalsoppervlak blijft sterk afgebakend, vergelijkbaar met dat van elke desktop-mailclient.
Hoe zit het met de privacy van de gegevens? Traint Anthropic met mijn mails?
Anthropic verklaart publiekelijk (beleid per 2026) dat de gegevens verzonden via API en via Claude Code niet worden gebruikt om modellen te trainen. Voor gereguleerde inhoud (gezondheidszorg, juridisch met beroepsgeheim, financieel vertrouwelijk) is het aan te raden de specifieke geldende voorwaarden te bekijken en te overwegen of een PA op eigen infrastructuur geschikter is — in welk geval een oplossing van enterprise RAG het juiste alternatief kan zijn.
Kan WhatsApp in deze PA worden geïntegreerd?
Per april 2026 bestaat er geen officiële WhatsApp MCP. Er zijn niet-officiële bridges (Matrix, Beeper, de eigen WhatsApp Business Cloud API van Meta) die als extra kanaal kunnen worden aangesloten, maar alle hebben caveats: niet-officiële bridges kunnen Meta's ToS overtreden en instabiel zijn, en de Business Cloud API vereist een geverifieerd commercieel account. Onze pragmatische aanbeveling is Telegram als primair mobiel kanaal te gebruiken.
Kan deze PA meerdere gebruikers bedienen?
Nee, naar ontwerp. Een PA is single-user: zijn credentials, zijn geheugen, zijn voorkeuren en zijn CLAUDE.md wijzen naar één enkele persoon. Voor multi-user scenario's (een team dat een gemeenschappelijke assistent deelt) is de juiste architectuur een multi-tenant SaaS met data-isolatie per gebruiker — geen kopie van de PA met gedeelde variabelen. Het is een totaal ander gesprek.
Werkt het zonder internetverbinding?
Nee. Claude Code vereist verbinding om het model te raadplegen, de MCP servers gebruiken online API's (Google, Slack, Telegram), en IMAP/SMTP uiteraard ook. De hier beschreven PA is een client die cloud-diensten orkestreert — geen lokaal model. Als je offline werking nodig hebt, is het een volledig herontwerp met een lokaal LLM (Llama, Mistral) draaiend op ollama of vergelijkbaar, met aanzienlijke beperkingen in kwaliteit en prestaties.
Hoe lang duurt het voordat de PA zijn eerste ochtendbriefing geeft?
De volledige run_briefing.sh duurt tussen 40 en 90 seconden afhankelijk van hoeveel mail je moet triëren. Het traagste deel is de IMAP-fetch met --with-body (één verbinding per UID), gevolgd door de redenering van het model over de triage. Als je inbox heel groot is (>50 ongelezen), kan het oplopen tot 2-3 minuten. Als het de eerste uitvoering is en de Calendar-MCP nog aan het opwarmen is, voeg 5-10 seconden extra toe.
Kan ik hem personaliseren voor mijn specifieke flow?
Ja, en dat is de filosofie van het project. De sleutelbestanden om aan te raken: CLAUDE.md (persona, toon, regels), .claude/commands/*.md (concrete flows), memory/ (persistente voorkeuren, handtekening, VIP-contacten, triage-regels). De Python-code hoef je zelden aan te raken behalve om extra IMAP-accounts toe te voegen of een nieuw kanaal te integreren. Begin met werkende basissetup voordat je personaliseert — het is goedkoper om te leren waar te personaliseren wanneer je al ziet wat te veel en wat te weinig is.
Conclusie: 60 minuten tussen jou en je eerste operationele PA
We gebruiken deze PA al twee weken bij Kiwop en de meest eerlijke conclusie die we kunnen opschrijven is dat de werkelijke productiviteitssprong niet van het model komt — hij komt van het minimalistische ontwerp rond het model. Claude Code, Opus 4.7, de MCP servers: dat is het dure deel dat je niet bouwt. De ~500 regels Python, het handvol Markdown-bestanden, de drie launchd-.plist-bestanden — dat is wat jij doet, en dat is wat de capaciteiten van het model omzet in een nuttige assistent voor jouw dag.
Deze tutorial heeft het volledige pad afgelegd van een lege directory tot een operationele PA met vier kanalen en geplande briefings. De referentiecode die we hebben gebruikt is gepubliceerd op https://github.com/purroy/majordomo onder een permissieve licentie — kloon, fork, pas aan. Het is niet de enige manier om een PA te bouwen in 2026, maar het is er een waarvan we weten dat hij werkt omdat we hem elke ochtend om 08:00 gebruiken voordat we de werk-Mac aanzetten.
Als je tijdens het volgen van de tutorial een gat hebt ontdekt waar jouw specifieke geval meer nodig heeft dan deze basisstack — op maat gemaakte integraties met je CRM, een Teams-kanaal, een eigen MCP voor je ERP, of direct een multi-user assistent voor je hele team — bij Kiwop bouwen we die onderdelen als onderdeel van onze diensten voor ontwikkeling van AI-agenten en AI-consultancy. Ons vertrekpunt is altijd hetzelfde: dunne, ontkoppelde lagen, agnostisch ten opzichte van de provider. Er is niets in deze tutorial dat je zelf niet op een middag kunt repliceren, maar als tijd duurder is dan de kosten van uitbesteden, neem contact op met ons team en we doen het met je.
De PA die je nu op je Mac hebt draaien is van jou. Niemand kan hem van de ene op de andere dag afknijpen. En dat is in 2026 het meest waardevolle bezit dat een AI-agent toegepast op het dagelijkse werk kan hebben.