First-party. This plugin is built and maintained by ShipWithAI. Unlike the reviewed third-party tools in this toolkit, it is our own product — judge it accordingly.
Problem it solves
“Did that @Composable edit actually render correctly?” is a question that normally gets answered
by a human squinting at an emulator. Screenshot tests help, but they only tell you that something
changed — not whether it is good, and not whether this is the fourth sprint in a row that the same
spacing mistake came back.
This harness turns it into a loop with a memory. Every screen renders across a stress matrix, two independent graders write findings into a committed ledger, and findings that keep recurring are promoted into permanent gates. The soft guidance shrinks as the gates grow.
How to install
/plugin marketplace add ShipWithAI/shipwithai-plugins/plugin install shipwithai-mobile-ui-harness@shipwithaiHow to use
/shipwithai-mobile-ui-harness:setup com.acme.app --module feature/foo/impl/ui-iterate FooScreen # render, grade, log — capped at 4 iterations/ui-distill # promote recurring findings into permanent gates/ui-metrics # is it compounding?Three layers:
- Prevent — Konsist boundary tests and design tokens stop whole classes of mistake at the architectural level.
- Gate and grade —
/ui-iterateruns a cheap gate first (no render), then the render matrix with the deterministicTier1Assertionswalk of the Compose semantics tree, then themobile-design-evaluatorvision lane, then aggregates into the ledger. - Ratchet —
/ui-distillclusters recurring findings, promotes them to gates, and deletes the now-redundant soft guidance.
Pro tips
- Run
/ui-metricsbefore deciding whether the harness is working. Iterations-to-pass and recurrence-after-deposit are the numbers that matter; a passing screenshot is not. - Let the iteration cap do its job. If a screen needs more than four rounds, the problem is the design or the requirement, not the loop.
- Treat
findings.jsonlas a real artifact and commit it. The ledger is where the compounding lives; wiping it resets the harness to advice.
When NOT to use
Not for web or native iOS UI. Not worth the setup on a project without an existing Compose screenshot-testing setup — you would be adopting two things at once. And at 0.1.0, expect to read the integration guide rather than skim it.