Burner Phone Android Control
smallnest/goclaw
Controls an Android device over ADB in a loop of screenshot, vision analysis, tap and verification, so the agent acts on real on-screen coordinates.
Controls an Android device through the af CLI with observe, act and verify steps, ref-based taps, screenshots and recovery when a step goes wrong.
$ npx skills add felinics/Autofish --skill autofish-control -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install felinics/Autofish autofish-control --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/felinics/Autofish.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cli/skills/autofish-control .claude/skills/autofish-control && 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 "autofish-control" agent skill from https://github.com/felinics/Autofish/tree/main/cli/skills/autofish-control into .claude/skills/autofish-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "autofish-control", 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/felinics/Autofish/tree/main/cli/skills/autofish-controlType 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 felinics/Autofish --skill autofish-control -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install felinics/Autofish autofish-control --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/felinics/Autofish.git skills-src && mkdir -p .agents/skills && cp -r skills-src/cli/skills/autofish-control .agents/skills/autofish-control && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "autofish-control" agent skill from https://github.com/felinics/Autofish/tree/main/cli/skills/autofish-control into .agents/skills/autofish-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "autofish-control", 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 felinics/Autofish --skill autofish-control -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install felinics/Autofish autofish-control --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/felinics/Autofish.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/cli/skills/autofish-control .cursor/skills/autofish-control && 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 "autofish-control" agent skill from https://github.com/felinics/Autofish/tree/main/cli/skills/autofish-control into .cursor/skills/autofish-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "autofish-control", 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/felinics/Autofish.git --path cli/skills/autofish-control--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 felinics/Autofish --skill autofish-control -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install felinics/Autofish autofish-control --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/felinics/Autofish.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/cli/skills/autofish-control .gemini/skills/autofish-control && 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 "autofish-control" agent skill from https://github.com/felinics/Autofish/tree/main/cli/skills/autofish-control into .gemini/skills/autofish-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "autofish-control", 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 felinics/Autofish autofish-controlInstalls 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 felinics/Autofish --skill autofish-control -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/felinics/Autofish.git skills-src && mkdir -p .github/skills && cp -r skills-src/cli/skills/autofish-control .github/skills/autofish-control && 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 "autofish-control" agent skill from https://github.com/felinics/Autofish/tree/main/cli/skills/autofish-control into .github/skills/autofish-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "autofish-control", 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 felinics/Autofish --skill autofish-control -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install felinics/Autofish autofish-control --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/felinics/Autofish.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/cli/skills/autofish-control .opencode/skills/autofish-control && 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 "autofish-control" agent skill from https://github.com/felinics/Autofish/tree/main/cli/skills/autofish-control into .opencode/skills/autofish-control/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "autofish-control", 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.
autofish-controlControls an Android device through the af CLI with observe, act and verify steps, ref-based taps, screenshots and recovery when a step goes wrong.
The skill asks for deterministic control with evidence at every step. The agent reads the current screen and its element refs with af observe, performs exactly one action, then verifies the result, and it taps by refs such as @nK instead of screen coordinates so a run can be replayed reliably. Overlay management, screenshots and a recover command are part of the loop.
Setup connects the CLI to the Autofish app on the phone. The URL, port and token come from the app, or af connect usb sets up a forwarded address for an adb-connected device while the token is still copied from the app, and settings can also come from AF_URL, AF_TOKEN and related variables. Each task gets its own named session so unrelated work does not share the default one, and a local memory store can be searched for earlier experience with the current app and page. Output can be switched to JSON for scripts.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 5ab0a73. 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 bash).
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 these keys or tokens, usually read from environment variables:
AF_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Autofish Android Control loads about 1.7k tokens when it runs. Until then it costs about 52 tokens; SKILL.md has 779 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 felinics/Autofish at commit 5ab0a73, republished under its Apache-2.0 licence (© felinics). 779 words, ~1,697 tokens.
.claude/skills/autofish-control/SKILL.md (or your agent's skills folder).Use deterministic control with evidence at every step.
af).@nK) instead of coordinates.af config set remote.url "http://<IP>:<PORT>"
af config set remote.token "<token>"
af config set memory.db "$HOME/.config/af/af.db"
af config set output.default "text"
af config set artifacts.dir "$HOME/.config/af/artifacts"Copy IP, PORT, and token from the Autofish Android app. For USB port forwarding, use the forwarded local address, for example http://127.0.0.1:<PORT>.
If the device is connected with adb and the App is new enough to write a connection hint, prefer:
af connect usb --device <ADB_SERIAL>af connect usb writes the forwarded remote.url and connection.* USB metadata, verifies af health, and does not write remote.token. Keep the token copied from the app for observe, act, verify, and recover.
Environment variables also work: AF_URL, AF_TOKEN, AF_DB, AF_OUTPUT, AF_ARTIFACT_DIR.
af health only requires URL.observe, act, verify, recover require URL + token.af memory ... is local-only and requires memory enabled.config list and config get remote.token redact tokens as <redacted>.--output json when parsing results in scripts.af --help first if the installed CLI may be older than this skill.af --session <session> observe --url <url> --token <token> page.Choose one session per task:
SESSION="task-name"
af --session "$SESSION" observe page --field screen --field refs --max-rows 80Do not reuse the default default session across unrelated tasks.
Memory session rules:
memory context and memory save use the global --session.memory log and memory stats filter with --for-session <session>.memory search and memory experience query cross-session history; do not treat global --session as a filter for them.af --session <session> observe page --field screen --field refs --max-rows 80af --session <session> memory contextaf memory search --app <current-app>af memory experience --app <current-app> --activity <current-activity> --page-fp "<page-fingerprint>"af --session <session> observe page (add --field refs if needed).Continue only from fresh observations. Do not run blind action chains.
After solving a non-trivial problem:
af --session <session> memory save --app <pkg> --topic "<category>/<name>" --content "<what you learned>"For experience learning, keep this exact order:
observe the starting page.act.observe again.verify.act and recover invalidate the cached page fingerprint. A transition is recorded only when a fresh successful observation happens after the action and before verification.
Always returns: topActivity, mode, hasWebView, nodeReliability.
--field | What it adds |
|---|---|
screen (default) | Row counts, fingerprint rows, and a JSON artifact path for full rows |
refs | Clickable ref aliases with refVersion |
Use the returned screen.artifact saved path when full page rows are needed. observe screenshot and overlay commands are diagnostics only; they do not refresh memory context.
topActivity is null when the service cannot confirm a stable value. Re-observe before acting.
af --session <session> act tap --by ref --value @nKaf --session <session> act tap --by text|desc|resid --value "<value>" [--exact-match]af --session <session> act tap --xy X,YOther actions exist for non-tap flows: swipe, text, launch, stop, key, back, home.
af --session <session> observe page --field refs.af --session <session> verify top-activity --expected "<activity>" --mode containsaf --session <session> verify text-contains --text "<text>"af --session <session> verify node-exists --by text|desc|resource_id|class --value "<value>" [--exact-match]top-activity --mode is contains or equals. text-contains is case-insensitive by default; use --case-sensitive only when exact case matters.
On WebView-heavy pages (hasWebView=true or nodeReliability=low), prefer text-contains. Do not rely on node/ref structure inside WebView content.
When state is uncertain:
af --session <session> observe page --max-rows 120af memory experience --app <pkg> --activity <act> --failure-cause <cause>af --session <session> recover back --times 1 for modal/back-stack drift.af --session <session> recover home for lost navigation context.af --session <session> recover relaunch --package <pkg> for app reset.af memory log --for-session <session> --status failed --limit 5af --session <session> observe overlay set --enable --mark-scope all --refresh on --refresh-interval-ms 800
af --session <session> observe screenshot --annotate --hide-overlay --max-marks 120 --mark-scope interactive
af --session <session> observe overlay set --disable --mark-scope all --refresh offArtifacts still write to disk when memory is disabled, but DB artifact ids may be absent.
| Prefix | Purpose |
|---|---|
nav/ | Navigation paths between screens |
pitfall/ | Known problems and workarounds |
selector/ | Reliable selector strategies |
recovery/ | Recovery strategies that worked |
--session stable and unique per task.af memory experience before acting on unfamiliar pages.af --session <session> memory context to inspect the current cached page fingerprint.af memory log --for-session <session> and af memory stats --for-session <session> to inspect failures and session quality.© felinics, 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 cli/skills/autofish-control of felinics/Autofish.
Open the folder on GitHubat commit 5ab0a73
Autofish Android Control 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 |
|---|---|---|---|---|---|---|
| Autofish Android Control this skillfelinics/Autofish | 118 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Burner Phone Android Controlsmallnest/goclaw | 599 | — | ~436 | Automated safety check: Pass | MIT | |
| OpenGUI Android ControlCore-Mate/OpenGUI | 1.8k | — | ~788 | Automated safety check: Pass | Custom licence | |
| Mobilerun Docs Referencedroidrun/mobilerun | 9.6k | — | ~943 | Automated safety check: Pass | MIT | |
| Appiumblokadaorg/blokada | 3.3k | — | ~3.5k | Automated safety check: Pass | MPL-2.0 | |
| Phone HarnessShawnPana/phone-harness | 3.2k | — | ~4.3k | Automated safety check: Pass | MIT |
smallnest/goclaw
Controls an Android device over ADB in a loop of screenshot, vision analysis, tap and verification, so the agent acts on real on-screen coordinates.
Core-Mate/OpenGUI
Drives locally connected Android phones through OpenGUI screenshots and allowlisted actions, one observed step at a time, for app, game and multi-device tasks.
droidrun/mobilerun
Answers questions about Mobilerun, the LLM-agent framework for automating Android and iOS devices, by pointing the agent to the right page of its v5 documentation.
blokadaorg/blokada
A skill your agent uses for dynamic inspection and navigation of the Blokada app through the repo-local Appium machine session.
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.
rounak/PhoneAgent
Control a connected iPhone, iOS simulator, Android emulator, or Android device from macOS through PhoneAgent's JSON-RPC bridge.
Works with
Categories
Controls an Android device through the af CLI with observe, act and verify steps, ref-based taps, screenshots and recovery when a step goes wrong. The skill asks for deterministic control with evidence at every step. The agent reads the current screen and its element refs with af observe, performs exactly one action, then verifies the result, and it taps by refs such as @nK instead of screen coordinates so a run can be replayed reliably.
Autofish Android Control fits situations like: navigating an Android app's UI through Autofish; replaying a mobile workflow with stable element refs instead of coordinates; verifying the screen after each action in a phone automation; recovering when an automated step lands on the wrong screen.
Run `npx skills add felinics/Autofish --skill autofish-control -a claude-code`. Or copy the skill folder (cli/skills/autofish-control in felinics/Autofish) into .claude/skills/autofish-control in your project. Claude Code loads it when a task matches its description.
Run `npx skills add felinics/Autofish --skill autofish-control -a codex`. Or copy the skill folder (cli/skills/autofish-control in felinics/Autofish) into .agents/skills/autofish-control 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 felinics/Autofish --skill autofish-control -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/autofish-control, .gemini/skills/autofish-control, .github/skills/autofish-control and .opencode/skills/autofish-control in your project.
Going by SKILL.md and its folder, Autofish Android Control needs credentials named AF_TOKEN. Our summary lists: The af CLI; The Autofish Android app with its URL and access token; adb, for USB connections.
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.
Autofish Android Control is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.8k 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 Autofish Android Control: Burner Phone Android Control (smallnest/goclaw, 599 stars), OpenGUI Android Control (Core-Mate/OpenGUI, 1.8k stars), Mobilerun Docs Reference (droidrun/mobilerun, 9.6k stars) and Appium (blokadaorg/blokada, 3.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
felinics (a GitHub organization) maintains it in felinics/Autofish, which has 118 GitHub stars. The repository was last updated on August 29, 2026.
Source: felinics/Autofish on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.