{"record":{"id":"ba9e7bfdf30485dd","repo":"NousResearch/hermes-agent","slug":"cron-workdir-must-be-an-absolute-path-got-raw-r","errorCode":null,"errorMessage":"Cron workdir must be an absolute path (got {raw!r}). Cron jobs run detached from any shell cwd, so relative paths are ambiguous.","messagePattern":"Cron workdir must be an absolute path \\(got (.+?)\\)\\. Cron jobs run detached from any shell cwd, so relative paths are ambiguous\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"cron/jobs.py","lineNumber":1419,"sourceCode":"    Rules:\n      - Empty / None → None (feature off, preserves old behaviour).\n      - ``~`` is expanded.  Relative paths are rejected — cron jobs run detached\n        from any shell cwd, so relative paths have no stable meaning.\n      - The path must exist and be a directory at create/update time.  We do\n        NOT re-check at run time (a user might briefly unmount the dir; the\n        scheduler will just fall back to old behaviour with a logged warning).\n\n    Returns the absolute path string, or None when disabled.\n    Raises ValueError on invalid input.\n    \"\"\"\n    if workdir is None:\n        return None\n    raw = str(workdir).strip()\n    if not raw:\n        return None\n    expanded = Path(raw).expanduser()\n    if not expanded.is_absolute():\n        raise ValueError(\n            f\"Cron workdir must be an absolute path (got {raw!r}). \"\n            f\"Cron jobs run detached from any shell cwd, so relative paths are ambiguous.\"\n        )\n    resolved = expanded.resolve()\n    if not resolved.exists():\n        raise ValueError(f\"Cron workdir does not exist: {resolved}\")\n    if not resolved.is_dir():\n        raise ValueError(f\"Cron workdir is not a directory: {resolved}\")\n    return str(resolved)\n\n\ndef _resolve_default_model_snapshot() -> Optional[str]:\n    \"\"\"Resolve the global default model the same way the cron ticker does.\n\n    Mirrors the unpinned-model resolution in ``cron/scheduler.py`` ``run_job``:\n    read ``config.yaml`` ``model.default`` (or the ``model`` alias / bare string\n    form), applying the managed-scope overlay and env expansion. Used by\n    ``create_job`` to snapshot the default model for unpinned jobs so a later","sourceCodeStart":1401,"sourceCodeEnd":1437,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/cron/jobs.py#L1401-L1437","documentation":"Error \"Cron workdir must be an absolute path (got {raw!r}). Cron jobs run detached from any shell cwd, so relative paths are ambiguous.\" thrown in NousResearch/hermes-agent.","triggerScenarios":"Thrown at cron/jobs.py:1419 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the cron job workdir to an absolute path."],"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"}