Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/apache/airflow/agents-mdgit clone --depth 1 https://github.com/apache/airflowWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.08457 | $0.08457 |
| Opus 5 | $0.04228 | $0.04228 |
| Sonnet 5 | $0.01691 | $0.01691 |
| Haiku 4.5 | $0.00846 | $0.00846 |
Grade A, and why
airflow AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 523 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AGENTS instructions
Naming
Write Dag (title case) in all prose. Keep the all-caps or lowercase spelling only when reproducing a literal code token — never rewrite these, even inside fenced code blocks:
- Python: the SDK class
DAG(from airflow.sdk import DAG,dag = DAG("my_dag", ...)); identifiers likedag_id,dag,my_dag. - CLI:
airflow dags list,airflow dags test, etc. - Paths and config keys:
dag_processing/,dagprocessor,get_dag, etc. - Anti-pattern quotes that show the wrong form to teach the rule itself
(e.g.,
Use "DAG" — always write "Dag").
Don't spell out Directed Acyclic Graph except for historical context.
Environment Setup
- Install prek:
uv tool install prek - Enable commit hooks:
prek install - Install breeze shim (one-time, per machine):
scripts/tools/setup_breeze— installs~/.local/bin/breezethat runs breeze viauvxfrom the current git worktree'sdev/breeze(so each worktree, including ephemeral agent worktrees, gets its own breeze tied to its sources). See ADR 0017. - Never run pytest, python, or airflow commands directly on the host — always use
breeze. - Place temporary scripts in
dev/(mounted as/opt/airflow/dev/inside Breeze).
Commands
<PROJECT> is folder where pyproject.toml of the package you want to test is located. For example, airflow-core or providers/amazon.
<target_branch> is the branch the PR will be merged into — usually main, but could be v3-1-test when creating a PR for the 3.1 branch.
- Run a single test:
uv run --project <PROJECT> pytest path/to/test.py::TestClass::test_method -xvs - Run a test file:
uv run --project <PROJECT> pytest path/to/test.py -xvs - Run all tests in package:
uv run --project <PROJECT> pytest path/to/package -xvs - If uv tests fail with missing system dependencies, run the tests with breeze:
breeze run pytest <tests> -xvs - Run a Python script:
uv run --project <PROJECT> python dev/my_script.py - Run core or provider tests suite in parallel:
breeze testing <test_group> --run-in-parallel(test groups:core-tests,providers-tests) - Run core or provider db tests suite in parallel:
breeze testing <test_group> --run-db-tests-only --run-in-parallel(test groups:core-tests,providers-tests) - Run core or provider non-db tests suite in parallel:
breeze testing <test_group> --skip-db-tests --use-xdist(test groups:core-tests,providers-tests) - Run single provider complete test suite:
breeze testing providers-tests --test-type "Providers[PROVIDERS_LIST]"(e.g.,Providers[google]orProviders[amazon]or "Providers[amazon,google]") - Run Helm tests in parallel with xdist
breeze testing helm-tests --use-xdist - Run Helm tests with specific K8s version:
breeze testing helm-tests --use-xdist --kubernetes-version 1.35.0 - Run specific Helm test type:
breeze testing helm-tests --use-xdist --test-type <type>(types:airflow_aux,airflow_core,apiserver,dagprocessor,other,redis,security,statsd,webserver) - Run other suites of tests
breeze testing <test_group>(test groups:airflow-ctl-tests,docker-compose-tests,task-sdk-tests) - Run scripts tests:
uv run --project scripts pytest scripts/tests/ -xvs - Run Airflow CLI:
breeze run airflow dags list - Type-check (non-providers): run the prek hook —
prek run mypy-<project> --all-files(e.g.mypy-airflow-core,mypy-task-sdk,mypy-shared-logging; eachshared/<dist>workspace member has its ownmypy-shared-<dist>hook). The hook uses a dedicated virtualenv and mypy cache under.build/mypy-venvs/<hook>/and.build/mypy-caches/<hook>/; mypy itself is installed fromuv.lockvia themypydependency group (uv sync --group mypy), so it never mutates your project.venv. The hook prefersuvfrom the project's main.venv/bin/uv(installed byuv sync—uvis part of thedevdependency group via theallextras) for a project-pinned uv version; it falls back touvon$PATHwith a warning if that binary is missing. Clear withbreeze down --cleanup-mypy-cache. - Type-check (providers):
breeze run mypy path/to/code - Lint with ruff only:
prek run ruff --from-ref <target_branch> - Format with ruff only:
prek run ruff-format --from-ref <target_branch> - Run regular (fast) static checks:
prek run --from-ref <target_branch> --stage pre-commit - Run manual (slower) checks:
prek run --from-ref <target_branch> --stage manual --skip compile-ui-assets-dev --skip view-skill-eval --skip run-skill-eval-codex(the skipped hooks start long-running local servers or provision the opt-in Codex environment rather than run checks that complete) - Build docs:
breeze build-docs - Determine which tests to run based on changed files:
breeze ci selective-check --commit-ref <commit_with_squashed_changes>
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 523 lines · 8,457 tokens per session scan A ed42557a0301
airflow AGENTS.md is an instructions file published in the GitHub repository apache/airflow (46,647 stars, last pushed yesterday), licensed Apache-2.0. It adds 8,457 tokens to every session, about $0.0423 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other instructions, from other repositories
dagster CLAUDE.md
Instructions for dagster-io/dagster, covering dagster development guide, quick references, environment setup, essential commands and code quality - run after every python edit.
apache-airflow-mcp-server AGENTS.md
Instructions for madamak/apache-airflow-mcp-server, covering agents.md, project layout, development workflow, core design principles and tooling contracts and annotations.
redhat-ai-workflow AGENTS.md
Instructions for dmzoneill/redhat-ai-workflow, covering ai workflow assistant, your role, how this system works, key principles and critical: skill-first behavior.
airflow-mcp-server AGENTS.md
Instructions for abhishekbhakat/airflow-mcp-server, covering airflow mcp — agent ramp-up guide, mission, high-level architecture, airflow-mcp-server (cli app) and airflow-mcp-plugin (airflow webserver mount).
astro-airflow-mcp AGENTS.md
Instructions for astronomer/astro-airflow-mcp, covering agent guidelines for astro-airflow-mcp, architecture, code conventions, http client and good.
astro-airflow-mcp CLAUDE.md
Instructions for astronomer/astro-airflow-mcp, a project described as: MCP server for Apache Airflow instances. Runs standalone or as an Airflow plugin.