Agent Skills: PolicyEngine prior scores

|

analysisID: PolicyEngine/policyengine-claude/policyengine-prior-scores

Install this agent skill to your local

pnpm dlx add-skill https://github.com/PolicyEngine/policyengine-claude/tree/HEAD/skills/policyengine-prior-scores

Skill Files

Browse the full folder contents for policyengine-prior-scores.

Download Skill

Loading file tree…

skills/policyengine-prior-scores/SKILL.md

Skill Metadata

Name
policyengine-prior-scores
Description
|

PolicyEngine prior scores

Finding a prior score to anchor a new analysis has two parts: a curated anchor list of notable PE reforms (below, with URLs) and the real infrastructure in this repo that enumerates presets, external scorekeepers, and local archived runs. Earlier versions of this skill described a data/prior-scores.json file with get_priors_by_program() query functions — those never existed. The sections below point only at things that are actually on disk or live.

When to use

  • /analyze-policy Stage 3 (find prior scores) and Stage 5 (compare the microsim to them).
  • The /prior-scores command (external-benchmark research without running the microsim).
  • The prior-scores-finder agent's Tier-1 lookup.
  • Writing a research post and citing PE's prior work on a similar reform.

Real infrastructure in this repo

Presets — named reform-dicts with published scores

presets/reforms/*.yaml and presets/baselines/*.yaml are callable-by-name reform/baseline dicts. A preset may carry a published_scores block recording what external sources scored that exact shape — which is what makes external corroboration turn-key.

python3 scripts/presets.py list                 # all presets
python3 scripts/presets.py list --category reform --country us
python3 scripts/presets.py show arpa-ctc-restoration   # prints the reform_dict + published_scores
from scripts.presets import load_preset
preset = load_preset("arpa-ctc-restoration")
preset["reform_dict"]        # ready to pass as a reform
preset["published_scores"]   # [{source: JCT, ten_year_billion: 1100, ...}, ...]

Presets on disk today (verify with python3 scripts/presets.py list — load_preset raises on names that don't exist): reforms arpa-ctc-restoration, obbba-salt-bump; baseline tcja-extension. A pre-obbba baseline is wanted but not yet authored. Add a preset by copying a nearby file and, if any external source scored the shape, filling in published_scores — see presets/README.md.

Scorekeepers — the external-benchmark registry

presets/scorekeepers.yaml enumerates the official fiscal offices (Tier 2) and think-tanks (Tier 3) to consult per jurisdiction and domain — so the search casts a wide, non-US-only net without hardcoding sources into agents. Add a scorekeeper by appending to the YAML; no code change.

python3 scripts/scorekeepers.py list --country us --tier 2   # JCT, CBO, OTA, SSA-OCACT
python3 scripts/scorekeepers.py list --country us --tier 3   # CRFB, TPC, Tax Foundation, CBPP, ITEP, ...
python3 scripts/scorekeepers.py list --country uk --tier 3   # IFS, Resolution Foundation, IPPR, NIESR, ...
python3 scripts/scorekeepers.py list --country ca            # PBO, DoF-Canada, CD Howe, IRPP, ...
from scripts.scorekeepers import list_scorekeepers
tier_2 = list_scorekeepers(country="us", tier=2)

Each entry has search_hints (e.g. site:crfb.org) for constructing WebSearch queries, plus domains and caveats.

Command and agent

  • /prior-scores (targets/claude/commands/prior-scores.md) — standalone external-benchmark research: loads the scorekeepers registry filtered by country/tier/domain, also consults the local analyses/ archive (Tier 0, via scripts/analyses_kb.py) and PE published research (Tier 1, this skill), and returns a ranked benchmark cluster. It does NOT run the microsim.
  • prior-scores-finder (targets/claude/agents/prior-scores-finder.md) — the agent behind Stage 3. It runs BLIND to the current run's own microsim result (pre-registration), records each source with its framing at registration time, and requires all tiers: Tier 0 (local archive), Tier 1 (PE published — this skill), Tier 2 (official), Tier 3 (think-tanks). A PE prior does not excuse skipping the external tiers.

Curated anchor reforms

Notable PE-published scores, kept as quick anchors. Verify the live number before quoting — these are pointers, not a maintained database. Confirm current figures with the search recipe below.

Federal CTC

  • Restoration of the ARPA expanded CTC — policyengine.org/us/research/restoration-of-the-american-rescue-plan-acts-expanded-child-tax-credit — ~$100.2B/yr (2023), child poverty −37%, Gini −1.9%. ARPA parameters ($3,600 / $3,000, fully refundable). Preset: arpa-ctc-restoration.
  • 2025 American Family Act — policyengine.org/us/research/american-family-act-2025 — ~$2.5T/10yr, child poverty −25.2%, deep child poverty −29.9%. Larger amounts + baby bonus + ITIN eligibility.

Federal EITC

  • Restoring the ARPA EITC — single-year ~$9.8B. Childless-adult expansion (max credit ~tripled, age limits widened).
  • NY Working Families Tax Credit (state, EITC-adjacent) — ~$9.1B over 5 years; child poverty −4.0% rising to −16.8% by year 4.

SALT cap

  • Ways and Means SALT cap ($30k cap, phasedown above $400k AGI) — policyengine.org/us/research/ways-and-means-salt-cap — +$937B/10yr revenue; top decile +$4,405/yr; 5.2% of residents net-reduced; Gini −0.4%.
  • SALTernative tool — policyengine.org/us/salternative — interactive; CBO behavioral elasticities.

State CTC

  • RI Gov McKee $325 CTC — policyengine.org/us/research/ri-governor-mckee-child-tax-credit — ~$36.7M/yr, child poverty −2.1%, TY 2027.
  • NYC $300 CTC (S2238) — policyengine.org/us/research/nyc-ctc-s2238 — ~$333.8M/yr, child poverty −2.0%.
  • NY WFTC up to $1,822/child — ~$660M year 1, $3.1B fully phased in, child poverty −4.0% year 1.
  • MN HF1938 (Walz) — policyengine.org/us/research/mn-hf1938-walz.

UK

  • Spring/Autumn Statement analyses, Universal Credit reforms — policyengine.org/uk/research.

Comparability caveats (surface every time)

A magnitude without its frame is not a benchmark. Whenever you cite a prior score, state:

  • Baseline frame — what the estimate is measured against (prior-law schedule, current law, year-over-year vs an already-scheduled rate, repeal counterfactual). Two scores of "the same" reform against different baselines are not comparable. This is the most commonly missed caveat.
  • Horizon — single-year (which year?), budget-window (which window?), or full-implementation. Never compare a single-year score directly to a 10-year run.
  • Year of analysis — costs drift roughly 3-4%/yr from uprating and caseload growth; an older single-year score needs extrapolation before it brackets a current run.
  • Dataset vintage — magnitudes shift across microdata versions. Older PolicyEngine scores predate Microcosm and were computed on earlier enhanced-survey datasets; do not treat their absolute levels as directly comparable to a current Microcosm run (see policyengine-data).
  • Static vs dynamic — most PE scores are static; a dynamic score adds behavioral response.
  • Scope — which provisions the estimate includes/excludes.

If any of these cannot be determined from the source, record it as unknown rather than guessing — the comparator treats unknown-frame sources as incommensurable.

Live search recipe

For scores not in the anchor list or presets, search directly:

  1. site:policyengine.org/{country}/research <reform_keywords> — the primary index.
  2. site:policyengine.org <reform_keywords> — catches dedicated calculators/tools.
  3. WebFetch policyengine.org/{country}/research — browse the research index directly.
  4. blog.policyengine.org <reform_keywords> — narrative posts (Medium redirects may need a fallback fetch).

Extract for each hit: reform name + URL, year, single-year and/or 10-year cost, distributional impact (Gini, top-decile share), poverty impact (overall + child), and the methodology frame from the caveats above.

Related skills

  • policyengine-research-lookup — broader blog/post discovery beyond scored reforms.
  • policyengine — actually running the microsim to compare against these anchors.
  • policyengine-calibration-diagnostics — when a new run mismatches a prior, diagnose why.