Version 12.2 · A 21-skill framework — 19 current pipeline skills plus 2 superseded-but-still-shipped ones — for agent-driven data construction, empirical research, and reproducible publication, designed so the outputs reproduce without agents.
The framework covers the full lifecycle, orchestrated by anu-build:
- Researching source materials (mining quotes, methodology, footnotes)
- Ingesting data into a registry-driven structure with full provenance
- Extending historical series with modern API data under strict faithfulness rules
- Producing machine-readable CSVs and human-readable Excel workbooks
- Building self-contained replication packages
- Visualizing results interactively
- Auditing quality across 14 dimensions with two hard gates
- Distributing through three sibling channels: GitHub repo (
anu-publish), Google Drive package (anu-drive), audit-grade archive (anu-archive) - Orchestrating the whole pipeline with
anu-build(9 stages, computed construction order, mandatory gates, multi-agent handoff cascade)
The framework is self-auditing: anu-doctor checks framework invariants across
all skills, and CI runs those checks on every push and pull request.
They pass, with no exemptions — see Current self-audit state.
See docs/SKILL_VERSION_MATRIX.md for the
authoritative table, or docs/ANU_FRAMEWORK_OVERVIEW.md
for the full architecture write-up.
| Stage | Skill | What it does |
|---|---|---|
| 1 | anu-research |
Mine the Knowledge Base for every quote, footnote, methodology note |
| 2 | anu-adequacy |
Post-research readiness gate |
| 3 | anu-ingestion |
Build series_registry.json, decompose series, write DPRs |
| 4 | anu-extension |
Faithful data extension methodology (EPRs) |
| 5 | anu-scaffold |
Generate L01/P02/V03 stubs from registry |
| 5 | anu-replicator |
Self-contained L##/P##/V##/M## reproduction package |
| 6a | anu-chopped |
Machine-readable CSV format |
| 6b | anu-extenbook |
Human-readable Excel workbook (4 sheets) |
| 7 | anu-visualize |
Interactive Plotly Dash / R Shiny app |
| 8a | anu-publish |
GitHub replication channel + web export contract |
| 8b | anu-drive |
Google Drive consumer package |
| 8c | anu-archive |
Audit-grade transparency archive |
| Float | anu-review |
14-dimension quality audit (D1–D12 weighted + D13/D14 gates) |
| Float | anu-docs |
Per-series documentation (T1/T2/T3 tiers) + the Anu Explainer |
| Float | anu-variant |
Methodology variant tracking |
| Infra | anu-ledger |
Artifact inventory |
| Infra | anu-architecture |
8-phase econometric research scaffold (also available standalone on GitHub) |
| Infra | anu-doctor |
Framework + project self-audit |
| Orch | anu-build |
Orchestrator — plans, tracks and gates a 9-stage build + documentation cascade (it does not execute stage work; agents do) |
Superseded (2, still shipped in full):
anu-pipeline and anu-rebuild
were merged into anu-build in v12.0. They are not redirect stubs — both
still ship complete instructions, seven templates between them, and anu-doctor
holds all 21 skills to the same 11-section template. They are kept because
reducing them to stubs would delete the most detailed pipeline-stage tables and
the only end-to-end rebuild runbook the framework has, and anu-build restates
neither. Each now opens with a superseded banner pointing at anu-build, and
anu-ledger no longer declares requires: anu-pipeline. Prefer anu-build.
Recorded in docs/SKILL_VERSION_MATRIX.md.
- No synthetic data. Every value traces to a real source. If unavailable,
the series is
data_unavailable— never filled.np.randomin a data construction script is always wrong. - No proxies without justification. CPI is not PPI. Earnings is not
compensation. Concept substitutions are documented in the registry with
"proxy": trueand a written justification. - No lazy splices on derived quantities. If the original used a formula, the extension must compute the same formula with new component data — not growth-rate splice the result.
- Reproducibility without agents. A researcher clones the package, sets
API keys, runs
python replicate.py, gets validated output with full SHA-256 audit trail. - Audit trail everywhere. Every transformation, parameter choice, and model run is logged in structured JSON. Manual adjustments require a five-field audit manifest.
Full statement: docs/ANU_FRAMEWORK_OVERVIEW.md.
The Shaikh & Tonak (1994) replication built the framework: 64 series, 100% PASS, three distribution channels, 21 commits. The 12 friction points surfaced during that build drove the v11.0 absorption.
A minimal worked example ships at
examples/mini-replication/.
The two self-audit checkers are stdlib-only and need nothing. The packaging and variant generators need six third-party packages:
python -m pip install -r requirements.txtLower bounds only — nothing is pinned. See requirements.txt for which script
needs which package.
The framework ships no keys and reads none from any tracked file. Provide
your own via the environment; copy .env.example to .env
(git-ignored) or export them in your shell.
| Variable | What for | Where to get it |
|---|---|---|
FRED_API_KEY |
ALFRED/FRED vintage downloads in anu-variant (vintage_downloader.py, which also accepts --api-key and warns-and-continues if unset) |
Free, instant: https://fred.stlouisfed.org/docs/api/api_key.html |
ANU_SCRUB_PATTERNS |
Optional. Path to your private scrub deny-list overlay for anu-publish/audit.py |
You write it — see skills/anu-publish/scrub_patterns.json |
No other key is read by any shipped script. If a project's L## loader needs a
BEA or BLS key, that key belongs to the project, not to the framework.
The skills are designed to be invoked by an AI agent (Claude Code, Cursor,
GLM, etc.) via slash commands or direct skill invocation. Each SKILL.md
declares its frontmatter (name, version, requires, argument-hint)
and prescribes its sub-commands.
For human use:
- Read
docs/GETTING_STARTED.md. - Set up a project with
anu-architecture(or, for the standalone version, clone github.com/andenick/anu-architecture andpip install -e .— it is not on PyPI). - Use
anu-research→anu-adequacy→anu-ingestion→anu-extension→anu-replicatorto construct data. - Use
anu-reviewto audit quality. - Use
anu-publish/anu-drive/anu-archiveto distribute.
python tools/check_framework.py # framework invariants (D01-D19)
python tools/audit_publish.py --strict # pre-publication scrub audit
python skills/anu-publish/audit.py --self-test # prove the scrub gate is armed
python tools/generate_skill_graph.py --check # prove the skill graph matches frontmatterThe D##-checks verify version consistency across the matrix/overview/frontmatter triangle, requires-graph acyclicity, headline-version match, evolution-log presence, canonical-doc existence, stage-map coherence, and stale-version-string detection. CI runs the first two on every push and pull request.
tools/check_framework.py exits 0 on main: 0 failures, 0 warnings, across
all 19 checks and all 21 skills. There are no exemptions — nothing is
skipped, ignored or excluded to reach that result. What closed the last of it,
in July 2026:
| Check | Was | Now |
|---|---|---|
| D16 | 15 skills missing v12.0 template sections | Sections written for all 15 — real documentation work, summarizing what each SKILL.md already specified. Where a section genuinely did not apply, it says so and why, rather than being padded. |
| D17 | docs/schemas/skill_graph.json not in this repository |
Shipped, and generated from the requires: frontmatter by tools/generate_skill_graph.py (--check fails if it drifts). Nothing in it is authored by hand. |
| D18 | docs/schemas/anu_build_manifest.schema.json not in this repository |
Shipped. It describes the manifest anu-build init actually writes, and a generated manifest validates against it. |
| D19 | Same missing Stage Position sections as D16 |
Every skill carries a stage tag agreeing with anu-build's canonical stage table. |
| D10 | (false negative) | The check resolved script claims against the skill root only, so scripts shipped under scripts/ read as missing. Fixed in anu-doctor v2.4. |
tools/audit_publish.py --strict reports clean, and it is clean because
there is nothing left to find, not because anything is exempted:
- This repository ships no
.publish_ignore. It previously shipped one that exempted eleven files — including every file that carried a leak. It was deleted, not shortened. - The only exemption in force is the structural one
audit.pyhard-codes for itself and its own deny-list, which necessarily contain matching patterns (seedocs/GATE_DESIGN.md§6(b)). python skills/anu-publish/audit.py --self-testproves the deny-list is still armed: 5 patterns, 5 positive and 4 negative fixtures. A gate that cannot fail is not a gate (§6(c)).
If a future change makes a check fail and the finding will not be fixed, the
rule is an exemption recorded per docs/GATE_DESIGN.md
§6(a) — a committed line carrying a reason, an owner and a review-by date,
arguable in the diff. Never a silent skip. A gate carrying standing failures
teaches people to ignore it; so does a green one that was bought by exclusion.
anu-architectureis also available as a standalone repo: github.com/andenick/anu-architecture.git cloneit andpip install -e .to get theanu-architectureCLI without adopting the full framework. (Not currently on PyPI.)
MIT. See LICENSE.
If you use the framework in academic work:
@software{anu_framework_2026,
title = {Anu Framework: agent-driven data construction and reproducible
publication},
author = {Anu Framework contributors},
year = {2026},
url = {https://github.com/andenick/anu-framework},
version = {12.2.0}
}