Agent skill

Wear Compose M3

by jameshnsears in jameshnsears/QuoteUnquote

Expert guidance for working with Wear OS Compose Material3. An agent skill from jameshnsears/QuoteUnquote.

Apache-2.0Auto-check passedMobile

Install Wear Compose M3

skills CLI
$ npx skills add jameshnsears/QuoteUnquote --skill wear-compose-m3 -a claude-code

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

GitHub CLI
$ gh skill install jameshnsears/QuoteUnquote wear-compose-m3 --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/jameshnsears/QuoteUnquote.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/wear-compose-m3 .claude/skills/wear-compose-m3 && 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
wear-compose-m3
GitHub stars
100
Used in
1 other repo
Token cost
~3.2k tokens
SKILL.md length
1,030 words
Files
2 (incl. references)
Skills in repo
4
Repo updated
First seen
Licence
Apache-2.0

At a glance

Expert guidance for working with Wear OS Compose Material3. An agent skill from jameshnsears/QuoteUnquote.

  • Works in 4 steps: Prepare → Check the local cache → Network-based sample retrieval → …
  • Migrating Wear OS projects
  • SKILL.md covers Prerequisites and compatibility, Gotchas and Capabilities and tools
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Wear Compose M3 is an agent skill from jameshnsears/QuoteUnquote. Expert guidance for working with Wear OS Compose Material3. Use this skill when creating, updating or migrating Wear OS projects. This includes the androidx.wear.compose.material3, androidx.wear.compose.foundation and androidx.wear.compose.navigation3 libraries. Also working with core components such as AppScaffold, ScreenScaffold and TransformingLazyColumn. Migration from earlier versions such as Material 2.5 and Horologist.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/android/training/wearables/compose/migrate-to-material3.md`).

It sits in Mobile. It works with Android, Kotlin and Gradle. The repository describes itself as: A Quotations / Affirmations App Widget. The licence is Apache-2.0.

When your agent uses it

  • Migrating Wear OS projects

Example prompts

  • “/wear-compose-m3”

Workflow steps

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

  1. Prepare
  2. Check the local cache
  3. Network-based sample retrieval
  4. Read samples and implement

What it can do on your machine

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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are kotlin).

    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):

    • dl.google.com
    • developer.android.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

Wear Compose M3 loads about 3.2k tokens when it runs, and up to ~26k if it reads all its reference files. Until then it costs about 111 tokens; SKILL.md has 1,030 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~111
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~26k

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 jameshnsears/QuoteUnquote at commit 1e3f3b0, republished under its Apache-2.0 licence (© jameshnsears). 1,030 words, ~3,184 tokens.

Download SKILL.mdSave it as .claude/skills/wear-compose-m3/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
wear-compose-m3
description
Expert guidance for working with Wear OS Compose Material3. Use this skill when creating, updating or migrating Wear OS projects. This includes the androidx.wear.compose.material3, androidx.wear.compose.foundation and androidx.wear.compose.navigation3 libraries. Also working with core components such as AppScaffold, ScreenScaffold and TransformingLazyColumn. Migration from earlier versions such as Material 2.5 and Horologist.
license
Complete terms in LICENSE.txt
metadata.author
Google LLC
metadata.last-updated
2026-06-18
metadata.keywords
Wear OS, Compose, Material3, Horologist, TransformingLazyColumn, AppScaffold, ScreenScaffold

Prerequisites and compatibility

  1. Wear OS Compose Material3 version: If an internal tool is available to establish the latest stable version {VERSION} of androidx.wear.compose:compose-material3, use that tool.
  2. Strict compliance: If a version is listed as stable, you MUST use it, unless overridden by the user. Do not downgrade based on initial "Unresolved reference" errors in the editor or outdated web search results.
  3. Kotlin version: For Wear Compose Material3, use Kotlin 2.0.0 or higher.
  4. Compose compiler:
    • If Kotlin version is 2.0.0+ , the project must use the org.jetbrains.kotlin.plugin.compose Gradle plugin.
    • If Kotlin version is < 2.0.0 , the project must use kotlinCompilerExtensionVersion in composeOptions, matching the Compose to Kotlin Compatibility Map.
  5. Min SDK: Ensure minSdk is at least 25 (Wear OS 2.0).
  6. Sample extraction mandate: Wear Compose libraries ship with an additional JAR file which contains individual samples for each and every component. You MUST NOT propose code changes until the samples in Capability 2 are extracted to the local cache. Library source files are incomplete and NOT a substitute for these samples; bypassing extraction is an environment setup failure.

Gotchas

  1. Mandatory sync and validation: After updating versions in libs.versions.toml or build.gradle.kts, you must perform a Gradle sync before refactoring any code. This ensures the environment has resolved the libraries correctly.
  2. Prohibition of guessing (error protocol): If you encounter an 'Unresolved Reference' or API mismatch after a successful sync, do not attempt to 'fix' it by downgrading the library version.

Capabilities and tools

Capability 1: Migration

Use this guidance when migrating from an older version of Wear OS Compose or Horologist.

  1. Unless otherwise indicated by the developer, use the latest stable version of Wear Compose Material3 from {VERSION}.
  2. Read the migration guide.
  3. Use the official component mappings from the migration guide.
  4. Before refactoring any component (for example, Chip -> Button), check the parameter names, slot types, and "Expressive" design tokens.
  5. Do not use the Horologist Composables, Compose Layout, or Compose Material libraries.
  6. Always check against the component guidance in Capability 3.
  7. Expect screenshot tests to fail when a migration has been performed: Even when migrating to very similar components, expected defaults for padding and positioning will have changed. Do not seek to artificially match the pre-migration screenshot, but give preference to the Material3 defaults.
Capability 2: Component samples

Wear Compose includes individual component samples for each and every component, within the <artifact>-<version>-samples-sources.jar file. Gradle automatically downloads these JAR files along with the main library JAR when using any of compose-material3, compose-foundation or compose-navigation3.

Use the canonical component samples whenever adding or adjusting a Wear Compose Material3 component.

STRICT COMPLIANCE: Extraction is NOT optional. You are FORBIDDEN from implementing any code until samples are extracted and read. Bypassing this step with alternative search tools or by assuming library documentation is sufficient is a protocol breach. You MUST verify the local cache by reading a sample file before proceeding.

Step 1: Prepare
  1. Check the build.gradle.kts or libs.versions.toml to ensure the Wear Compose version matches {VERSION}.
  2. Ensure that the necessary dependencies are downloaded by doing a Gradle sync.
Step 2: Check the local cache
  1. Define the cache directory path: /tmp/wear-compose-samples/{VERSION}/. Do NOT choose your own different location.
  2. Check if this directory exists and contains subdirectories with .kt files.
    • IF YES (cache hit): Proceed to Step 4.
    • IF NO (cache miss): Proceed to Step 3.
Step 3: Network-based sample retrieval

Google Maven publishes a -samples-sources.jar alongside every library release. Download and extract it directly without needing a local Gradle sync or cache lookup.

  1. Determine the {VERSION} of androidx.wear.compose:compose-material3 from build.gradle.kts or libs.versions.toml.

  2. Define {ARTIFACT} as the items in the list ["material3", "foundation"]. Also include navigation3 if androidx.wear.compose.navigation3 is used.

  3. For each {ARTIFACT}, run the following commands to download and extract the samples:

    # Download the samples-sources JAR
    curl -sSL "https://dl.google.com/dl/android/maven2/androidx/wear/compose/compose-{ARTIFACT}/{VERSION}/compose-{ARTIFACT}-{VERSION}-samples-sources.jar" -o {ARTIFACT}-{VERSION}-samples.jar
    
    # Extract and flatten into the cache directory
    unzip -q -o {ARTIFACT}-{VERSION}-samples.jar -d /tmp/wear-compose-samples/{VERSION}/{ARTIFACT}/
    
    # Clean up
    rm {ARTIFACT}-{VERSION}-samples.jar
    
  4. If this works, proceed directly to step 4.

Show full SKILL.md (459 more words)Show less
Step 4: Read samples and implement
  1. Read the relevant .kt sample files.
  2. Use these official, version-matched samples as the source of truth for:
    • Required parameters and slot names.
    • Default styling and typography tokens.
    • Interactive behaviors (for example: onClick, onLongClick).
    • Component nesting (for example: AppScaffold -> ScreenScaffold).
Capability 3: Component guidance

Mandatory: Use this capability as a checklist against any component use. It provides more holistic guidance on how to use each component in practice, beyond the component syntax.

  1. AppScaffold and ScreenScaffold

    • [ ] Use AppScaffold as the outer container, with ScreenScaffold children.
    • [ ] Use only ONE AppScaffold and any number of ScreenScaffold.
  2. ScalingLazyColumn - Use TransformingLazyColumn instead.

  3. TransformingLazyColumn - You will need the following imports:

    kotlin
    import androidx.wear.compose.foundation.lazy.TransformingLazyColumn
    import androidx.wear.compose.foundation.lazy.TransformingLazyColumnDefaults
    import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
    // ...
    import androidx.wear.compose.material3.lazy.rememberTransformationSpec
    import androidx.wear.compose.material3.lazy.transformedHeight
    <br />

    Canonical example:

    kotlin
    val columnState = rememberTransformingLazyColumnState()
    val transformationSpec = rememberTransformationSpec()
    ScreenScaffold(
        scrollState = columnState
    ) { contentPadding ->
        TransformingLazyColumn(
            state = columnState,
            contentPadding = contentPadding
        ) {
            item {
                ListHeader(
                    modifier = Modifier
                        .fillMaxWidth()
                        .transformedHeight(this, transformationSpec)
                        .minimumVerticalContentPadding(ListHeaderDefaults.minimumTopListContentPadding),
                    transformation = SurfaceTransformation(transformationSpec)
                ) {
                    Text(text = "Header")
                }
            }
            // ... other items
            item {
                Button(
                    modifier = Modifier
                        .fillMaxWidth()
                        .transformedHeight(this, transformationSpec)
                        .minimumVerticalContentPadding(ButtonDefaults.minimumVerticalListContentPadding),
                    transformation = SurfaceTransformation(transformationSpec),
                    onClick = { /* ... */ },
                    icon = {
                        Icon(
                            imageVector = Icons.Default.Build,
                            contentDescription = "build",
                        )
                    },
                ) {
                    Text(
                        text = "Build",
                        maxLines = 1,
                        overflow = TextOverflow.Ellipsis,
                    )
                }
            }
        }
    }
    <br />
    • [ ] Use TransformingLazyColumn instead of ScalingLazyColumn.
    • [ ] You must pass the contentPadding parameter from ScreenScaffold to the TransformingLazyColumn.
    • [ ] Use the minimumVerticalContentPadding modifier to achieve required padding top and bottom.
      • This expects a value from defaults, such as ButtonDefaults, CardDefaults, `ListHeaderDefaults.
      • Note: This is a scoped modifier available within TransformingLazyColumnItemScope.
    • [ ] Ensure the list morphs and scales.
    • [ ] Use transformedHeight modifier.
    • [ ] Use transform = SurfaceTransform(...).
    • [ ] If configuring a list for snapping, use flingBehavior and rotaryScrollableBehavior together:
    kotlin
    val columnState = rememberTransformingLazyColumnState()
    ScreenScaffold(scrollState = columnState) { contentPadding ->
        TransformingLazyColumn(
            state = columnState,
            flingBehavior = TransformingLazyColumnDefaults.snapFlingBehavior(columnState),
            rotaryScrollableBehavior = RotaryScrollableDefaults.snapBehavior(columnState)
        ) {
            // ...
            // ...
        }
    }
    <br />
  4. ScreenScaffold

    • [ ] Guard the scrollIndicator with !LocalScrollCaptureInProgress.current.
  5. EdgeButton

    • [ ] Do NOT use as the final item within a TransformingLazyColumn. Instead, use the slot in ScreenScaffold.
    • [ ] When used in a TransformingLazyColumn, add the required overscroll behavior:
    kotlin
    val columnState = rememberTransformingLazyColumnState()
    ScreenScaffold(
        scrollState = columnState,
        edgeButton = {
            EdgeButton(
                onClick = { /* TODO */ },
                modifier = Modifier.scrollable(
                    columnState,
                    orientation = Orientation.Vertical,
                    reverseDirection = true,
                    // Apply overscroll to the EdgeButton for proper scrolling behavior.
                    overscrollEffect = rememberOverscrollEffect(),
                )
            ) {
                Text("More")
            }
        }
    ) { contentPadding ->
        TransformingLazyColumn(
            contentPadding = contentPadding,
            state = columnState,
        ) {
            // ...
            // ...
        }
    }
    <br />
  6. Column

    • [ ] USE as a direct child of ScreenScaffold if the screen is will never scroll, even with the largest system font.
    • [ ] Use TransformingLazyColumn instead for all other cases.
  7. Styles

    • [ ] Do NOT hard-code text sizes, use typography from MaterialTheme.
    • [ ] Do NOT hard-code colors, use colorScheme from MaterialTheme.
  8. Use component defaults:

    • [ ] Components such as Button have a corresponding ButtonDefaults object.
    • Check for and use the *Defaults object for any component when working with padding and styling values, in preference to hard-coded values.
  9. Use Wear specific previews:

    • [ ] WearPreviewDevices
    • [ ] WearPreviewFontScales
  10. Ambient mode

    • [ ] Use LocalAmbientModeManager instead of AmbientLifecycleObserver.
  11. Navigation

    • [ ] When adding navigation fresh, use Navigation3.
    • [ ] For Navigation3 in Wear OS, use SwipeDismissableSceneStrategy() from the Wear Compose compose-navigation3 library.

© jameshnsears, 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

SKILL.md and 1 other file (references) in .agents/skills/wear-compose-m3 of jameshnsears/QuoteUnquote.

  • SKILL.md
  • references/android/training/wearables/compose/migrate-to-material3.md

Open the folder on GitHubat commit 1e3f3b0

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 jameshnsears/QuoteUnquote, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Wear Compose M3 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.

Wear Compose M3 compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wear Compose M3 this skilljameshnsears/QuoteUnquote1001 repos~3.2kAutomated safety check: PassApache-2.0
Android Developmentdpconde/claude-android-skill336—~1.7kAutomated safety check: PassMIT
Claude Android NinjaDrjacky/claude-android-ninja124—~5.2kAutomated safety check: PassApache-2.0
Expo Brownfield Integrationmweinbach/agent-coworker1562 repos~900Automated safety check: NotesCustom licence
Jugg Android Dev Loopniki914/zafiro241—~2kAutomated safety check: PassMIT
Build Foremannekomangaorg/Neko2.8k—~807Automated safety check: PassApache-2.0

Similar skills

  • 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
  • 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
  • Expo Brownfield Integration

    mweinbach/agent-coworker

    Helps add Expo and React Native to an existing native iOS or Android app, and choose between a prebuilt AAR or XCFramework and a fully integrated build.

    156 GitHub starsUsed in 2 repos~900 tokens
    MobileAuto-check: notes
  • Jugg Android Dev Loop

    niki914/zafiro

    A skill your agent uses when editing source files (Java/Kotlin/XML/layout/AndroidManifest/Gradle) in a Android project, or when user asks to build/deploy/verify an Android app.

    241 GitHub stars~2k tokensUpdated today
    MobileAuto-check passed
  • Build Foreman

    nekomangaorg/Neko

    Optimizes Gradle build scripts, compilation times, and Android Studio sync performance.

    2.8k GitHub stars~807 tokensUpdated yesterday
    MobileAuto-check passed
  • Android Audio E2E

    hyochan/react-native-nitro-sound

    Build and run device-backed Android end-to-end checks for react-native-nitro-sound permissions, recording, playback, listeners, pause/resume, seek, speed, audio focus, lifecycle behavior, and rapid…

    961 GitHub stars~814 tokensUpdated 11 days ago
    MobileAuto-check passed

More from jameshnsears/QuoteUnquote

  • Perfetto SQL

    jameshnsears/QuoteUnquote

    Translates natural language data intents into syntactically valid Perfetto SQL queries and executes them against a local trace file.

    100 GitHub starsUsed in 2 repos~2.7k tokens
    Auto-check passed
  • Camera1 To Camerax

    jameshnsears/QuoteUnquote

    A skill your agent uses to migrate legacy Android camera implementations (Camera1 or raw Camera2 APIs) to CameraX.

    100 GitHub starsUsed in 1 repo~1.9k tokens
    Auto-check passed
  • Perfetto Trace Analysis

    jameshnsears/QuoteUnquote

    Analyzes Perfetto traces to find the root cause of latency, memory, or jank issues in Android apps.

    100 GitHub starsUsed in 2 repos~1.7k tokens
    Auto-check passed

Categories

Questions about Wear Compose M3

What does Wear Compose M3 do?

Expert guidance for working with Wear OS Compose Material3. An agent skill from jameshnsears/QuoteUnquote. Wear Compose M3 is an agent skill from jameshnsears/QuoteUnquote. Expert guidance for working with Wear OS Compose Material3.

When should I use Wear Compose M3?

Wear Compose M3 fits situations like: migrating Wear OS projects.

How do I install Wear Compose M3 in Claude Code?

Run `npx skills add jameshnsears/QuoteUnquote --skill wear-compose-m3 -a claude-code`. Or copy the skill folder (.agents/skills/wear-compose-m3 in jameshnsears/QuoteUnquote) into .claude/skills/wear-compose-m3 in your project. Claude Code loads it when a task matches its description.

How do I install Wear Compose M3 in Codex?

Run `npx skills add jameshnsears/QuoteUnquote --skill wear-compose-m3 -a codex`. Or copy the skill folder (.agents/skills/wear-compose-m3 in jameshnsears/QuoteUnquote) into .agents/skills/wear-compose-m3 in your project. Codex loads it when a task matches its description.

Can I use Wear Compose M3 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 jameshnsears/QuoteUnquote --skill wear-compose-m3 -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wear-compose-m3, .gemini/skills/wear-compose-m3, .github/skills/wear-compose-m3 and .opencode/skills/wear-compose-m3 in your project.

What does Wear Compose M3 need to run?

SKILL.md names no scripts, command-line tools or credentials: Wear Compose M3 is instructions for the agent only.

Does Wear Compose M3 access the network?

SKILL.md names 2 domains. As links in the text: dl.google.com and developer.android.com. This is read from the text; nothing was executed.

Is Wear Compose M3 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 Wear Compose M3 use?

Wear Compose M3 is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wear Compose M3 use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 22k tokens, read only when the agent opens those files.

What are the alternatives to Wear Compose M3?

Skills that share tags, products or a category with Wear Compose M3: Android Development (dpconde/claude-android-skill, 336 stars), Claude Android Ninja (Drjacky/claude-android-ninja, 124 stars), Expo Brownfield Integration (mweinbach/agent-coworker, 156 stars) and Jugg Android Dev Loop (niki914/zafiro, 241 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wear Compose M3?

jameshnsears (a GitHub user) maintains it in jameshnsears/QuoteUnquote, which has 100 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on August 27, 2026.

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