Skip to content

Development

Mark Rogers edited this page Oct 16, 2026 · 2 revisions

The repository's rules are in AGENTS.md. In short:

  • fetchwright.py stays one standard-library file.
  • No request may carry Google Search.
  • The key is never printed or written.
  • Every change has a test on invented responses.

Layout

path what it is
skills/fetchwright/ the reader skill: SKILL.md, references/route.md, scripts/fetchwright.py
skills/fetchwright-setup/ the key and tier advisor: SKILL.md, references/gemini-api.md
tests/test_fetchwright.py offline tests
tests/smoke_live.py one live read, skipped without a key
scripts/budget.py the size budget
evals/ trigger, decoy and action cases for claude plugin eval
ai-docs/ handoff, decisions, solutions, the log

Each skill also carries its evergreen files (RESEARCH, CHANGELOG, LEARNINGS, TESTS, MAINTENANCE, evergreen.json), which keep its research on models, prices and terms current.

Tests

python tests/test_fetchwright.py
.....................................
----------------------------------------------------------------------
Ran 37 tests in <seconds>s

OK

The tests replace the network call with responses built in the shape the API returned on 2026-10-15, with invented text. They need no key and no network. The run time, shown as <seconds>, is under a second.

python tests/smoke_live.py

This reads one public Wikipedia article for real, with your key. It skips when no key is set, which is how it runs in CI, and passed on 2026-10-15.

Size budget

python scripts/budget.py
longest skill description, characters (always loaded; cut at 1,536)       873  green<=1000  yellow<=1300  green  fetchwright-setup
both skill descriptions, characters                                      1734  green<=1800  yellow<=2400  green  
largest SKILL.md, tokens (loaded on every use)                           1590  green<=2500  yellow<=3500  green  fetchwright
largest reference file, tokens (loaded on demand)                        1292  green<=2000  yellow<=3000  green  fetchwright-setup/gemini-api.md
fetchwright.py, lines                                                     510  green<=600   yellow<=900   green  
installed skills folder, KB                                                92  green<=150   yellow<=400   green  
tracked repository, KB                                                    523  green<=1024  yellow<=3072  green  
budget: GREEN

That is 0.2.0. CI fails at red. The skill descriptions are loaded in every session of every user who installs the plugin, which is why they have the tightest limits.

CI

.github/workflows/tests.yml runs on every push and pull request:

  • the offline tests and the skipped smoke test, on Windows, macOS and Linux with Python 3.10 and 3.14;
  • check --no-call from a clean checkout;
  • the budget.

CI has no Gemini key, and none should be added: it would spend the owner's quota on every push.

Releasing

A release bumps the version in .claude-plugin/plugin.json, plugin.json, VERSION in fetchwright.py, metadata.version in both SKILL.md files and version in both evergreen.json files. It adds a CHANGELOG section, tags vX.Y.Z and publishes a GitHub Release with that section as notes.

Clone this wiki locally