NousResearch/hermes-agent · error · RuntimeError

Cron job '{job_name}' has no model configured (job.model={jo

Error message

Cron job '{job_name}' has no model configured (job.model={job.get('model')!r}, HERMES_MODEL={os.getenv('HERMES_MODEL', '')!r}, config.yaml model.default missing or empty). Set a per-job model via `cronjob action=update job_id={job_id} model=<name>` or set a default with `hermes model <name>`.

What it means

Error "Cron job '{job_name}' has no model configured (job.model={job.get('model')!r}, HERMES_MODEL={os.getenv('HERMES_MODEL', '')!r}, config.yaml model.default missing or empty). Set a per-job model via `cronjob action=update job_id={job_id} model=<name>` or set a default with `hermes model <name>`." thrown in NousResearch/hermes-agent.

Source

Thrown at cron/scheduler.py:4006

                    ).strip()
                if not job.get("model"):
                    if _cron_default_model:
                        # Cron-fleet default beats the global chat model: it is
                        # the user's explicit "cron runs on this" setting.
                        model = _cron_default_model
                    else:
                        # Shared with Desktop's post-save impact summary so both
                        # paths compare snapshots against the same global model.
                        _, _global_model = resolve_cron_model_drift_defaults(_cfg)
                        if _global_model:
                            model = _global_model
        except Exception as e:
            logger.warning("Job '%s': failed to load config.yaml, using defaults: %s", job_id, e)

        # Fail fast if no model resolved from job / env / config.yaml: an empty
        # model otherwise reaches the provider as an opaque 400 (#23979).
        if not (isinstance(model, str) and model.strip()):
            raise RuntimeError(
                f"Cron job '{job_name}' has no model configured "
                f"(job.model={job.get('model')!r}, "
                f"HERMES_MODEL={os.getenv('HERMES_MODEL', '')!r}, "
                "config.yaml model.default missing or empty). "
                f"Set a per-job model via "
                f"`cronjob action=update job_id={job_id} model=<name>` or set a "
                "default with `hermes model <name>`."
            )

        # Apply IPv4 preference if configured.
        try:
            from hermes_constants import apply_ipv4_preference
            _net_cfg = _cfg.get("network", {})
            if isinstance(_net_cfg, dict) and _net_cfg.get("force_ipv4"):
                apply_ipv4_preference(force=True)
        except Exception:
            pass

View on GitHub (pinned to c896c09c42)

Solutions

  1. Set a per-job model via `cronjob action=update job_id=<id> model=<name>`.
  2. Or set a default model with `hermes model <name>`.

When it happens

Trigger: Thrown at cron/scheduler.py:4006 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/618647b796b350e8. Report an issue: GitHub.