Use this skill when updating the PolicyEngine skills source repo or the generated policyengine-claude wrapper — adding skills, fixing skill routing, updating years in code examples, reordering skills, or tuning skill descriptions. Triggers: "update plugin", "fix skill", "wrong skill loaded", "update year", "plugin maintenance", "skill routing", "skill description", "policyengine-claude plugin", "policyengine-skills".
From essentialnpx claudepluginhub policyengine/policyengine-claude --plugin data-scienceThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
This skill is for maintaining the PolicyEngine skills source repo and Claude wrapper, not for using PolicyEngine.
PolicyEngine/policyengine-skillsPolicyEngine/policyengine-claude~/.claude/plugins/marketplaces/policyengine-claude/~/.claude/plugins/cache/policyengine-claude/complete/<version>/~/.claude/plugins/installed_plugins.jsontargets/claude/marketplace.template.json + bundles/*.json in source, rendered to .claude-plugin/marketplace.json in the generated wrapperSKILL.md with YAML frontmatter containing name and descriptionmarketplace.json appear first in the system prompt and may get matched preferentiallySkill tool based on matching the user query against descriptionsUse "ALWAYS LOAD THIS SKILL FIRST" language (proven pattern from microsimulation skill):
description: |
ALWAYS LOAD THIS SKILL FIRST before writing any PolicyEngine-US code.
Contains the correct situation dictionary structure, entity names, variable names...
Use "ONLY use" + "DO NOT use" pattern:
description: |
ONLY use this skill when users explicitly ask about [specific topic].
DO NOT use for [common mismatched query type] — use [correct skill] instead.
List explicit trigger phrases in the description. Copy the microsimulation skill's pattern:
description: |
Triggers: "keyword1", "keyword2", "phrase one", "phrase two".
The bundles/complete.json file determines Claude system prompt order for the generated complete wrapper.
Current priority order (most commonly needed first):
policyengine-us-skill / policyengine-uk-skill (household calculations)policyengine-user-guide-skill (web app usage)policyengine-microsimulation-skill (population analysis)policyengine-python-client-skill (last among tools — only for explicit API questions)Rule: Skills that match common user queries should be listed before niche/technical skills.
Every January (or when the year changes), update ALL code examples:
US skill: skills/domain-knowledge/policyengine-us-skill/SKILL.md
{YEAR: keys in situation dictionaries.calculate("var", YEAR) calls"period": YEAR in axes"YEAR-01-01.2100-12-31" in reform definitionsUK skill: skills/domain-knowledge/policyengine-uk-skill/SKILL.md
Python client skill: skills/tools-and-apis/policyengine-python-client-skill/SKILL.md
"YEAR" string keys"YEAR-01-01.2100-12-31" reform datesMicrosimulation skill: skills/tools-and-apis/policyengine-microsimulation-skill/SKILL.md
period=YEAR in calc() calls# Find all year references across skills
grep -rn "2026" skills/ | grep -v ".git"
# Bulk replace (use with care — review diff before committing)
# Replace year in situation keys
find skills/ -name "SKILL.md" -exec sed -i '' 's/{2026:/{2027:/g' {} +
# Replace year in calculate calls
find skills/ -name "SKILL.md" -exec sed -i '' 's/, 2026)/, 2027)/g' {} +
# Replace year in string keys
find skills/ -name "SKILL.md" -exec sed -i '' 's/"2026"/"2027"/g' {} +
not 2025 or 2026 → not 2026 or 2027"2026-01-01.2100-12-31" → "2027-01-01.2100-12-31"Claude Code caches plugins and does NOT pick up file edits automatically. Manually editing
files in the cache directory (~/.claude/plugins/cache/) has no effect — Claude Code rebuilds
the cache from the marketplace repo's git state on session start.
To test local changes:
# 1. Make changes in the source repo and commit
cd /path/to/policyengine-skills
# ... edit files, git add, git commit ...
# 2. Rebuild the generated Claude wrapper locally
python3 scripts/build_claude_wrapper.py --source-root . --output-root build/policyengine-claude
# 3. Clear the plugin cache (this is the key step)
rm -rf ~/.claude/plugins/cache/policyengine-claude
# 4. Start a new Claude Code session — it rebuilds from the synced marketplace repo
To publish changes for all users:
policyengine-skills, make changes, commit, pushPolicyEngine/policyengine-clauderm -rf ~/.claude/plugins/cache/policyengine-claudeSymptoms: policyengine-python-client loads instead of policyengine-us
Fix:
Symptoms: Generated code uses 2024/2025 instead of current year Fix: Run the annual year update checklist above
Symptoms: Skill loads (shown in output) but generated code doesn't match patterns Fix: Add "IMPORTANT" callout boxes with specific instructions at the top of the skill body, not just in the description