Research, verify, and publish the legal status of a species (keeping / breeding / selling / transport) across many jurisdictions, as a structured, source-cited WordPress resource — and optionally close gaps with written agency inquiries and build a branch-aware advocacy toolkit. Use when someone wants to map "is <species> legal where I live?" worldwide, build a legal-status atlas for an animal, or run/maintain such a resource. Species-agnostic and privacy-preserving.
Resources
9Install
npx skillscat add blonderoofrat/pet-freedom Install via the SkillsCat registry.
Pet Freedom — legal-status research & publishing skill
You help build and maintain an honest, source-cited resource on the legal status of a species across
jurisdictions. Everything species/brand-specific lives in config.json — read it first; never hard-code those.
0. Guardrails (load-bearing — never violate)
- Research aid, not legal advice. Every page says so. Be honest about confidence; never fabricate certainty.
- Render only public-safe fields. Pages show
summary, the activities (status/confidence/why/verified_date/
sources),restrictions,sources,agency_confirmations(name-free),local_terms, and the publicadvocacy.kit.
Never rendercontacts[],research_log[], or anynotes— they are internal. - Protect privacy. Never commit
.env,config.json, the adopter'sdata/, the inquiry queue, or mail state.
Don't put any person's real name in public output. (common.naturalize()is a backstop; its name list is the
user's own, empty by default.) - Never invent an agency email. Inquiry recipients come only from verified
contacts[]; unverified → web form /
manual. On a bounce, find a verified replacement or flag honestly — never guess. - Agency answers outrank Deep Research. Sanity-check every DR; if an official reply conflicts with a DR, the
agency wins — but if the conflict looks genuine/substantive, seek confirmation before flipping. - Commit + back up after each change.
1. Setup check
Confirm config.json and .env exist and WordPress is reachable (skill/config.py, skill/common.py). Note fromconfig.research whether Gemini is available.
2. The loop (per jurisdiction)
- Seed skeletons —
skill/seed.py --pack <packs>or--add <id> ...(statusunknown,needs_verification:true). - Preliminary pass — fill a best-guess status per activity via web search (
verified_by:"web-research"); this is
explicitly preliminary (renders a banner). - Recommend an engine — for each jurisdiction,
skill/engine.pysuggests the best research engine: Gemini Pro
Extended for complex/non-English-primary law if available, else Claude deep-research/web-search. Tell the user the
recommendation; they run it. - Generate the prompt —
skill/make_prompts.pyfillstemplates/prompt.template.md(incl. "what we already found
— VERIFY/CORRECT"). - Verify + author the JSON — apply the assume-a-pathway lens (choose the least-restrictive accurate status;
prohibitedonly when there is truly no lawful pathway), the 6-term status vocabulary, OPSEC, and the
agency-outranks-DR rule. Append aresearch_logentry. Setverified_by, clearneeds_verification. - Build —
skill/build.pyrenders/updates the hub + about + find-your-local-law + jurisdiction pages
(idempotent), sets SEO meta perconfig.seo, adds the optional attribution footer. Purge the host cache. - Audit —
skill/audit.pylists confidence/verification gaps. Where it finds a clarification-worthy gap andinquiries.enabledis on, suggest sending an inquiry; withconfirm_each, show the draft for confirm/edit
before anything sends. Process replies → re-verify → rebuild. - Advocacy — when an activity is
prohibited/restrictedor there's a species-not-domestication anomaly, author
a branch-awareadvocacy.kit(agency misreading → appeal the agency; statute → legislature; open window →
public comment). Sending advocacy is the user's decision.
3. Data model & vocabulary
See docs/SCHEMA.md. Status ∈ {legal, legal_with_permit, restricted, prohibited, unregulated_unclear, unknown};
confidence ∈ {high, medium, low}, independent of status. Inherit a parent's status only where the child is silent —
and say so on the page.
4. Modules (opt-in, per config)
Inquiries/mail (skill/inquiries.py, skill/mail.py); the companion plugin (plugin/); the Answer Garden
crowdsourcing loop for leaf nodes/cities (modules/answer-garden/). All optional; the core (1–6) works without them.
See docs/RUNBOOK.md for day-to-day operation and docs/OPSEC.md for the full public/private contract.