openai/snap-o-tweaks
Inspect, stream, and explicitly adjust live Android UI tweak values through Snap-O. Use when a request mentions Snap-O Tweaks, tweak-enabled Android apps, runtime UI parameters, Compose tweak or overlay controls, tweak discovery, previously adjusted or currently inactive tweaks, applying all user-made tweak changes, typed values, defaults or resets, atomic tweak batches, the Tweaks REST/SSE API, or selecting between CLI, macOS inspector, in-app overlay, and custom tweak interfaces.
npx skills add https://github.com/openai/snap-o --skill snap-o-tweaks
Inspect live values exposed by a debug-enabled Android app. Discovery, reads,
and streams are read-only; change or reset values only when explicitly
requested. Reset everything only when explicitly requested.
snapo CLI;it requires only Python 3 and Android Platform Tools on macOS or Linux.
references/protocol.md for ADB forwarding,
endpoints, typed values, atomic updates, and streaming.
SnapOTweakOverlay.require a same-origin proxy.
Read references/interaction-surfaces.md
for desktop, overlay, release/no-op, and custom-interface integration.
Use the executable shared by the installed Snap-O plugin:
../../scripts/snapo
Resolve this plugin-root path relative to this SKILL.md, not the current
working directory. Call the resolved path $SNAPO_BIN; if it is absent, the
Snap-O plugin installation is incomplete.
ADB resolves from PATH, ANDROID_SDK_ROOT, or ANDROID_HOME. Use
--adb <path> or SNAPO_ADB to override it; pass --adb-host <host> and
--adb-port <port> together for a remote ADB server.
"$SNAPO_BIN" tweaks apps --json
"$SNAPO_BIN" tweaks list -s <serial> -n <socket> --json
"$SNAPO_BIN" tweaks get 'Typography/Font size' -s <serial> -n <socket> --json
Select devices with -s <serial>, -d (USB), or -e (emulator). Use
-n <socket> for every subcommand except apps when selection is ambiguous.
currently in composition:
"$SNAPO_BIN" tweaks list --all -s <serial> -n <socket> --json
"$SNAPO_BIN" tweaks get 'Typography/Font size' --all -s <serial> -n <socket> --json
The expanded list combines current tweaks with retained, previously adjusted
tweaks. Compare each descriptor's value with its default when the user
asks to apply all changes they made. Separate screens can reuse tweak names
with different declarations; preserve every descriptor from list --all
instead of deduplicating by name. get NAME --all reports an error when
multiple declarations match; use list --all --json to inspect them.
Historical tweaks can be inspected while inactive, but can only be changed
or reset when their declaration is active.
"$SNAPO_BIN" tweaks watch -s <serial> -n <socket> --json
"$SNAPO_BIN" tweaks watch -s <serial> -n <socket> --once --json
--once exits after the first complete snapshot. --json emits
newline-delimited JSON; list and watch emit complete tweak snapshots.
Event streams contain only currently active tweaks; use list --all for
historical adjustments.
Inspect the descriptor first: the CLI parses int, float, boolean,
color, and string according to their declared types. Quote names containing
spaces or /, string values containing spaces, and hex colors.
"$SNAPO_BIN" tweaks set 'Typography/Font size' 42 -s <serial> -n <socket>
"$SNAPO_BIN" tweaks set 'Motion/Show' false -s <serial> -n <socket>
"$SNAPO_BIN" tweaks set 'Colors/Accent' '#3B82F6' -s <serial> -n <socket>
Successful updates and resets produce no output.
Reset only the explicitly requested value, or use --all only for an explicit
reset-everything request:
"$SNAPO_BIN" tweaks reset 'Typography/Font size' -s <serial> -n <socket>
"$SNAPO_BIN" tweaks reset --all -s <serial> -n <socket>
Tweaks use app-local snapo_tweaks_<pid> sockets and normally exist only in
debug-enabled apps. If no socket appears, check device authorization and
selection, whether the app is running, its live Tweaks dependency/integration,
debug/runtime policy, and server startup. If a socket exists but /tweaks is
empty, the current Compose UI has no active tweak declarations; list --all
can still return retained adjustments. Adjustment history lasts only for the
current Android app process. Do not enable release servers or modify apps or
dependencies without an explicit request. Preserve validation errors; the CLI
cleans up its own temporary ADB forwards.
Take openai/snap-o-tweaks from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.