DIY cron + headless vs. Cyrus
A brutally honest comparison of the two ways to run Claude Code in the background. Written by people who've built both — so we know exactly which parts hurt.
Short version: DIY is free and infinitely flexible, which is exactly what you want for the first three cron jobs and exactly what burns you on the tenth. Cyrus is opinionated, ships the scaffolding, and stops being opinionated at the BYOK boundary. It runs in three flavors — Community self-hosted (free forever), paid self-hosted, or fully managed cloud — so the choice isn't “vendor lock-in or nothing.”
You're the only user. Always.
DIY is the right call when nobody else will ever run your automation. One engineer, one repo, one machine, one prompt. Cron fires, Claude does the work, you read the log in the morning.
The moment a second human needs to see a run, approve a run, or debug a run, you've crossed into infrastructure territory. And infrastructure that's half-built is worse than infrastructure that doesn't exist yet.
Your issue tracker is the schedule.
The instant you want Claude Code to act on Linear issues — or Slack messages, or GitHub comments, or any human-triggered event — Cyrus is the boring, working version of the system you were about to build.
The hard parts are solved: OAuth, webhook signatures, worktree isolation, streaming run events back to the issue, cancellation, approvals, multi-repo routing. They're not glamorous. You'll hate writing them. Cyrus already did.
This whole site is published by the Cyrus team.
You caught us: Background Claude is built and maintained by the people behind Cyrus. Which is exactly why the comparison above is fair rather than fawning. We built the DIY path first. We know where it breaks, because we broke it, on purpose, every way we could think of. Cyrus is the lessons from that, hardened.
If you're a solo engineer with one overnight refactor, please go read the headless guide and ship it yourself. If you're a team and a second human ever needs to know what the agent did last night, Cyrus is the shortest path between “good idea” and “production.”
Go deeper
- Background agent on Linear — the full production loop: webhook, worktree, Claude Code session, PR.
- Claude Code pricing — what background agents actually cost per run, and how to cap them.
- Linear CLI + claude -p — the 30-line DIY shell loop and the 4 failure modes it hits first.
- git worktree for Claude Code — the isolation primitive every background agent ends up implementing.
- The 6 Claude Code permission modes — only one is CI-safe.
- Claude Code --bare mode — reproducibility for scripted runs.
- Claude Code in GitHub Actions (v1) — if GH is your only channel and the loop doesn't matter yet.
- Claude Code CLI reference — every flag, grouped by intent.