Agent skill

Tracing Recompositions At Runtime

by rosuH in rosuH/EasyWatermark

A skill your agent uses to instrument a Jetpack Compose composable with @TraceRecomposition from skydoves/compose-stability-analyzer so per-recomposition diffs (which state or parameter changed…

Apache-2.0Auto-check passedMobile

Install Tracing Recompositions At Runtime

skills CLI
$ npx skills add rosuH/EasyWatermark --skill tracing-recompositions-at-runtime -a claude-code

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

GitHub CLI
$ gh skill install rosuH/EasyWatermark tracing-recompositions-at-runtime --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/rosuH/EasyWatermark.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/tracing-recompositions-at-runtime .claude/skills/tracing-recompositions-at-runtime && 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
tracing-recompositions-at-runtime
GitHub stars
1.9k
Used in
1 other repo
Token cost
~4.6k tokens
SKILL.md length
1,480 words
Files
1
Skills in repo
28
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses to instrument a Jetpack Compose composable with @TraceRecomposition from skydoves/compose-stability-analyzer so per-recomposition diffs (which state or parameter changed…

  • Works in 8 steps: Apply the Gradle plugin → Configure the analyzer → Annotate the composables to trace → …
  • Parameter changed
  • SKILL.md covers When to use this skill, When NOT to use this skill, Prerequisites and Workflow, plus 4 more sections
  • Calls adb

What it does

Tracing Recompositions At Runtime is an agent skill from rosuH/EasyWatermark. Use this skill to instrument a Jetpack Compose composable with @TraceRecomposition from skydoves/compose-stability-analyzer so per-recomposition diffs (which state or parameter changed, what value transition) print to logcat under the Recomposition tag. Works in release-with-debug-symbols builds where Android Studio Layout Inspector cannot reach, and feeds the IntelliJ / Android Studio plugin's live recomposition heatmap (green under 10, yellow 10–50, red 50+). Covers the Gradle plugin setup, the…

Its SKILL.md is about 4.6k 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 Android development and Mobile testing and debugging. It works with Gradle, JetBrains IDEs and Jetpack Compose. The repository describes itself as: 🔒 🖼 Securely, easily add a watermark to your sensitive photos. 安全、简单地为你的敏感照片添加水印,防止被人泄露、利用. The licence is Apache-2.0.

When your agent uses it

  • Parameter changed
  • What value transition) print to logcat under the Recomposition tag
  • The user mentions @TraceRecomposition
  • Trace recomposition

Example prompts

  • “trace recomposition”
  • “compose-stability-analyzer”
  • “recomposition logcat”
  • “/tracing-recompositions-at-runtime”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Apply the Gradle plugin
  2. Configure the analyzer
  3. Annotate the composables to trace
  4. Add the runtime toggle in Application.onCreate()
  5. Reproduce the symptom and read logcat
  6. Open the live heatmap in Android Studio (optional)
  7. Chain back to the upstream fix
  8. Gate against future regressions in CI

What it can do on your machine

Read from SKILL.md and the folder at commit 61223db. 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

    Links to these hosts (documentation or services it may open):

    • medium.com
    • developer.android.com
    • github.com

    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

Tracing Recompositions At Runtime loads about 4.6k tokens when it runs. Until then it costs about 246 tokens; SKILL.md has 1,480 words of instructions outside code blocks.

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

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 passed

The automated check found no risky patterns in SKILL.md.

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 rosuH/EasyWatermark at commit 61223db, republished under its Apache-2.0 licence (© rosuH). 1,480 words, ~4,567 tokens.

Download SKILL.mdSave it as .claude/skills/tracing-recompositions-at-runtime/SKILL.md (or your agent's skills folder).
name
tracing-recompositions-at-runtime
description
Use this skill to instrument a Jetpack Compose composable with `@TraceRecomposition` from `skydoves/compose-stability-analyzer` so per-recomposition diffs (which state or parameter changed, what value transition) print to logcat under the `Recomposition` tag. Works in release-with-debug-symbols builds where Android Studio Layout Inspector cannot reach, and feeds the IntelliJ / Android Studio plugin's live recomposition heatmap (green under 10, yellow 10–50, red 50+). Covers the Gradle plugin setup, the `ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG)` runtime gate that keeps the instrumentation out of production, and the handoff to debug-time Layout Inspector and CI `stabilityCheck`. Use when the user mentions `@TraceRecomposition`, "trace recomposition", "compose-stability-analyzer", "recomposition logcat", "recomposition heatmap", "release-mode recomposition counts", or needs to confirm a stability fix in a release-like build.
license
Apache-2.0. See LICENSE for complete terms.
metadata.author
Jaewoong Eum (skydoves)
metadata.keywords
jetpack-compose, performance, recomposition, trace-recomposition, compose-stability-analyzer, logcat, heatmap, runtime-tracing

Tracing Recompositions at Runtime — @TraceRecomposition, logcat, and the live heatmap

Layout Inspector counts recompositions and surfaces Argument Change Reasons, but it works only in debug, where Live Literals and the interpreted Compose runtime inflate counts. @TraceRecomposition from skydoves/compose-stability-analyzer instruments a composable at compile time and emits per-recomposition diffs (which state changed, what value transition) to logcat under the Recomposition tag. The instrumentation works in any build the developer enables it for — including release-with-debug-symbols — and feeds the IntelliJ / Android Studio plugin's live recomposition heatmap.

This skill is the release-mode complement to ../../recomposition/debugging-recompositions/SKILL.md. Layout Inspector is debug-only, fast to set up, and good for the first triage. @TraceRecomposition is the ground-truth confirmation: instrument the suspect composable, ship a release+R8 build of the dev APK, run the user journey, and read the per-recomposition log lines.

When to use this skill

  • A composable recomposes more than expected and Layout Inspector counts are inconclusive (the count differs between debug and release, or the suspect is an inline composable not covered by Layout Inspector).
  • A stability or strong-skipping fix needs to be confirmed against a release-equivalent build before merging.
  • A developer wants per-state-and-per-parameter change diffs printed inline rather than clicking through the Layout Inspector tree.
  • A team wants to baseline a composable's recomposition count for an SLO ("PriceTicker recomposes ≤ once per price update; never per parent tick").
  • The user mentions @TraceRecomposition, "trace recomposition", "compose-stability-analyzer", "recomposition logcat", "recomposition heatmap", or "release-mode recomposition".

When NOT to use this skill

  • The developer just wants recomposition counts in debug — Layout Inspector is faster to set up. See ../../recomposition/debugging-recompositions/SKILL.md.
  • The build is a production release with no diagnosis intent — the instrumentation must be gated off. See the runtime-toggle pattern below.
  • The team needs a CI gate that fails on future stability regressions — runtime tracing is for diagnosis; gating is ../../stability/enforcing-stability-in-ci/SKILL.md (stabilityCheck).
  • The need is per-frame timing or end-to-end user-perceived perf, not recomposition counts — that is ../generating-baseline-profiles/SKILL.md with MacrobenchmarkRule + FrameTimingMetric.

Prerequisites

  • The Gradle plugin com.github.skydoves.compose.stability.analyzer (latest, v0.7.3+) added to the module that owns the composables to instrument.
  • An Application subclass declared in the manifest, so ComposeStabilityAnalyzer.setEnabled(...) can be called from onCreate().
  • Compose Compiler reachable from the same module — org.jetbrains.kotlin.plugin.compose applied (Kotlin 2.0+).
  • A BuildConfig field or feature flag the runtime toggle can read. BuildConfig.DEBUG works; a custom BuildConfig.ENABLE_RECOMPOSITION_TRACE is preferred for production-style profiling builds.
  • For the IntelliJ / Android Studio heatmap: the compose-stability-analyzer plugin installed from the JetBrains marketplace (or built locally from the GitHub repo).
  • Familiarity with ../../recomposition/debugging-recompositions/SKILL.md so the developer has already named the suspect composable in debug before reaching for runtime tracing.

Workflow

1. Apply the Gradle plugin

In the module's build.gradle.kts:

kotlin
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("org.jetbrains.kotlin.plugin.compose")
    alias(libs.plugins.compose.stability.analyzer)
}

In gradle/libs.versions.toml:

toml
[versions]
composeStabilityAnalyzer = "0.7.3"

[plugins]
compose-stability-analyzer = { id = "com.github.skydoves.compose.stability.analyzer", version.ref = "composeStabilityAnalyzer" }
2. Configure the analyzer

Same build.gradle.kts, alongside the plugins block:

kotlin
composeStabilityAnalyzer {
    enabled.set(true) // compile-time switch; runtime toggle below gates emission
}

enabled.set(true) controls whether the compiler weaves in the instrumentation. With enabled.set(false) no @TraceRecomposition annotations have any effect. Leaving it on across all build types is fine — the runtime toggle is the actual production gate.

3. Annotate the composables to trace
kotlin
import com.skydoves.compose.stability.runtime.TraceRecomposition

@TraceRecomposition(traceStates = true)
@Composable
fun PriceTicker(price: Price) {
    Text(price.formatted)
}

traceStates = true extends the diff to mutableStateOf reads inside the composable body, not just parameters. Start with true for first investigation; flip to false once the cause is known to keep logs compact.

4. Add the runtime toggle in Application.onCreate()
kotlin
import com.skydoves.compose.stability.runtime.ComposeStabilityAnalyzer

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG)
    }
}

Without this call, every annotated composable still emits to logcat — including in release. Gate the toggle behind BuildConfig.DEBUG or a custom BuildConfig.ENABLE_RECOMPOSITION_TRACE so the production APK is silent.

5. Reproduce the symptom and read logcat
bash
adb logcat -s Recomposition:D

Sample output for an animated PriceTicker whose price changes from 99.0 to 99.5 (illustrative — exact log shape depends on the analyzer version):

D/Recomposition: [Recomposition #1] PriceTicker
D/Recomposition:   ├─ [param] price: Price changed (Price(99.0) → Price(99.5))
D/Recomposition: [Recomposition #2] PriceTicker
D/Recomposition:   ├─ [param] price: Price unchanged (skipped via strong-skipping equals)

The number after # is a per-instance counter — cumulative across the lifetime of the composable's restart scope. A composable that prints [Recomposition #50] while only being on screen for two seconds is the smoking gun.

6. Open the live heatmap in Android Studio (optional)

Install the Compose Stability Analyzer plugin from JetBrains Marketplace. With the plugin installed and the app running, the editor gutter next to each @TraceRecomposition-annotated composable shows a color-coded badge. Indicative thresholds (illustrative — see the plugin's settings panel for the current bands):

  • Green — fewer than 10 recompositions in the current session.
  • Yellow — 10 to 50 recompositions.
  • Red — more than 50 recompositions.

Click the badge to jump to a side panel listing each [Recomposition #N] entry with its diff. The panel mirrors logcat but groups by composable instance so the developer can spot which LazyColumn row is misbehaving without scrolling logcat.

7. Chain back to the upstream fix

Runtime tracing names the composable and the changing parameter. The fix lives elsewhere:

  • Param recomposes because the type is unstable → ../../stability/diagnosing-compose-stability/SKILL.md and ../../stability/stabilizing-compose-types/SKILL.md.
  • Param recomposes because of a captured lambda or Flow → ../../recomposition/using-strong-skipping-correctly/SKILL.md and ../../side-effects/collecting-flows-safely/SKILL.md.
  • State read happened in the wrong phase (Composition vs Layout vs Draw) → ../../recomposition/deferring-state-reads/SKILL.md.
  • Layout Inspector showed an Argument Change Reason status that needed to be acted on → ../../recomposition/debugging-recompositions/SKILL.md.

Once the fix lands, re-run the trace; the post-fix logcat should show one initial [Recomposition #1] and no subsequent entries during the same scenario.

8. Gate against future regressions in CI

@TraceRecomposition is for diagnosis. Preventing the next regression is a CI concern: enable stabilityCheck in CI per ../../stability/enforcing-stability-in-ci/SKILL.md, which fails the build when a previously-skippable composable becomes non-skippable.

Patterns

Pattern: annotate the suspect, run a release-with-debug build, read the diff
kotlin
// RIGHT
@TraceRecomposition(traceStates = true)
@Composable
fun PriceTicker(price: Price) {
    Text(price.formatted)
}

Sample logcat output (illustrative — exact log shape depends on the analyzer version; the price changes once per second; the surrounding row recomposes once per parent tick):

D/Recomposition: [Recomposition #3] PriceTicker
D/Recomposition:   ├─ [param] price: Price changed (Price(99.0) → Price(99.5))
D/Recomposition: [Recomposition #4] PriceTicker
D/Recomposition:   ├─ [param] price: Price unchanged
D/Recomposition:   ├─ [reason] parent restart scope re-invoked; strong-skipping equals matched

The second entry is the desirable shape: parent ticked, the equals() guard fired, body skipped.

Show full SKILL.md (575 more words)Show less
Pattern: gate the runtime toggle on a build flag
kotlin
// WRONG
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        // ComposeStabilityAnalyzer.setEnabled(...) is never called.
        // Every annotated composable emits to logcat in every build, including release.
    }
}
// WRONG because: shipping with tracing enabled adds logcat I/O on every recomposition,
// which adds nontrivial overhead on hot composables (LazyColumn rows in particular)
// and pollutes user-installed-app logs on shared devices.
kotlin
// RIGHT
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG)
    }
}

For a release-with-debug-symbols profiling APK, prefer a dedicated flag over BuildConfig.DEBUG:

kotlin
// RIGHT — explicit profiling flag, decoupled from debug
ComposeStabilityAnalyzer.setEnabled(BuildConfig.ENABLE_RECOMPOSITION_TRACE)
Pattern: do not ship @TraceRecomposition annotations in production releases
kotlin
// WRONG
// Production release with @TraceRecomposition still annotated on hot composables and
// ComposeStabilityAnalyzer.setEnabled(true) hard-coded in Application.
// WRONG because: logcat I/O on every recomposition adds nontrivial overhead on hot
// composables. The instrumentation also captures parameter values into log strings,
// which can leak PII if a composable receives a user model.
kotlin
// RIGHT — annotation present, runtime gate keeps it dormant in release
@TraceRecomposition(traceStates = true)
@Composable
fun PriceTicker(price: Price) { Text(price.formatted) }

// Application:
ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG) // dormant in release
Pattern: dial back traceStates once the cause is known
kotlin
// First investigation — verbose
@TraceRecomposition(traceStates = true)
@Composable
fun Feed(state: FeedState) { /* ... */ }
kotlin
// Cause identified, fix shipped, keep the annotation as a tripwire — quieter
@TraceRecomposition(traceStates = false)
@Composable
fun Feed(state: FeedState) { /* ... */ }

traceStates = true logs every mutableStateOf read transition inside the body. That is gold for first triage and noise once the cause is known. Toggling to false keeps the per-recomposition counter (still useful as a tripwire) without the per-state diff.

Pattern: pair runtime tracing with the CI stability gate

@TraceRecomposition finds the regression a developer is chasing right now. It does nothing about the regression a teammate ships next week. Pair it with stabilityCheck:

text
# RIGHT — both layers in place
- @TraceRecomposition annotates suspect composables; runtime toggle gated on BuildConfig.DEBUG.
- ./gradlew :app:stabilityCheck runs in CI per ../../stability/enforcing-stability-in-ci/SKILL.md.
- The .stability baseline updates only after a deliberate review.
text
# WRONG — diagnosis without prevention
- @TraceRecomposition is the only mechanism in place.
- Next PR introduces an unstable type; nothing in CI catches it; the perf regression
  ships and is found again at runtime weeks later.

Mandatory rules

  • MUST gate ComposeStabilityAnalyzer.setEnabled(...) on a build config field (BuildConfig.DEBUG or a dedicated BuildConfig.ENABLE_RECOMPOSITION_TRACE) or a feature flag. Never hard-code setEnabled(true).
  • MUST combine runtime tracing with the stabilityCheck CI gate from ../../stability/enforcing-stability-in-ci/SKILL.md. Runtime tracing is for diagnosis; CI gating prevents the next regression. One without the other is half a workflow.
  • MUST NOT ship a production release with @TraceRecomposition instrumentation enabled. The annotation may remain on composables, but ComposeStabilityAnalyzer.setEnabled(...) MUST resolve to false in the production build.
  • MUST NOT treat the [Recomposition #N] count as a hard SLO without a context (which scenario? which device? release or debug?). Track the count delta across a fixed scenario instead — "post-fix the price-ticker scenario emits 1 entry vs pre-fix 30".
  • MUST name both the composable and the changing parameter when reporting a finding ("PriceTicker recomposes per parent tick because price is reported as Changed, but the Price data class is @Immutable and equals() should match"). "It recomposes a lot" is not a finding.
  • PREFERRED: start with traceStates = true for first investigation (richer logs); set to false once the cause is known so the trace becomes a quieter tripwire.
  • PREFERRED: install the IntelliJ / Android Studio plugin to get the gutter heatmap (illustrative bands: green <10, yellow 10–50, red 50+ — confirm against the plugin's current settings) — it surfaces which composable is the offender without grepping logcat.
  • PREFERRED: keep @TraceRecomposition annotations on a small, deliberate set of composables (the screen's hot composables, the LazyColumn row composable). Annotating every composable defeats the signal-to-noise ratio of the heatmap.

Verification

  • com.github.skydoves.compose.stability.analyzer plugin applied to the module that owns the composables to instrument.
  • composeStabilityAnalyzer { enabled.set(true) } configured.
  • Application.onCreate() calls ComposeStabilityAnalyzer.setEnabled(BuildConfig.DEBUG) (or another build-flag gate). The call is not hard-coded true.
  • At least one composable annotated with @TraceRecomposition(traceStates = true).
  • adb logcat -s Recomposition:D prints [Recomposition #N] <ComposableName> lines while reproducing the scenario.
  • Each emitted line names a parameter or state and reports changed (oldValue → newValue) or unchanged.
  • In a release build (or with the gate flipped off), adb logcat -s Recomposition:D prints nothing — the instrumentation is dormant.
  • CI stability gate (./gradlew :app:stabilityCheck) is configured per ../../stability/enforcing-stability-in-ci/SKILL.md so the next regression is caught before it ships.

References

For the debug-time entry point with Layout Inspector and Argument Change Reasons, see ../../recomposition/debugging-recompositions/SKILL.md. For the CI gate that prevents the next stability regression, see ../../stability/enforcing-stability-in-ci/SKILL.md. For acting on the cause once the offending parameter is named, see ../../stability/diagnosing-compose-stability/SKILL.md, ../../stability/stabilizing-compose-types/SKILL.md, ../../recomposition/using-strong-skipping-correctly/SKILL.md, and ../../recomposition/deferring-state-reads/SKILL.md. For end-to-end user-perceived perf measurement (frame timing, cold startup), see ../generating-baseline-profiles/SKILL.md.

© rosuH, 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 .agents/skills/tracing-recompositions-at-runtime of rosuH/EasyWatermark.

Open the folder on GitHubat commit 61223db

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in rosuH/EasyWatermark, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Tracing Recompositions At Runtime 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.

Tracing Recompositions At Runtime compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tracing Recompositions At Runtime this skillrosuH/EasyWatermark1.9k1 repos~4.6kAutomated safety check: PassApache-2.0
Capturing Preview Screenshots In CIskydoves/android-testing-skills334—~4.5kAutomated safety check: NotesApache-2.0
Compose Multiplatform Patternsmonta-app/ocpp-emulator1805 repos~2kAutomated 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

  • Capturing Preview Screenshots In CI

    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.

    334 GitHub stars~4.5k tokensUpdated 4 mo ago
    MobileAuto-check: notes
  • Compose Multiplatform Patterns

    monta-app/ocpp-emulator

    Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.

    180 GitHub starsUsed in 5 repos~2k tokens
    MobileAuto-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 yesterday
    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 11 days ago
    MobileAuto-check passed

More from rosuH/EasyWatermark

All 23 skills in this repo
  • Deferring State Reads

    rosuH/EasyWatermark

    A skill your agent uses to push frequently-changing Jetpack Compose state reads (scroll position, animation values, drag offsets) out of the Composition phase and down into Layout or Draw using…

    1.9k GitHub starsUsed in 1 repo~3.8k tokens
    Auto-check passed
  • Diagnosing Compose Stability

    rosuH/EasyWatermark

    A skill your agent uses to diagnose Jetpack Compose stability problems by enabling and reading the Compose Compiler Reports (classes.txt, composables.txt, composables.csv, module.json).

    1.9k GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check passed
  • Generating Baseline Profiles

    rosuH/EasyWatermark

    A skill your agent uses to generate and measure Jetpack Compose Baseline Profiles end-to-end with the AGP 8.2+ Baseline Profile Generator module and the Macrobenchmark harness.

    1.9k GitHub starsUsed in 1 repo~5k tokens
    Auto-check passed
  • Migrating To Modifier Node

    rosuH/EasyWatermark

    A skill your agent uses to author new custom Jetpack Compose modifiers and migrate legacy ones from Modifier.composed { } to Modifier.Node + ModifierNodeElement<T.

    1.9k GitHub starsUsed in 1 repo~5k tokens
    Auto-check passed
  • Stabilizing Compose Types

    rosuH/EasyWatermark

    A skill your agent uses to fix unstable Jetpack Compose types once a stability diagnosis has identified them.

    1.9k GitHub starsUsed in 1 repo~4.4k tokens
    Auto-check passed
  • A skill your agent uses to explain why the Compose compiler classified a class or composable parameter as stable, runtime, unknown, or unstable.

    1.9k GitHub starsUsed in 1 repo~4.3k tokens
    Auto-check passed

Categories

Questions about Tracing Recompositions At Runtime

What does Tracing Recompositions At Runtime do?

A skill your agent uses to instrument a Jetpack Compose composable with @TraceRecomposition from skydoves/compose-stability-analyzer so per-recomposition diffs (which state or parameter changed…. Tracing Recompositions At Runtime is an agent skill from rosuH/EasyWatermark. Use this skill to instrument a Jetpack Compose composable with @TraceRecomposition from skydoves/compose-stability-analyzer so per-recomposition diffs (which state or parameter changed, what value transition) print to logcat under the Recomposition tag.

When should I use Tracing Recompositions At Runtime?

Tracing Recompositions At Runtime fits situations like: parameter changed; what value transition) print to logcat under the Recomposition tag; the user mentions @TraceRecomposition; trace recomposition.

How do I install Tracing Recompositions At Runtime in Claude Code?

Run `npx skills add rosuH/EasyWatermark --skill tracing-recompositions-at-runtime -a claude-code`. Or copy the skill folder (.agents/skills/tracing-recompositions-at-runtime in rosuH/EasyWatermark) into .claude/skills/tracing-recompositions-at-runtime in your project. Claude Code loads it when a task matches its description.

How do I install Tracing Recompositions At Runtime in Codex?

Run `npx skills add rosuH/EasyWatermark --skill tracing-recompositions-at-runtime -a codex`. Or copy the skill folder (.agents/skills/tracing-recompositions-at-runtime in rosuH/EasyWatermark) into .agents/skills/tracing-recompositions-at-runtime in your project. Codex loads it when a task matches its description.

Can I use Tracing Recompositions At Runtime 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 rosuH/EasyWatermark --skill tracing-recompositions-at-runtime -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tracing-recompositions-at-runtime, .gemini/skills/tracing-recompositions-at-runtime, .github/skills/tracing-recompositions-at-runtime and .opencode/skills/tracing-recompositions-at-runtime in your project.

What does Tracing Recompositions At Runtime need to run?

Going by SKILL.md and its folder, Tracing Recompositions At Runtime needs the command-line tools its instructions call (adb).

Does Tracing Recompositions At Runtime access the network?

SKILL.md names 3 domains. As links in the text: medium.com, developer.android.com and github.com. This is read from the text; nothing was executed.

Is Tracing Recompositions At Runtime safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Tracing Recompositions At Runtime use?

Tracing Recompositions At Runtime 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 Tracing Recompositions At Runtime use?

About 4.6k 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 Tracing Recompositions At Runtime?

Skills that share tags, products or a category with Tracing Recompositions At Runtime: Capturing Preview Screenshots In CI (skydoves/android-testing-skills, 334 stars), Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 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 Tracing Recompositions At Runtime?

rosuH (a GitHub user) maintains it in rosuH/EasyWatermark, which has 1,895 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 10, 2026.

Source: rosuH/EasyWatermark on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.