Agents
For AI agents
Pick the route that fits your agent:
| Your agent | Use | Set up |
|---|---|---|
| Claude Code | The plugin: the CLI plus a skill that teaches the loop | /plugin install looktap --marketplace lakpriya1s/looktap, then /looktap:setup (details) |
| Other agents with a shell (Codex, Cursor's agent, opencode, …) | The CLI plus the skill file | looktap skill --install (or looktap skill prints it) |
| Chat apps without a shell (Claude Desktop, …) | The MCP server | npx -y @looktap/mcp (details) |
An agent spends seconds per turn, so turns matter more than milliseconds. looktap is built to save them: in the benchmark the CLI needed 8 calls for a scenario that took other tools 9–27 on iOS, and 12 where they took 11–19 on Android.
--lson any action prints the screen once it has settled, so acting and looking take one turn instead of two:looktap tap @3 --ls looktap fill "Email" [email protected] --lswaitinstead of guessingsleeps. After an action that loads data,--lscan return a loading skeleton, so wait for the text you expect.runbatches steps you already know into one call and one process. It prints each step as$ <step>, stops at the first failure, and names it:looktap run 'tap General; wait About; tap About --ls' looktap run - < steps.txt # one step per line, # for commentslogs/crashesafter a step that misbehaved. Eachlogsshows only what's new since the last one.perf/launch --timewhen the question is speed or memory: numbers instead of impressions.perf --forwhile the screen does the thing being measured, andperf --framesbefore and after it.ls --jsonfor structured output:{screen, elements: [{ref, label, type, x, y, w, h, value}]}.shot --scale 0.5costs a quarter of the image tokens when the agent needs to see the screen (layout, colours, images). Usuallylsis enough and the PNG is never opened.- Hints when the screen isn't what it seems. When a passcode or permission prompt covers the app,
lsprints a hint rather than an empty list.
Claude Code plugin
In Claude Code, run:
/plugin install looktap --marketplace lakpriya1s/looktap
- What it adds:
- the looktap skill, which teaches Claude the look-act loop, how to pick targets, when to wait, when a screenshot is worth it, how to debug a crash, and the safety rules;
/looktap:setup, which gets the machine ready: it installs the CLI (asking first), runslooktap doctorand explains each fix, offers to boot a simulator or emulator, walks you through a real iPhone's one-time steps, and finishes with a workingls. Addios,androidoriphoneto set up just that.
- What it doesn't install: Xcode, the Android SDK and the Apple ID sign-in are yours to do;
/looktap:setuptells you exactly what's missing. - What it costs: about 150 tokens per session for the skill's description, and about 4.5k tokens each time Claude loads the skill.
- Staying current: every push to this repo is a new plugin version. Claude Code doesn't auto-update
third-party plugins unless you turn it on (
/plugin→ Marketplaces → looktap → Enable auto-update); otherwise run/plugin marketplace update looktapnow and then. - The CLI: the skill runs
looktapcommands. Install them withnpm install -g @looktap/cli, or the skill falls back tonpx @looktap/cli. - No MCP server inside, on purpose: with a shell, the CLI and the skill do the same job with fewer tokens, and
an MCP server would add its 16 tool definitions to every session. Add
@looktap/mcpseparately if you want it anyway.
MCP server, for clients without a shell
Agents with a shell (Claude Code, Codex, Cursor's agent, …) are best served by the CLI and the skill above.
For chat apps and other clients without a shell, such as Claude Desktop, looktap is also an MCP server,
published as @looktap/mcp and listed in the
MCP Registry as io.github.lakpriya1s/looktap. Nothing to install first:
{ "mcpServers": { "looktap": { "command": "npx", "args": ["-y", "@looktap/mcp"] } } }
If your client can't find npx (desktop apps start servers with a minimal PATH), install the CLI and let it
write the config with absolute paths:
looktap mcp --config # prints a ready-to-paste client config with absolute paths
{
"mcpServers": {
"looktap": {
"command": "/path/to/node",
"args": ["/path/to/looktap/bin/looktap.js", "mcp"],
"env": { "PATH": "/path/to/node/bin:/path/to/Android/sdk/platform-tools:/usr/bin:/bin" }
}
}
}
- Where to paste it:
- Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json - Cursor:
~/.cursor/mcp.json - Claude Code:
claude mcp add looktap -- npx -y @looktap/mcp(no install needed: it runs the latest version from npm). Or the absolute paths:claude mcp add looktap -- <node> <looktap.js> mcp
- Claude Desktop:
- Why absolute paths: desktop apps start servers with a minimal
PATH.looktapalso findsadbin the Android SDK by itself. - The tools:
ls,tap,tap_xy,long_press,fill,type,key,hide_keyboard,swipe,scroll_to,back,homeandwait;screenshot, which returns the image itself;logsandcrashes;perf: CPU, memory and threads, or withframesthe frames and jank since the last call (for: seconds to sample);looktap, for any other command line (apps,perf,launch --time,boot…), or several separated by;.
- Actions return the settled screen unless
ls: false. That saves the agent a separatels, but each action then waits for the screen to stop moving, 0.7–1.9 s in the benchmark. Passls: falsewhen you don't need to see the result. - The device is remembered: name a
platform(ordevice) once when both an iPhone and an Android are booted. - Speed: the server keeps each device's helper connection open, so a warm
lscomes back in 40–70 ms.
Why a CLI first? Any agent with a shell can use it with no configuration, and its output is already as small as
it gets. In the benchmark the CLI beat the MCP server on both platforms, mostly because it doesn't wait for the screen
to settle unless asked (--ls).
Generated from README.md. Edit it there.