Back to docs

Scheduling & background agents

Schedule a prompt — or a whole workflow — to run once, on an interval, daily, or weekly. The built-in scheduler runs it through the full agent loop, and a service worker keeps running due tasks even after you close the tab.

Create a task

Open the Scheduler drawer — either from the top bar or the calendar-clock button in the chat bar, which pre-fills your current message as the prompt. Pick one of four modes:

Once

Run at a specific date and time.

Repeat

Run every N seconds / minutes / hours, starting immediately after the first interval.

Daily

Run every day at a chosen time.

Weekly

Run on a chosen weekday at a chosen time.

When a task fires, the prompt goes through the full agent loop: history is built, all built-in tool schemas are offered, and tool calls are executed in the browser before the answer is appended to the session. One-time tasks auto-disable after firing; repeating tasks re-compute their next run.

Delivery

Results land in a new session (created automatically) or into an existing session you pick — so scheduled runs never disturb the conversation you're in.

Manage tasks

From the Scheduler drawer you can run now, enable/disable, and delete tasks. Each task shows a schedule summary, its status, next run, last run, and a preview of the latest result.

Action What it does
Run now Fire the task immediately through the agent loop
Enable / disable Pause a task without deleting it
Delete Remove the task and its schedule

Notifications

Enable optional browser notifications to get an alert when a scheduled run finishes or fails. The scheduler ticks every second while the tab is open, so tasks run while Zod is open in the browser.

Agent (harness) triggers

Each task can optionally pick a harness from the Scheduler drawer. When the cron fires, it executes the harness's agent steps (via the runner) instead of a bare prompt, and the resulting agentRun card lands in the target session — "run this agent at 9am daily".

Background service-worker agents

Scheduled work doesn't have to stop when you close the tab. A classic service worker runs the scheduler in the background, side-by-side with the offline cache:

Mirrors state

The app snapshots its localStorage document into an IndexedDB store (zod-bg) on every save, so the worker always sees the latest provider config, sessions, memory, and crons.

Runs due crons

The worker ticks every 2 seconds (and is woken on demand by a sync message from the page). For each due cron it builds history from the snapshot and runs the full agent loop — tools included — against your provider, or executes the cron's agent harness if one is attached.

Concurrent agents

Up to 3 cron runs execute in parallel, so multiple scheduled agents work simultaneously.

Writes results back

The worker pushes session, message, and cron-status updates to an IndexedDB outbox. When the app is reopened or focused, the page imports those rows into the stores — new sessions, assistant messages, and status/lastResult on crons — with no reload needed.

Survives reload & tab close

A run that completes while you're away shows up as a done task with its reply the next time you open Zod. Reopening the tab re-activates the worker, which re-snapshots state and catches up on any missed due runs.

A note on always-on

A service worker only lives while the browser itself is open — a closed tab suspends it until the browser wakes it or the next visit. For an always-on guarantee, the extension target can be ported to chrome.alarms (a roadmap item), which fires even when the browser is fully closed.