Gemini CLI + Expo
In-app feedback for Expo, fixed by Gemini CLI
You are building an Expo or React Native app with Gemini CLI. Gemini CLI is Google's terminal agent. It runs shell commands through its own tool and loads MCP servers from a settings file, so Nitpick fits next to your code like any other server.
1. Paste one prompt into Gemini CLI
Run gemini in your project folder, choose Sign in with Google when it asks, and paste the prompt.
Add Nitpick feedback to this app. Fetch https://nitpickhq.com/install.md and follow every step.Gemini CLI follows install.md. nitpick login opens your browser, where you create an account and start the subscription, and Gemini CLI waits for that before it adds the component.
By default every shell command the agent asks for needs your approval. You can allow it once, allow it always for the rest of the session, or deny it. Starting with gemini --sandbox adds a sandbox on top.
2. What lands in your Expo code
Roughly this. Gemini CLI writes it, you review it.
- Install the packages with Expo's installer so the versions match your SDK, then add the Nitpick package.
- Wrap the root layout in NitpickProvider with your public app key.
- Wrap buttons, fields and cards in NitpickElement and give each a name.
npx expo install react-native-view-shot expo-device expo-constants
npm install @nitpickhq/react-nativeimport { Stack, usePathname } from "expo-router";
import { NitpickProvider, NitpickElement, useNitpickScreen } from "@nitpickhq/react-native";
function ScreenName() {
useNitpickScreen(usePathname());
return null;
}
export default function RootLayout() {
return (
<NitpickProvider appKey="npk_YOUR_PUBLIC_KEY">
<ScreenName />
<Stack />
</NitpickProvider>
);
}
// Name what users may point at
<NitpickElement name="Home/StartButton">
<Pressable onPress={start}><Text>Start</Text></Pressable>
</NitpickElement>Works in Expo Go. With Expo Router, render a small ScreenName component inside the provider that calls useNitpickScreen(usePathname()). Details in Install for Expo and React Native.
3. Give Gemini CLI the MCP server
Gemini CLI lists MCP servers under mcpServers in its settings file. Use .gemini/settings.json in the project, or ~/.gemini/settings.json for your user.
{
"mcpServers": {
"nitpick": { "command": "npx", "args": ["-y", "@nitpickhq/cli", "mcp"] }
}
}If the file already has settings, add only the mcpServers entry. An optional timeout in milliseconds can sit next to command and args. As an alternative, gemini mcp add nitpick npx -y @nitpickhq/cli@latest mcp writes the entry for you (project scope by default, -s user for your user).
Type /mcp in a running session. It lists the configured servers, their connection status and the tools they offer.
4. Start the dev server with Gemini CLI
npx expo start runs the dev server that Expo Go connects to. The run commands build the native app locally and need Xcode or Android Studio.
npx expo start
# or build the native app locally
npx expo run:ios
npx expo run:androidExpect a prompt for npx expo install, npm install and the dev server start. Allow each one always for the session, and the agent can restart Expo without asking again.
5. Let Gemini CLI fix the reports
Start gemini in your project and ask it to check Nitpick for open feedback, fix what it can and resolve the reports. It calls list_feedback, reads each report with its screenshot through get_feedback, and finds the code. An element name such as checkout.pay-button leads to the NitpickElement that has that name, and a screen name is the route path, if you pass usePathname() to useNitpickScreen. When the fix is done it calls resolve_feedback.
Working with Gemini CLI
- Install it with
npm install -g @google/gemini-cli, then rungeminiin any project folder. - Type
!before a command to run it in your own shell without the agent, for example!npx -y @nitpickhq/cli@latest feedback list. /mcpshows the status of every server and the tools it offers, so use it first when a tool seems missing.
Good to know for Expo
- A ScrollView shows only its visible part in the screenshot, and video, maps and web views can come out empty. Nothing is masked automatically, so wrap sensitive parts in NitpickMask.
- This was tested in Expo Go on iOS. A React Native app without Expo modules has not been tested, so this page does not promise it works there.
$9 a month per account. Unlimited apps.
Get startedRelated
- Gemini CLI with SwiftUI
- Claude Code with Expo
- Codex with Expo
- Cursor with Expo
- Add in-app feedback to an Expo app
- In-app feedback with a screenshot in Expo
- Collect bug reports from users in Expo
- MCP reference