{"record":{"id":"618647b796b350e8","repo":"NousResearch/hermes-agent","slug":"cron-job-job-name-has-no-model-configured-job","errorCode":null,"errorMessage":"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>`.","messagePattern":"Cron job '(.+?)' has no model configured \\(job\\.model=(.+?), HERMES_MODEL=(.+?), config\\.yaml model\\.default missing or empty\\)\\. Set a per-job model via `cronjob action=update job_id=(.+?) model=<name>` or set a default with `hermes model <name>`\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"cron/scheduler.py","lineNumber":4006,"sourceCode":"                    ).strip()\n                if not job.get(\"model\"):\n                    if _cron_default_model:\n                        # Cron-fleet default beats the global chat model: it is\n                        # the user's explicit \"cron runs on this\" setting.\n                        model = _cron_default_model\n                    else:\n                        # Shared with Desktop's post-save impact summary so both\n                        # paths compare snapshots against the same global model.\n                        _, _global_model = resolve_cron_model_drift_defaults(_cfg)\n                        if _global_model:\n                            model = _global_model\n        except Exception as e:\n            logger.warning(\"Job '%s': failed to load config.yaml, using defaults: %s\", job_id, e)\n\n        # Fail fast if no model resolved from job / env / config.yaml: an empty\n        # model otherwise reaches the provider as an opaque 400 (#23979).\n        if not (isinstance(model, str) and model.strip()):\n            raise RuntimeError(\n                f\"Cron job '{job_name}' has no model configured \"\n                f\"(job.model={job.get('model')!r}, \"\n                f\"HERMES_MODEL={os.getenv('HERMES_MODEL', '')!r}, \"\n                \"config.yaml model.default missing or empty). \"\n                f\"Set a per-job model via \"\n                f\"`cronjob action=update job_id={job_id} model=<name>` or set a \"\n                \"default with `hermes model <name>`.\"\n            )\n\n        # Apply IPv4 preference if configured.\n        try:\n            from hermes_constants import apply_ipv4_preference\n            _net_cfg = _cfg.get(\"network\", {})\n            if isinstance(_net_cfg, dict) and _net_cfg.get(\"force_ipv4\"):\n                apply_ipv4_preference(force=True)\n        except Exception:\n            pass\n","sourceCodeStart":3988,"sourceCodeEnd":4024,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/cron/scheduler.py#L3988-L4024","documentation":"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.","triggerScenarios":"Thrown at cron/scheduler.py:4006 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set a per-job model via `cronjob action=update job_id=<id> model=<name>`.","Or set a default model with `hermes model <name>`."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c896c09c42910c584c4c7d2325b58c14713ea42c","analyzedAt":"2026-08-14T17:18:01.089Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}