hermes - ✅(Solved) Fix Cron jobs created via CLI silently fail to fire — profile fragmentation [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#25295Fetched 2026-05-14 03:47:28
View on GitHub
Comments
1
Participants
2
Timeline
7
Reactions
0
Author
Participants
Timeline (top)
labeled ×5commented ×1cross-referenced ×1

Error Message

  1. No error is logged — the job is silently ignored
  2. OR at minimum, warn users when their CLI-created crons won't fire due to profile mismatch

Root Cause

Hermes uses two different cron job storage locations depending on the profile:

  • ~/.hermes/cron/jobs.json — default/CLI profile (14 jobs)
  • ~/.hermes/profiles/kimicoder/cron/jobs.json — gateway's active profile (2 jobs)

The gateway runs as profile kimicoder and only reads from its own profile directory. The CLI uses the default profile. These files are never synced. Jobs created via CLI exist on disk but the gateway never sees them.

Fix Action

Fixed

PR fix notes

PR #25323: Fix cron paths for runtime profile overrides

Description (problem / solution / changelog)

Summary

Fixes #25295.

Cron previously resolved cron storage/output locations from import-time constants in cron/jobs.py, so changing HERMES_HOME at runtime (e.g., via profile switching) could still read/write in the old path.

Changes

  • Add runtime path resolution in cron/jobs.py via:
    • _resolve_runtime_paths()
    • _get_cron_dir()
    • _get_jobs_file()
    • _get_output_dir()
  • Route path-sensitive operations through runtime helpers:
    • ensure_dirs()
    • load_jobs()
    • save_jobs()
    • remove_job()
    • save_job_output()
  • Update cron/scheduler.py to read referenced cron output using _get_output_dir().
  • Add regression test: tests/cron/test_cron_runtime_profile_paths.py.

Testing

  • Added regression test for runtime profile path resolution.
  • Full test suite not run.

Changed files

  • cron/jobs.py (modified, +58/-12)
  • cron/scheduler.py (modified, +2/-2)
  • tests/cron/test_cron_runtime_profile_paths.py (added, +38/-0)

Code Example

# CLI profile (gateway ignores this)
cat ~/.hermes/cron/jobs.json | python3 -m json.tool | grep '"name"' | wc -l
# → 14 jobs

# Gateway profile (only these actually fire)
cat ~/.hermes/profiles/kimicoder/cron/jobs.json | python3 -m json.tool | grep '"name"' | wc -l
# → 2 jobs

# Active gateway profile
hermes profile list
# ◆ kimicoder
RAW_BUFFERClick to expand / collapse

Hermes version: v0.13.0 (2026.5.7) Profile: kimicoder (gateway active) Platform: macOS

Problem

Cron jobs created via hermes cron create CLI do not fire even though they appear in hermes cron list.

Root Cause

Hermes uses two different cron job storage locations depending on the profile:

  • ~/.hermes/cron/jobs.json — default/CLI profile (14 jobs)
  • ~/.hermes/profiles/kimicoder/cron/jobs.json — gateway's active profile (2 jobs)

The gateway runs as profile kimicoder and only reads from its own profile directory. The CLI uses the default profile. These files are never synced. Jobs created via CLI exist on disk but the gateway never sees them.

Symptoms

  1. hermes cron list shows a cron job (reads from default profile)
  2. The cron never fires (gateway doesn't read that file)
  3. No error is logged — the job is silently ignored
  4. The dashboard at http://127.0.0.1:9000/cron creates crons in the gateway's profile directory correctly, but CLI-created crons go to the wrong place

Verification

# CLI profile (gateway ignores this)
cat ~/.hermes/cron/jobs.json | python3 -m json.tool | grep '"name"' | wc -l
# → 14 jobs

# Gateway profile (only these actually fire)
cat ~/.hermes/profiles/kimicoder/cron/jobs.json | python3 -m json.tool | grep '"name"' | wc -l
# → 2 jobs

# Active gateway profile
hermes profile list
# ◆ kimicoder

Expected Behavior

All cron jobs should be in a single shared location that both CLI and gateway read. Or the CLI should create crons in the active gateway profile's directory.

Impact

  • All cron jobs created via hermes cron create CLI silently fail to fire
  • Users have no indication their jobs are being ignored
  • Dashboard UI works correctly (creates in gateway profile), CLI does not

Suggested Fix

  1. hermes cron create should write to the active gateway profile's cron/jobs.json, not the default profile's
  2. OR consolidate to a single ~/.hermes/cron/jobs.json that both CLI and gateway share
  3. OR at minimum, warn users when their CLI-created crons won't fire due to profile mismatch

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING