Skip to content

mushanyoung/property-tax-appeal

v3.1.0MIT

Triage US residential property-tax disputes and prepare fact-checked market-value appeals with comparable sales, APNs, and matching Markdown and PDF evidence packets.

Property Tax Appeal Skill

An evidence-led Agent Skill that triages US residential property-tax assessment disputes and prepares market-value review and appeal packets from two minimum inputs:

  • Property address
  • A value shown on the current assessment notice

The skill identifies whether that number is market, appraised, assessed, equalized, or taxable value; verifies the parcel and appeal rules; researches comparable sales, APNs, and stable transaction IDs; derives a defensible requested value; fact-checks the record; and generates matching upload-ready English Markdown and PDF files.

Scope is intentionally limited to cases where market value is a material appeal ground. The skill stops after route, form, and deadline research for unequal/non-uniform appraisal, exemption, classification, ownership, or other disputes that require a different evidence model.

Install

Use the portable Agent Skills installer for Codex, Claude Code, Cursor, OpenCode, and other compatible agents:

npx --yes skills@1.5.23 add https://github.com/mushanyoung/property-tax-appeal-skll/tree/v3.1.0 \
  --skill prepare-property-tax-appeal

The tag-qualified URL is locked after the associated GitHub immutable release is published. Commands that add the repository as a native plugin track the repository's current default branch; use the attested, versioned release archives when reproducible installation is required.

Other native installation options:

PlatformInstallation
OpenAI Codex plugincodex plugin marketplace add mushanyoung/property-tax-appeal-skll, then codex plugin add property-tax-appeal@property-tax-appeal-skll
Claude Code plugin/plugin marketplace add mushanyoung/property-tax-appeal-skll, then /plugin install property-tax-appeal@property-tax-appeal-skll
Gemini CLI extensiongemini extensions install https://github.com/mushanyoung/property-tax-appeal-skll
GitHub Copilot / GitHub CLIgh skill install mushanyoung/property-tax-appeal-skll prepare-property-tax-appeal@v3.1.0

See INSTALL.md for agent-specific paths, scopes, and dependency details.

Public Listings

These listings were checked on August 19, 2026. Registry-specific version labels can differ from the repository's SemVer release when a registry assigns its own version.

RegistryListingStatus
GitHub ReleasesImmutable v3.1.0 releaseLive
skills.shprepare-property-tax-appealLive
ClawHubprepare-property-tax-appealLive; registry package licensed MIT-0
Tesslmushan/prepare-property-tax-appeal 3.1.0Live; moderation and security checks passed
askillSkill 703844Live
Agent Skill Hubmushanyoung/prepare-property-tax-appealLive as 2026.08.19.1

Marketplace Reviews

These review states were confirmed by the publisher on August 19, 2026. A pending review is not a public listing and does not imply approval.

MarketplaceStatus
OpenAI Plugins DirectoryDeferred; not submitted
Claude official marketplaceSubmitted; review pending
Cursor MarketplaceSubmitted; review pending

Core Method

  • Verify the jurisdiction, valuation date, filing path, deadline, subject APN, and property characteristics from current sources.
  • Require an explicit residential-use verification supported by a parcel-record source; stop packet generation for non-residential or unverified-use subjects.
  • Explicitly designate the sales-comparable market value and preserve assessed, equalized, capped, exemption-adjusted, and authority-specific taxable values as sourced nodes.
  • Define the legally usable sale-date window from current official guidance before screening comparable sales.
  • Build and record a neutral comparable pool before selecting advocacy evidence.
  • Give every candidate a stable transaction or recording ID; repeated APNs with different sales are not duplicates.
  • Prefer exact bedroom and bathroom matches when enough credible inventory exists.
  • Optionally exclude sales above the current market-value comparison basis from the final table only after one-schema scoring; equally or more relevant omitted evidence is automatically disclosed.
  • Treat a reported sale-price range as an interval, never describe its lower endpoint as exact consideration, and exclude provisional endpoints from point statistics.
  • Separate the requested value from the realistic likely-outcome range.
  • Require explicit owner approval before rendering any declaration or signature block.
  • Accept owner-provided MLS or closing records as locator-free private transaction evidence only when each comparable also has an independent public parcel record.
  • Generate private, matching Markdown and PDF without clobbering existing files, then compare the facts and visually inspect every PDF page.

Nationwide Coverage

The skill includes a routing registry for market-value appeals in all 50 states and the District of Columbia. It maps each state to the common local filing structure, including assessor review, boards of equalization, appraisal review boards, value adjustment boards, boards of revision, tax boards, grievance proceedings, abatement applications, and state-level appeal ladders. A forum named a board of equalization does not imply that this builder supports a separate unequal-appraisal claim.

Look up the initial route for a state with:

python3 skills/prepare-property-tax-appeal/scripts/lookup_jurisdiction.py --state CA
python3 skills/prepare-property-tax-appeal/scripts/lookup_jurisdiction.py --state Texas --json

The registry is a routing aid, not a deadline database. Every case must verify the exact county, city, township, parish, borough, or district authority; current official form; filing deadline; valuation date; evidence window; submission method; and whether an informal review preserves formal appeal rights.

Repository Layout

gemini-extension.json
plugin.json
plugins/property-tax-appeal/
  .codex-plugin/plugin.json
  .claude-plugin/plugin.json
  assets/property-tax-appeal-icon.png
  skills/prepare-property-tax-appeal/
skills/prepare-property-tax-appeal/
  .tessl-plugin/plugin.json
  SKILL.md
  agents/openai.yaml
  assets/case-example.json
  assets/case-template.json
  references/
  scripts/
tests/
marketplace/submission.json
marketplace/README.md
PRIVACY.md
SECURITY.md
SUPPORT.md
TERMS.md
.agents/plugins/marketplace.json
.claude-plugin/marketplace.json

Local Use

Read skills/prepare-property-tax-appeal/SKILL.md, copy the fail-closed assets/case-template.json, research and cite the case facts, and change each human-review gate only after performing that check. assets/case-example.json is a fictional test fixture, not a pre-approved starting point. Then run:

python3 skills/prepare-property-tax-appeal/scripts/build_appeal_packet.py case.json \
  --output-dir output \
  --basename property-address-appeal

The builder creates private files and refuses to overwrite an existing packet by default. Markdown retains the case's complete Unicode text. PDF output uses only the unembedded PDF Base 14 Helvetica and Helvetica-Bold fonts. Before creating a PDF, the builder verifies every character against its supported WinAnsi glyph set. If any character is unsupported, PDF generation stops, lists the affected Unicode code points, and directs the user to use an official English spelling or generate Markdown only with --no-pdf. Use --force only after confirming that the existing Markdown/PDF pair belongs to the same case.

Python Support

Version 3 supports CPython 3.11 through 3.14 and tests every supported minor version on each pull request and push. Python 3.14 additionally runs coverage, security, repository, and PDF smoke checks. Dependency locks are universal across the supported range and are installed with hashes. No weekly Python test matrix or Python 3.15 development job is used.

The deprecated v2 font-bearing release and tag were retired so new clones do not download that font through Git history. Repository checks fetch and inspect complete reachable history, reject font-program paths, and verify that the retired font blob is absent from the local object database.

Install the PDF dependency when needed:

python3 -m pip install --require-hashes \
  -r skills/prepare-property-tax-appeal/scripts/requirements.lock

Scope

This repository prepares an evidence attachment and filing analysis. It does not replace legal advice, appraisal services, official forms, or verification of current local deadlines and submission requirements. A property owner must review the final facts and sign or submit any required government form.

The project operates no case-data backend. Review the public privacy policy, terms of use, support policy, and security policy before using it with private documents. Do not place real assessment notices, owner records, addresses, account numbers, or appeal packets in public issues.

Release Maintenance

The root skills/ directory is canonical. Synchronize and validate the self-contained plugin copy before committing:

python3 scripts/sync_distributions.py
python3 scripts/check_repo.py

Build deterministic .skill and .zip release assets with:

python3 scripts/package_skill.py

Release packaging refuses tracked skill, plugin, or version inputs that differ from HEAD.

Testing

The test suite covers ratio-state value separation, closed-world schema and typed-source validation, locator-free private owner attachments, bounded adversarial candidate sets and diagnostics, linear transaction indexing, contrary-evidence handling, truth-conditional prose, adversarial Markdown/URL input, DNS-rebinding-resistant link checks, malformed HTTP boundaries, Unicode-preserving Markdown, safe rejection of unsupported PDF characters, unembedded Base 14 font enforcement, failure-atomic output, all jurisdiction-router modes, deterministic secure archives, clean universal hash-locked installs, distribution synchronization, security scans, release-branch ancestry, and release metadata contracts.

python3 -m pip install --require-hashes -r requirements-test.lock
python3 scripts/check_repo.py
python3 -m coverage erase
python3 -m coverage run -m unittest discover -s tests -v
python3 -m coverage report

CI enforces at least 88% combined statement and branch coverage across the repository's deterministic Python scripts.

License

MIT