Most AI agents have the same lifecycle: impressive demo, two days of excitement, and then silence. The chat window stays open, the agent sits idle, and you go back to doing the work manually.
That's not a model problem or a platform problem. It's a reliability problem. And it's fixable.
Here's how to build an OpenClaw agent that does useful work every day — not just when you're watching.
Why Agents Die After the Demo
The demo problem has a name: agents optimized for show, not for go.
A demo works because a human is in the loop, hand-crafting the inputs, re-running the good parts, skipping the errors. In production, no one's steering. The agent either has a clear job with clear triggers, or it sits unused until someone remembers to open the chat.
The fix is deceptively simple: give your agent a schedule, a scope, and a recovery path.
The Foundation: HEARTBEAT.md
HEARTBEAT.md is where OpenClaw agents get their rhythm. It defines recurring tasks the agent runs on a schedule — without you prompting it each time.
Here's a real-world example for a solopreneur inbox agent:
# HEARTBEAT.md
## Daily Tasks (9:00 AM)
- Check Gmail for unread messages flagged "urgent" or from VIP senders
- Summarize overnight support tickets into a 5-point digest
- Review today's calendar and surface scheduling conflicts
## Weekly Tasks (Monday 8:00 AM)
- Compile last week's client inquiry summary
- Flag any invoice past due by more than 7 days
## On-Demand
- Respond to Telegram messages matching /digest or /status commands
This is not a wish list. These are literal instructions the agent reads and executes on schedule. When your HEARTBEAT.md is specific and scoped, your agent knows exactly what to do when the timer fires.
Scope matters more than frequency. An agent with three well-defined daily tasks is more reliable than one with twelve vague ones. Start narrow, add tasks only when the core loop is solid.
SOUL.md: What Your Agent Does When Things Go Wrong
Most agent configs tell the agent what to do. Few tell it what to do when things go sideways.
Your SOUL.md should include an explicit failure mode section:
## When I'm Uncertain
If I cannot complete a task with high confidence, I:
1. Note the failure in my daily memory log
2. Send a brief Telegram message: "Couldn't complete [task]. Needs your attention."
3. Do NOT attempt to improvise or escalate permissions
I do not retry indefinitely. One attempt, then I surface it.
This prevents the two failure modes that kill agents: silent failures (the agent stops working and you don't know) and runaway attempts (the agent keeps retrying, burning tokens, possibly making things worse).
An agent with clear failure instructions is an agent you can actually trust.
The Daily Digest Pattern
The most reliable daily agent pattern isn't the one that takes actions — it's the one that produces a summary.
Here's why: summaries have near-zero risk and immediate visible value. Your agent reads things, synthesizes them, and tells you what matters. You stay in control of any action that follows.
A daily digest agent for a solopreneur might do this every morning at 8:30 AM:
- Reads Gmail for the last 24 hours
- Checks Telegram for any flagged messages
- Pulls the day's calendar events
- Produces a 10-line Telegram message: what needs your attention today, in priority order
The output looks like this:
📋 Daily Brief — March 13
HIGH:
• 3 unread messages from [client] re: invoice #447
• Call with design team at 2PM — no agenda sent yet
NORMAL:
• 7 newsletter replies (positive)
• 2 new support tickets (low urgency, auto-replies sent)
Today's calendar: 3 meetings, 2 focused blocks
You read this in 20 seconds. You know what the day looks like. The agent has done real work.
Build this first. It proves your agent works. It builds the habit of checking. And it surfaces problems with your config before you give the agent any write permissions.
AGENTS.md: Memory Rules That Prevent Drift
An agent without memory rules will drift. It forgets what it did yesterday, repeats itself, loses context on ongoing projects.
Your AGENTS.md should define exactly how memory works:
## Memory Rules
At the end of every session, write a brief log to memory/YYYY-MM-DD.md:
- Tasks completed
- Tasks that failed and why
- Items that need follow-up tomorrow
Before starting any task, read today's memory log and any open follow-ups.
Do not surface information from memory logs older than 7 days unless asked.
These rules prevent two things: context bloat (the agent loading too much history) and context loss (the agent acting like every day is day one).
Seven days of rolling memory is usually enough for a daily assistant. Adjust based on your use case — a project tracker might need 30 days, a daily digest agent might only need yesterday.
Iteration: How to Improve a Running Agent Without Breaking It
Once your agent is running daily, you'll want to tune it. The wrong way: edit SOUL.md while it's mid-session, add five new tasks at once, and wonder why it started acting weird.
The right way: one change at a time, with a day between.
A simple iteration loop:
- Observe for 3-5 days. What's working? What's missing? What's noisy?
- Change one thing. A new HEARTBEAT task, a tighter scope in SOUL.md, an extra memory rule.
- Watch for 3 days. Did it improve? Did anything break?
- Commit or revert. Your config is plain markdown. Git it.
cd ~/openclaw-agents/my-assistant
git add -A
git commit -m "Narrowed digest scope to VIP senders only — too noisy"
Version-controlling your workspace files is the single most useful thing you can do for long-term reliability. When an agent starts misbehaving, git diff is your first debugging tool.
Measuring If Your Agent Is Actually Useful
You'll know your agent is earning its keep when you miss it on days it doesn't run.
More practically, track:
- Task completion rate: how many HEARTBEAT tasks finish vs. fail per week
- Escalation rate: how often it surfaces something that needs your attention
- Time saved: honest estimate of what you'd have done manually
If your agent completes 80%+ of its scheduled tasks and surfaces 2-3 actionable items per week, it's doing real work. If it's below 50%, the scope is probably too broad or the instructions are too ambiguous.
Common Mistakes
- Too many tasks, too fast. Adding 10 HEARTBEAT tasks on day one guarantees partial failures. Start with 2-3.
- No failure instructions in SOUL.md. An agent with no failure path will either go silent or retry forever.
- Editing configs mid-session. Changes take effect the next session. Editing live causes inconsistent behavior.
- No memory rules. Without them, context bloat will slow the agent and increase token cost.
- Not version-controlling your workspace. When something breaks, you'll want to know what changed.
Security Guardrails
- Keep API credentials out of workspace files. Use environment variables, not plaintext in SOUL.md or TOOLS.md. An agent that can read its own config can leak what's in it.
- Limit write permissions for daily tasks. A read-summarize-report agent is far safer than one with write access to email, calendar, or billing. Add write permissions only after read-only tasks are stable.
- Review memory logs periodically. Your agent is writing to files on your server. A quick weekly scan confirms it's logging what you expect and nothing unexpected.
Your Next Step
If your agent impresses you in the chat window but hasn't replaced a real task yet, the fix is a HEARTBEAT.md and 48 hours of letting it run unsupervised.
Start with the daily digest pattern. It's the lowest-risk, highest-visibility thing you can build. Once it's running and you're reading it every morning, add the next task.
Reliability isn't magic. It's scoped instructions, a schedule, and the discipline to iterate one step at a time.
Ready to Build Your Daily Driver?
Generate your OpenClaw workspace bundle with SOUL.md, AGENTS.md, HEARTBEAT.md, and memory rules — everything in this post, set up for your specific use case in under 10 minutes.