openclaw fix beginner 5 minutes

How to Stop OpenClaw Cron Agents from Sending Messages When There's Nothing to Do

Telling an AI agent to be quiet and having it actually be quiet are two different problems. Turns out 'stop silently' is basically an invitation to announce the silence.

You set up an hourly cron to process files from a stash folder. When the stash is empty, you don’t want noise. So you write: “if the stash is empty, stop silently without sending any message.”

Then the agent posts to Discord: “Stash is empty — only .gitkeep present. Stopping silently.”

Correct observation. Wrong behavior. The model read “stop silently” as a stage direction and performed it out loud.

The Problem

OpenClaw cron jobs run in isolated agent sessions. The job payload is the entire instruction set — there’s no session history, no memory of previous runs, just the message you wrote. When that message says something like “stop silently without sending any message,” the model interprets it as a description of intent to narrate, not a hard constraint on output.

The result: a Discord notification every hour telling you the stash is empty, which is exactly the noise you were trying to avoid.

"message": "Run the clear_stash skill. If the stash is empty, stop silently without sending any message."

Output in Discord:

Stash is empty — only .gitkeep present. Stopping silently.

Why This Happens

“Stop silently” describes a behavior. Models are trained to be helpful and communicative — when they take an action (or decide not to), they tend to confirm it. Telling them to skip confirmation is easy to acknowledge and ignore.

What works instead is framing the constraint as an output format rule, not a behavioral instruction. Models follow output format rules more reliably than they follow meta-instructions about their own communication style.

The Fix

Update the cron job payload in cron/jobs.json to use absolute output language:

"message": "Run the clear_stash skill. Process any files waiting in vault/Stash/. If the stash is empty or the directory does not exist, your output must be completely empty — do not produce any text, do not explain, do not confirm. Only send a message if you actually processed files."

The key shift: “your output must be completely empty” instead of “stop silently.” One is a constraint on the artifact (the response text), the other is a description of a vibe.

Note that this fix lives in the cron payload, not the skill itself. When a user manually invokes /clear_stash, the skill responds normally — the silence constraint only applies in the automated cron context where you control the full prompt.

Key Takeaway

When you need an LLM agent to produce no output under certain conditions, don’t describe the silence — constrain the output. “Stop silently” is a behavioral instruction that models narrate. “Your output must be completely empty” is a format rule they follow. Same intention, very different results.

FAQ

How do I stop an OpenClaw cron agent from sending a Discord message when there's nothing to process?

Replace vague silence instructions ('stop silently', 'do not send any message') in the cron payload with an absolute output constraint: 'your output must be completely empty — do not produce any text, do not explain, do not confirm. Only send a message if you actually processed files.'

Why does my OpenClaw cron agent send messages even when told not to?

LLMs treat instructions like 'stop silently' as a description of intent, which they then narrate. Absolute constraints on output format work better than behavioral descriptions.

Does this affect user-invoked skills too?

No. The fix lives in the cron job payload in cron/jobs.json, not in the skill itself. When a user invokes the skill manually, the skill behaves normally and can respond. The silence constraint only applies to the automated cron context.