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.
A skill your agent uses to diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background, wrong click area for clickable, wrong clipping for clip, wrong measurement for…
$ npx skills add rosuH/EasyWatermark --skill ordering-modifier-chains -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rosuH/EasyWatermark ordering-modifier-chains --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/rosuH/EasyWatermark.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/ordering-modifier-chains .claude/skills/ordering-modifier-chains && 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 "ordering-modifier-chains" agent skill from https://github.com/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chains into .claude/skills/ordering-modifier-chains/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ordering-modifier-chains", 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/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chainsType 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 rosuH/EasyWatermark --skill ordering-modifier-chains -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rosuH/EasyWatermark ordering-modifier-chains --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rosuH/EasyWatermark.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/ordering-modifier-chains .agents/skills/ordering-modifier-chains && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ordering-modifier-chains" agent skill from https://github.com/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chains into .agents/skills/ordering-modifier-chains/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ordering-modifier-chains", 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 rosuH/EasyWatermark --skill ordering-modifier-chains -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rosuH/EasyWatermark ordering-modifier-chains --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rosuH/EasyWatermark.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/ordering-modifier-chains .cursor/skills/ordering-modifier-chains && 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 "ordering-modifier-chains" agent skill from https://github.com/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chains into .cursor/skills/ordering-modifier-chains/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ordering-modifier-chains", 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/rosuH/EasyWatermark.git --path .agents/skills/ordering-modifier-chains--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 rosuH/EasyWatermark --skill ordering-modifier-chains -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rosuH/EasyWatermark ordering-modifier-chains --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rosuH/EasyWatermark.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/ordering-modifier-chains .gemini/skills/ordering-modifier-chains && 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 "ordering-modifier-chains" agent skill from https://github.com/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chains into .gemini/skills/ordering-modifier-chains/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ordering-modifier-chains", 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 rosuH/EasyWatermark ordering-modifier-chainsInstalls 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 rosuH/EasyWatermark --skill ordering-modifier-chains -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rosuH/EasyWatermark.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/ordering-modifier-chains .github/skills/ordering-modifier-chains && 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 "ordering-modifier-chains" agent skill from https://github.com/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chains into .github/skills/ordering-modifier-chains/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ordering-modifier-chains", 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 rosuH/EasyWatermark --skill ordering-modifier-chains -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rosuH/EasyWatermark ordering-modifier-chains --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rosuH/EasyWatermark.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/ordering-modifier-chains .opencode/skills/ordering-modifier-chains && 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 "ordering-modifier-chains" agent skill from https://github.com/rosuH/EasyWatermark/tree/master/.agents/skills/ordering-modifier-chains into .opencode/skills/ordering-modifier-chains/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ordering-modifier-chains", 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.
ordering-modifier-chainsA skill your agent uses to diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background, wrong click area for clickable, wrong clipping for clip, wrong measurement for…
Ordering Modifier Chains is an agent skill from rosuH/EasyWatermark. Use this skill to diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background, wrong click area for clickable, wrong clipping for clip, wrong measurement for padding/size, surprising graphicsLayer scope. Covers the wrap-the-next-modifier mental model, the canonical pitfalls (padding vs background, clickable placement, clip before background, graphicsLayer placement), and why hoisting an entire Modifier chain via remember { Modifier.… } is rarely a real perf win because Compose…
Its SKILL.md is about 3.8k 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. It works with Jetpack Compose. The repository describes itself as: 🔒 🖼 Securely, easily add a watermark to your sensitive photos. 安全、简单地为你的敏感照片添加水印,防止被人泄露、利用. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 61223db. 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.
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.
Links to these hosts (documentation or services it may open):
developer.android.commedium.comchrisbanes.megithub.comFrom 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.
Ordering Modifier Chains loads about 3.8k tokens when it runs. Until then it costs about 205 tokens; SKILL.md has 1,311 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 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.
The full file from rosuH/EasyWatermark at commit 61223db, republished under its Apache-2.0 licence (© rosuH). 1,311 words, ~3,753 tokens.
.claude/skills/ordering-modifier-chains/SKILL.md (or your agent's skills folder).padding(8.dp).background(Red) ≠ background(Red).padding(8.dp)Modifier order matters because each modifier wraps the next as a function. Modifier.padding(8.dp).background(Red) shrinks constraints first, so the background paints INSIDE the padded region — the surrounding 8 dp margin has no red. Conversely, Modifier.background(Red).padding(8.dp) paints red across the parent's full bounds before insetting the content. Wrong order is the most common Compose UI bug after missing keys. This skill teaches Claude how to read a chain top-to-bottom and reorder it correctly.
Modifier order matter?".Modifier.padding(...).clickable { }, Modifier.background(...).clip(...), or Modifier.alpha(state.value).graphicsLayer { }.graphicsLayer { alpha = 0.5f } is half-applying to siblings.Modifier chain via remember { Modifier.… } "for perf".../../recomposition/deferring-state-reads/SKILL.md or ../../lists/optimizing-lazy-layouts/SKILL.md first.composed { } legacy, missing diff) → see ../migrating-to-modifier-node/SKILL.md.Modifier composition vocabulary (padding, background, clip, clickable, graphicsLayer). 1. Identify the symptom precisely. Match it to one of: paint region wrong, click / pointer area wrong, ripple bounds wrong, clip area wrong, padding measurement wrong, graphicsLayer scope wrong. Each maps to a specific reorder.
2. Read the chain top-to-bottom — each modifier's effect applies to everything BELOW it. Treat the chain as nested function calls: Modifier.a().b().c() means "a wraps (b wraps (c))". The top modifier is the outermost wrapper; the bottom modifier is closest to the content.
3. Apply the canonical reorder for the symptom. The patterns below cover the four most common cases (padding vs background, clickable placement, clip before background, graphicsLayer scope).
4. Pay special attention to these modifiers — order is observable, not stylistic:
clickable — the pointer hit area is the bounds AT ITS POSITION in the chain. Anything ABOVE it (outer) is included; anything BELOW it (inner) is not.clip — clips everything BELOW it (inner). Anything ABOVE it is unclipped.background — paints across the bounds AT ITS POSITION in the chain.padding — subtracts from the available space passed to everything BELOW it.graphicsLayer — wraps everything BELOW it in a render layer (alpha, transforms, clipping all apply to the subtree under it). 5. Decide on touch-target accessibility. Material's 48dp minimum touch target is achieved by placing clickable ABOVE the visual padding so the padded area is tappable. The trade-off: ripples will also fire in the padding. For visual-area-only clicks, clickable goes BELOW padding.
6. Resist hoisting a Modifier chain via remember "for perf". Compose already interns structurally-equal Modifier chains internally; remember { Modifier.fillMaxWidth().padding(16.dp) } is a micro-optimization that rarely shows up in a profile. MUST NOT add such a remember without first proving with a FrameTimingMetric benchmark that the unhoisted chain measurably regresses. See ../../lists/optimizing-lazy-layouts/SKILL.md for the broader allocation-in-items lambda discussion.
// WRONG (when the intent is "padded box with red fill")
Box(Modifier.padding(8.dp).background(Color.Red))
// WRONG because: padding is applied first; background then paints across the inner (padded) bounds — the result is a smaller red region, with no red in the padded margin. If the design intent was "red card with 8dp internal padding", red is on the wrong side of the padding.// RIGHT — red fills the box; content is inset by 8dp.
Box(Modifier.background(Color.Red).padding(8.dp)) { /* content */ }The reverse is also a valid composition — but only when the developer specifically wants the red to NOT extend into the surrounding padding (e.g. a small inner badge). Default to background → padding for "card with internal padding".
// WRONG (when the click should fire only on the visible icon)
Box(Modifier.padding(16.dp).clickable { onTap() })
// WRONG because: clickable's hit region is its position in the chain — and at this position, the bounds INCLUDE the padding. Taps in the padding fire onTap and ripple bounces past the visible icon.// RIGHT — click only fires on the visible content area.
Box(Modifier.clickable { onTap() }.padding(16.dp))// RIGHT — accessibility 48dp touch target: extend the tap area into the padding intentionally.
Box(
Modifier
.padding(8.dp) // outer spacing
.clickable { onTap() } // tap fires across the next size step
.padding(16.dp) // visual padding inside the tap area
)The 48dp minimum touch target (Material) is achieved by deliberately placing clickable so that it sits OUTSIDE the visual padding but INSIDE any external spacing. Pick whichever matches the design intent — neither order is "more correct"; they describe different products.
// WRONG (rounded card with red fill)
Box(Modifier.background(Color.Red).clip(RoundedCornerShape(8.dp)))
// WRONG because: background paints first across square bounds; clip then applies to children only. The red rectangle is unclipped — corners stay square.// RIGHT — clip wraps the background, so the red is rounded.
Box(Modifier.clip(RoundedCornerShape(8.dp)).background(Color.Red))For modifiers that combine clip + background semantics, Modifier.background(color = ..., shape = ...) does both in one node and avoids the ordering question:
// RIGHT — single modifier handles shape clipping and fill atomically.
Box(Modifier.background(Color.Red, RoundedCornerShape(8.dp)))// RIGHT — alpha applies to the entire subtree (background + content).
Box(
Modifier
.graphicsLayer { alpha = 0.5f }
.background(Color.Red)
.padding(8.dp)
) { Text("Half-faded card") }// WRONG — alpha only fades the content; background is fully opaque.
Box(
Modifier
.background(Color.Red)
.padding(8.dp)
.graphicsLayer { alpha = 0.5f }
) { Text("Surprising opacity") }
// WRONG because: graphicsLayer wraps only what's below it; the background painted above is not in its layer.This is the most common "why is my fade weird" bug after wrong-phase animation reads. Place graphicsLayer at (or near) the top of the chain when the intent is "fade this entire visual unit".
// RIGHT — graphicsLayer { } wraps clickable; ripple is captured into the layer.
Box(
Modifier
.graphicsLayer { alpha = 0.9f }
.clickable { onTap() }
.padding(16.dp)
)graphicsLayer does NOT change hit-test geometry — clickable hit-tests against its own position in the chain, regardless of whether a graphicsLayer is wrapping it. If the graphicsLayer applies a transform (translation, scale, rotation), the hit test follows the laid-out (pre-transform) bounds; Modifier.pointerInput { } with explicit hit testing is required for transformed hit-tests. Cross-reference ../../recomposition/deferring-state-reads/SKILL.md for the wider phase discussion.
// OK but rarely necessary
@Composable
fun SnackList(snacks: ImmutableList<Snack>) {
val rowModifier = remember { Modifier.fillMaxWidth().padding(16.dp) }
LazyColumn {
items(snacks, key = { it.id }) { snack -> SnackRow(snack, rowModifier) }
}
}// Equally fine in practice
@Composable
fun SnackList(snacks: ImmutableList<Snack>) {
LazyColumn {
items(snacks, key = { it.id }) { snack ->
SnackRow(snack, Modifier.fillMaxWidth().padding(16.dp))
}
}
}Compose interns structurally-equal Modifier chains. The two snippets above produce the same equals-compatible chain at every item position. Hoisting via remember saves at most a single allocation per item per recomposition — measurable in synthetic micro-benchmarks, invisible in FrameTimingMetric on real surfaces. MUST NOT add the remember line "for perf" without a FrameTimingMetric regression to point at. See ../migrating-to-modifier-node/SKILL.md for the much bigger win — fixing a Modifier.composed { } factory.
// Both compile; both are valid; they mean different things.
Box(Modifier.size(100.dp).padding(8.dp)) // 100dp box, 8dp inner padding → 84dp content area
Box(Modifier.padding(8.dp).size(100.dp)) // 100dp content area, 8dp outer margin → 116dp totalsize constrains the bounds at its position in the chain; padding subtracts from the available space passed to everything below. Read top-to-bottom: the order describes the layout, it does not "do the same thing in a different order".
clickable AFTER padding (padding then clickable, where clickable is below padding in the chain) when the click should be the visible area only. Place clickable BEFORE padding when the design requires the padded area to be tappable (Material 48dp touch target).clip BEFORE background to clip the background paint. Or use Modifier.background(color, shape) to avoid the ordering question entirely.graphicsLayer near the top of the chain when its transforms / alpha must apply to the whole visual unit (including the background).Modifier chain via remember { Modifier.… } solely "for perf" without a FrameTimingMetric regression to point at — Compose already interns identical chains and the saved allocation rarely shows up in a profile.Modifier.composed { } factory to "fix" an ordering issue. If a custom modifier needs to be in a specific position, it can be a Modifier.Node directly. See ../migrating-to-modifier-node/SKILL.md.padding → clickable → padding sandwich for tappable items where accessibility (48dp minimum) is the goal — outer spacing, the clickable area sized to include the visual padding, and inner padding for the content.Modifier.background(color = ..., shape = ...) over the clip(shape).background(color) pair when both are needed.clip masks every layer below it; clipped corners look right on every theme.graphicsLayer { alpha = ... } (or scaleX, rotationZ, etc.) affects the intended subtree only; background and content fade together when expected.Modifier chain, a FrameTimingMetric macrobenchmark in release + R8 + real device shows a measurable improvement vs the unhoisted version. If not, drop the remember.Modifier.composed { } was added to work around a chain-order question (re-grep the module).© 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
Just SKILL.md in .agents/skills/ordering-modifier-chains of rosuH/EasyWatermark.
Open the folder on GitHubat commit 61223db
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.
Ordering Modifier Chains 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 |
|---|---|---|---|---|---|---|
| Ordering Modifier Chains this skillrosuH/EasyWatermark | 1.9k | 1 repos | ~3.8k | Automated safety check: Pass | Apache-2.0 | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 180 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Android Developmentdpconde/claude-android-skill | 336 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Footgun Scanmaxrave-dev/kotlin-footguns | 1k | 1 repos | ~518 | Automated safety check: Pass | GPL-3.0 | |
| Stylesarindamxd/camerax-android | 132 | 4 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Benchmarkandroidx/androidx | 6.1k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 |
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
dpconde/claude-android-skill
Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.
maxrave-dev/kotlin-footguns
Scan a Kotlin or Compose Multiplatform diff for known footgun shapes and open the matching trap to confirm each hit.
arindamxd/camerax-android
A skill your agent uses to integrate the Jetpack Compose Styles API into an Android project.
androidx/androidx
Benchmarking and improving the performance of Jetpack Compose.
openvetta/open-vetta
Master Material Design 3 and Jetpack Compose patterns for building native Android apps.
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…
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).
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.
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.
rosuH/EasyWatermark
Analyzes Android codebases to implement ML Kit GenAI Prompt API.
rosuH/EasyWatermark
A skill your agent uses to fix unstable Jetpack Compose types once a stability diagnosis has identified them.
Works with
Categories
A skill your agent uses to diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background, wrong click area for clickable, wrong clipping for clip, wrong measurement for…. Ordering Modifier Chains is an agent skill from rosuH/EasyWatermark. Use this skill to diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background, wrong click area for clickable, wrong clipping for clip, wrong measurement for padding/size, surprising graphicsLayer scope.
Ordering Modifier Chains fits situations like: diagnose and fix Jetpack Compose Modifier ordering bugs — wrong paint region for background; wrong click area for clickable; wrong clipping for clip; wrong measurement for padding/size.
Run `npx skills add rosuH/EasyWatermark --skill ordering-modifier-chains -a claude-code`. Or copy the skill folder (.agents/skills/ordering-modifier-chains in rosuH/EasyWatermark) into .claude/skills/ordering-modifier-chains in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rosuH/EasyWatermark --skill ordering-modifier-chains -a codex`. Or copy the skill folder (.agents/skills/ordering-modifier-chains in rosuH/EasyWatermark) into .agents/skills/ordering-modifier-chains 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 rosuH/EasyWatermark --skill ordering-modifier-chains -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ordering-modifier-chains, .gemini/skills/ordering-modifier-chains, .github/skills/ordering-modifier-chains and .opencode/skills/ordering-modifier-chains in your project.
SKILL.md names no scripts, command-line tools or credentials: Ordering Modifier Chains is instructions for the agent only.
SKILL.md names 4 domains. As links in the text: developer.android.com, medium.com, chrisbanes.me and github.com. This is read from the text; nothing was executed.
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.
Ordering Modifier Chains 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 3.8k tokens (SKILL.md is roughly 15k 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 Ordering Modifier Chains: Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 stars), Android Development (dpconde/claude-android-skill, 336 stars), Footgun Scan (maxrave-dev/kotlin-footguns, 1k stars) and Styles (arindamxd/camerax-android, 132 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
rosuH (a GitHub user) maintains it in rosuH/EasyWatermark, which has 1,894 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 6, 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.