Skip to main content
Put fixed schedules in cron/. Harnest discovers them automatically in both ADK and LangGraph projects.

Folder layout

Use one schedule per Python file, with a matching export: daily_report.py defines daily_report. Nested folders are unsupported; names beginning with _ or . are ignored. No import in agent.py is needed.

Declare an application-owned schedule

This example queues a report at 09:00 UTC, Monday–Friday:
Target a root @task and pass JSON-safe arguments matching its signature.

Start the scheduler

Register the same storage instance with @lifecycle.storage.tasks and @lifecycle.storage.cron (setup), then run:
Keep this process running. harnest run does not activate schedules.

Schedule contract

Tasks may retry; make their side effects idempotent. See task execution. Scheduled tasks that invoke an agent need an explicit service principal to access governed tools and MCP operations. For schedules created by tools at runtime, see Dynamic schedules.