Schedule kinds
| Kind | Field | Description |
|---|---|---|
every | every_ms | Repeat at a fixed interval (milliseconds, minimum 60,000 = 1 minute) |
once | at_ms | Run once at a specific Unix timestamp (milliseconds) |
cron | expr | Standard cron expression (e.g. "0 9 * * 1" for every Monday at 9 AM) |
How jobs execute
When a job fires, Sorat creates an ephemeral agent — a temporary instance with the full tool set, the agent’s persona and soul, and a 3-minute timeout. The job’smessage field is sent as the user prompt.
The ephemeral agent can use all enabled tools (shell, filesystem, web, memory, etc.) to complete the task, then the result is logged.
Creating jobs
- Web UI
- API
- Natural language
- Go to the Cron Jobs page
- Click Create Job
- Enter a name, select schedule kind, configure the timing, and write the task message
Schedule examples
Managing jobs
| Action | API | CLI |
|---|---|---|
| List jobs | GET /api/cron/jobs | TUI > Cron Jobs > List Jobs |
| Enable | PUT /api/cron/jobs/{id} with {"enabled": true} | TUI > Cron Jobs > Enable Job |
| Disable | PUT /api/cron/jobs/{id} with {"enabled": false} | TUI > Cron Jobs > Disable Job |
| Delete | DELETE /api/cron/jobs/{id} | TUI > Cron Jobs > Remove Job |
| Run now | POST /api/cron/jobs/{id}/run | — |
| View logs | GET /api/cron/jobs/{id}/logs | — |
Execution logs
Each job keeps a log of the last 20 executions. Each entry includes:| Field | Description |
|---|---|
timestamp | When the job ran |
status | "success" or "error" |
result | Agent’s text output |
error | Error message (if failed) |
duration_ms | Execution time |
tool_calls | Number of tool calls made |
Internal mechanics
The cron service uses a 10-second ticker that checks all enabled jobs against their schedule. When a job is due:- The
next_runtimestamp is updated immediately - An ephemeral agent is spawned with the job’s message
- The agent runs with a 3-minute timeout
- Results are appended to the job’s execution log
last_run,run_count, andlast_statusare updated
~/.sorat/cron/jobs.json.