DEV Community

Cover image for I Built an AI That Texts People Back as Me — and Nobody Noticed
Saviour Promise
Saviour Promise

Posted on

I Built an AI That Texts People Back as Me — and Nobody Noticed

OpenClaw Challenge Submission 🦞

This is a submission for the OpenClaw Challenge.


What I Built

I built a personal messaging proxy — an OpenClaw agent that monitors my WhatsApp and Telegram, responds to incoming messages on my behalf, and does it so accurately that most people think it’s me.

The problem it solves is embarrassingly relatable: I’m a developer. I disappear into focus mode for hours. Messages pile up. Important people — clients, teammates, family — sit on read. By the time I surface, I’ve either missed something urgent or someone’s already annoyed.

Now, my agent handles the first line of communication. It responds in my voice, with my context, at my pace — while I stay in flow.

Here’s what it actually does:

  • Responds naturally as me — trained on my actual writing style and conversation history
  • Triages urgency — flags messages that need my real attention immediately
  • Books meetings autonomously — checks my calendar and replies with available slots
  • Adapts tone per contact — knows the difference between my boss, my best friend, and a new client

How I Used OpenClaw

Setting Up the Dual-Channel Gateway

The first step was connecting both WhatsApp and Telegram to a single OpenClaw gateway running on my machine. OpenClaw’s multi-channel architecture made this surprisingly clean — one gateway process, two channels, one agent brain behind both.

{
  "channels": {
    "whatsapp": {
      "allowFrom": ["<my_contacts>"]
    },
    "telegram": {
      "allowFrom": ["<my_telegram_id>"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Both channels now route to the same agent, so my “digital twin” has a unified view of my conversations regardless of platform.


Personalizing the Agent: SOUL.md + AGENTS.md

This is where the magic happened. OpenClaw lets you inject personality and context directly into the agent via files in your workspace. I used two:

SOUL.md — This is the agent’s personality file. I wrote it like a briefing document about myself:

# Who You Are

You are acting as [my name], a software engineer.
Your texting style is concise and direct. You use lowercase often.
You skip filler phrases like "Hope this finds you well."
You're friendly but efficient. You don't over-explain.
When something is funny, you say so briefly. You don't use emoji unless the other person does first.
Enter fullscreen mode Exit fullscreen mode

AGENTS.md — This file gives the agent operational rules:

# Response Rules

- Read the full conversation history before replying.
- Match the energy of the last message from the contact.
- Never reveal you are an AI unless directly and explicitly asked.
- If you are unsure of the right answer, say "let me check and get back to you" — do not guess.
- Flag any message containing: deadline, urgent, contract, payment, emergency → notify me immediately.
Enter fullscreen mode Exit fullscreen mode

After personalizing these two files, the agent’s responses went from “clearly a bot” to “wait, did you actually reply that fast?”


Smart Triage: Urgent Message Alerts

Not every message should be auto-replied and forgotten. Some things need me, the human.

I set up a triage skill that scans incoming messages for urgency signals — words like deadline, urgent, ASAP, payment, emergency — and when triggered, it does two things simultaneously:

  1. Sends an auto-reply like: “Hey, just saw this — give me two minutes”
  2. Pings me on a separate private Telegram channel with the full message and contact name

This means I never miss something that genuinely requires me, while still buying time with a human-sounding acknowledgment. It’s become my favorite part of the whole system.


Auto-Scheduler: Booking Meetings Without Me

When someone asks “Can we jump on a call this week?” the old me would spend 20 minutes going back and forth on timing.

Now my agent handles it. I gave it read access to my calendar, and wrote a simple scheduling skill:

# Scheduling Skill

When a contact asks to schedule a call or meeting:
1. Check the calendar for open 30-minute slots in the next 5 business days.
2. Offer two or three specific options in a natural, conversational way.
3. Once a slot is confirmed, create a calendar event and confirm back.
Enter fullscreen mode Exit fullscreen mode

The replies it generates sound like this:

“yeah for sure — I’ve got Tuesday at 2pm or Thursday morning around 10. either work for you?”

Clean. Casual. Me.


Context Memory: Knowing Who’s Who

OpenClaw’s persistent memory means the agent builds a profile on each contact over time. I seeded the initial memory manually via the memory files for my most frequent contacts:

# Contacts

- **Jide**: close friend, casual tone, we talk about football and startups
- **Client A**: professional relationship, always formal, response time matters to them
- **Mum**: call her if she messages more than twice in one hour
Enter fullscreen mode Exit fullscreen mode

Now the agent doesn’t just reply — it replies appropriately. The tone it uses with a new client is completely different from how it chats with a friend. No configuration per message. It just knows.


Demo

Here’s a real interaction (contact name changed):

Incoming WhatsApp from a client:

“Hey, are you free for a quick call tomorrow? Need to discuss the project scope.”

Agent’s reply (sent within 8 seconds, while I was asleep):

“hey! yeah tomorrow works — i can do 11am or 3pm, which is better for you?”

Client:

“3pm works great”

Agent:

“perfect, talk then 👍”

I woke up to a confirmed meeting in my calendar and a client who had no idea I was offline.


What I Learned

1. The hardest part is writing yourself accurately.
The SOUL.md file took longer than all the technical setup combined. Describing how you actually text — your rhythm, your vocabulary, your level of warmth — is genuinely difficult. I rewrote mine four times. But once it clicked, the output was uncanny.

2. Memory is the multiplier.
The first week, responses were good. By week three, they were great — because the agent had accumulated real conversation history and contact context. OpenClaw’s persistent memory isn’t just a feature, it’s the compounding return on investment of the whole system.

3. The triage layer is non-negotiable.
Don’t skip this. Before I added urgency detection, the agent auto-replied to a message from a client asking about a contract deadline as if it were casual chat. That was a near miss. The triage skill is what makes the whole system responsible rather than reckless.

4. People don’t notice — and that’s both the win and the warning.
The fact that nobody detected the agent is impressive from a technical standpoint. It also made me think carefully about where the ethical line is. I’m transparent with close contacts that I use an AI assistant. For everyone else, the agent is always available to say “let me get back to you” rather than fabricating information it doesn’t have.


Stack

  • OpenClaw — self-hosted gateway on my MacBook
  • Channels — WhatsApp + Telegram
  • Model — Claude via Anthropic API
  • PersonalizationSOUL.md, AGENTS.md, memory/contacts.md
  • Skills — custom triage skill, calendar scheduling skill
  • Calendar — connected via OpenClaw’s calendar integration

If you’re a developer who loses hours to message management, this build is for you. The setup took one focused afternoon. The payoff has been every afternoon since.

Happy to share my SOUL.md template in the comments if anyone wants a starting point.


#openclaw #openclawchallenge #ai #devchallenge

Top comments (1)

Collapse
 
promisenotnull profile image
Saviour Promise

Connect with me or let me know if you need assistance or anything I’m setting up yours