Selects how functions are invoked — synchronous calls that return results, fire-and-forget void dispatches, or durable enqueue through named queues with retries. Use when deciding between blocking RPC calls, background job dispatch, async workers, or reliable message delivery with acknowledgement.
83
78%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./skills/iii-trigger-actions/SKILL.mdComparable to: RPC vs message queue vs fire-and-forget patterns
Use the concepts below when they fit the task. Not every invocation needs all three modes.
TriggerAction.Void()): fire-and-forget dispatch, returns immediately with null, no retry guaranteesTriggerAction.Enqueue({ queue })): routes through a named queue with automatic retries and backoff, returns a messageReceiptIdThe caller invokes trigger() with an optional action parameter. Synchronous mode waits for the handler result. Void mode dispatches and returns null immediately. Enqueue mode places the payload on a named queue where a consumer processes it with retry guarantees.
| Primitive | Purpose |
|---|---|
trigger({ function_id, payload }) | Synchronous invocation, blocks for result |
trigger({ ..., action: TriggerAction.Void() }) | Fire-and-forget, returns immediately with null |
trigger({ ..., action: TriggerAction.Enqueue({ queue }) }) | Durable async via named queue, returns receipt |
iii trigger --function-id=ID --payload=JSON | CLI trigger (part of the engine binary) |
--timeout-ms | CLI flag to set trigger timeout (default 30s) |
See ../references/trigger-actions.js for the full working example — a comparison of all three
Also available in Python: ../references/trigger-actions.py
Also available in Rust: ../references/trigger-actions.rs invocation modes showing when and how to use sync, void, and enqueue patterns.
Code using this pattern commonly includes, when relevant:
await iii.trigger({ function_id: 'users::get', payload: { id } }) — sync, get result directlyiii.trigger({ function_id: 'analytics::track', payload: event, action: TriggerAction.Void() }) — fire-and-forgetiii.trigger({ function_id: 'orders::process', payload: order, action: TriggerAction.Enqueue({ queue: 'payments' }) }) — durable enqueuenull / None{ messageReceiptId: string } for trackingiii trigger --function-id='users::get' --payload='{"id":"123"}' — invoke via CLIiii trigger --function-id='users::get' --payload='{"id":"123"}' --timeout-ms=5000 — with custom timeoutUse the adaptations below when they apply to the task.
iii-engine-config.iii-dead-letter-queues.iii-functions-and-triggers.iii-trigger-actions when the primary problem is choosing the right invocation mode.iii-trigger-actions in the iii engine.8921efa
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.