OpenClaw is everywhere right now. 140k GitHub stars. Every other post on Hacker News is someone showing off their “personal AI assistant” that texts them good morning and summarizes their calendar. Twitter is full of people customizing their SOUL.md files like it’s a new dotfiles flex.
And honestly? It’s cool. Open source, local-first, connects your messaging apps to LLMs. I get the appeal.
But here’s my hot take: if you’re a developer who already lives in the terminal, you don’t need a 100k-line framework to build a personal AI assistant. You already have everything you need. It’s called Claude Code, a crontab, and about 200 lines of shell scripts.
What OpenClaw actually does
Quick background if you’ve been under a rock. OpenClaw was created by Peter Steinberger, originally called Clawdbot before Anthropic sent a trademark complaint and it got renamed. It connects messaging platforms — Telegram, WhatsApp, Discord, Signal — to LLMs like Claude, GPT, and DeepSeek.
You define a personality in a SOUL.md file, store user preferences in USER.md, and the thing runs locally with full system access. The pitch is simple: talk to your AI assistant like you’re texting a friend.
It’s a solid project. But it’s also a large framework solving a problem that, for developers, can be solved with far less.
Meet Travis — my Claude Code assistant
I built a personal AI assistant called Travis. No framework, no Docker, no messaging platform integration. Just Claude Code running headless on a schedule.
Here’s the entire architecture:
travis/
SOUL.md # Personality + operating principles
CLAUDE.md # Wiring: load SOUL.md, use memory system
prompts/ # Task-specific prompt templates
memories/ # Persistent context files
role-and-context.md
team-roster.md
growth-plan.md
...
scripts/
daily-summary.sh # Cron runner
weekly-summary.sh # Cron runner
output/ # Generated reports
That’s it. A directory with some markdown files and two shell scripts.
SOUL.md gives Travis a personality. Mine is a sarcastic cofounder who challenges my decisions and thinks like a VP of Engineering. The communication style section reads something like: “Be direct. Skip the corporate fluff. If a decision is bad, say it’s bad — then explain why and suggest something better. Think of yourself as the technical cofounder I can’t afford.”
The memories/ directory is the persistence layer. Team roster, quarterly goals, process docs — anything Travis needs to know across sessions lives here as plain markdown. No database, no vector store, no embeddings. Just files.
Prompt files are task-specific instructions with template variables. One prompt tells Travis to scan Slack channels and Linear projects, then generate a structured summary with blockers, decisions made, and things that need my attention. Another aggregates those into a weekly report.
The magic: claude -p + cron
The entire scheduling layer is a shell script:
#!/bin/bash
# Runs daily at 7:00 AM IST via cron
DATE=$(date +%Y-%m-%d)
PROMPT=$(sed "s|{{DATE}}|${DATE}|g" daily-update-prompt.md)
claude -p \
--dangerously-skip-permissions \
-d /path/to/travis \
"${PROMPT}"
That’s the whole thing. Claude Code’s headless mode — the -p flag — turns it into a scriptable agent. No daemon, no server, no message queue. Just a process that runs, does its job, and exits.
MCP servers give it read access to everything it needs. Slack MCP for channel history, Linear MCP for project tracking. I wrote about setting up both of these in my last post.
The script generates a markdown report and sends me a Telegram notification with the highlights. Every morning at 7 AM, I wake up to a summary of what happened overnight — blockers, decisions, things that need my attention. No app to open, no chat to scroll through.
Side-by-side
Here’s how the two approaches compare:
| OpenClaw | Claude Code + Cron | |
|---|---|---|
| Interface | Chat apps (Telegram, WhatsApp) | Terminal / headless |
| Personality | SOUL.md | SOUL.md (same concept) |
| Memory | Built-in context system | Markdown files in a directory |
| Scheduling | Built-in automations | Cron + shell scripts |
| Integrations | 50+ plugins | MCP servers |
| Attack surface | Inbound messages from anyone | None — outbound only |
| Setup complexity | Docker + env vars + messaging auth | A directory and a crontab entry |
| Lines of code | 100k+ framework | ~200 lines of your own |
The architectures are remarkably similar. Both use a personality file. Both persist context. Both connect to external services. The difference is that one is a framework and the other is a pattern.
The security thing
This is the part that makes me genuinely uncomfortable about OpenClaw.
It accepts inbound messages as prompts. Anyone who can message you on Telegram or WhatsApp can potentially inject instructions into your AI assistant — the one that has full system access. Cisco and BitSight have both flagged this: prompt injection through messaging platforms is a real attack vector, and it’s contributed to some of the ban waves the project has seen.
Claude Code in headless mode has no inbound message surface. It only runs prompts that you wrote, stored as static files in your repo. No one can inject anything unless they have SSH access to your machine. That’s a fundamentally different security model — outbound-only by design, not by configuration.
When you actually need OpenClaw
Fair caveat. If you want bidirectional chat — ask your AI a question from your phone while you’re walking the dog — OpenClaw wins. That’s its whole thing.
If you want smart home integration, calendar management from WhatsApp, or a conversational interface for non-technical family members, OpenClaw is built for exactly that.
But if you’re a developer who wants a scheduled, automated assistant that does specific jobs reliably and predictably? Cron plus Claude Code is simpler, more secure, and fully in your control.
Build your own in 30 minutes
Here’s the recipe:
- Create a directory with a
SOUL.md— who is your assistant? What’s its personality and expertise? - Add a
CLAUDE.md— tell Claude to loadSOUL.mdat startup and use thememories/directory for persistent context. - Write your prompt files — what tasks should it do? Daily standup summary? Weekly report? PR review digest?
- Add MCP servers for integrations —
claude mcp add slack,claude mcp add linear, whatever you need. - Write a shell script that runs
claude -pwith your prompt. - Add it to your crontab —
crontab -e, pick a schedule, done.
No framework to learn. No Docker to configure. No messaging platform OAuth dance. No 100k-line dependency to audit. Just files, prompts, and cron.
The boring stack wins again.