airflow-hitl
Builds human-in-the-loop (HITL) Airflow workflows - approval gates, form input, and human-driven branching. Use when a DAG needs a human in the loop - an approval or reject step, sign-off before a task runs, a decision or approval UI, branching on a human choice, or collecting form input mid-run; also on mentions of ApprovalOperator, HITLOperator, HITLBranchOperator, HITLEntryOperator, or HITLTrigger. Requires Airflow 3.1+. Not for AI/LLM task calls (see migrating-ai-sdk-to-common-ai).
Install
git clone https://github.com/astronomer/agents /tmp/agents && ln -s /tmp/agents/skills/airflow-hitl ~/.claude/skills/airflow-hitl
From README
Airflow Human-in-the-Loop Operators Pause a DAG until a human responds via the Airflow UI or REST API. HITL operators are deferrable — they release their worker slot while waiting. Requires Airflow 3.1+ (af config version). UI location: Browse → Required Actions. Respond from the task instance page's Required Actions tab. Cross-references: migrating-ai-sdk-to-common-ai for AI/LLM task decorators; airflow for registry and API discovery commands used below. --- Step 1 — Pick the capability you need | Capability | Class (verify in Step 2) | |---|---| | Approve or reject; downstream skips on reject | ApprovalOperator | | Present N options and return which were chosen | HITLOperator | | Branch to one or more downstream tasks based on a choice | HITLBranchOperator | | Collect a form (no approve/select step) | HITLEntryOperator | | Use the HITL trigger directly (advanced / custom operators) | HITLTrigger | This is the only place class names are hardcoded.
More from this repo
airflow-state-store
Persists task and asset state across retries and DAG runs using Airflow 3.3's AIP-103 key/value stores...
authoring-go-sdk-tasks
Writes Airflow task logic in Go using the Airflow Go SDK.
authoring-java-sdk-tasks
Writes Airflow task logic in Java, Kotlin, or any JVM language using the Airflow Java SDK.
