Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/yschimke/compose-ai-tools/render-evidencenpx skills add yschimke/compose-ai-tools --skill render-evidencegit clone --depth 1 https://github.com/yschimke/compose-ai-toolsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/yschimke/compose-ai-tools/render-evidence)<a href="https://agentmods.dev/skills/yschimke/compose-ai-tools/render-evidence"><img src="https://agentmods.dev/badge/skills/yschimke/compose-ai-tools/render-evidence.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00076 | $0.01311 |
| Opus 5 | $0.00038 | $0.00656 |
| Sonnet 5 | $0.00015 | $0.00262 |
| Haiku 4.5 | $0.00008 | $0.00131 |
Grade A, and why
render-evidence scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 104 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Capturing visual evidence
Root AGENTS.md says a UI-affecting PR must carry
before/after evidence as embedded, viewable images — describing an image, or
deferring to the diff bot's auto-comment, does not count. This is how to produce
them here.
Check what already exists first
Rendering is not free. Before capturing anything:
- Read the sticky
<!-- preview-diff -->comment on the PR — CI may already have rendered and diffed exactly the surface you changed. - Reuse renders published on the
compose-preview/prandcompose-preview/mainbranches where they cover the change. - Scan
.github/workflowsfor the preview-diff CI this repo already runs, and cite it.
The bot's comment is a convenience, not a substitute: your PR body still needs your change's before/after embedded in it.
Rendering
Whole sample modules:
./gradlew :samples:android:composePreviewRenderAll
./gradlew :samples:cmp:composePreviewRenderAll
One preview, which is what a before/after pair usually wants:
./gradlew :samples:android:composePreviewRender --rerun \
-PcomposePreview.filter=<PreviewFunctionName>
--rerun matters. A failed render leaves .error.json sidecars that count as task
outputs, so composePreviewRender goes UP-TO-DATE and re-reports the stale
failure. PNGs land under <module>/build/compose-previews/renders/.
The samples consume the plugin through includeBuild("gradle-plugin"), so a plugin
edit is picked up with no publish step.
For the before side, render at the base commit (git stash, or a worktree at
origin/main) into a separate directory before rendering the head.
The Android lane needs an SDK; the Desktop lane does not
- Compose Desktop renders headlessly — no
DISPLAY, X server orxvfb. Skia's software path draws offscreen. If a desktop render looks broken in a sandbox, it is almost never the windowing system: check the JDK 17 toolchain and the native deps first, per Common commands anddocs/DESKTOP_NATIVE_DEPS.md. - The Android/Robolectric lane needs an Android SDK, which a fresh container
does not have.
scripts/install.sh --android-sdkinstalls it (and a JDK when./gradlewreports "Unable to download toolchain"). The traps that cost a whole session — chiefly that the platform package forcompileSdk = 37isplatforms;android-37.0, notandroid-37, and that the wrong name fails the entiresdkmanagerinvocation it appears in, taking the SDK 36 packages down with it — are written up under Bringing up a fresh sandbox. Read that before improvising. Cold end-to-end run is about 3 minutes.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 104 lines · 76 tokens per session scan A 96fc03a34306
render-evidence is a skill published in the GitHub repository yschimke/compose-ai-tools (110 stars, last pushed yesterday), licensed Apache-2.0. It adds 76 tokens to every session and 1,311 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
roborazzi
Use when working with Roborazzi screenshot tests on Android/JVM — setting up the Roborazzi Gradle plugin, running record/compare/verify tasks, writing tests with captureRoboImage or RoborazziRule, Compose Preview screenshot testing (ComposablePreviewScanner), Compose Multiplatform (iOS/desktop) screenshots, AI-powered…
ios-testing
Testing patterns for Swift and SwiftUI apps.
mobile-testing
Android and JVM testing - JUnit5, MockK, Turbine for Flow, and Compose UI testing for unit, integration, and UI tests; also applies to KMP commonTest running on the JVM/Android target. For iOS/Swift tests (XCTest, Swift Testing, XCUITest) use ios-testing. For TDD methodology and the three-tier test model (fake-first…
cmp-test
Generate a regression test suite for a Compose Multiplatform app by OBSERVING it — read the running app's semantics tree as structured JSON via the cmp-inspector MCP (testTags, text, clickables, bounds, nav state), derive a test plan from what actually rendered, and write tests into the app's shipped harness. Use this…
cmp-qa-prep
Bring up the E2E test harness for a Kotlin/Compose Multiplatform (CMP/KMP) app — start the Android emulator, install the debug build, and run the bottom-nav smoke (Maestro flows on current scaffolds; a legacy Appium session on pre-Maestro projects). Use this when the user wants to run E2E/device tests on their CMP/KMP…
playwright-skill
Complete browser automation with Playwright. Auto-detects dev servers, writes clean test scripts to $TMPDIR (or /tmp). Test pages, fill forms, take screenshots, check responsive design, validate UX, test login flows, check links, automate any browser task. Use when user wants to test websites, automate browser…