Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/lykhoyda/rn-dev-agent/doctorgit clone --depth 1 https://github.com/Lykhoyda/rn-dev-agentWrote 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/commands/lykhoyda/rn-dev-agent/doctor)<a href="https://agentmods.dev/commands/lykhoyda/rn-dev-agent/doctor"><img src="https://agentmods.dev/badge/commands/lykhoyda/rn-dev-agent/doctor.svg" alt="Measured on agentmods" height="20"></a>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 | $0.00068 | $0.01545 |
| Opus 5 | $0.00034 | $0.00772 |
| Sonnet 5 | $0.00014 | $0.00309 |
| Haiku 4.5 | $0.00007 | $0.00154 |
Grade A, and why
doctor scanned grade A with 0 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 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 69 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Run the environment-diagnostic checklist from the rn-setup skill. Walk all 17 prerequisite checks (Node.js version, CDP bridge dependencies, rn-fast-runner build (iOS), rn-android-runner build/install (Android), maestro-runner, iOS simulator, Android emulator, Metro dev server, CDP connection, injected __RN_AGENT helpers, ffmpeg, idb (screen-mirror fast path), physical-device prerequisites, plugin version freshness, Vercel rules sync freshness, CDP auto-reconnect mode, linked-worktree action inheritance) and surface install commands for any missing dependencies.
iOS device automation is owned by the in-tree rn-fast-runner XCTest project (D1219, PR #164); Android device automation is owned by the in-tree rn-android-runner (UiAutomator instrumentation). These in-tree runners are the sole device backend — there is no external CLI to install. Mark rn-android-runner as N/A on iOS-only setups and rn-fast-runner as N/A on Android-only / non-macOS setups. If a device tool fails with RUNNER_PROTOCOL_MISMATCH, the installed/prebuilt runner artifact predates the plugin's wire protocol: on iOS delete packages/rn-fast-runner/build/DerivedData and re-open the device session (or re-run xcodebuild build-for-testing); on Android re-run ./gradlew :app:assembleDebug :app:assembleDebugAndroidTest and adb install -r both APKs.
This command is read-only. It diagnoses the current environment and recommends fixes. It does NOT modify any files in the user's project, inject documentation, or instrument source code.
Present results as a 17-row table. Follow the detailed probes and remediation
rules in rn-setup; do not infer runner provenance, helper availability, or
auto-reconnect configuration from passive cdp_status.
For iOS replay compatibility, also run the packaged maestro-runner-pin.js diagnose --json
report. State the proof-domain split: exact React testIDs use react-tree; native/system
selectors use xctest-native. A runtime-version heuristic is diagnostic context only and
never proof of blindness. Report NATIVE_SURFACE_BLIND only when the replay includes the
bounded same-screen native-selector evidence; otherwise preserve the ordinary selector miss.
The supported next action is the central native WDA smoke on a WDA-healthy runtime.
For linked-worktree action inheritance, resolve the RN app root and run the packaged worktree-inheritance.js plan --host claude --app-root <app> --json. Report .rn-agent/actions as tracked, inherited, missing, explicit-legacy-repair-needed, unsafe, or refused. Also report hook status. Never apply, repair, install a hook, print a private source path, or inspect an action body from doctor.
For idb, require both a healthy idb --help and idb_companion; an active
install PID is INSTALLING. A client on PATH whose idb --help fails is BROKEN,
not MISSING — report it as installed but not responding, naming the Python 3.14
interpreter incompatibility as the probable cause rather than a certainty (the
probe cannot separate a crash from a timeout or EACCES), and give the pinned
repair command, never a bare pipx install fb-idb. On a machine with no
supported interpreter, prefix that command with brew install [email protected] &&.
Otherwise report MISSING and the documented install command. This row is YELLOW
because mirroring has a screenshot fallback.
For runner provenance, inspect the runner artifact/state metadata documented by
rn-setup. For helpers, use a narrow gated CDP read. For CDP auto-reconnect,
resolve RN_CDP_AUTOCONNECT over .rn-agent/config.json, then the default.
For plugin-version or Vercel-rule drift, report the documented command but do not execute it. Offline version checks do not fail the plugin.
For session-authority health, run the packaged read-only probe from the RN app root:
node "${CLAUDE_PLUGIN_ROOT:-${RN_DEV_AGENT_CODEX_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:?set it to the installed rn-dev-agent plugin root, then re-run}}}/rn-dev-agent-core/dist/session-doctor.js" report --json. The report is
three-state: GREEN when sameRootOwner is absent and wedged and repairable are both
false, YELLOW when repairable is true (a proven-dead owner of this exact root, which the
next transport start or the repair command releases on its own) or sameRootOwner is
live (another session holds this worktree right now — report its ownerSession and
ownerAppRoot instead of GREEN; it is never released and clears when that session closes),
and RED when wedged is true. On RED, name the exact
cause it returns rather than a generic stale-lock story:
sameRootOwner: unprovable (the recorded owner's process identity cannot be read, so it is
conservatively treated as live), startupCleanupBlocked (the owner is proven dead but an
obligation such as RUNNER_ADOPTION_REQUIRED could not be discharged), or ownerIsThisRoot: false, whose ownerMismatch says which: app-root (a proven-dead owner of a different app
root in this worktree) or source-identity (the same app root under different declared
manifests). Also
report abandonedContenders when it is non-zero. The supported repair is
node "${CLAUDE_PLUGIN_ROOT:-${RN_DEV_AGENT_CODEX_PLUGIN_ROOT:-${CODEX_PLUGIN_ROOT:?set it to the installed rn-dev-agent plugin root, then re-run}}}/rn-dev-agent-core/dist/session-doctor.js" repair, which runs the
same proven-dead startup cleanup a fresh transport runs; print it for the user to run, but do
not execute it from doctor. Print it rooted where it can succeed: for ownerMismatch: app-root that is the
reported ownerAppRoot, because repair from the current root can never release another root's
owner. For ownerMismatch: source-identity do not re-root it — the payload's own remedy names
the declared-manifest restore that makes this root's repair work. It never releases a live or unprovable owner and there is no force-steal —
do not suggest deleting or moving files in the authority store. Not every stale lock
self-heals: only a proven-dead owner does.
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 · 69 lines · 68 tokens per session scan A 16c6d47a02b1
doctor is a command published in the GitHub repository Lykhoyda/rn-dev-agent (11 stars, last pushed 3d ago), licensed MIT. It adds 68 tokens to every session and 1,545 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
dashboard-flow-auto
Toggle autonomous mode for a session's flow. Usage /dashboard:flow-auto.
dashboard-git-branches
List git branches for the current dir (current marked ). Runs locally, no LLM.
brainstorm
Command dispatcher for brainstorm.
discover
Command dispatcher for discover.
propose
Command dispatcher for propose.
accept
Command dispatcher for accept.