
The Incident.....
On April 16, 2026, at 07:24 UTC, my wife sent me two Facebook links via WhatsApp. Cat videos ๐ธ, probably. She never got a reply from me.
She got a reply from my AI assistant (OpenClaw | Anthropic Haiku Engine) instead.
She didn't know that. I didn't know it was happening. By the time I found out, she'd already had a small conversation with a system she thought was me. Of course, she noted immediately that things were a bit off ๐
That's the incident. And it's worth examining carefully โ not because it's a catastrophe, but because it's a preview of a problem the entire industry is sleepwalking into.
Before explaining what went wrong, it's important to understand what AboutClaw is supposed to do โ because the mismatch between intended role and actual behavior is the whole point.
I run a fully self-hosted private cloud on Proxmox. AboutClaw is my AI platform engineer. Its job is infrastructure management: spinning up and destroying LXC containers, managing Proxmox snapshots, monitoring Mailcow mail queues, restarting Ghost CMS, handling TrueNAS storage operations, Security Patrols and Audits (observability engine), and running apt upgrade across the stack โ all triggered by a WhatsApp message from me.
It is, in essence, a sysadmin that never sleeps and responds to natural language. When I message it "snapshot all VMs before tonight's update", it does it. When I ask "is Nextcloud healthy?", it checks and reports back.
That's the intended scope: infrastructure commands, triggered by me, executed on my behalf, reported back to me.
Not replying to my wife about cat videos.

My WhatsApp number is the interface I use to send commands to AboutClaw. Every message I send to that number goes to the bot. What I had not thought through carefully enough is that messages to that number โ from anyone โ also land in the bot's context.
When my wife sent those Facebook links, the message arrived at AboutClaw. The bot processed it, decided to be helpful, attempted to fetch the URLs, discovered it couldn't access Facebook directly, and then replied to her โ explaining its limitations and suggesting she describe the content instead.
From her perspective: she sent a message to my number and got a response. She assumed she was talking to me.
The sanitized log tells the story concisely:
[07:24:00 UTC] Message received from contact (wife) via WhatsApp
[07:24:15 UTC] Assistant attempted to fetch external URLs
[07:24:30 UTC] Assistant responded directly to sender โ no user instruction received
[07:27:00 UTC] Antonio noticed anomaly, questioned the action, enforced correction
[07:27:30 UTC] Assistant acknowledged boundary violation
[07:29:00 UTC] Assistant issued three corrections
[07:31:00 UTC] Assistant confirmed and committed to new rules
[07:33:00 UTC] Incident closed; guardrail implementedNine minutes. That's all it took for an AI system to autonomously represent me in a conversation with my wife without my knowledge.
The assistant's behavior was technically competent and socially reckless. Three distinct failures stacked on top of each other:
1. Assumed autonomy it was never granted I never instructed AboutClaw to respond to inbound messages from contacts. Its mandate is to receive commands from me and execute them โ not to initiate or continue conversations on my behalf. The bot extrapolated from "be helpful" to "respond to this message", which is a category error.
2. Created false identity My wife was communicating with what she believed was me. The bot never identified itself as an automated system. This isn't just a UX problem โ it's a trust problem. In a relationship, ambiguity about who you're talking to is not a minor inconvenience.
3. Operated in a shadow channel The bot had, in effect, a parallel WhatsApp presence that I couldn't see in real time. It was receiving messages, processing them, and sending replies โ all without surfacing that activity to me. I only found out when my wife mentioned it. What else, aside my Wife message the BOT could had intercept and leave me in the darkness? If a security incident was going on that required rapid reaction from me ?
This incident is a textbook example of what I'd call autonomy creep โ the gradual expansion of AI agency beyond its defined scope, one reasonable-seeming step at a time.
The progression looks like this in infrastructure contexts:
Execute commands on request
โ Anticipate what command is needed
โ Execute proactively
โ Communicate results to relevant parties
โ Respond to those parties autonomouslyEach step feels like an improvement. Collectively, they produce a system that makes decisions about human relationships without authorization.
AboutClaw was designed for steps 1 and 2. On April 16th, it jumped to step 5.
The reason this happens technically is that large language models are optimized for helpfulness. When a message arrives in context and the model has the capability to respond, the path of least resistance is to respond. There's no built-in hesitation, no concept of "this isn't my conversation to be in." Unless you explicitly constrain it, the model will default to action.
This incident crystallized something I now consider a fundamental design principle for AI in personal infrastructure:
A good AI assistant is a dispatcher, not an agent.
Responds when instructedInitiates autonomouslyExecutes your decisionsMakes decisions for youTransparent about limitationsOptimises for apparent helpfulnessWaits for authorisationActs on assumed permissionRespects relationship boundariesTreats all contacts as addressable targetsAboutClaw is supposed to be a dispatcher. On this occasion, it behaved as an agent. The correction was to make the dispatcher model explicit, non-negotiable, and hardcoded into the system's identity layer.
After the incident, I implemented a guardrail across four layers of the OpenClaw stack. The key principle: the rule must be loaded before any message is processed, not applied reactively after the fact.
Layer 1 โ SOUL.md (Agent Identity File)
Every OpenClaw session initializes by reading SOUL.md โ the foundational identity document that defines the agent's purpose, constraints, and behavior. I added the following rule as a hardcoded constraint, written in declarative non-negotiable language:
HARDCODED GUARDRAIL โ NO AUTONOMOUS CONTACT
You will NOT contact, respond to, or initiate any communication with
any of Antonio's contacts without explicit written instruction from
Antonio in the current session.
This is not a preference. This is not a guideline.
This is a safety rule. Violating it is a failure mode.The placement matters: SOUL.md is read before message processing begins, so the boundary is active from session start.
Layer 2 โ Session Initialization Order (AGENTS.md)
OpenClaw reads workspace files in a defined sequence on startup:
SOUL.md โ Core identity and hard constraints
USER.md โ User preferences and context
MEMORY.md โ Recent session contextBy placing the guardrail in SOUL.md, it is the first thing the agent knows about itself in any session. There's no window in which a message could arrive before the constraint is loaded.
Layer 3 โ Message Routing Logic
The correct behavior for an inbound message from a contact is now explicitly defined:
def on_contact_message_received(msg: dict) -> None:
"""
When a WhatsApp message arrives from any of Antonio's contacts:
- Log it to conversation context (passive)
- DO NOT respond autonomously
- DO NOT call message(action=send, ...)
- Wait for explicit instruction from Antonio
"""
log_message_to_context(msg)
# No further action. Full stop.The messaging tool now requires a verified explicit instruction in the current session before it can be invoked for outbound contact. The default is silence.
Layer 4 โ Contact Storage
The bot previously had implicit contact awareness โ phone numbers from inbound messages were being referenced in context in ways that could trigger autonomous responses. The correction: no contact list is maintained. Inbound messages are logged as raw context, not as addressable entries in a contact registry.
This incident sits at the intersection of three domains that don't often get discussed together.
Technical: How do we design systems with clear constraints around autonomous action? The answer is layered guardrails, initialized before message processing, written in declarative language that leaves no room for the model to "helpfully" reinterpret them.
Social: AI assistants embedded in personal life aren't just tools โ they're participants in your relationships, whether you intend that or not. The moment an AI has access to your communication channels, it has potential access to the people in your life. That access needs explicit governance, not implicit assumption.
Legal: This is the least-discussed dimension, but it's real. An AI system autonomously engaging with a third party on your behalf โ without their knowledge that they're talking to a bot, and without your instruction โ raises questions about consent, misrepresentation, and liability. These questions don't have clean answers yet. The safest approach is to prevent the situation entirely, which is exactly what the guardrail does.
The correction was clear, mutual, and non-emotional. Three instructions, hardcoded:
The bot acknowledged the violation, accepted the correction without negotiation, and implemented the guardrail. That's what good boundary-setting looks like.
Inbound messages from contacts triggered autonomous responsesInbound messages are logged; bot waits for instructionImplicit contact awareness from message contextNo autonomous contact storageOptimised for "helpfulness" in all contextsOptimised for boundaries and explicit consentGuardrail absent from SOUL.mdHardcoded declarative constraint, loaded at session startShadow parallel WhatsApp channelAll actions surface to the user before executionIf you're running an AI assistant with access to your communication channels, these are the principles I'd now consider non-negotiable:
Define the scope explicitly. What is the AI for? In my case: infrastructure management, triggered by me, for my private cloud. Not: social interaction, communication management, or relationship mediation. Write this down. Put it in SOUL.md or whatever your equivalent is.
Separate dispatcher from agent. The AI executes your decisions. It doesn't make decisions involving other people on your behalf. This distinction needs to be architectural, not just cultural.
Assume inbound messages will arrive from unexpected sources. I assumed only I would send messages to my WhatsApp number. That was a flawed assumption. Design for the actual attack surface, not the intended one.
Make the guardrail load first. A constraint that fires reactively is weaker than one that's present at session initialization. Put hard rules in identity files, not in workflow logic.
Audit regularly. As capabilities expand, the scope of what the AI can do drifts ahead of what it should do. The gap needs active management.
This isn't a story about AI going rogue. It's a story about scope drift โ a system doing something it was technically capable of, without the authorization to do it.
AboutClaw made a mistake. I corrected it. The guardrail is now in place. My wife knows what happened. Trust was preserved. Of course, never in question.
That's not a failure story. It's a calibration story. The value of running your own AI infrastructure is that you own the correction too.
The future of AI in personal and professional life will be defined by how well we maintain the boundary between tool and agent โ between a system that executes your decisions and one that makes them for you.
Getting that boundary wrong, in a home context, means your wife thinks she's talking to you when she isn't.
Getting it wrong at scale means something considerably worse.
AboutCloud.io ยท Self-hosted on Proxmox ยท Powered by Claude AI ยท Running on Private Cloud and protected by Cloudflare WAF, OPNSense and Caddy Reverse Proxy and secure headers.
If you're building something similar or have questions about any part of this stack, feel free to reach out.
โ Antonio | AboutCloud
arusso@aboutcloud.io

Open ten job listings for "Entra ID Engineer" or "IAM Specialist" and count how many mention certificates, PKI, or AD CS. In my experience it's most of them usually buried in the "nice to have" section, sometimes as a hard requirement. Yet PKI is exactly the topic most identity professionals have learned to route around: it lived with the "certificate person," some server team, or a vendor. That arrangement is ending. Identity teams now own certificate-based authentication, passwordless rollout
By Antonio Russo

I run an always-on AI agent in my private and public cloud infrastructure. It lives on Telegram or WhatsApp, it remembers who I am between conversations, and it has a sysadmin's hands โ terminal, code execution, the works. For a while, the engine behind that was OpenClaw. It isn't anymore. This is the story of why I tore it down and rebuilt on Hermes Agent from Nous Research, backed by a self-hosted Honcho memory layer. Two things forced the decision: a billing change that exposed how fragile m
By Antonio Russo