NousResearch/hermes-agent · error · RuntimeError

Cron job '{job_id}' blocked for safety: {err}

Error message

Cron job '{job_id}' blocked for safety: {err}

What it means

Error "Cron job '{job_id}' blocked for safety: {err}" thrown in NousResearch/hermes-agent.

Source

Thrown at cron/scheduler.py:3203

        # error. But any job that DID set a base_url is refused until the
        # validator can actually vet the pair. Operator fallback providers come
        # from config, not the job, so they are unaffected.
        if job.get("base_url"):
            err = (
                f"could not validate provider/base_url pair "
                f"({exc.__class__.__name__}: {exc}); refusing to run a job with "
                "an unverified base_url override"
            )
        else:
            err = None
    if err:
        job_id = job.get("id")
        logger.error(
            "Job '%s': refusing to run — unsafe provider/base_url pair could "
            "exfiltrate a stored credential: %s",
            job_id, err,
        )
        raise RuntimeError(f"Cron job '{job_id}' blocked for safety: {err}")


# Marker prefix stamped into the error string returned by ``run_job`` when the
# pre-dispatch configuration validation (T1-26) refuses to run the agent.
# ``run_one_job`` keys off it to record ``last_status='blocked_config'`` and to
# apply the alert-once dedup. The ``:silent`` variant means "already alerted on
# a previous tick — do not deliver again".
BLOCKED_CONFIG_MARKER = "[blocked_config]"
BLOCKED_CONFIG_SILENT_MARKER = "[blocked_config:silent]"

# Marker prefix for a #44585 drift-guard skip. Same alert-once contract as
# blocked_config: run_one_job keys off it to record last_status and the
# ``:silent`` variant means "already alerted on a previous tick — do not
# deliver again" (the drift_alerted bit on the job record, #73506 shape).
DRIFT_SKIP_MARKER = "[drift_skip]"
DRIFT_SKIP_SILENT_MARKER = "[drift_skip:silent]"

View on GitHub (pinned to c896c09c42)

Solutions

  1. Read the block reason in the error and adjust the job to comply with the safety guard.
  2. Remove lifecycle or otherwise blocked commands from the job.

When it happens

Trigger: Thrown at cron/scheduler.py:3203 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/3d602e42fa03f631. Report an issue: GitHub.