Event-driven AI agents: from personal infra to professional applications
Quentin Adam • AI/Data Engineer @ Dakota Analytics • AI Tinkerers Calgary • March 26, 2026
The community adopted the crab. Then the crustacean metaphors got... out of claw. β A pinch of context for the uninitiated
The question: how much code do you need for an always-on personal AI agent?
.md files (no registry)NanoClaw: "Don't add features. Add skills." β Channels (Telegram, Slack, Discord) added via /add-telegram skills that transform your fork. Core stays tiny.
2025 was agents. 2026 is agent harnesses. β source
The system wrapping the AI model for reliable long-running tasks. (Anthropic blog)
"I haven't written a single line of code myself since December 2025. I run 10-20 AI agents in parallel." β Andrej Karpathy, March 2026
The pattern: tiny core, extensible via skills, iterate β add context, tools, and autonomy gradually.
Karpathy's AutoResearch: 630 lines. NanoClaw: ~500 lines. Same insight.
| Layer | OpenClaw | NanoClaw |
|---|---|---|
| Isolation | App-level perms | OS containers |
| Process | Shared Node.js | VM per group |
| Credentials | All env vars | 2 vars allowlisted |
| Mounts | App path checks | External allowlist |
| Skills | ClawHub (12% bad) | Auditable .md |
| Audit | ~400K lines | ~500 lines (8 min) |
if (isMain) {
mounts.push({ hostPath: projectRoot,
containerPath: '/workspace/project' });
} else {
// Non-main: ONLY their own folder
mounts.push({ hostPath: groupDir,
containerPath: '/workspace/group' });
}
// Per-group isolated sessions
mounts.push({ hostPath: groupSessionsDir,
containerPath: '/home/node/.claude' });
// Only 2 env vars exposed
const allowedVars = [
'CLAUDE_CODE_OAUTH_TOKEN',
'ANTHROPIC_API_KEY'
];
All PWAs on home screen. No app store. Just hostname:port over Tailscale.
Every service runs on hostname:port via Tailscale. No cloud. No API gateways. No public IP.
The Mac IS the server. Tailscale IS the network. launchd IS the orchestrator.
server.tool('search_recipes',
'Search by cuisine, difficulty...',
searchRecipesSchema.shape,
wrap(searchRecipes))
server.tool('generate_shopping_list',
'Auto-generate from meal plan.
Aggregates ingredients, subtracts
pantry stock.',
generateShoppingListSchema.shape,
wrap(generateShoppingList))
server.tool('check_pantry',
'Current inventory. Filter by
category or expiring items.',
checkPantrySchema.shape,
wrap(checkPantry))
User: @Claw what should we cook? Quick.
β check_pantry β search_recipes
Claw: Chicken, rice, broccoli in pantry. 3 options under 30 min...
User: Go with #2. Add missing to list.
β create_meal_plan β generate_shopping_list
Claw: Done! Added 4 items to Superstore list.
One Telegram message β 5 MCP tool calls β meal planned.
/add-telegram)Each step adds capability. The cognitive layer builds up gradually.
| Personal | Professional |
|---|---|
| Telegram message | SCADA telemetry event |
| Kitchen pantry check | Pipeline pressure anomaly |
| Telegram alert | PagerDuty escalation |
| MacServe monitoring | Grid frequency monitoring |
| launchd + Tailscale | Kubernetes + service mesh |
Pressure sensor β agent loads history via MCP β isolates valve autonomously OR pages engineer with context.
Frequency deviation β agent checks load, weather, demand β adjusts demand response OR escalates with recommendation.
The shift: heuristic rules ("if X then Y") β contextual reasoning with escalation on uncertainty.
Build systems around harnesses. Add context, tools, and autonomy iteratively.
| NanoClaw | github.com/gavrielc/nanoclaw |
| MacServe | github.com/QuentinAd/macserve |
| Kitchen | github.com/QuentinAd/life-os |
| Slides | QuentinAd.github.io/ait-claw-preso |
Quentin Adam • AI/Data Engineer @ Dakota Analytics • AI Tinkerers Calgary