Skip to content

feat: sync budget controls + agent autonomy level picker with cost estimates #3117

@senamakel

Description

@senamakel

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:

  1. No sync budget controls — users can't limit how much data gets synced per source or per session
  2. 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

  • Users can set per-source sync limits (items, tokens, cost)
  • Users can choose an autonomy level (0–4) with clear cost implications
  • Estimated cost shown before manual syncs
  • Monthly cost badge visible in Settings
  • Onboarding offers the autonomy picker
  • Default level is "Moderate" (backward-compatible with current behaviour)
  • Level 0 ("Off") completely stops background token spend

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

Status
Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions