Skip to content

Cron System

Human includes a cron-like scheduler that lets scheduled commands run on a recurring basis. Jobs are stored in a JSON crontab file and executed by the service loop when the gateway is running.

The cron CLI manages the crontab file at ~/.human/crontab.json:

Terminal window
human cron list # List all scheduled jobs
human cron add "<schedule>" <command> # Add a job
human cron remove <id> # Remove a job by ID

Example:

Terminal window
human cron add "0 9 * * *" "Check email and summarize"
human cron add "*/15 * * * *" echo "Heartbeat"
human cron list
human cron remove 1

Jobs are persisted in ~/.human/crontab.json as a JSON array:

[
{
"id": "1",
"schedule": "0 9 * * *",
"command": "Check email and summarize",
"enabled": true
}
]

Standard 5-field cron syntax:

┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *
Expression Schedule
0 9 * * * Every day at 9:00 AM
*/15 * * * * Every 15 minutes
0 0 * * 1 Every Monday at midnight
0 8,17 * * 1-5 8 AM and 5 PM on weekdays

Cron behavior is configured in ~/.human/config.json under the cron key:

{
"cron": {
"enabled": true,
"interval_minutes": 30,
"max_run_history": 50
}
}
Field Description Default
enabled Enable cron job execution false
interval_minutes How often the scheduler ticks (1–1440) 30
max_run_history Max run records kept per job (0–10000) 50

When running the gateway (human gateway or human service-loop), the WebSocket control protocol exposes additional cron methods:

Method Description
cron.list List scheduled jobs
cron.add Add a job
cron.remove Remove a job
cron.run Manually trigger a job

Use these from the Control UI or any client that connects to the gateway WebSocket.

Cron support requires HU_HAS_CRON (enabled by default). Without it, the cron command and control methods are unavailable.