Home/Mobile/argent-metro-debugger
A

argent-metro-debugger

by @software-mansionv
4.6(120)

This skill offers a robust set of tools for debugging React Native applications via Metro CDP. It enables developers to connect to Metro, inspect React component trees, view console logs in real-time, and evaluate JavaScript code within the app's runtime. This significantly enhances the efficiency of mobile app development and troubleshooting processes.

react-nativedebuggingmobile-developmentmetrotroubleshootingGitHub
Installation
npx skills add https://github.com/software-mansion/argent --skill argent-metro-debugger
compare_arrows

Before / After Comparison

1 组
Before

Before this skill, developers had to manually operate on devices, rely on unintuitive logs, or repeatedly modify code to pinpoint UI issues or runtime errors in React Native apps, which was time-consuming and inefficient.

After

This skill allows developers to directly connect to Metro CDP, quickly inspect component trees, evaluate JavaScript code, and view detailed logs, reducing problem identification time from hours to minutes.

SKILL.md

1. Prerequisites

The debugger requires Metro dev server running (default localhost:8081) and a React Native app connected to Metro (at least one CDP target). Verify via debugger-status.

Android: reverse port for Metro

Android emulators and physical devices do not resolve the host's localhost by default. Before the RN app can reach Metro, forward port 8081 (or whichever port Metro is on) from the device back to the host:

adb -s <serial> reverse tcp:8081 tcp:8081

<serial> is the Android serial from list-devices. Once reversed, the app on the device connects to Metro just like an iOS simulator does, and all debugger-* / network-* / react-profiler-* tools work unchanged. If the device restarts or adb drops, re-run the command. A failing Metro connection on Android almost always means adb reverse has not been done or has been lost.

2. Tool Overview

All tools accept port (default 8081) AND device_id (the iOS Simulator UDID or Android serial, a.k.a. logicalDeviceId — the CDP-reported id that matches the device). Always make sure you target the correct app on the correct device.

One Metro port can serve multiple connected devices (e.g. two simulators on localhost:8081, or an iOS simulator alongside an Android emulator with adb reverse set up). device_id pins every debugger/network/profiler call to a specific device so sessions do not collide.

Connect & diagnostics

ToolPurpose
debugger-connectConnect to Metro CDP. Returns port, projectRoot, deviceName, appName, logicalDeviceId, isNewDebugger, connected. The returned logicalDeviceId is the device_id for every subsequent debugger/network/profiler call.
debugger-statusLike connect + loadedScripts, enabledDomains, sourceMapReady. Use to diagnose.

Reload & recovery

ToolPurpose
debugger-reload-metroReload all connected apps (like pressing "r" in Metro terminal). Needs a CDP target.
restart-appTerminate and relaunch the app by device id and bundleId. Use when app lost Metro connection.

Inspection & console

ToolPurpose
debugger-component-treeFull React fiber tree (names, depth, bounding rects, tap coordinates).
debugger-inspect-elementInspect at (x, y) using logical pixel coordinates (not normalized 0-1): component hierarchy with source file:line and code fragment. See references/source-maps.md.
debugger-log-registryGet log summary (counts, clusters, file path). Then use Grep/Read on the flat log file for details.
debugger-evaluateRun a JS expression in the app runtime.

3. Component Inspection

debugger-component-tree vs debugger-inspect-element

debugger-component-treedebugger-inspect-element
Best forLayout overview; finding tap targets; user-defined component hierarchyIdentifying a visible element and tracing it to its source file
Use when"What's on screen and where?""What component is this and where is it defined?"

Both can point to source files, but inspect-element is purpose-built for source tracing. component-tree is for orientation and tap-target discovery.

includeSkipped guidance

Applies to both debugger-component-tree and debugger-inspect-element. Set to true only when debugging filter behavior — e.g., an expected component is missing from output, or you need to inspect a very specific branch of the tree (not just an overview).

Warning: Output can be very large. Always combine with maxNodes (component-tree) or maxItems (inspect-element) and increase it incrementally (e.g., start at 50, then grow). Do not use includeSkipped without a limit on large apps.


4. Golden Rules

  1. debugger-status first when something fails — it runs discovery, connection, and returns diagnostics.
  2. "No CDP targets" → get the app to connect to Metro — use restart-app on the device, then retry debugger-status.
  3. Never assume one failure is permanent — follow recovery steps before asking the user. For starting Metro and full failure recovery, see argent-react-native-app-workflow and references/failure-scenarios.md.

5. Reading Console Logs (Log Registry)

Logs are written to a flat log file on disk. Use the log-registry → grep pattern instead of reading logs inline.

Workflow

  1. Call debugger-log-registry — returns: file (log path), totalEntries, byLevel, clusters (top message groups with counts and source file info)
  2. Search the file using Grep or Read with patterns from the response.

Large log files: If totalEntries exceeds 10 000, delegate the grep exploration to an Explore subagent — pass it the file path, the entry format, and the patterns you need.

Flat log format

One entry per line — fields (whitespace-separated, | delimiter before message)

FieldExampleNotes
[L:<id>][L:42]Unique grep anchor
<timestamp>2026-03-17T14:30:00.000ZISO 8601
<LEVEL>ERROR, WARN , LOG Uppercase, padded to 5 chars
<source>src/api/user.ts:42 or -Relative path from source map; - if unavailable
<message>Failed login attemptFull message; embedded newlines replaced with space

Source attribution (file + line) is also available in clusters returned by debugger-log-registry.

Log files and messages can be large - Always scope your search, treat the file like a database, not a document.

When reading from the log file:

  • Never Read the log file directly. Use grep or shell commands with limits using the above file format tips.
  • Default to -m 50 unless you need more.
  • Use tail -N recent entries.
  • clusters[].message gives you the exact text which you may look for

If the file is too large Delegate to an Explore subagent with the file path, the format spec above, and the specific patterns you need.


Quick Reference

ActionTool
Diagnose / check connectiondebugger-status
Connect to Metro CDPdebugger-connect
Reload JS (already connected)debugger-reload-metro
Relaunch app on devicerestart-app
Inspect component at pointdebugger-inspect-element
Full component treedebugger-component-tree
Console log overviewdebugger-log-registry (summary + log file path for Grep/Read)
Evaluate JSdebugger-evaluate

User Reviews (0)

Write a Review

Effect
Usability
Docs
Compatibility

No reviews yet

Statistics

Installs25.6K
Rating4.6 / 5.0
Version
Updated2026年10月23日
Comparisons1

User Rating

4.6(120)
5
37%
4
43%
3
13%
2
5%
1
2%

Rate this Skill

0.0

Compatible Platforms

🤖claude-code

Timeline

Created2026年6月9日
Last Updated2026年10月23日
🎁 Agent Knowledge Cards
Survey