- Home
- Skills
- Testing & Debugging
- Bug Hunt for Flutter & React Native Apps
More screenshots
Works with the AI tools you already use
Bug Hunt for Flutter & React Native Apps
Find the bugs in a Flutter, React Native or Expo app that pass your analyzer and your whole test suite, and fix each one with a test that fails first.
$15
Bug Hunt for Flutter & React Native Apps
Example session with this skill installed
Do a bug hunt on this app before I cut the release build.
- Read your context and instructions
- Compiled the bug hunt
What the skill printed
The script pass on a shipped app, before Claude started the eight passes:
WARN bare-bottom-sheet (6): bare showModalBottomSheet: check the bottom inset under a gesture bar
packages/ui/lib/screens/settings/delete_data_sheet.dart:15 final erased = await showModalBottomSheet<bool>(
packages/ui/lib/screens/home/widgets/export_sheet.dart:25 return showModalBottomSheet<void>(
packages/ui/lib/screens/home/widgets/systems_sheet.dart:18 return showModalBottomSheet<void>(
packages/ui/lib/screens/home/widgets/interval_picker.dart:14 return showModalBottomSheet<int>(
packages/ui/lib/screens/home/widgets/task_sheet.dart:31 return showModalBottomSheet<void>(
packages/ui/lib/screens/home/widgets/your_home_sheet.dart:21 return showModalBottomSheet<void>(
NOTE datetime-now (3): DateTime.now(): untestable clock; inject one where it decides anything
packages/flutter_data/lib/photos/local_photo_store.dart:48 final name = 'photo_${DateTime.now().microsecondsSinceEpoch}.jpg';
packages/flutter_data/lib/reminders/local_reminder_service.dart:88 final now = DateTime.now();
packages/logger/lib/src/logger.dart:31 time: time ?? DateTime.now(),
NOTE force-unwrap-lookup (5): map lookup with !: a key that is missing in old data throws
packages/ui/lib/screens/home/widgets/systems_card.dart:38 int over(HomeSystem s) => thisYear - record.installed[s.id]! - s.maxYears;
packages/domain/lib/models/home/reminder_plan.dart:39 PlannedReminder(date: date, taskNames: byDate[date]!),
packages/domain/lib/models/home/schedule_math.dart:124 return order[a.task.id]!.compareTo(order[b.task.id]!);
packages/domain/lib/models/home/schedule_math.dart:128 return order[a.task.id]!.compareTo(order[b.task.id]!);
packages/domain/lib/models/home/home_record.dart:161 : task.withMonths(intervals[task.id]!),
NOTE toString-in-ui (3): Text of .name/.id/.toString(): is this an internal value on screen?
packages/ui/lib/screens/home/widgets/onboarding_home_page.dart:37 title: Text(task.name),
packages/ui/lib/screens/home/widgets/systems_sheet.dart:180 Text(system.name, style: theme.textTheme.titleMedium),
packages/ui/lib/screens/home/widgets/your_home_sheet.dart:160 title: Text(task.name),
17 findings, 6 WARN. Shapes, not verdicts: read each one.
Connects securely to your tools. The creator never sees your data.
About this skill
A Flutter app can pass flutter analyze and every test and still show an enum name on screen, crash on a save from the last version, or hide a button under the gesture bar at 2x text. Tests check what their author thought of. This skill has Claude look the way a user, an old save file or a small phone would.
It also works on React Native and Expo apps. The script picks the stack from the app folder and runs 16 React Native checks: empty catches and swallowed .catch(() => {}), JSON.parse outside a try, async handlers with no error handling, effects with no cleanup or no dependency array, stored JSON read with no defaults or version, persisted stores with no migration, raw ids or dates inside <Text>, index keys, merge markers, duplicate imports, console.log, forced debug flags and localhost URLs. With --baseline it runs tsc, eslint and jest from your package.json, installs nothing, and reports any gate that is not set up as skipped. The eight passes have React Native how-to steps too (2x text on an emulator, upgrade installs, OTA updates, release builds).
It starts with a script that flags suspicious shapes across the app and its local packages: an empty catch, setState after an await with no mounted check, a bare showModalBottomSheet, an overshooting curve, Text(x.name), a map[key]! lookup. Those are a reading list. Then Claude works through eight passes the script cannot do:
- Baseline.
flutter analyze, every test package (root andpackages/*), and every code generator re-run with a cleangit statusafter. A generator that changes files means the committed output was stale. - Read the screens as a user. Render every screen and read every string for ids, enum names,
null,NaN, raw dates, a blank where a word belongs, a glyph that changes the meaning, and a message that follows you to the next screen. - Old data, new code. Load a save from the previous release; check that an older backup imports and a newer one is refused cleanly.
- The extremes the layout tests skip. The smallest phone at 2x text, the largest tablet, landscape, with every optional banner and badge on at once, and the bottom inset on a real device.
- State machines at their edges. Zero, one, the maximum, past it, undo after each, the same action twice quickly.
- Data the app ships. Counts and values in bundled content checked against the source, and nothing outside the licence.
- After a merge. Each conflicted file diffed against both parents, then passes 2 and 4 again.
- On the device. Every new flow by hand: edge taps, sheets with the keyboard up, share sheets, cold start, rotate, background and return, from a fresh install.
Every fix is one commit with a test that fails before it. The report is a table of numbers per pass: checked, found, fixed, left and why.
What you need: Claude Code, Flutter, Python 3.9+. No packages to install.
Part of the Indie Mobile Release Pipeline (Flutter & React Native) bundle ($39 for four skills: new-app, bug-hunt, ship-ios, daily-update).
I build small apps on my own and have a shelf of them on the App Store and Google Play. Every pass here is there because a bug of mine got past a green suite.
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
30-day refund
Not a fit? Get your money back
Trust & safety
Security scanned
Verified clean 4 days ago
- Passed all security checks, Safe to install