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.
Architecture, patch typology (bytecodePatch, resourcePatch, rawResourcePatch), universal patches, stringOption DSL, fingerprint resolution, compatibility contracts (Constants.kt), and diagnostic…
$ npx skills add kveld9/kveld-morphe-patches --skill morphe-patcher -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kveld9/kveld-morphe-patches morphe-patcher --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/kveld9/kveld-morphe-patches.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/morphe-patcher .claude/skills/morphe-patcher && 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 "morphe-patcher" agent skill from https://github.com/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcher into .claude/skills/morphe-patcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "morphe-patcher", 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/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcherType 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 kveld9/kveld-morphe-patches --skill morphe-patcher -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kveld9/kveld-morphe-patches morphe-patcher --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kveld9/kveld-morphe-patches.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/morphe-patcher .agents/skills/morphe-patcher && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "morphe-patcher" agent skill from https://github.com/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcher into .agents/skills/morphe-patcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "morphe-patcher", 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 kveld9/kveld-morphe-patches --skill morphe-patcher -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kveld9/kveld-morphe-patches morphe-patcher --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kveld9/kveld-morphe-patches.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/morphe-patcher .cursor/skills/morphe-patcher && 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 "morphe-patcher" agent skill from https://github.com/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcher into .cursor/skills/morphe-patcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "morphe-patcher", 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/kveld9/kveld-morphe-patches.git --path .agents/skills/morphe-patcher--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 kveld9/kveld-morphe-patches --skill morphe-patcher -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kveld9/kveld-morphe-patches morphe-patcher --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kveld9/kveld-morphe-patches.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/morphe-patcher .gemini/skills/morphe-patcher && 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 "morphe-patcher" agent skill from https://github.com/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcher into .gemini/skills/morphe-patcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "morphe-patcher", 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 kveld9/kveld-morphe-patches morphe-patcherInstalls 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 kveld9/kveld-morphe-patches --skill morphe-patcher -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kveld9/kveld-morphe-patches.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/morphe-patcher .github/skills/morphe-patcher && 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 "morphe-patcher" agent skill from https://github.com/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcher into .github/skills/morphe-patcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "morphe-patcher", 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 kveld9/kveld-morphe-patches --skill morphe-patcher -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kveld9/kveld-morphe-patches morphe-patcher --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kveld9/kveld-morphe-patches.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/morphe-patcher .opencode/skills/morphe-patcher && 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 "morphe-patcher" agent skill from https://github.com/kveld9/kveld-morphe-patches/tree/main/.agents/skills/morphe-patcher into .opencode/skills/morphe-patcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "morphe-patcher", 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.
morphe-patcherArchitecture, patch typology (bytecodePatch, resourcePatch, rawResourcePatch), universal patches, stringOption DSL, fingerprint resolution, compatibility contracts (Constants.kt), and diagnostic…
Morphe Patcher is an agent skill from kveld9/kveld-morphe-patches. Architecture, patch typology (bytecodePatch, resourcePatch, rawResourcePatch), universal patches, stringOption DSL, fingerprint resolution, compatibility contracts (Constants.kt), and diagnostic telemetry invariants.
Its SKILL.md is about 2.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 Mobile. It works with Android. The repository describes itself as: Custom Morphe patches on Android. The licence is GPL-3.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 32e9c2f. 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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Morphe Patcher loads about 2.4k tokens when it runs. Until then it costs about 58 tokens; SKILL.md has 649 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 kveld9/kveld-morphe-patches at commit 32e9c2f, republished under its GPL-3.0 licence (© kveld9). 649 words, ~2,352 tokens.
.claude/skills/morphe-patcher/SKILL.md (or your agent's skills folder).<!-- Mirror: this skill also exists in kveld-extra-morphe-patches/.agents/skills (hardlinked to its .claude/skills). When editing shared core guidance, replicate the change there. -->
Morphe patches are declared using functional Kotlin builder DSLs provided by app.morphe.patcher.patch:
bytecodePatchPrimary tool for Dalvik/Smali AST bytecode transformations via dexlib2 fingerprints and instructions.
val myPatch = bytecodePatch(
name = "Unique Patch Name",
description = "Concise technical description of the modification.",
default = true // Whether enabled by default in Morphe Manager
) {
compatibleWith(Constants.COMPATIBILITY_BRAVE)
dependsOn(companionResourcePatch) // Optional dependency execution
execute {
// Fingerprinting and instruction insertion
}
}resourcePatchUsed for parsing and transforming decompiled Android resource XML files prior to DEX assembly.
val myResourcePatch = resourcePatch(
name = "Resource Defaults Patch",
description = "Overwrites default XML attributes.",
default = false
) {
compatibleWith(Constants.COMPATIBILITY_BRAVE)
execute {
val targetFile = get("res/xml").listFiles()
?.firstOrNull { it.extension == "xml" && it.readText().contains("target_key") }
?: return@execute
document(targetFile.absolutePath).use { doc ->
val nodes = doc.getElementsByTagName("SwitchPreference")
for (i in 0 until nodes.length) {
val elem = nodes.item(i) as? Element ?: continue
if (elem.getAttribute("android:key") == "target_key") {
elem.setAttribute("android:defaultValue", "true")
}
}
}
}
}rawResourcePatchDirect byte-level modification of bundled binary shared libraries (.so) or uncompressed assets (assets/index.android.bundle).
val myNativePatch = rawResourcePatch(
name = "Native Hardening Patch",
description = "Direct binary patching of libchrome.so",
default = false
) {
compatibleWith(Constants.COMPATIBILITY_BRAVE)
execute {
val soFile = get("lib/arm64-v8a/libchrome.so")
if (!soFile.exists()) return@execute
// Validate offsets and mutate bytes via RandomAccessFile
}
}Compatibility is configured via compatibleWith(...):
compatibleWith(Constants.COMPATIBILITY_BRAVE)Compatibility contracts for cross-target or dual-package applications:compatibleWith(targetA, targetB)compatibleWith(...) entirely produces a universal patch (e.g. LocaleResourceSlimmerPatch, DpiResourceSlimmerPatch). Universal patches are offered across all target applications in Morphe Manager and the CLI patcher. Universal patch sources live in app.morphe.patches.universal; app.morphe.patches.shared holds only contracts and helpers.stringOption DSL)Patches can expose configurable settings to users in Morphe Manager or CLI using the stringOption property delegate:
import app.morphe.patcher.patch.stringOption
val targetLocales by stringOption(
key = "locales",
title = "Locales to keep",
description = "Comma-separated language codes to preserve (e.g. 'en, es, pt, fr, de'). English fallback is always retained.",
default = "en",
required = false,
)When patch options, descriptions, titles, or defaults are added or modified in Kotlin code, verify catalog registration by running the patch list generator against the built .mpp from a temporary working directory outside the repository, and confirm the expected entries appear. Do NOT run ./gradlew generatePatchesList in the repository checkout: it rewrites the tracked patches-list.json, which the release pipeline regenerates (see AGENTS.md, rule 11).
Fingerprints locate target methods across obfuscated versions without hardcoding method names:
String Literals: Most resilient anchor. Locate methods referencing unique log strings or preference keys.
Fingerprint(
returnType = "V",
strings = listOf("brave.origin.package_name_android", "brave.origin.product_id_android")
)Signature & Parameter Filtering: Match methods by strict parameter and return type signatures.
Fingerprint(
returnType = "Z",
parameters = listOf("Lorg/chromium/chrome/browser/profiles/Profile;"),
strings = listOf("getIsSubscriptionActive profile is null")
)Instruction Filters & Register Sniffing:
val fp = Fingerprint(
definingClass = "Lorg/chromium/chrome/browser/settings/BraveOriginPreferences;",
returnType = "V",
parameters = listOf("Ljava/lang/String;", "Landroid/os/Bundle;"),
filters = listOf(
methodCall(definingClass = "Lcom/target/Class;", name = "predicate", returnType = "Z")
)
)
val matchIndex = fp.instructionMatches.first().index
val targetReg = fp.method.getInstruction<OneRegisterInstruction>(matchIndex + 1).registerARuntime safety (device-proven): never
remove+replacea lone invoke and never grow the register frame. Both cause device-onlyVerifyErrorboot crashes that a greenrunPatchTestdoes not catch. Insert-only aftermove-result, reusing existing registers. Seeagy-orchestratorreferences/observations.md:40-41.
Constants.kt)Every patch must reference the shared compatibility object defined centrally in Constants.kt. Never inline Compatibility(...) objects.
Active targets defined in Constants.kt:
Constants.COMPATIBILITY_BRAVE (com.brave.browser)Constants.COMPATIBILITY_GBOARD (com.google.android.inputmethod.latin)Constants.COMPATIBILITY_HEVY (com.hevy)Constants.COMPATIBILITY_TIKTOK (com.zhiliaoapp.musically)Constants.COMPATIBILITY_NOKOPRINT (com.nokoprint)Constants.COMPATIBILITY_XIAOMI_EARBUDS (com.mi.earphone)Single Target Version Invariant: Every target app maintains strictly ONE active version (the latest supported release) in targets = listOf(AppTarget(...)). Never retain older versions or multi-version entries in targets.
Every patch execution must emit concise, high-signal diagnostic telemetry captured by Morphe Manager / CLI logs ([WARN] [STDIO]: [...]). Patches must satisfy the following invariants tested by RE and audit harnesses:
println("[Patch Name] ...").var patched = 0try/catch during development to allow partial degradation and pinpoint shifting targets without halting the suite prematurely:try {
// fingerprint resolution and hook injection
patched++
} catch (e: Exception) {
println("[Patch Name] Component note: ${e.message}")
}Failed to match the fingerprint) MUST be resolved to the new shifted target or pruned if the feature was deleted upstream. Retaining failing fingerprints in production/committed code is strictly forbidden.println("[Patch Name] Successfully applied $patched hooks across target components.").take(6)).[INFO], [WARN], [PASS], [FAIL]).Static checks are never enough. Run the in-situ patching gate defined in AGENTS.md (Section 3, Step 4): ./gradlew runPatchTest -Papp=<targetApp> (targets: gboard, tiktok, brave, hevy, nokoprint, xiaomi_earbuds), adding -PallOptions=true when the change sits behind an option.
© kveld9, GPL-3.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/morphe-patcher of kveld9/kveld-morphe-patches.
Open the folder on GitHubat commit 32e9c2f
Morphe Patcher 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 |
|---|---|---|---|---|---|---|
| Morphe Patcher this skillkveld9/kveld-morphe-patches | 113 | — | ~2.4k | Automated safety check: Pass | GPL-3.0 | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 180 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Phone HarnessShawnPana/phone-harness | 3.2k | — | ~4.3k | Automated safety check: Pass | MIT | |
| Stylesarindamxd/camerax-android | 132 | 4 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Verified Emailarindamxd/camerax-android | 132 | 4 repos | ~4.7k | Automated safety check: Pass | Apache-2.0 | |
| Argent Metro Debuggerbbplayer-app/BBPlayer | 1.2k | — | ~3.4k | Automated safety check: Pass | MIT |
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
ShawnPana/phone-harness
Control the user's phone — an iPhone through the Mac's iPhone Mirroring window, an Android over adb, or a rented cloud Android: open apps, tap, type, swipe, read the screen.
arindamxd/camerax-android
A skill your agent uses to integrate the Jetpack Compose Styles API into an Android project.
arindamxd/camerax-android
Provides a complete workflow for implementing verified email retrieval on Android Credential Manager API.
bbplayer-app/BBPlayer
Debug a JS runtime via CDP using argent debugger tools. An agent skill from bbplayer-app/BBPlayer.
afkT/DevUtils
统一 Android XML 资源命名:layout、drawable、mipmap、color、values、id 的前缀与 snakecase 规则;把颜色/圆角/描边/状态编码进文件名(bg、border、textcolor…selector)。
kveld9/kveld-morphe-patches
ARM64 ELF and binary asset patching guidelines covering libchrome.so host redirection, multi-candidate offset resolution, companion .so trimming, and Hermes bytecode patching.
kveld9/kveld-morphe-patches
Smali and Dalvik bytecode hooking guidelines, register architecture conventions, multi-return reverse traversal, TwoRegisterInstruction extraction, reflection bridges, and obfuscation guidelines.
kveld9/kveld-morphe-patches
Semantic release and CI/CD lifecycle, conventional commit standards, release pipeline chain (release.yml and .releaserc), and git branching strategy.
Works with
Categories
Architecture, patch typology (bytecodePatch, resourcePatch, rawResourcePatch), universal patches, stringOption DSL, fingerprint resolution, compatibility contracts (Constants.kt), and diagnostic…. Morphe Patcher is an agent skill from kveld9/kveld-morphe-patches.kt), and diagnostic telemetry invariants.
Morphe Patcher fits situations like: mobile work in your project.
Run `npx skills add kveld9/kveld-morphe-patches --skill morphe-patcher -a claude-code`. Or copy the skill folder (.agents/skills/morphe-patcher in kveld9/kveld-morphe-patches) into .claude/skills/morphe-patcher in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kveld9/kveld-morphe-patches --skill morphe-patcher -a codex`. Or copy the skill folder (.agents/skills/morphe-patcher in kveld9/kveld-morphe-patches) into .agents/skills/morphe-patcher 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 kveld9/kveld-morphe-patches --skill morphe-patcher -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/morphe-patcher, .gemini/skills/morphe-patcher, .github/skills/morphe-patcher and .opencode/skills/morphe-patcher in your project.
SKILL.md names no scripts, command-line tools or credentials: Morphe Patcher is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found 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.
Morphe Patcher is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.4k 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 Morphe Patcher: Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 stars), Phone Harness (ShawnPana/phone-harness, 3.2k stars), Styles (arindamxd/camerax-android, 132 stars) and Verified Email (arindamxd/camerax-android, 132 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kveld9 (a GitHub user) maintains it in kveld9/kveld-morphe-patches, which has 113 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 10, 2026.
Source: kveld9/kveld-morphe-patches on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.