Online agents

Online mode lets an agent wake on a cadence even when no person, task, or webhook has asked it to run. It is useful for observation-shaped work: checking for drift, watching a feed, reviewing a project goal, or filing a note when something deserves attention.

This is opt-in. The global exploratory worker and the individual agent must both be enabled.

yaml
exploratory:
  enabled: true
  baseIntervalMs: 60000

agents:
  watcher:
    instructions: "Watch the project for stale documentation and risky drift."
    tools: [read, web_search, recall, tasks]
    online:
      enabled: true
      cadence:
        interval_minutes: 30
        idle_backoff_multiplier: 2
        max_interval_minutes: 240
        window: { start: "09:00", end: "18:00" }
      budgets:
        tokens_per_tick: 8000
        tokens_per_day: 80000
        tool_calls_per_tick: 8
        stop_after_runs_per_day: 12
      tools: [read, web_search, recall, tasks]
      output:
        notes: true
        tasks: true
        notify_owner: false

What happens on a tick

The worker reads the agent's goals.md and recent notes, builds a bounded tick prompt, and runs the normal agent loop with the online tool subset. A useful finding can become a note, fact, or task. A no-op backs the cadence off up to the configured maximum instead of spending the same tokens again immediately.

Each attempt is recorded in exploratory_runs with its status and usage. The web UI exposes the current state and run history.

Online mode, cron, and autopilot

MechanismStarts fromBest for
Online modeAn agent's goal and cadenceOpen-ended observation and research
CronA fixed operator-authored promptPredictable recurring jobs
AutopilotA task waiting in the backlogDriving assigned work toward a status

Online mode is deliberately allowed to decide what to inspect, but config still decides when it may run, which tools it can use, and how much it may spend. Keep notify_owner off unless the role has a clear escalation policy.

The implementation and operational notes live in packages/core/src/exploratory/.