Charlie Labs spent time building AI coding agents like everyone else. Then they noticed something. Code shipped faster but the mess grew faster too. Pull requests went unmergeable and docs went stale. So they built something else.

Think of Daemons as background workers that run continuously, watching for what Charlie Labs calls "drift" across codebases, pull requests, issues, and docs. They're defined in plain Markdown files that live in your repo. You write a DAEMON.md file with YAML frontmatter specifying what the daemon watches, what routines it runs, and what it can't do. The Markdown body below defines policy, output formats, and limits. Straightforward setup that keeps the AI on task, much like how botctl manages autonomous agents via declarative Markdown configuration.

There's a real problem here. Charlie Labs calls it "operational debt." Their original agent product required human initiation to generate code and features. That new code overwhelmed the team's capacity to maintain it. Pull requests became unmergeable. CI checks failed and documentation went out of date. The agents that created this work couldn't fix it without further prompting. Daemons handle these tasks without being asked.

Integration works through GitHub, Linear, Sentry, and Slack. You get a PR helper that keeps pull requests review-ready, a feature that addresses the common issue of large, unmergeable pull requests—a solution popularized by GitHub Stacked PRs—a bug triage daemon that cross-references Sentry data for root cause analysis, a codebase maintainer that patches security vulnerabilities and updates dependencies, and a librarian that keeps documentation current. Each operates within strict deny rules. The bug triage daemon can't override priority set by a human or modify source code. It can only fill in what's missing. Charlie Labs has published a library of these patterns at charlielabs.ai.