Schedule management via REST API.

Demonstrates creating, listing, updating, enabling/disabling, manually triggering, and deleting schedules.

1"""Schedule management via REST API.
2
3Demonstrates creating, listing, updating, enabling/disabling,
4manually triggering, and deleting schedules.
5
6Prerequisites:
7 pip install kern-ai[scheduler] httpx
8
9Usage:
10 # First, start the server:
11 python cookbook/05_agent_os/scheduler/basic_schedule.py
12
13 # Then run this script:
14 python cookbook/05_agent_os/scheduler/schedule_management.py
15"""
16
17import httpx
18
19# ---------------------------------------------------------------------------
20# Create Example
21# ---------------------------------------------------------------------------
22
23BASE_URL = "http://localhost:7777"
24
25
26def main():
27 client = httpx.Client(base_url=BASE_URL, timeout=30)
28
29 # 1. Create a schedule
30 print("--- Creating schedule ---")
31 resp = client.post(
32 "/schedules",
33 json={
34 "name": "hourly-greeting",
35 "cron_expr": "0 * * * *",
36 "endpoint": "/agents/greeter/runs",
37 "payload": {"message": "Hourly check-in"},
38 "timezone": "UTC",
39 "max_retries": 2,
40 "retry_delay_seconds": 30,
41 },
42 )
43 print(f" Status: {resp.status_code}")
44 schedule = resp.json()
45 schedule_id = schedule["id"]
46 print(f" ID: {schedule_id}")
47 print(f" Next run at: {schedule['next_run_at']}")
48 print()
49
50 # 2. List all schedules
51 print("--- Listing schedules ---")
52 resp = client.get("/schedules")
53 schedules = resp.json()
54 for s in schedules:
55 print(f" {s['name']} (enabled={s['enabled']}, next_run={s['next_run_at']})")
56 print()
57
58 # 3. Update the schedule
59 print("--- Updating schedule ---")
60 resp = client.patch(
61 f"/schedules/{schedule_id}",
62 json={"description": "Runs every hour on the hour", "max_retries": 3},
63 )
64 print(f" Updated description: {resp.json()['description']}")
65 print()
66
67 # 4. Disable the schedule
68 print("--- Disabling schedule ---")
69 resp = client.post(f"/schedules/{schedule_id}/disable")
70 print(f" Enabled: {resp.json()['enabled']}")
71 print()
72
73 # 5. Re-enable the schedule
74 print("--- Enabling schedule ---")
75 resp = client.post(f"/schedules/{schedule_id}/enable")
76 print(f" Enabled: {resp.json()['enabled']}")
77 print(f" Next run at: {resp.json()['next_run_at']}")
78 print()
79
80 # 6. Manually trigger
81 print("--- Triggering schedule ---")
82 resp = client.post(f"/schedules/{schedule_id}/trigger")
83 print(f" Trigger status: {resp.status_code}")
84 print(f" Run: {resp.json()}")
85 print()
86
87 # 7. View run history
88 print("--- Run history ---")
89 resp = client.get(f"/schedules/{schedule_id}/runs")
90 runs = resp.json()
91 print(f" Total runs: {len(runs)}")
92 for run in runs:
93 print(
94 f" attempt={run['attempt']} status={run['status']} triggered_at={run['triggered_at']}"
95 )
96 print()
97
98 # 8. Delete the schedule
99 print("--- Deleting schedule ---")
100 resp = client.delete(f"/schedules/{schedule_id}")
101 print(f" Delete status: {resp.status_code}")
102
103 # Verify deletion
104 resp = client.get(f"/schedules/{schedule_id}")
105 print(f" Get after delete: {resp.status_code} (expected 404)")
106
107
108# ---------------------------------------------------------------------------
109# Run Example
110# ---------------------------------------------------------------------------
111
112if __name__ == "__main__":
113 main()

Run the Example

1# Clone and setup repo
2git clone https://github.com/kern-ai/kern.git
3cd kern/cookbook/05_agent_os/scheduler
4
5# Create and activate virtual environment
6./scripts/demo_setup.sh
7source .venvs/demo/bin/activate
8
9python schedule_management.py