Quick Start
1
Agent-first (Python)
Snapshot the model on the
ScheduleJob at creation. When model is set and pin_model is True, the run is pinned and drift fails closed.2
Pin from the CLI
Pass
--model to capture a snapshot. The pin is on by default.3
Follow the default (opt out)
Use
--no-pin for a canary or experimental job that should follow whatever the default becomes.How It Works
The snapshot is taken at add time; the drift check runs at fire time and branches into run-pinned or fail-closed.A
--command (no-LLM) job takes no model turn, so pinning is skipped for it.Which Option?
Three levers plus the no-snapshot default cover every case.Configuration
ScheduleJob fields
provider / model are persisted only when set, and pin_model is persisted only when opting out (False) — agent-only jobs stay byte-for-byte identical on disk. from_dict restores all three and is unknown-key tolerant.
ScheduleJob API Reference
Full
ScheduleJob dataclass referenceCommon Patterns
Pin every scheduled job in a hardened deploy
Capture a snapshot on each job so no unattended run can drift onto a costlier default.Fail closed and deliver the alert
Combine the pin withRunPolicy(deliver_on_failure=True) so a drift is recorded failed and surfaced to the target.
--no-pin for canary / experimental jobs
Follow whatever the default becomes for a job you want tracking the latest model.
Provider-prefix normalisation (no false drift)
A provider-qualified pin (openai/gpt-4o-mini) and a bare-model resolver (gpt-4o-mini) do not false-drift — the embedded provider prefix is lifted out before the comparison. Only the first / splits, so fine-tuned paths like openai/ft:gpt-4o:org::id keep their tail.
Best Practices
Pin every unattended, cost-sensitive job
Pin every unattended, cost-sensitive job
An unattended run has no human to catch a costlier default. Pass
--model on every scheduled job you would not want silently upgraded — the pin defaults to on, so a snapshot is all it takes.Pair the pin with deliver_on_failure
Pair the pin with deliver_on_failure
A fail-closed drift is only useful if someone sees it. Set
RunPolicy(deliver_on_failure=True) so a drift lands in your channel instead of a silent failed record.Use --no-pin only for jobs meant to track the default
Use --no-pin only for jobs meant to track the default
--no-pin opts a job into following the default forever. Reserve it for canaries and experiments — not for anything whose cost or behaviour you rely on.Qualify the model with a provider when you have one
Qualify the model with a provider when you have one
A provider-qualified pin like
openai/gpt-4o-mini is normalised against a bare-model resolution, so it never false-drifts. Provider is only compared when both sides carry one.Related
Schedule CLI
All schedule commands and options
Scheduled Run Policy
deliver_on_failure & policy scans for unattended runs
Multi-Tenant Scheduler
Isolate each gateway user’s jobs with a principal owner key
Command Action
No-LLM command jobs — pinning is skipped for these

