Maestro is a testing framework for automating user-interface and end-to-end tests for Android, iOS, and web applications. Testers define interactions in human-readable YAML flows and run them on emulators, simulators, browsers, or real devices. The catalogue includes skills, instructions, and an agent for using Maestro.
Borrowing it
Nothing to install: this file belongs to mobile-dev-inc/Maestro. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/mobile-dev-inc/Maestro/main/.claude/skills/release/SKILL.mdgit clone --depth 1 https://github.com/mobile-dev-inc/MaestroWrote 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/mobile-dev-inc/maestro/release)<a href="https://agentmods.dev/skills/mobile-dev-inc/maestro/release"><img src="https://agentmods.dev/badge/skills/mobile-dev-inc/maestro/release/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/mobile-dev-inc/maestro/release"><img src="https://agentmods.dev/badge/skills/mobile-dev-inc/maestro/release.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 6 findings, up to high
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 →
- high YARA Match · line 13 YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).Fix: Remove the malware payload or compromised file entirely. Investigate how it entered the skill and audit all other artifacts for additional indicators of compromise.
- high Tool Misuse · line 83 Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
- high Tool Misuse · line 167 Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
- high Supply Chain · line 257 Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.Fix: Avoid downloading and executing remote scripts. Use trusted packages from PyPI/npm. If remote fetch is required, verify checksums and use HTTPS.
- medium Excessive Agency · line 13 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
- medium Excessive Agency · line 308 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
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.00066 | $0.05526 |
| Opus 5.5 | $0.00026 | $0.02210 |
| Sonnet 5.5 | $0.00013 | $0.01105 |
| Haiku 4.5 | $0.00007 | $0.00553 |
Grade C, and why
release scanned grade C with 2 findings 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 1mo 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.
Downloads and executes remote codehighSupply chain
curl | sh runs whatever the server returns today, which is not necessarily what it returned when this was reviewed.
PATH="$NOBREW" HOME="$TMP" MAESTRO_DIR="$TMP/.maestro" bash -c 'curl -Ls "https://get.maestro.mobile.dev" | bash' Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
PATH="$NOBREW" HOME="$TMP" MAESTRO_DIR="$TMP/.maestro" bash -c 'curl -Ls "https://get.maestro.mobile.dev" | bash' How it starts
The opening of the file, as written. The whole thing — 314 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Release Maestro
This is the release doc for the Maestro repo. There is no other one: RELEASING.md points here.
Policy
- The commit you release must already have been deployed to Maestro Cloud and run there for about a day. How that happens is not this repo's business; maintainers know. The skill asks you to confirm it and takes your word.
- Two human checkpoints. The version is a judgment call and it gets baked into the changelog, both
gradle.properties, the branch, the commit, the PR title, and the tag — so you confirm it before any of that is written (Checkpoint 1). Then everything is drafted into a PR, and you say go once (Checkpoint 2); after that the skill merges, tags, publishes the CLI, and verifies without asking again. Nothing lands onmainbefore Checkpoint 2. - Checkpoint 2 comes after the PR is approved and required checks are green.
mainrequires one approving review and passing required checks (the e2e suite is one). The checklist asks you to get both before you say go; the skill checks them once and merges — it doesn't wait or poll. - Propose the version, don't ask for it. Read the commits since the last release and recommend a bump with the Semver rubric. The human confirms or overrides at Checkpoint 1; they own the call, the skill just does the arithmetic and makes the case.
- Don't wait for Maven Central. Pushing the tag triggers
publish-release.yaml; it runs on its own and the CLI publish doesn't depend on it. - Don't announce.
publish-cli.yamlmakes jreleaser publish a GitHub release;notify-release-comms.ymlfires on that andmobile-dev-inc/release-commsDMs the releaser to start the announcement flow. - Downstream is not described here. Maestro Cloud and Studio pick up the tag through their own processes.
Inputs
| Input | Default | Notes |
|---|---|---|
version |
propose | The skill proposes X.Y.Z (no v) from the commits since the last tag using the Semver rubric, and you confirm or override at Checkpoint 1. If the invocation names a version, use it — but still map the commits and flag a mismatch at Checkpoint 1 (e.g. the number says minor, the commits are all fixes). |
sha |
origin/main HEAD |
Always print the resolved full sha. It must equal origin/main HEAD. It's here so you can confirm which commit is being released, not so you can pick an older one. |
dry-run |
off | Only when the invocation explicitly says "dry run". Never offer it as an option or ask about it. In dry-run the skill drafts locally and stops at Checkpoint 2, then runs Dry-run cleanup; it never pushes, opens a PR, tags, or dispatches a workflow. |
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.
- 1mo ago First seen · 314 lines · 66 tokens per session scan C ff9931b8ff70
release is a skill published in the GitHub repository mobile-dev-inc/Maestro (16,251 stars, last pushed yesterday), licensed Apache-2.0. It adds 66 tokens to every session and 5,526 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it C with 2 findings (downloads and executes remote code, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
release-process
Step-by-step release checklist for Squad — prevents v0.8.22-style disasters.
npm-publish
Publish the create-cmp CLI to npm as the create-cmp-cli package. Use this when the user asks to "publish create-cmp to npm", "release a new version", "ship create-cmp-cli", "npm publish this", "cut a release", or wants npx create-cmp-cli to work. Runs unattended when a granular npm token is installed in the user's…
build-release-engineer
!cat skills/shared/game-visual-foundations.md 2>/dev/null || echo "=== Visual Foundations not loaded ===" !cat skills/shared/protocols/ux-protocol.md 2>/dev/null || true !cat skills/shared/protocols/input-validation.md 2>/dev/null || true !cat skills/shared/protocols/tool-efficiency.md 2>/dev/null || true !cat…
git-workflow
Squad branching model: dev-first workflow with insiders preview channel.
release-kotlin-library
Use when preparing, publishing, or checking readiness for a Kotlin library release, including verifying its gradle-maven-publish-plugin prerequisite, reconciling changelogs and API snapshots, and checking publication.
release-new-version
Use when the user wants to release a new Zafiro version — drafting bilingual release notes, deciding the next version number, bumping app/build.gradle.kts, tagging, and publishing to GitHub (main repo, optionally the Xposed repo).