# Charlie Labs Daemons

Charlie Labs' "Daemons" are autonomous background AI processes that run continuously against a team's operational surfaces (GitHub, Linear, Sentry, Slack, docs) and maintain them without being prompted each time. Their positioning tagline: *"Agents create work. Daemons maintain it."* See [[agents-vs-daemons]] for the broader concept.

Each daemon is a Markdown file with YAML frontmatter. The frontmatter declares the role; the body declares the policy.

## File format

```yaml
---
name: pr-helper
purpose: Keeps PRs review-ready.
watch:
  - when a pull request is opened
  - when a pull request is synchronized
routines:
  - suggest PR description improvements
  - flag missing reviewer context
deny:
  - merge pull requests
  - push to protected branches
schedule: "0 9 * * *"
---

## Policy
Focus on short, actionable feedback.

## Output format
1. Findings
2. Suggested edits
3. Questions for author
```

Fields:
- `name`, `purpose` — identity.
- `watch` — event triggers (plain-English descriptions of when the daemon should wake).
- `routines` — what the daemon does on activation.
- `deny` — hard constraints. The daemon can't perform these actions regardless of what its reasoning concludes.
- `schedule` — cron expression for periodic activation (daemons can be hybrid: event-driven + scheduled sweeps).

Markdown body: policy, output format, limits (e.g., "process at most 20 issues per activation"), escalation rules.

The spec is described as "an open format" — same file meant to work across providers, though currently Charlie is the only implementation.

## Example daemons from their library

- **Project Manager** — keeps Linear issues up to date.
- **Bug Triage** — watches bug tracker, prevents recurrences.
- **Codebase Maintainer** — keeps dependencies patched.
- **Librarian** — keeps documentation accurate.
- **Issue Labeler** (full example in their marketing) — additive-only labeling from predefined groups, 20-issue rate limit, on both create-time and daily sweeps.

## Design choices

**Define a role, not a task.** Daemons are ongoing responsibilities with judgment. A task has a start, an end, and a definition of done; a role is ongoing. This reframes the unit of work from "what should this run do" to "what is this daemon responsible for indefinitely."

**Deny rules as first-class.** The frontmatter has equal space for `routines` (do these things) and `deny` (never do these things). Most agent configuration systems put allow-lists in configuration and constraints in English inside system prompts; Charlie makes both declarative, which makes the capability surface auditable at a glance.

**Predictable behavior earns autonomy.** Their marketing argument: small deterministic daemons that reliably do narrow things are easier to trust than large agents doing broad things. The daemon file becomes a contract — humans tune it, daemons follow it.

**Hybrid activation.** Watch-plus-schedule is the common pattern: wake on new issues *and* sweep daily to catch anything missed. The schedule isn't just a fallback; it's how the daemon catches up from downtime or missed events.

## Framing vs agents

Charlie's argument is that the interesting post-agent-wave work isn't better agents — it's paying down the operational debt agents generate. Every feature-shipping agent creates PRs, issues, stale docs, outdated deps; every daemon is a role that keeps one of those surfaces clean. The analogy: agents are your IC team, daemons are the ops team that keeps the lights on.

This is a distinctive take in the current AI-agent marketing landscape, where most products pitch "better agents that do more." Charlie's explicit position is "agents are fine, the problem is what they leave behind."

## Limitations

- **Hosted service.** Daemons run on Charlie's infrastructure, not locally. Not a concern for most teams but rules it out for strict self-hosted setups.
- **Provider-specific integrations.** GitHub, Linear, Sentry, Slack are supported; other surfaces (Jira, GitLab, Gitea) aren't listed as of April 2026.
- **Proprietary.** The file format is described as open, but the runtime isn't.
- **Judgment quality is daemon-quality.** "Only add labels, never remove" is enforceable by deny rules; "apply the best-fit label from each group" is as good as the LLM picking labels.

## Repo / Site

[charlielabs.ai](https://charlielabs.ai/) — marketing site with the full daemon library and examples. Customer testimonial from Jasper Croome at aarden.ai in the footer.

## Related

- [[agents-vs-daemons]] — the concept page for the human-initiated vs self-initiated distinction
- [[ctx]], [[crabtrap]], [[hazmat]], [[bubblewrap-dev-env]] — the adjacent cluster of AI-agent infrastructure
- [[behavior-tree]] — a different structured-control pattern for autonomous processes (game AI, robotics)
- [[agent-memory-decay]] — relevant when designing long-lived daemons that build context over time
