More screenshots

    Works with the AI tools you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIMuseMuseDotsDots+22 more

    Bug Hunt for Flutter & React Native Apps

    1

    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

    Secure checkout via Stripe

    30-day refund guarantee

    Converts to your local currency at checkout

    Security scanned
    Bug Hunt for Flutter & React Native Apps

    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:

    1. Baseline. flutter analyze, every test package (root and packages/*), and every code generator re-run with a clean git status after. A generator that changes files means the committed output was stale.
    2. 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.
    3. Old data, new code. Load a save from the previous release; check that an older backup imports and a newer one is refused cleanly.
    4. 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.
    5. State machines at their edges. Zero, one, the maximum, past it, undo after each, the same action twice quickly.
    6. Data the app ships. Counts and values in bundled content checked against the source, and nothing outside the licence.
    7. After a merge. Each conflicted file diffed against both parents, then passes 2 and 4 again.
    8. 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

    Listed6 days ago
    Updated4 days ago

    What's inside

    Frequently Asked Questions