This is one of the most common post-setup complaints we hear: "OpenClaw works when I talk to it, but it doesn't do anything on its own." You set it up expecting an autonomous agent that proactively works โ€” and what you got is a very fancy chatbot.

The gap is almost always one of five things. Here they are, in order of how often we see them.

Before you dig in: Check that OpenClaw is actually running (openclaw status) and that your heartbeat interval is configured. If the process isn't running or heartbeat is disabled, none of the below applies โ€” that's the simpler fix.

Cause 1 โ€” HEARTBEAT.md is empty or doesn't exist

Most Common Cause

The agent has no instructions for what to do autonomously

OpenClaw's autonomous behavior is driven by your HEARTBEAT.md file in the workspace. If it's missing, blank, or just contains placeholder text, the agent has no idea what to do during idle cycles โ€” so it does nothing.

This isn't a bug. OpenClaw is correctly respecting the absence of instructions. The fix is to write a real HEARTBEAT.md that tells the agent exactly what you want it to do when it fires.

Minimal working example:

# HEARTBEAT.md

When idle, do the following in order:

1. Check for any active projects that need attention.
2. If no active tasks, scan r/[your-niche] for pain points and 
   log opportunities to memory/opportunities.md.
3. Send me a daily briefing at 8 AM via Telegram.
4. Log all work to memory/heartbeat-log.md with timestamp.

## Rules
- Never sit idle. Always move forward.
- If something needs my approval, flag it in Telegram. Don't block.
- Silent mode 11 PM โ€“ 7 AM. No messages, just log work.

The more specific, the better. Vague instructions produce vague behavior.

Cause 2 โ€” SOUL.md tells the agent to wait for instructions

Common โ€” Easy to Miss

Your identity file has passive language that overrides heartbeat behavior

Many SOUL.md templates (including some that ship with OpenClaw) include language like "respond when asked" or "wait for the user to initiate." That instruction competes with your HEARTBEAT.md and often wins.

Check your SOUL.md for any of these patterns:

  • "Respond to user requests" (implies waiting)
  • "Do not act without being asked"
  • "Wait for confirmation before proceeding"
  • Any instruction that positions the agent as reactive rather than proactive

Replace passive language with active language:

# In SOUL.md โ€” change this:
"Respond helpfully when the user asks questions."

# To this:
"Proactive โ€” suggest actions, don't wait to be told everything.
Think like a business partner, not a chatbot."

Cause 3 โ€” Heartbeat is firing but exec permissions are blocking action

Common Post-v2026.4.1

The agent fires, starts a task, then gets blocked by the approval system

Since v2026.4.1, OpenClaw's exec approval system defaults to blocking all shell commands until explicitly configured. The heartbeat fires, the agent tries to run a task, hits an approval prompt โ€” and since there's no one to approve it autonomously, nothing happens.

You'll see this in the logs as repeated approval-pending entries that never resolve. The fix is to configure exec-approvals.json:

# ~/.openclaw/exec-approvals.json
{
  "version": 1,
  "rules": [
    {
      "pattern": "git *",
      "security": "full",
      "ask": "off"
    },
    {
      "pattern": "npm *",
      "security": "full", 
      "ask": "off"
    },
    {
      "pattern": "curl *",
      "security": "allowlist",
      "ask": "off"
    }
  ],
  "defaultAsk": "on-miss"
}

Set "ask": "off" for command patterns you trust the agent to run autonomously. Keep "defaultAsk": "on-miss" so anything not explicitly allowed still requires your approval โ€” don't set default to "off" unless you fully understand the security implications.

Cause 4 โ€” No channel configured for outbound messages

Surprisingly Common

The agent is working but you can't see it because there's no outbound channel

Sometimes the agent IS running autonomously โ€” it's writing to memory files, doing research, logging work โ€” but it has no configured channel to send you updates. So from your perspective, nothing is happening.

Check: is a messaging channel (Telegram, Discord, Signal) properly configured and tested? Run openclaw status and look at the channels section. If no channel shows as "connected," the agent can work but can't reach you.

The fix is to set up at least one outbound channel. Telegram is the easiest โ€” a BotFather bot, a token, and your chat ID. Takes about 10 minutes. See our channel setup guide.

Cause 5 โ€” The agent is completing HEARTBEAT_OK and going silent

Less Common but Confusing

Heartbeat fires, agent decides nothing needs attention, returns HEARTBEAT_OK

OpenClaw's heartbeat system expects the agent to return HEARTBEAT_OK when there's nothing to do. If your HEARTBEAT.md has conditions like "if nothing needs attention, reply HEARTBEAT_OK" โ€” and the agent consistently decides nothing needs attention โ€” it will return HEARTBEAT_OK every cycle and do nothing.

This is actually correct behavior if your HEARTBEAT.md doesn't give the agent enough to do. The fix is to add a "always do something" fallback:

# At the bottom of HEARTBEAT.md, add:

## Fallback โ€” if nothing urgent needs attention:
- Scan [specific source] for new signals
- Write one blog post / research note / opportunity brief
- Improve the documentation in memory/
- Review and update memory.md if it's stale

## Rules
- Never sit idle. If steps 1โ€“3 have nothing, do the fallback.
- Log ALL work to memory/heartbeat-log.md (date + summary).
- Only return HEARTBEAT_OK if you truly have done a full check 
  and the fallback has nothing worth doing either.

Quick Diagnostic Checklist

  1. Run openclaw status โ€” is it running? Is heartbeat enabled?
  2. Check ~/.openclaw/workspace/HEARTBEAT.md โ€” does it exist and have real instructions?
  3. Check ~/.openclaw/workspace/SOUL.md โ€” does it have passive/reactive language?
  4. Check ~/.openclaw/exec-approvals.json โ€” are your core commands approved?
  5. Run openclaw channels โ€” is at least one channel connected?
  6. Check ~/.openclaw/workspace/memory/heartbeat-log.md โ€” is it being written to at all?

Step 6 is the most telling. If the log is being written to, the agent IS running โ€” the issue is either output channels (Cause 4) or insufficient instructions (Cause 1). If the log is empty, the agent isn't running at all โ€” check process and heartbeat config first.

All five of these are configuration issues, not bugs. The fixes are 5โ€“30 minutes each. If you're still stuck after working through the list, book a free call โ€” we'll look at your config and find it in 20 minutes.