Fleet 1.13:Teams are now shipping 5x more PRs with autonomous pipelines.See what's new →
FleetFleet
Glossary

Watcher Daemon

A watcher daemon is a long-running background process that monitors external systems — typically version control labels, CI status, or issue trackers — and triggers AI agents in response to state changes it detects.

The watcher daemon is the bridge between external systems (GitHub, GitLab, Jira) and the agent fleet. Without a watcher, agents must be started manually or triggered via webhooks that require internet-accessible infrastructure. The watcher polls the external systems on a configurable interval, compares current state to previously observed state, and fires events when it detects changes.

Polling has predictable latency (equal to the poll interval) and does not require webhook registration or inbound network access, making it practical for developer machines and private network deployments. The tradeoff is that very short poll intervals increase API rate limit consumption; the polling frequency must be tuned to balance responsiveness against rate limits.

Daemon reliability is critical: a crashed watcher means agents stop responding to events. Production deployments should use process supervision (systemd, launchd, or a process manager) to restart the watcher automatically after crashes, and the daemon should be designed to handle polling failures gracefully without losing event state.

How this relates to Fleet

Fleet ships a watcher daemon (fleet watcher start) that runs three loops: a label watcher that polls GitHub every two minutes, a subscription processor that matches new fabric events to agent subscriptions every ten seconds, and an agent scheduler that fires cron-scheduled agents. A separate org-mode watcher handles org-level agents that need visibility across all repositories. Work-in-progress label dedup prevents agents from being re-triggered on labels that are still active from a previous run.

Frequently asked questions

Why poll instead of using webhooks?

Webhooks require a publicly accessible endpoint to receive GitHub push notifications, which is often unavailable on developer machines or in private network environments. Polling works anywhere the machine can make outbound HTTP requests. For many Fleet use cases — running on a developer's laptop or a private server — polling is the only practical option.

How do you prevent duplicate agent starts when the watcher restarts?

Deduplication using a stored record of which events have already triggered which agents is the standard approach. Fleet uses expiring dedup entries for work-in-progress labels (15-minute TTL), and flushes WIP dedup entries on startup so that events that were being processed when the daemon crashed are retried rather than silently dropped.

Run your first agent fleet

One binary. Five minutes. See every agent, coordinate every handoff, and keep a full audit trail of what your fleet did.