Pin Models for Unattended Cron Runs

Scheduled work runs when nobody is present to choose a model, refresh a broken login, or clarify an ambiguous prompt. Model and provider behavior therefore belongs in the job's release checklist.

Official documentation: https://hermes-agent.nousresearch.com/docs/user-guide/features/cron

Why pinning matters

Hermes snapshots the provider and model context for newly created jobs. If an unpinned job would unexpectedly inherit a changed global default, the scheduler can fail closed instead of silently spending against a different provider. Treat that alert as a configuration decision, not as permission to bypass the guard.

Unattended-job checklist

  • [ ] Choose a provider and model appropriate to the task's cost and quality risk.
  • [ ] Verify the credential method can refresh without a person present.
  • [ ] Pin the model deliberately after changing global defaults.
  • [ ] Attach only the skills and tools the job needs.
  • [ ] Set an explicit workdir when repository context matters.
  • [ ] Make the prompt self-contained because each run starts fresh.
  • [ ] Set a delivery target and define when [SILENT] is appropriate.
  • [ ] Trigger one manual run before trusting the schedule.

Workdir and context

Cron jobs do not automatically run inside the project you were using when you created them. Without an explicit workdir they may not load project guidance, and file tools may start somewhere unexpected. Workdir jobs are serialized to avoid process-wide current-directory conflicts; that safety behavior is preferable to parallel runs corrupting each other's location.

Authentication choices

Credentials suitable for interactive chat may not be suitable for a midnight job. Prefer an authentication path with automatic refresh for unattended use. Do not put API keys inside prompts, scripts, wiki pages, or delivery messages. Confirm the selected profile owns the expected credentials and delivery channel.

Pitfalls

  • Assuming a global model change should silently apply to old jobs.
  • Using a premium model for a deterministic threshold check.
  • Scheduling a repository task without a workdir.
  • Writing “check that issue” in a fresh-session prompt with no source identifier.
  • Testing model inference but not final delivery.
  • Letting cron recursively create more cron jobs; Hermes disables that path to prevent scheduling loops.

Verification steps

  • Inspect the job definition for provider, model, skills, workdir, and destination.
  • Run the job manually through the scheduler.
  • Confirm the intended provider handled the run without interactive login.
  • Verify files were read from the expected project directory.
  • Check the saved cron output and destination message.
  • Change nothing else, wait for one scheduled tick, and compare behavior.