Problem
Users are reporting that memory sync drains their token/API balance unexpectedly — a single GitHub sync with 1000 commits can consume significant tokens without the user realising the cost upfront. Additionally, many new users don't want a fully autonomous agent right away but have no easy way to dial it back.
Two related pain points:
- No sync budget controls — users can't limit how much data gets synced per source or per session
- No agent autonomy level picker — users want fine-grained control over how "sentient" (proactive) the agent is, with clear cost implications
Proposed: Sync Budget Controls
Per-source limits
- Max items per sync: cap commits/issues/PRs/emails fetched (currently hardcoded at 1000)
- Max tokens per sync: stop summarising once a token budget is hit (e.g. 100k, 500k, 1M)
- Max cost per sync: hard dollar cap (e.g. $0.01, $0.05, $0.50) — refuse to call the LLM once reached
- Sync depth: "last 7 days", "last 30 days", "last 90 days", "all time"
UI surface
- Per-source settings in the Memory Sources panel (gear icon per row)
- Global default in Settings → Memory → Sync Budget
- Show estimated cost BEFORE sync starts: "This sync will process ~800 items (~400k tokens, est. $0.03). Proceed?"
Wire shape (RPC)
openhuman.memory_sources_update { source_id, max_items, max_tokens, max_cost_usd, sync_depth_days }
Proposed: Agent Autonomy Level
A single "How active should your agent be?" picker in Settings (or onboarding):
| Level |
Label |
Behaviour |
Est. monthly cost |
| 0 |
Off |
No background processing. Memory syncs only when you press the button. Agent responds only when you chat. |
$0 |
| 1 |
Minimal |
Sync sources once per day. No proactive messages. Agent available in chat only. |
~$0.10–0.50/mo |
| 2 |
Moderate (default) |
Sync every hour. Agent sends daily digest. Suggests actions on new emails/messages. |
~$1–5/mo |
| 3 |
Active |
Sync every 10 minutes. Agent monitors channels, triages, drafts replies. Proactive notifications. |
~$5–20/mo |
| 4 |
Always-on |
Real-time sync. Full autonomy — agent acts on your behalf within configured guardrails. |
~$20–100+/mo |
What each level controls
scheduler_gate mode (off / throttled / always_on)
composio_periodic.tick_seconds (86400 / 3600 / 600 / 60)
subconscious.enabled + heartbeat.enabled
cron job scheduling cadence
- Proactive notification thresholds
- Token budget per background cycle
UI surface
- Onboarding step: "How hands-on should OpenHuman be?" with the level picker
- Settings → Agent → Autonomy Level (same picker)
- Each level shows estimated monthly cost range based on connected sources
- "Current month usage: $X.XX" badge (from sync audit log totals)
Cost estimation logic
- Count connected sources × items-per-source × avg-tokens-per-item × price-per-token × syncs-per-month-at-level
- Show as a range (min–max) since actual cost depends on activity volume
- Update the estimate live as users connect/disconnect sources
Implementation notes
- The sync budget can gate inside
run_github_sync / sync_items_individually / the composio provider sync loops — check budget.remaining() before each batch
- Autonomy level maps to a single
config.toml field (autonomy.agent_level: 0–4) that the scheduler gate, periodic syncs, and subconscious read
- Cost tracking already exists via
sync_audit.jsonl — surface monthly totals in the UI and use them for the "current month" badge
- The "estimated cost before sync" dialog can use the same
estimate_cost_usd() with item count from reader.list_items() (which is cheap — no LLM calls)
Acceptance criteria
Problem
Users are reporting that memory sync drains their token/API balance unexpectedly — a single GitHub sync with 1000 commits can consume significant tokens without the user realising the cost upfront. Additionally, many new users don't want a fully autonomous agent right away but have no easy way to dial it back.
Two related pain points:
Proposed: Sync Budget Controls
Per-source limits
UI surface
Wire shape (RPC)
Proposed: Agent Autonomy Level
A single "How active should your agent be?" picker in Settings (or onboarding):
What each level controls
scheduler_gatemode (off / throttled / always_on)composio_periodic.tick_seconds(86400 / 3600 / 600 / 60)subconscious.enabled+heartbeat.enabledcronjob scheduling cadenceUI surface
Cost estimation logic
Implementation notes
run_github_sync/sync_items_individually/ the composio provider sync loops — checkbudget.remaining()before each batchconfig.tomlfield (autonomy.agent_level: 0–4) that the scheduler gate, periodic syncs, and subconscious readsync_audit.jsonl— surface monthly totals in the UI and use them for the "current month" badgeestimate_cost_usd()with item count fromreader.list_items()(which is cheap — no LLM calls)Acceptance criteria