К основному содержанию
скилл CX Codex

debugging-dags — скилл для Claude Code: разбор падений Airflow DAG

Ведёт агента по шагам от упавшей задачи Airflow до первопричины и плана, как такое не повторилось. Нужен, когда DAG не парсится или задача падает без явной причины.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add astronomer/agents --skill debugging-dags -a claude-code
Открыть на GitHub

Что делает debugging-dags

Скилл задаёт агенту порядок разбора: сначала найти упавший запуск, потом вытащить логи конкретной задачи и уже по ним искать исключение, а не верить первому экрану вывода. Ошибку он раскладывает по четырём категориям: данные, код, инфраструктура, зависимости. Дальше агент смотрит контекст — были ли свежие деплои, менялся ли объём данных, падала ли эта задача раньше.

Отдельный блок посвящён дрейфу зависимостей: код не менялся, а пакет обновился. Тогда агент сравнивает pip freeze в текущем и предыдущем образе, проверяет аргументы @task.virtualenv и похожих операторов, которые собирают окружение на каждый запуск, и смотрит даты релизов в индексе. Итог — не «задача упала», а конкретная причина с оценкой ущерба и немедленным исправлением.

Команды исходят из того, что af есть в PATH: его даёт astro otto или отдельная установка через uv tool install astro-airflow-mcp. На OSS Airflow без af шаги придётся проходить вручную через UI и логи задач. В описании скилла сказано прямо: для простого «покажи логи» есть скилл airflow, этот берут под глубокое расследование.

Какие задачи решает

  • найти первопричину упавшей задачи Airflow, а не только факт падения
  • разобрать ошибку импорта DAG, из-за которой он не виден в списке
  • поймать дрейф зависимостей после обновления пакета при неизменном коде
  • оценить, какие таблицы и отчёты не обновились из-за сбоя
  • дописать проверки данных, чтобы та же ошибка не вернулась

Примеры запросов агенту

  • DAG load_orders падает на задаче transform, разберись почему и почини
  • Мой DAG не импортируется, airflow dags list ругается на файл — найди ошибку
  • Задача падает после последнего деплоя, хотя код не менялся — проверь, не обновился ли пакет

Как установить debugging-dags

1Через Skills CLI (Vercel)

npx skills add astronomer/agents --skill debugging-dags -a claude-code

2Вручную: положить файлы

~/.claude/skills/debugging-dags/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/debugging-dags/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о debugging-dags

Как установить debugging-dags в Claude Code?

Выполните npx skills add astronomer/agents --skill debugging-dags -a claude-code, скилл окажется в ~/.claude/skills/debugging-dags/SKILL.md.

Что делает debugging-dags?

Проводит агента по шагам диагностики Airflow DAG: находит упавший запуск, читает логи задачи, определяет категорию ошибки и выдаёт первопричину, оценку влияния, быстрое исправление и меры профилактики.

Чем он отличается от скилла airflow?

Скилл airflow разбирает простые запросы вроде «почему упало, покажи логи». debugging-dags берут, когда нужно расследование с поиском корневой причины и разбором дрейфа зависимостей.

Исходный текст

SKILL.md · Apache-2.0
---
name: debugging-dags
description: 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.
---

# 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)
- If no run_id specified, run `af dags stats` to find recent failures

If no DAG was specified:
- Run `af health` to find recent failures across all DAGs
- Check for import errors with `af dags errors`
- Show DAGs with recent failures
- Ask which DAG to investigate further

## Step 2: Get the Error Details

Once you have identified a failed task:

1. **Get task logs** using `af tasks logs <dag_id> <dag_run_id> <task_id>`
2. **Look for the actual exception** - scroll past the Airflow boilerplate to find the real error
3. **Categorize the failure type**:
   - **Data issue**: Missing data, schema change, null values, constraint violation
   - **Code issue**: Bug, syntax error, import failure, type error
   - **Infrastructure issue**: Connection timeout, resource exhaustion, permission denied
   - **Dependency issue**: Upstream failure, external API down, rate limiting

## Step 3: Check Context

Gather additional context to understand WHY this happened:

1. **Recent changes**: Was there a code deploy? Check git history if available
2. **Package version changes**: Was a package upgraded — in the image, in a venv-style operator, or at the index? See [Package version changes](#package-version-changes) below.
3. **Data volume**: Did data volume spike? Run a quick count on source tables
4. **Upstream health**: Did upstream tasks succeed but produce unexpected data?
5. **Historical pattern**: Is this a recurring failure? Check if same task failed before
6. **Timing**: Did this fail at an unusual time? (resource contention, maintenance windows)

Use `af runs get <dag_id> <dag_run_id>` to compare the failed run against recent successful runs.

### Package version changes

A common cause of failures with no git activity is dependency drift — the user's code didn't change, but a package they depend on did. Check in this order:

1. **Worker image diff** (preferred when available). Every Astro deploy = new image tag, so the registry has a "before" and "after". Diff `pip freeze` between current and previous image — that's ground truth for what changed:
   ```
   docker run --rm <current_image> pip freeze > /tmp/now.txt
   docker run --rm <previous_image> pip freeze > /tmp/prev.txt
   diff /tmp/prev.txt /tmp/now.txt
   ```
   Also compare `docker run --rm <image> python --version` between the two — a Python minor-version bump (3.11 → 3.12, or even a patch) can break wheel compatibility even when `pip freeze` looks identical. `af config providers` lists currently installed provider versions, useful for cross-checking against modules named in the traceback.

2. **Venv-style operators bypass the worker image.** `@task.virtualenv`, `PythonVirtualenvOperator`, `ExternalPythonOperator`, and `KubernetesPodOperator` build their environment per task run, so an image diff won't catch failures inside them. If the failed task is one of these, read its `requirements` / `image` / `python_version` / `python` args directly:
   - Unbounded specifier (e.g. `pandas>=2.0.0` with no upper bound, or no specifier at all) → a new upstream release is the prime suspect.
   - `image="foo:latest"` or no tag → the image moved underneath you.
   - `python_version="3.11"` (on `@task.virtualenv` / `PythonVirtualenvOperator`) or a `python` path (on `ExternalPythonOperator`) resolving to a different interpreter than it used to — a Python minor-version change can break wheel compatibility for unchanged `requirements`. Same vector applies to the worker image itself if the base Python changed there.

   Fix is to pin: `pandas>=2.0.0,<3.0.0`, a lockfile, a specific image SHA, or a fully-qualified Python version (`python_version="3.11.7"` instead of `"3.11"`).

3. **Index lookup** when image diff isn't conclusive (no image history, or a venv-style operator). Identify the configured index first — it may not be PyPI:
   - Env vars: `UV_INDEX_URL`, `PIP_INDEX_URL`, `PIP_EXTRA_INDEX_URL`
   - `pyproject.toml` → `[[tool.uv.index]]`
   - `~/.pip/pip.conf`, `/etc/pip.conf`
   - `Dockerfile` `--index-url` flags

   Then query for releases of the suspect package since the first failure started. PyPI:
   ```
   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]'
   ```
   Private indexes usually expose the same `/pypi/<pkg>/json` shape; fall back to the Simple API (`/simple/<pkg>/`) or ask the user if neither works.

A release timestamp landing between the last green run and the first red run, for a package named in the traceback, is the answer.

### On Astro

If you're running on Astro, these additional tools can help with diagnosis:

- **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 failure, task duration, SLA miss)
- **Observability**: Use the Astro [observability dashboard](https://www.astronomer.io/docs/astro/airflow-alerts) to track DAG health trends and spot recurring issues

### On OSS Airflow

- **Airflow UI**: Use the DAGs page, Graph view, and task logs to inspect recent runs and failures

## Step 4: Provide Actionable Output

Structure your diagnosis as:

### Root Cause
What actually broke? Be specific - not "the task failed" but "the task failed because column X was null in 15% of rows when the code expected 0%".

### Impact Assessment
- What data is affected? Which tables didn't get updated?
- What downstream processes are blocked?
- Is this blocking production dashboards or reports?

### Immediate Fix
Specific steps to resolve RIGHT NOW:
1. If it's a data issue: SQL to fix or skip bad records
2. If it's a code issue: The exact code change needed
3. If it's infra: Who to contact or what to restart

### Prevention
How to prevent this from happening again:
- Add data quality checks?
- Add better error handling?
- Add alerting for edge cases?
- Update documentation?
- Pin dependencies (constraints file, lockfile, or upper-bound specifiers on venv/external/pod operators) to avoid silent upstream drift?

### Quick Commands
Provide ready-to-use commands:
- To clear and rerun the entire DAG run: `af runs clear <dag_id> <run_id>`
- To clear and rerun specific failed tasks: `af tasks clear <dag_id> <run_id> <task_ids> -D`
- To delete a stuck or unwanted run: `af runs delete <dag_id> <run_id>`

© astronomer · Apache-2.0 · astronomer/agents

Похожие скиллы

Все скиллы по теме «Данные и базы» →
xlsx официальный anthropics Работает с табличными файлами: создаёт, читает, правит и преобразует книги. Подходит, когда итогом должен стать файл Excel или другой табличный формат. 187 223установок google-agents-cli-observability официальный Google Помогает настроить трассировку и сбор данных о работе ИИ-агентов, включая агентов на ADK. Пригодится, когда нужно разбирать выполнение запросов или наблюдать за агентом после развёртывания. CX Codex +1 511 300установок caveman-evidence-review JuliusBrussee Скилл читает данные Caveman Cloud о расходах LLM, трассах и маршрутизации. Подходит для проверки того, куда уходит бюджет проекта. CX Codex +1 104 500установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок performance-optimization addyosmani Скилл для агентов ИИ-кодинга: сначала замеряет, потом чинит узкое место — от Core Web Vitals до N+1 запросов и индексов в базе. CX Codex +1 65 200установок supabase официальный supabase Скилл помогает настраивать базу данных, аутентификацию и RLS в Supabase без скрытых дыр в безопасности. CX Codex GP ChatGPT 8установок

Из того же набора24

airflow Скилл для работы с Apache Airflow через CLI af: список и запуск DAG, чтение логов задач, разбор ошибок импорта и парсинга. CX Codex +1 1 500установок analyzing-data Отвечает на бизнес-вопросы по данным: считает метрики, строит тренды, джойнит таблицы и кеширует найденные схемы. CX Codex +1 1 400установок managing-astro-local-env Управляет локальным окружением Airflow через Astro CLI в Docker и standalone-режимах. Помогает запускать сервисы, читать логи и слать запросы к Airflow API прямо из диалога с агентом. CX Codex +1 1 400установок testing-dags Гоняет Airflow DAG, ждёт завершения и разбирает падение по логам. Нужен, когда тест и починка идут циклами. CX Codex +1 1 200установок authoring-dags Помогает создавать и проверять DAG в Apache Airflow по шестиэтапному циклу. Пригодится при написании новых пайплайнов или добавлении задач в существующие графы. CX Codex +1 1 200установок setting-up-astro-project Скилл проводит агента через создание проекта Airflow на Astro CLI: структура каталогов, зависимости, подключения и переменные. CX Codex +1 1 100установок migrating-airflow-2-to-3 Помогает перевести код DAG с Airflow 2.x на 3.x: импорты, операторы, хуки, работа с метаданными. Пригодится, когда проект пора обновлять, а вручную искать все breaking changes лень. CX Codex +1 1 100установок checking-freshness Скилл смотрит, когда таблица обновлялась в последний раз, и говорит, можно ли на этих данных строить отчёт. CX Codex +1 1 000установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой