Skip to main content
A cron declaration targets an existing root @task. It does not expose a new model tool.
The export name must match cron/<name>.py. Arguments are JSON-safe, signature-checked at compile time, and kept in Harnest’s private payload store.

Schedule contract

Each occurrence uses the schedule identity and timestamp as its idempotency key, then enters the same private task queue as task.defer(...). Every effect must still be idempotent because a worker can retry after failure.
harnest run never activates schedules. The application still needs HARNEST_TASK_DATABASE_URL or one unambiguous PostgreSQL store.
See Queued tasks for task results, retries, and starting a fresh agent session from scheduled work.