Skip to main content
Triggers turn a computer into a reactive system. Each trigger pairs a source that produces events with one or more actions that run in response, plus optional dedup to suppress noise. They run continuously inside the computer, managed for you.
Each trigger requires a unique name, a source, and at least one entry in actions. title and description are labels for the dashboard, and enabled defaults to true when omitted. A template may declare up to 256 triggers.

Sources

A source’s type selects which fields apply. A cron schedule has no seconds field, and when it restricts both day-of-month and day-of-week, both must match. An http source fires on every poll that returns expect_code, so with the defaults a healthy URL fires every 30 seconds. A metric source fires again every duration while the condition holds. To emit a custom event, append a JSON line with a name field to /var/lib/orgo/events.jsonl, for example {"name": "deploy.done"}. A trigger whose event matches that name fires. The line that creates the file is not read, so create the file first, for example with touch /var/lib/orgo/events.jsonl in build.run. Metric sources cover cpu_percent, ram_percent, disk_percent, net_in_mbps, and net_out_mbps, compared with >, >=, <, <=, ==, or !=.
Validation also accepts the metrics gpu_percent, gpu_memory_percent, and gpu_temp_celsius, and the desktop events screen_change, file_change, audio_stream_start, audio_stream_stop, process_start, process_stop, idle, and active. A trigger on any of them never fires.

Actions

A trigger runs one or more actions in order. The type selects the fields.
The api action does not send the Desktop API’s token, so a call to any route that requires authentication fails with 401.
String fields such as url, body, headers, run, title, message, and endpoint expand four placeholders: {{trigger}} (the trigger name), {{source}} (the source type), {{time}} (RFC 3339), and {{data.KEY}} (a field of the event, such as {{data.path}} for a file source). Write them without inner spaces; {{ data.path }} is left as is.

Dedup

Bursty sources can fire constantly. Add at most one dedup strategy per trigger. Independent of dedup, a trigger fires at most 120 times a minute.

Triggers vs. health checks

They complement each other:
  • A health check is a per-app watchdog. It probes one URL, port, command, or process and can restart a service when the probe keeps failing (on_fail: restart_service:…).
  • A trigger is general automation: any source to any action, across the whole computer.
Reach for a health check to keep a service alive; reach for a trigger to react to files, schedules, metrics, or desktop activity.

Next steps

Schema reference

Every source and action field.

Examples

Triggers in real templates.