/authoring-dags
Workflow and best practices for writing Apache Airflow DAGs. Use when creating a new DAG, write pipeline code, handling questions about DAG patterns and conventions or extending an existing DAG with a follow-up/downstream task. ANY request shaped like 'add a DAG named X', 'write
$ npx -y skills add astronomer/agents --skill authoring-dags --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/authoring-dags
Context preview
The summary Claude sees to decide when to auto-load this skill.
Workflow and best practices for writing Apache Airflow DAGs. Use when creating a new DAG, write pipeline code, handling questions about DAG patterns and conventions or extending an existing DAG with a follow-up/downstream task. ANY request shaped like 'add a DAG named X', 'write
SKILL.md
authoring-dags.SKILL.mdname: authoring-dags
description: Workflow and best practices for writing Apache Airflow DAGs. Use when creating a new DAG, write pipeline code, handling questions about DAG patterns and conventions or extending an existing DAG with a follow-up/downstream task. ANY request shaped like 'add a DAG named X', 'write a pipeline', 'add a task that runs after Y', or 'extend the DAG'. For testing and debugging DAGs, see the testing-dags skill.
hooks:
Stop:
- hooks:
- type: command
command: "echo 'Remember to test your DAG with the testing-dags skill'"DAG Authoring Skill
This skill guides you through creating and validating Airflow DAGs using best practices and `af` CLI commands.
> **For testing and debugging DAGs**, see the **testing-dags** skill which covers the full test -> debug -> fix -> retest workflow.
---
Running the CLI
These commands assume `af` is on PATH. Run via `astro otto` to get it automatically, or install standalone with `uv tool install astro-airflow-mcp`.
---
Workflow Overview
+-----------------------------------------+
| 1. DISCOVER |
| Understand codebase & environment |
+-----------------------------------------+
|
+-----------------------------------------+
| 2. PLAN |
| Propose structure, get approval |
+-----------------------------------------+
|
+-----------------------------------------+
| 3. IMPLEMENT |
| Write DAG following patterns |
+-----------------------------------------+
|
+-----------------------------------------+
| 4. VALIDATE |
| Check import errors, warnings |
+-----------------------------------------+
|
+-----------------------------------------+
| 5. TEST (with user consent) |
| Trigger, monitor, check logs |
+-----------------------------------------+
|
+-----------------------------------------+
| 6. ITERATE |
| Fix issues, re-validate |
+-----------------------------------------+---
Phase 1: Discover
Before writing code, understand the context.
Explore the Codebase
Use file tools to find existing patterns:
- `Glob` for `**/dags/**/*.py` to find existing DAGs
- `Read` similar DAGs to understand conventions
- Check `requirements.txt` for available packages
Query the Airflow Environment
Use `af` CLI commands to understand what's available:
| Command | Purpose | |---------|---------| | `af config connections` | What external systems are configured | | `af config variables` | What configuration values exist | | `af config providers` | What operator packages are installed | | `af config version` | Version constraints and features | | `af dags list` | Existing DAGs and naming conventions | | `af config pools` | Resource pools for concurrency |
**Example discovery questions:**
- "Is there a Snowflake connection?" -> `af config connections`
- "What Airflow version?" -> `af config version`
- "Are S3 operators available?" -> `af config providers`
---
Phase 2: Plan
Based on discovery, propose:
1. **DAG structure** - Tasks, dependencies, schedule 2. **Operators to use** - Based on available providers 3. **Connections needed** - Existing or to be created 4. **Variables needed** - Existing or to be created 5. **Packages needed** - Additions to requirements.txt
**Get user approval before implementing.**
---
Phase 3: Implement
Write the DAG following best practices (see below). Key steps:
1. Create DAG file in appropriate location 2. Update `requirements.txt` if needed 3. Save the file
---
Phase 4: Validate
**Use `af` CLI as a feedback loop to validate your DAG.**
Step 1: Check Import Errors
After saving, check for parse errors (Airflow will have already parsed the file):
af dags errors
- If your file appears -> **fix and retry**
- If no errors -> **continue**
Common causes: missing imports, syntax errors, missing packages.
Step 2: Verify DAG Exists
af dags get <dag_id>
Check: DAG exists, schedule correct, tags set, paused status.
Step 3: Check Warnings
af dags warnings
Look for deprecation warnings or configuration issues.
Step 4: Explore DAG Structure
af dags explore <dag_id>
Returns in one call: metadata, tasks, dependencies, source code.
On Astro
If you're running on Astro, you can also validate locally before deploying:
- **Parse check**: Run `astro dev parse` to catch import errors and DAG-level issues without starting a full Airflow environment
- **DAG-only deploy**: Once validated, use `astro deploy --dags` for fast DAG-only deploys that skip the Docker image build — ideal for iterating on DAG code
---
Phase 5: Test
> See the **testing-dags** skill for comprehensive testing guidance.
Once validation passes, test the DAG using the workflow in the **testing-dags** skill:
1. **Get user consent** -- Always ask before triggering 2. **Trigger and wait** -- `af runs trigger-wait <dag_id> --timeout 300` 3. **Analyze results** -- Check success/failure status 4. **Debug if needed** -- `af runs diagnose <dag_id> <run_id>` and `af tasks logs <dag_id> <run_id> <task_id>`
Quick Test (Minimal)
# Ask user first, then:
af runs trigger-wait <dag_id> --timeout 300
For the full test -> debug -> fix -> retest loop, see **testing-dags**.
---
Phase 6: Iterate
If issues found: 1. Fix the code 2. Check for import errors: `af dags errors` 3. Re-validate (Phase 4) 4. Re-test using the **testing-dags** skill workflow (Phase 5)
---
CLI Quick Reference
| Phase | Command | Purpose | |-------|---------|---------| | Discover | `af config connections` | Available connections | | Discover | `af config variables` | Configuration values | | Discover | `af config providers` | I
Read more
name: authoring-dags
description: Workflow and best practices for writing Apache Airflow DAGs. Use when creating a new DAG, write pipeline code, handling questions about DAG patterns and conventions or extending an existing DAG with a follow-up/downstream task. ANY request shaped like 'add a DAG named X', 'write a pipeline', 'add a task that runs after Y', or 'extend the DAG'. For testing and debugging DAGs, see the testing-dags skill.
hooks:
Stop:
- hooks:
- type: command
command: "echo 'Remember to test your DAG with the testing-dags skill'"DAG Authoring Skill
This skill guides you through creating and validating Airflow DAGs using best practices and `af` CLI commands.
> **For testing and debugging DAGs**, see the **testing-dags** skill which covers the full test -> debug -> fix -> retest workflow.
---
Running the CLI
These commands assume `af` is on PATH. Run via `astro otto` to get it automatically, or install standalone with `uv tool install astro-airflow-mcp`.
---
Workflow Overview
+-----------------------------------------+
| 1. DISCOVER |
| Understand codebase & environment |
+-----------------------------------------+
|
+-----------------------------------------+
| 2. PLAN |
| Propose structure, get approval |
+-----------------------------------------+
|
+-----------------------------------------+
| 3. IMPLEMENT |
| Write DAG following patterns |
+-----------------------------------------+
|
+-----------------------------------------+
| 4. VALIDATE |
| Check import errors, warnings |
+-----------------------------------------+
|
+-----------------------------------------+
| 5. TEST (with user consent) |
| Trigger, monitor, check logs |
+-----------------------------------------+
|
+-----------------------------------------+
| 6. ITERATE |
| Fix issues, re-validate |
+-----------------------------------------+---
Phase 1: Discover
Before writing code, understand the context.
Explore the Codebase
Use file tools to find existing patterns:
- `Glob` for `**/dags/**/*.py` to find existing DAGs
- `Read` similar DAGs to understand conventions
- Check `requirements.txt` for available packages
Query the Airflow Environment
Use `af` CLI commands to understand what's available:
| Command | Purpose | |---------|---------| | `af config connections` | What external systems are configured | | `af config variables` | What configuration values exist | | `af config providers` | What operator packages are installed | | `af config version` | Version constraints and features | | `af dags list` | Existing DAGs and naming conventions | | `af config pools` | Resource pools for concurrency |
**Example discovery questions:**
- "Is there a Snowflake connection?" -> `af config connections`
- "What Airflow version?" -> `af config version`
- "Are S3 operators available?" -> `af config providers`
---
Phase 2: Plan
Based on discovery, propose:
1. **DAG structure** - Tasks, dependencies, schedule 2. **Operators to use** - Based on available providers 3. **Connections needed** - Existing or to be created 4. **Variables needed** - Existing or to be created 5. **Packages needed** - Additions to requirements.txt
**Get user approval before implementing.**
---
Phase 3: Implement
Write the DAG following best practices (see below). Key steps:
1. Create DAG file in appropriate location 2. Update `requirements.txt` if needed 3. Save the file
---
Phase 4: Validate
**Use `af` CLI as a feedback loop to validate your DAG.**
Step 1: Check Import Errors
After saving, check for parse errors (Airflow will have already parsed the file):
af dags errors
- If your file appears -> **fix and retry**
- If no errors -> **continue**
Common causes: missing imports, syntax errors, missing packages.
Step 2: Verify DAG Exists
af dags get <dag_id>
Check: DAG exists, schedule correct, tags set, paused status.
Step 3: Check Warnings
af dags warnings
Look for deprecation warnings or configuration issues.
Step 4: Explore DAG Structure
af dags explore <dag_id>
Returns in one call: metadata, tasks, dependencies, source code.
On Astro
If you're running on Astro, you can also validate locally before deploying:
- **Parse check**: Run `astro dev parse` to catch import errors and DAG-level issues without starting a full Airflow environment
- **DAG-only deploy**: Once validated, use `astro deploy --dags` for fast DAG-only deploys that skip the Docker image build — ideal for iterating on DAG code
---
Phase 5: Test
> See the **testing-dags** skill for comprehensive testing guidance.
Once validation passes, test the DAG using the workflow in the **testing-dags** skill:
1. **Get user consent** -- Always ask before triggering 2. **Trigger and wait** -- `af runs trigger-wait <dag_id> --timeout 300` 3. **Analyze results** -- Check success/failure status 4. **Debug if needed** -- `af runs diagnose <dag_id> <run_id>` and `af tasks logs <dag_id> <run_id> <task_id>`
Quick Test (Minimal)
# Ask user first, then: af runs trigger-wait <dag_id> --timeout 300
For the full test -> debug -> fix -> retest loop, see **testing-dags**.
---
Phase 6: Iterate
If issues found: 1. Fix the code 2. Check for import errors: `af dags errors` 3. Re-validate (Phase 4) 4. Re-test using the **testing-dags** skill workflow (Phase 5)
---
CLI Quick Reference
| Phase | Command | Purpose | |-------|---------|---------| | Discover | `af config connections` | Available connections | | Discover | `af config variables` | Configuration values | | Discover | `af config providers` | I
AI agent tooling for data engineering workflows. Includes an MCP server for Airflow, a CLI tool (af) for interacting with Airflow from your terminal, and skills that extend AI coding agents with specialized capabilities for working with Airflow and data
Other skills on data.
- /airflow-adapter
Airflow adapter pattern for v2/v3 API compatibility. Use when working with adapters, version detection, or adding new API methods that need to work across Airflow 2.x and 3.x.
Open skill - /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
Open skill - /airflow-plugins
Builds Airflow 3.1+ plugins that embed FastAPI apps, custom UI pages, React components, middleware, macros, and operator links directly into the Airflow UI. Use when building anything custom inside Airflow 3.1+ that involves Python and a browser-facing interface - creating an
Open skill - /airflow-state-store
Persists task and asset state across retries and DAG runs using Airflow 3.3's AIP-103 key/value stores (`task_state_store`, `asset_state_store`) and the crash-safe `ResumableJobMixin`. Use when the user asks about task state store, checkpointing in tasks, persisting state across
Open skill - /airflow
Queries, manages, and troubleshoots Apache Airflow using the `af` CLI. Use when working with anything related to Airflow - a DAG, a DAG run, a task log, an import or parse error, a broken DAG, or any Airflow operation. Covers listing and triggering DAGs, retrying runs, reading
Open skill - /analyzing-data
Queries the data warehouse with SQL and answers business questions about data. Use when answering anything that needs warehouse data - counts, metrics, trends, aggregations, joins across tables, data lookups, or ad-hoc SQL analysis (for example "who uses X", "how many Y", "show
Open skill

