Snap-O skill
Codex skills that read an Android app's network traffic, override API responses and adjust live UI values without a rebuild.
- 120 ★ on the repository
- Last commit
- Apache-2.0
Extended access
Why this level
- The utilities talk to the app through adb and override API responses or interface values on the device.
- Captured headers and request bodies can contain tokens and personal data.
Install
- Works in
Manual install
mkdir -p ~/.local/bin && curl -fsSL https://raw.githubusercontent.com/openai/snap-o/main/skills/snap-o-network-inspector/scripts/snapo-network -o ~/.local/bin/snapo-network && chmod +x ~/.local/bin/snapo-networkDownloads the network inspector utility. For Tweaks the `snapo-tweaks` script sits next to it in the `snap-o-tweaks` skill directory.
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The utilities talk to the app through adb and override API responses or interface values on the device.
- Captured headers and request bodies can contain tokens and personal data.
This is third-party code. Review the repository files before installing.
What it does
Snap-O from OpenAI is a set of debugging tools for Android. The repository holds a Codex plugin and two skills: `snap-o-network-inspector` and `snap-o-tweaks`. The first reads HTTP requests and responses, SSE events and WebSocket messages through the `snapo-network` utility, and edits or delays API responses with a Python script. The second uses `snapo-tweaks` to work with live UI values: it reads, changes and resets them and runs actions the app has registered. Both utilities run on macOS and Linux and need Python 3 and Android Platform Tools. The Snap-O macOS app is not required. The Android project itself must include the Snap-O libraries: traffic is captured in OkHttp, Ktor on the OkHttp engine and HttpURLConnection.
Who it is for. Android developers who debug network calls and tune interface values together with Codex.
Good fit when
- The app gets an unexpected API response and you need to see headers and body on the device.
- A screen is checked against a server error or a slow response without touching the backend.
- A margin, color or animation curve is tuned on the running app without a rebuild.
- The agent carries the tuned values over into the source code.
Not a fit when
- The app is not on Android: the utilities work through adb.
- Snap-O debug dependencies cannot be added to the project.
- You need traffic from someone else's app whose build you cannot touch.
Example request
Show the app's latest API requests and replace the orders list response with an empty array delayed by two seconds.Limitations
The skills only see apps with the Snap-O integration: without the libraries in the build there is nothing to capture. They need Python 3, adb from Android Platform Tools and a device with USB debugging or an emulator. Response overrides require OkHttp interception support in the app. Release builds use empty `noop` artifacts that pass traffic through and never start the Snap-O server. The README gives no dedicated install command for the Codex skill: the plugin sits in the `.codex-plugin` directory and the utilities are downloaded with `curl`.
How to disable. Remove the plugin or the `snapo-network` and `snapo-tweaks` utilities from the agent's skills directory. In the Android project, swap the Snap-O debug dependencies for `noop` variants or drop them.
FAQ
Which HTTP clients does Snap-O capture?
OkHttp, Ktor on the OkHttp engine and HttpURLConnection. Response overrides through `snapo-network intercept` go over the OkHttp connection.
Is the Snap-O macOS app required?
No. Both utilities run on macOS and Linux without the app; Python 3 and Android Platform Tools are enough.
How do I find the right app on the device?
Run `snapo-network list --json`: the rows carry `pid`, `processName` and `packageName`. Select the device with `-s`, `-d` or `-e`.
How do I change an interface value on the fly?
Run `snapo-tweaks apps --json`, then `snapo-tweaks list -s SERIAL -n SOCKET --json` and `snapo-tweaks set 'Typography/Font size' 42 -s SERIAL -n SOCKET`. Take the value name from your own app.
How do I override an API response?
Write a Python script with route handlers and run `snapo-network intercept <file.py>`. The app must support OkHttp interception.
Discussion
No questions or reviews yet.
Related
SkillsOfficial set of 30 skills from the Android team: Jetpack Compose, AGP 9 upgrade, R8, Perfetto profiling, Navigation 3, CameraX, Google Play policies
21 skills for Android and KMP in Claude Code, Codex and Copilot CLI: Compose, coroutines, Flow, networking, storage, Gradle
An opencode fork for mobile development: the agent runs the iOS simulator or Android emulator and shows the device alongside
Skills and a CLI that let Claude Code, Codex and OpenCode operate an Android phone: open apps, tap, type and test workflows
A plugin for Codex and Claude Code: the agent views an Android phone's screen, taps and types over Wi-Fi, with no ADB or USB.
Skill and CLI for controlling an Android phone via ADB and vision models: the agent opens apps, searches, orders and verifies results
README in short
The main product is a macOS app with screen capture, a network inspector and a Tweaks panel. Network and Tweaks also have standalone command-line utilities and Codex skills for macOS and Linux.
README badge
Original SKILL.md
--- name: snap-o-network-inspector description: Inspect Android network captures and intercept HTTP calls with the Snap-O CLI for a selected device/socket. Use for request/response details, websocket events, API response overrides, mock responses, or delays with Python route handlers. --- # Snap-O Network Tool Use this skill to inspect network traffic or override API responses in an Android app. ## CLI Path Use the Network CLI bundled with the Snap-O plugin: ```bash SNAPO_BIN=/path/to/snap-o/skills/snap-o-network-inspector/scripts/snapo-network ``` Resolve `scripts/snapo-network` relative to the directory containing this `SKILL.md`; do not assume the current working directory. The script requires Python 3 and Android Platform Tools; no Python packages, compiler toolchain, or macOS application are required. The script resolves `adb` from `PATH`, `ANDROID_SDK_ROOT`, or `ANDROID_HOME`. Use `--adb <path>` or `SNAPO_ADB` to select a specific ADB executable or wrapper. Wrappers selecting a remote ADB server must tunnel Snap-O forwards back to localhost; otherwise, pass both `--adb-host` and `--adb-port`. Listings use ADB process and package information without contacting the app. JSON rows contain `pid`, `processName`, and `packageName`; unresolved identity fields are `null`. Friendly app labels and icons are not loaded. ## Current Command Surface - `snapo-network list`: lists available Snap-O Network Tool servers. - `snapo-network requests`: emits CDP network events for a server. - `snapo-network show`: shows full details for a request id, including headers and bodies. - `snapo-network intercept <file.py>`: runs [Python route handlers](references/interception.md) to edit or mock HTTP responses; requires Snap-O OkHttp interception support in the app. Useful global selectors: - `-s`, `--serial`: use a specific device serial. - `-d`: use the single connected USB device. - `-e`: use the single connected emulator. - `--adb`: use a specific ADB executable or wrapper. - `--adb-host`, `--adb-port`: connect directly to an explicit remote ADB server; otherwise the configured ADB command selects its endpoint. ## Inspection Flow 1. List available servers. ```bash "$SNAPO_BIN" list --json ```