A Claude Code plugin that turns Claude into a React Native development partner. It explores your codebase, designs architecture, implements features, then verifies everything live on the simulator — reading the component tree, store state, and navigation stack through Chrome DevTools Protocol.
From inside Claude Code, run these commands:
# 1. Add the marketplace
/plugin marketplace add Lykhoyda/react-native-dev-claude-plugin
# 2. Install the plugin
/plugin install rn-dev-agent@Lykhoyda-react-native-dev-claude-plugin
# 3. Reload plugins to activate
/reload-pluginsOr use the interactive UI:
# Open the plugin manager, go to Discover tab
/pluginThis plugin ships frequent updates. Enable auto-update so you always get the latest tools:
# Open plugin manager → Marketplaces tab → select the marketplace → Enable auto-update
/pluginWith auto-update enabled, Claude Code checks for new versions at startup and updates automatically. You'll see a notification to run /reload-plugins when an update lands.
Manual update (if you prefer to control when updates happen):
# Pull the latest version
/plugin update rn-dev-agent@Lykhoyda-react-native-dev-claude-plugin
# Activate changes
/reload-pluginsRefresh marketplace listings (force-check for new versions mid-session):
/plugin marketplace update Lykhoyda-react-native-dev-claude-pluginNote: Third-party marketplaces have auto-update disabled by default. You must enable it explicitly via the plugin manager UI.
Then navigate to your React Native project and start building:
cd /path/to/your-rn-app
claudeOn startup the plugin auto-detects your React Native project and installs maestro-runner and agent-device for device interactions.
Then tell Claude what to build:
/rn-dev-agent:rn-feature-dev add a shopping cart with badge, item list, and checkout flow
That's it. Claude handles the rest.
This is the primary command. It runs an 8-phase development workflow that goes from a feature description to verified, reviewed code with proof screenshots.
| Phase | What happens |
|---|---|
| 1. Discovery | Understand the feature request, create a task plan |
| 2. Exploration | Launch parallel agents to map screens, store, navigation, and conventions |
| 3. Questions | Ask clarifying questions about edge cases, error states, and data flow |
| 4. Architecture | Design the implementation with an Opus-powered architect agent, including E2E proof steps |
| 5. Implementation | Build the feature following the blueprint — store, components, navigation, testIDs |
| 5.5. Verification | Prove it works live: CDP health check, component tree, store state, interaction test, screenshot |
| 6. Review | Launch parallel review agents for correctness, RN conventions, and project patterns |
| 7. Summary | Document what was built, decisions made, files changed, and verification results |
| 8. E2E Proof | Execute the architect's proof flow step by step, capture numbered screenshots, write PROOF.md |
Each phase gates on the previous one. Claude asks for your approval before implementing and before applying review fixes.
- Live verification — After implementation, Claude connects to your running app via CDP, navigates to the feature screen, checks the component tree, exercises interactions, and confirms store state matches expectations. No "trust me it works."
- Architect-designed proof flows — The architect agent (Opus) designs the exact E2E verification steps during Phase 4, including which testIDs to check, which CDP expressions to run, and which screenshots to take. Phase 5.5 executes this plan mechanically.
- 36 best-practice rules — Integrated from Vercel's React Native skills. Every code review (Phase 6) and architecture design (Phase 4) checks against rules covering crash prevention, list performance, animation, state management, and UI patterns.
- Parallel exploration — Phase 2 launches multiple explorer agents simultaneously to map different aspects of your codebase, so Claude understands your patterns before writing a single line.
> /rn-dev-agent:rn-feature-dev add task priority levels (high/medium/low) with color coding and sort
Phase 1: I understand you want priority levels on tasks. Creating task plan...
Phase 2: Launching 3 explorer agents...
- Explorer 1: Found TasksScreen, tasksSlice, 12 testIDs
- Explorer 2: Found Redux Toolkit pattern, createSelector usage
- Explorer 3: Found NativeWind styling, chip-based filter pattern
Phase 3: Before I design this, a few questions:
1. Should priority be required or optional (default medium)?
2. What colors? Red/yellow/green or match your existing theme?
3. Sort by priority — should it be a toggle or replace the existing sort?
> default medium, use theme colors, toggle alongside existing sort
Phase 4: Here's the architecture...
- Extend tasksSlice with priority field + PRIORITY_WEIGHT map
- Add PriorityChip component with cycle-on-press
- Composed selector: selectSortedFilteredTasks
Proceed with implementation?
> yes
Phase 5: Implementing... [creates/modifies 4 files]
Phase 5.5: Verifying live on simulator...
| Check | Result |
|-------|--------|
| Navigation | PASS — on Tasks screen |
| Health | PASS — no errors |
| Component tree | PASS — PriorityChip found with priority="medium" |
| Interaction | PASS — priority cycled to "high", store confirmed |
| Screenshot | PASS — saved to docs/proof/ |
Phase 6: Review agents found 2 issues (both fixed)...
Phase 7: Done. 4 files modified, 3 decisions logged.
Real measurements from the test app (21 stories completed):
| Feature complexity | Time | Crashes | Manual interventions |
|---|---|---|---|
| Simple (search, toggle, store) | 3-5 min | 0 | 0 |
| Medium (forms, charts, lists) | 5-10 min | 0 | 0 |
| Complex (3-step wizard, onboarding) | 11-25 min | 0 | 0 |
| 4-feature batch verification | ~2 min | 0 | 0 |
Libraries tested: react-hook-form, zod, @tanstack/react-query, @gorhom/bottom-sheet, @shopify/flash-list, zustand, react-native-svg, expo-notifications, react-native-reanimated, react-native-gesture-handler, expo-haptics
These are useful on their own or alongside rn-feature-dev:
| Command | When to use |
|---|---|
/rn-dev-agent:test-feature <desc> |
Test an already-implemented feature end-to-end |
/rn-dev-agent:build-and-test <desc> |
Build the app first (if not installed), then test |
/rn-dev-agent:debug-screen |
Diagnose a broken screen — gathers evidence and applies a fix |
/rn-dev-agent:check-env |
Verify Metro, CDP, and simulator are ready |
| Requirement | Notes |
|---|---|
| Node.js >= 22 (LTS) | For the CDP bridge MCP server |
| Claude Code CLI | npm install -g @anthropic-ai/claude-code |
| iOS Simulator or Android Emulator | At least one platform |
| Metro dev server running | npx expo start or npx react-native start |
maestro-runner and agent-device are auto-installed on first plugin load. maestro-runner enables E2E test flows; agent-device provides native device interactions (tap, swipe, type, find elements).
The plugin connects to your running app via Metro's CDP endpoint and reads the React fiber tree directly.
// App.tsx or app/_layout.tsx
if (__DEV__) {
global.__ZUSTAND_STORES__ = {
auth: useAuthStore,
cart: useCartStore,
};
}Zero production cost — stripped in release builds.
Auto-detected. No setup needed.
Add testID to interactive elements for reliable component queries:
<TouchableOpacity testID="checkout-button" onPress={handleCheckout}>
<Text testID="cart-badge">{itemCount}</Text>
</TouchableOpacity>┌─────────────────────────────────────────────────────┐
│ Claude Code │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ Skills │ │ Agents │ │ Commands │ │
│ │ (knowledge) │ │ (protocols) │ │ (entry pts)│ │
│ └──────┬───┬──┘ └──────┬───────┘ └─────┬──────┘ │
│ │ │ │ │ │
│ ┌──────▼───▼────────────▼─────────────────▼──────┐ │
│ │ MCP Server (CDP Bridge) │ │
│ │ WebSocket → Metro → Hermes CDP │ │
│ │ 21 tools: 12 CDP + 8 device + 1 dispatch │ │
│ └─────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌─────────────────────▼───────────────────────────┐ │
│ │ Bash (device lifecycle) │ │
│ │ xcrun simctl / adb / maestro-runner / screenshots│ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
│ │
┌────▼────┐ ┌─────▼─────┐
│ iOS Sim │ │ Android │
│ │ │ Emulator │
└─────────┘ └───────────┘
CDP tools (React internals via Chrome DevTools Protocol):
| Tool | Purpose |
|---|---|
cdp_status |
Health check + auto-connect + auto-recovery |
cdp_component_tree |
React fiber tree (filtered, cycle-safe) |
cdp_navigation_state |
Current route, stack, tabs |
cdp_store_state |
Redux/Zustand/React Query state at a dot-path |
cdp_component_state |
Targeted hook inspection by testID (forms, refs, atoms) |
cdp_dispatch |
Atomic Redux dispatch + state read in single execution |
cdp_network_log |
Recent HTTP requests |
cdp_console_log |
Console output buffer |
cdp_error_log |
JS errors + promise rejections |
cdp_evaluate |
Execute JS in Hermes |
cdp_reload |
Full reload with auto-reconnect |
cdp_dev_settings |
Dev menu actions |
Device tools (native interaction via agent-device CLI):
| Tool | Purpose |
|---|---|
device_list |
List simulators/emulators |
device_screenshot |
Capture screen image |
device_snapshot |
Accessibility tree with @refs |
device_find |
Find element by text, optionally tap |
device_press |
Tap element by @ref |
device_fill |
Type text into input by @ref |
device_swipe |
Directional swipe gesture |
device_back |
System back navigation |
| Problem | Solution |
|---|---|
| "Metro not found" | Start Metro: npx expo start or npx react-native start |
| "No Hermes target" | Open the app on simulator, ensure Hermes is enabled |
| CDP connection rejected (1006) | Close React Native DevTools, Flipper, or Chrome DevTools |
cdp_store_state error for Zustand |
Add global.__ZUSTAND_STORES__ to your app entry |
| Empty error log but app crashed | Native crash — use adb logcat -b crash or Xcode console |
| Plugin not detected | Run /plugin install rn-dev-agent@Lykhoyda-react-native-dev-claude-plugin, or use --plugin-dir for local dev |
/plugin command not found |
Update Claude Code to v1.0.33+: npm update -g @anthropic-ai/claude-code |
| Plugin skills not appearing | Run /reload-plugins or clear cache: rm -rf ~/.claude/plugins/cache |
Plugin update fails with ENOTEMPTY |
Clear the stale cache: rm -rf ~/.claude/plugins/cache/rn-dev-agent, then retry update |
| maestro-runner not in PATH | export PATH="$HOME/.maestro-runner/bin:$PATH" |
git clone https://github.com/Lykhoyda/react-native-dev-claude-plugin.git
cd react-native-dev-claude-plugin
cd scripts/cdp-bridge && npm install && npm run build && cd ../..
# Then use with any RN project
cd /path/to/your-rn-app
claude --plugin-dir /path/to/react-native-dev-claude-pluginFor development only. For normal use, install via the marketplace (see Quick Start above).