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@shipwithai

How 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-iterate runs a cheap gate first (no render), then the render matrix with the deterministic Tier1Assertions walk of the Compose semantics tree, then the mobile-design-evaluator vision lane, then aggregates into the ledger.
  • Ratchet/ui-distill clusters recurring findings, promotes them to gates, and deletes the now-redundant soft guidance.

Pro tips

  • Run /ui-metrics before 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.jsonl as 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.