Documentation Index
Fetch the complete documentation index at: https://docs.ascendgtm.net/llms.txt
Use this file to discover all available pages before exploring further.
How scheduling works
Hermes readsagent_job_schedule:{tenant} from KV at each CF Cron trigger (06:00 UTC daily). For each enabled schedule entry that matches the current day’s cadence, it POSTs a job to Hermes and logs the result.
Schedules are stored in KV — no deploy required to add, modify, or disable them.
Creating a schedule
Use the Admin API to set the schedule for a tenant:Schedule fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human label (logged, not sent to agent) |
agent_type | string | Yes | Agent config to run |
message | string | Yes | The job instruction |
enabled | boolean | Yes | Set to false to pause without deleting |
cadence | string | Yes | "daily", "weekly_monday", or "weekly_friday" |
callback_url | string | No | Webhook URL on job completion |
Retrieving the current schedule
Pausing a job without deleting it
Setenabled: false in the schedule entry and PUT the full array back. The cron runner skips disabled entries.
Cadence reference
| Cadence | When it runs |
|---|---|
daily | Every day at 06:00 UTC |
weekly_monday | Mondays at 06:00 UTC |
weekly_friday | Fridays at 06:00 UTC |
Monitoring
Scheduled job runs appear in:- Cloudflare Workers Logs — filter by
cron: hermes-scheduler - error_ledger D1 table — failed runs logged with
action: "hermes_scheduled_job" - Slack alerts — if
SLACK_WEBHOOK_URLis set, job failures trigger an alert
Best practices
- Write agent messages as complete instructions — the agent wakes up with no prior context; be explicit
- Use
callback_urlfor enrichment jobs — so downstream systems know when CRM data is fresh - Disable before editing — set
enabled: false, update the schedule, re-enable to avoid mid-run changes - Test with a job first — submit the same
message+agent_typeas an async job, verify the output, then add to schedule