| name | react-devtools |
| description | React DevTools CLI for AI agents. Use when the user asks you to debug a React or React Native app at runtime, inspect component props/state/hooks, diagnose render performance, profile re-renders, find slow components, or understand why something re-renders. Triggers include "why does this re-render", "inspect the component", "what props does X have", "profile the app", "find slow components", "debug the UI", "check component state", "the app feels slow", or any React runtime debugging task. |
| allowed-tools | Bash(agent-react-devtools:*) |
agent-react-devtools
CLI that connects to a running React or React Native app via the React DevTools protocol and exposes the component tree, props, state, hooks, and profiling data in a token-efficient format.
Core Workflow
- Ensure connection ā check
agent-react-devtools status. If the daemon is not running, start it with agent-react-devtools start. Use agent-react-devtools wait --connected to block until a React app connects.
- Inspect ā get the component tree, search for components, inspect props/state/hooks.
- Profile ā start profiling, trigger the interaction (or ask the user to), stop profiling, analyze results.
- Act ā use the data to fix the bug, optimize performance, or explain what's happening.
Essential Commands
Daemon
agent-react-devtools start
agent-react-devtools stop
agent-react-devtools status
agent-react-devtools wait --connected
agent-react-devtools wait --component App
Component Inspection
agent-react-devtools get tree
agent-react-devtools get tree --depth 3
agent-react-devtools get component @c5
agent-react-devtools find Button
agent-react-devtools find Button --exact
agent-react-devtools count
agent-react-devtools errors
Performance Profiling
agent-react-devtools profile start
agent-react-devtools profile stop
agent-react-devtools profile slow
agent-react-devtools profile slow --limit 10
agent-react-devtools profile rerenders
agent-react-devtools profile report @c5
agent-react-devtools profile timeline --limit 10
agent-react-devtools profile timeline --limit 10 --offset 10
agent-react-devtools profile timeline --sort duration --limit 5
agent-react-devtools profile timeline --sort timeline --limit 5
agent-react-devtools profile commit 3
agent-react-devtools profile export profile.json
agent-react-devtools profile diff before.json after.json
Understanding the Output
Component Labels
Every component gets a stable label like @c1, @c2. Use these to reference components in follow-up commands:
@c1 [fn] App
āā @c2 [fn] Header
āā @c3 [fn] TodoList
ā āā @c4 [fn] TodoItem key=1
ā āā @c5 [fn] TodoItem key=2
āā @c6 [host] div
Type abbreviations: fn = function, cls = class, host = DOM element, memo = React.memo, fRef = forwardRef, susp = Suspense, ctx = context.
Components with errors or warnings show annotations: ā 2 = 2 warnings, ā1 = 1 error. Use agent-react-devtools errors to list only affected components.
Inspected Component
@c3 [fn] TodoList
props:
items: [{"id":1,"text":"Buy milk"},{"id":2,"text":"Walk dog"}]
onDelete: Ę
state:
filter: "all"
hooks:
useState: "all"
useMemo: [...]
useCallback: Ę
Ę = function value. Values over 60 chars are truncated.
Profiling Output
Slowest (by avg render time):
@c3 [fn] ExpensiveList avg:12.3ms max:18.1ms renders:47 causes:props-changed changed: props: items, filter
@c4 [fn] TodoItem avg:2.1ms max:5.0ms renders:94 causes:parent-rendered, props-changed changed: props: onToggle
Render causes: props-changed, state-changed, hooks-changed, parent-rendered, force-update, first-mount.
When specific changed keys are available, a changed: suffix shows exactly which props, state keys, or hooks triggered the render (e.g. changed: props: onClick, className state: count hooks: #0).
Common Patterns
Wait for the app to connect after a reload
agent-react-devtools wait --connected --timeout 10
agent-react-devtools get tree
Use this after triggering a page reload or HMR update to avoid querying empty state.
Diagnose slow interactions
agent-react-devtools profile start
agent-react-devtools profile stop
agent-react-devtools profile slow --limit 5
agent-react-devtools profile rerenders --limit 5
Then inspect the worst offenders with get component @cN and profile report @cN.
Browse a long timeline in chunks
agent-react-devtools profile timeline --limit 20
agent-react-devtools profile timeline --limit 20 --offset 20
agent-react-devtools profile timeline --offset 30 --limit 10
Use profile commit <N> to drill into a specific commit once you spot a spike.
Find a component and check its state
agent-react-devtools find SearchBar
agent-react-devtools get component @c12
Verify a fix worked
agent-react-devtools profile start
agent-react-devtools profile stop
agent-react-devtools profile slow --limit 5
Using with agent-browser
When using agent-browser to drive the app while profiling or debugging, you must use headed mode (--headed). Headless Chromium does not execute ES module scripts the same way as a real browser, which prevents the devtools connect script from running properly.
agent-browser --session devtools --headed open http://localhost:5173/
agent-react-devtools status
Important Rules
- Labels reset when the app reloads or components unmount/remount. After a reload, use
wait --connected then re-check with get tree or find.
status first ā if status shows 0 connected apps, the React app is not connected. The user may need to run npx agent-react-devtools init in their project first.
- Headed browser required ā if using
agent-browser, always use --headed mode. Headless Chromium does not properly load the devtools connect script.
- Profile while interacting ā profiling only captures renders that happen between
profile start and profile stop. Make sure the relevant interaction happens during that window.
- Use
--depth on large trees ā a deep tree can produce a lot of output. Start with --depth 3 or --depth 4 and go deeper only on the subtree you care about.
References
| File | When to read |
|---|
| commands.md | Full command reference with all flags and edge cases |
| profiling-guide.md | Step-by-step profiling workflows and interpreting results |
| setup.md | How to connect different frameworks (Vite, Next.js, Expo, CRA) |