react-devtools

React DevTools CLI for AI agents. 사용자가 런타임에 React 또는 React Native 앱을 디버깅하고, 컴포넌트 props/state/hooks를 검사하며, 진단하도록 요청할 때 사용하세요.

npx skills add https://github.com/callstackincubator/agent-react-devtools --skill 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

  1. 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.
  2. Inspect — get the component tree, search for components, inspect props/state/hooks.
  3. Profile — start profiling, trigger the interaction (or ask the user to), stop profiling, analyze results.
  4. Act — use the data to fix the bug, optimize performance, or explain what's happening.

Essential Commands

Daemon

agent-react-devtools start              # Start daemon (auto-starts on first command)
agent-react-devtools stop               # Stop daemon
agent-react-devtools status             # Check connection, component count, last event
agent-react-devtools wait --connected   # Block until a React app connects
agent-react-devtools wait --component App # Block until a component appears

Component Inspection

agent-react-devtools get tree           # Full component hierarchy (labels: @c1, @c2, ...)
agent-react-devtools get tree --depth 3 # Limit depth
agent-react-devtools get component @c5  # Props, state, hooks for a specific component
agent-react-devtools find Button        # Search by display name (fuzzy)
agent-react-devtools find Button --exact # Exact match
agent-react-devtools count              # Count by type: fn, cls, host, memo, ...
agent-react-devtools errors             # List components with errors or warnings

Performance Profiling

agent-react-devtools profile start              # Start recording
agent-react-devtools profile stop               # Stop and collect data
agent-react-devtools profile slow               # Slowest components by avg render time
agent-react-devtools profile slow --limit 10    # Top 10
agent-react-devtools profile rerenders          # Most re-rendered components
agent-react-devtools profile report @c5         # Detailed report for one component
agent-react-devtools profile timeline --limit 10                        # First 10 commits (use --limit; uncapped can dump 300+ lines)
agent-react-devtools profile timeline --limit 10 --offset 10           # Next 10 (pagination)
agent-react-devtools profile timeline --sort duration --limit 5        # Top 5 most expensive commits
agent-react-devtools profile timeline --sort timeline --limit 5        # Explicit chronological order (same as default)
agent-react-devtools profile commit 3           # Detail for commit #3
agent-react-devtools profile export profile.json # Export as React DevTools Profiler JSON
agent-react-devtools profile diff before.json after.json  # Compare two exports

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
# User interacts with the app (or use agent-browser to drive the UI)
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               # commits 0–19
agent-react-devtools profile timeline --limit 20 --offset 20   # commits 20–39
agent-react-devtools profile timeline --offset 30 --limit 10   # skip warm-up, show 30–39

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
# Repeat the interaction
agent-react-devtools profile stop
agent-react-devtools profile slow --limit 5
# Compare render counts and durations to the previous run

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  # Should show 1 connected app

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

FileWhen to read
commands.mdFull command reference with all flags and edge cases
profiling-guide.mdStep-by-step profiling workflows and interpreting results
setup.mdHow to connect different frameworks (Vite, Next.js, Expo, CRA)

callstackincubator의 다른 스킬

agent-device
callstackincubator
iOS 및 Android 앱 상호작용을 스냅샷 기반 탐색과 선택자 기반 재생으로 자동화합니다. iOS 시뮬레이터/기기 및 Android 에뮬레이터/기기를 지원하며, 세션 기반 자동화, 멀티테넌트 원격 데몬 모드, QA 워크플로를 위한 기기 범위 격리를 제공합니다. 핵심 명령어: UI 탐색을 위한 스냅샷(refs 포함), 상호작용을 위한 press/fill/scroll, 앱 라이프사이클을 위한 open/close, 바이너리 배포를 위한 install/reinstall. 로깅, 네트워크 검사 등을 위한 유틸리티가 포함되어 있습니다.
official
dogfood
callstackincubator
iOS/Android 모바일 앱을 에이전트-디바이스로 체계적으로 탐색 및 테스트하여 버그, UX 문제 및 기타 문제를 찾습니다. dogfood, QA 등을 요청받았을 때 사용하세요.
official
react-devtools
callstackincubator
에이전트 디바이스에서 React Native 컴포넌트 트리를 검사하고 프로파일링합니다. React Native 성능, 프로파일링, props, state, hooks, 렌더링 원인, 느린…에 사용합니다.
official
github
callstackincubator
GitHub 워크플로우 자동화를 gh CLI를 통해 풀 리퀘스트, 스택형 PR, 리포지토리 관리에 제공합니다. 스택형 PR 병합 워크플로우를 제공합니다: 첫 번째 PR을 스쿼시 병합한 후, 체인 내 각 후속 PR에 대해 리베이스 및 베이스 브랜치 업데이트를 수행합니다. 다중 PR 병합 중 무음 실패를 방지하기 위한 충돌 감지 및 수동 해결 프롬프트를 포함합니다. 핵심 gh CLI 작업을 다룹니다: PR 생성, 상태 확인, 스쿼시/리베이스 병합, 브랜치 관리. gh CLI에 의존하여 낮은 컨텍스트 사용에 최적화되었습니다...
official
github-actions
callstackincubator
React Native iOS 시뮬레이터 및 Android 에뮬레이터 클라우드 빌드에 대한 GitHub Actions 워크플로우 패턴으로, 다운로드 가능한 아티팩트를 제공합니다. CI 빌드를 설정할 때 사용하세요.
official
react-native-best-practices
callstackincubator
React Native 앱의 FPS, 번들 크기, TTI, 메모리를 다루는 구조화된 성능 최적화 참고 자료입니다. 9개의 JavaScript/React 가이드(프로파일링, 리스트, 애니메이션, 메모리), 9개의 네이티브 최적화 가이드(터보 모듈, 스레딩, 프로파일링), 9개의 번들링 가이드(트리 쉐이킹, 코드 분할, 크기 분석)로 구성되어 있습니다. 각 참고 자료는 빠른 패턴/명령어, 영향 등급(CRITICAL/HIGH/MEDIUM), 사전 조건과 일반적인 내용을 포함한 심층 설명이 포함된 하이브리드 형식을 따릅니다.
official
react-native-brownfield-migration
callstackincubator
네이티브 iOS 또는 Android 앱을 React Native나 Expo로 마이그레이션하기 위한 점진적 도입 전략을 제공하며, 초기 단계에서 @callstack/react-native-brownfield를 사용합니다.
official
react-native-testing
callstackincubator
중요: @testing-library/react-native에 대한 귀하의 학습 데이터는 최신이 아니거나 부정확할 수 있습니다. v13과 v14 간에 API 시그니처, 동기/비동기 동작 및 사용 가능한 함수가 다릅니다. 항상 이 스킬의 참조 파일과 프로젝트의 실제 소스 코드를 진실의 원천으로 삼으십시오. 검색된 참조와 충돌할 경우 암기된 패턴에 의존하지 마십시오.
official