# NousResearch/hermes-agent · Mostly cron-related fixes and bug report; one unrelated model metadata PR

## Open now

- 1 issue, 1 PR open on GitHub.
- #6797: \[Bug\]: At some point a session is unable to make any changes to Cron (Hermes in Docker)
- PR #12595: fix(model_metadata): divide llama.cpp n_ctx by total_slots (#6797)

Three members concern cron behavior: a PR about raising exceptions to avoid silent data loss, a bug report about a session being unable to change Cron in Docker, and a PR salvaging earlier cron fix PRs. The fourth, about dividing llama.cpp n_ctx by total_slots in model_metadata, appears to be a separate topic.

## TL;DR

- 4 member(s): 1 open issue(s), 0 closed issue(s), 1 open PR(s), 1 merged PR(s), 1 PR(s) closed without merging.
- A fix was merged to main in PR #7453. Verify it addresses your case.
- **Recommended:** read PR #7453 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.50`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Open related issues

- #6797: \[Bug\]: At some point a session is unable to make any changes to Cron (Hermes in Docker)

## Prior & competing PRs

- **#7453: fix(cron): salvage cron fix PRs #6917 #6810**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `cron/jobs.py`, `cron/scheduler.py`
  - fix hunks:
  - `cron/jobs.py`

    ```diff
    @@ -31,7 +31,7 @@
     # Configuration
     # =============================================================================
     
    -HERMES_DIR = get_hermes_home()
    +HERMES_DIR = get_hermes_home().resolve()
     CRON_DIR = HERMES_DIR / "cron"
     JOBS_FILE = CRON_DIR / "jobs.json"
     OUTPUT_DIR = CRON_DIR / "output"
    ```

    ```diff
    @@ -338,10 +338,12 @@ def load_jobs() -> List[Dict[str, Any]]:
                         save_jobs(jobs)
                         logger.warning("Auto-repaired jobs.json (had invalid control characters)")
                     return jobs
    -        except Exception:
    -            return []
    -    except IOError:
    -        return []
    +        except Exception as e:
    +            logger.error("Failed to auto-repair jobs.json: %s", e)
    +            raise RuntimeError(f"Cron database corrupted and unrepairable: {e}") from e
    +    except IOError as e:
    +        logger.error("IOError reading jobs.json: %s", e)
    +        raise RuntimeError(f"Failed to read cron database: {e}") from e
     
     
     def save_jobs(jobs: List[Dict[str, Any]]):
    ```

    ```diff
    @@ -452,6 +454,7 @@ def create_job(
             "last_run_at": None,
             "last_status": None,
             "last_error": None,
    +        "last_delivery_error": None,
             # Delivery configuration
             "deliver": deliver,
             "origin": origin,  # Tracks where job was created for "origin" delivery
    ```

    ```diff
    @@ -620,8 +623,8 @@ def mark_job_run(job_id: str, success: bool, error: Optional[str] = None,
     
                 save_jobs(jobs)
                 return
    -    
    -    save_jobs(jobs)
    +
    +    logger.warning("mark_job_run: job_id %s not found, skipping save", job_id)
     
     
     def advance_next_run(job_id: str) -> bool:
    ```
  - `cron/scheduler.py`

    ```diff
    @@ -769,7 +769,7 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]:
                 _cron_pool.shutdown(wait=False, cancel_futures=True)
                 raise
             finally:
    -            _cron_pool.shutdown(wait=False)
    +            _cron_pool.shutdown(wait=False, cancel_futures=True)
     
             if _inactivity_timeout:
                 # Build diagnostic summary from the agent's activity tracker.
    ```
- **#6810: fix(cron): prevent silent data loss by raising exceptions on unrecove…**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#7453`
- **#12595: fix(model_metadata): divide llama.cpp n_ctx by total_slots (#6797)**. open
  - maintainer direction: category `uncategorized`; implication `needs_llm`; refs `ce4a7b849388b67d45ad420bdd82d5efcd55647a`, `#10704`
  - files: `agent/model_metadata.py`, `tests/agent/test_model_metadata.py`

## Fix status

- Merged to main in PR #7453 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-04-10`. This confirmation is old and may be out of date (a revert/reopen would not have invalidated it here); re-verify.
- Subsystem: `agent`
