Agent skill

Enforcing Stability In CI

by rosuH in 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…

Apache-2.0Auto-check passedDevOps & Cloud

Install Enforcing Stability In CI

skills CLI
$ npx skills add rosuH/EasyWatermark --skill enforcing-stability-in-ci -a claude-code

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

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

At a glance

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…

  • Works in 7 steps: Apply the plugin → Configure the DSL block → Generate the baseline locally → …
  • Set up a CI gate that fails the build when Compose stability silently regresses
  • SKILL.md covers When to use this skill, When NOT to use this skill, Prerequisites and Workflow, plus 4 more sections
  • Calls git

What it does

Enforcing Stability In CI is an agent skill from rosuH/EasyWatermark. Use this skill 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 j-roskopf/ComposeGuard plugin (alternative for non-Android multiplatform). Covers applying com.github.skydoves.compose.stability.analyzer, configuring the composeStabilityAnalyzer { stabilityValidation { ... } } DSL, generating a .stability baseline with :stabilityDump, committing it to version control, and wiring :stabilityCheck into a…

Its SKILL.md is about 4k 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 DevOps & Cloud, covering Git workflow, Site reliability engineering and Mobile performance. It works with Gradle, Android, GitHub and GitHub Actions. 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

  • Set up a CI gate that fails the build when Compose stability silently regresses
  • Using the skydoves/compose-stability-analyzer Gradle plugin (primary)
  • The j-roskopf/ComposeGuard plugin (alternative for non-Android multiplatform)
  • The team wants a stability SLO

Example prompts

  • “fail the build on stability regression”
  • “/enforcing-stability-in-ci”

Workflow steps

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

  1. Apply the plugin
  2. Configure the DSL block
  3. Generate the baseline locally
  4. Wire stabilityCheck into CI
  5. Handle a regression
  6. Tune ignores conservatively
  7. Alternate: ComposeGuard for multiplatform / non-Android

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:

    • git

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

    • github.com
    • developer.android.com
    • medium.com
    • chrisbanes.me

    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

Enforcing Stability In CI loads about 4k tokens when it runs. Until then it costs about 228 tokens; SKILL.md has 1,324 words of instructions outside code blocks.

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

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,324 words, ~4,035 tokens.

Download SKILL.mdSave it as .claude/skills/enforcing-stability-in-ci/SKILL.md (or your agent's skills folder).
name
enforcing-stability-in-ci
description
Use this skill 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 `j-roskopf/ComposeGuard` plugin (alternative for non-Android multiplatform). Covers applying `com.github.skydoves.compose.stability.analyzer`, configuring the `composeStabilityAnalyzer { stabilityValidation { ... } }` DSL, generating a `.stability` baseline with `:stabilityDump`, committing it to version control, and wiring `:stabilityCheck` into a GitHub Actions or other CI job. Use when the team wants a stability SLO, when an unstable parameter slipped into a shared data class and went unnoticed until jank was reported, when migrating a large app to strong skipping, or when the user mentions stabilityCheck, stabilityDump, baseline drift, ComposeGuard, or "fail the build on stability regression".
license
Apache-2.0. See LICENSE for complete terms.
metadata.author
Jaewoong Eum (skydoves)
metadata.keywords
jetpack-compose, performance, stability, ci, gradle-plugin, stability-baseline, compose-stability-analyzer, composeguard, regression-prevention, github-actions

Enforcing Stability in CI — make stability regressions fail the build

Stability is a property that silently regresses. A new var in a shared data class can disable skipping across dozens of screens, and nothing in the build output complains. Treat stability like binary compatibility: commit a baseline, diff it on every PR, fail the build when the diff goes the wrong way. This skill sets that gate up using the skydoves/compose-stability-analyzer Gradle plugin and points to j-roskopf/ComposeGuard for non-Android multiplatform projects.

When to use this skill

  • The team wants a stability service-level objective enforced in CI, not a manual check.
  • A PR introduced an unstable parameter and nobody noticed until field reports of dropped frames came in.
  • Migrating a large app to strong skipping and need a regression net while refactoring.
  • Standardizing stability practice across a monorepo with many feature modules.
  • The user mentions stabilityCheck, stabilityDump, baseline drift, ComposeGuard, or "fail the build on stability regression".

When NOT to use this skill

  • A single-developer throwaway prototype. The baseline maintenance cost is not worth it.
  • Stability has not been diagnosed at all yet. Run ../diagnosing-compose-stability/SKILL.md first to make sure the current state is acceptable; baselining a broken state just locks the brokenness in.
  • The conceptual question is "why did the compiler classify X as Y?". Use ../understanding-stability-inference/SKILL.md.

Prerequisites

  • Kotlin 2.0+ with the Compose compiler Gradle plugin (org.jetbrains.kotlin.plugin.compose). Strong skipping is default on.
  • Gradle 8+.
  • A working CI pipeline that already runs ./gradlew assemble or equivalent.
  • Compose Compiler reports already understood (read ../diagnosing-compose-stability/SKILL.md first).
  • Ability to commit generated files to the repository (the .stability baseline must be checked in).

Workflow

1. Apply the plugin

Add the plugin to the version catalog and apply it to every module that ships UI composables.

toml
# gradle/libs.versions.toml
[versions]
compose-stability-analyzer = "0.7.3"

[plugins]
compose-stability-analyzer = { id = "com.github.skydoves.compose.stability.analyzer", version.ref = "compose-stability-analyzer" }
kotlin
// app/build.gradle.kts (and every UI feature module)
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
    alias(libs.plugins.compose.stability.analyzer)
}

The plugin must be applied after the Compose compiler plugin so it can read the same compiler output.

2. Configure the DSL block
kotlin
// app/build.gradle.kts
composeStabilityAnalyzer {
    enabled.set(true)

    stabilityValidation {
        enabled.set(true)
        outputDir.set(layout.projectDirectory.dir("stability"))
        failOnStabilityChange.set(true)
        ignoredPackages.set(
            listOf(
                "com.example.preview",     // @Preview-only composables
                "com.example.benchmark",   // microbenchmark fixtures
            )
        )
        ignoredClasses.set(
            listOf(
                "com.example.testing.FakeRepository",
            )
        )
        stabilityConfigurationFiles.add(
            rootProject.layout.projectDirectory.file("stability_config.conf")
        )
    }
}

Key settings:

  • outputDir — where .stability baseline files are written. Pick a path inside the module so it is naturally co-located with the source. Do not write to build/; that directory is gitignored and the baseline must be committed.
  • failOnStabilityChange — set to true for CI. Locally, developers may toggle this to false for iteration speed, but the committed value must be true.
  • ignoredPackages / ignoredClasses — exclude @Preview composables, benchmark fixtures, and test doubles that intentionally violate stability rules.
  • stabilityConfigurationFiles — point at the same stability_config.conf the Compose compiler uses, so the plugin's verdict matches the compiler's.
3. Generate the baseline locally
bash
./gradlew :app:stabilityDump
# or, for a specific variant:
./gradlew :app:debugStabilityDump

The plugin writes one .stability file per module per variant under outputDir. Commit them.

bash
git add app/stability/
git commit -m "chore(stability): seed baseline"

A single .stability entry looks like this:

text
@Composable
public fun com.example.CounterDisplay(count: com.example.MainViewModel): kotlin.Unit
  skippable: false
  restartable: true
  params:
    - count: RUNTIME (requires runtime check)

Each entry records the composable signature, skippable / restartable flags, and the per-parameter stability classification. The diff format is line-stable across runs, so PR reviewers see a meaningful change set.

4. Wire stabilityCheck into CI

Add a Gradle task invocation to the same job that compiles. Earlier signal beats a separate stage.

yaml
# .github/workflows/ci.yml
name: CI
on:
  pull_request:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17
      - uses: gradle/actions/setup-gradle@v4
      - name: Assemble and check stability
        run: ./gradlew assemble :app:stabilityCheck
      - name: Upload stability diff on failure
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: stability-diff
          path: app/build/reports/stability/

stabilityCheck reads the committed baseline, regenerates the current snapshot in build/, diffs them, and fails the task if any composable became less skippable or any class became less stable. The PR check turns red and the developer sees exactly which composable regressed and why.

5. Handle a regression

When stabilityCheck fails, the task output names the regressed composables and the new unstable parameter or class. The developer has two valid responses:

  • Fix the regression. Stabilize the offending type (var → val, List → ImmutableList, Flow parameter → collectAsStateWithLifecycle upstream). Re-run :stabilityDump locally to confirm the baseline is unchanged, then push.
  • Update the baseline with justification. Some regressions are acceptable (e.g. an interop boundary that must accept a Java POJO). Run :stabilityDump to update the baseline, commit it, and add a note in the PR description explaining why the regression is intentional. Code review enforces the justification — the diff is plain text and reviewable.

Treat baseline updates the same way the team treats binary-compatibility baseline updates: visible in code review, requires explanation.

6. Tune ignores conservatively

ignoredPackages and ignoredClasses exist for legitimate exemptions: previews, benchmarks, test doubles, generated code. Do not use them to silence regressions in production code. Every ignore entry needs a comment explaining why; reviewers should reject ignore additions that lack a rationale.

kotlin
// RIGHT
ignoredPackages.set(
    listOf(
        "com.example.preview",  // @Preview composables intentionally use mutable state for tooling
        "com.example.benchmark" // microbenchmark fixtures need fresh allocations per iteration
    )
)
kotlin
// WRONG
ignoredPackages.set(listOf("com.example.feature.cart"))
// WRONG because: silencing an entire production package hides real regressions in cart.
// The team will rediscover the lost skipping as field jank weeks later.
7. Alternate: ComposeGuard for multiplatform / non-Android

If the project is Compose Multiplatform (desktop, iOS via KMP) or otherwise outside the Android Gradle plugin's reach, use j-roskopf/ComposeGuard. It implements the same idea (commit a baseline, diff in CI, fail on regression) and exposes <variant>ComposeCompilerGenerate and <variant>ComposeCompilerCheck tasks. Wire it the same way as stabilityDump / stabilityCheck above. The skydoves plugin is the primary recommendation for Android-only projects because it integrates with @TraceRecomposition for runtime correlation.

Patterns

Pattern: commit the baseline, diff it in PRs
text
# RIGHT
app/stability/
  app-debug.stability   <-- committed
  app-release.stability <-- committed

# CI runs:
./gradlew :app:stabilityCheck   # diffs current vs committed baseline; fails on regression
text
# WRONG
app/build/stability/    <-- in build/, gitignored, never committed
# WRONG because: every CI run starts from a fresh build/, the baseline does not exist,
# stabilityCheck either no-ops or always passes. The gate is theater.
Pattern: failOnStabilityChange in CI, optional locally
kotlin
// RIGHT — committed default
composeStabilityAnalyzer {
    stabilityValidation {
        failOnStabilityChange.set(true)
    }
}
kotlin
// WRONG — committed default
composeStabilityAnalyzer {
    stabilityValidation {
        failOnStabilityChange.set(false)
    }
}
// WRONG because: turns the gate into an informational warning. Developers learn to ignore
// the warning. Stability regresses anyway. Set true and let CI block the merge.

Local override is fine via a Gradle property the developer can pass:

kotlin
failOnStabilityChange.set(
    providers.gradleProperty("composeStabilityStrict").orNull?.toBoolean() ?: true
)
bash
# Local fast iteration — opt out explicitly per invocation
./gradlew :app:stabilityCheck -PcomposeStabilityStrict=false
Show full SKILL.md (530 more words)Show less
Pattern: run stabilityCheck in the assemble job, not a separate one
yaml
# RIGHT — earlier signal, single workflow run
- run: ./gradlew assemble :app:stabilityCheck
yaml
# WRONG — separate jobs split signal
jobs:
  assemble:
    steps: [./gradlew assemble]
  stability:
    needs: assemble
    steps: [./gradlew :app:stabilityCheck]
text
# WRONG because: the stability job re-resolves dependencies and re-runs Compose compilation
# from scratch, doubling CI time and delaying the failure signal. Same job, single Gradle daemon.
Pattern: pair the CI gate with @TraceRecomposition at runtime

The plugin proves a class is classified stable. It does not prove the running app actually recomposes less. Pair the CI gate with runtime tracing (see ../../measurement/tracing-recompositions-at-runtime/SKILL.md) so the team has both signals: compile-time classification stability and runtime recomposition counts. A green CI gate with rising recomposition counts means a runtime-only invalidation source (e.g. a misplaced mutableStateOf read) that classification cannot catch.

Mandatory rules

  • MUST commit the .stability baseline file(s) to version control. A baseline that lives in build/ is not a baseline.
  • MUST set failOnStabilityChange.set(true) in the committed Gradle config so CI blocks merges on regression. Local opt-out via a Gradle property is acceptable; committing false is not.
  • MUST NOT add a package or class to ignoredPackages / ignoredClasses without a one-line comment explaining why. Unjustified ignores are how stability silently rots back in.
  • MUST NOT baseline a known-bad starting state and call the work done. Run ../diagnosing-compose-stability/SKILL.md and ../stabilizing-compose-types/SKILL.md first; baseline only what the team is willing to defend.
  • MUST apply the plugin to every UI module, not just :app. A regression in a feature module is invisible to a :app-only check until the feature is wired into the main graph.
  • PREFERRED: run :stabilityCheck in the same CI job as compile, behind assemble. Earlier signal, one Gradle daemon, half the wall-clock time.
  • PREFERRED: when ComposeGuard is the better fit (KMP/desktop/iOS), use it — but match the workflow shape exactly: commit the baseline, fail the build on diff, justify ignores in code review.
  • PREFERRED: point stabilityConfigurationFiles at the same stability_config.conf the Compose compiler reads, so the plugin and the compiler agree on classifications.

Stability is a contract, not a magic spell — and the CI gate is the contract enforcer. Skippability is a diagnostic, not a KPI: the goal is "no regressions from the baseline the team agreed on", not "100% skippable".

Verification

  • composeStabilityAnalyzer plugin block present in every UI module's build.gradle.kts.
  • app/stability/ (or the configured outputDir) is committed to the repo and contains at least one .stability file per shipping variant.
  • failOnStabilityChange.set(true) is the committed default.
  • CI workflow runs ./gradlew :app:stabilityCheck (or the equivalent module path) on every pull request.
  • Test the gate: temporarily change a val to var in a shared data class on a throwaway branch, push, and confirm the PR check turns red with the regressed composable named in the failure output. Revert the test change.
  • Every entry in ignoredPackages and ignoredClasses has a comment explaining why it is exempt.
  • When a developer runs ./gradlew :app:stabilityDump locally, the only changes (if any) are in the .stability files and are reviewable as plain text.

References

For runtime correlation of CI-green stability with actual recomposition counts, see ../../measurement/tracing-recompositions-at-runtime/SKILL.md. For the conceptual classification model that determines what stabilityCheck is checking, see ../understanding-stability-inference/SKILL.md. For the upstream type fixes that resolve regressions surfaced by the gate, see ../stabilizing-compose-types/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/enforcing-stability-in-ci 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

Enforcing Stability 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.

Enforcing Stability In CI compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Enforcing Stability In CI this skillrosuH/EasyWatermark1.9k1 repos~4kAutomated safety check: PassApache-2.0
GitHub Workflowsamirisback/automated-build-android-app-with-github-action346—~550Automated safety check: PassApache-2.0
Capturing Preview Screenshots In CIskydoves/android-testing-skills334—~4.5kAutomated safety check: NotesApache-2.0
GitHub Actionscallstackincubator/agent-skills1.7k1 repos~703Automated safety check: PassMIT
Review Dependenciestobihagemann/turbo408—~1.5kAutomated safety check: PassMIT
npm Package Publisherklaudworks/universal-skills181—~923Automated safety check: PassMIT

Similar skills

  • GitHub Workflows

    amirisback/automated-build-android-app-with-github-action

    Manage and automate Android CI/CD workflows using GitHub Actions in this repository.

    346 GitHub stars~550 tokensUpdated 26 days ago
    DevOps & CloudAuto-check passed
  • 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
  • GitHub Actions

    callstackincubator/agent-skills

    Official

    GitHub Actions workflow patterns for React Native iOS simulator and Android emulator cloud builds with downloadable artifacts.

    1.7k GitHub starsUsed in 1 repo~703 tokens
    DevOps & CloudAuto-check passed
  • Review Dependencies

    tobihagemann/turbo

    Detect package managers and CI action pins, then discover outdated or vulnerable dependencies.

    408 GitHub stars~1.5k tokensUpdated 2 days ago
    DevOps & CloudAuto-check passed
  • npm Package Publisher

    klaudworks/universal-skills

    Releases an npm package by committing changes, bumping the version with npm version, pushing the tag and checking the GitHub Actions publish.

    181 GitHub stars~923 tokensUpdated 9 mo ago
    DevelopmentAuto-check passed
  • Push and PyPI Release

    liaohch3/claude-tap

    Pushes the current work to GitHub and, when pending commits change code, bumps the version in pyproject.toml so CI publishes a new PyPI release.

    3.3k GitHub stars~509 tokensUpdated yesterday
    DevelopmentAuto-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 Enforcing Stability In CI

What does Enforcing Stability In CI do?

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…. Enforcing Stability In CI is an agent skill from rosuH/EasyWatermark. Use this skill 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 j-roskopf/ComposeGuard plugin (alternative for non-Android multiplatform).

When should I use Enforcing Stability In CI?

Enforcing Stability In CI fits situations like: set up a CI gate that fails the build when Compose stability silently regresses; using the skydoves/compose-stability-analyzer Gradle plugin (primary); the j-roskopf/ComposeGuard plugin (alternative for non-Android multiplatform); the team wants a stability SLO.

How do I install Enforcing Stability In CI in Claude Code?

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

How do I install Enforcing Stability In CI in Codex?

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

Can I use Enforcing Stability 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 rosuH/EasyWatermark --skill enforcing-stability-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/enforcing-stability-in-ci, .gemini/skills/enforcing-stability-in-ci, .github/skills/enforcing-stability-in-ci and .opencode/skills/enforcing-stability-in-ci in your project.

What does Enforcing Stability In CI need to run?

Going by SKILL.md and its folder, Enforcing Stability In CI needs the command-line tools its instructions call (git).

Does Enforcing Stability In CI access the network?

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

Is Enforcing Stability In CI 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 Enforcing Stability In CI use?

Enforcing Stability 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 Enforcing Stability In CI use?

About 4k tokens (SKILL.md is roughly 16k 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 Enforcing Stability In CI?

Skills that share tags, products or a category with Enforcing Stability In CI: GitHub Workflows (amirisback/automated-build-android-app-with-github-action, 346 stars), Capturing Preview Screenshots In CI (skydoves/android-testing-skills, 334 stars), GitHub Actions (callstackincubator/agent-skills, 1.7k stars) and Review Dependencies (tobihagemann/turbo, 408 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Enforcing Stability In CI?

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.