HERMES AGENT MANUAL

Autonomous Cron & Background Loops

Schedule background workflows, recurring radar monitoring, and automated event notifications with Hermes native scheduler.

Architecture: Native, Local-First Scheduling

Hermes includes a native background scheduler that executes recurring workflows without external cloud cron services, webhooks, or third-party SaaS subscriptions. Scheduled tasks operate as autonomous agent executions running directly against your local environment.

Job specifications are stored in ~/.hermes/jobs.json, while durable run history, attempt logs, and telemetry are tracked in ~/.hermes/cron/executions.db.

Managing Scheduled Jobs via the CLI

The hermes cron command suite provides complete job lifecycle control:

terminal
# List all active and paused cron jobs
$ hermes cron list

# Create a recurring radar job using natural language
$ hermes cron create "every 2h" "Check production API endpoints and alert on errors" --name "health-monitor" --deliver telegram

# Create a daily morning summary using standard 5-part cron syntax
$ hermes cron create "0 8 * * 1-5" "Summarize unread GitHub notifications and pull requests" --name "morning-brief"

# Execute a scheduled job immediately without waiting for interval
$ hermes cron run health-monitor

# Pause and resume jobs
$ hermes cron pause health-monitor
$ hermes cron resume health-monitor

# Inspect execution logs and status
$ hermes cron runs
$ hermes cron status
[PRO TIP]
Hermes also supports managing scheduled jobs directly in conversational chat using the built-in cronjob tool. You can say: "Check my disk usage every morning at 7am and message me on Discord", and the agent will register the job automatically.

Delivery Targets & Dispatch Routing

When a scheduled job completes, Hermes can route the resulting summary, analysis, or alert to your preferred communication channel using the --deliver flag:

  • --deliver local: Prints execution output to terminal or local log file only.
  • --deliver telegram: Dispatches output directly to your configured Telegram bot or channel.
  • --deliver discord: Forwards markdown results to a Discord webhook or bot channel.
  • --deliver signal: Sends end-to-end encrypted alerts via Signal messenger.
  • --deliver <platform>:<chat_id>: Routes execution output to an explicit destination thread or room.

Script-Only Watchdog Jobs (--no-agent)

Not every task requires calling an LLM. For deterministic shell checks, log rotations, or database backups, you can run script-only jobs that execute local code directly and only wake up the LLM if an error or anomaly is detected:

terminal
# Run a fast local script without invoking LLM tokens unless exit code != 0
$ hermes cron create "every 15m" --script "/home/user/scripts/check_services.sh" --no-agent --name "fast-ping"

Diagnostics & Health Checks

To verify that background jobs are healthy, dependencies are satisfied, and lockfiles are clean, run:

terminal
$ hermes cron doctor
[✓] Scheduler daemon running (PID 41209)
[✓] jobs.json readable and valid syntax (3 active jobs)
[✓] SQLite executions.db responsive (12ms read latency)
[✓] No stale .fire-*.lock files detected
[✓] Notification gateways connected (Telegram: OK)

Field Receipts & Common Failure Modes

1. Stale Lockfiles After System Reboots

Symptom: Scheduled job shows status LOCKED or skips scheduled intervals.

Root Cause: If a host machine undergoes an abrupt power cycle or kernel freeze while a job is actively running, Hermes may leave behind a .fire-<job_id>.lock file in ~/.hermes/cron/ to prevent duplicate concurrency.

Remediation: Run hermes cron doctor to detect and safely clear stale locks, or manually inspect~/.hermes/cron/ and remove orphan lockfiles after verifying the PID is no longer active.

2. Running Hermes Cron as a Persistent User Service (systemd)

To ensure background cron jobs execute 24/7 without requiring an open terminal window, deploy a lightweight user systemd service:

~/.config/systemd/user/hermes-cron.service
[Unit]
Description=Hermes Agent Background Scheduler Daemon
After=network.target

[Service]
Type=simple
ExecStart=%h/.local/bin/hermes cron status --daemon
Restart=on-failure
RestartSec=10
Environment="PATH=%h/.local/bin:/usr/local/bin:/usr/bin:/bin"

[Install]
WantedBy=default.target
terminal
$ systemctl --user daemon-reload
$ systemctl --user enable --now hermes-cron.service

3. Durable Memory Across Runs (hermes cron notepad)

Scheduled jobs often need to track what changed since the last execution. Hermes provides a durable key-value store for each job via hermes cron notepad:

terminal
# Inspect current state stored by a job
$ hermes cron notepad get health-monitor

# Set initial tracking benchmark
$ hermes cron notepad set health-monitor last_seen_incident "INC-9012"

Need Help Architecting Production Daemons?

Setting up 24/7 autonomous monitoring loops with error escalation, Discord/Telegram notification pipelines, and zero-trust systemd daemons is covered in detail during a Hermes Launch Lab 1-on-1 session. We pair with you directly to leave your workstation running a bulletproof autonomous agent stack.