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
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.
|
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
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.
|
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.
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
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
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
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
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