Anthropic shipped scheduled deployments and credential vaults for Claude Managed Agents in June 2026. The premise — "agents on autopilot" — is going mainstream. But nobody writes about what actually breaks when an agent runs unattended at 7 AM.
I run four live scheduled agents via Hermes cron. Here's what failed, why, and the monitoring discipline that keeps them honest.
The four agents I run
| Agent | Schedule | What it does |
|---|---|---|
| Morning briefing | Daily 8 AM | Pulls Notion Agent Queue, git status across 3 repos, Vercel deploys, Hermes gateway health → posts to Discord |
| Blog topic discovery | Mon 9 AM | Runs ai-practice-researcher agent → produces 3 researched topic candidates with sources → writes to research/YYYY-MM-DD-topic-ideas.md |
| Blog draft/publish | Mon 10 AM | Orchestrates blog-writer → image-creator → seo-recruiter-optimizer → release-verifier → shows preview for approval |
| Weekly worklog updater | Fri 9:30 AM | Appends one-liner to session-log.md from git commits + cron deliveries |
| Invoice tracker | Recurring | Watches for new invoices in paperless-ngx, matches to shareholder loan ledger, flags discrepancies |
What actually broke
1. Silent OAuth expiry (Morning briefing)
The briefing uses a Notion integration token and a Discord webhook. The Notion token expired mid-July. The cron ran successfully (exit code 0), returned no data, and delivered an empty briefing to Discord. Three days of silence before I noticed.
Root cause: Notion tokens don't auto-renew. The cron had no health check on the token — just assumed "200 OK = working."
Fix: Added a pre-flight token validation step. If the Notion /v1/users/me call fails, the briefing now alerts me directly instead of posting empty content.
2. Deduplication hell (Invoice tracker)
First version: wrote every invoice to the loan ledger. Duplicates everywhere. Second version: deduped by invoice ID. Missed invoices re-uploaded with new IDs. Third version: content-hash dedup (file hash + amount + date + counterparty). Handles re-uploads, partial OCR differences, and corrected invoices.
The lesson: deduplication is a domain problem, not a technical one. You need to know what "same invoice" means in your business before you write the code.
3. Model config drift (Blog topic discovery)
This one's fresh. The cron was created with model: openrouter/free. Hermes global config drifted to skillclaw-model. The cron scheduler refuses to run it: "global inference config drifted since this job was created... pin it explicitly."
The cron looks enabled. It shows a next run time. But it silently skips every Monday. I only caught it because I manually checked the cron status after noticing no new research files since July 20.
Fix: Pinned the model at cron creation time (provider: openrouter, model: nvidia/nemotron-3-ultra-550b-a55b:free). Better: use a model alias that resolves at runtime, not a pinned version.
4. Compounding partial failures (Blog draft/publish)
The pipeline has 4 agent steps. Step 2 (image-creator) failed once because the Gemini API key wasn't in the environment. Step 3 (seo-recruiter-optimizer) ran anyway on the draft without a cover image. Step 4 (release-verifier) built the site, preview deployed, but the post had no hero image.
No step failed loudly enough to stop the chain. The "success" delivery showed a preview URL that looked fine until you opened it.
Fix: Each agent step now returns a structured result with ok: boolean and artifacts: []. The orchestrator halts on any ok: false and reports which step failed with what artifact was expected.
The scheduling stack comparison
| Approach | Good for | Breaks when |
|---|---|---|
| System cron + scripts | Simple, idempotent tasks (backups, cleanup) | No visibility, no retries, no structured output, silent failures |
| Hermes cron | Agent-driven workflows with model calls | Config drift, model pinning, no built-in alerting on empty output |
| n8n / Make / Zapier | Visual workflows, many integrations, non-technical ops | Vendor lock-in, per-execution cost, hard to version control, debug in UI |
| Loop agents (LangGraph, AutoGen, custom) | Complex multi-step reasoning, dynamic tool use | Infinite loops, token burn, no natural "cron" semantics, hard to observe |
My rule: Use the simplest thing that gives you structured output + failure visibility + version control.
- System cron for infrastructure (backups, cert renewals, log rotation)
- Hermes cron for agent workflows (I own the runtime, it's in git, agents are markdown files I can read)
- n8n only for workflows that need 10+ SaaS integrations and non-technical owners
- Loop agents only when the logic requires dynamic branching, not just scheduling
The monitoring discipline that works
1. Every scheduled job must produce a heartbeat artifact
Not just "ran successfully." A JSON file, a log line, a Notion page update, a Discord message — something that proves it did the work, not just it started.
// Morning briefing heartbeat
{
"ran_at": "2026-08-05T08:00:18Z",
"notion_tickets": 0,
"git_repos_checked": 3,
"vercel_deploys": 2,
"gateway_status": "healthy",
"delivered_to": "discord:#general",
"status": "ok"
}
2. Dead man's switch on the heartbeat
A separate lightweight cron (or the same one, different schedule) checks: "Did the morning briefing heartbeat arrive within 30 minutes of 8 AM?" If not → alert me. This catches the "cron ran but produced nothing" case.
3. Structured step results for multi-agent pipelines
Each agent returns:
{
"ok": True,
"agent": "blog-writer",
"artifacts": ["draft.md", "frontmatter.json"],
"tokens_used": 4200,
"duration_sec": 45
}
The orchestrator validates ok and artifacts before passing to the next step.
4. Token/cost guardrails on every model call
Hermes cron jobs run on free models by default (nemotron-3-ultra:free). But if a job accidentally gets pinned to a paid model, a runaway loop could burn real money. Every agent wrapper enforces max_tokens and max_turns at the tool level, not just the prompt level.
5. Version-controlled cron definitions
My Hermes cron jobs are defined in a YAML file tracked in git. Changing a schedule, model, or prompt is a commit. I can bisect when behavior changed. The live cron state is the applied version of that file.
What I'd tell a founder hiring their first "AI operator"
Scheduled agents are not free labor. They are junior hires who work nights.
You wouldn't hire a junior, give them a calendar invite for "7 AM daily: pull data, write report, email team," and never check if the email sent, if the data was stale, or if they quit three weeks ago. You'd want:
- A read receipt on the email
- A dashboard showing last successful run
- An alert if the report is empty
- A way to see what they actually did
The tooling for this is boring: heartbeats, dead man's switches, structured logs, version-controlled job definitions. But it's the difference between "I have agents running on a schedule" and "I know my agents ran correctly this morning."
The takeaway
Before you put an agent on a schedule, design the monitoring stack first: 1. What artifact proves success? 2. What alert fires if the artifact is missing or malformed? 3. How do you version-control the job definition? 4. What's the rollback if the agent starts misbehaving?
The schedule is the easy part. The discipline is what keeps it running when you're not watching.
---
Sources:
- TechTimes: Claude Managed Agents Add Cron Schedules and Credential Vaults (June 10, 2026)
- ChatForest: Claude Managed Agents Scheduled Deployments
- Zylos Research: Agent Interoperability Protocols (March 26, 2026)
- Hermes cron implementation at
/Users/lucy/.hermes/cron/(live on this machine) - Onyx shared AI memory system at
/Users/Shared/dev-projects/VPay/Onyx/AI Memory/
