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.
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.
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ci --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "capturing-preview-screenshots-in-ci" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ci into .claude/skills/capturing-preview-screenshots-in-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "capturing-preview-screenshots-in-ci", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ciType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ci --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/compose/preview/capturing-preview-screenshots-in-ci .agents/skills/capturing-preview-screenshots-in-ci && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "capturing-preview-screenshots-in-ci" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ci into .agents/skills/capturing-preview-screenshots-in-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "capturing-preview-screenshots-in-ci", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ci --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/compose/preview/capturing-preview-screenshots-in-ci .cursor/skills/capturing-preview-screenshots-in-ci && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "capturing-preview-screenshots-in-ci" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ci into .cursor/skills/capturing-preview-screenshots-in-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "capturing-preview-screenshots-in-ci", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/skydoves/android-testing-skills.git --path compose/preview/capturing-preview-screenshots-in-ci--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ci --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/compose/preview/capturing-preview-screenshots-in-ci .gemini/skills/capturing-preview-screenshots-in-ci && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "capturing-preview-screenshots-in-ci" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ci into .gemini/skills/capturing-preview-screenshots-in-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "capturing-preview-screenshots-in-ci", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ciInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/compose/preview/capturing-preview-screenshots-in-ci .github/skills/capturing-preview-screenshots-in-ci && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "capturing-preview-screenshots-in-ci" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ci into .github/skills/capturing-preview-screenshots-in-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "capturing-preview-screenshots-in-ci", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add skydoves/android-testing-skills --skill capturing-preview-screenshots-in-ci -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install skydoves/android-testing-skills capturing-preview-screenshots-in-ci --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/compose/preview/capturing-preview-screenshots-in-ci .opencode/skills/capturing-preview-screenshots-in-ci && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "capturing-preview-screenshots-in-ci" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/compose/preview/capturing-preview-screenshots-in-ci into .opencode/skills/capturing-preview-screenshots-in-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "capturing-preview-screenshots-in-ci", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
capturing-preview-screenshots-in-ciA 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. 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.
Read from SKILL.md and the folder at commit 8665ed5. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
adbFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
DE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rulessudo udevadm control --reload-rules && sudo udevadm trigger --name-match=kvmAutomated 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.
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.
.claude/skills/capturing-preview-screenshots-in-ci/SKILL.md (or your agent's skills folder).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.
./gradlew captureAllPreviews — render all @Previews and produce an HTML catalog.captureAllPreviews does not diff; that is Paparazzi's/Roborazzi's job. Run both if you need both — see the comparison table below.ComposeTestRule, finders) — use ../../setup/choosing-test-rule-vs-runtest/SKILL.md and the compose/finders/ skills.../developing-with-compose-previews/SKILL.md.captureAllPreviews drives the running app's process so previews render with the real dependency graph (Hilt/Koin, network, DB) and need no mocks.1.3.2 at time of writing):// 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
}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.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:
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:
./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.
// 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)
}
}// 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.
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:# .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.)
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.
# 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.# 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// 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.// 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") } }captureAllPreviews as a regression gate// 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.// 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.captureAllPreviews vs Paparazzi / Roborazzi| Aspect | captureAllPreviews (HotSwan) | Paparazzi / Roborazzi |
|---|---|---|
| Rendering | Real device or emulator (ART) | Host JVM, layoutlib |
| System bars | Included (status + navigation) | Not included |
| Runtime behavior | Full — network, image loading, DB, DI all execute | UI shell only |
| Test code required | None — scans @Preview directly | One test class per composable |
| Output | PNGs + searchable HTML catalog (module grouping, KDoc, params) | PNGs |
| Pixel-diff regression | Not built in | Yes — the core feature |
| CI setup | Emulator required (GitHub Actions / GMD supported) | No emulator needed |
| Best for | Visual cataloging, documentation, design review | Golden-image regression testing |
captureAllPreviews — it renders in the running app's process.debugImplementation so HotSwanPreviewActivity never ships in release builds.renderDelayMs and use @PreviewScreenshot(renderDelay = …) only on previews that load remote data or settle animations — not a blanket high default..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.captureAllPreviews as a pixel-diff regression gate — it has no golden-image comparison. Pair it with Paparazzi/Roborazzi if you need that.demoMode so the status bar is deterministic across shots; enable sdkModeEnabled for design-system modules so the catalog carries KDoc + parameter tables../gradlew captureAllPreviews with the app running produces .hotswan/preview-captures/index.html and one PNG per @Preview.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.captureAllPreviews; the uploaded artifact is non-empty on a green run.needs: capture and the published URL shows the latest catalog after a push to main.@PreviewScreenshot(renderDelay = …); the global renderDelayMs is near the floor for the static majority.captureAllPreviews, render-delay strategy, GitHub Actions + emulator-runner, GitHub Pages deploy, Paparazzi/Roborazzi comparison).captureAllPreviews, why device rendering, CI workflow).com.github.skydoves.compose.hotswan.compiler), the preview artifact, HotSwanPreviewActivity, the captureAllPreviews task, and the hotSwanCompiler { preview { … } } / @PreviewScreenshot API.screenshot.yml workflow and the published preview catalog).@Preview and @PreviewParameter (the annotations captureAllPreviews scans).../developing-with-compose-previews/SKILL.md — structuring @Preview functions so capturing them is worthwhile (state hoisting, @PreviewParameter, anti-patterns).../../../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
Just SKILL.md in compose/preview/capturing-preview-screenshots-in-ci of skydoves/android-testing-skills.
Open the folder on GitHubat commit 8665ed5
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Capturing Preview Screenshots In CI this skillskydoves/android-testing-skills | 334 | — | ~4.5k | Automated safety check: Notes | Apache-2.0 | |
| Git GitHub Opsc5inco/compose-pokedexer | 143 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Enforcing Stability In CIrosuH/EasyWatermark | 1.9k | 1 repos | ~4k | Automated safety check: Pass | Apache-2.0 | |
| Android Developmentdpconde/claude-android-skill | 336 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Run Jetpack Android Appwordpress-mobile/WordPress-Android | 3.2k | — | ~886 | Automated safety check: Pass | GPL-2.0 | |
| Orca Android Emulator Controlstablyai/orca | 89k | — | ~558 | Automated safety check: Pass | Apache-2.0 |
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.
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…
dpconde/claude-android-skill
Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.
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.
stablyai/orca
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…
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.
skydoves/android-testing-skills
A skill your agent uses to verify Compose layout measurements from a UI test using assertWidthIsEqualTo, assertHeightIsEqualTo, assertWidthIsAtLeast, assertHeightIsAtLeast…
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…
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.
skydoves/android-testing-skills
A skill your agent uses to pick the correct Compose UI test entry point.
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…
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…
Categories
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.
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.
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.
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.
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.
Going by SKILL.md and its folder, Capturing Preview Screenshots In CI needs the command-line tools its instructions call (adb).
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.
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.
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.
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.
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.
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.