Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/kensaurus/cursor-kenjinpx agentmods add skills/kensaurus/cursor-kenji/mobile-emulator-startWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/kensaurus/cursor-kenji/mobile-emulator-start)<a href="https://agentmods.dev/skills/kensaurus/cursor-kenji/mobile-emulator-start"><img src="https://agentmods.dev/badge/skills/kensaurus/cursor-kenji/mobile-emulator-start.svg" alt="Measured on agentmods" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 4 findings, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium MCP Rug Pull · line 103 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
- medium MCP Rug Pull · line 193 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
- medium MCP Rug Pull · line 203 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
- medium MCP Rug Pull · line 196 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00065 | $0.03305 |
| Opus 5 | $0.00032 | $0.01653 |
| Sonnet 5 | $0.00013 | $0.00661 |
| Haiku 4.5 | $0.00006 | $0.00331 |
Grade A, and why
mobile-emulator-start scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
1. **Inspect** — existing terminals, `curl /status`, `adb devices` How it starts
The opening of the file, as written. The whole thing — 295 lines — stays where its author put it; the contents beside it link to each section on GitHub.
mobile-emulator-start — Metro + Android emulator in a sane order
Degree of freedom: MIXED. Reuse vs fresh Metro [HIGH freedom]; port kill,
boot, reverse, /status, then intent [LOW freedom — run exactly].
Deliver a working dev loop (emulator online → tunnel → bundler ready → app intent)
without burning time on duplicate Metros, stale caches, or racing the dev client ahead of
/status.
Pair with
mobile-emulator-testfor full QA; this skill focuses on bring-up + terminal hygiene.
How to reason
- Inspect — existing terminals,
curl /status,adb devices - Decide — reuse a healthy Metro vs one explicit fresh wipe
- Order — free ports → boot AVD → reverse → Metro → wait
/status - Launch — intent only after
packager-status:running
Worked example
Inspect: two terminals on 8081;
adb devicesempty; last intent wasECONNREFUSED. Decide: kill both Metros (not a cache wipe — user asked to start, not "stale bundle"). Order: boot AVD →adb reverse→ oneexpo start --dev-client→ poll/status. Launch:am startthe scheme deeplink; logcat has no immediate refused-to-Metro.
Self-critique before reporting
- One Metro — no second cwd serving the wrong graph
- Order held — emulator in
adb devicesbefore reverse;/statusbefore intent - Size expected —
wm sizeis 1080×2400 unless scroll-QA was requested - Right owner — guest/signed-in QA walk →
mobile-emulator-test; crash after start →debug-error
Critical ordering (why this skill exists) [LOW freedom — run exactly]
- Emulator attached to
adbbefore trustingadb reverse(or reverse again when the serial appears). curl http://127.0.0.1:<PORT>/statusshowspackager-status:runningbefoream start/ dev-client deeplink (avoids “Cannot connect to Expo CLI” /127.0.0.1refused).- Helpers that enumerate devices once at startup may skip
--launch/ reverse if the emulator booted late — re-run reverse + intent afteradb devicesshowsdevice.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 295 lines · 65 tokens per session scan A 3c75782ef280
mobile-emulator-start is a skill published in the GitHub repository kensaurus/cursor-kenji (9 stars, last pushed 9d ago), licensed MIT. It adds 65 tokens to every session and 3,305 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
firebase-crashlytics
Use when implementing crash reporting, capturing fatal/non-fatal errors, recording isolate/async exceptions, customizing reports, or uploading obfuscated symbols.
flutter-errors
Use when hitting layout errors (RenderFlex overflow, unbounded constraints, RenderBox not laid out), scroll errors, or setState-during-build errors.
flutter-pre-caching
Use when preloading fonts, asset/network images, Lottie/Rive animations, local JSON/config, warming initial API data, or optimizing Flutter Web startup.
firebase-messaging
Use when setting up Firebase Cloud Messaging, managing permissions and tokens, handling background/foreground notification taps, or dispatching messages server-side (HTTP v1).
firebase-database
Use when syncing real-time data, structuring JSON trees, reading/writing, creating listeners, enabling offline persistence, managing presence, sharding, or writing security rules.
generate-images-with-firebase-ai
Use when generating or editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana), making the first call work, choosing Gemini Developer API vs Vertex AI, hitting quota, billing or App Check failures, getting empty or image-only responses, sending a user photo as input, controlling…