Repository navigation
Development
How the repository is laid out, how to test a change, and how a release is made. The rules for agents working in the repository are in AGENTS.md; session notes, the handoff and the research are under ai-docs.
| Path | What |
|---|---|
skills/polywright/scripts/pw.py |
The command-line tool: standard-library Python 3.9 or newer, one JSON object per command |
skills/polywright/scripts/pw_bpy.py |
Its Blender half, run inside Blender (or a Python with the bpy module); never run by hand |
skills/polywright/references/targets.json |
The budgets pw.py check reads, each with its source |
skills/*/ |
The seven skills and their companion files (The skills) |
tests/ |
check_skills.py, test_pw.py, test_recipes.py and fixtures |
scripts/budget.py |
The size budget |
ai-docs/ |
Handoff, log, decisions, research notes, and the wiki's verification program and output |
From the repository root:
python tests/check_skills.py
python tests/test_pw.py
python tests/test_recipes.py
python scripts/budget.py-
check_skills.py: frontmatter, the 1,024-character description limit, the companion files, the manifests, relative links, and guards against home-folder paths, the owner's own paths and AI attribution. It also fails whenpw.py'sVERSIONdiffers from.claude-plugin/plugin.json(since 0.1.2). -
test_pw.py: geometry, file formats, the manifest, an offlineplace, the ComfyUI workflow converter, and Blender-backed inspect, render, convert, printable, union and the bpy runner. The Blender tests skip when no Blender is found. -
test_recipes.py: runs every# recipe:block inskills/polywright-blender/references/bpy-recipes.mdin Blender and requires its[pw] okline. -
budget.py: what every session loads (the seven descriptions) and the installed size, against green, yellow and red limits. Red fails CI.
Point the tests at a Blender with POLYWRIGHT_BLENDER=<path to blender>, or at a Python 3.13 with the bpy wheel with POLYWRIGHT_BPY_PYTHON=<python>.
.github/workflows/tests.yml runs on every push to main and every pull request:
| Job | Runs |
|---|---|
| structure | Linux, macOS and Windows, Python 3.9 and 3.14: check_skills.py and test_pw.py (Blender parts skip) |
| blender | Linux, Python 3.13 with bpy 5.2.2 from PyPI and Mesa's software EGL: test_pw.py with Blender and every recipe |
| budget | budget.py |
The Mesa packages are there because GitHub's Linux runners have no GPU: without them Blender stops rendering with "Couldn't open libEGL.so.1".
Each skill's evals/evals.json holds trigger cases, decoys, an action case and an outcome case. They were run headless, one fresh Claude Code session per case (claude -p "<prompt>" --output-format stream-json --verbose), with the plugin installed, and graded on the trace: a call to the skill for a trigger, none for a decoy, the named pw.py command for an action case. Action cases run in a throwaway clone so nothing writes into the working repository. On Windows, start claude from Python through its full path (shutil.which("claude")): the bare name fails to launch the .cmd shim and every case looks like a miss.
- Bump
versionin.claude-plugin/plugin.jsonandVERSIONinpw.pytogether, and add the section toCHANGELOG.md. - Merge to
mainthrough a pull request with CI green. - Push a tag
vX.Y.Z..github/workflows/release.ymlchecks the tag againstplugin.json, runs the structure checks and the budget, zipsskills/with the README, LICENSE and SECURITY.md, and publishes the GitHub release with that zip. - Update this wiki: rerun
ai-docs/notes/2026-10-11-wiki-verify.py <version>and compare its output with the saved one; the procedure is in the wiki note inai-docs/notes.
This wiki describes polywright 0.1.2 and was last updated on 2026-10-11. The plugin is MIT licensed. Report problems in the issues.
Using it
- Getting started
- The skills
- Commands
- How checks decide
- The asset contract
- Errors and edge cases
- Recipes
- FAQ
The releases
Contributing
Elsewhere