Manual Triggers
A manual trigger is useful for local development, demonstrations, and operator-controlled automation.
Declare the trigger
<triggers>
<manual id="start" />
</triggers>id is the only accepted attribute.
Run it
woml run workflow.womlWOML activates the workflow and waits. Press Enter to create a run. The runtime remains active so you can press Enter again; Ctrl+C stops it.
Use --trigger <id> when a workflow contains more than one manual trigger. A keyboard occurrence currently supplies {} as context.payload.
For a single finite CI execution, use woml test workflow.woml instead of hosting a long-lived runtime.
Build an operator-run workflow
<woml>
<workflow id="dailySummary" name="Build daily summary" version="1.0.0">
<triggers>
<manual id="start" />
</triggers>
<steps>
<step id="summary" name="Build summary">
<script>
return {
generatedAt: new Date().toISOString(),
message: "The operator started this run from the terminal."
};
</script>
</step>
</steps>
</workflow>
</woml>Activate it:
woml run daily-summary.womlThe process remains alive because WOML is hosting an automation. Each Enter press creates a new run with its own ID and durable history. A previous run does not resume or mutate when you press Enter again.
Manual payload behavior
Keyboard activation currently provides an empty object:
context.payload // {}Use fallback sample data for a local demonstration, or switch to a webhook, event, or workflow call when the caller must provide input. Do not design a production data-entry interface around terminal keystrokes.
Run one finite test
Use this command in CI or when you need one execution and an exit code:
woml test daily-summary.womlwoml test is not a long-lived trigger host. It executes a finite test journey and exits, which makes it suitable for scripts and release checks.
Use manual triggers safely
Manual activation is useful for maintenance, recovery tools, reports, and operations that should require an intentional operator action. Give the workflow and steps descriptive names so the terminal makes the consequence clear before the operator presses Enter.