Sandbox
@yschimke/compose-ai-tools

Compose preview plugin, CLI, and agent skill

This repo helps you render Compose previews outside Android Studio, either from the command line or inside an AI agent workflow. It can also show previews inline in VS Code-based editors and expose Compose UI through MCP and a daemon for faster repeat renders.

111 stars5 forksKotlinUpdated 6d ago
Who it's for

Builders who are making Compose UI and want their agent or editor to render and inspect previews.

What it delivers

You can check the UI your agent just changed without opening Android Studio.

What it does

Render previews to PNG

Renders `@Preview` composables from the command line with `compose-preview render`.

Browse preview catalogs

Opens a component browser with `compose-preview browse`, including previews across modules.

Agent skill workflow

Ships a `compose-preview` skill for Claude Code, Codex, and Gemini so the agent can render, iterate, and check its own work.

Inline editor previews

Provides a VS Code extension for Compose Preview in VS Code, Cursor, Windsurf, and VSCodium.

MCP and daemon support

Adds an MCP path for agent loops over Compose UI and an optional long-lived daemon to keep renders warm.

How to get it

  1. 1Run the one-line installer once. It drops the compose-preview CLI and the agent skill…
    curl -fsSL https://raw.githubusercontent.com/yschimke/skills/main/scripts/install.sh | bash
  2. 2Install the CLI (same one-liner as above), then point it at any Compose project — no…
    compose-preview render    # render every @Preview to PNG
    compose-preview browse    # open the streamlined component browser

README

compose-ai-tools

See your Compose UI without opening Android Studio.

compose-ai-tools renders your @Preview composables to PNG from the command line — so your AI coding agent can actually look at the screen it just changed, and so can you. Works with Jetpack Compose (Android, via Robolectric) and Compose Multiplatform Desktop (via ImageComposeScene).

That's the whole idea. Everything else on this page is optional.

📖 Documentation · Install · Reference

Get started

Pick the one that fits you. Each is a single step.

🤖 With an AI coding agent

Run the one-line installer once. It drops the compose-preview CLI and the agent skill into place (Claude Code, Codex, Gemini):

curl -fsSL https://raw.githubusercontent.com/yschimke/skills/main/scripts/install.sh | bash

Then just ask your agent to preview a composable. The compose-preview skill is the playbook — it tells the agent how to render, iterate, and check its own work. You don't have to learn the commands; the agent reads the skill. (If your agent can fetch URLs but not run the installer, point it straight at the SKILL.md — it bootstraps the CLI itself.)

🧩 In VS Code (or Cursor / Windsurf / VSCodium)

Open the Extensions view (⇧⌘X / Ctrl+Shift+X), search Compose Preview, click Install. It renders previews inline and needs no project changes. (Marketplace · Open VSX)

⌨️ From the command line

Install the CLI (same one-liner as above), then point it at any Compose project — no build edits required:

compose-preview render    # render every @Preview to PNG
compose-preview browse    # open the streamlined component browser

browse includes every preview-bearing module in one catalog. It automatically builds and uses a compatible CMP Wasm browser app (including the common :shared:ui:webApp split), while JVM/Android-dependent components retain their baked preview and source-code experience. Use --module :app only when you deliberately want to narrow the catalog.

The CLI injects itself into your build at runtime, so projects that already apply com.android.application / com.android.library / org.jetbrains.compose just work.

Prefer a version-pinned Gradle plugin? It's on Maven Central (no auth, no token). See the Install page for that, CI recipes, and the full requirements (Java 17+, Gradle 8.13+, AGP 8.13.0+, Kotlin 2.0.21+).

What else it can do

None of this is required to get value from the tool — it's there when you want more than a PNG.

  • Data products — alongside each PNG the renderer can emit structured data: accessibility findings, layout trees, theme tokens, recomposition heat maps, drawn text, resource captures, and more. One page per product.
  • Agents & MCP — a push-based, token-frugal agent loop over Compose UI: target by semantic ref, observe semantics instead of pixels, diff renders, turn recordings into tests. The aria-snapshot story for Compose. The same native MCP process can optionally connect agents to a concurrent preview-server UI-builder session; see the MCP design reference.
  • Daemon — an optional long-lived renderer that keeps Robolectric / Compose-Desktop warm so re-renders are fast.

Samples

Rendered baselines (PNGs and animation GIFs, regenerated on every push to main) are browsable inline on the compose-preview/main branch — samples:android, samples:wear, samples:cmp, and samples:remotecompose. Source under samples/. The XR renderer and its spatial sample live in compose-preview-xr. The integration matrix also renders the plugin against real-world external Compose projects on every push.

Agent PR hall of fame

Real-world PRs opened by AI coding agents that used compose-preview to verify their changes.

  • yschimke/meshcore-mobile#36 — renders Play Store listing screenshots (phone + 7"/10" tablet) directly from Play Store — … @Preview composables, replacing hand-crafted PNGs.

Have one to add? Open a PR or an issue.

More

Files in the repo

Repository payload51 top-level entries
  • .claude
  • .githooks
  • .github
  • api
  • build-logic
  • bundle
  • bundle-viewer
  • cli
  • common
  • contrib
  • daemon
  • data
  • demos
  • deploy
  • design-map
  • docs
  • gradle
  • gradle-plugin
  • kotlin-js-store
  • preview-server
  • remotecompose
  • render-host
  • render-matrix
  • render-session
  • renders
  • runtimes
  • samples
  • schema
  • screen
  • scripts
  • site
  • tools
  • trust
  • usage-source-psi
  • .editorconfig
  • .gitattributes
  • .gitignore
  • .release-please-manifest.json
  • AGENTS.md
  • build.gradle.kts
  • CHANGELOG.md
  • CLAUDE.md
  • compose-usage.json
  • GEMINI.md
  • gradle.properties
  • gradlew
  • gradlew.bat
  • LICENSE
  • README.md
  • release-please-config.json
  • settings.gradle.kts

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More plugins

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

138k
1 add

Graphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.

82k
code-yeongyu/
oh-my-openagent

OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.

69k

Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More

94k

Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns

4.3k