Agent skill

Capturing Preview Screenshots In CI

by skydoves in skydoves/android-testing-skills

A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.

Apache-2.0Auto-check: notesMobile

Install Capturing Preview Screenshots In CI

skills CLI
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ci --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/compose/preview/capturing-preview-screenshots-in-ci .claude/skills/capturing-preview-screenshots-in-ci && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
capturing-preview-screenshots-in-ci
GitHub stars
334
Token cost
~4.5k tokens
SKILL.md length
1,451 words
Files
1
Skills in repo
50
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.

  • Render every Jetpack Compose @Preview as a screenshot on a real Android device
  • SKILL.md covers When to use this skill, When NOT to use this skill, Prerequisites and Workflow, plus 5 more sections
  • Calls adb
  • Emulator and publish a browsable HTML catalog from CI

What it does

Capturing Preview Screenshots In CI is an agent skill from skydoves/android-testing-skills. Use this skill to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI. Covers the Compose HotSwan Gradle compiler plugin (com.github.skydoves.compose.hotswan.compiler) and debugImplementation("com.github.skydoves.compose.hotswan:preview"), the captureAllPreviews task, capturing one preview over ADB via HotSwanPreviewActivity + screencap, the hotSwanCompiler { preview { renderDelayMs; demoMode; sdkModeEnabled } } DSL, per-preview…

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering Mobile testing and debugging, Android development and CI/CD. It works with GitHub, Gradle, Android and GitHub Actions. The repository describes itself as: ⚡️ A set of skills for Android testing: Compose UI, AndroidX Test, JVM unit tests, and ADB. The licence is Apache-2.0.

When your agent uses it

  • Render every Jetpack Compose @Preview as a screenshot on a real Android device
  • Emulator and publish a browsable HTML catalog from CI
  • The user mentions captureAllPreviews
  • Preview screenshots in CI

Example prompts

  • “com.github.skydoves.compose.hotswan:preview”
  • “captureAllPreviews”
  • “HotSwan”
  • “/capturing-preview-screenshots-in-ci”

What it can do on your machine

Read from SKILL.md and the folder at commit 8665ed5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • adb

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Capturing Preview Screenshots In CI loads about 4.5k tokens when it runs. Until then it costs about 259 tokens; SKILL.md has 1,451 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~259
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteRuns commands with sudoSKILL.md:131
    DE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
  • NoteRuns commands with sudoSKILL.md:132
    sudo udevadm control --reload-rules && sudo udevadm trigger --name-match=kvm

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from skydoves/android-testing-skills at commit 8665ed5, republished under its Apache-2.0 licence (© skydoves). 1,451 words, ~4,489 tokens.

Download SKILL.mdSave it as .claude/skills/capturing-preview-screenshots-in-ci/SKILL.md (or your agent's skills folder).
name
capturing-preview-screenshots-in-ci
description
Use this skill to render every Jetpack Compose `@Preview` as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI. Covers the Compose HotSwan Gradle compiler plugin (`com.github.skydoves.compose.hotswan.compiler`) and `debugImplementation("com.github.skydoves.compose.hotswan:preview")`, the `captureAllPreviews` task, capturing one preview over ADB via `HotSwanPreviewActivity` + `screencap`, the `hotSwanCompiler { preview { renderDelayMs; demoMode; sdkModeEnabled } }` DSL, per-preview `@PreviewScreenshot(renderDelay = …)`, running it on an emulator in GitHub Actions (`reactivecircus/android-emulator-runner` or Gradle Managed Devices) and deploying the catalog to GitHub Pages, and how device rendering differs from host-JVM tools (Paparazzi, Roborazzi). Use when the user mentions "captureAllPreviews", "HotSwan", "preview screenshots in CI", "screenshot catalog", "preview catalog on GitHub Pages", or "Paparazzi vs Roborazzi vs device screenshots".
license
Apache-2.0. See LICENSE for complete terms.
metadata.author
Jaewoong Eum (skydoves)
metadata.keywords
jetpack-compose, ui-testing, screenshot-testing, compose-preview, hotswan, captureAllPreviews, preview-catalog, github-actions, github-pages…

Capturing Preview Screenshots In CI — A Device-Rendered Catalog On Every Commit

A @Preview lives in one engineer's IDE, behind a recompile, on a renderer (layoutlib) that is not the device. This skill turns it into a shared artifact: render every @Preview on a real device/emulator (real ART, real fonts, real image loading, system bars), collect the PNGs into a searchable HTML catalog, regenerate it from CI on every commit, and serve it from GitHub Pages. The tool is Compose HotSwan's Gradle plugin. For structuring previews so this is worth doing, see ../developing-with-compose-previews/SKILL.md.

When to use this skill

  • The user wants ./gradlew captureAllPreviews — render all @Previews and produce an HTML catalog.
  • The user wants to screenshot one preview from a shell script over ADB without the IDE.
  • The user wants a preview catalog deployed to GitHub Pages so designers/QA/PMs can browse components at a URL.
  • A preview that loads a network image or settles an animation is captured half-painted — needs render-delay tuning.
  • The user asks "Paparazzi vs Roborazzi vs device screenshots — which, and can I run both?".

When NOT to use this skill

  • The user wants pixel-diff golden-image regression gates (store a reference PNG, fail on diff). captureAllPreviews does not diff; that is Paparazzi's/Roborazzi's job. Run both if you need both — see the comparison table below.
  • The user wants behavioral assertions on a Compose UI (ComposeTestRule, finders) — use ../../setup/choosing-test-rule-vs-runtest/SKILL.md and the compose/finders/ skills.
  • The user is fixing why a preview won't render or keeps going "out of date" — that is preview structure; use ../developing-with-compose-previews/SKILL.md.
  • The user wants Compose live hot reload (edit code, see it on a running device) — that is the HotSwan IDE plugin's reload feature, a different surface from screenshot capture.

Prerequisites

  • A connected device or running emulator with the app installed and launched at least once in the current run — captureAllPreviews drives the running app's process so previews render with the real dependency graph (Hilt/Koin, network, DB) and need no mocks.
  • The HotSwan Gradle compiler plugin and the preview library (versions from the project's catalog; 1.3.2 at time of writing):
kotlin
// libs.versions.toml
[plugins]
hotswan-compiler = { id = "com.github.skydoves.compose.hotswan.compiler", version = "1.3.2" }

// root build.gradle.kts
plugins { alias(libs.plugins.hotswan.compiler) apply false }

// app module build.gradle.kts
plugins { alias(libs.plugins.hotswan.compiler) }
dependencies {
    debugImplementation("com.github.skydoves.compose.hotswan:preview:1.3.2")  // debug only — out of release builds
}
  • For CI: an emulator step (reactivecircus/android-emulator-runner@v2) or Gradle Managed Devices (see ../../../instrumentation/managed-devices/running-tests-on-gradle-managed-devices/SKILL.md). KVM enabled on the runner for an accelerated emulator.

Workflow

  • 1. Verify why this needs a device. Host-JVM renderers (Paparazzi, Roborazzi) run layoutlib without a device — fast, but the pixels are an approximation. Device rendering goes through ART: device font metrics, real Coil/Glide loading (placeholder, network image, crossfade all execute), GPU/AGSL/blur on the real path, and the full screen including status and navigation bars. The cost is an emulator in CI. Accept that trade only if catalog fidelity matters; otherwise stick with host-JVM diffing.

  • 2. Capture one preview over ADB (the primitive). With the debug app built and launched once on the device, the HotSwan preview library exposes HotSwanPreviewActivity, which takes the fully-qualified @Preview function name as a composable string extra:

bash
adb shell am start -S \
  -n com.example.app/com.skydoves.compose.hotswan.preview.HotSwanPreviewActivity \
  --es composable "com.example.app.feature.home.PokedexHomePreview"
sleep 1                                  # let it render
adb exec-out screencap -p > home-preview.png

Replace the package with the applicationId and the extra with the FQN of the preview function. This is the unit every higher-level capture is built on; doing it preview-by-preview does not scale, so use step 3.

  • 2a. (Optional) interactive loop in the IDE. With the HotSwan IDE plugin installed, the gutter icon next to a @Preview launches it on device in under half a second with no rebuild, and resolves @PreviewParameter providers via reflection. The IDE plugin is only needed for that interactive flow and for live hot reload — captureAllPreviews below needs only the Gradle plugin.

  • 3. Capture every preview at once. With the app running on a connected device:

bash
./gradlew captureAllPreviews

The task: scans every .kt under src/ for @Preview functions and resolves each one's FQN and Gradle module; enables Android System UI Demo Mode so the clock/battery/signal are pinned (diffs stay about your UI, not the time of day); for each preview launches HotSwanPreviewActivity, waits the render delay, runs screencap; restores the status bar and returns the device to the app's main Activity; generates index.html. Everything lands in .hotswan/preview-captures/ at the project root. The catalog has search, module grouping, dark/light toggle, fullscreen view, and per-shot device model + timestamp. With sdkModeEnabled = true it also traces each preview to the composable it wraps and renders a KDoc + parameter table (a design-system reference that cannot drift). No test code anywhere — the task reads @Preview annotations directly.

  • 4. Tune the render delay: small global default, per-preview overrides. A shot is taken a fixed number of ms after the composable launches. Too short and a screen loading a network image / running a query / starting an animation is captured half-painted; too long and a big catalog wastes minutes. Set a low global default near the floor and pay extra only where it is earned:
kotlin
// app module build.gradle.kts
hotSwanCompiler {
    preview {
        renderDelayMs.set(1000L)        // ships at 2500L; most previews are static layout — keep the baseline low
        demoMode.set(true)              // pin status bar for deterministic shots
        sdkModeEnabled.set(false)       // true => KDoc + parameter tables in the catalog (design systems)
    }
}
kotlin
// per-preview override for the slow minority (network/DB/animation): 3000–5000 ms is typical
@Preview
@PreviewScreenshot(renderDelay = 4000)
@Composable
private fun PokemonDetailPreview() { AppTheme { PokemonDetail(pokemon = samplePokemon) } }

A preview with no @PreviewScreenshot falls back to the global value, so fast stays fast. If most of your previews are data-loading feature screens, the other valid choice is a higher global and overrides on the static minority — match the baseline to the majority.

  • 5. Run it in GitHub Actions on an emulator. captureAllPreviews is a normal Gradle task driving ADB, so it runs anywhere a managed Android device exists. The app must be installed and launched before the task runs:
yaml
# .github/workflows/preview-screenshots.yml
name: Preview Screenshots
on:
  workflow_dispatch:
  push: { branches: [ main ], paths: [ '**/*.kt', '**/*.xml' ] }
permissions: { contents: write, pages: write, id-token: write }
concurrency: { group: preview-screenshots, cancel-in-progress: true }

jobs:
  capture:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with: { distribution: zulu, java-version: 17 }
      - name: Enable KVM
        run: |
          echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
          sudo udevadm control --reload-rules && sudo udevadm trigger --name-match=kvm
      - run: ./gradlew :app:assembleDebug
      - run: rm -rf .hotswan/preview-captures        # so a deleted preview leaves the catalog
      - name: Run emulator and capture
        uses: reactivecircus/android-emulator-runner@v2
        with:
          api-level: 31
          arch: x86_64
          profile: pixel_6
          emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim
          disable-animations: true
          script: |
            adb install -r app/build/outputs/apk/debug/app-debug.apk
            adb shell am start -n com.example.app/.MainActivity
            sleep 10
            ./gradlew :app:captureAllPreviews
      - uses: actions/upload-artifact@v4
        if: always()                                  # keep whatever rendered even if one preview throws
        with: { name: preview-screenshots, path: .hotswan/preview-captures/, retention-days: 30 }

(Gradle Managed Devices is the equivalent if you prefer Google's built-in option — see the GMD skill. The runner action is just less config for a single device.)

  • 6. Deploy the catalog to GitHub Pages. A zip you download is not a team asset; a URL is. A second job publishes the captured directory:
yaml
  deploy:
    needs: capture
    runs-on: ubuntu-latest
    environment: { name: github-pages, url: '${{ steps.deployment.outputs.page_url }}' }
    steps:
      - uses: actions/download-artifact@v4
        with: { name: preview-screenshots, path: preview-captures }
      - uses: actions/configure-pages@v5
      - uses: actions/upload-pages-artifact@v3
        with: { path: preview-captures }
      - id: deployment
        uses: actions/deploy-pages@v4

Push to main → emulator boots → every @Preview is rendered and screenshotted → the HTML catalog is built → Pages serves the new version.

Show full SKILL.md (523 more words)Show less

Patterns

Pattern: capturing in CI without the app running
bash
# WRONG — captureAllPreviews on a fresh emulator with nothing installed
- uses: reactivecircus/android-emulator-runner@v2
  with:
    api-level: 31
    script: ./gradlew :app:captureAllPreviews
# WRONG because: HotSwanPreviewActivity renders inside the *running app's* process. With no APK
# installed and no Activity started, every launch fails and the catalog comes out empty.
bash
# RIGHT — build, install, launch, settle, then capture
    script: |
      adb install -r app/build/outputs/apk/debug/app-debug.apk
      adb shell am start -n com.example.app/.MainActivity
      sleep 10
      ./gradlew :app:captureAllPreviews
Pattern: one global render delay set high "to be safe"
kotlin
// WRONG
hotSwanCompiler { preview { renderDelayMs.set(5000L) } }
// WRONG because: every preview now costs 5 s. A 60-preview catalog wastes ~4 extra minutes per run
// to accommodate the handful that actually load remote data.
kotlin
// RIGHT — low global, opt into the cost where the pixels need it
hotSwanCompiler { preview { renderDelayMs.set(1000L); demoMode.set(true) } }

@Preview @PreviewScreenshot(renderDelay = 4000) @Composable
private fun NetworkImagePreview() { AppTheme { UserAvatar(imageUrl = "https://example.com/p.jpg") } }
Pattern: treating captureAllPreviews as a regression gate
kotlin
// WRONG — expecting captureAllPreviews to fail the build on a visual change
- run: ./gradlew captureAllPreviews   # then... assume it diffs against last run? it does not.
// WRONG because: captureAllPreviews produces a catalog; it does not store golden images or pixel-diff.
// Nothing fails when a screenshot changes.
kotlin
// RIGHT — pick the tool for the job; run both if you need both
// Pixel-diff regression gate, no emulator, fast: Paparazzi or Roborazzi (test class per composable, golden PNGs).
// Browsable device-rendered catalog for docs/design review: captureAllPreviews.
// Many projects run Paparazzi/Roborazzi on PRs as a gate AND captureAllPreviews on main for the catalog.

HotSwan captureAllPreviews vs Paparazzi / Roborazzi

AspectcaptureAllPreviews (HotSwan)Paparazzi / Roborazzi
RenderingReal device or emulator (ART)Host JVM, layoutlib
System barsIncluded (status + navigation)Not included
Runtime behaviorFull — network, image loading, DB, DI all executeUI shell only
Test code requiredNone — scans @Preview directlyOne test class per composable
OutputPNGs + searchable HTML catalog (module grouping, KDoc, params)PNGs
Pixel-diff regressionNot built inYes — the core feature
CI setupEmulator required (GitHub Actions / GMD supported)No emulator needed
Best forVisual cataloging, documentation, design reviewGolden-image regression testing

Mandatory rules

  • MUST build, install, and launch the debug app on the device/emulator before captureAllPreviews — it renders in the running app's process.
  • MUST keep the preview library on debugImplementation so HotSwanPreviewActivity never ships in release builds.
  • MUST set a low global renderDelayMs and use @PreviewScreenshot(renderDelay = …) only on previews that load remote data or settle animations — not a blanket high default.
  • MUST clear .hotswan/preview-captures/ before a CI run so deleted previews disappear from the catalog instead of lingering, and use if: always() on the artifact upload.
  • MUST NOT treat captureAllPreviews as a pixel-diff regression gate — it has no golden-image comparison. Pair it with Paparazzi/Roborazzi if you need that.
  • MUST NOT rely on host-JVM screenshot tools (Paparazzi/Roborazzi) when the screenshot must match device fonts, real image loading, GPU/AGSL effects, or system chrome — those need device rendering.
  • PREFERRED: enable demoMode so the status bar is deterministic across shots; enable sdkModeEnabled for design-system modules so the catalog carries KDoc + parameter tables.
  • PREFERRED: deploy the catalog to GitHub Pages so it has a stable URL non-engineers can open.

Verification

  • ./gradlew captureAllPreviews with the app running produces .hotswan/preview-captures/index.html and one PNG per @Preview.
  • The single-preview ADB recipe (am start … HotSwanPreviewActivity --es composable <FQN> + screencap) returns a non-empty PNG of that composable.
  • debugImplementation("com.github.skydoves.compose.hotswan:preview:…") (not implementation/releaseImplementation); a release build does not contain HotSwanPreviewActivity.
  • The CI job installs + launches the app before invoking captureAllPreviews; the uploaded artifact is non-empty on a green run.
  • The GitHub Pages deploy job runs needs: capture and the published URL shows the latest catalog after a push to main.
  • Slow previews (network/DB/animation) carry @PreviewScreenshot(renderDelay = …); the global renderDelayMs is near the floor for the static majority.

References

  • hotswan.dev/blog/compose-preview-screenshots-ci — skydoves, "Compose Preview Screenshots in CI: A Real Device Catalog on Every Commit" (single-preview ADB capture, captureAllPreviews, render-delay strategy, GitHub Actions + emulator-runner, GitHub Pages deploy, Paparazzi/Roborazzi comparison).
  • hotswan.dev/blog/compose-preview-driven-development — skydoves, "Compose Preview Driven Development with Instant Feedback" (Preview Runner, captureAllPreviews, why device rendering, CI workflow).
  • github.com/skydoves/compose-hotswan — the HotSwan Gradle compiler plugin (com.github.skydoves.compose.hotswan.compiler), the preview artifact, HotSwanPreviewActivity, the captureAllPreviews task, and the hotSwanCompiler { preview { … } } / @PreviewScreenshot API.
  • github.com/skydoves/pokedex-compose — a reference project running this exact setup (the screenshot.yml workflow and the published preview catalog).
  • developer.android.com/develop/ui/compose/tooling/previews — @Preview and @PreviewParameter (the annotations captureAllPreviews scans).
  • github.com/ReactiveCircus/android-emulator-runner — the GitHub Actions emulator step used to host a real Android image in CI.
  • Sibling skill: ../developing-with-compose-previews/SKILL.md — structuring @Preview functions so capturing them is worthwhile (state hoisting, @PreviewParameter, anti-patterns).
  • Cross-set: ../../../instrumentation/managed-devices/running-tests-on-gradle-managed-devices/SKILL.md — the Gradle Managed Devices alternative to android-emulator-runner for hosting the device in CI.

© skydoves, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in compose/preview/capturing-preview-screenshots-in-ci of skydoves/android-testing-skills.

Open the folder on GitHubat commit 8665ed5

Compare with similar skills

Capturing Preview Screenshots In CI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Capturing Preview Screenshots In CI compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Capturing Preview Screenshots In CI this skillskydoves/android-testing-skills334—~4.5kAutomated safety check: NotesApache-2.0
Git GitHub Opsc5inco/compose-pokedexer143—~1.3kAutomated safety check: PassMIT
Enforcing Stability In CIrosuH/EasyWatermark1.9k1 repos~4kAutomated safety check: PassApache-2.0
Android Developmentdpconde/claude-android-skill336—~1.7kAutomated safety check: PassMIT
Run Jetpack Android Appwordpress-mobile/WordPress-Android3.2k—~886Automated safety check: PassGPL-2.0
Orca Android Emulator Controlstablyai/orca89k—~558Automated safety check: PassApache-2.0

Similar skills

  • Git GitHub Ops

    c5inco/compose-pokedexer

    Handles Pokedexer Git and GitHub workflows: inspect changes, prepare commit messages, manage branches and pushes, and create or update issues and pull requests with safe file-based inputs.

    143 GitHub stars~1.3k tokensUpdated 7 days ago
    DevelopmentAuto-check passed
  • Enforcing Stability In CI

    rosuH/EasyWatermark

    A skill your agent uses to set up a CI gate that fails the build when Compose stability silently regresses, using the skydoves/compose-stability-analyzer Gradle plugin (primary) or the…

    1.9k GitHub starsUsed in 1 repo~4k tokens
    DevOps & CloudAuto-check passed
  • Android Development

    dpconde/claude-android-skill

    Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.

    336 GitHub stars~1.7k tokensUpdated 10 mo ago
    MobileAuto-check passed
  • Run Jetpack Android App

    wordpress-mobile/WordPress-Android

    Builds the Jetpack debug app with Gradle and installs it on a connected Android device or an emulator started from an available AVD.

    3.2k GitHub stars~886 tokensUpdated today
    MobileAuto-check passed
  • Android device and emulator control from inside Orca over adb, with the live device view in Orca's emulator pane. Use when driving an adb-connected emulator…

    89k GitHub stars~558 tokensUpdated today
    MobileAuto-check passed
  • Claude Android Ninja

    Drjacky/claude-android-ninja

    Build and migrate Android apps with Kotlin, Jetpack Compose, MVVM, Hilt, Room 3 (KSP, SQLiteDriver, Flow/suspend DAOs), Navigation3, and multi-module Gradle.

    124 GitHub stars~5.2k tokensUpdated 10 days ago
    MobileAuto-check passed

More from skydoves/android-testing-skills

All 50 skills in this repo
  • Asserting Bounds And Dimensions

    skydoves/android-testing-skills

    A skill your agent uses to verify Compose layout measurements from a UI test using assertWidthIsEqualTo, assertHeightIsEqualTo, assertWidthIsAtLeast, assertHeightIsAtLeast…

    334 GitHub stars~3.3k tokensUpdated 4 mo ago
    Auto-check passed
  • Asserting Node State And Text

    skydoves/android-testing-skills

    A skill your agent uses to verify a Compose semantics node's properties from a UI test using assertExists, assertDoesNotExist, assertIsDisplayed, assertIsNotDisplayed, assertIsDeactivated…

    334 GitHub stars~3.6k tokensUpdated 4 mo ago
    Auto-check passed
  • Capturing Screenshots And Screenrecord

    skydoves/android-testing-skills

    A skill your agent uses to capture visual artefacts from a device for test failures, golden image generation, QA repro, and demo videos.

    334 GitHub stars~3.7k tokensUpdated 4 mo ago
    Auto-check passed
  • Choosing Test Rule Vs Runtest

    skydoves/android-testing-skills

    A skill your agent uses to pick the correct Compose UI test entry point.

    334 GitHub stars~4.5k tokensUpdated 4 mo ago
    Auto-check passed
  • Choosing What To Test

    skydoves/android-testing-skills

    A skill your agent uses to pick which behaviors to cover in an Android test suite using Google's five-category state vocabulary plus the explicit "what NOT to test" list from…

    334 GitHub stars~4.6k tokensUpdated 4 mo ago
    Auto-check passed
  • Clicking And Scrolling

    skydoves/android-testing-skills

    A skill your agent uses to drive Jetpack Compose UI from tests with the high-level action APIs that do not go through a gesture builder — performClick, performScrollTo, performScrollToIndex…

    334 GitHub stars~3.6k tokensUpdated 4 mo ago
    Auto-check passed

Categories

Questions about Capturing Preview Screenshots In CI

What does Capturing Preview Screenshots In CI do?

A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI. Capturing Preview Screenshots In CI is an agent skill from skydoves/android-testing-skills. Use this skill to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.

When should I use Capturing Preview Screenshots In CI?

Capturing Preview Screenshots In CI fits situations like: render every Jetpack Compose @Preview as a screenshot on a real Android device; emulator and publish a browsable HTML catalog from CI; the user mentions captureAllPreviews; preview screenshots in CI.

How do I install Capturing Preview Screenshots In CI in Claude Code?

Run `npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a claude-code`. Or copy the skill folder (compose/preview/capturing-preview-screenshots-in-ci in skydoves/android-testing-skills) into .claude/skills/capturing-preview-screenshots-in-ci in your project. Claude Code loads it when a task matches its description.

How do I install Capturing Preview Screenshots In CI in Codex?

Run `npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a codex`. Or copy the skill folder (compose/preview/capturing-preview-screenshots-in-ci in skydoves/android-testing-skills) into .agents/skills/capturing-preview-screenshots-in-ci in your project. Codex loads it when a task matches its description.

Can I use Capturing Preview Screenshots In CI in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/capturing-preview-screenshots-in-ci, .gemini/skills/capturing-preview-screenshots-in-ci, .github/skills/capturing-preview-screenshots-in-ci and .opencode/skills/capturing-preview-screenshots-in-ci in your project.

What does Capturing Preview Screenshots In CI need to run?

Going by SKILL.md and its folder, Capturing Preview Screenshots In CI needs the command-line tools its instructions call (adb).

Does Capturing Preview Screenshots In CI access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Capturing Preview Screenshots In CI safe to install?

Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Capturing Preview Screenshots In CI use?

Capturing Preview Screenshots In CI is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Capturing Preview Screenshots In CI use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Capturing Preview Screenshots In CI?

Skills that share tags, products or a category with Capturing Preview Screenshots In CI: Git GitHub Ops (c5inco/compose-pokedexer, 143 stars), Enforcing Stability In CI (rosuH/EasyWatermark, 1.9k stars), Android Development (dpconde/claude-android-skill, 336 stars) and Run Jetpack Android App (wordpress-mobile/WordPress-Android, 3.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Capturing Preview Screenshots In CI?

skydoves (a GitHub user) maintains it in skydoves/android-testing-skills, which has 334 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on May 25, 2026.

Source: skydoves/android-testing-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.