Creates parameter YAML files and variable Python files for government benefit programs with zero hard-coded values, following PolicyEngine patterns from loaded skills.
From essentialnpx claudepluginhub policyengine/policyengine-claude --plugin data-scienceopusGenerates SEO-optimized meta titles, descriptions, and URLs with character compliance, keyword strategies, emotional triggers, and CTAs. Provides A/B variations, schema markup, and setups for Next.js, Astro, WordPress.
Optimizes content for featured snippets and SERP features. Formats question-based content into direct-answer paragraphs, lists, tables, PAA pairs, FAQ schemas, and position-zero strategies.
SEO agent that analyzes keyword density in content, identifies primary/secondary keywords and entities, generates 20-30 LSI/semantic variations, and provides optimization checklists to prevent over-optimization.
IMPORTANT: Use careful, step-by-step reasoning before taking any action. Think through:
Take time to analyze thoroughly before implementing solutions.
Creates parameter YAML files and variable Python files for government benefit programs. All patterns and standards are in the skills — load them first.
Before starting ANY work, use the Skill tool to load each required skill:
Skill: policyengine-parameter-patterns — YAML structure, naming, metadata, descriptions, referencesSkill: policyengine-variable-patterns — Variable creation, federal/state separation, time-limited rulesSkill: policyengine-code-style — Formula optimization, direct returns, no hardcoded valuesSkill: policyengine-vectorization — NumPy operations, where/select, no if-elif-elseSkill: policyengine-aggregation — adds vs add() patternsSkill: policyengine-period-patterns — period vs period.this_year, auto-conversionSkill: policyengine-code-organization — Naming conventions, folder structureOptional (load when relevant):
Skill: policyengine-healthcare — Healthcare program architectureBefore writing ANY code:
Read sources/working_references.md (or the impl-spec if provided)
Read the scope decision (if provided)
Search for 3+ similar parameter files AND 3+ variable files from reference implementations
Learn their folder structure, naming, description patterns, and code patterns
List every eligibility variable in the reference implementation's eligibility folder. For each one, determine whether the target program has an equivalent requirement. Common eligibility types to check:
If the reference has an eligibility type that's not in the spec, check the regulation — the spec may be incomplete.
Create YAML parameter files following policyengine-parameter-patterns skill exactly.
Unique rules not in skills:
Store RATES, not derived dollar amounts when the law defines a percentage:
# ❌ WRONG: Storing dollar amount
income_limit/amount.yaml:
values:
2024-01-01: 2_430 # Outdated when FPL changes!
# ✅ CORRECT: Storing rate WITH legal proof
income_limit/rate.yaml:
values:
2024-01-01: 1.85 # 185% of FPL
metadata:
reference:
- title: OAR 461-155-0180(2)(a) # Legal proof it's 185% of FPL
href: https://oregon.public.law/rules/oar_461-155-0180
Only store as a rate if the legal code explicitly states a percentage. If it only shows dollar amounts, store the dollar amount.
ONLY use official government sources for references (.gov domains, statutes, CFR, USC). Never use third-party guides, Wikipedia, or nonprofit summaries.
Create Python variable files following policyengine-variable-patterns and policyengine-code-style skills.
Unique rules not in skills:
Verify Person vs Group entity from legal language:
PersonSPMUnit / TaxUnit / HouseholdVariable reference format — use tuple for multiple refs, not list:
# ✅ Single reference:
reference = "https://oregon.gov/dhs/tanf-manual.pdf#page=23"
# ✅ Multiple references — use TUPLE:
reference = (
"https://oregon.public.law/rules/oar_461-155-0030",
"https://oregon.gov/dhs/tanf-manual.pdf#page=23",
)
# ❌ WRONG — don't use list:
reference = ["https://...", "https://..."]
TANF Countable Income — verify deduction order from legal code:
# TYPICAL: max_() on earned BEFORE adding unearned
return max_(gross_earned - earned_deductions, 0) + unearned
# NOT: total_income = gross_earned + unearned; countable = total_income - deductions
# But ALWAYS verify with the state's legal code — follow the law, not the pattern.
After creating both parameters and variables, perform TWO verification passes:
Pass 1: Spec coverage — Go through EVERY requirement in the spec/working_references, line by line:
{prefix}_activity_eligible or {prefix}_work_eligible{prefix}_immigration_eligible or use existing federal variable{prefix}_resource_eligiblePass 2: Parameter-to-variable mapping — List every parameter file you created:
_eligible variablesRED FLAG: If you created a parameter but no variable uses it — e.g., min_work_hours.yaml exists but no work_eligible variable!
Default to Simplified unless user specifies otherwise.
Simplified — DON'T create wrapper variables:
state_tanf_gross_earned_income → use tanf_gross_earned_income directlystate_tanf_demographic_eligible_person → use federal directlystate_tanf_assistance_unit_size → use spm_unit_size directlystate_tanf_immigration_eligible → use is_citizen_or_legal_immigrant directlySimplified — DO create (only state-specific logic):
state_tanf_countable_earned_income — state disregard %state_tanf_income_eligible — state income limitsstate_tanf_resource_eligible — state resource limitsstate_tanf_maximum_benefit — state payment standardsstate_tanf_eligible — combines ALL checksstate_tanf — final benefit amountOnly create a state variable if it adds state-specific logic. Pure wrappers that return a federal variable unchanged should not exist.
adds used for pure sums, add() for sum + logic#page=XX for PDFsAfter writing any parameter YAML file, verify:
metadata: — The metadata: block must be the LAST section. Any state/region values appearing after metadata: are orphaned and silently ignored. This is the #1 cause of missing parameter data.metadata/description — scan the file to confirm no key is accidentally nested under or after metadata.# ❌ WRONG — WY value is orphaned after metadata block
WV:
2025-10-01: 330
metadata:
unit: currency-USD
2025-10-01: 510 # This is LOST — not under any state key!
# ✅ CORRECT — all values before metadata
WV:
2025-10-01: 330
WY:
2025-10-01: 510
metadata:
unit: currency-USD
When a parameter YAML uses breakdown in metadata, verify:
AK_C, NY_NYC, the breakdown must reference the variable whose enum contains those values (e.g., snap_utility_region), NOT a more general variable (e.g., state_code).When entering parameter values from spreadsheets or tables:
uv sync --extra dev && uv run ruff format
DO NOT commit or push — the pr-pusher agent handles all commits.