Sources
A source’stype selects which fields apply.
| Type | Fires when | Key fields |
|---|---|---|
cron | A schedule elapses | schedule (5-field cron) |
file | A path is created, modified, or deleted | path, events: [create, modify, delete] |
http | Polling a URL returns an unexpected status | url, method, expect_code, interval |
process | A process starts or stops | process |
metric | A system metric crosses a threshold | metric, op, value, duration |
log | A service log line matches | service, match, parse: text|json |
event | A custom event is emitted in the VM | event |
desktop | A desktop event occurs | event (window_focus, clipboard, idle, …) |
cpu_percent, ram_percent, disk_percent, net_in_mbps, net_out_mbps, and the gpu_* family, compared with >, >=, <, <=, ==, or !=.
Actions
A trigger runs one or more actions in order. Thetype selects the fields.
| Type | Does | Key fields |
|---|---|---|
webhook | HTTP request out | url, method, headers, body |
command | Run a shell command | run, cwd, timeout |
service | Control a service | op: start|stop|restart, target |
notify | In-VM notification | title, level: info|warning|critical |
log | Write to the trigger log | message |
api | Call the in-VM desktop API | endpoint |
body, run, and similar fields support {{...}} templating, so you can include event data in a webhook payload.
Dedup
Bursty sources can fire constantly. Add at most one dedup strategy per trigger.| Strategy | Effect |
|---|---|
debounce | Collapse a burst, fire once after it settles. |
cooldown | Enforce a minimum gap between fires. |
rate_limit | Cap fires, e.g. 10/1m. |
Triggers vs. health checks
They complement each other:- A health check is a per-app watchdog — it polls one service and auto-heals it (
on_fail: restart_service:…). - A trigger is general automation — any source to any action, across the whole VM.
Next steps
Schema reference
Every source and action field.
Examples
Triggers in real templates.