Three things already in your Claude Code that most people haven't touched: routines, background agents, stacked skills. An engineer detailed how to set up routines, background agents, and stacked skills in Claude Code, sharing a repo-health check routine that runs scheduled cloud agents to verify README instructions. The routine uses a self-contained prompt, cron expressions in UTC, and a one-off run_once_at option for testing, with notifications and transcripts available via the routine page. Three things already in your claude code that most people haven't touched. The setup for each, from my real workflow. A routine is a scheduled cloud agent. It is not a local cron job. Each run spawns an isolated session in Anthropic's cloud with its own git checkout. It cannot see your laptop, your local files, or your local env vars. Everything it needs has to come from the repo it clones and from the prompt. Here is the repo-health check I set up, step by step. Mine: go through every project in ai-weekend-builds and confirm the install and run steps in each README actually work. The prompt is the part that matters most. The cloud agent starts with zero context, so it has to be self-contained. Mine says, in order: map the repo, read each README, extract the exact documented commands, actually run them, record the real error output. Then a list of things to flag — missing README, commands pointing at files that don't exist, missing .env.example when the code reads env vars, lockfile out of sync, version requirements that conflict with what the code needs. Two lines that do a lot of work: Do NOT fix anything. Do NOT commit, push, or open a pull request. This run is read-and-report only. Be specific and paste real command output rather than summarizing it. Without the first, the agent will helpfully start editing your repo. Without the second, you get "a few projects had issues" instead of a stack trace. Cron is five fields, always in UTC , minimum interval one hour. /30 gets rejected. 0 9 1-5 weekdays at 9am UTC 0 12 daily at 12:00 UTC 30 14 1 Mondays at 2:30pm UTC 0 8 1 first of the month, 8am UTC I'm in Europe/Belgrade, which is UTC+2 in summer. So 7am for me is 0 5 . Do the conversion, don't eyeball it. For a one-off you use run once at instead of cron expression , an RFC3339 UTC timestamp that must be in the future: "run once at": "2026-07-31T15:54:30Z" The one-hour minimum does not apply to run once at . That's the escape hatch when you want to watch it fire in ten minutes instead of waiting until tomorrow. I used exactly that to test this routine before switching it to a daily schedule. { "name": "Repo health — ai-weekend-builds", "run once at": "2026-07-31T15:54:30Z", "enabled": true, "notifications": { "channel": { "email": false, "push": true, "slack": false } }, "job config": { "ccr": { "environment id": "env ...", "session context": { "model": "claude-sonnet-5", "sources": { "git repository": { "url": "https://github.com/kju4q/ai-weekend-builds" } } , "allowed tools": "Bash", "Read", "Write", "Edit", "Glob", "Grep" }, "events": { "data": { "uuid": "