opbox

The trigger.* family (6 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.

Disabletrigger.disable

PropertyValue
Capabilitytrigger.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

Pause an active trigger. Sets status to PAUSED. Must affect exactly 1 row.

Call POST /v/trigger.disable with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.

Enabletrigger.enable

PropertyValue
Capabilitytrigger.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

Resume a paused trigger. Sets status to ACTIVE. For SCHEDULE/RECURRENCE triggers recomputes next_run_at from the cron (lenient: a legacy unparseable cron falls back to 1 hour - enable must not brick on an old row; upsert is the validation gate).

Call POST /v/trigger.enable with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.

Gettrigger.get

PropertyValue
Capabilitytrigger.read
Risk classRead - autonomy L0
Min. permissionMember
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)
Render schemaYes - drives an inline chat artefact and a GUI panel

one trigger by id, plus the last 10 trigger_dispatch rows (recent fire history).

Call POST /v/trigger.get with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.

Listtrigger.list

PropertyValue
Capabilitytrigger.read
Risk classRead - autonomy L0
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)
Render schemaYes - drives an inline chat artefact and a GUI panel

List triggers in the workspace. Optional filters: sourceKind, status. Supports limit (default 50) and offset (default 0). Returns { triggers: [...], count: N }.

Call POST /v/trigger.list with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool trigger.list.

Testtrigger.test

PropertyValue
Capabilitytrigger.read
Risk classRead - autonomy L0
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)
Render schemaYes - drives an inline chat artefact and a GUI panel

Side-effect-free dry run. Evaluates the filter (predicate DSL: equals/not_equals/gt/lt/gte/lte/in/not_in/contains/exists/not_exists, ALL/ANY logic) against an optional sampleEvent. No writes, no audit events.

Call POST /v/trigger.test with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool trigger.test.

Upserttrigger.upsert

PropertyValue
Capabilitytrigger.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

CREATE or UPDATE a trigger. If id is provided the existing row is updated (must exist, same workspace). Otherwise a new row is inserted with a generated ID.

Call POST /v/trigger.upsert with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool trigger.upsert.