OpenClaw logo
TryOpenClaw
Try for $1

Turn off OpenClaw dreaming: the sleep feature that's quietly burning your API budget

By Linas Valiukas · April 22, 2026

Your agent is idle. You're asleep. At 3 AM local time, OpenClaw wakes itself up, pulls the last seven days of conversations out of memory, and starts thinking about them. That's dreaming. And for a lot of self-hosters who turned it on back when Claude subscriptions covered everything, it's been running every night for months. Now the bill has teeth.

The phantom token post covered dreaming in passing as one of four big token burners. This one's all about dreaming - what it does, why it misbehaves, how to check if yours is active, and the exact config to turn it off. If you're getting surprise $100+ bills for an agent that supposedly does nothing overnight, this is likely the cause.

What dreaming actually does

OpenClaw has two memory systems. Short-term memory lives in session transcripts - whatever happened in the last chat, cron run, or ACP call. Long-term memory lives in files your agent writes to itself (MEMORY.md, IDENTITY.md, topic-scoped files under memory/). Dreaming is the bridge. It reads recent short-term stuff and decides what's worth promoting.

The cycle has three phases. Each one makes its own set of LLM calls:

On the defaults, a full cycle lands somewhere between 200k and 400k tokens of input, depending on how busy your agent was that week. Output is smaller - usually 20k-50k tokens of reflection notes. If you've got dreaming routed to Opus, you're paying Opus prices on both sides.

It's opt-in. So why is yours on?

Dreaming has been disabled by default since it landed. The OpenClaw team never pretended it was a free feature. What happened is that during the Claude-subscription era, turning it on had no visible cost. The April 4 cutoff changed the math, but the config didn't un-set itself.

A few other ways it ends up on without you remembering:

Check if yours is running

The fastest way is the slash command:

/dream status

It'll print whether dreaming is enabled, which provider the dream jobs route to, last run time, and the next scheduled run. If you see something like enabled: true, provider: claude-opus-4-7, next_run: 03:00 local, that's your money sink.

You can also check manually. In openclaw.toml:

[dreaming]
enabled = true
schedule = "0 3 * * *"
provider = "anthropic"
model = "claude-opus-4-7"
lookback_days = 7
phases = ["light", "rem", "deep"]

If you're on the older JSON-based config (pre-v4.3 migration), same keys under a "dreaming" object. Cron users can also check ~/.openclaw/cron.d/dreaming for a scheduled job entry.

The known bugs, in order of how much money they cost you

Dreaming ships with a handful of issues the team hasn't fully resolved. In the order that matters for your wallet:

REM reflector loop on stale corpus files. Fixed in v2026.4.5 (April 16), but it was bad. The reflector would pick up a batch of transcripts, fail to serialize the output, and try again with the same batch. Over and over. Users reported REM cycles running for 6+ hours and burning through Opus budget caps in a single night. If you haven't updated past v4.4, this is still active for you.

Deep Sleep context inflation. The consolidation phase reloads the full memory corpus on each reconciliation pass. Default config allows up to 4 passes. If your memory/ directory has grown to 50-100k tokens (not uncommon after a few months), that's 200-400k input tokens before you even count the transcripts. One thread on r/openclaw documented a $22 single-night bill traced almost entirely to this.

Dream Diary silent pollution. The Dream Diary is where REM reflections get written. There's a long-running bug where reflections about other sessions get appended to whichever diary file was touched most recently, instead of the session-scoped file they belong to. Your heartbeat agent's memory file ends up with reflections from your email triage agent. Next day, both agents load each other's notes and write more reflections on top. Reported on r/openclaw in early March, still open.

Orphaned dream sessions. If the dream job crashes mid-cycle, the session doesn't get cleaned up. The next night's cron picks up a stale session with partial state and tries to resume, usually producing garbage reflections and sometimes looping indefinitely. The only workaround right now is a pre-run cleanup script that the team says will ship as a built-in in v4.8.

Empty-heartbeat triggers. Even when the agent has had no conversational activity, an empty heartbeat can mark a session as "recently active" and pull it into the dreaming lookback. Result: dreaming runs over a transcript with two heartbeats and nothing else, produces no useful reflection, and still bills you.

What it actually costs

Numbers from Reddit threads and GitHub comments over the last three weeks, grouped by configuration:

Setup Per-night Per-month
Full cycle, Opus 4.7, light activity $3-6 $90-180
Full cycle, Opus 4.7, heavy use $8-14 $240-420
Full cycle, Sonnet 4.6 $0.60-1.20 $18-36
Light Sleep only, Haiku $0.04-0.08 $1.20-2.40
Stuck REM loop (pre-v4.5) $15-25 up to $700+
Runaway after orphaned session $22 (reported) varies

The honest answer on whether dreaming earns its cost: for most users, no. The reflections are interesting to read occasionally, but they rarely change agent behavior in a way you'd notice. Light Sleep's topic tagging is genuinely useful. REM and Deep Sleep are expensive without being obviously better than just letting your agent re-read its own memory files on demand.

Turn it off

The one-liner:

/dream disable

This persists. It writes dreaming.enabled = false to your config and removes the cron entry. Next night, no dream job fires.

If you prefer editing the file directly, in openclaw.toml:

[dreaming]
enabled = false

Then restart the gateway (openclaw gateway restart) so the cron scheduler picks up the change. Don't forget to also remove any ENABLE_DREAMING=1 line from your Docker env file if you've got one - the TOML setting loses to the env var at startup.

After that, confirm:

/dream status
# expected: enabled: false, next_run: none

The middle ground, if you actually use the reflections

Some people do like dreaming. Power users who spend hours a day talking to their agent get value out of Light Sleep tagging and the occasional REM reflection that catches a pattern they missed. If that's you, there are three knobs that make dreaming roughly 20x cheaper without giving up what it does well:

  1. Drop Deep Sleep. It's the phase with the worst cost-to-value ratio. Set phases = ["light", "rem"]. Nightly cost drops by roughly 60-70%.
  2. Route dreaming to a cheap model. The Multi-Provider Engine in v4.3 lets you assign per-job providers. Add dreaming.provider = "openrouter" with a Haiku or GLM-5.1 model. You'll lose some reflection quality, but 90% of what REM produces is pattern-matching that cheap models handle fine.
  3. Cap the budget. Set dreaming.budget_usd_per_night = 0.50. If a cycle hits the cap (stuck loop, corpus explosion, whatever), the job aborts and logs instead of burning through your card. This is the one setting that would have saved every person who posted a $700 dreaming horror story.

A workable "conservative dreaming" block:

[dreaming]
enabled = true
schedule = "0 3 * * *"
phases = ["light", "rem"]
provider = "openrouter"
model = "anthropic/claude-haiku-4-5"
lookback_days = 3
budget_usd_per_night = 0.50
on_budget_exceeded = "abort"

Runs for roughly $0.05-0.15 a night on a typical agent. Same cadence, no Opus bill, hard ceiling if something goes wrong.

What this tells you about self-hosting right now

Dreaming isn't a scandal. It's a feature with real defaults that made sense under one billing model and stopped making sense when the billing model changed. The config is still sitting there doing what you told it to do.

That's the recurring theme of self-hosting OpenClaw in 2026. Every non-default you set up months ago is potentially a line item on your current bill. Heartbeats, cron reuse, auxiliary call generation, dreaming, memory file growth. Each of these was "free" under Claude subscriptions and each of them is real money now. And nobody's going to email you about it.

If you want the short version: run /dream status right now. If it says enabled, either turn it off or cap its budget before tonight's cron fires.

Or let someone else babysit the config

On TryOpenClaw.ai, dreaming is off unless you explicitly ask for it, and when you do it runs on cheap models with a hard budget cap by default. No 3 AM surprise bills, no tracking which skill silently flipped a config flag, no figuring out whether v4.5's REM fix shipped on your instance yet.

Flat $39/month. Your agent sleeps for free.

LV

Linas Valiukas

Founder of TryOpenClaw.ai. Software engineer writing about OpenClaw, self-hosting trade-offs, and what non-technical users actually need from an AI assistant. About the author →

Try it right now

This is just one example - OpenClaw adapts to whatever you need. Describe any workflow in plain language and it figures out the rest. Pay $1 for a full 24-hour trial, pick your messaging app, and start chatting with your own instance in under 60 seconds. Love it? $39/mo. Not for you? Walk away - we delete everything.

Try OpenClaw for $1

24h full access. No commitment. Cancel anytime.