The reference img2 plugin — image → deterministic Three.js cube. It exists to
exercise every surface of the plugin contract with zero domain risk, and to be copied:
starting a new plugin means cloning this repo and replacing the cube logic.
File map (each maps to a section of the harness's docs/PLUGIN_CONTRACT.md):
| File |
Contract |
What it demonstrates |
plugin.json |
§5 |
Manifest: capability edge, honest requires |
SKILL.md |
§8 |
Trigger-style description; commands run with --workspace . |
tools/emit_cube.py |
§8, §11 |
Verbatim bootstrap stanza; state via update_plugin_state; artifacts under <workspace>/.img2/artifacts/ |
tools/gate_cube_structure.py |
§9 |
Verdict envelope; exit codes agreeing with status |
gates.json, steps.json |
§9, §10 |
Declared rows with {workspace}/{plugin_dir} tokens |
tests/ |
— |
Temp $IMG2_HOME + harness symlink pattern; gate pass AND fail; end-to-end through img2_core.gate_runner |
img2 add img2threejs/plugin-hello-cube # install
python3 -m unittest discover -s tests # test (needs a sibling/linked harness checkout)
Full walkthrough: docs/WRITING_A_PLUGIN.md in the img2 harness.