Phone Harness
ShawnPana/phone-harness
Control the user's phone - an iPhone through the Mac's iPhone Mirroring window, an Android over adb, a rented cloud Android, or a cloud iPhone over HTTPS: open apps, tap, type, swipe, read the screen.
Drive a pre-known multi-agent path as a maestro graph - run it by name or from a file you just wrote, pull each agent node with graph next, spawn it as a sub-agent under its maestro-<profile…
$ npx skills add ReinaMacCredy/maestro --skill maestro-graph -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ReinaMacCredy/maestro maestro-graph --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/ReinaMacCredy/maestro.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/plugins/skills/maestro-graph .claude/skills/maestro-graph && 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 "maestro-graph" agent skill from https://github.com/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graph into .claude/skills/maestro-graph/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maestro-graph", 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/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graphType 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 ReinaMacCredy/maestro --skill maestro-graph -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ReinaMacCredy/maestro maestro-graph --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ReinaMacCredy/maestro.git skills-src && mkdir -p .agents/skills && cp -r skills-src/src/plugins/skills/maestro-graph .agents/skills/maestro-graph && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "maestro-graph" agent skill from https://github.com/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graph into .agents/skills/maestro-graph/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maestro-graph", 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 ReinaMacCredy/maestro --skill maestro-graph -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ReinaMacCredy/maestro maestro-graph --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ReinaMacCredy/maestro.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/src/plugins/skills/maestro-graph .cursor/skills/maestro-graph && 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 "maestro-graph" agent skill from https://github.com/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graph into .cursor/skills/maestro-graph/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maestro-graph", 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/ReinaMacCredy/maestro.git --path src/plugins/skills/maestro-graph--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 ReinaMacCredy/maestro --skill maestro-graph -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ReinaMacCredy/maestro maestro-graph --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ReinaMacCredy/maestro.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/src/plugins/skills/maestro-graph .gemini/skills/maestro-graph && 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 "maestro-graph" agent skill from https://github.com/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graph into .gemini/skills/maestro-graph/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maestro-graph", 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 ReinaMacCredy/maestro maestro-graphInstalls 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 ReinaMacCredy/maestro --skill maestro-graph -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ReinaMacCredy/maestro.git skills-src && mkdir -p .github/skills && cp -r skills-src/src/plugins/skills/maestro-graph .github/skills/maestro-graph && 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 "maestro-graph" agent skill from https://github.com/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graph into .github/skills/maestro-graph/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maestro-graph", 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 ReinaMacCredy/maestro --skill maestro-graph -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ReinaMacCredy/maestro maestro-graph --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ReinaMacCredy/maestro.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/src/plugins/skills/maestro-graph .opencode/skills/maestro-graph && 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 "maestro-graph" agent skill from https://github.com/ReinaMacCredy/maestro/tree/main/src/plugins/skills/maestro-graph into .opencode/skills/maestro-graph/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "maestro-graph", 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.
maestro-graphDrive a pre-known multi-agent path as a maestro graph - run it by name or from a file you just wrote, pull each agent node with graph next, spawn it as a sub-agent under its maestro-<profile…
Maestro Graph is an agent skill from ReinaMacCredy/maestro. Drive a pre-known multi-agent path as a maestro graph - run it by name or from a file you just wrote, pull each agent node with graph next, spawn it as a sub-agent under its maestro-<profile definition, hand the result back with graph result, repeat until the verdict. A sub-agent node is read-only scouting; a node that writes files or is accepted is opened as a pane instead. Author a new graph from the reference when no preset fits.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/authoring.md`).
It sits in Mobile, covering Mobile testing and debugging and Subagents. The repository describes itself as: Local-first coordination for human and agent work: durable work, decisions, dispatches, evidence, and prompt-first methods, powered by TypeScript and Bun. The licence is MIT.
Read from SKILL.md and the folder at commit 2412403. 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.
Shell commands in SKILL.md call:
python3claudecodexFrom 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 no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Maestro Graph loads about 2.1k tokens when it runs, and up to ~4k if it reads all its reference files. Until then it costs about 113 tokens; SKILL.md has 955 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 ReinaMacCredy/maestro at commit 2412403, republished under its MIT licence (© ReinaMacCredy). 955 words, ~2,081 tokens.
.claude/skills/maestro-graph/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.<!-- maestro-skill-version: dev -->
Use when a task is a pre-known path with several agent steps: a review gate, a research sweep, a judge panel, a fix loop. The path is one markdown graph file; maestro holds the run, executes the deterministic nodes itself and hands you only the agent and human nodes to spawn. maestro never starts a model (Hub d78), so the loop below is yours on every harness. Design, diagnosis and the SLP seat protocol stay outside graphs.
maestro graph list shows every graph across the repo
(<repo>/.maestro/graphs), the room (~/maestro/graphs) and the shipped
set; a nearer file shadows a farther one by name. maestro graph show <name> prints one.review-gate takes range=<git range> and tier=light|full; fix-loop takes scope=<what to fix> and
check=<command that must pass> and drives a writing fixer for at most
three rounds; council takes brief=<neutral brief> and
tier=lens|debate|debate-with-proof|high-risk and runs the maestro-council
protocol with you (the Lead) answering the draft and verdict nodes.--file <path>. Keep a good one by copying the file into a graphs
directory (Hub d100; there is no save verb).maestro graph run <name>|--file <path> [key=value ...] [--limit k=v] --json > run.json
loop:
envelope = read run.json (or maestro graph next <run> --json > run.json)
if envelope.done: stop; the verdict, LIMIT stop or failed node is in it
for each node in envelope.nodes (all at once, they are independent):
kind human -> stop and ask the user the prompt; feed the answer back
kind agent -> spawn a read-only scouting sub-agent with the node's profile and brief
for each returned sub-agent:
maestro graph result <run> <ref> --file <path>|--text "<result>"
maestro graph next <run> --jsonmaestro work add --to <peer> and its result handed back
with graph result as before.run returns the first envelope, so the first next is implicit.--json envelope to a file and read the fields you need
out of it (jq, or one python3 -c line); never let it land inline. An
envelope carrying several node briefs and their schemas routinely passes
a harness output cap, and a truncated envelope costs a second read of the
same bytes before the loop can continue.nodes is ready now; spawn them in parallel. Nodes that
depend on one of them appear on a later next, as soon as their own
inputs are in: only a join waits for a whole fan-out (Hub d82).ref is the node id, or node@key for one instance of a foreach.schema must return JSON of that shape. Write the
sub-agent's answer to a file and pass --file; maestro extracts the
first JSON block from prose or a fence. PARSE_FAILED with retry: true means re-ask that sub-agent for JSON matching the schema carried
in the error (two retries); the third failure marks the node failed and
the run ends with failed.stopped: "LIMIT" ends the run at a structural limit (nodes, loops,
fanout, Hub d84) with partial state; rerun with --limit <k>=<N>
when the cap, not the graph, was wrong.GRAPH_UNTRUSTED on a repo graph's function node: review the file the
error names, then run the maestro graph trust command it gives and
graph next again. Home and shipped graphs never ask.maestro trace <run> is the journal: every node transition and round.The profile is a definition maestro install rendered for both harnesses
(Hub d83): ~/.claude/agents/maestro-<profile>.md and
~/.codex/agents/maestro-<profile>.toml.
Agent tool with subagent_type: "maestro-<profile>",
model: "opus", and the node's brief verbatim as the task.
A profile whose harness is codex (challenger, verifier, auditor) opens
as a Codex pane with --profile maestro-<profile> instead; the Agent tool
rejects its model.spawn_agent with agent type maestro-<profile> and the node's
brief verbatim.Send the brief, never the bare prompt: the brief is the prompt plus, when
a schema is declared, one sentence naming the required keys and any optional
keys, then the schema as a JSON block (Hub d843), so the agent answers in the declared
shape instead of its harness habit. It already
carries the run state the graph author placed in it. Add only what the harness needs to return
the answer (for example, "write your JSON answer to <path>"). Never merge
two nodes into one spawn and never run a function node's command yourself;
maestro already did.
graph run reports executor in every envelope (Hub d88): subagent
from a plain session, claude -p, codex exec or a desktop app; team
when the driver is a role pane of a running SLP team. Under team the
Lead is the driver and each agent node is one Peer work item (Hub d89);
the Lead is never a node and maestro still spawns nothing.
Team Supervisor: maestro work add "run graph <name> <key=value ...>" \
--acceptance "the run's verdict"
Lead: maestro work take <item>
maestro graph run <name> [key=value ...] --json
loop:
envelope = the JSON just returned (or maestro graph next <run> --json)
if envelope.done: maestro work return <item> "<verdict JSON>"; stop
for each node in envelope.nodes without a work field:
kind human -> answer it yourself: maestro graph result <run> <ref> --text "<answer>"
kind agent -> maestro work add "<node.brief>" --to peer-<node.profile> \
--acceptance "one JSON object matching the schema in the brief" --json
maestro graph result <run> <ref> --work <new item id>
for each node with a retry field (its item's body failed the schema):
open a fresh item with node.brief and rebind exactly as above; two
retries, the third failure fails the node
for each node with a work field whose workState is RETURNED:
read it (maestro status <item>), then maestro work accept <item>
(or maestro work note <item> "<gap>" --rework for one retake)
maestro graph next <run> --json
Team Supervisor: maestro work accept <item>--to peer-<profile> opens the Peer lazily on the
first item and sends later nodes of that profile to the same pane; each
work add wakes the pane with [from lead][<id> OPEN], so no hand prompt.nodes with work and workState until its item
is DONE; next then parses the item's returned body like any result
(schema and all) and issues what depended on it. A body that fails the
schema unbinds the node and lists it with retry: {error, schema, work},
twice at most (d843); a cancelled item fails the node.limits.fanout; keep the fan-out under the
number of Peers you are willing to open.work add, accept and
return above is yours (A7).The verdict is the run's evidence on its work item (maestro work show <run>); quote it in the return that asked for the gate. A graph that
misbehaved is a finding for the handback, not a card.
© ReinaMacCredy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in src/plugins/skills/maestro-graph of ReinaMacCredy/maestro.
Open the folder on GitHubat commit 2412403
Maestro Graph 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 |
|---|---|---|---|---|---|---|
| Maestro Graph this skillReinaMacCredy/maestro | 233 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Phone HarnessShawnPana/phone-harness | 3.2k | — | ~7.7k | Automated safety check: Pass | MIT | |
| Maa Issue Log AnalysisMaaAssistantArknights/MaaAssistantArknights | 24k | — | ~4k | Automated safety check: Pass | AGPL-3.0 | |
| Mobile QAtloncorp/tlon-apps | 107 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Store Listing Screenshotstherxmv/Telegram-Themer | 119 | — | ~2.5k | Automated safety check: Pass | None | |
| Androidyang1ming/android-harness | 176 | — | ~259 | Automated safety check: Pass | MIT |
ShawnPana/phone-harness
Control the user's phone - an iPhone through the Mac's iPhone Mirroring window, an Android over adb, a rented cloud Android, or a cloud iPhone over HTTPS: open apps, tap, type, swipe, read the screen.
MaaAssistantArknights/MaaAssistantArknights
分析 MaaAssistantArknights 上游仓库公开 Issue(https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...
tloncorp/tlon-apps
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
therxmv/Telegram-Themer
Generate TelegramThemer's Play Store listing images — capture the 8 required app screenshots on a running emulator/device by driving the real UI with adb, then composite them into the final…
yang1ming/android-harness
Direct Android device control through ADB. An agent skill from yang1ming/android-harness.
haumacher/phoneblock
Decode and analyze an ESP32 dongle crash report (uploaded .coredump).
ReinaMacCredy/maestro
Turn filed lessons into the smallest doctrine edit. An agent skill from ReinaMacCredy/maestro.
ReinaMacCredy/maestro
Lead-only council for a hard-to-reverse fork - a neutral brief, sealed independent seats, one premise verifier on unanimity, bounded verifiers, one cross-examination round, a draft-verdict audit…
ReinaMacCredy/maestro
Resolve material unknowns blocking the next authorized slice, using research, grilling, prototypes, models, or wayfinding.
ReinaMacCredy/maestro
Verify and close - cross-check coverage, run the VERIFY table, deliver the verdict, harvest durable lessons into decisions, close the bundle, and never claim remote state from local evidence.
ReinaMacCredy/maestro
Implement or fix one authorized unit with minimal edits and sufficient evidence.
ReinaMacCredy/maestro
Route work into the right maestro tier and drive the SPEC/NOTES/VERIFY bundle lifecycle - open, resume, close, recall.
Categories
Drive a pre-known multi-agent path as a maestro graph - run it by name or from a file you just wrote, pull each agent node with graph next, spawn it as a sub-agent under its maestro-<profile…. Maestro Graph is an agent skill from ReinaMacCredy/maestro. Drive a pre-known multi-agent path as a maestro graph - run it by name or from a file you just wrote, pull each agent node with graph next, spawn it as a sub-agent under its maestro-<profile definition, hand the result back with graph result, repeat until the verdict.
Maestro Graph fits situations like: tasks that involve Mobile testing and debugging; tasks that involve Subagents.
Run `npx skills add ReinaMacCredy/maestro --skill maestro-graph -a claude-code`. Or copy the skill folder (src/plugins/skills/maestro-graph in ReinaMacCredy/maestro) into .claude/skills/maestro-graph in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ReinaMacCredy/maestro --skill maestro-graph -a codex`. Or copy the skill folder (src/plugins/skills/maestro-graph in ReinaMacCredy/maestro) into .agents/skills/maestro-graph 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 ReinaMacCredy/maestro --skill maestro-graph -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/maestro-graph, .gemini/skills/maestro-graph, .github/skills/maestro-graph and .opencode/skills/maestro-graph in your project.
Going by SKILL.md and its folder, Maestro Graph needs the command-line tools its instructions call (python3, claude and codex). Our summary lists: Python 3.
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.
Maestro Graph is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Maestro Graph: Phone Harness (ShawnPana/phone-harness, 3.2k stars), Maa Issue Log Analysis (MaaAssistantArknights/MaaAssistantArknights, 24k stars), Mobile QA (tloncorp/tlon-apps, 107 stars) and Store Listing Screenshots (therxmv/Telegram-Themer, 119 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ReinaMacCredy (a GitHub user) maintains it in ReinaMacCredy/maestro, which has 233 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on September 28, 2026.
Source: ReinaMacCredy/maestro on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.