Not in the top 1,000 by GitHub stars
astronomer/agents
AI agent tooling for data engineering workflows.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
astro-airflow-mcp/.claude/skills/airflow-adapter/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/airflow/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/airflow-hitl/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/airflow-plugins/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/airflow-state-store/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/analyzing-data/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/annotating-task-lineage/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/authoring-dags/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/authoring-go-sdk-tasks/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/authoring-java-sdk-tasks/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/authoring-language-sdk-tasks/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/blueprint/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/checking-freshness/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/configuring-airflow-language-sdks/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/cosmos-dbt-core/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/cosmos-dbt-fusion/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/creating-openlineage-extractors/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/dag-factory/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/debugging-dags/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/delegating-to-otto/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/deploying-airflow/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/deploying-go-sdk-bundles/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/deploying-java-sdk-bundles/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/managing-astro-deployments/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/managing-astro-local-env/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/migrating-ai-sdk-to-common-ai/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/migrating-airflow-2-to-3/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/migrating-dagster-to-airflow/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/profiling-tables/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/setting-up-astro-project/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/testing-dags/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/tracing-downstream-lineage/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/tracing-upstream-lineage/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/troubleshooting-astro-deployments/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
skills/warehouse-init/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
486ee63d01f8 → 35b9610bb271
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 486ee63d01f8
No earlier version was observed for comparison.
Verified commit 35b9610bb2710c37ca11326c4cbf7818b6725fec
git clone --filter=blob:none --no-checkout https://github.com/astronomer/agents.git .hotskills/astronomer-agents && git -C .hotskills/astronomer-agents checkout --detach 35b9610bb2710c37ca11326c4cbf7818b6725fec
# Copy each selected skill directory from .hotskills/astronomer-agents into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/astronomer/agents.git .hotskills/astronomer-agents && git -C .hotskills/astronomer-agents checkout --detach 35b9610bb2710c37ca11326c4cbf7818b6725fec
# Copy each selected skill directory from .hotskills/astronomer-agents into .agents/skills/<skill-name>/Heat
1.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- airflow-adapter
astro-airflow-mcp/.claude/skills/airflow-adapter - airflow
skills/airflow - airflow-hitl
skills/airflow-hitl - airflow-plugins
skills/airflow-plugins - airflow-state-store
skills/airflow-state-store - analyzing-data
skills/analyzing-data - annotating-task-lineage
skills/annotating-task-lineage - authoring-dags
skills/authoring-dags - authoring-go-sdk-tasks
skills/authoring-go-sdk-tasks - authoring-java-sdk-tasks
skills/authoring-java-sdk-tasks - authoring-language-sdk-tasks
skills/authoring-language-sdk-tasks - blueprint
skills/blueprint - checking-freshness
skills/checking-freshness - configuring-airflow-language-sdks
skills/configuring-airflow-language-sdks - cosmos-dbt-core
skills/cosmos-dbt-core - cosmos-dbt-fusion
skills/cosmos-dbt-fusion - creating-openlineage-extractors
skills/creating-openlineage-extractors - dag-factory
skills/dag-factory - debugging-dags
skills/debugging-dags - delegating-to-otto
skills/delegating-to-otto - deploying-airflow
skills/deploying-airflow - deploying-go-sdk-bundles
skills/deploying-go-sdk-bundles - deploying-java-sdk-bundles
skills/deploying-java-sdk-bundles - managing-astro-deployments
skills/managing-astro-deployments - managing-astro-local-env
skills/managing-astro-local-env - migrating-ai-sdk-to-common-ai
skills/migrating-ai-sdk-to-common-ai - migrating-airflow-2-to-3
skills/migrating-airflow-2-to-3 - migrating-dagster-to-airflow
skills/migrating-dagster-to-airflow - profiling-tables
skills/profiling-tables - setting-up-astro-project
skills/setting-up-astro-project - testing-dags
skills/testing-dags - tracing-downstream-lineage
skills/tracing-downstream-lineage - tracing-upstream-lineage
skills/tracing-upstream-lineage - troubleshooting-astro-deployments
skills/troubleshooting-astro-deployments - warehouse-init
skills/warehouse-init
How it works
airflow-adapter
When your agent uses it
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.
What it loads into context
Frontmatter
49 tokensAlways available to the agent
SKILL.md
261 tokensWhen the skill is activated
Reference documents
1,003 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Architecture
- Key Files
- Related Files
- Quick Reference
Scripts executed separately
../../../../skills/airflow/hooks/warm-uvx-cache.sh../../../../skills/analyzing-data/scripts/cli.py
Files
../../../../.claude-plugin/marketplace.jsonasset647 bytes../../../../.claude-plugin/plugin.jsonasset639 bytesSKILL.mdcore915 bytesSKILL.mdcore915 bytesapi-differences.mddoc1,437 bytespatterns.mddoc2,323 bytes../../../../skills/airflow/hooks/warm-uvx-cache.shruns408 bytes../../../../skills/analyzing-data/scripts/cli.pyruns14,449 bytes
Read SKILL.md
# Airflow Adapter Pattern
Enables compatibility with both Airflow 2.x (`/api/v1`) and 3.x (`/api/v2`).
## Architecture
```
MCP Tool → _get_adapter() → AirflowV2Adapter or AirflowV3Adapter → Airflow API
```
Version is auto-detected at startup.
## Key Files
View the complete source on GitHubairflow
When your agent uses it
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 task logs, diagnosing failures, debugging import and parse errors, checking connections, variables and pools, exploring the REST API, and monitoring health (for example "trigger a pipeline", "retry a run", "list connections", "check Airflow health", "why did my DAG fail"). This is the entrypoint that routes to sibling skills for authoring, testing, deploying, and migrating Airflow 2 to 3. Not for warehouse/SQL analytics on Airflow metadata tables (use analyzing-data); for deep root-cause reports use debugging-dags or airflow-investigation.
What it loads into context
Frontmatter
189 tokensAlways available to the agent
SKILL.md
3,956 tokensWhen the skill is activated
Reference documents
823 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Astro CLI
- Running the CLI
- Instance Configuration
- Quick Reference
- User Intent Patterns
- Common Workflows
- Output Format
- Task Logs Options
- Direct API Access with `af api`
- Related Skills
Scripts executed separately
hooks/warm-uvx-cache.sh
Files
SKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesSKILL.mdcore15,271 bytesapi-reference.mddoc2,806 byteshooks/warm-uvx-cache.shruns408 bytes
Read SKILL.md
# Airflow Operations
Use `af` commands to query, manage, and troubleshoot Airflow workflows.
## Astro CLI
The [Astro CLI](https://www.astronomer.io/docs/astro/cli/overview) is the recommended way to run Airflow locally and deploy to production. It provides a containerized Airflow environment that works out of the box:
```bash
# Initialize a new project
astro dev init
# Start local Airflow (webserver at http://localhost:8080)
astro dev startView the complete source on GitHubairflow-hitl
When your agent uses it
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).
What it loads into context
Frontmatter
128 tokensAlways available to the agent
SKILL.md
1,764 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1 — Pick the capability you need
- Step 2 — Discover the current signatures from the Airflow Registry
- Step 3 — Canonical example (approval gate)
- Step 4 — Behavior contracts (stable across versions)
- Step 5 — Responding from external integrations
- Step 6 — Safety checks
- References
- Related skills
Files
SKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytesSKILL.mdcore7,434 bytes
Read SKILL.md
# 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
View the complete source on GitHubairflow-plugins
When your agent uses it
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 Airflow plugin, adding a custom UI page or nav entry, building FastAPI-backed endpoints inside Airflow, serving static assets from a plugin, embedding a React app, adding middleware to the API server, creating custom operator extra links, or calling the Airflow REST API from inside a plugin; also when AirflowPlugin, fastapi_apps, external_views, react_apps, or plugin registration come up.
What it loads into context
Frontmatter
149 tokensAlways available to the agent
SKILL.md
5,698 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1: Choose plugin components
- Step 2: Plugin registration skeleton
- Step 3: Serve the UI entry point
- Step 4: Call the Airflow API from your plugin
- Step 5: Common API endpoint patterns
- Step 6: Other plugin component types
- Step 7: Environment variables and deployment
- Common pitfalls
- References
Files
SKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytesSKILL.mdcore24,142 bytes
Read SKILL.md
# Airflow 3 Plugins
Airflow 3 plugins let you embed FastAPI apps, React UIs, middleware, macros, operator buttons, and custom timetables directly into the Airflow process. No sidecar, no extra server.
> **CRITICAL**: Plugin components (fastapi_apps, react_apps, external_views) require **Airflow 3.1+**. **NEVER import `flask`, `flask_appbuilder`, or use `appbuilder_views` / `flask_blueprints`** — these are Airflow 2 patterns and will not work in Airflow 3. If existing code uses them, rewrite the entire registration block using FastAPI.
>
> **Security**: FastAPI plugin endpoints are **not automatically protected** by Airflow auth. If your endpoints need to be private, implement authentication explicitly using FastAPI's security utilities.
>
> **Restart required**: Changes to Python plugin files require restarting the API server. Static file changes (HTML, JS, CSS) are picked up immediately. Set `AIRFLOW__CORE__LAZY_LOAD_PLUGINS=False` during development to load plugins at startup rather than lazily.
>
> **Relative paths always**: In `external_views`, `href` must have no leading slash. In HTML and JavaScript, use relative paths for all assets and `fetch()` calls. Absolute paths break behind reverse proxies.
### Before writing any code, verify
View the complete source on GitHubairflow-state-store
When your agent uses it
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 retries, job IDs surviving worker crashes, watermarks, asset metadata, resumable tasks, crash-safe operators, or "what's new in Airflow 3.3". Also use proactively when reading a DAG that uses Variables or XCom for intra-task coordination state (flag the anti-pattern), or when reviewing any DAG that submits a job to an external system (Databricks, Snowflake, BigQuery, Redshift, Spark, dbt Cloud, EMR, AWS Batch, etc.) and waits for it to finish, whether as one submit-and-wait operator or split into submit + sensor/polling tasks; covers `wait_for_termination`, `deferrable`, `durable`, and hand-rolled polling sensors. State-persistence pieces require Airflow 3.3+; submit+poll architecture guidance applies on any version.
What it loads into context
Frontmatter
246 tokensAlways available to the agent
SKILL.md
5,807 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Section 1 — Pick the right primitive
- Section 2 — Detect anti-patterns in existing DAGs (on demand)
- Section 3 — `task_state_store`: per-task coordination state
- Section 4 — `asset_state_store`: per-asset metadata across DAG runs
- Section 5 — `ResumableJobMixin`: crash-safe external job submission
- Section 6 — Submit-and-poll DAGs: one task or two?
- Section 7 — Configuration reference
- Section 8 — Safety checklist
- Related skills
Files
SKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytesSKILL.mdcore24,618 bytes
Read SKILL.md
# Airflow Task State Store (AIP-103)
Airflow 3.3 ships two key/value stores and a crash-safety mixin for operators that submit external jobs.
> **`task_state_store`, `asset_state_store`, and `ResumableJobMixin`'s crash-safety guarantee require Airflow 3.3+.** Check first:
> ```bash
> af config version
> ```
> Below 3.3: `task_state_store`/`asset_state_store` are unavailable, and `durable=True` is a no-op — provider operators ship a pre-3.3 `ResumableJobMixin` shim that always submits fresh (see Section 5). Tell the user those specific features aren't available yet and link the AIP-103 tracking issue. This does **not** gate Section 6's Triggerer-vs-`mode="reschedule"` decision, or the general "green submit ≠ success" anti-pattern — those apply on any Airflow version. On a pre-3.3 DAG, give that guidance in full; only drop the "`durable=True` adds crash-safety" half of it.
---
## Section 1 — Pick the right primitive
View the complete source on GitHubanalyzing-data
When your agent uses it
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 me Z", "find customers", "what is the count").
What it loads into context
Frontmatter
80 tokensAlways available to the agent
SKILL.md
1,228 tokensWhen the skill is activated
Reference documents
1,592 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Workflow
- Kernel Functions
- CLI Reference
- References
Scripts executed separately
scripts/.gitignorescripts/cache.pyscripts/cli.pyscripts/config.pyscripts/connectors.pyscripts/kernel.pyscripts/templates.pyscripts/tests/__init__.pyscripts/tests/conftest.pyscripts/tests/integration/__init__.pyscripts/tests/integration/conftest.pyscripts/tests/integration/test_duckdb_e2e.pyscripts/tests/integration/test_kernel_interrupt.pyscripts/tests/integration/test_postgres_e2e.pyscripts/tests/integration/test_sqlite_e2e.pyscripts/tests/test_cache.pyscripts/tests/test_config.pyscripts/tests/test_connectors.pyscripts/tests/test_kernel.pyscripts/tests/test_utils.pyscripts/tests/test_warehouse.pyscripts/warehouse.py
Files
SKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesSKILL.mdcore5,081 bytesreference/common-patterns.mddoc1,694 bytesreference/discovery-warehouse.mddoc4,338 bytesscripts/.gitignoreruns8 bytesscripts/cache.pyruns9,970 bytesscripts/cli.pyruns14,449 bytesscripts/config.pyruns1,961 bytesscripts/connectors.pyruns30,764 bytesscripts/kernel.pyruns15,731 bytesscripts/pyproject.tomlasset618 bytesscripts/templates.pyruns4,269 bytesscripts/tests/__init__.pyruns45 bytesscripts/tests/conftest.pyruns240 bytesscripts/tests/integration/__init__.pyruns49 bytesscripts/tests/integration/conftest.pyruns1,451 bytesscripts/tests/integration/test_duckdb_e2e.pyruns3,701 bytesscripts/tests/integration/test_kernel_interrupt.pyruns2,273 bytesscripts/tests/integration/test_postgres_e2e.pyruns3,828 bytesscripts/tests/integration/test_sqlite_e2e.pyruns4,529 bytesscripts/tests/test_cache.pyruns7,899 bytesscripts/tests/test_config.pyruns5,396 bytesscripts/tests/test_connectors.pyruns43,843 bytesscripts/tests/test_kernel.pyruns7,045 bytesscripts/tests/test_utils.pyruns2,425 bytesscripts/tests/test_warehouse.pyruns4,350 bytesscripts/ty.tomlasset644 bytesscripts/warehouse.pyruns1,575 bytes
Read SKILL.md
# Data Analysis
Answer business questions by querying the data warehouse. The kernel auto-starts on first `exec` call.
**All CLI commands below are relative to this skill's directory.** Before running any `scripts/cli.py` command, `cd` to the directory containing this file.
## Workflow
1. **Pattern lookup** — Check for a cached query strategy:
```bash
uv run scripts/cli.py pattern lookup "<user's question>"
```
If a pattern exists, follow its strategy. Record the outcome after executing:
```bashView the complete source on GitHubannotating-task-lineage
When your agent uses it
Annotate Airflow tasks with data lineage using inlets and outlets. Use when the user wants to add lineage metadata to tasks, specify input/output datasets, or enable lineage tracking for operators without built-in OpenLineage extraction.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
2,561 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to Use This Approach
- Supported Types for Inlets/Outlets
- Basic Usage
- Setting Lineage in Custom Operators
- Dataset Naming Helpers
- Precedence Rules
- Best Practices
- Limitations
- Related Skills
Files
SKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytesSKILL.mdcore11,387 bytes
Read SKILL.md
# Annotating Task Lineage with Inlets & Outlets
This skill guides you through adding manual lineage annotations to Airflow tasks using `inlets` and `outlets`.
> **Reference:** See the [OpenLineage provider developer guide](https://airflow.apache.org/docs/apache-airflow-providers-openlineage/stable/guides/developer.html) for the latest supported operators and patterns.
### On Astro
Lineage annotations defined with inlets and outlets are visualized in Astro's enhanced **Lineage tab**, which provides cross-DAG and cross-deployment lineage views. This means your annotations are immediately visible in the Astro UI, giving you a unified view of data flow across your entire Astro organization.
## When to Use This Approach
| Scenario | Use Inlets/Outlets? |
|----------|---------------------|View the complete source on GitHubauthoring-dags
When your agent uses it
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.
What it loads into context
Frontmatter
130 tokensAlways available to the agent
SKILL.md
1,596 tokensWhen the skill is activated
Reference documents
2,707 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Running the CLI
- Workflow Overview
- Phase 1: Discover
- Phase 2: Plan
- Phase 3: Implement
- Phase 4: Validate
- Phase 5: Test
- Phase 6: Iterate
- CLI Quick Reference
- Best Practices & Anti-Patterns
- Related Skills
Files
SKILL.mdcore7,077 bytesSKILL.mdcore7,077 bytesSKILL.mdcore7,077 bytesSKILL.mdcore7,077 bytesSKILL.mdcore7,077 bytesSKILL.mdcore7,077 bytesSKILL.mdcore7,077 bytesreference/best-practices.mddoc10,834 bytes
Read SKILL.md
# 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`.
---
View the complete source on GitHubauthoring-go-sdk-tasks
When your agent uses it
Writes Airflow task logic in Go using the Airflow Go SDK. Use when the user wants to implement Airflow tasks in Go, asks about `BundleProvider`/`RegisterDags`, the `bundlev1` Registry/Dag interfaces, registering Go tasks (`AddTask`/`AddTaskWithName`), dependency injection by parameter type (`context.Context`, `sdk.TIRunContext`, `*slog.Logger`, `sdk.Client`), or reading connections/variables/XComs from Go. This skill covers the Go-specific native API; the shared Python-stub pattern and conceptual model live in authoring-language-sdk-tasks. For building/packing/shipping the bundle see deploying-go-sdk-bundles; for coordinator config see configuring-airflow-language-sdks.
What it loads into context
Frontmatter
169 tokensAlways available to the agent
SKILL.md
2,184 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Recap: the Python side
- The bundle entry point
- Task functions: dependency injection by parameter type
- The `sdk.Client` surface
- Runtime context
- Go-specific pitfalls
- Related Skills
Files
SKILL.mdcore8,547 bytesSKILL.mdcore8,547 bytesSKILL.mdcore8,547 bytes
Read SKILL.md
# Authoring Go SDK Tasks
The Airflow Go SDK implements the language-SDK model for Go: your DAG stays in Python, and each task is a compiled Go function registered inside a **bundle** (a single native executable). This skill covers the **Go-specific** native API. The shared model (the Python `@task.stub` pattern, ID matching, the XCom-as-JSON contract) lives in **authoring-language-sdk-tasks**; read that first if you are new to language SDKs.
> **Experimental.** The Go SDK is under active development and not production-ready. Module path `github.com/apache/airflow/go-sdk` (Go 1.24+). APIs may change.
> **Related skills:** **authoring-language-sdk-tasks** (shared Python stub + concepts), **deploying-go-sdk-bundles** (build, pack, and ship the bundle), **configuring-airflow-language-sdks** (route the queue to the Go coordinator).
---
## Recap: the Python side
A Go task is paired with a Python stub that carries no logic; it declares the task, its queue, and the dependency graph. IDs must match the Go registration exactly, and `queue=` routes the task to the Go runtime. Full rules are in **authoring-language-sdk-tasks**; the minimal shape:
View the complete source on GitHubauthoring-java-sdk-tasks
When your agent uses it
Writes Airflow task logic in Java, Kotlin, or any JVM language using the Airflow Java SDK. Use when the user wants to implement Airflow tasks in Java/JVM, asks about `@Builder.Dag`/`@Builder.Task`/`@Builder.XCom`, the `Task`/`BundleBuilder` interfaces, reading connections/variables/XComs from Java, the JSON-to-Java type mapping, or logging from Java tasks. This skill covers the Java-specific native API; the shared Python-stub pattern and conceptual model live in authoring-language-sdk-tasks. For building/shipping the bundle see deploying-java-sdk-bundles; for coordinator config see configuring-airflow-language-sdks.
What it loads into context
Frontmatter
156 tokensAlways available to the agent
SKILL.md
2,518 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Recap: the Python side
- Java side: two APIs
- The entry point
- Talking to Airflow from a task: `Client`
- XCom: Java types
- Logging
- A complete worked example ships with the SDK
- Java-specific pitfalls
- Related Skills
Files
SKILL.mdcore10,429 bytesSKILL.mdcore10,429 bytes
Read SKILL.md
# Authoring Java SDK Tasks
The Airflow Java SDK implements the language-SDK model for the JVM: your DAG stays in Python, and each task instance runs in a short-lived JVM subprocess. This skill covers the **Java-specific** native API. The shared model — the Python `@task.stub` pattern, ID matching, and the XCom-as-JSON contract — lives in **authoring-language-sdk-tasks**; read that first if you're new to language SDKs.
> **Experimental.** The Java SDK is in preview. Artifact coordinates and APIs may change.
> **Related skills:** **authoring-language-sdk-tasks** (shared Python stub + concepts), **configuring-airflow-language-sdks** (route the queue to `JavaCoordinator`), **deploying-java-sdk-bundles** (compile and ship the JAR).
---
## Recap: the Python side
Java tasks are paired with Python stubs that carry no logic — they declare the task, queue, dependency graph, and retries. IDs must match the Java annotations exactly, and an upstream argument on a stub only declares the dependency (the value is fetched in Java). Full rules are in **authoring-language-sdk-tasks**; the minimal shape:
View the complete source on GitHubauthoring-language-sdk-tasks
When your agent uses it
The language-neutral foundation for Airflow language SDKs — implement task logic in a non-Python language while the DAG stays in Python. Use when the user wants to run an Airflow task in another language (Java, Kotlin, Go, or other JVM/native languages), asks how the Python `@task.stub` pairs with native task code, how task/DAG IDs must match across the two sides, how data passes via XCom as JSON, or which language SDKs exist. This skill owns the shared Python-stub pattern and conceptual model; for a specific language's native API, build, and runtime, use that language's skill (e.g. authoring-java-sdk-tasks, authoring-go-sdk-tasks).
What it loads into context
Frontmatter
157 tokensAlways available to the agent
SKILL.md
1,687 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The model
- The two-sided model
- The XCom-as-JSON contract
- What is language-specific (and lives elsewhere)
- Language-agnostic pitfalls
- Per-language skills
- Related Skills
Files
SKILL.mdcore7,334 bytesSKILL.mdcore7,334 bytes
Read SKILL.md
# Authoring Language SDK Tasks (Shared Foundation)
Airflow language SDKs let you implement task logic in a language other than Python while the DAG and its scheduling stay in Python. This skill describes the parts that are identical across every language SDK. Each language has its own companion skill for the native API, build tooling, and runtime — see [Per-language skills](#per-language-skills).
> **Experimental.** The language SDKs are in preview. APIs and artifact coordinates may change.
---
## The model
A DAG is authored in Python as usual. Tasks that should run in another language are declared as **stubs** routed to a dedicated queue. At runtime, Airflow hands a stub task to a **coordinator** that launches a short-lived **native subprocess** for that one task instance, runs your compiled/native code, and shuts the subprocess down.
Consequences that hold for every language SDK:
View the complete source on GitHubblueprint
When your agent uses it
Define reusable Airflow task group templates with Pydantic validation and compose DAGs from YAML. Use when creating blueprint templates, composing DAGs from YAML, declaring shared variables or per-environment profiles, validating configurations, sharing templates as an installable package, or enabling no-code DAG authoring for non-engineers.
What it loads into context
Frontmatter
69 tokensAlways available to the agent
SKILL.md
7,709 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Determine What the User Needs
- Project Setup
- Creating Blueprints
- Composing Templates
- Composing DAGs in YAML
- Variables and Profiles
- Blueprints in Python DAGs
- Customizing DAG-Level Configuration
- Sharing Blueprints as a Package
- Runtime Parameter Overrides
- Loader Options
- Validation Commands
- Versioning
- Schema Generation
- Troubleshooting
- Verification Checklist
- Reference
Files
SKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytesSKILL.mdcore33,735 bytes
Read SKILL.md
# Blueprint Implementation
You are helping a user work with Blueprint, a system for composing Airflow DAGs from YAML using reusable Python templates. Execute steps in order and prefer the simplest configuration that meets the user's needs.
> **Package**: `airflow-blueprint` on PyPI — this skill documents **0.5.0**
> **Repo**: https://github.com/astronomer/blueprint
> **Requires**: Python 3.10+, Airflow 2.5+
> **Cross-references**: the `airflow` skill for Astro CLI, registry, and REST API discovery commands; `authoring-dags` or `dag-factory` when the user needs full Airflow flexibility instead of validated templates.
---
## Determine What the User Needs
| User Request | Action |View the complete source on GitHubchecking-freshness
When your agent uses it
Quick data freshness check. Use when the user asks if data is up to date, when a table was last updated, if data is stale, or needs to verify data currency before using it.
What it loads into context
Frontmatter
48 tokensAlways available to the agent
SKILL.md
827 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Freshness Check Process
- Freshness Status
- If Data is Stale
- Output Format
- Quick Checks
Files
SKILL.mdcore3,201 bytesSKILL.mdcore3,201 bytes
Read SKILL.md
# Data Freshness Check
Quickly determine if data is fresh enough to use.
## Freshness Check Process
For each table to check:
### 1. Find the Timestamp Column
Look for columns that indicate when data was loaded or updated:
- `_loaded_at`, `_updated_at`, `_created_at` (common ETL patterns)
- `updated_at`, `created_at`, `modified_at` (application timestamps)
- `load_date`, `etl_timestamp`, `ingestion_time`View the complete source on GitHubconfiguring-airflow-language-sdks
When your agent uses it
Configures Airflow to run language SDK tasks (Java, Go, and future native SDKs) — register a coordinator, map a queue to it, ensure the runtime/artifact on workers, and tune coordinator options. Use when the user wants Airflow to route a queue to a native-language coordinator, asks about the `[sdk]` `coordinators`/`queue_to_coordinator` settings, `AIRFLOW__SDK__COORDINATORS`, `jars_root`, `executables_root` or other coordinator `kwargs`, `task_startup_timeout`, or why their native tasks aren't being picked up. Covers the shared routing mechanism plus per-coordinator options (e.g. JavaCoordinator, ExecutableCoordinator).
What it loads into context
Frontmatter
158 tokensAlways available to the agent
SKILL.md
2,289 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites on the worker
- The two settings
- Per-coordinator options
- Verifying the configuration
- Related Skills
Files
SKILL.mdcore9,408 bytesSKILL.mdcore9,408 bytesSKILL.mdcore9,408 bytes
Read SKILL.md
# Configuring Airflow for Language SDKs
To run language SDK tasks, Airflow needs to know two things: which **coordinator** launches the native subprocess, and which **queue** routes to that coordinator. The mechanism is identical across every language SDK — only each coordinator's `classpath` and `kwargs` differ. This skill documents the shared wiring once, then the per-coordinator options. It is platform-neutral: the same settings apply on open-source Airflow and on managed platforms like Astro.
> **Experimental.** The language SDKs are in preview; configuration keys may change.
> For the task code, see **authoring-language-sdk-tasks** (and the per-language authoring skill, e.g. **authoring-java-sdk-tasks**, **authoring-go-sdk-tasks**). For building and shipping the artifact, see the per-language deploy skill (e.g. **deploying-java-sdk-bundles**, **deploying-go-sdk-bundles**).
---
## Prerequisites on the worker
- The **runtime or artifact the SDK needs** must be present on the worker nodes, because the coordinator spawns a native subprocess per task instance. The exact requirement is per-SDK — see [Per-coordinator options](#per-coordinator-options) (the Java SDK needs a **JRE 17+**; the Go SDK needs no language runtime — the bundle is a self-contained native executable, but it must be built for the worker's OS/arch).
- The compiled/native **artifact(s)** must be reachable on the worker. See the per-language deploy skill.View the complete source on GitHubcosmos-dbt-core
When your agent uses it
Turns a dbt Core project into an Airflow DAG/TaskGroup using Astronomer Cosmos. Use turning a dbt Core project into an Airflow DAG or TaskGroup with Astronomer Cosmos. Before implementing, verify dbt engine, warehouse, Airflow version, execution environment, DAG vs TaskGroup, and manifest availability.
What it loads into context
Frontmatter
76 tokensAlways available to the agent
SKILL.md
3,644 tokensWhen the skill is activated
Reference documents
3,228 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Configure Project (ProjectConfig)
- 2. Choose Parsing Strategy (RenderConfig)
- 3. Choose Execution Mode (ExecutionConfig)
- 4. Configure Warehouse Connection (ProfileConfig)
- 5. Configure Testing Behavior (RenderConfig)
- 6. Configure operator_args
- 7. Assemble DAG / TaskGroup
- 8. Safety Checks
- Appendix A: Airflow 3 Compatibility
- Appendix B: Operational Extras
- Related Skills
Files
SKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesSKILL.mdcore14,615 bytesreference/cosmos-config.mddoc13,145 bytes
Read SKILL.md
# Cosmos + dbt Core: Implementation Checklist
Execute steps in order. Prefer the simplest configuration that meets the user's constraints.
> **Version note**: This skill targets Cosmos 1.11+ and Airflow 3.x. If the user is on Airflow 2.x, adjust imports accordingly (see Appendix A).
>
> **Reference**: Latest stable: https://pypi.org/project/astronomer-cosmos/
> **Before starting**, confirm: (1) dbt engine = Core (not Fusion → use **cosmos-dbt-fusion**), (2) warehouse type, (3) Airflow version, (4) execution environment (Airflow env / venv / container), (5) DbtDag vs DbtTaskGroup vs individual operators, (6) manifest availability.
---
## 1. Configure Project (ProjectConfig)
View the complete source on GitHubcosmos-dbt-fusion
When your agent uses it
Run a dbt Fusion project with Astronomer Cosmos. Use when running a dbt Fusion project with Astronomer Cosmos (Cosmos 1.11+, ExecutionMode.LOCAL on Snowflake/Databricks). Before implementing, verify dbt engine is Fusion (not Core), the warehouse is supported, and local execution is acceptable. Does not cover dbt Core.
What it loads into context
Frontmatter
86 tokensAlways available to the agent
SKILL.md
1,772 tokensWhen the skill is activated
Reference documents
943 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Confirm Cosmos Version
- 2. Install the dbt Fusion Binary (REQUIRED)
- 3. Choose Parsing Strategy (RenderConfig)
- 4. Configure Warehouse Connection (ProfileConfig)
- 5. Configure ExecutionConfig (LOCAL Only)
- 6. Configure Project (ProjectConfig)
- 7. Assemble DAG / TaskGroup
- 8. Final Validation
- Reference
- Related Skills
Files
SKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesSKILL.mdcore7,148 bytesreference/cosmos-config.mddoc3,912 bytes
Read SKILL.md
# Cosmos + dbt Fusion: Implementation Checklist
Execute steps in order. This skill covers Fusion-specific constraints only.
> **Version note**: dbt Fusion support was introduced in Cosmos 1.11.0. Requires Cosmos ≥1.11.
>
> **Reference**: See **[reference/cosmos-config.md](reference/cosmos-config.md)** for ProfileConfig, operator_args, and Airflow 3 compatibility details.
> **Before starting**, confirm: (1) dbt engine = Fusion (not Core → use **cosmos-dbt-core**), (2) warehouse = Snowflake, Databricks, Bigquery and Redshift only.
### Fusion-Specific Constraints
| Constraint | Details |
|------------|---------|View the complete source on GitHubcreating-openlineage-extractors
When your agent uses it
Create custom OpenLineage extractors for Airflow operators. Use when the user needs lineage from unsupported or third-party operators, wants column-level lineage, or needs complex extraction logic beyond what inlets/outlets provide.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
2,757 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to Use Each Approach
- Two Approaches
- Approach 1: OpenLineage Methods (Recommended)
- Approach 2: Custom Extractors
- Common Patterns
- Common Pitfalls
- Testing Extractors
- Precedence Rules
- Related Skills
Files
SKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytesSKILL.mdcore13,170 bytes
Read SKILL.md
# Creating OpenLineage Extractors
This skill guides you through creating custom OpenLineage extractors to capture lineage from Airflow operators that don't have built-in support.
> **Reference:** See the [OpenLineage provider developer guide](https://airflow.apache.org/docs/apache-airflow-providers-openlineage/stable/guides/developer.html) for the latest patterns and list of supported operators/hooks.
## When to Use Each Approach
| Scenario | Approach |
|----------|----------|
| Operator you own/maintain | **OpenLineage Methods** (recommended, simplest) |
| Third-party operator you can't modify | Custom Extractor |
| Need column-level lineage | OpenLineage Methods or Custom Extractor |
| Complex extraction logic | OpenLineage Methods or Custom Extractor |View the complete source on GitHubdag-factory
When your agent uses it
Authors Apache Airflow DAGs declaratively from dag-factory YAML configs. Use when building DAGs declaratively from YAML via dag-factory; creating/editing dag-factory templates/YAML configs,reating/editing dag-factory YAML configs, defaults, dynamic tasks, datasets, or callbacks; or validating dag-factory configurations; upgrading or re-pinning dag-factory.
What it loads into context
Frontmatter
84 tokensAlways available to the agent
SKILL.md
4,533 tokensWhen the skill is activated
Reference documents
836 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before Starting
- Determine What the User Needs
- Project Setup
- Defining a DAG in YAML
- Defaults
- Custom & Provider Operators
- Dynamic Task Mapping
- Datasets
- Callbacks
- Custom Python Objects (`__type__`)
- Validation Commands
- Troubleshooting
- Verification Checklist
- Related Skills
- Reference
Files
SKILL.mdcore17,311 bytesSKILL.mdcore17,311 bytesSKILL.mdcore17,311 bytesSKILL.mdcore17,311 bytesreference/migration.mddoc3,086 bytes
Read SKILL.md
# DAG Factory
You are helping a user build Apache Airflow DAGs declaratively with **dag-factory**, a library that turns YAML configuration files into Airflow DAGs. Execute steps in order and prefer the simplest configuration that meets the user's needs.
> **Package**: `dag-factory` on PyPI
> **Repo**: https://github.com/astronomer/dag-factory
> **Docs**: https://astronomer.github.io/dag-factory/latest/
> **Targets**: dag-factory **v1.0+** only. For pre-1.0 projects, see [reference/migration.md](reference/migration.md) before applying any guidance from this skill.
> **Requires**: Python 3.10+, Airflow 2.4+ (Airflow 3 supported)
## Before Starting
Confirm with the user:
1. **Airflow version** ≥2.4
2. **Python version** ≥3.10View the complete source on GitHubdebugging-dags
When your agent uses it
Comprehensive DAG failure diagnosis and root-cause analysis with structured investigation and prevention recommendations. Use when deep failure investigation is needed, a DAG fails to import/parse or 'airflow dags list' errors on a file; a task or run is failing and must be diagnosed and fixed; requests like 'why did X fail', 'my dag keeps failing — find and fix it', or fixing a broken DAG so it loads cleanly. For simple 'why did it fail / show logs', the airflow skill handles it directly.
What it loads into context
Frontmatter
113 tokensAlways available to the agent
SKILL.md
1,802 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Running the CLI
- Step 1: Identify the Failure
- Step 2: Get the Error Details
- Step 3: Check Context
- Step 4: Provide Actionable Output
Files
SKILL.mdcore7,494 bytesSKILL.mdcore7,494 bytes
Read SKILL.md
# DAG Diagnosis
You are a data engineer debugging a failed Airflow DAG. Follow this systematic approach to identify the root cause and provide actionable remediation.
## 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`.
---
## Step 1: Identify the Failure
If a specific DAG was mentioned:
- Run `af runs diagnose <dag_id> <dag_run_id>` (if run_id is provided)View the complete source on GitHubdelegating-to-otto
When your agent uses it
Drives Astronomer's Otto agent (`astro otto`) as a delegated sub-agent for Airflow, dbt, and data-engineering work. Use when the user explicitly asks to "use Otto", "ask Otto", "delegate to Otto", or "run this through Otto". Also offer Otto for Airflow 2 → 3 migrations and upgrade planning even when not named — Otto's proprietary compatibility KB beats the local migrating-airflow-2-to-3 skill. Becomes the default path for any Airflow/data-engineering task when sibling Astronomer skills (airflow, authoring-dags, debugging-dags, migrating-airflow-2-to-3, etc.) are NOT loaded in the current session. Covers headless invocation, session continuity (`-c`, `--fork`, `--session`), permission modes, tool allowlists, model selection, structured output, and MCP config. **Do not load this skill if you are Otto** — Otto must not delegate to itself.
What it loads into context
Frontmatter
211 tokensAlways available to the agent
SKILL.md
3,760 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When delegating pays off
- How to use this skill: check what else is loaded first
- Quick invocation
- Session control
- Mode selection
- Permission modes
- Tool allowlists
- Structured output
- Model and reasoning selection
- MCP servers and extensions
- Common delegation patterns
- Cost and latency
- What Otto auto-detects
- Auto DAG validation
- Subagent extension (off by default)
- Settings precedence
- Verifying Otto is available
- Authoritative references
Files
SKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytesSKILL.mdcore15,583 bytes
Read SKILL.md
# Delegating to Otto
[Otto](https://www.astronomer.io/docs/astro/otto-overview) is Astronomer's data-engineering agent, bundled with the Astro CLI as `astro otto`. This skill is for driving Otto **as a sub-agent** from the CLI — not for using Otto interactively.
> **If you are Otto, stop here.** Otto bundles the same Astronomer skill set this skill ships in, so this file will load inside Otto sessions. Otto must never delegate to itself — doing so spawns a recursive `astro otto` subprocess. Ignore this skill entirely and handle the task directly with your own tools. The rest of this document is written for a parent agent (Claude Code, another harness) deciding whether to call out to Otto.
## When delegating pays off
**Signals that favor delegating:**
- **Airflow upgrades, migrations, runtime/provider compat questions.** Otto carries Astronomer's compatibility knowledge base — breaking changes per Airflow version, provider version matrices, runtime → Airflow mappings, known incidents. Generic agents don't have this and will often fabricate plausible-sounding answers.
- **Live-Airflow investigation.** Production failure diagnosis, run-history analysis, log triage. Otto's `af` tooling against a connected Airflow is wired up and bundled with debugging skills; replicating it ad-hoc in the parent session is wasteful.
- **Long, self-contained subtasks.** Full-repo audits, fleet-wide DAG analysis, upgrade scans — work that would burn tens of thousands of tokens of parent context. Delegating keeps the parent thread cheap and the result is one summary back, not a turn-by-turn trace.
- **Parallel branches.** Use `--fork` to explore an alternative ("what if we used Cosmos here?") without polluting the main thread.View the complete source on GitHubdeploying-airflow
When your agent uses it
Deploys Airflow DAGs and projects. Use when deploying Airflow or answering anything about deployment - deploying DAGs/projects, pushing code, setting up CI/CD, deploying to production or deployment strategies for Airflow.
What it loads into context
Frontmatter
51 tokensAlways available to the agent
SKILL.md
2,807 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Astro (Astronomer)
- Open-Source: Docker Compose
- Open-Source: Kubernetes (Helm Chart)
- Related Skills
Files
SKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytesSKILL.mdcore11,078 bytes
Read SKILL.md
# Deploying Airflow
This skill covers deploying Airflow DAGs and projects to production, whether using Astro (Astronomer's managed platform) or open-source Airflow on Docker Compose or Kubernetes.
**Choosing a path:** Astro is a good fit for managed operations and faster CI/CD. For open-source, use Docker Compose for dev and the Helm chart for production.
---
## Astro (Astronomer)
Astro provides CLI commands and GitHub integration for deploying Airflow projects.
### Deploy Commands
View the complete source on GitHubdeploying-go-sdk-bundles
When your agent uses it
Builds, packs, and deploys compiled Airflow Go SDK bundles so the ExecutableCoordinator can run them. Use when the user wants to compile a Go task bundle, asks about `go build`, `go tool airflow-go-pack`, the AFBNDL01 self-contained executable bundle, packing or inspecting a bundle, placing it under `executables_root`, cross-compiling a bundle for workers, `go-sdk` module versioning/tags/pseudo-versions, or getting the bundle onto an Airflow worker (Docker, Kubernetes, or Astro). For the task code see authoring-go-sdk-tasks; for the shared coordinator settings see configuring-airflow-language-sdks.
What it loads into context
Frontmatter
148 tokensAlways available to the agent
SKILL.md
1,790 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Build and pack the bundle
- Wire up the coordinator
- Deployment paths
- Versioning and preview installs
- Deploy checklist
- Related Skills
Files
SKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytesSKILL.mdcore7,286 bytes
Read SKILL.md
# Deploying Go SDK Bundles
A Go SDK deployment has one artifact: a **bundle**, a single self-contained native executable that also carries its embedded source and a manifest (the AFBNDL01 format, "the executable *is* the bundle"). You build and pack it with `go`, place it where Airflow's `ExecutableCoordinator` scans, and the Python task runner forks it once per task instance. This skill is platform-neutral: it shows the build, the coordinator wiring, then how to get the bundle onto a worker.
> **Experimental.** The Go SDK is under active development and not production-ready. Everything resolves against the single module `github.com/apache/airflow/go-sdk` (Go 1.24+).
> **Order of operations:** write the tasks (**authoring-go-sdk-tasks**) -> build and pack the bundle (this skill) -> place it under `executables_root` and configure the coordinator -> deploy the matching Python stub DAG.
---
## Build and pack the bundle
The coordinator only recognizes a **packed** bundle: it scans for the AFBNDL01 trailer and silently skips any file that lacks it, so a plain `go build` binary is not deployable on its own. Use the packer, shipped as a Go 1.24 `tool` directive in `go.mod` (no global install, version pinned per project):
View the complete source on GitHubdeploying-java-sdk-bundles
When your agent uses it
Builds and deploys compiled Airflow Java SDK bundles so workers can run them. Use when the user wants to package a JVM task bundle into a JAR, asks about the `org.apache.airflow.sdk` Gradle plugin, `./gradlew bundle`, the Maven shade/BOM setup, fat vs thin JARs, the logging integration artifacts (JPL, SLF4J, Log4j 2, JUL), preview/snapshot builds, or getting the JAR onto an Airflow worker (Docker, Kubernetes, or Astro). For the task code see authoring-java-sdk-tasks; for the Airflow coordinator settings see configuring-airflow-language-sdks.
What it loads into context
Frontmatter
148 tokensAlways available to the agent
SKILL.md
2,778 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Build with Gradle (recommended)
- Build with Maven
- Logging integration
- Preview builds (before a stable release)
- Place the bundle where the coordinator scans
- Deployment paths
- Deploy checklist
- Related Skills
Files
SKILL.mdcore11,204 bytesSKILL.mdcore11,204 bytesSKILL.mdcore11,204 bytesSKILL.mdcore11,204 bytesSKILL.mdcore11,204 bytes
Read SKILL.md
# Deploying Java SDK Bundles
A Java SDK deployment has one artifact: a **bundle** — your compiled task classes plus the SDK, packaged as a JAR (or a thin JAR alongside its dependency JARs). You build it with Gradle or Maven, then place it in a directory that the `JavaCoordinator` scans (`jars_root`) on every worker. This skill is platform-neutral; it shows the build once, then both an open-source and an Astro deployment path.
> **Experimental.** The Java SDK is in preview. Artifact versions below are shown as `${version}`; while the SDK is pre-release you may need to build the artifacts into your local Maven repository yourself (see the preview builds section).
> **Order of operations:** build the bundle (this skill) → place it where `jars_root` points → configure the coordinator (**configuring-airflow-language-sdks**). The task code itself is **authoring-java-sdk-tasks**.
---
## Build with Gradle (recommended)
Apply the SDK's Gradle plugin and declare dependencies in `build.gradle`:
View the complete source on GitHubmanaging-astro-deployments
When your agent uses it
Manage Astronomer production deployments with Astro CLI. Use when the user wants to authenticate, switch workspaces, create/update/delete deployments, or deploy code to production.
What it loads into context
Frontmatter
44 tokensAlways available to the agent
SKILL.md
1,459 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Authentication
- Workspace Management
- List and Inspect Deployments
- Create Deployments
- Update Deployments
- Delete Deployments
- Deploy Code to Production
- Deployment API Tokens
- Common Workflows
- Configuration Management
- Tips
- Related Skills
Files
SKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytesSKILL.mdcore6,472 bytes
Read SKILL.md
# Astro Deployment Management
This skill helps you manage production Astronomer deployments using the Astro CLI.
> **For local development**, see the **managing-astro-local-env** skill.
> **For production troubleshooting**, see the **troubleshooting-astro-deployments** skill.
---
## Authentication
All deployment operations require authentication:
```bashView the complete source on GitHubmanaging-astro-local-env
When your agent uses it
Manage local Airflow environment with Astro CLI (Docker and standalone modes). Use when the user wants to start, stop, or restart Airflow, view logs, query the Airflow API, troubleshoot, or fix environment issues. For project setup, see setting-up-astro-project.
What it loads into context
Frontmatter
66 tokensAlways available to the agent
SKILL.md
2,121 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Start / Stop / Restart (Docker)
- Standalone Mode
- Reverse Proxy
- Check Status
- View Logs
- Run Airflow CLI Commands
- Querying the Airflow API
- Troubleshooting
- Upgrade Airflow
- Related Skills
Files
SKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytesSKILL.mdcore8,060 bytes
Read SKILL.md
# Astro Local Environment
This skill helps you manage your local Airflow environment using the Astro CLI.
Two modes: **Docker** (default, uses containers) and **Standalone** (Docker-free, uses a local venv — requires Airflow 3 + `uv`).
> **To set up a new project**, see the **setting-up-astro-project** skill.
> **When Airflow is running**, use MCP tools from **authoring-dags** and **testing-dags** skills.
---
## Start / Stop / Restart (Docker)
```bashView the complete source on GitHubmigrating-ai-sdk-to-common-ai
When your agent uses it
Migrates Airflow projects from airflow-ai-sdk to apache-airflow-providers-common-ai 0.4.0+. Use when replacing airflow-ai-sdk with the official Airflow AI provider - migrating LLM decorators (@task.llm, @task.agent, @task.llm_branch, @task.embed), switching from model strings/objects to connection-based LLM configuration, updating imports from airflow_ai_sdk to the new provider, or upgrading an existing common-ai 0.1.x setup to 0.4.x (multimodal prompts, toolsets, embedding operators); also when common-ai provider, AIP-99, a pydanticai connection or migrating away from airflow-ai-sdk come up.
What it loads into context
Frontmatter
153 tokensAlways available to the agent
SKILL.md
4,983 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before starting
- Step 1: Update requirements.txt
- Step 2: Create PydanticAI connection
- Step 3: Migrate decorators
- Step 4: Update imports
- Step 5: Update connections.yaml (if used for local testing)
- Step 6: Clean up env vars
- Step 7: Verify
- Quick reference: New features in common-ai provider
Files
SKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytesSKILL.mdcore18,954 bytes
Read SKILL.md
# Migrate airflow-ai-sdk to apache-airflow-providers-common-ai
This skill migrates Airflow projects from `airflow-ai-sdk` to `apache-airflow-providers-common-ai` (target **0.4.0+**), the official Airflow AI provider built on PydanticAI. It also covers upgrading projects already on common-ai 0.1.x, since several capabilities (multimodal prompts, `toolsets`, embedding operators, structured-output XCom behavior) changed between 0.1.0 and 0.4.0.
> **CRITICAL**: The new provider requires **Airflow 3.0+** and (for 0.4.0) **pydantic-ai-slim >= 1.71.0**. The API surface has changed: LLM configuration moves from code (model strings/objects) to Airflow connections (`pydanticai` type). There is no `@task.embed` in the new provider; embeddings move to the LlamaIndex integration or a plain `@task` (see Step 3).
## Before starting
Use the Grep tool with the pattern below to inventory everything that needs to migrate:
```
airflow_ai_sdk|airflow-ai-sdk|ai_sdk|@task\.llm|@task\.agent|@task\.llm_branch|@task\.embed
```
View the complete source on GitHubmigrating-airflow-2-to-3
When your agent uses it
Guide for migrating Apache Airflow 2.x projects to Airflow 3.x. Use when the user mentions Airflow 3 migration, upgrade, compatibility issues, breaking changes, or wants to modernize their Airflow codebase. If you detect Airflow 2.x code that needs migration, prompt the user and ask if they want you to help upgrade. Always load this skill as the first step for any migration-related request.
What it loads into context
Frontmatter
142 tokensAlways available to the agent
SKILL.md
2,222 tokensWhen the skill is activated
Reference documents
7,459 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Migration at a Glance
- Architecture & Metadata DB Access
- Ruff Airflow Migration Rules
- Reference Files
- Quick Reference Tables
- Resources
- Related Skills
Files
SKILL.mdcore9,128 bytesSKILL.mdcore9,128 bytesSKILL.mdcore9,128 bytesSKILL.mdcore9,128 bytesreference/config-changes.mddoc2,409 bytesreference/migration-checklist.mddoc6,842 bytesreference/migration-patterns.mddoc16,178 bytesreference/removed-methods.mddoc3,902 bytes
Read SKILL.md
# Airflow 2 to 3 Migration
This skill helps migrate **Airflow 2.x DAG code** to **Airflow 3.x**, focusing on code changes (imports, operators, hooks, context, API usage).
**Important**: Before migrating to Airflow 3, strongly recommend upgrading to Airflow 2.11 first, then to at least Airflow 3.0.11 (ideally directly to 3.1). Other upgrade paths would make rollbacks impossible. See: https://www.astronomer.io/docs/astro/airflow3/upgrade-af3#upgrade-your-airflow-2-deployment-to-airflow-3. Additionally, early 3.0 versions have many bugs - 3.1 provides a much better experience.
## Migration at a Glance
1. Run Ruff's Airflow migration rules to auto-fix detectable issues (AIR30/AIR301/AIR302/AIR31/AIR311/AIR312).
- `ruff check --preview --select AIR --fix --unsafe-fixes .`
2. Scan for remaining issues using the manual search checklist in [reference/migration-checklist.md](reference/migration-checklist.md).
- Focus on: direct metadata DB access, legacy imports, scheduling/context keys, XCom pickling, datasets-to-assets, REST API/auth, plugins, and file paths.
- Hard behavior/config gotchas to explicitly review:
- Cron scheduling semantics: consider `AIRFLOW__SCHEDULER__CREATE_CRON_DATA_INTERVAL=True` if you need Airflow 2-style cron data intervals.View the complete source on GitHubmigrating-dagster-to-airflow
When your agent uses it
Guide for migrating Dagster projects to Apache Airflow 3 on Astro. Use when the user mentions migrating, converting, or porting Dagster (or Dagster+) code to Airflow or Astro, wants to plan or assess such a migration, or asks what a Dagster construct maps to in Airflow. Covers assets, partitions, schedules, sensors, declarative automation, resources, IO managers, ops/jobs, dbt, Pipes, Components, and Dagster+ platform config. Always load this skill as the first step for any Dagster-to-Airflow request.
What it loads into context
Frontmatter
187 tokensAlways available to the agent
SKILL.md
3,401 tokensWhen the skill is activated
Reference documents
37,014 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Migration at a glance
- Version drift
- Requirements
- Hard rules
- Workflow
- Reference routing
- Scripts
Scripts executed separately
scripts/inventory.pyscripts/status.pyscripts/tests/conftest.pyscripts/tests/test_inventory.pyscripts/tests/test_merge.pyscripts/tests/test_status.pyscripts/tests/test_validate_dag.pyscripts/validate_dag.py
Files
README.mddoc4,196 bytesSKILL.mdcore15,137 bytesSKILL.mdcore15,137 bytesSKILL.mdcore15,137 bytesSKILL.mdcore15,137 bytesSKILL.mdcore15,137 bytesSKILL.mdcore15,137 bytesSKILL.mdcore15,137 bytesreference/assets.mddoc5,219 bytesreference/astro-deployment.mddoc12,564 bytesreference/automation.mddoc12,067 bytesreference/components.mddoc5,302 bytesreference/dbt.mddoc26,692 bytesreference/io-and-data-passing.mddoc10,693 bytesreference/mapping.mddoc25,880 bytesreference/partitions.mddoc12,554 bytesreference/quickstart.mddoc5,423 bytesreference/troubleshooting.mddoc16,366 bytesreference/validation.mddoc17,829 bytesscripts/inventory.pyruns43,551 bytesscripts/pyproject.tomlasset653 bytesscripts/status.pyruns15,374 bytesscripts/tests/conftest.pyruns3,909 bytesscripts/tests/test_inventory.pyruns6,150 bytesscripts/tests/test_merge.pyruns4,626 bytesscripts/tests/test_status.pyruns4,662 bytesscripts/tests/test_validate_dag.pyruns4,622 bytesscripts/uv.lockasset24,202 bytesscripts/validate_dag.pyruns18,958 bytes
Read SKILL.md
# Dagster → Airflow 3 (Astro) migration
Migrate a Dagster project to Airflow 3 on Astro Runtime, honestly. The migration is asset-first (Dagster asset graphs translate to Airflow assets and asset-aware schedules, not flattened DAGs), incremental (domain by domain, Dagster stays authoritative until parity), and honest (every definition gets an explicit disposition; semantic deltas are documented, never papered over).
First time driving this? Read `reference/quickstart.md` first: hour-one commands, the glossary, and what can and cannot break.
## Migration at a glance
1. Baseline the source project's tests, then inventory it read-only (`scripts/inventory.py` → manifest).
2. Review classifications (MECH/JUDG/REDESIGN/NONE per `reference/mapping.md`); make the go/no-go call (three outcomes; migrate-with-conditions is the common case, stay is the narrow one); plan DAG boundaries, per-edge IO decisions, and Gate 3 expectations into the manifest.
3. Trial-migrate 2-3 representative units end-to-end through every validation gate.
4. Migrate domain by domain through the six-gate ladder (`reference/validation.md`), tracking per-unit state (`scripts/status.py`); fix failure classes via `reference/troubleshooting.md`, never stub.
5. Map the platform layer (secrets, alerts, CI/CD, Deployments) per `reference/astro-deployment.md`.
6. Run side by side, then cut over per domain (consumers unpause first; see the checklist), keeping rollback one step away.View the complete source on GitHubprofiling-tables
When your agent uses it
Deep-dive data profiling for a specific table. Use when the user asks to profile a table, wants statistics about a dataset, asks about data quality, or needs to understand a table's structure and content. Requires a table name.
What it loads into context
Frontmatter
55 tokensAlways available to the agent
SKILL.md
949 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1: Basic Metadata
- Step 2: Size and Shape
- Step 3: Column-Level Statistics
- Step 4: Cardinality Analysis
- Step 5: Sample Data
- Step 6: Data Quality Assessment
- Step 7: Output Summary
Files
SKILL.mdcore3,856 bytes
Read SKILL.md
# Data Profile
Generate a comprehensive profile of a table that a new team member could use to understand the data.
## Step 1: Basic Metadata
Query column metadata:
```sql
SELECT COLUMN_NAME, DATA_TYPE, COMMENT
FROM <database>.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<schema>' AND TABLE_NAME = '<table>'
ORDER BY ORDINAL_POSITION
```View the complete source on GitHubsetting-up-astro-project
When your agent uses it
Initialize and configure Astro/Airflow projects. Use when the user wants to create a new project, set up dependencies, configure connections/variables, or understand project structure. For running the local environment, see managing-astro-local-env.
What it loads into context
Frontmatter
57 tokensAlways available to the agent
SKILL.md
748 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Initialize a New Project
- Adding Dependencies
- Configuring Connections & Variables
- Validate Before Running
- Related Skills
Files
SKILL.mdcore3,255 bytesSKILL.mdcore3,255 bytesSKILL.mdcore3,255 bytesSKILL.mdcore3,255 bytesSKILL.mdcore3,255 bytes
Read SKILL.md
# Astro Project Setup
This skill helps you initialize and configure Airflow projects using the Astro CLI.
> **To run the local environment**, see the **managing-astro-local-env** skill.
> **To write DAGs**, see the **authoring-dags** skill.
> **Open-source alternative:** If the user isn't on Astro, guide them to Apache Airflow's Docker Compose quickstart for local dev and the Helm chart for production. For deployment strategies, use the `deploying-airflow` skill.
---
## Initialize a New Project
```bash
astro dev initView the complete source on GitHubtesting-dags
When your agent uses it
Complex DAG testing workflows with debugging and fixing cycles. Use for multi-step testing requests like "test this dag and fix it if it fails", "test and debug", "run the pipeline and troubleshoot issues". For simple test requests ("test dag", "run dag"), the airflow entrypoint skill handles it directly. This skill is for iterative test-debug-fix cycles.
What it loads into context
Frontmatter
81 tokensAlways available to the agent
SKILL.md
2,580 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Running the CLI
- Quick Validation with Astro CLI
- FIRST ACTION: Just Trigger the DAG
- Testing Workflow Overview
- Phase 1: Trigger and Wait
- Handling Results
- Phase 2: Debug Failures (Only If Needed)
- Phase 3: Fix and Retest
- CLI Quick Reference
- Testing Scenarios
- Debugging Tips
- Related Skills
Files
SKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytesSKILL.mdcore10,576 bytes
Read SKILL.md
# DAG Testing Skill
Use `af` commands to test, debug, and fix DAGs in iterative cycles.
## 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`.
---
## Quick Validation with Astro CLI
If the user has the Astro CLI available, these commands provide fast feedback without needing a running Airflow instance:
View the complete source on GitHubtracing-downstream-lineage
When your agent uses it
Trace downstream data lineage and impact analysis. Use when the user asks what depends on this data, what breaks if something changes, downstream dependencies, or needs to assess change risk before modifying a table or DAG.
What it loads into context
Frontmatter
51 tokensAlways available to the agent
SKILL.md
1,134 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Impact Analysis
- Output: Impact Report
Files
SKILL.mdcore4,979 bytesSKILL.mdcore4,979 bytesSKILL.mdcore4,979 bytes
Read SKILL.md
# Downstream Lineage: Impacts
Answer the critical question: "What breaks if I change this?"
Use this BEFORE making changes to understand the blast radius.
## Impact Analysis
### Step 1: Identify Direct Consumers
Find everything that reads from this target:
**For Tables:**
View the complete source on GitHubtracing-upstream-lineage
When your agent uses it
Trace upstream data lineage. Use when the user asks where data comes from, what feeds a table, upstream dependencies, data sources, or needs to understand data origins.
What it loads into context
Frontmatter
43 tokensAlways available to the agent
SKILL.md
1,050 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Lineage Investigation
- Lineage for Columns
- Output: Lineage Report
Files
SKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytesSKILL.mdcore4,500 bytes
Read SKILL.md
# Upstream Lineage: Sources
Trace the origins of data - answer "Where does this data come from?"
## Lineage Investigation
### Step 1: Identify the Target Type
Determine what we're tracing:
- **Table**: Trace what populates this table
- **Column**: Trace where this specific column comes from
- **DAG**: Trace what data sources this DAG reads from
### Step 2: Find the Producing DAGView the complete source on GitHubtroubleshooting-astro-deployments
When your agent uses it
Troubleshoot Astronomer production deployments with Astro CLI. Use when investigating deployment issues, viewing production logs, analyzing failures, or managing deployment environment variables.
What it loads into context
Frontmatter
41 tokensAlways available to the agent
SKILL.md
2,039 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Health Check
- Viewing Deployment Logs
- Complete Investigation Workflow
- Common Investigation Patterns
- Environment Variables Management
- Key Metrics from `deployment inspect`
- Investigation Best Practices
- Troubleshooting Quick Reference
- Related Skills
Files
SKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytesSKILL.mdcore8,553 bytes
Read SKILL.md
# Astro Deployment Troubleshooting
This skill helps you diagnose and troubleshoot production Astronomer deployments using the Astro CLI.
> **For deployment management**, see the **managing-astro-deployments** skill.
> **For local development**, see the **managing-astro-local-env** skill.
---
## Quick Health Check
Start with these commands to get an overview:
```bashView the complete source on GitHubwarehouse-init
When your agent uses it
Initialize warehouse schema discovery. Generates .astro/warehouse.md with all table metadata for instant lookups. Run once per project, refresh when schema changes. Use when user says "/astronomer-data:warehouse-init" or asks to set up data discovery.
What it loads into context
Frontmatter
58 tokensAlways available to the agent
SKILL.md
2,629 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What This Does
- Process
- Output Format
- Command Options
- After Generation
- Refresh Behavior
- Cache Staleness & Schema Drift
- Codebase Patterns Recognized
- Example Session
Files
SKILL.mdcore10,717 bytesSKILL.mdcore10,717 bytesSKILL.mdcore10,717 bytesSKILL.mdcore10,717 bytesSKILL.mdcore10,717 bytes
Read SKILL.md
# Initialize Warehouse Schema
Generate a comprehensive, user-editable schema reference file for the data warehouse.
**Scripts:** `../analyzing-data/scripts/` — All CLI commands below are relative to the `analyzing-data` skill's directory. Before running any `scripts/cli.py` command, `cd` to `../analyzing-data/` relative to this file.
## What This Does
1. Discovers all databases, schemas, tables, and columns from the warehouse
2. **Enriches with codebase context** (dbt models, gusty SQL, schema docs)
3. Records row counts and identifies large tables
4. Generates `.astro/warehouse.md` - a version-controllable, team-shareable reference
5. Enables instant concept→table lookups without warehouse queries
View the complete source on GitHubSkills included
- airflow-adapter
- airflow
- airflow-hitl
- airflow-plugins
- airflow-state-store
- analyzing-data
- annotating-task-lineage
- authoring-dags
- authoring-go-sdk-tasks
- authoring-java-sdk-tasks
- authoring-language-sdk-tasks
- blueprint
- checking-freshness
- configuring-airflow-language-sdks
- cosmos-dbt-core
- cosmos-dbt-fusion
- creating-openlineage-extractors
- dag-factory
- debugging-dags
- delegating-to-otto
- deploying-airflow
- deploying-go-sdk-bundles
- deploying-java-sdk-bundles
- managing-astro-deployments
- managing-astro-local-env
- migrating-ai-sdk-to-common-ai
- migrating-airflow-2-to-3
- migrating-dagster-to-airflow
- profiling-tables
- setting-up-astro-project
- testing-dags
- tracing-downstream-lineage
- tracing-upstream-lineage
- troubleshooting-astro-deployments
- warehouse-init
Repository facts
- License
- Apache-2.0
- Created
- Jan 13, 2026
- Last pushed
- Nov 2, 2026
- Forks
- 74
- Open issues
- 9
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 296 notes
astro-airflow-mcp/.claude/skills/airflow-adapter/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow-hitl/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/airflow-hitl/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 20 dangerous shell commandsin 8 files: analyzing-data/scripts/tests/test_connectors.py:1047 deploying-java-sdk-bundles/SKILL.md:186 analyzing-data/scripts/tests/integration/test_sqlite_e2e.py:24 and 5 more
- 280 network referencesin 28 files: migrating-dagster-to-airflow/scripts/uv.lock:10 airflow-plugins/SKILL.md:14 airflow/SKILL.md:12 and 25 more
- No hidden or obfuscated text
- No instruction overrides
- 33 executable scriptsin 31 files: skills/airflow/hooks/warm-uvx-cache.sh:1 skills/analyzing-data/scripts/cli.py:1 analyzing-data/scripts/.gitignore:1 and 28 more
- 55 references to secretsin 18 files: airflow-plugins/SKILL.md:199 analyzing-data/scripts/connectors.py:56 analyzing-data/scripts/tests/integration/conftest.py:12 and 15 more
- No requests to vote in Hot
Show all 388 signals by file
.claude-plugin/marketplace.json
- Network accessline 15
"email": "support@astronomer.io" }, "homepage": "https://github.com/astronomer/agents", - Network accessline 16
}, "homepage": "https://github.com/astronomer/agents", "repository": "https://github.com/astronomer/agents", - Network accessline 17
"homepage": "https://github.com/astronomer/agents", - Network accessline 18
"repository": "https://github.com/astronomer/agents",
astro-airflow-mcp/.claude/skills/airflow-adapter/patterns.md
skills/airflow-hitl/SKILL.md
- Access to secretsline 142
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Network accessline 146
# List pending — use the path from `af api ls --filter hitl` requests.get(f"{HOST}/<path>", headers=HEADERS, params={"state": "pending"}) - Network accessline 147
requests.get(f"{HOST}/<path>", headers=HEADERS, params={"state": "pending"}) - Network accessline 149
# Respond — same discovered path family, PATCH requests.patch( - Network accessline 150
requests.patch(
skills/airflow-plugins/SKILL.md
- Network accessline 14
> **Restart required**: Changes to Python plugin files require restarting the API server. Static file changes (HTML, JS, CSS) are picked up immediately. Set `AIRFLOW__CORE__LAZY_LOAD_PLUGINS=False` during development to load plugins at star - Network accessline 16
> **Relative paths always**: In `external_views`, `href` must have no leading slash. In HTML and JavaScript, use relative paths for all assets and `fetch()` calls. Absolute paths break behind reverse proxies. - Network accessline 20
1. Am I using `fastapi_apps` / FastAPI — not `appbuilder_views` / Flask? 2. Are all HTML/JS asset paths and `fetch()` calls relative (no leading slash)? - Network accessline 21
2. Are all HTML/JS asset paths and `fetch()` calls relative (no leading slash)? - Network accessline 128
{ "name": "Learn Airflow 3", "href": "https://www.astronomer.io/docs/learn", - Network accessline 129
"name": "Learn Airflow 3", "href": "https://www.astronomer.io/docs/learn", "destination": "dag", # adds a tab to every Dag page - Network accessline 130
"href": "https://www.astronomer.io/docs/learn", - Network accessline 137
The no-leading-slash rule applies to internal paths only — full `https://` URLs are fine. - Network accessline 163
fetch('api/dags') // correct — relative to current page - Network accessline 164
fetch('/my-plugin/api/dags') // breaks on Astro and sub-path deploys - Network accessline 199
[Credential-related source omitted] - Access to secretsline 199
[Credential-related source omitted] - Access to secretsline 200
[Credential-related source omitted] - Access to secretsline 201
[Credential-related source omitted] - Access to secretsline 202
[Credential-related source omitted] - Network accessline 209
def _fetch_fresh_token() -> str: """Exchange username/password for a JWT via Airflow's auth endpoint.""" response = requests.post( - Network accessline 210
"""Exchange username/password for a JWT via Airflow's auth endpoint.""" response = requests.post( f"{AIRFLOW_HOST}/auth/token", - Network accessline 211
response = requests.post( - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 240
[Credential-related source omitted] - Network accessline 272
> **API field names**: Never guess response field names — verify against the [REST API reference](https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html). Key `DAGResponse` fields: `dag_id`, `dag_display_name`, `desc - Network accessline 306
> **If you need an SDK method or field not shown in the examples below**, verify it before generating code — do not guess. Either run `python3 -c "from airflow_client.client.api import <Class>; print([m for m in dir(<Class>) if not m.starts - Network accessline 349
These are the most common calls beyond basic DAG CRUD. For anything not shown here, consult the [REST API reference](https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html) for available endpoints and the matching Py - Network accessline 398
async def proxy_file(filename: str): def _stream(): r = requests.get(f"https://files.example.com/{filename}", stream=True) - Network accessline 399
def _stream(): r = requests.get(f"https://files.example.com/{filename}", stream=True) r.raise_for_status() - Network accessline 400
r = requests.get(f"https://files.example.com/{filename}", stream=True) - Network accessline 411
Note that `requests.get()` is blocking — fetch in `asyncio.to_thread` so the event loop isn't stalled while waiting for the remote server. - Network accessline 471
def get_link(self, operator, *, ti_key, **context) -> str: return f"https://my-dashboard.example.com/tasks/{ti_key.task_id}" - Network accessline 472
return f"https://my-dashboard.example.com/tasks/{ti_key.task_id}" - Network accessline 523
[Credential-related source omitted] - Access to secretsline 523
[Credential-related source omitted] - Access to secretsline 524
[Credential-related source omitted] - Access to secretsline 525
[Credential-related source omitted] - Network accessline 530
[Credential-related source omitted] - Access to secretsline 530
[Credential-related source omitted] - Network accessline 531
MYPLUGIN_HOST=http://localhost:8080 - Network accessline 550
astro deployment variable create --deployment-id <id> MYPLUGIN_HOST=https://airflow.example.com - Network accessline 581
| Endpoints accessible without login | FastAPI apps are not auto-authenticated | Add FastAPI security (e.g. OAuth2, API key) if endpoints must be private | | Middleware affecting wrong routes | Middleware applies to all API traffic | Filter - Network accessline 583
| JS `fetch()` breaks on Astro | Absolute path in `fetch()` | Always use relative paths: `fetch('api/dags')` | - Network accessline 589
- [Airflow plugins documentation](https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/plugins.html) - Network accessline 590
- [Airflow REST API reference](https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html) — full endpoint list with SDK class/method names - Network accessline 591
- [Astronomer: Using Airflow plugins](https://www.astronomer.io/docs/learn/using-airflow-plugins)
skills/airflow/SKILL.md
- Network accessline 12
The [Astro CLI](https://www.astronomer.io/docs/astro/cli/overview) is the recommended way to run Airflow locally and deploy to production. It provides a containerized Airflow environment that works out of the box: - Network accessline 18
# Start local Airflow (webserver at http://localhost:8080) - Network accessline 48
# Add a new instance af instance add prod --url https://airflow.example.com --token "$API_TOKEN" - Network accessline 49
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Network accessline 50
af instance add staging --url https://staging.example.com --username admin --password admin - Network accessline 73
[Credential-related source omitted] - Network accessline 74
[Credential-related source omitted] - Access to secretsline 74
[Credential-related source omitted] - Network accessline 94
instances: - name: prod url: https://airflow.example.com - Network accessline 95
- name: prod url: https://airflow.example.com auth: - Network accessline 96
url: https://airflow.example.com - Access to secretsline 98
[Credential-related source omitted] - Network accessline 104
export AIRFLOW_API_URL=http://localhost:8080 - Access to secretsline 105
[Credential-related source omitted] - Network accessline 111
Or CLI flags: `af --airflow-url http://localhost:8080 --token "$TOKEN" <command>`
skills/airflow/hooks/warm-uvx-cache.sh
skills/analyzing-data/scripts/.gitignore
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/cache.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/cli.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 48
click.echo("Error: uv is not installed.", err=True) click.echo( "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True - Network accessline 48
click.echo("Error: uv is not installed.", err=True) click.echo( "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True - Network accessline 49
click.echo( "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True ) - Network accessline 49
click.echo( "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True ) - Dangerous shell operationline 50
"Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True - Dangerous shell operationline 50
"Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True - Network accessline 50
"Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True - Network accessline 50
"Install with: curl -LsSf https://astral.sh/uv/install.sh | sh", err=True
skills/analyzing-data/scripts/config.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/connectors.py
- Executable scriptline 1
Executable file - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 174
[Credential-related source omitted] - Access to secretsline 197
[Credential-related source omitted] - Access to secretsline 212
[Credential-related source omitted] - Access to secretsline 229
[Credential-related source omitted] - Access to secretsline 338
[Credential-related source omitted] - Access to secretsline 721
[Credential-related source omitted]
skills/analyzing-data/scripts/kernel.py
- Executable scriptline 1
Executable file - Network accessline 110
raise RuntimeError( "uv is not installed.\n" "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh" - Network accessline 111
"uv is not installed.\n" "Install with: curl -LsSf https://astral.sh/uv/install.sh | sh" ) - Dangerous shell operationline 112
"Install with: curl -LsSf https://astral.sh/uv/install.sh | sh" - Network accessline 112
"Install with: curl -LsSf https://astral.sh/uv/install.sh | sh" - Access to secretsline 198
[Credential-related source omitted] - Access to secretsline 268
[Credential-related source omitted]
skills/analyzing-data/scripts/templates.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/__init__.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/conftest.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/integration/__init__.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/integration/conftest.py
- Executable scriptline 1
Executable file - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 13
[Credential-related source omitted] - Access to secretsline 14
[Credential-related source omitted] - Access to secretsline 15
[Credential-related source omitted] - Access to secretsline 16
[Credential-related source omitted]
skills/analyzing-data/scripts/tests/integration/test_duckdb_e2e.py
skills/analyzing-data/scripts/tests/integration/test_kernel_interrupt.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/integration/test_postgres_e2e.py
skills/analyzing-data/scripts/tests/integration/test_sqlite_e2e.py
skills/analyzing-data/scripts/tests/test_cache.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/test_config.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/test_connectors.py
- Executable scriptline 1
Executable file - Access to secretsline 632
[Credential-related source omitted] - Access to secretsline 636
[Credential-related source omitted] - Access to secretsline 646
[Credential-related source omitted] - Access to secretsline 753
[Credential-related source omitted] - Access to secretsline 758
[Credential-related source omitted] - Dangerous shell operationline 1047
exec(prelude, local_vars) - Dangerous shell operationline 1116
exec(conn.to_python_prelude(), local_vars) - Dangerous shell operationline 1139
exec(conn.to_python_prelude(), local_vars) - Dangerous shell operationline 1148
exec(conn.to_python_prelude(), local_vars) - Dangerous shell operationline 1198
exec(HELPERS_CODE, namespace)
skills/analyzing-data/scripts/tests/test_kernel.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/test_utils.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/tests/test_warehouse.py
- Executable scriptline 1
Executable file
skills/analyzing-data/scripts/ty.toml
skills/analyzing-data/scripts/warehouse.py
skills/annotating-task-lineage/SKILL.md
- Network accessline 10
> **Reference:** See the [OpenLineage provider developer guide](https://airflow.apache.org/docs/apache-airflow-providers-openlineage/stable/guides/developer.html) for the latest supported operators and patterns. - Network accessline 215
Use the [OpenLineage dataset naming helpers](https://openlineage.io/docs/client/python/best-practices#dataset-naming-helpers) to ensure consistent naming across platforms: - Network accessline 264
> **Note:** Always use the naming helpers instead of constructing namespaces manually. If a helper is missing for your platform, check the [OpenLineage repo](https://github.com/OpenLineage/OpenLineage) or request it.
skills/authoring-dags/reference/best-practices.md
- Access to secretsline 120
[Credential-related source omitted]
skills/blueprint/SKILL.md
- Network accessline 10
> **Package**: `airflow-blueprint` on PyPI — this skill documents **0.5.0** > **Repo**: https://github.com/astronomer/blueprint - Network accessline 11
> **Repo**: https://github.com/astronomer/blueprint - Network accessline 721
- GitHub: https://github.com/astronomer/blueprint - Network accessline 722
- PyPI: https://pypi.org/project/airflow-blueprint/ - Network accessline 726
- Astro IDE Blueprint docs: https://docs.astronomer.io/astro/ide-blueprint
skills/cosmos-dbt-core/SKILL.md
- Network accessline 10
> **Version note**: This skill targets Cosmos 1.11+ and Airflow 3.x. If the user is on Airflow 2.x, adjust imports accordingly (see Appendix A). > > **Reference**: Latest stable: https://pypi.org/project/astronomer-cosmos/ - Network accessline 12
> **Reference**: Latest stable: https://pypi.org/project/astronomer-cosmos/ - Network accessline 384
Reference: https://astronomer.github.io/astronomer-cosmos/configuration/caching.html - Network accessline 448
Reference: https://astronomer.github.io/astronomer-cosmos/configuration/hosting-docs.html
skills/cosmos-dbt-core/reference/cosmos-config.md
- Network accessline 83
Reference: https://astronomer.github.io/astronomer-cosmos/getting_started/watcher-execution-mode.html - Network accessline 145
Reference: https://astronomer.github.io/astronomer-cosmos/getting_started/async-execution-mode.html - Network accessline 185
Full list: https://astronomer.github.io/astronomer-cosmos/profiles/index.html
skills/cosmos-dbt-fusion/SKILL.md
- Network accessline 20
| No async | `AIRFLOW_ASYNC` not supported | | No virtualenv | Fusion is a binary, not a Python package | | Warehouse support | Snowflake, Databricks, Bigquery and Redshift support [while in preview](https://github.com/dbt-labs/dbt-fusion) - Network accessline 22
| Warehouse support | Snowflake, Databricks, Bigquery and Redshift support [while in preview](https://github.com/dbt-labs/dbt-fusion) | - Network accessline 51
USER root RUN apt-get update && apt-get install -y curl ENV SHELL=/bin/bash - Network accessline 52
RUN apt-get update && apt-get install -y curl ENV SHELL=/bin/bash RUN curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update - Network accessline 53
ENV SHELL=/bin/bash RUN curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update USER astro - Dangerous shell operationline 54
RUN curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update - Network accessline 54
RUN curl -fsSL https://public.cdn.getdbt.com/fs/install/install.sh | sh -s -- --update - Network accessline 241
- Cosmos dbt Fusion docs: https://astronomer.github.io/astronomer-cosmos/configuration/dbt-fusion.html - Network accessline 242
- dbt Fusion install: https://docs.getdbt.com/docs/core/pip-install#dbt-fusion
skills/creating-openlineage-extractors/SKILL.md
- Network accessline 10
> **Reference:** See the [OpenLineage provider developer guide](https://airflow.apache.org/docs/apache-airflow-providers-openlineage/stable/guides/developer.html) for the latest patterns and list of supported operators/hooks.
skills/dag-factory/SKILL.md
- Network accessline 9
> **Package**: `dag-factory` on PyPI > **Repo**: https://github.com/astronomer/dag-factory - Network accessline 10
> **Repo**: https://github.com/astronomer/dag-factory - Network accessline 11
> **Docs**: https://astronomer.github.io/dag-factory/latest/ - Network accessline 494
- GitHub: https://github.com/astronomer/dag-factory - Network accessline 495
- Docs: https://astronomer.github.io/dag-factory/latest/ - Network accessline 496
- PyPI: https://pypi.org/project/dag-factory/ - Network accessline 497
- Migration Guide: https://astronomer.github.io/dag-factory/latest/migration_guide/
skills/dag-factory/reference/migration.md
- Network accessline 50
- Official migration guide: https://astronomer.github.io/dag-factory/latest/migration_guide/
skills/debugging-dags/SKILL.md
- Network accessline 80
curl -s https://pypi.org/pypi/<pkg>/json | jq '.releases | to_entries | map({version: .key, uploaded: .value[0].upload_time}) | sort_by(.uploaded) | reverse | .[:5]' - Network accessline 90
- **Deployment activity log**: Check the Astro UI for recent deploys — a failed deploy or recent code change is often the cause of sudden failures - **Astro alerts**: Configure alerts in the Astro UI for proactive failure monitoring (DAG fa - Network accessline 92
- **Observability**: Use the Astro [observability dashboard](https://www.astronomer.io/docs/astro/airflow-alerts) to track DAG health trends and spot recurring issues
skills/delegating-to-otto/SKILL.md
- Network accessline 8
[Otto](https://www.astronomer.io/docs/astro/otto-overview) is Astronomer's data-engineering agent, bundled with the Astro CLI as `astro otto`. This skill is for driving Otto **as a sub-agent** from the CLI — not for using Otto interactively - Access to secretsline 125
[Credential-related source omitted] - Network accessline 251
For full reference see [Otto settings](https://www.astronomer.io/docs/astro/otto-settings). - Network accessline 267
- `astro otto --help` — flag reference (source of truth) - [Otto overview](https://www.astronomer.io/docs/astro/otto-overview) - Network accessline 268
- [Otto overview](https://www.astronomer.io/docs/astro/otto-overview) - Network accessline 269
- [`astro otto` CLI reference](https://www.astronomer.io/docs/astro/cli/astro-otto) - Network accessline 270
- [Otto permissions](https://www.astronomer.io/docs/astro/otto-permissions) - Network accessline 271
- [Otto extensions](https://www.astronomer.io/docs/astro/otto-extensions) - Network accessline 272
- [Otto settings](https://www.astronomer.io/docs/astro/otto-settings) - Network accessline 273
- [Otto memory](https://www.astronomer.io/docs/astro/otto-memory)
skills/deploying-airflow/SKILL.md
- Network accessline 89
- [Astro Deploy Documentation](https://www.astronomer.io/docs/astro/deploy-code) - Network accessline 107
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml' - Network accessline 179
- "8080:8080" healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8080/health"] - Network accessline 180
healthcheck: test: ["CMD", "curl", "--fail", "http://localhost:8080/health"] interval: 30s - Network accessline 181
test: ["CMD", "curl", "--fail", "http://localhost:8080/health"] - Network accessline 286
# Add the Airflow Helm repo helm repo add apache-airflow https://airflow.apache.org - Network accessline 287
helm repo add apache-airflow https://airflow.apache.org - Network accessline 314
gitSync: enabled: true repo: https://github.com/your-org/your-dags.git - Network accessline 315
enabled: true repo: https://github.com/your-org/your-dags.git branch: main - Network accessline 316
repo: https://github.com/your-org/your-dags.git
skills/deploying-java-sdk-bundles/SKILL.md
- Network accessline 152
maven { name = "apacheSnapshots" url = "https://repository.apache.org/content/repositories/snapshots/" - Network accessline 153
name = "apacheSnapshots" url = "https://repository.apache.org/content/repositories/snapshots/" mavenContent { snapshotsOnly() } - Network accessline 154
url = "https://repository.apache.org/content/repositories/snapshots/" - Dangerous shell operationline 186
RUN apt-get update && apt-get install -y --no-install-recommends default-jre-headless && apt-get clean && rm -rf /var/lib/apt/lists/* - Dangerous shell operationline 188
&& apt-get clean && rm -rf /var/lib/apt/lists/* - Dangerous shell operationline 206
RUN apt-get update && apt-get install -y --no-install-recommends default-jre-headless && apt-get clean && rm -rf /var/lib/apt/lists/* - Dangerous shell operationline 208
&& apt-get clean && rm -rf /var/lib/apt/lists/*
skills/managing-astro-local-env/SKILL.md
- Network accessline 20
# Start local Airflow (webserver at http://localhost:8080) - Network accessline 92
Each project gets a hostname like `<project-name>.localhost:6563`. Visit `http://localhost:6563` to see all active projects. - Network accessline 179
| `--paginate` | Fetch all pages | | `-X` / `--method` | Override HTTP method | | `--generate` | Output curl command instead of executing | - Network accessline 181
| `--generate` | Output curl command instead of executing |
skills/migrating-ai-sdk-to-common-ai/SKILL.md
- Network accessline 87
[Credential-related source omitted] - Network accessline 88
[Credential-related source omitted] - Network accessline 89
"host": "https://my-endpoint.com/v1", - Network accessline 327
[Credential-related source omitted] - Network accessline 328
[Credential-related source omitted] - Network accessline 329
host: https://my-endpoint.com/v1 - Access to secretsline 341
[Credential-related source omitted] - Access to secretsline 345
[Credential-related source omitted]
skills/migrating-airflow-2-to-3/SKILL.md
- Network accessline 16
**Important**: Before migrating to Airflow 3, strongly recommend upgrading to Airflow 2.11 first, then to at least Airflow 3.0.11 (ideally directly to 3.1). Other upgrade paths would make rollbacks impossible. See: https://www.astronomer.io - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Network accessline 102
@task def list_dags_via_api() -> None: response = requests.get( - Network accessline 103
def list_dags_via_api() -> None: response = requests.get( f"{_HOST}/api/v2/dags", - Network accessline 104
response = requests.get( - Network accessline 190
- [Astronomer Airflow 3 Upgrade Guide](https://www.astronomer.io/docs/astro/airflow3/upgrade-af3) - Network accessline 191
- [Airflow 3 Release Notes](https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html) - Network accessline 192
- [Ruff Airflow Rules](https://docs.astral.sh/ruff/rules/#airflow-air)
skills/migrating-airflow-2-to-3/reference/config-changes.md
- Access to secretsline 3
[Credential-related source omitted]
skills/migrating-airflow-2-to-3/reference/migration-patterns.md
- Network accessline 129
**Astro users**: Consider [Astro Alerts](https://www.astronomer.io/docs/astro/alerts) for critical notifications (works independently of Airflow components). - Network accessline 241
- **SequentialExecutor** removed — use `LocalExecutor` instead (can use SQLite for local dev). - **CeleryKubernetesExecutor** removed — use [Multiple Executor Configuration](https://airflow.apache.org/docs/apache-airflow/stable/core-concept - Network accessline 242
- **CeleryKubernetesExecutor** removed — use [Multiple Executor Configuration](https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/index.html) instead. - Network accessline 324
Reference: https://www.astronomer.io/docs/learn/custom-xcom-backend-strategies
skills/migrating-dagster-to-airflow/reference/dbt.md
- Network accessline 15
Target: Airflow 3.x on Astro Runtime, `astronomer-cosmos` >= 1.15. Verify every Cosmos symbol against [the Cosmos docs](https://astronomer.github.io/astronomer-cosmos) - Network accessline 16
Cosmos symbol against [the Cosmos docs](https://astronomer.github.io/astronomer-cosmos) - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 219
[Credential-related source omitted] - Network accessline 492
Sources: [Cosmos configuration](https://astronomer.github.io/astronomer-cosmos/configuration/index.html), [RenderConfig select/exclude](https://astronomer.github.io/astronomer-cosmos/configuration/selecting-excluding.html), [ProfileConfig /
skills/migrating-dagster-to-airflow/reference/io-and-data-passing.md
- Access to secretsline 94
[Credential-related source omitted]
skills/migrating-dagster-to-airflow/scripts/inventory.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/migrating-dagster-to-airflow/scripts/status.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/migrating-dagster-to-airflow/scripts/tests/conftest.py
skills/migrating-dagster-to-airflow/scripts/tests/test_inventory.py
- Executable scriptline 1
Executable file
skills/migrating-dagster-to-airflow/scripts/tests/test_merge.py
- Executable scriptline 1
Executable file
skills/migrating-dagster-to-airflow/scripts/tests/test_status.py
- Executable scriptline 1
Executable file
skills/migrating-dagster-to-airflow/scripts/tests/test_validate_dag.py
- Executable scriptline 1
Executable file
skills/migrating-dagster-to-airflow/scripts/uv.lock
- Network accessline 10
name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } - Network accessline 11
version = "0.4.6" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb - Network accessline 12
source = { registry = "https://pypi.org/simple" } - Network accessline 13
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 276 - Network accessline 14
wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57a - Network accessline 15
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size - Network accessline 19
name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } - Network accessline 20
version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - Network accessline 21
source = { registry = "https://pypi.org/simple" } - Network accessline 23
{ name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha - Network accessline 24
] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", si - Network accessline 25
sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size - Network accessline 26
wheels = [ { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577 - Network accessline 27
{ url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", si - Network accessline 31
name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } - Network accessline 32
version = "2.1.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - Network accessline 33
source = { registry = "https://pypi.org/simple" } - Network accessline 35
"python_full_version < '3.10'", ] sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f00 - Network accessline 36
] sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = - Network accessline 37
sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 47 - Network accessline 38
wheels = [ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168 - Network accessline 39
{ url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = - Network accessline 43
name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } - Network accessline 44
version = "2.3.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - Network accessline 45
source = { registry = "https://pypi.org/simple" } - Network accessline 47
"python_full_version >= '3.10'", ] sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16f - Network accessline 48
] sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = - Network accessline 49
sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20 - Network accessline 50
wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53 - Network accessline 51
{ url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = - Network accessline 59
[package.optional-dependencies] test = [ { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - Network accessline 60
test = [ { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, ma - Network accessline 61
{ name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - Network accessline 62
{ name = "pytest", version = "9.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - Network accessline 70
name = "packaging" version = "26.2" source = { registry = "https://pypi.org/simple" } - Network accessline 71
version = "26.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3 - Network accessline 72
source = { registry = "https://pypi.org/simple" } - Network accessline 73
sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228 - Network accessline 74
wheels = [ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0 - Network accessline 75
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 1 - Network accessline 79
name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } - Network accessline 80
version = "1.6.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b762 - Network accessline 81
source = { registry = "https://pypi.org/simple" } - Network accessline 82
sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 - Network accessline 83
wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd47 - Network accessline 84
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 205 - Network accessline 88
name = "pygments" version = "2.20.0" source = { registry = "https://pypi.org/simple" } - Network accessline 89
version = "2.20.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd0 - Network accessline 90
source = { registry = "https://pypi.org/simple" } - Network accessline 91
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 49 - Network accessline 92
wheels = [ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946 - Network accessline 93
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = - Network accessline 97
name = "pytest" version = "8.4.2" source = { registry = "https://pypi.org/simple" } - Network accessline 98
version = "8.4.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - Network accessline 99
source = { registry = "https://pypi.org/simple" } - Network accessline 104
{ name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, { name = "iniconfig", version = "2.1.0", source = { registry = "https: - Network accessline 105
{ name = "exceptiongroup", marker = "python_full_version < '3.10'" }, { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "packaging", marke - Network accessline 106
{ name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - Network accessline 110
{ name = "tomli", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961 - Network accessline 111
] sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 151 - Network accessline 112
sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 15196 - Network accessline 113
wheels = [ { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e - Network accessline 114
{ url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365 - Network accessline 118
name = "pytest" version = "9.1.1" source = { registry = "https://pypi.org/simple" } - Network accessline 119
version = "9.1.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - Network accessline 120
source = { registry = "https://pypi.org/simple" } - Network accessline 125
{ name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, { name = "iniconfig", version = "2.3.0", source = { registry = "ht - Network accessline 126
{ name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "packaging", m - Network accessline 127
{ name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - Network accessline 131
{ name = "tomli", marker = "python_full_version == '3.10.*'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b4 - Network accessline 132
] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 163 - Network accessline 133
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 16363 - Network accessline 134
wheels = [ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f - Network accessline 135
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386 - Network accessline 139
name = "tomli" version = "2.4.1" source = { registry = "https://pypi.org/simple" } - Network accessline 140
version = "2.4.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b - Network accessline 141
source = { registry = "https://pypi.org/simple" } - Network accessline 142
sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, - Network accessline 143
wheels = [ { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b9 - Network accessline 144
{ url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d65228 - Network accessline 145
{ url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a - Network accessline 146
{ url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a57867 - Network accessline 147
{ url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0ba - Network accessline 148
{ url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56 - Network accessline 149
{ url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e519370 - Network accessline 150
{ url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = - Network accessline 151
{ url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", si - Network accessline 152
{ url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", si - Network accessline 153
{ url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba - Network accessline 154
{ url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487 - Network accessline 155
{ url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727e - Network accessline 156
{ url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1de - Network accessline 157
{ url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14 - Network accessline 158
{ url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94a - Network accessline 159
{ url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = - Network accessline 160
{ url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", si - Network accessline 161
{ url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", si - Network accessline 162
{ url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43b - Network accessline 163
{ url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e769 - Network accessline 164
{ url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9c - Network accessline 165
{ url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd - Network accessline 166
{ url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae1 - Network accessline 167
{ url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28 - Network accessline 168
{ url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = - Network accessline 169
{ url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", si - Network accessline 170
{ url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", si - Network accessline 171
{ url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc - Network accessline 172
{ url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a982 - Network accessline 173
{ url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc4 - Network accessline 174
{ url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef9 - Network accessline 175
{ url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef26122 - Network accessline 176
{ url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189f - Network accessline 177
{ url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = - Network accessline 178
{ url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", si - Network accessline 179
{ url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", si - Network accessline 180
{ url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc1 - Network accessline 181
{ url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4 - Network accessline 182
{ url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e - Network accessline 183
{ url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95 - Network accessline 184
{ url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb - Network accessline 185
{ url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572 - Network accessline 186
{ url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size - Network accessline 187
{ url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", s - Network accessline 188
{ url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", s - Network accessline 189
{ url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 1458 - Network accessline 193
name = "typing-extensions" version = "4.16.0" source = { registry = "https://pypi.org/simple" } - Network accessline 194
version = "4.16.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha25 - Network accessline 195
source = { registry = "https://pypi.org/simple" } - Network accessline 196
sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", - Network accessline 197
wheels = [ { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f3 - Network accessline 198
{ url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"
skills/migrating-dagster-to-airflow/scripts/validate_dag.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/setting-up-astro-project/SKILL.md
- Network accessline 63
RUN pip install --extra-index-url https://pypi.example.com/simple my-package
skills/troubleshooting-astro-deployments/SKILL.md
- Network accessline 237
astro deployment variable create --deployment-id <DEPLOYMENT_ID> \ --key API_ENDPOINT \ --value https://api.example.com - Network accessline 239
--value https://api.example.com - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 243
[Credential-related source omitted] - Access to secretsline 252
[Credential-related source omitted] - Access to secretsline 253
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 251 facts
- Network access in code of documentationairflow-adapter/patterns.md:70Low confidence
- Network access in code of documentationairflow-adapter/patterns.md:71Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-hitl/SKILL.md:142Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-hitl/SKILL.md:143Low confidence
- Network access in code of the SKILL.mdairflow-hitl/SKILL.md:146High confidence
- Network access in code of the SKILL.mdairflow-hitl/SKILL.md:147High confidence
- Network access in code of the SKILL.mdairflow-hitl/SKILL.md:149High confidence
- Network access in code of the SKILL.mdairflow-hitl/SKILL.md:150High confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:14Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:16Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:20Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:21Low confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:128High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:129High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:130High confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:137Low confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:163High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:164High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:199High confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:199Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:200Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:201Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:202Low confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:209High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:210High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:211High confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:217Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:240Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:272Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:306Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:349Low confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:398High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:399High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:400High confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:411Low confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:471High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:472High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:523High confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:523Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:524Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueairflow-plugins/SKILL.md:525Low confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:530High confidence
- Access to secrets in code of the SKILL.mdairflow-plugins/SKILL.md:530High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:531High confidence
- Network access in code of the SKILL.mdairflow-plugins/SKILL.md:550High confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:581Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:583Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:589Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:590Low confidence
- Network access in prose of the SKILL.mdairflow-plugins/SKILL.md:591Low confidence
and 201 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md astro-airflow-mcp/.claude/skills/airflow-adapter/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md astro-airflow-mcp/.claude/skills/airflow-adapter/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md astro-airflow-mcp/.claude/skills/airflow-adapter/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md astro-airflow-mcp/.claude/skills/airflow-adapter/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.