Skip to main content
Human readers: the fastest way to get started with daemons is to work directly with Charlie.Charlie can help you suggest where to start and add your first daemon. Use the prompts below to ask Charlie in Slack, GitHub, or Linear.
Explain what daemons are and how they work.

Daemons are repo-defined operating roles for Charlie. They give recurring operational debt an explicit owner instead of leaving it to ad hoc cleanup. A daemon lives at: .agents/daemons/<daemon-id>/DAEMON.md The daemon file tells Charlie:
  • its purpose
  • what watch conditions or schedule can wake it
  • what routines it should perform when it wakes
  • what deny rules tell it not to do
  • any additional operating guidance in the markdown body

Start here

If you are a human reader, the intended workflow is to work with Charlie. Ask Charlie to:
  • explain what daemons are
  • explain how to use daemons
  • recommend which daemons to add
  • create a new daemon file
  • edit an existing daemon file
  • help you test and iterate safely
For the docs path, use the pages listed in Where to go next below.

What daemons are

A daemon is a persistent role definition for recurring, bounded maintenance or operational work. Teams use daemons when there is ongoing maintenance or operational judgment that should be owned explicitly instead of handled ad hoc. Across activations, daemons can leverage prior activation logs to maintain state. Dedicated daemon memory is coming soon.

What daemons are not

A Charlie daemon is different from:
  • Unix daemons: a Charlie daemon is a repo-authored operating role, not a long-running OS process.
  • Cron jobs: a Charlie daemon is not just fixed predetermined steps on a timer.
  • GitHub Actions: a Charlie daemon is not a CI/workflow file tied to one pipeline.
  • Fixed-rule bots: watch matching is semantic rather than deterministic.
  • Open-ended prompts: a Charlie daemon is bounded by repo-local policy, routines, deny, and wake conditions.

How daemons work today

Today, each activation follows a wake/execute model:
  1. the daemon wakes because watch matched or schedule fired
  2. context from past activations of the daemon is loaded
  3. Charlie executes the daemon’s routines within daemon constraints
  4. the activation completes
Signal-driven daemon activation currently evaluates GitHub signals. watch matching is semantic rather than deterministic. Schedule-driven daemon activation uses the daemon’s schedule field when present as a standard five-field cron expression.

DAEMON.md is the control surface

DAEMON.md is the authored control surface for a daemon. The file has two parts:
  • YAML frontmatter for the formal contract
  • a markdown body for operating guidance
The frontmatter contains the authored fields:
  • id
  • purpose
  • watch
  • routines
  • deny
  • schedule
Minimum validity constraints:
  • id, purpose, and routines are required.
  • At least one of watch or schedule is required.
The body is freeform markdown. Use it for the operating rules that make the daemon consistent, such as:
  • policy
  • limits
  • scope
Those headings are conventions in the body, not extra frontmatter schema. Charlie treats the attached daemon file as the daemon’s primary role policy for each activation.

Wake model

A daemon can be:
  • watch-driven
  • schedule-driven
  • both
watch describes event conditions that can wake the daemon. schedule describes time-based wakes using a standard five-field cron expression. If both are present, the daemon can wake from either path. At runtime, Charlie may refer to the daemon as:
  • Watch-only
  • Schedule-only
  • Hybrid
Those are runtime-derived labels. Do not author them as frontmatter fields.

Key terms

  • daemon: a repo-defined Charlie role for recurring maintenance or operational work
  • daemon ID: the canonical identifier, represented by the directory name and required id field
  • daemon file: the DAEMON.md file that defines the role
  • frontmatter: the YAML contract at the top of the file
  • body: the markdown guidance below the frontmatter
  • wake / activation: one execution caused by an event or schedule
  • wake context: the event or schedule reason the daemon woke for this activation
  • watch: event conditions that can wake the daemon
  • routines: the concrete operations the daemon performs when it wakes
  • deny: things the daemon must not do
  • schedule: timer-based wake configuration
  • native surfaces: the systems where teams already review and act on daemon output, such as GitHub, Linear, and Slack

Where to go next