> ## Documentation Index
> Fetch the complete documentation index at: https://docs.charlielabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Review Checklist

> Review daemon-file pull requests for contract, safety, repeatability, and proof gaps before merge.

## 1. Frequently broken rules

Use these as first-pass review gates before reading the detailed checklist.

<ol type="a">
  <li>For new daemon files, check line count and simplicity first. `DAEMON.md` should normally be 50–100 lines. Reject speculative edge case handling, all-use-case coverage, verbose idempotency logic, generic filler, or body prose that exists only to sound complete.</li>
  <li>Put the durable daemon contract in frontmatter. Identity, purpose, wake conditions, core routines, hard prohibitions, and schedules belong in `id`, `purpose`, `watch`, `routines`, `deny`, and `schedule`, not body prose.</li>
  <li>Do not duplicate frontmatter in the body. If a body section restates `purpose`, `watch`, `routines`, or `deny`, delete it or move only the missing hard rule into frontmatter.</li>
  <li>Do not restate the wake model in the body. The body must not repeat the `watch` list, restate the `schedule`, or describe the daemon's activation mode as prose.</li>
  <li>Keep the body short and behavioral. Every body paragraph must change how the daemon decides, verifies, communicates, limits scope, coordinates, or no-ops. Remove generic filler, repeated policy, tutorial notes, and setup instructions.</li>
  <li>`purpose` must be one short outcome statement. It must describe the end state the daemon exists to maintain, not a list of scans, API calls, messages, implementation mechanics, historical context, activation details, deny rules, quiet/no-op policy, or other runtime guidance.</li>
  <li>Write `routines` as concrete wake-time operations. Each routine must be finite and verifiable. Advice belongs in body guidance; negative guardrails belong in `deny` or body policy.</li>
  <li>Use explicit, resolving references and destinations. Daemon IDs, docs paths, pinned refs, example names, issue or project identifiers, Slack channels, GitHub labels, and repo-specific configuration must be current and unambiguous.</li>
</ol>

## 2. Inspect every changed daemon file

<ol type="a">
  <li>Reviewers must inspect the canonical `.agents/daemons/<daemon-id>/DAEMON.md` file.</li>
  <li>Reviewers must inspect changed `scripts/**` and `references/**` files.</li>
  <li>Reviewers must read nearby support files when the changed behavior depends on them and must flag stale, hidden, contradictory, or disconnected guidance.</li>
  <li>The PR must stay narrowly scoped to the requested daemon change; unrelated or unnecessary additions must be removed.</li>
</ol>

## 3. Review the `DAEMON.md` contract

Use the [`DAEMON.md` reference](/daemons/daemon-md-reference) when you need the full authored contract.

### Required file shape

<ol type="a">
  <li>`DAEMON.md` must live at `.agents/daemons/<daemon-id>/DAEMON.md`.</li>
  <li>`DAEMON.md` must start with `---`-delimited YAML frontmatter that parses to an object/map.</li>
  <li>`DAEMON.md` must have a non-empty Markdown body below the closing delimiter.</li>
</ol>

### Authored fields and structural rules

<ol type="a" start="4">
  <li>The frontmatter must include `id`, `purpose`, and `routines`.</li>
  <li>`id` must exactly match the `<daemon-id>` path slug.</li>
  <li>The frontmatter must include at least one activation field: `watch` or `schedule`.</li>
  <li>`routines` must be a YAML list with at least one non-empty string. When present, `watch` and `deny` must also be YAML lists of non-empty strings.</li>
  <li>The frontmatter must use the canonical authored field names and must not invent fields or substitute `name`, `description`, `triggers`, `actions`, or `disallowed` for `id`, `purpose`, `watch`, `routines`, or `deny`.</li>
</ol>

### Field quality

<ol type="a" start="10">
  <li>`purpose` must be one short outcome statement. It must describe the end state the daemon exists to maintain, not how the daemon works, why it was created, when it wakes, when it stays silent, or what it must not do.</li>
  <li><code>routines</code> must contain only concrete, finite, verifiable operations the daemon performs when it wakes. Advice belongs in the body; negative guardrails belong in <code>deny</code> or body policy.</li>
  <li>`deny` must cover plausible adjacent risky shortcuts and must fail closed for important ambiguity.</li>
  <li>`watch` must use semantic matching language and describe provider-visible observable events rather than raw webhook labels or derived-state queries that belong in execution-time checks.</li>
  <li>`watch` entries must not be vague, brittle, catch-all, or broadly overlapping in ways that can produce duplicate activations.</li>
  <li>When present, `schedule` must use standard five-field cron in UTC. If both day-of-month and day-of-week are restricted, reviewers must account for ordinary cron `day-of-month OR day-of-week` semantics.</li>
</ol>

### Validate with the CLI

Run the daemon CLI from the repository that contains the changed daemon file to confirm the authored contract is valid.

```bash theme={null}
bunx @charlie-labs/daemons validate .agents/daemons/<daemon-id>/DAEMON.md
```

Use `bunx @charlie-labs/daemons validate --all` when the PR changes multiple daemon files.

## 4. Review body guidance

Use [Writing and editing `DAEMON.md`](/daemons/writing-and-editing-daemon-md) for deeper authoring guidance.

<ol type="a">
  <li>The Markdown body must contain runtime policy rather than setup instructions or tutorials.</li>
  <li>The body must not duplicate frontmatter content. If body guidance restates `purpose`, `watch`, `routines`, `deny`, or `schedule`, reviewers must delete it or move only the missing hard rule into frontmatter.</li>
  <li>The body must add targeted guidance only where it materially improves behavior: decision terms, output format, communication and silent no-op policy, verification and freshness, limits, target selection and ignore patterns, coordination and concurrency, human authority, and clarifying examples.</li>
  <li>The body must define ambiguous terms once and must remove duplicative or overly verbose content. It must rely on frontmatter and linked canonical sources instead of restating them.</li>
</ol>

## 5. Review support files

<ol type="a">
  <li>Reviewers must inspect the full daemon support tree when it changes.</li>
</ol>

```text theme={null}
.agents/daemons/<daemon-id>/
  DAEMON.md
  scripts/
  references/
```

### `scripts/`

<ol type="a" start="2">
  <li>Scripts must be used for executable, deterministic helpers.</li>
  <li>Scripts must document required inputs, output shape, pagination or completeness expectations, and safe behavior when complete context is unavailable.</li>
</ol>

### `references/`

<ol type="a" start="5">
  <li>References must be used for read-only policy, templates, guides, examples, or other context.</li>
  <li>`DAEMON.md` must say when and how to use any reference the daemon relies on.</li>
</ol>

## 6. Review repeatability and safety

<ol type="a">
  <li>Wake context must be treated as activation context rather than mutation authorization. Current provider state must be refetched immediately before consequential writes.</li>
  <li>Limits must be added when work or visible noise can sprawl.</li>
  <li>For branch mutation, force-push must be denied by default. If repository policy permits it, the daemon must require fresh remote state and `--force-with-lease`. It must state whether fork or cross-repository branches are out of scope.</li>
</ol>

## Learn more

* [Daemons](/daemons): concepts, wake model, and `DAEMON.md` as the control surface.
* [Choosing daemons](/daemons/choosing-daemons): how to identify and scope daemon opportunities.
* [Writing and editing `DAEMON.md`](/daemons/writing-and-editing-daemon-md): guidance for clear, narrow, safe daemon files.
* [`DAEMON.md` reference](/daemons/daemon-md-reference): exact authored contract, validation rules, and support-tree semantics.
* [Testing and iterating on daemons](/daemons/testing-and-iterating-on-daemons): testing, observation, and iteration guidance.
