NousResearch/hermes-agent · error · TimeoutError
Cron job '{job_name}' idle for {int(_secs_ago)}s (limit {int
Error message
Cron job '{job_name}' idle for {int(_secs_ago)}s (limit {int(_cron_inactivity_limit)}s) — last activity: {_last_desc} What it means
Error "Cron job '{job_name}' idle for {int(_secs_ago)}s (limit {int(_cron_inactivity_limit)}s) — last activity: {_last_desc}" thrown in NousResearch/hermes-agent.
Source
Thrown at cron/scheduler.py:4515
try:
_activity = agent.get_activity_summary()
except Exception:
pass
_last_desc = _activity.get("last_activity_desc", "unknown")
_secs_ago = _activity.get("seconds_since_activity", 0)
_cur_tool = _activity.get("current_tool")
_iter_n = _activity.get("api_call_count", 0)
_iter_max = _activity.get("max_iterations", 0)
logger.error(
"Job '%s' idle for %.0fs (inactivity limit %.0fs) "
"| last_activity=%s | iteration=%s/%s | tool=%s",
job_name, _secs_ago, _cron_inactivity_limit,
_last_desc, _iter_n, _iter_max,
_cur_tool or "none",
)
request_hard_interrupt(agent, "Cron job timed out (inactivity)")
raise TimeoutError(
f"Cron job '{job_name}' idle for "
f"{int(_secs_ago)}s (limit {int(_cron_inactivity_limit)}s) "
f"— last activity: {_last_desc}"
)
# Guard against non-dict returns from run_conversation under error conditions
if not isinstance(result, dict):
raise RuntimeError(
f"agent.run_conversation returned {type(result).__name__} instead of dict: {result!r}"
)
# If the agent itself reported failure (e.g. all retries exhausted on
# API errors, model abort, mid-run interrupt), do not silently mark the
# job as successful. run_agent populates `failed=True`/`completed=False`
# on these paths and may put the error into `final_response`, which
# would otherwise be delivered as if it were the agent's reply and the
# job's `last_status` set to "ok". Raise so the except handler below
# builds the proper failure tuple. (issue #17855)View on GitHub (pinned to c896c09c42)
Solutions
- Investigate why the job stalled (provider hang, long tool call) and rerun.
- Raise the cron inactivity limit only if the workload legitimately runs longer.
When it happens
Trigger: Thrown at cron/scheduler.py:4515 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of NousResearch/hermes-agent@c896c09c42 (2026-08-14).
Data as JSON: /api/errors/ccbb49e5f126a805.
Report an issue: GitHub.