#Agent burning $4/day in API costs

195 messages · Page 1 of 1 (latest)

night sentinel
#

Hi — I’ve deployed OpenClaw v2026.4.8 on a DigitalOcean server using Claude Haiku. The agent is running continuously in the background, creating and updating workspace files (AGENTS.md, HEARTBEAT.md, SOUL.md, IDENTITY.md, INBOX.md, CALENDAR_TODAY.md etc.) even when I’m not sending any messages.
This is resulting in ~$4/day in Anthropic API costs (281 requests, 2.2M input tokens, 3.2M output tokens in a single day) which is unsustainable.
I want Zoya to be purely reactive — only make API calls when I send a message. No background polling, no autonomous workspace writes, no heartbeat API calls.
Questions:
1. Is there a config flag to disable the autonomous agentic loop?
2. How do I stop the agent writing files to the workspace automatically?
3. Is there a “reactive only” mode that prevents background API calls?
4. What is the recommended config for a low-cost personal EA deployment?
My current config has Haiku as primary model. The costs started as soon as the agent connected to Telegram and Gmail. Happy to share my openclaw.json if helpful.
Thanks

dense horizonBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

random perchBOT
feral ploverBOT
#

Let me verify this against the actual docs/source so I don’t guess the wrong flag.

#

Yep, this is usually heartbeat + Gmail hooks, not a hidden autonomous “loop”.

  1. Disable heartbeats
openclaw config set agents.defaults.heartbeat.every "0m"

That is the main switch for stopping proactive agent turns. Docs: https://docs.openclaw.ai/gateway/heartbeat

  1. Stop Gmail-triggered wakes
    If you enabled Gmail PubSub/webhooks, new emails can wake the agent even when you send nothing.
  • remove/disable hooks.gmail / the Gmail preset, or
  • at minimum set OPENCLAW_SKIP_GMAIL_WATCHER=1

Docs: https://docs.openclaw.ai/automation/cron-jobs#gmail-pubsub-integration

  1. Check other background triggers
#
openclaw cron list
openclaw hooks list

Also disable these if present:

  • boot-md hook: openclaw hooks disable boot-md
  • dreaming: openclaw config set plugins.entries.memory-core.config.dreaming.enabled false
  1. Why it keeps writing workspace files
    Those writes usually happen during heartbeat/hook turns, often because AGENTS.md / HEARTBEAT.md tells the agent to maintain inbox/calendar files. The default templates are pretty proactive.

So the short answers are:

  • Q1: Yes, for heartbeats: agents.defaults.heartbeat.every: "0m"
  • Q2: No single “stop writing files” flag. Stop the triggers, and remove any standing instructions telling it to keep INBOX.md, CALENDAR_TODAY.md, etc. up to date
  • Q3: I don’t see a single global “reactive only” mode, but this combination gets you there:
    • heartbeat off
#
  • no cron jobs
    • no Gmail PubSub/hooks
    • dreaming off
    • optional: HEARTBEAT.md empty
  • Q4: Lowest-cost EA setup is chat-only: Telegram/Discord as ingress, no heartbeats, no Gmail PubSub, no cron, no dreaming, and use Gmail/Calendar on demand when you message the agent

Telegram by itself usually is not the expensive part. Gmail hooks + heartbeat are the usual burn sources.

If you paste your openclaw.json plus:

openclaw status --all
openclaw cron list
openclaw hooks list

I can point to the exact lines causing it.

night sentinel
#

Heartbeat is disabled

#

how do i paste the json file.. its too long to be pasted here

feral ploverBOT
#

That narrows it a lot.

If heartbeat is already off, my next two suspects are:

  • Gmail hooks / PubSub
  • stuck bootstrapping (BOOTSTRAP.md still present)

Why I’m pretty suspicious of Gmail: the docs say when hooks.enabled=true and hooks.gmail.account is set, the gateway auto-starts gog gmail watch serve on boot and renews it. That can wake the agent without any chat message. Docs: https://docs.openclaw.ai/automation/cron-jobs#gmail-pubsub-integration

And the repeated writes to AGENTS.md, SOUL.md, IDENTITY.md etc. fit a second issue too:
if BOOTSTRAP.md still exists, the agent is still in first-run/bootstrap mode. Docs say it should be deleted after completion and not come back. https://docs.openclaw.ai/start/bootstrapping

I’d check these next:

openclaw status --all
#
openclaw config get hooks --json
openclaw cron list
openclaw hooks list

What to look for:

  • hooks.enabled: true
  • a populated hooks.gmail
  • bootstrapping / bootstrap pending in openclaw status --all
  • any cron jobs
  • boot-md or other enabled hooks

If you want purely reactive, I’d do this:

  1. Disable/remove Gmail hooks
#
  • quickest test: set OPENCLAW_SKIP_GMAIL_WATCHER=1 and restart the gateway
    • cleaner long-term fix: remove/disable hooks.gmail (and webhook automation if you do not need it)
  1. Check for stuck bootstrap

    • if BOOTSTRAP.md still exists in the workspace, that’s wrong for a finished setup
    • once you’ve confirmed the workspace is seeded, set:
    openclaw config set agents.defaults.skipBootstrap true
    

    That stops automatic bootstrap file creation for pre-seeded workspaces

  2. Verify no other background runners

    • openclaw cron list
    • dreaming off if enabled

The Gmail timing is a big clue here. Telegram alone usually does not cause this kind of background churn.

#

If you paste:

  • openclaw status --all
  • openclaw config get hooks --json

…I can probably tell you the exact culprit pretty quickly.

#

No need to paste the whole file, and in a public thread I’d actually prefer you don’t.

The useful bits are much smaller. Please paste these instead:

openclaw config get hooks --json
openclaw cron list
openclaw hooks list
openclaw status --all

If you want, also:

openclaw config get plugins.entries.memory-core.config.dreaming --json
openclaw config get agents.defaults.skipBootstrap --json
#

If any of those contain secrets, just replace values with REDACTED, especially:

  • API keys
  • bot tokens
  • gateway.auth.token
  • hooks.token
  • hooks.gmail.pushToken

If Discord still complains about length, easiest options are:

  • paste them in separate messages
  • upload a redacted .txt file
  • paste just the hooks section first, since that’s the most suspicious one right now

Honestly, openclaw config get hooks --json is the one I want most.

night sentinel
#

{
"enabled": true,
"path": "/hooks",
"token": "OPENCLAW_REDACTED",
"presets": [],
"internal": {
"entries": {
"boot-md": {
"enabled": false
}
}
}
}

feral ploverBOT
#

Nice, that actually rules out one big suspect.

This does not look like Gmail PubSub hooks:

  • no hooks.gmail
  • no preset
  • boot-md is off

So hooks probably isn’t what’s burning tokens here.

The next two things I’d check are:

  1. stuck bootstrapping

    • this would explain repeated writes to AGENTS.md, SOUL.md, IDENTITY.md, etc.
  2. cron / scheduled jobs

    • this would explain background agent turns even with heartbeat off
#

Can you paste these next?

openclaw status --all
openclaw cron list
openclaw config get plugins.entries.memory-core.config.dreaming --json

If you want a super fast manual check too:

ls ~/.openclaw/workspace/BOOTSTRAP.md

If that file still exists, that’s a huge clue, because it means the agent may still be in bootstrap mode.

night sentinel
#

┌─────────────────┬────────────────────────────────────────────────────────────┐
│ Item │ Value │
├─────────────────┼────────────────────────────────────────────────────────────┤
│ Version │ 2026.4.9 │
│ OS │ linux 6.8.0-107-generic (x64) │
│ Node │ 22.22.2 │
│ Config │ ~/.openclaw/openclaw.json │
│ Dashboard │ http://144.126.192.250:18789/
│ Tailscale │ off │
│ Channel │ stable (default) │
│ Update │ pnpm · npm update 2026.4.12 │
│ Gateway │ local · ws://127.0.0.1:18789 (local loopback) · reachable │
│ │ 78ms · auth token · ubuntu-s-1vcpu-1gb-lon1-01 (144.126. │
│ │ 192.250) app 2026.4.9 linux 6.8.0-107-generic │
│ Security │ Run: openclaw security audit --deep │
│ Gateway self │ unknown │
│ Gateway service │ systemd installed · enabled · running (pid 216683, state │
│ │ active) │
│ Node service │ systemd not installed │
│ Agents │ 1 total · 0 bootstrapping · 0 active · 4 sessions │
│ Secrets │ none │
└─────────────────┴────────────────────────────────────────────────────────────┘

feral ploverBOT
#

Perfect, this helps a lot.

This rules out bootstrapping too:

  • 0 bootstrapping
  • hooks look clean
  • boot-md is off

So the main suspect now is scheduled automation, especially:

  • cron jobs
  • memory dreaming (this creates a managed cron job when enabled)

Can you paste these two next?

openclaw cron list
#
openclaw config get plugins.entries.memory-core.config.dreaming --json

Why I’m leaning that way:

  • INBOX.md / CALENDAR_TODAY.md really smells like the agent is running a scheduled “check inbox / check calendar” workflow
  • heartbeat is off, hooks look harmless, bootstrapping is done
  • so something else is still waking the agent on a schedule

If cron list comes back non-empty, I think we’ve probably found it.

night sentinel
#

I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet.



ID Name Schedule Next Last Status Target Agent ID Model
c91bfae1-d2de-4c65-9491-a64049277d81 Morning Briefing — We... cron 30 8 * * 1-5 @ Europe/Lo... in 12h 11h ago ok session:agent:main:telegram:direct:6594797802 main

feral ploverBOT
#

Aha, yep, that’s definitely one of the culprits.

That cron is a proactive job targeting your Telegram direct session:

  • Name: Morning Briefing ...
  • Target: session:agent:main:telegram:direct:...

So if you want reactive-only, disable or remove it:

openclaw cron disable c91bfae1-d2de-4c65-9491-a64049277d81

or just delete it:

#
openclaw cron rm c91bfae1-d2de-4c65-9491-a64049277d81

That said, one weekday morning cron alone should not explain 281 requests/day, so I still think there’s at least one more background source.

Please paste this next:

openclaw config get plugins.entries.memory-core.config.dreaming --json

And if you want to inspect what that cron has been doing:

openclaw cron runs --id c91bfae1-d2de-4c65-9491-a64049277d81 --limit 10
#

We’ve ruled out:

  • heartbeat
  • hooks/Gmail hooks
  • bootstrapping

So the remaining suspects are basically:

  • this cron job
  • dreaming
  • possibly something in the cron run itself causing lots of follow-up tool/model calls
night sentinel
#

re.config.dreaming --json
{
"enabled": false
}

feral ploverBOT
#

Great, dreaming is off too.

So at this point we’ve ruled out:

  • heartbeat
  • hooks / Gmail hooks
  • bootstrapping
  • dreaming

That leaves the Morning Briefing cron as the one confirmed proactive feature.

If you want pure reactive-only, I’d remove it now:

openclaw cron rm c91bfae1-d2de-4c65-9491-a64049277d81
#

or disable it first if you want to test:

openclaw cron disable c91bfae1-d2de-4c65-9491-a64049277d81

Also, I’d search your workspace for the instructions behind those file writes:

grep -Rni "Morning Briefing\|INBOX.md\|CALENDAR_TODAY.md" ~/.openclaw/workspace

My current read is:

  • there does not seem to be a hidden “autonomous loop” flag you forgot
  • the behavior is coming from configured automation / standing instructions
  • the cron is definitely part of it
#

One honest caveat: a single once-per-workday cron still feels too small for 281 requests/day. So if the burn continues after you disable/remove that cron, then I’d want these next:

openclaw cron runs --id c91bfae1-d2de-4c65-9491-a64049277d81 --limit 20
openclaw logs --follow

If it still keeps happening after the cron is gone, I’d start treating that as possible bug territory.

night sentinel
#

{
"entries": [
{
"ts": 1776069052699,
"jobId": "c91bfae1-d2de-4c65-9491-a64049277d81",
"action": "finished",
"status": "ok",
"summary": "🌅 Good morning, Boss!\n\n📅 Today: 1 event at 2:30pm — Gym trial with Elisa @ Fitness First. Go get those endorphins! 💪\n\n📧 Inbox: 12 unread (cleaner than yesterday)\n\n🚨 Action needed:\n→ US Visa email (Mar 10) — "Action Required" — overdue, needs your attention\n\n🔵 FYI:\n• Sahyadri School — Performing Arts (already handled with Pratibha)\n• Pratibha — ICC Women's T20 World Cup invite (July 5)\n• Ayurveda courses (Pratibha's coursework)\n\n🎯 Top 3 today:\n1. Open & handle US Visa email (urgent)\n2. Gym session this afternoon\n3. Quick inbox cleanup\n\nNo board/investor emails. No Ecolibrium team items. You're clear to focus.\n\nHave a great Monday! \n\n—Zoya",

feral ploverBOT
#

Yep, this confirms it.

That cron is doing exactly the proactive EA behavior:

  • reading calendar
  • reading inbox
  • composing a morning briefing
  • delivering it to your Telegram session

So for your original question, the answer is basically:

this is not a hidden default autonomous loop, it is configured automation.

If you want Zoya to be purely reactive, remove that job:

#
openclaw cron rm c91bfae1-d2de-4c65-9491-a64049277d81

I’d also search the workspace for the instruction/prompt that led to it, so it does not get recreated later:

grep -Rni "Morning Briefing\|Good morning\|INBOX.md\|CALENDAR_TODAY.md" ~/.openclaw/workspace

My recommendation for a low-cost reactive setup is now:

  • heartbeat: off
  • dreaming: off
  • no proactive cron jobs
  • no Gmail hooks
  • no standing orders telling it to maintain inbox/calendar files
#
  • use Gmail/Calendar only when you message it

One important note: this cron still feels too small to explain 281 requests/day by itself.

So I’d do this in order:

  1. delete the cron
  2. watch usage for a few hours / a day
  3. if background requests continue, grab logs around one surprise run:
    openclaw logs --follow
    

If it still burns tokens after that cron is gone, I’d start calling it likely bug territory. If you hit that point, please file a GitHub issue with redacted logs: https://github.com/openclaw/openclaw/issues

night sentinel
#

{
"ok": true,
"removed": true
}

feral ploverBOT
#

Nice, that removes the one confirmed proactive trigger 👍

What I’d expect now:

  • no more scheduled morning briefings
  • no more background inbox/calendar scans from that cron
  • token usage should stay flat unless you message the agent

A couple quick checks:

openclaw cron list

That should now be empty.

And I’d still search the workspace once, just so the agent does not recreate the same behavior later:

#
grep -Rni "Morning Briefing\|Good morning\|INBOX.md\|CALENDAR_TODAY.md" ~/.openclaw/workspace

If it still burns tokens or writes files with no user input after this, that’s no longer “expected automation” in my book. Then the next step is:

openclaw logs --follow

and wait for one surprise run, then paste the relevant lines.

If this ends up fixing it, glad we caught it. If it does, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow indexes it for future folks.

night sentinel
#

No cron jobs.

feral ploverBOT
#

Nice. Then your config is basically down to reactive-only now.

A small gotcha: Anthropic usage/billing won’t instantly “reset”, so the important question is:

does it keep increasing from now without any new messages?

If no, then we likely found it and you’re good.

If yes, then that’s no longer expected from the config you’ve shown. Next thing I’d check is whether there’s a lingering background task or some bug:

openclaw tasks list --status running
openclaw tasks list

And if it still wakes unexpectedly, capture the moment with:

#
openclaw logs --follow

Then wait for one surprise run and paste the relevant lines.

At this point, with:

  • heartbeat off
  • no cron jobs
  • dreaming off
  • no Gmail hooks
  • no bootstrapping

…there really shouldn’t be ongoing autonomous activity anymore. If there is, I’d treat that as suspicious / likely buggy.

night sentinel
#

🦞 OpenClaw 2026.4.9 (0512059)
If you're lost, run doctor; if you're brave, run prod; if you're wise, run tests.

Background tasks: 7
Task pressure: 0 queued · 0 running · 6 issues
Task Kind Status Delivery Run Child Session Summary
be281795-… cron succeeded not_applicable cron:c91b… agent:main:telegram:direct:65947978… 🌅 Good morning, Boss! 📅 Today: 1 event at 2:30pm — Gym trial with Eli…
a0516b8f-… cron failed not_applicable cron:18ba… n/a Perfect. Here's Chintan's Saturday Morning Briefing: --- 🌅 **Good morning,…
4a81de49-… cron failed not_applicable cron:c8b6… n/a --- Boss, here's your briefing for Friday, April 10th: 🌅 **Starting the da…

feral ploverBOT
#

This is actually the clearest signal yet.

What you pasted shows:

  • 0 queued
  • 0 running
  • the visible task records are cron tasks
  • their summaries are all variants of morning briefing / inbox / calendar behavior

So those entries are historical task ledger records, not proof that something is still actively running right now.

And they line up almost perfectly with what you described:

  • proactive briefings
  • inbox/calendar reads
  • assistant-style summaries

So my read now is:

#

the token burn came from cron-driven briefings, not from some hidden always-on autonomous loop.

Because:

  • heartbeat is off
  • hooks look clean
  • dreaming is off
  • bootstrapping is done
  • no cron jobs remain
  • background tasks show 0 running

At this point I’d do just one thing:

wait and watch whether the usage keeps increasing from now on without any new messages

If it stays flat, I think you’ve found it.

If it still climbs, then something unexpected is waking the agent, and I’d want:

#
openclaw logs --follow

and the next surprise run.

But honestly, this latest output makes me think you caught the actual cause. If it stays quiet now, you’re probably good.

night sentinel
#

how do i then schedule a cron which does not generate so much burn ?

feral ploverBOT
#

Let me verify the low-burn cron knobs so I point you to the right ones, not made-up ones.

#

Yep, you can make cron much cheaper.

The big levers are:

  1. Use an isolated session

    • don’t run the cron against your main chat session
    • that avoids dragging full chat history into every run
  2. Use light context

    • skips workspace bootstrap injection for isolated cron runs
  3. Use a cheaper model + thinking off

    • give the cron its own low-cost model override
    • keep reasoning off unless you truly need it
  4. Make the prompt narrow

    • “next 2 events + urgent unread emails”
#
  • max 5 bullets
    • do not write files
    • do not update memory/workspace

A good low-burn pattern is:

openclaw cron add \
  --name "Cheap morning brief" \
  --cron "30 8 * * 1-5" \
  --session isolated \
  --light-context \
  --model "<cheap-allowed-model>" \
  --thinking off \
  --announce --channel telegram --to "<your-chat>" \
  --message "Check only urgent unread emails and the next 2 calendar events. Reply in max 5 short bullets. Do not edit any workspace files. Do not update memory. If nothing is urgent, reply 'Nothing urgent.'"
#

What I would avoid for low cost:

  • --session main
  • open-ended prompts like “review everything”
  • instructions to maintain INBOX.md, CALENDAR_TODAY.md, memory, etc.
  • long friendly prose outputs

If you want, paste the cron command you want to run, and I can help you rewrite it into a cheap version.

night sentinel
#

can you help me in accessing the control UI from a mac where the gatewy is hosted on digitalocean

feral ploverBOT
#

Yep. The easiest, safest way is an SSH tunnel from your Mac to the DigitalOcean box.

Recommended: SSH tunnel

On your Mac:

ssh -N -L 18789:127.0.0.1:18789 <user>@<your-droplet-ip>

Example:

ssh -N -L 18789:127.0.0.1:18789 root@144.126.192.250

Then open this in your Mac browser:

#
http://127.0.0.1:18789/

If Control UI asks for auth, paste the configured:

  • gateway.auth.token, or
  • gateway.auth.password

I’d use this over exposing :18789 directly on the public internet.

Good long-term option: Tailscale Serve
If you want cleaner remote access later, Tailscale is the nicer setup. Docs: https://docs.openclaw.ai/web/dashboard

The remote-auth section from the FAQ is here too: https://docs.openclaw.ai/start/faq

If you want, I can give you the exact Mac command + what to check on the DO server step by step.

night sentinel
#

agent:main:main
channel:heartbeat · agent:main · provider:anthropic · model:claude-haiku-4-5-20251001 · msgs:114 · tools:38 · errors:0 · dur:19h 41m

#

agent:main:telegram:direct:6594797802
channel:telegram · agent:main · provider:anthropic · model:claude-haiku-4-5-20251001 · msgs:48 · tools:14 · errors:0 · dur:12h

feral ploverBOT
#

Aha, that’s the smoking gun.

channel:heartbeat means the agent is still getting heartbeat turns.

And 114 msgs over ~19h absolutely matches the kind of burn you were seeing. So heartbeat is not effectively disabled, even if one config value looked off earlier.

Most likely causes:

  • a per-agent heartbeat override is still enabled under agents.list[0].heartbeat
  • the gateway needs a restart after the config change
  • there’s an old/legacy heartbeat config shape still hanging around

I’d check these right now:

openclaw config get agents.defaults.heartbeat --json
#
openclaw config get agents.list --json

Since you only have one agent, if agents.list[0].heartbeat exists, remove it:

openclaw config unset agents.list[0].heartbeat
openclaw config set agents.defaults.heartbeat.every "0m"
openclaw gateway restart

Then verify again.

If you want one extra sanity check after restart:

#
openclaw status --all

and look for heartbeat/session growth stopping.

So, updating my diagnosis: the morning briefing cron was part of it, but heartbeat is very likely the main burn source.

#

Yep, this one is normal.

agent:main:telegram:direct:...
just means your Telegram DM session with the main agent.

The suspicious one was the other session you pasted:

  • channel:heartbeat

That is the one that points to background wakeups.

So I would not chase the Telegram session here. I’d stay focused on the heartbeat config and restart.

Can you paste these exactly:

#
openclaw config get agents.defaults.heartbeat --json
openclaw config get agents.list --json

If agents.list[0].heartbeat exists, that’s probably the culprit.

night sentinel
#

what does "0m" mean ? never or infinite ?

feral ploverBOT
#

0m means disabled / never for heartbeat.

So:

agents: {
  defaults: {
    heartbeat: {
      every: "0m"
    }
  }
}

= do not run heartbeat at all

Not infinite, the opposite.

night sentinel
#

Todays Cost if $0.47

#

and the Details are as below

#

agent:main:telegram:direct:6594797802
channel:telegram · agent:main · provider:anthropic · model:claude-haiku-4-5-20251001 · msgs:13 · tools:5 · errors:0 · dur:1h 51m

feral ploverBOT
#

Nice, that’s a huge drop 🎉

Going from about $4/day → $0.47/day says we were definitely chasing the right stuff.

So the likely big hitters were:

  • heartbeat activity
  • proactive cron briefing(s)
  • maybe overly broad scheduled context

If you want to squeeze it down even further, the next knobs are:

  • keep heartbeat at 0m
  • keep cron jobs off unless they’re truly needed
  • when you do use cron, use:
    • --session isolated
    • --light-context
    • --thinking off
#
  • a cheaper cron-specific model
    • very tight prompts, no file writes

Glad we caught it. If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow indexes it for the next person.

#

Yep, send them over.

Most useful would be either:

  • the per-session / per-feature cost breakdown, or
  • the new config snippet around heartbeat + cron + agent settings

If there are secrets, just redact them like before.

#

Yep, this one looks normal now.

  • channel:telegram
  • msgs:13
  • tools:5
  • dur:1h 51m

That looks like ordinary usage from the Telegram chat, not runaway background automation.

So I think the situation is now:

  • the weird burn was from heartbeat / proactive cron behavior
  • the remaining $0.47 is mostly just real chat usage

If those 13 messages were actually you talking to the agent today, then nothing looks suspicious in that breakdown.

If you want to cut it further from here, the next savings are just normal stuff:

#
  • shorter prompts
  • fewer file-writing workflows
  • fewer tool-heavy turns
  • a cheaper default model for normal chat

But the scary always-on behavior looks largely gone now.

night sentinel
#

i sent maybe 2-3 messages today.. that's not normal usage...if i really use it property, i am assuming it would be maybe $3-$4 again..

feral ploverBOT
#

Yep, I agree, $0.47 for 2–3 human messages is still heavier than it should be.

At this point, I think the problem is less “background automation” and more context weight per turn.

OpenClaw can still be expensive if each reply is carrying:

  • big AGENTS.md / SOUL.md / USER.md / IDENTITY.md
  • lots of tool schema overhead
  • extra file reads/workflows on every message

The best next step is:

/context detail

That will show what’s actually being injected and what is costing tokens.

#

The two biggest next optimizations I’d try are:

  1. Skip re-injecting workspace files on follow-up turns

    openclaw config set agents.defaults.contextInjection "continuation-skip"
    
  2. Trim the bootstrap files hard
    Especially:

    • AGENTS.md
    • SOUL.md
    • USER.md
    • IDENTITY.md

If those are long or chatty, you pay for them over and over.

A few practical rules for low-cost usage:

#
  • keep workspace instruction files short
  • avoid “always check inbox/calendar/files” style instructions
  • avoid file-writing workflows unless needed
  • keep replies concise
  • use isolated/light-context cron jobs for anything scheduled

If you paste the output of /context detail, I can help you spot exactly what to cut.

night sentinel
#

-bash: /context: No such file or directory

#

am i supposed to type /context detail in telegram ?

feral ploverBOT
#

Yep, exactly, type:

/context detail

in the Telegram chat with Zoya.

That’s the best place, because we want the context breakdown for the same session that’s costing you money.

If it’s too long, paste:

  • the workspace files section
  • the tool/schema section
  • the totals

and I’ll help trim it down.

night sentinel
#

The Message is too long so i am going to paste it in 2 parts

feral ploverBOT
#

Perfect, do that.

If you can, label them:

  • Part 1/2
  • Part 2/2

That’ll make it easier for me to read cleanly.

#

Got it, send the actual Part 1/2 content and then Part 2/2. I’m ready.

#

I think Discord is eating the payload, I’m only seeing the label, not the actual content.

Try one of these:

  • paste it inside a triple-backtick code block
  • send it as a .txt attachment
  • paste just the workspace files section first

Even one chunk of the real /context detail output is enough.

night sentinel
#

Part 1/2 : Workspace: /root/.openclaw/workspace
Bootstrap max/file: 20,000 chars
Bootstrap max/total: 150,000 chars
Sandbox: mode=off sandboxed=false
System prompt (run): 25,231 chars (~6,308 tok) (Project Context 12,028 chars (~3,007 tok))
Injected workspace files:

AGENTS.md: OK | raw 7,809 chars (~1,953 tok) | injected 7,809 chars (~1,953 tok)
SOUL.md: OK | raw 1,738 chars (~435 tok) | injected 1,738 chars (~435 tok)
TOOLS.md: OK | raw 850 chars (~213 tok) | injected 850 chars (~213 tok)
IDENTITY.md: OK | raw 633 chars (~159 tok) | injected 633 chars (~159 tok)
USER.md: OK | raw 474 chars (~119 tok) | injected 474 chars (~119 tok)
BOOTSTRAP.md: MISSING | raw 0 | injected 0
Skills list (system prompt text): 3,413 chars (~854 tok) (7 skills)
Skills: gog, healthcheck, node-connect, skill-creator, tmux, weather, gmail
Top skills (prompt entry size):
• skill-creator: 750 chars (~188 tok)
• node-connect: 532 chars (~133 tok)
• healthcheck: 482 chars (~121 tok)
• weather: 407 chars (~102 tok)
• gmail: 395 chars (~99 tok)
• tmux: 246 chars (~62 tok)
• gog: 214 chars (~54 tok)

feral ploverBOT
#

This is already super helpful.

Even from Part 1, two obvious cost drivers jump out:

  • AGENTS.md = about 1,953 tokens
  • skills list = about 854 tokens

So before we even see Part 2, you’re already burning roughly 2.8k tokens just on those two.

Please send Part 2/2, especially if it includes:

  • tool/schema sizes
  • system prompt breakdown
  • totals

My early read: your workspace + skills are definitely heavier than a low-cost setup should be.

night sentinel
#

Part 2/2 : Tool list (system prompt text): 0 chars (~0 tok)
Tool schemas (JSON): 14,113 chars (~3,529 tok) (counts toward context; not shown as text)
Tools: read, edit, write, exec, process, cron, sessions_list, sessions_history, sessions_send, sessions_yield, sessions_spawn, subagents, session_status, web_search, web_fetch, image, memory_search, memory_get
Top tools (schema size):
• cron: 6,700 chars (~1,675 tok)
• sessions_spawn: 1,333 chars (~334 tok)
• exec: 1,098 chars (~275 tok)
• process: 961 chars (~241 tok)
• edit: 834 chars (~209 tok)
• web_search: 446 chars (~112 tok)
• web_fetch: 374 chars (~94 tok)
• image: 342 chars (~86 tok)
• read: 304 chars (~76 tok)
• sessions_send: 274 chars (~69 tok)
• memory_search: 260 chars (~65 tok)
• memory_get: 249 chars (~63 tok)
• write: 225 chars (~57 tok)
• sessions_list: 212 chars (~53 tok)
• subagents: 191 chars (~48 tok)
• sessions_history: 161 chars (~41 tok)
• session_status: 89 chars (~23 tok)
• sessions_yield: 60 chars (~15 tok)
Top tools (summary text size):
• cron: 3,726 chars (~932 tok)
• exec: 539 chars (~135 tok)
• process: 416 chars (~104 tok)
• memory_search: 385 chars (~97 tok)
• session_status: 336 chars (~84 tok)
• edit: 326 chars (~82 tok)
• sessions_spawn: 302 chars (~76 tok)
• read: 298 chars (~75 tok)
• image: 260 chars (~65 tok)
• sessions_send: 208 chars (~52 tok)
• memory_get: 207 chars (~52 tok)
• sessions_history: 180 chars (~45 tok)
• sessions_list: 177 chars (~45 tok)
• web_fetch: 129 chars (~33 tok)
• write: 127 chars (~32 tok)
• subagents: 105 chars (~27 tok)
• sessions_yield: 97 chars (~25 tok)
• web_search: 93 chars (~24 tok)
Tools (param count):
• sessions_spawn: 18 params
• cron: 13 params
• exec: 12 params
• process: 12 params
• image: 6 params
• sessions_send: 5 params
• sessions_list: 4 params
• subagents: 4 params
• web_search: 4 params
• memory_search: 4 params
• memory_get: 4 params
• read: 3 params
• sessions_history: 3 params
• web_fetch: 3 params
• edit: 2 params

#

Also, i missed this part : • write: 2 params
• session_status: 2 params
• sessions_yield: 1 params
Tracked prompt estimate: 39,344 chars (~9,836 tok)
Actual context usage (cached): 144,722 tok
Untracked provider/runtime overhead: ~134,886 tok
Session tokens (cached): 144,722 total / ctx=200,000
Inline shortcut: a command token inside normal text (e.g. “hey /status”) that runs immediately (allowlisted senders only) and is stripped before the model sees the remaining message.

feral ploverBOT
#

Okay, now we can see exactly why 2–3 messages still cost real money.

Your normal turn is starting with about:

  • System prompt: ~6,308 tokens
  • before your actual message really gets going

That is pretty chunky.

Biggest offenders:

  • AGENTS.md = ~1,953 tok
  • skills list = ~854 tok
  • cron tool schema = ~1,675 tok
  • SOUL.md = ~435 tok
  • sessions_spawn / exec / process also add noticeable weight

So yes, this is now mostly a prompt footprint problem.

#

What I would change first

1. Turn on continuation skip

This is the easiest win.

openclaw config set agents.defaults.contextInjection "continuation-skip"

That stops re-injecting the whole workspace on safe follow-up turns.

2. Cut the skill list hard

For a personal EA, I would seriously question these:

  • skill-creator
  • node-connect
  • tmux
  • healthcheck
#

They look like pure overhead here.

Since you have one agent, set an explicit allowlist for only what you actually use, for example:

openclaw config set agents.list[0].skills '["gog","weather","gmail"]' --strict-json

Adjust that list down even further if you do not need all three.

3. Deny cron now that you do not want proactive scheduling

cron alone is costing you ~1.7k tokens of schema weight.

openclaw config set tools.deny '["cron"]' --strict-json
#

If you also do not use subagents/session spawning, I’d consider:

openclaw config set tools.deny '["cron","sessions_spawn","subagents","sessions_yield"]' --strict-json

4. Shrink AGENTS.md

AGENTS.md at ~7.8k chars is too big for a cheap chat loop.

I’d try to get it down to a short bullet list:

  • what the agent is
  • what it should help with
  • what it should avoid
  • a few key preferences

Not a long narrative.

#

5. Trim SOUL.md, TOOLS.md, IDENTITY.md, USER.md

Keep them, but make them lean. Right now they are adding real cost every turn.

My blunt read

You are paying for a capable, general-purpose agent shell on every message.

If you want this to feel cheap, you want a boring, stripped-down Telegram EA:

  • tiny AGENTS/SOUL
  • tiny skill list
  • no cron tool
  • no subagent tools
  • continuation-skip on

If you want, paste your AGENTS.md and I can help you cut it down without breaking the useful parts.

#

Ah, this is the real killer now.

Actual context usage (cached): 144,722 tok
Session tokens (cached): 144,722 / 200,000

So your Telegram session is carrying around a massive old transcript.

That means even if heartbeat/cron are now fixed, every new message is still dragging the history of all that prior activity with it.

What to do right now

In the Telegram chat with Zoya, send:

#
/new

or

/reset

That gives you a fresh session.

If you want to preserve some context instead of nuking it completely, use:

/compact
#

But honestly, with a session already at ~145k tokens, I’d probably do /new.

Why this matters

You basically have two cost problems:

  1. big per-turn base prompt

    • AGENTS
    • skills
    • tool schemas
  2. huge carried-over session history

    • and right now this is the bigger immediate problem

So my order of operations would be:

  1. /new in Telegram
#
  1. keep heartbeat disabled
  2. keep cron removed
  3. turn on:
    openclaw config set agents.defaults.contextInjection "continuation-skip"
    
  4. trim AGENTS / skills / tools

I’d expect /new alone to make a very noticeable difference.

night sentinel
#

Fresh start. You haven't filled in your details yet—IDENTITY.md and USER.md are still templates. I'm ready to help. What would you like to work on?

feral ploverBOT
#

Perfect, that means the fresh session worked.

That message is expected after /new, it is not the bad background behavior coming back. It’s just the agent noticing that IDENTITY.md and USER.md are still mostly template/default content.

So at this point:

  • the old bloated session is gone
  • you are on a clean session now
  • next thing I’d do is run /context detail again in Telegram and compare it with the old numbers

What I’d expect:

  • session tokens should be way lower now
  • per-message cost should drop noticeably

And yes, for a cheap setup, I’d keep these files very short:

  • AGENTS.md
  • SOUL.md
#
  • IDENTITY.md
  • USER.md

If you want, next I can help you turn those files into a lean low-cost setup instead of the verbose default/template style.

night sentinel
#

I have got Promt.txt in there, why is it not ussing that ?

feral ploverBOT
#

Because OpenClaw does not auto-load arbitrary files from the workspace.

It only auto-injects specific bootstrap files, like:

  • AGENTS.md
  • SOUL.md
  • TOOLS.md
  • IDENTITY.md
  • USER.md
  • HEARTBEAT.md
  • BOOTSTRAP.md
  • MEMORY.md (when present)

So Promt.txt is basically invisible unless:

  • you tell the agent to read it explicitly, or
  • you move that content into one of the recognized files, usually AGENTS.md
#

For persistent instructions, the right place is almost always:

  • AGENTS.md for behavior/instructions
  • SOUL.md for tone/persona
  • USER.md for info about you

So short answer: Promt.txt is not used because it is not a recognized injected workspace file.

night sentinel
#

I need your Maton API key to send emails via Gmail. Do you have one set up, or should I create a connection first? If you don't have a Maton account yet, I can walk you through setting it up—but you'll need to authorize Gmail access first.

Alternatively, if you have another email method available (like a mail server configured locally), let me know and I can use that instead. looks like she has forgotten everything

feral ploverBOT
#

Yep, exactly, that’s what happened.

She did not really “remember” your setup from Promt.txt, because Promt.txt is not loaded by OpenClaw.

So after /new:

  • the bloated old session got wiped, good
  • but your real custom prompt was also not in context
  • IDENTITY.md / USER.md are still templates
  • so now the agent is falling back to generic behavior and even hallucinating stuff like “Maton API key”

I checked the OpenClaw docs/source, and I do not see Maton as a standard Gmail path. So that part is not something you should trust.

The fix

Move the important parts of your Promt.txt into the real injected files, mainly:

#
  • AGENTS.md for behavior/rules
  • USER.md for who you are
  • IDENTITY.md for who Zoya is
  • SOUL.md for tone/persona

For your use case, I’d put something like this in AGENTS.md

# AGENTS.md

You are Zoya, a personal executive assistant for <name>.

Rules:
- Be reactive by default.
- Do not create cron jobs, heartbeats, or background tasks unless explicitly asked.
- Do not edit workspace files unless explicitly asked.
#
- Use the existing OpenClaw/Gmail setup if available.
- Do not invent external services or API keys.
- If Gmail access is missing, say exactly what is missing.
- Keep replies concise and practical.

Then in USER.md, put a tiny profile of the user.

After that, do:

/new

again, so the clean session starts with the right instructions this time.

#

If you want, paste your current Promt.txt and I’ll convert it into a lean AGENTS.md + USER.md version that is cheaper and actually gets loaded.

night sentinel
#

how do i upload the file here ?

feral ploverBOT
#

Easiest way in Discord:

  • drag the file into this thread, or
  • click the + / paperclip button next to the message box
  • choose the file
  • send it

A .txt or .md file is perfect.

Before uploading, please redact secrets if they’re in there:

  • API keys
  • tokens
  • passwords
  • email secrets

If Discord refuses the file type, either:

#
  • rename it to something.txt, or
  • zip it first and upload the .zip

If you upload Promt.txt, I can turn it into a lean AGENTS.md / USER.md setup.

night sentinel
#

/paperclip

feral ploverBOT
#

Not a slash command 😄

Just use the Discord UI:

  • click the + button next to the message box, or
  • drag the file into the thread

Then send it normally.

night sentinel
#

when i click the + button its asking me to choose an app

feral ploverBOT
#

Ah, got it, Discord UI being Discord 😅

Try one of these instead:

  • drag the file directly into the thread
  • or copy the file in Finder, then paste it into Discord
  • or in the + menu, look for Upload a File if it appears below the app list

If none of that works, easiest fallback is:

  • rename it to Promt.txt
  • open it locally
  • paste the contents here in chunks inside triple backticks

Drag-and-drop is usually the least annoying path.

night sentinel
#

well the Drag and Drop is also not working

feral ploverBOT
#

Yeah, let’s stop fighting Discord 😅

Simplest fallback:

  • open Promt.txt
  • copy 200-400 lines at a time
  • paste here inside triple backticks

Like this:

[paste chunk here]

If it’s very long, just send:

  • chunk 1
  • chunk 2
#
  • chunk 3

Honestly, I probably only need the main instruction part, not every line.

If you want, start with just the first chunk and I’ll tell you what can move into:

  • AGENTS.md
  • USER.md
  • SOUL.md
night sentinel
#

[You are Zoya, Executive Assistant to Chintan Soni
You have your own email: zoya.soni.ea@gmail.com
You manage Chintan's personal Gmail (sonichintan@gmail.com) and Google Calendar.
Microsoft Outlook, Calendar and Teams integrations are coming soon.

================================================================================
PERSONALITY & COMMUNICATION STYLE

You are sharp, warm, proactive and highly professional — like a world class EA
who anticipates needs before they arise.

  • Confident and warm — never robotic or overly formal
  • Proactive — flag issues, suggest actions, think ahead
  • Concise — this is Telegram, not email. Keep replies short and punchy
  • Personal — address Chintan by first name occasionally
  • Honest — if you do not know something say so clearly
  • Never say "I cannot do that" without offering an alternative
  • Never mention technical issues, integrations or system errors to Chintan
  • Never ask Chintan to "trigger a fetch" or "check the integration"
  • Always give a direct useful answer even if data shows nothing
  • Use emojis naturally: ✅ ❌ 📅 📧 🚨 ⚡ 🎯 💡

================================================================================
CHINTAN'S PERSONAL CONTEXT

Full name: Chintan Soni
Company: Ecolibrium (energy and sustainability tech, offices in USA, UK, India, Singapore)
Personal email: sonichintan@gmail.com
Work email: chintan@ecolibrium.io
Partner: Pratibha Soni
Timezone: GMT

Personal interests: yoga, movies, travel
Pratibha's birthday: 7th July — remind him one week before any important dates
Amyra's Birthday: 31 October 2010
Aanya's Birthday: 30 November 2004
Chintan and Pratibha's Wedding Anniversary: 26 December 2001
]

feral ploverBOT
#

This helps a lot, and I can already see why it behaved the way it did.

Quick heads-up: you pasted private personal info in a public thread. If you can still edit/redact that message, I would. 👍

What in this prompt is causing trouble

A few lines are pushing the agent toward expensive / overconfident / proactive behavior:

  • proactive
  • anticipates needs before they arise
  • flag issues, suggest actions, think ahead
  • never mention technical issues
  • always give a direct useful answer even if data shows nothing

Those are great for a human EA, but for an LLM they tend to cause:

  • background-ish behavior
#
  • confidence when it should say “I don’t have that”
  • made-up things like the Maton message
  • more tool/file usage

Better structure for OpenClaw

Don’t keep this as one giant master prompt. Split it up and trim it.

AGENTS.md

Keep only behavior and hard rules:

# AGENTS.md

You are Zoya, a reactive executive assistant.
#
Rules:
- Be warm, concise, and practical.
- Telegram replies should be short.
- Use existing Gmail/Calendar access when available.
- Do not invent APIs, services, or integrations.
- Do not create cron jobs, heartbeats, reminders, or background tasks unless explicitly asked.
- Do not edit workspace files unless explicitly asked.
- If data is missing, say so clearly and offer the next best step.

USER.md

Put the personal facts here, briefly:

# USER.md
#

Name: <name>
Timezone: <timezone>
Primary email: <email>
Work email: <email>
Partner: <name>

Important dates:
- <date>: <event>
- <date>: <event>

IDENTITY.md

Very short:

#
# IDENTITY.md

Name: Zoya
Role: Executive assistant
Style: warm, sharp, concise

SOUL.md

Tone only, not operating rules:

# SOUL.md

Warm, calm, professional.
Short Telegram-first replies.
#
Helpful without being pushy.
Use emojis sparingly.

What I would remove entirely

  • “Outlook/Teams integrations are coming soon”
  • long personality prose
  • “never mention technical issues”
  • “always give a direct useful answer even if data shows nothing”

That last one is especially dangerous. It encourages hallucination.

My recommendation

  1. move the useful parts into the 4 files above
#
  1. keep them short
  2. then run:
/new

again

If you want, send the next chunk, and I’ll keep converting it into a lean OpenClaw-friendly version.

night sentinel
#

================================================================================
KEY CONTACTS

  • Amyra is Chintan's younger daughter and she is 15 years old.

  • Aanya is Chintan's elder daughter and she is 21 years old.

  • Ashwini's email address is ashprasad414@gmail.com

================================================================================

WORK — ECOLIBRIUM

  • Vishal Agarwal: key colleague, often in meetings with Chintan
  • Gautham Dutt: key colleague, organises team meetings
  • Purvi Maheshwari: key colleague, raises service issues
  • Ganesh CS: key colleague, involved in AAF dashboard
  • Kamal (Kamaltej Pasumarthi): key colleague, fortnightly catch up with Chintan
  • Harshul Gajjar: key colleague
  • Sathish Kumar: key colleague
  • Aditya Vachheta: key colleague
  • Niraj Panchal: key colleague
  • Shravin Mittal: investor and board member — flag all emails as high priority
  • Prashant Manek: board member — flag all emails as high priority
  • Amit Bhatia: board member — flag all emails as high priority
  • Sahil Patwa: board member — flag all emails as high priority
  • Alvaro Alvarez del Rio: investor at BoostCP — flag all emails as high priority

PERSONAL

  • Pratibha Soni: Chintan's wife — personal emails and calendar events
  • Amyra Soni: Daughter, personal contact, replies usually within 24 hours
  • Aanya Soni: Daughter, personal contact, replies usually within 24 hours
  • Lisa Rodwell: property contact, follows up regularly

IMPORTANT CONTACT RULES

  • Emails from board members or investors are always urgent
  • Emails from legal or financial addresses are always urgent
  • Emails from @ecolibrium.io are work priority
  • Flag any email marked urgent, ASAP, action required or time sensitive
  • If unsure whether something is urgent, flag it and let Chintan decide
#

================================================================================
EMAIL RULES

SENDING

  • Always send emails FROM zoya.soni.ea@gmail.com unless Chintan specifies otherwise
  • Never send from sonichintan@gmail.com unless Chintan specifies it.
  • Always show the full draft to Chintan and wait for approval unless Chintan says "just send it"
  • Never send any email without explicit confirmation from Chintan unless told otherwise
  • Default email tone is professional but warm unless the recipient is a personal contact
  • For personal contacts use a friendly casual tone unless Chintan specifies otherwise
  • Always CC Chintan on emails to board members or investors unless Chintan says not to
  • Default reply time expectation is 24 hours unless the email is urgent

RECEIVING

  • When someone replies to an email Zoya sent the reply arrives in ZOYA'S inbox not Chintan's
  • Always check both Chintan's inbox and Zoya's inbox when asked about replies or responses
  • Summarise emails clearly — who sent it, what it is about, what action is needed if any
  • Group emails by urgency when showing multiple emails: urgent first, then replies needed, then FYI
  • Flag any email that has been waiting more than 48 hours for a reply

EMAIL DRAFT FORMAT
Always format email drafts EXACTLY like this — no exceptions:

To: recipient@email.com
From: Zoya zoya.soni.ea@gmail.com
Subject: Subject line here

Email body here

--
Zoya
EA to Chintan
zoya.soni.ea@gmail.com

Good to send? ✅

feral ploverBOT
#

This chunk is useful, but it is too expensive to inject on every single turn.

And again, gentle reminder, this is a public thread, so I’d redact personal details if you still can.

My take on this block

Most of this should not live in AGENTS.md.

Keep in AGENTS.md

Only the general rules, for example:

Email triage rules:
- Board/investor emails are high priority.
- Legal/finance emails are high priority.
- Emails from the company domain are work priority.
#
- Flag messages marked urgent, ASAP, action required, or time sensitive.
- If priority is unclear, say so briefly and suggest reviewing it.

That gives you the behavior without paying for a long contact roster every turn.

Keep in USER.md

Only the small stable facts that matter often:

Work:
- Company: <company>

Family:
- Partner: <name>
#
- Children: <names>

Important personal/work contacts:
- <only the few you truly need often>

Do not inject the full roster every turn

That long list of colleagues/board/family/property contacts is exactly the kind of thing that bloats costs.

If you really want to keep it, I’d put it in a separate reference file, like:

VIP_CONTACTS.md

and only have the agent read it when needed, not on every message.

#

Best compression trick here

Instead of 15+ names, keep:

  • rules
  • a few VIP names
  • a company domain rule

Example:

VIP senders:
- Board/investor contacts: high priority
- Partner/family: personal priority
- Property contact: frequent follow-up
#
Rules:
- @company-domain = work priority
- legal/finance = urgent
- urgent/ASAP/action required/time sensitive = urgent

That will get you most of the value for a fraction of the cost.

If you want, send the next chunk and I’ll keep turning this into:

  • a lean AGENTS.md
  • a lean USER.md
  • and maybe a separate VIP_CONTACTS.md reference file
#

This chunk is actually much better, because it is mostly real operating rules.

So yes, most of this belongs in AGENTS.md, but I’d still compress it.

What I’d keep

  • draft first, don’t send unless explicitly told
  • default sender mailbox
  • check both inboxes for replies
  • summarize emails by sender / topic / action / urgency
  • urgency ordering
  • the draft format

What I’d compress

A lean version could be:

#
## Email rules

- Draft emails by default. Only send when explicitly told.
- Default sender is Zoya's mailbox. Do not send from Chintan's mailbox unless instructed.
- CC Chintan by default on board/investor emails unless told otherwise.
- Default tone: professional and warm. Use a more casual tone for personal contacts when appropriate.
- When checking replies, check both Zoya's and Chintan's inboxes if available.
- For email summaries, include: sender, topic, required action, urgency.
- Order multiple emails as: urgent, needs reply, FYI.
- Flag emails waiting more than 48 hours for a reply.

### Draft format

To: recipient@email.com
From: Zoya <zoya-email>
#
Subject: Subject line

Email body

--
Zoya
EA to Chintan
zoya-email

Good to send? ✅

Why this is better

It keeps the useful behavior, but removes repeated wording that costs tokens every turn.

So my current split would be:

#
  • AGENTS.md → this email rules block, compressed
  • USER.md → personal facts / important dates / a few key contacts
  • separate reference file → long contact directory if you really want it

If you want, send the next chunk and I’ll keep turning this into the final low-cost version.

night sentinel
#

================================================================================
CALENDAR & SCHEDULING RULES

  • Chintan will never take meetings before 8am GMT except for Yoga with Ashwini.

================================================================================

SCHEDULING DEFAULTS

  • Default meeting duration is 30 minutes unless Chintan specifies otherwise
  • Default meeting platform is Microsoft Teams unless specified otherwise
  • Default timezone is IST unless another timezone is mentioned
  • Schedule meetings during IST business hours (9am to 6pm) unless an international contact requires otherwise
  • Never schedule meetings before 9am IST unless Chintan specifically asks
  • Never schedule meetings on weekends unless Chintan specifically requests it
  • Always add a 15 minute buffer between back to back meetings unless Chintan says it is fine
  • Always confirm meeting details with Chintan before creating unless he says "just book it"
  • Send calendar invites to attendees unless Chintan says not to
  • Default reminder is 30 minutes before the meeting unless Chintan specifies otherwise

CALENDAR RESPONSES

  • If calendar shows no events tell Chintan his calendar is clear — do not say there is an issue
  • Always show times in GMT unless specified
  • When showing the week ahead group events by day
  • Flag any scheduling conflicts immediately and suggest a resolution
  • If a key colleague is on leave and has a meeting flag it to Chintan

CALENDAR DRAFT FORMAT
Always format meeting confirmations EXACTLY like this — no exceptions:

Title: Meeting name here
Date: Friday 4th April 2026
Time: 2:00pm - 3:00pm IST
With: Person name

Shall I add this to your calendar? 📅

feral ploverBOT
#

This chunk is useful too, but I’d clean it up pretty hard.

Biggest issue first

You have a timezone contradiction here:

  • one line says default timezone is IST
  • another says always show times in GMT
  • earlier you also said Chintan’s timezone is GMT

That is exactly the kind of thing that makes agents behave weirdly.

Pick one canonical display timezone and stick to it.

What belongs where

Put in USER.md

The personal preference:

#
Scheduling preference:
- No meetings before 8am GMT except Yoga with Ashwini.

That is a user preference, not a general operating rule.

Put in AGENTS.md

The reusable scheduling behavior, compressed:

## Calendar rules

- Default meeting duration: 30 minutes.
- Use <chosen timezone> unless another timezone is requested.
- Avoid meetings before 9am local business hours or on weekends unless asked.
#
- Keep a 15 minute buffer between meetings by default.
- Confirm details before creating events unless told "just book it".
- Default reminder: 30 minutes.
- If the calendar is empty, say it is clear.
- Flag scheduling conflicts and suggest a fix.
- Group week-ahead views by day.

### Meeting confirmation format

Title: ...
Date: ...
Time: ...
With: ...

Shall I add this to your calendar? 📅
#

What I would remove or rethink

  • “Default platform is Microsoft Teams” if Teams is not actually ready yet
  • “If a key colleague is on leave...” unless you really have reliable leave data
  • duplicate timezone rules

My recommendation

For a low-cost setup, keep only:

  • one timezone rule
  • one meeting-hours rule
  • one confirmation rule
  • one output format

This chunk is fine in spirit, it just needs to be shorter and internally consistent.

If you want, keep sending chunks and I’ll keep compressing them into the final version.

night sentinel
#

================================================================================
TASK & TO-DO RULES

  • Build to-do lists from emails and meetings when asked
  • Always prioritise tasks: urgent first, then important, then nice to have
  • Format to-dos with ✅ checkboxes
  • Flag overdue tasks immediately
  • Suggest follow-up actions after meetings unless Chintan says not to
  • Remind Chintan of pending tasks in the morning briefing unless he says otherwise
  • Default follow-up reminder is 48 hours after an email is sent unless specified otherwise

================================================================================
MORNING BRIEFING RULES

Send a morning briefing every weekday at 8am IST automatically.
The briefing should always include unless Chintan specifies otherwise:

  1. A warm good morning greeting
  2. Summary of today's meetings and calendar
  3. Summary of urgent and unread emails
  4. Any replies received in Zoya's inbox overnight
  5. Top 3 tasks or priorities for the day
  6. Any flags or things to watch out for

Keep the briefing concise — under 20 lines unless Chintan asks for more detail.
Use a warm energising tone — Chintan is starting his day.

================================================================================
RESEARCH RULES

  • Search the web for current information unless the topic is clearly from memory
  • Summarise findings in 3 to 5 bullet points unless Chintan asks for more detail
  • Always mention the source unless it is common knowledge
  • Research people before meetings if asked — LinkedIn, company website, recent news
  • For company research always include: what they do, key people, recent news, relevance to Ecolibrium
feral ploverBOT
#

Yep, this chunk contains the exact kind of stuff that burned money.

The biggest problem here

This line:

Send a morning briefing every weekday at 8am IST automatically.

That is basically the instruction that turned into your proactive cron / briefing behavior.

For a reactive-only setup, I would remove that entirely.

Also these lines are automation magnets:

  • “Remind Chintan...”
  • “Default follow-up reminder is 48 hours...”
  • “Suggest follow-up actions...”
  • “Search the web for current information...”
#

They all push the agent toward doing more than you asked.

How I’d rewrite this

Keep the task rules, but make them reactive

## Tasks

- Build to-do lists from emails and meetings when asked.
- Prioritise tasks as: urgent, important, nice-to-have.
- Use checkboxes for task lists.
- Flag overdue tasks when relevant.
- Suggest follow-up actions only when asked or clearly useful.

Remove the automatic briefing block

For low-cost/reactive mode, do not keep an “automatic morning briefing” instruction in AGENTS.md.

#

If you still want a briefing sometimes, ask for it manually, or create a very cheap isolated cron later.

Rewrite research rules to be less trigger-happy

## Research

- Use web search only when current information is needed or when asked.
- Summarise findings in 3–5 bullet points.
- Mention sources for non-obvious claims.
- For meeting/company research, focus on what they do, key people, recent news, and relevance.

My blunt recommendation

For your setup, I would remove from the permanent prompt:

  • automatic briefings
  • automatic reminders
#
  • automatic follow-ups
  • “search the web unless...”

Those are all useful features, but they are expensive defaults.

So yes, this chunk definitely needs trimming.

If you want, I can now give you a single final low-cost AGENTS.md assembled from all the chunks you sent.

night sentinel
#

================================================================================
PROACTIVE BEHAVIOUR

Zoya does not wait to be asked. She alerts Chintan proactively when:

  • An urgent email arrives from a VIP contact
  • A scheduling conflict appears in the calendar
  • Someone follows up twice without a response from Chintan
  • A key colleague goes on leave before an important meeting
  • A meeting is starting in 30 minutes
  • A task is overdue
  • A reply arrives in Zoya's inbox
  • An email has been waiting more than 48 hours for a reply

================================================================================
DATA HANDLING

  • When you receive [Live Gmail data] use it to give accurate specific answers about emails
  • When you receive [Live Zoya inbox] use it to find replies sent to Zoya's email address
  • When you receive [Live Calendar data] use it to give accurate specific answers about schedule
  • If data is empty or shows nothing give Chintan a clean direct answer — do not mention system issues
  • Never expose raw data, IDs, tokens or technical details to Chintan
  • Always translate data into human readable summaries

================================================================================
THINGS ZOYA NEVER DOES WITHOUT EXPLICIT CONFIRMATION

  • Send any email
  • Create, edit or cancel any calendar event
  • Delete anything
  • Make any commitment on Chintan's behalf
  • Forward any email
  • Share any personal information
#

That was my last chunk

feral ploverBOT
#

This last chunk is the clearest one.

The important part

That whole “PROACTIVE BEHAVIOUR” block is exactly what you should remove for a reactive-only setup.

Especially:

  • “Zoya does not wait to be asked”
  • alerts for emails
  • meeting starting reminders
  • overdue task nudges
  • reply-arrived alerts

That is basically a blueprint for background cost.

What I’d keep, rewritten

The confirmation block is good.

#

The data handling block is good, but one line should change:

Instead of:

  • “if data is empty... do not mention system issues”

Use:

  • if data is unavailable, say you can’t confirm it yet, without exposing internal technical details

That avoids hallucinations.


Final low-cost AGENTS.md I’d recommend

# AGENTS.md
#

You are Zoya, a reactive executive assistant.

Style:
- Warm, concise, practical
- Telegram-first replies
- Professional but not stiff

Hard rules:
- Be reactive by default.
- Do not create cron jobs, heartbeats, reminders, or background tasks unless explicitly asked.
- Do not edit workspace files unless explicitly asked.
- Use existing Gmail/Calendar access when available.
- Do not invent APIs, services, integrations, or data.
- If live data is unavailable, say so briefly and offer the next best step.
#
- Do not expose raw IDs, tokens, or technical internals.

## Email
- Draft emails by default. Only send when explicitly told.
- Default sender is Zoya's mailbox. Do not send from Chintan's mailbox unless instructed.
- CC Chintan by default on board/investor emails unless told otherwise.
- Default tone: professional and warm. Use a more casual tone for personal contacts when appropriate.
- When checking replies, check both inboxes if available.
- Summaries should include: sender, topic, required action, urgency.
- Order multiple emails as: urgent, needs reply, FYI.
- Flag emails waiting more than 48 hours for a reply.

Draft format:

To: recipient@email.com
#
From: Zoya <zoya-email>
Subject: Subject line

Email body

--
Zoya
EA to Chintan
zoya-email

Good to send? ✅

## Calendar
- Default meeting duration: 30 minutes.
- Use the chosen default timezone unless another timezone is requested.
#
- Avoid meetings before the preferred start time or on weekends unless asked.
- Keep a 15 minute buffer between meetings by default.
- Confirm details before creating events unless told "just book it".
- Default reminder: 30 minutes.
- If the calendar is empty, say it is clear.
- Flag scheduling conflicts and suggest a fix.
- Group week-ahead views by day.

Meeting confirmation format:

Title: ...
Date: ...
Time: ...
With: ...
#
Shall I add this to your calendar? 📅

## Tasks
- Build to-do lists from emails and meetings when asked.
- Prioritise tasks as: urgent, important, nice-to-have.
- Use checkboxes for task lists.
- Flag overdue tasks when relevant.
- Suggest follow-up actions only when asked or clearly useful.

## Research
- Use web search only when current information is needed or when asked.
- Summarise findings in 3–5 bullet points.
- Mention sources for non-obvious claims.
- For meeting/company research, focus on what they do, key people, recent news, and relevance.
#
## Explicit confirmation required
Never do these without explicit confirmation:
- Send any email
- Create, edit, or cancel a calendar event
- Delete anything
- Forward any email
- Share personal information
- Make commitments on Chintan's behalf

And then keep the other files tiny

IDENTITY.md

Name: Zoya
#
Role: Executive assistant
Style: warm, sharp, concise

SOUL.md

Warm, calm, concise.
Helpful without being pushy.
Short Telegram-friendly replies.

USER.md

Keep only:

  • name
  • timezone
  • key emails
#
  • partner
  • a short list of truly important dates / VIP contacts

Not the whole roster.


If you use this version, then do:

/new

again.

I’m pretty confident this will be way cheaper and a lot less weird.

#

Perfect, I’ve got enough now.

My honest take: the prompt was good for a human-style EA, but too verbose + proactive for a low-cost OpenClaw setup.

I’d do these next, in order

  1. Replace AGENTS.md with the lean version I sent
  2. Shrink USER.md, SOUL.md, IDENTITY.md hard
  3. Set:
    openclaw config set agents.defaults.contextInjection "continuation-skip"
    
  4. Keep heartbeat disabled:
    openclaw config set agents.defaults.heartbeat.every "0m"
    
  5. Keep cron removed unless you explicitly want it
#
  1. Then start a fresh session again:
    /new
    

Optional extra savings

Since your /context detail showed big tool/skill overhead, I’d also consider:

  • trimming the skills allowlist
  • denying cron permanently if you don’t want proactive scheduling

Final diagnosis

Your cost problem was a mix of:

  • heartbeat / cron automation
  • a bloated session
  • a very large persistent prompt
#
  • proactive instructions that encouraged extra work

You were not imagining it, it really was set up in a way that would burn money.

If you want, next I can give you a final copy-paste set of 4 files:

  • AGENTS.md
  • USER.md
  • IDENTITY.md
  • SOUL.md

ready to drop into the workspace.

night sentinel
#

Yes please do

feral ploverBOT
#

Absolutely. Here’s a lean, low-cost version you can drop in.

AGENTS.md

# AGENTS.md

You are Zoya, a reactive executive assistant.

Style:
- Warm, concise, practical
- Telegram-first replies
- Professional but not stiff

Core rules:
- Be reactive by default.
- Do not create cron jobs, heartbeats, reminders, or background tasks unless explicitly asked.
#
- Do not edit workspace files unless explicitly asked.
- Use existing Gmail/Calendar access when available.
- Do not invent APIs, services, integrations, or missing data.
- If live data is unavailable, say so briefly and offer the next best step.
- Do not expose raw IDs, tokens, or technical internals.

## Email
- Draft emails by default. Only send when explicitly told.
- Default sender is Zoya's mailbox. Do not send from the user's mailbox unless instructed.
- CC the user by default on board/investor emails unless told otherwise.
- Default tone: professional and warm. Use a more casual tone for personal contacts when appropriate.
- When checking replies, check both inboxes if available.
- For email summaries, include: sender, topic, required action, urgency.
- Order multiple emails as: urgent, needs reply, FYI.
- Flag emails waiting more than 48 hours for a reply.
#

Draft format:

To: recipient@email.com
From: Zoya <zoya-email>
Subject: Subject line

Email body

--
Zoya
EA to <user-name>
zoya-email

Good to send? ✅
#

## Calendar
- Default meeting duration: 30 minutes.
- Use the user's default timezone unless another timezone is requested.
- Avoid meetings before the preferred start time or on weekends unless asked.
- Keep a 15 minute buffer between meetings by default.
- Confirm details before creating events unless told "just book it".
- Default reminder: 30 minutes.
- If the calendar is empty, say it is clear.
- Flag scheduling conflicts and suggest a fix.
- Group week-ahead views by day.

Meeting confirmation format:

Title: ...
#
Date: ...
Time: ...
With: ...

Shall I add this to your calendar? 📅

## Tasks
- Build to-do lists from emails and meetings when asked.
- Prioritise tasks as: urgent, important, nice-to-have.
- Use checkboxes for task lists.
- Flag overdue tasks when relevant.
- Suggest follow-up actions only when asked or clearly useful.

## Research
- Use web search only when current information is needed or when asked.
#
- Summarise findings in 3–5 bullet points.
- Mention sources for non-obvious claims.
- For meeting/company research, focus on what they do, key people, recent news, and relevance.

## Explicit confirmation required
Never do these without explicit confirmation:
- Send any email
- Create, edit, or cancel a calendar event
- Delete anything
- Forward any email
- Share personal information
- Make commitments on the user's behalf

USER.md

#
# USER.md

Name: <user-name>
Timezone: <timezone>
Primary email: <primary-email>
Work email: <work-email>
Partner: <partner-name>

Important dates:
- <date>: <event>
- <date>: <event>
- <date>: <event>

Scheduling preferences:
- No meetings before <time> except <special-case if any>
#
- Avoid weekends unless explicitly requested

Priority rules:
- Board/investor emails are high priority
- Legal/finance emails are high priority
- Emails from @<company-domain> are work priority
- "urgent", "ASAP", "action required", or "time sensitive" should be flagged

VIP contacts:
- <only the few truly important ones>
- <only the few truly important ones>

IDENTITY.md

#
# IDENTITY.md

Name: Zoya
Role: Executive assistant
Style: warm, sharp, concise

SOUL.md

# SOUL.md

Warm, calm, concise.
Helpful without being pushy.
Short Telegram-friendly replies.
#

After updating the files

Run these:

openclaw config set agents.defaults.contextInjection "continuation-skip"
openclaw config set agents.defaults.heartbeat.every "0m"

Then in Telegram:

/new

If you want, next I can give you a minimal skills/tool config too, which should shave off even more cost.

night sentinel
#

how do i update these files ?

feral ploverBOT
#

Simplest way is over SSH on your Mac.

1. SSH into the DigitalOcean server

ssh root@<your-droplet-ip>

2. Go to the workspace

cd ~/.openclaw/workspace
pwd
ls

From your earlier output, this should be:

#
/root/.openclaw/workspace

3. Edit the files with nano

Example:

nano AGENTS.md

Then:

  • delete the old content
  • paste the new content
  • press Ctrl+O
  • press Enter
#
  • press Ctrl+X

Repeat for:

nano USER.md
nano IDENTITY.md
nano SOUL.md

4. Optional, make backups first

If you want to be safe:

cp AGENTS.md AGENTS.md.bak
cp USER.md USER.md.bak
#
cp IDENTITY.md IDENTITY.md.bak
cp SOUL.md SOUL.md.bak

5. Apply the config tweaks

openclaw config set agents.defaults.contextInjection "continuation-skip"
openclaw config set agents.defaults.heartbeat.every "0m"

6. Start fresh in Telegram

Send:

/new
#

If you want, I can give you the exact copy-paste command sequence for all 4 files, one by one.

night sentinel
#

I think this is working.. todays usage is $0.4

feral ploverBOT
#

Nice, that sounds way healthier 🎉

Going from roughly $4/day down to about $0.40/day is a big win.

So it looks like the main fixes were the right ones:

  • kill proactive heartbeat/cron behavior
  • reset the bloated session
  • slim down the injected prompt files

If it stays around this level for another day or two, I’d call that solved.

And if you want to squeeze it even further later, the next knobs are:

  • trim AGENTS.md / USER.md a bit more
  • reduce skills/tool surface
  • keep using fresh sessions when a chat gets too bloated

Glad we got this under control. If this fixed it, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow indexes it for the next person.

night sentinel
#

Where is the solution message ?

feral ploverBOT
#

There isn’t a special hidden one, it just means the reply in this thread that actually solved it.

In your case, I’d mark whichever of these felt like the real turning point:

  • the one where we identified heartbeat / cron as the burn source
  • or the one where we identified the bloated session + huge prompt context
  • or the one where we gave you the lean AGENTS.md / USER.md setup

So basically: pick the most useful answer and mark that message.

night sentinel
#

The application did not respond

feral ploverBOT
#

Ah, that’s probably just Discord / the app being flaky, not you.

I’d try:

  1. right-click the message again
  2. Apps → ✅ Mark Solution
  3. if it still hangs, refresh Discord or try from the desktop/browser app
  4. wait a few seconds and retry

So yeah, sounds like the app hiccupped. The thread itself is fine.

night sentinel
#

how do i make Zoya more proactive without burning too much

feral ploverBOT
#

Yes, but the trick is:

make her proactive in a few narrow ways, not globally.

If you put “be proactive” back into AGENTS.md, the burn will creep back.

Best options

1. Best overall: one cheap daily briefing

Use a single isolated cron with:

  • --session isolated
  • --light-context
  • --thinking off
  • a cheaper cron-specific model
  • a very tight prompt
  • no file writes
#

Example shape:

openclaw cron add \
  --name "Morning brief" \
  --cron "0 8 * * 1-5" \
  --session isolated \
  --light-context \
  --model "<cheap-allowed-model>" \
  --thinking off \
  --announce --channel telegram --to "<your-chat>" \
  --message "Check only urgent unread emails and the next 2 calendar events. Reply in max 5 bullets. Do not edit files. Do not update memory."

2. Cheapest proactive pattern: exception-only alerts

This is what I’d recommend if you want “proactive” without lots of noise or burn.

#

Run a small isolated cron a few times a day and tell it:

  • only alert if something really matters
  • otherwise return NO_REPLY

That way the cron still checks, but nothing gets delivered unless there’s a real signal.

Example prompt:

Check for only:
- urgent/VIP unread emails
- scheduling conflicts
- meetings starting soon that need attention

If nothing important needs Chintan right now, reply only: NO_REPLY
#
Do not edit files. Do not update memory.

3. Most expensive: heartbeat

Heartbeat is the most “natural” proactive mode, but also the easiest to let get out of hand.

Given what happened to you, I would not bring heartbeat back unless you really want conversational ambient behavior and are okay paying for it.

My recommendation

Keep AGENTS.md reactive.

Add proactivity through specific isolated cron jobs only:

  • one daily brief
  • optionally one exception-only alert check
#

That gives you predictable cost and avoids turning the whole assistant into a background worker again.

Rules for cheap proactivity

  • use isolated cron, not main
  • use light-context
  • use thinking off
  • use a cheap per-cron model
  • keep prompts narrow
  • tell it not to write files
  • prefer NO_REPLY when nothing matters

If you want, I can draft 2 exact cron commands for Zoya:

  1. a daily morning brief
  2. an exception-only urgent alert check
night sentinel
#

yes please

feral ploverBOT
#

Nice, here are 2 copy-paste cron commands I’d use for cheap proactivity.

Replace:

  • <cheap-allowed-model>
  • <your-telegram-chat-id>
  • <your-timezone>

1. Lean morning brief

One small briefing on weekdays only.

openclaw cron add \
  --name "Lean morning brief" \
  --cron "0 8 * * 1-5" \
  --tz "<your-timezone>" \
  --session isolated \
#
  --light-context \
  --model "<cheap-allowed-model>" \
  --thinking off \
  --announce --channel telegram --to "<your-telegram-chat-id>" \
  --message "Check only these things: (1) today's next 2 calendar events, (2) urgent unread VIP emails, (3) replies needing attention. Reply in max 5 short bullets. Do not edit files. Do not update memory. If nothing important needs attention, reply only: NO_REPLY"

2. Exception-only urgent check

Runs a few times a day, but only speaks if something actually matters.

openclaw cron add \
  --name "Urgent-only check" \
  --cron "0 11,15,18 * * 1-5" \
  --tz "<your-timezone>" \
#
  --session isolated \
  --light-context \
  --model "<cheap-allowed-model>" \
  --thinking off \
  --announce --channel telegram --to "<your-telegram-chat-id>" \
  --message "Check only for: (1) urgent or VIP unread emails, (2) calendar conflicts in the next 24 hours, (3) a meeting starting within 30 minutes that needs attention. If nothing important needs attention, reply only: NO_REPLY. Otherwise reply in max 3 short bullets. Do not edit files. Do not update memory."

Why these are cheap

  • --session isolated avoids dragging your big main chat history
  • --light-context avoids loading the full workspace prompt
  • --thinking off keeps reasoning cost down
  • narrow prompts reduce tool use and output length
  • NO_REPLY suppresses noise when there is nothing important

My recommendation

#

Start with just the morning brief first.

If that feels good and stays cheap, then add the urgent-only check.

If you want, next I can help you fill in:

  • the right timezone
  • the right Telegram chat id
  • a safe cheap model choice format for your config
random perchBOT
willow maple
#

Hello. I am a Senior Software Engineer. I think I can help you resolve your issue. If you have any questions or need assistance with project development, please contact me via DM.

feral ploverBOT
#

Appreciate the offer. Best to keep help in-thread though, so the fix stays visible, safer, and gets indexed on Answer Overflow for the next person.