erg.

Wait events

Events are used in wait states via the event: key. The daemon polls on each tick and advances the state machine when the event fires. All wait states support timeout and timeout_next.

PR events

pr.reviewed

Fires when the pull request receives a formal approval. While waiting, the daemon automatically resumes Claude to address new review comments (configurable via auto_address).

Params
Name Type Default Description
auto_address bool true Automatically resume Claude to address new review comments while waiting for approval.
max_feedback_rounds int 3 Maximum number of feedback rounds before auto-addressing stops.
format_command string inherited Shell command to run as a formatter after each review feedback round (e.g. go fmt ./...). Overrides the value inherited from the ai.code step. Omit to keep the inherited formatter or skip formatting.
format_message string Apply auto-formatting Commit message used when the daemon commits the post-feedback format pass. Only used when format_command is set (directly or inherited).
Output data
Key Type Description
review_approved bool Set to true when a reviewer approves.
pr_merged_externally bool Set to true if the PR was merged outside the daemon.
pr.mergeable

Convenience event that combines pr.reviewed and ci.complete. Fires only when both review approval and CI pass simultaneously. Useful for minimal pipelines that don't need separate wait states.

Params
Name Type Default Description
require_review bool true Require an approved review before firing.
require_ci bool true Require CI to pass before firing.
Output data
Key Type Description
review_approved bool True when a reviewer has approved.
ci_passed bool True when all CI checks pass.
ci_failed bool True when any CI check fails.
pr_merged_externally bool True if the PR was merged outside the daemon.

CI events

ci.complete

Fires when all CI checks on the PR pass. Configurable behaviour on CI failure lets workflows route to ai.fix_ci or other states.

Params
Name Type Default Description
on_failure string retry Action when CI fails: retry — keep waiting (default); fix — fire the event so the workflow can route to ai.fix_ci; abandon or notify — emit data for downstream routing without advancing.
Output data
Key Type Description
ci_passed bool True when all checks pass.
ci_failed bool True when any check fails.
ci_action string The on_failure strategy that was applied.
ci.wait_for_checks

Fires when all CI checks on the PR have finished running (regardless of pass/fail). Unlike ci.complete, this event always fires once checks finish and does not support on_failure routing — use a downstream choice state to branch on the result.

Params

None.

Output data
Key Type Description
ci_status string Overall status: passing, failing, or none (no checks configured).
passed_checks []string Names of checks that passed.
failed_checks []string Names of checks that failed.

Plan events

plan.user_replied

Fires when a human comments on the issue after ai.plan posts an implementation plan. The daemon checks whether the comment matches an approval pattern. If it does, plan_approved is true and the workflow can proceed to ai.code. Non-matching comments are treated as feedback — the text is automatically injected into the next ai.plan session when looping back, so Claude can revise the plan accordingly. Supported for GitHub, Asana, and Linear providers.

Params
Name Type Default Description
approval_pattern string LGTM|looks good|approved?|… Regular expression matched against the comment body to detect approval. Defaults to (?i)(LGTM|looks good|approved?|proceed|go ahead|ship it). Override to match your team's preferred phrasing.
Output data
Key Type Description
plan_approved bool true if the comment matched the approval pattern, false if it did not. Inspect in a choice state to branch on approval vs. feedback.
user_feedback string Full text of the comment. Automatically passed to the next ai.plan session when looping back for re-planning.
user_feedback_author string Username or display name of the commenter.

Asana events

asana.in_section

Fires when the Asana task has been moved to a specific named section within its configured project. Use this to gate on human board movements — for example, waiting for a PM to drag a card into “Ready for Review” before Claude opens a PR. Requires the ASANA_PAT environment variable and an Asana provider registered for the repository.

Params
Name Type Default Description
section string required Section name to watch for. Matched case-insensitively against the task's current section within the configured project.
Output data
Key Type Description
section string The section name as specified in the workflow params.

Linear events

linear.in_state

Fires when the Linear issue has been moved to a specific named workflow state. Use this to gate on human state transitions in Linear — for example, waiting for a team lead to move an issue to “In Progress” before Claude begins coding. Requires the LINEAR_API_KEY environment variable and a Linear provider registered for the repository.

Params
Name Type Default Description
state string required Workflow state name to watch for. Matched case-insensitively against the issue's current state.
Output data
Key Type Description
state string The state name as specified in the workflow params.

Gate events

gate.approved

A general-purpose human approval gate. Pauses the workflow until a human provides an explicit approval signal on the issue. Supports two trigger modes: check for a label on the issue, or match a comment against a regex pattern. Works with GitHub, Asana, and Linear providers.

Params
Name Type Default Description
trigger string label_added Trigger mode: label_added — fires when the configured label is present on the issue; comment_match — fires when a comment matches the configured regex pattern.
label string approved Label name to check for. Only used when trigger is label_added.
comment_pattern string none Regex pattern to match against comment bodies. Required when trigger is comment_match.
Output data
Key Type Description
gate_approved bool Set to true when the gate fires.
gate_trigger string The trigger mode that fired: label_added or comment_match.
gate_label string The label name (only when trigger is label_added).
made by zack · mit license