ExecBro
Набори A, B і C завершено126 з 126 запусківClaude Code · Opus 5.5iOS-симуляторОновлено 10 листопада 2026 р.

Claude Code з ExecBro проти Claude Code самого по собі

Вісімнадцять задач у React Native застосунку з входом, токеном сесії в Keychain і API з авторизацією. Кожну задачу Claude Code отримує так, як її написав би розробник: один раз з ExecBro і один раз без. Набір B додає третю сторону: ExecBro підключено, але в промпті він не згадується. Чи зроблено роботу, вирішує скрипт, що не належить жодній зі сторін.

Claude Code + ExecBroClaude Code сам по собіClaude Code + ExecBro, без згадки в промпті

Набір A: щоденні задачі

Кожну задачу запущено 3 рази на кожну сторону; смуги показують медіани. Обидві сторони пройшли ті самі 15 з 18 запусків: кожен запуск A1 з обох боків знайшов один з двох багів. ExecBro був швидшим на A1, A3 і A4 та дешевшим на A1 і A3. На A2 і A5 він був повільнішим і дорожчим, бо відтворював баг і перевіряв виправлення справжніми тапами. Claude сам по собі на цій машині тапати не може, і в 11 з 18 запусків натомість писав власний клієнт дебагера.

A1 · 3 запуски на сторону

Протестувати оформлення замовлення

“I just finished the checkout in the Shop. Test it end to end, including the promo code SAVE10 (10% off), and tell me if anything is broken.”

Часна 38% менше
ExecBro
77 s
Без нього
124 s
Вартістьна 26% менше
ExecBro
$0.73
Без нього
$0.98
Токенина 30% менше
ExecBro
0.87M
Без нього
1.24M

Результат:усі запуски частковоОбидва знайшли знижку, що не враховує кількість. Жоден не назвав багом ціну, яку надіслано на сервер рядком.

З ExecBro: 21 викликів інструментів

  1. Прочитав код оформлення замовлення
  2. Прочитав екран: назви елементів і testID
  3. Тапнув товар, потім Add to cart
  4. Підняв кількість, ввів save10, Apply
  5. Перевірив суми на скриншоті
  6. Оформив замовлення справжнім тапом
  7. Прочитав перехоплений запит замовлення і логи

Сам по собі: 26 викликів інструментів

  1. Прочитав код оформлення замовлення
  2. Не знайшов на машині інструмента для тапів
  3. Написав власний клієнт дебагера для Metro
  4. Вгадував глобальну змінну зі стором (її нема), потім знайшов стор у списку модулів Metro
  5. Написав хелпер, що обходить дерево компонентів і викликає onPress напряму
  6. Наповнив кошик через Redux, а не через екрани
  7. Підмінив fetch, щоб побачити запит замовлення

Виклик onPress з коду оминає все, що проходить палець: чи кнопка на екрані, чи її щось перекриває, чи вона вимкнена. Для логічної задачі на кшталт A1 така хитрість працює. Задачі A2, A4 і A5 перевіряються справжнім скролом і тапом.

A2 · 3 запуски на сторону

Замовлення не оформлюється

“Placing an order in the Shop does nothing. Fix it.”

Часна 50% більше
ExecBro
159 s
Без нього
106 s
Вартістьна 35% більше
ExecBro
$1.08
Без нього
$0.80
Токенина 52% більше
ExecBro
1.65M
Без нього
1.08M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску. ExecBro прочитав 422 від сервера просто з власного запиту застосунку; сам по собі Claude спершу мусив дістати токен сесії із застосунку.

З ExecBro: 38 викликів інструментів

  1. Прочитав код оформлення замовлення
  2. Тапнув товар, Add to cart, Place order
  3. Прочитав перехоплений запит: 422, що називає перейменоване поле
  4. Виправив тіло запиту
  5. Знову оформив замовлення справжніми тапами

Сам по собі: 23 викликів інструментів

  1. Прочитав код оформлення замовлення
  2. Викликав API через curl: 401 без токена
  3. Шукав процес сервера і тестовий акаунт
  4. Написав власний клієнт дебагера для Metro
  5. Узяв токен зі стану застосунку і повторив запит: 422 називає поле
  6. Виправив тіло запиту
  7. Перевірив виправлення зі свого клієнта, без тапу
A3 · 3 запуски на сторону

Деякі товари показують $NaN

“Some products in the Shop show $NaN instead of a price. Fix it.”

Часна 49% менше
ExecBro
89 s
Без нього
174 s
Вартістьна 6% менше
ExecBro
$0.80
Без нього
$0.85
Токенина 13% менше
ExecBro
1.09M
Без нього
1.25M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску. Сам по собі Claude витратив удвічі більше часу, здебільшого на те, щоб обійти вхід.

З ExecBro: 26 викликів інструментів

  1. Прочитав код цін
  2. Прочитав перехоплені відповіді з товарами: деякі ціни є об’єктами
  3. Погортав список справжніми тапами
  4. Нормалізував ціну в шарі API
  5. Відкрив товар партнера, щоб перевірити ціну

Сам по собі: 30 викликів інструментів

  1. Прочитав код цін; curl отримав 401
  2. Шукав процес сервера і тестовий акаунт
  3. Написав власний клієнт дебагера і взяв токен зі стану застосунку
  4. Завантажив каталог з цим токеном: деякі ціни є об’єктами
  5. Нормалізував ціну в шарі API
  6. Перезапустив застосунок і перевірив скриншоти
A4 · 3 запуски на сторону

Після перезапуску магазин не вантажить товари

“After I restart the app the Shop says it could not load products, even though I'm still signed in. Signing out and back in fixes it until the next restart. Fix it.”

Часна 26% менше
ExecBro
53 s
Без нього
72 s
Вартістьна 10% більше
ExecBro
$0.57
Без нього
$0.52
Токенина 22% більше
ExecBro
0.57M
Без нього
0.47M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску, і обидва знайшли причину в коді.

З ExecBro: 15 викликів інструментів

  1. Прочитав код входу і сесії
  2. Передав токен API-клієнту під час відновлення сесії
  3. Закрив і знову запустив застосунок
  4. Відкрив магазин: товари завантажились
  5. Перевірив, що запит товарів ніс токен

Сам по собі: 11 викликів інструментів

  1. Прочитав код входу і сесії
  2. Передав токен API-клієнту під час відновлення сесії
  3. Перезапустив застосунок через simctl і перевірив скриншот
  4. Не знайшов на машині інструмента для тапів
  5. Написав тимчасовий юніт-тест для відновлення сесії
A5 · 3 запуски на сторону

Кнопка Place order недосяжна

“With a few items in the cart I can't reach the Place order button. Fix it.”

Часна 99% більше
ExecBro
145 s
Без нього
73 s
Вартістьна 86% більше
ExecBro
$1.06
Без нього
$0.57
Токенина 107% більше
ExecBro
1.35M
Без нього
0.66M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску. ExecBro витратив удвічі більше часу, бо наповнив кошик і натиснув кнопку на пристрої; сам по собі Claude виправив за кодом і подивився скриншоти.

З ExecBro: 40 викликів інструментів

  1. Прочитав екран оформлення замовлення
  2. Додав дев’ять товарів у кошик справжніми тапами
  3. Побачив на скриншоті, що кнопка нижче краю екрана
  4. Зробив кошик прокручуваним
  5. Прокрутив і тапнув Place order

Сам по собі: 16 викликів інструментів

  1. Прочитав екран оформлення замовлення
  2. Зробив скриншот до зміни
  3. Зробив кошик прокручуваним
  4. Не знайшов на машині інструмента для тапів
  5. Перевірив скриншоти після зміни, без скролу і тапу

Тут причину видно в коді, тож перевірка на пристрої не змінила оцінку. Вона змінила те, що агент знав, коли казав, що виправлення працює. Наступний набір містить баги, причина яких існує лише під час роботи застосунку.

A6 · 3 запуски на сторону

Змінити екран, на якому я зараз

“Make the main button on this screen full width and use the primary color.”

Часна 12% більше
ExecBro
28 s
Без нього
25 s
Вартістьна 9% більше
ExecBro
$0.47
Без нього
$0.43
Токенина 38% більше
ExecBro
0.37M
Без нього
0.26M

Результат:усі запуски пройшлиОбидва змінили правильний екран у кожному запуску. На такій малій задачі ExecBro додає небагато.

З ExecBro: 9 викликів інструментів

  1. Зробив скриншот: Account, Notifications
  2. Знайшов файл, що рендерить цю кнопку
  3. Змінив кнопку
  4. Запустив лінтер і зробив скриншот

Сам по собі: 7 викликів інструментів

  1. Зробив скриншот через simctl
  2. Знайшов файл, що рендерить цю кнопку
  3. Змінив кнопку
  4. Запустив лінтер і зробив скриншот

Набір B: причини, що існують лише під час роботи

Шість багів, причини яких нема в коді: формат API, який отримує лише один акаунт, відмова, надіслана як HTTP 200, одноразові refresh-токени, нативний HTTP-кеш, справжня клавіатура і перекладені мітки. Кожну задачу запущено 3 рази на кожній з трьох сторін. Кожна сторона назвала справжню причину в кожному запуску, тож за правильністю вони не різняться: сам по собі Claude знайшов причину в коді й через dev API. ExecBro був на 14% швидшим загалом і на 7% дорожчим. Обидві сторони з ExecBro перевірили виправлення на пристрої в 30 з 36 запусків; Claude сам по собі зробив це в 1 з 18. Навіть коли промпт не згадував ExecBro, агент використав його в усіх 18 запусках, приблизно за той самий час і ціну, що й коли йому про нього сказали.

B1 · 3 запуски на сторону

Бізнес-клієнти бачать $NaN

“Our business customers see $NaN for every price in the Shop. Personal accounts are fine. I'm signed in with the business test account. Fix it.”

Часна 39% менше
ExecBro
78 s
Без нього
127 s
Без згадки
66 s
Вартістьна 16% менше
ExecBro
$0.58
Без нього
$0.69
Без згадки
$0.59
Токенина 28% менше
ExecBro
0.59M
Без нього
0.81M
Без згадки
0.59M

Результат:усі запуски пройшлиКожна сторона виправила в кожному запуску. Обидві сторони з ExecBro були швидшими, на 39% і 48%. Сам по собі Claude в кожному запуску писав клієнт дебагера, щоб побачити відповідь для бізнес-акаунта.

B2 · 3 запуски на сторону

«Order #undefined placed»

“Placing an order in the Shop says "Order #undefined placed", and the backend team says no order came through. Fix it.”

Часна 36% менше
ExecBro
147 s
Без нього
229 s
Без згадки
127 s
Вартістьна 20% менше
ExecBro
$0.83
Без нього
$1.04
Без згадки
$0.92
Токенина 29% менше
ExecBro
1.16M
Без нього
1.64M
Без згадки
1.47M

Результат:усі запуски пройшлиКожна сторона виправила в кожному запуску. Обидві сторони з ExecBro були швидшими (на 36% і 45%) і дешевшими та після виправлення оформили замовлення справжніми тапами. Сам по собі Claude в кожному запуску писав клієнт дебагера і жодного разу не оформив замовлення на пристрої.

B3 · 3 запуски на сторону

Вихід з акаунта після хвилини у фоні

“If I leave the app in the background for a minute or two and come back, I'm signed out of the Shop and have to log in again. It should keep me signed in. Fix it. Test login: [email protected] / <password>”

Часна 22% більше
ExecBro
218 s
Без нього
178 s
Без згадки
227 s
Вартістьна 35% більше
ExecBro
$0.73
Без нього
$0.54
Без згадки
$0.78
Токенина 102% більше
ExecBro
0.90M
Без нього
0.45M
Без згадки
1.17M

Результат:усі запуски пройшлиКожна сторона виправила в кожному запуску. Сам по собі Claude був швидшим і дешевшим: підтвердив одноразовий refresh-токен через curl і виправив за кодом. Сторони з ExecBro відправляли застосунок у фон і стежили за оновленням токена на пристрої. Один запуск без ExecBro зараховано як пройдений після повторної перевірки: після нього сама перевірка не змогла дістатися до застосунку, а збережена зміна пройшла на чистій копії.

B4 · 3 запуски на сторону

Ціни попереднього акаунта після перемикання

“If I sign out and sign in with a different account, the Shop keeps showing the previous account's prices. Restarting the app doesn't help. Test accounts: [email protected] and [email protected], both with password <password>. Fix it.”

Часна 13% більше
ExecBro
131 s
Без нього
116 s
Без згадки
137 s
Вартістьна 28% більше
ExecBro
$0.86
Без нього
$0.67
Без згадки
$0.85
Токенина 64% більше
ExecBro
1.06M
Без нього
0.64M
Без згадки
1.00M

Результат:усі запуски пройшлиКожна сторона виправила в кожному запуску. Сам по собі Claude був трохи швидшим і дешевшим; він прочитав заголовок кешу через curl. Лише сторони з ExecBro перемикали акаунти на пристрої для перевірки.

Тут жоден рядок коду не помилковий: застарілі ціни лежать у HTTP-кеші телефона. Попри це кожна сторона знайшла причину за заголовками відповіді. Набір B показує, що сильна модель доходить до runtime-причин через код і бекенд. ExecBro змінив інше: чи було виправлення випробувано на пристрої, перш ніж агент сказав, що воно працює.

B5 · 3 запуски на сторону

Клавіатура закриває поле промокоду

“On checkout, when I tap the promo code field the keyboard covers it and I can't see what I'm typing. Fix it.”

Часна 35% менше
ExecBro
100 s
Без нього
153 s
Без згадки
107 s
Вартістьна 16% більше
ExecBro
$0.80
Без нього
$0.69
Без згадки
$0.75
Токенина 34% більше
ExecBro
1.03M
Без нього
0.77M
Без згадки
1.02M

Результат:усі запуски пройшлиКожна сторона виправила в кожному запуску, і всі однаковою зміною: KeyboardAvoidingView навколо екрана. Сторони з ExecBro були приблизно на третину швидшими і на 9% і 16% дорожчими. Вони тапали поле й Apply; сам по собі Claude дивився скриншоти.

B6 · 3 запуски на сторону

Товари без назви і без сердечка

“Some products in the Shop have no name and no heart, so I can't add them to favorites. Fix it.”

Часна 21% більше
ExecBro
58 s
Без нього
48 s
Без згадки
65 s
Вартістьна 22% більше
ExecBro
$0.60
Без нього
$0.49
Без згадки
$0.63
Токенина 42% більше
ExecBro
0.54M
Без нього
0.38M
Без згадки
0.61M

Результат:ExecBro: пройдено 3 з 3Сам по собі: пройдено 3 з 3Без згадки: пройдено 2 з 3, частково 117 з 18 запусків виправили. Сам по собі Claude був найшвидшим і найдешевшим. Один запуск без згадки залишив колонку назви завузькою (частково); його відповідь чесно описала, що було перевірено, тож це не хибний успіх.

Набір C: код, що веде до хибного виправлення

Шість багів, де бекенд правильний, у коді, який розробник читає першим, є правдоподібна приманка, а виправлення, що йде за нею, не працює на пристрої: кошик, збережений старою версією застосунку, тост, що перехоплює тапи, дата, яку не розбирає лише JS-рушій телефона, фото, що забирають вертикальний свайп, список, що стрибає не на той рядок, і сума, що залежить від регіону телефона. Кожну задачу запущено 3 рази на кожну сторону. ExecBro пройшов усі 18 запусків. Claude сам по собі пройшов 16; обидві його невдачі відправили виправлення за приманкою і заявили, що баг виправлено. Там, де коду було достатньо, Claude сам по собі був дешевшим і швидшим: загалом ExecBro витратив на 49% більше часу і на 47% більше грошей. ExecBro випробував виправлення на пристрої в 11 з 18 запусків, Claude сам по собі в 1.

C1 · 3 запуски на сторону

Кількості скинулися до 1 після оновлення

“Since the last update my cart shows the wrong quantities: everything I had in it now says 1, and the total is lower than it should be. Fix it.”

Часна 85% більше
ExecBro
96 s
Без нього
52 s
Вартістьна 40% більше
ExecBro
$0.66
Без нього
$0.47
Токенина 141% більше
ExecBro
0.84M
Без нього
0.35M

Результат:ExecBro: пройдено 3 з 3Сам по собі: пройдено 2 з 3ExecBro виправив у кожному запуску. Claude сам по собі виправив двічі; одного разу він вирішив, що старі кошики зберігають count, відправив це і сказав, що виправлено, а кількості й далі показували 1.

C2 · 3 запуски на сторону

Apply нічого не робить

“On checkout, tapping Apply next to the promo code does nothing. Fix it.”

Часна 174% більше
ExecBro
129 s
Без нього
47 s
Вартістьна 154% більше
ExecBro
$1.22
Без нього
$0.48
Токенина 473% більше
ExecBro
1.97M
Без нього
0.34M

Результат:ExecBro: пройдено 3 з 3Сам по собі: пройдено 2 з 3ExecBro виправив у кожному запуску і щоразу тапнув Apply на пристрої. Claude сам по собі виправив двічі; одного разу звинуватив пробіли в коді й обрізав їх, а тап і далі перехоплювався. Та відповідь чесно сказала, що перевірити на пристрої не вдалося.

Саме для такого випадку існує ExecBro: код веде до виправлення, що виглядає правильним, і лише справжній тап показує, що це не так. Кожна задача набору C має таку приманку; Claude сам по собі потрапив на неї у 2 з 18 запусків, ExecBro в жодному.

C3 · 3 запуски на сторону

Історія замовлень показує «Invalid Date»

“The Order history screen shows "Invalid Date" for every order. Fix it.”

Часна 48% менше
ExecBro
50 s
Без нього
97 s
Вартістьна 15% менше
ExecBro
$0.60
Без нього
$0.71
Токенина 31% менше
ExecBro
0.66M
Без нього
0.96M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску. ExecBro був приблизно вдвічі швидшим: він перевірив дату в JS-рушії самого застосунку замість міркувань.

C4 · 3 запуски на сторону

Сторінка не прокручується з фото

“On a product page I can't scroll down when my finger starts on the photos. It only scrolls if I start below them. Fix it.”

Часна 84% більше
ExecBro
46 s
Без нього
25 s
Вартістьна 62% більше
ExecBro
$0.60
Без нього
$0.37
Токенина 124% більше
ExecBro
0.54M
Без нього
0.24M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску, за налаштуваннями жесту. ExecBro ще й свайпнув на пристрої для перевірки; Claude сам по собі не міг.

C5 · 3 запуски на сторону

Обране стрибає не туди

“Tapping one of my favorites at the top of the Shop should jump to that product in the list, but it lands on a different spot. Fix it.”

Часна 79% більше
ExecBro
75 s
Без нього
42 s
Вартістьна 45% більше
ExecBro
$0.74
Без нього
$0.51
Токенина 142% більше
ExecBro
0.83M
Без нього
0.34M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску. Claude сам по собі навіть оцінив справжню висоту рядка зі стилів; ExecBro виміряв її і тапав обрані товари на пристрої.

C6 · 3 запуски на сторону

Сума губить копійки на моєму телефоні

“On my phone the checkout total is wrong: it drops the cents, and with an expensive item in the cart it shows something like $1.00. On my colleague's phone it's correct. Fix it.”

Часна 32% більше
ExecBro
33 s
Без нього
25 s
Вартістьна 21% більше
ExecBro
$0.40
Без нього
$0.33
Токенина 48% більше
ExecBro
0.29M
Без нього
0.20M

Результат:усі запуски пройшлиОбидва виправили в кожному запуску, швидко: причину видно в одному рядку коду.

Набір C ще раз, на Sonnet 5.5

Ті самі шість задач і те саме налаштування, але з Claude Sonnet 5.5 на обох сторонах замість Opus 5.5, по 3 запуски на задачу й сторону. Sonnet це дешевша модель, на якій багато команд запускають своїх агентів. Тут розрив був значно більшим: ExecBro пройшов 14 з 18 запусків, Claude сам по собі 9 з 18.

ЗадачаЗ ExecBroСам по собіВиправлення за приманкою (ExecBro / сам по собі)Що зламалося
C11/30/32 / 3Кількості скинулися до 1 після оновлення
C21/30/32 / 3Apply нічого не робить
C33/30/30 / 0Історія замовлень показує «Invalid Date»
C43/33/30 / 0Сторінка не прокручується з фото
C53/33/30 / 0Обране стрибає не туди
C63/33/30 / 0Сума губить копійки на моєму телефоні
  • Сам по собі Sonnet провалив кожен запуск трьох задач, де код веде в хибному напрямку, і пройшов кожен запуск трьох інших. У C1 і C2 він усі шість разів відправив виправлення за приманкою, щоразу зазначаючи, що не перевіряв його на симуляторі.
  • У C3 дати замовлень приходять з API, що вимагає входу. Сам по собі Sonnet знайшов new Date(s), але не бачив, що надсилає сервер, тож зупинився і попросив облікові дані. З ExecBro він прочитав справжнє значення в запущеному застосунку, побачив, що Hermes його не розбирає, і виправив у 3 з 3 запусків.
  • На Sonnet ExecBro не був повною страховкою: 4 рази він відправив виправлення за приманкою. Двічі в C1 Sonnet так і не відкрив застосунок. Один раз у C2 він перевірив знову після перезавантаження, яке прибрало баг. Ще раз перший виклик ExecBro не знайшов підключеного застосунку, і агент здався замість запустити scan_metro; останнє це прогалина ExecBro.
  • Вартість: з ExecBro шість задач коштували на 62% більше ($1.65 проти $1.02, холодний старт) і забрали в 2,4 раза більше часу (275 с проти 113 с). Обидві сторони дешевші за Opus сам по собі ($2.87).

Усі задачі

ЗадачаЩо просить розробникЧому потрібен пристрійExecBroСам по собіБез згадки
A1Протестувати оформлення замовленняНеправильна сума видна лише при кількості більше 1; ціну-рядок видно лише у власному авторизованому запиті застосунку.●●●●●●·
A2Замовлення не оформлюєтьсяЗапит без токена сесії завжди отримує 401.●●●●●●·
A3Деякі товари показують $NaNКаталог доступний лише після входу.●●●●●●·
A4Після перезапуску магазин не вантажить товариПерша сесія працює; збій з’являється лише після справжнього перезапуску.●●●●●●·
A5Кнопка Place order недосяжнаЦе видно лише на відрендереному екрані.●●●●●●·
A6Змінити екран, на якому я заразАгент має з’ясувати, який екран відкрито і який файл його рендерить.●●●●●●·
B1Бізнес-клієнти бачать $NaNІнший формат отримує лише бізнес-акаунт і лише після свого входу.●●●●●●●●●
B2«Order #undefined placed»Відмова приходить як 200; її видно лише в тілі авторизованої відповіді на замовлення.●●●●●●●●●
B3Вихід з акаунта після хвилини у фоніПотрібен справжній час у фоні, довший за життя токена, і два запити, що змагаються.●●●●●●●●●
B4Ціни попереднього акаунта після перемиканняЗастарілі ціни живуть у нативному HTTP-кеші, а не в коді чи стані застосунку, і переживають перезапуск.●●●●●●●●●
B5Клавіатура закриває поле промокодуПерекриття видно лише на відрендереному екрані зі справжньою клавіатурою.●●●●●●●●●
B6Товари без назви і без сердечкаЛамаються лише рядки з довгими перекладеними бейджами, і видно це лише на відрендереному екрані.●●●●●●●●●
C1Кількості скинулися до 1 після оновленняСтарий кошик існує лише в пам’яті телефона; кошик, який агент наповнює сам, працює.●●●●●●·
C2Apply нічого не робитьВиклик обробника з коду працює; лише справжній тап показує, що до кнопки ніщо не доходить.●●●●●●·
C3Історія замовлень показує «Invalid Date»Той самий рядок працює в Node, де агент його й перевірив би.●●●●●●·
C4Сторінка не прокручується з фотоЛише справжній свайп показує, який жест виграє.●●●●●●·
C5Обране стрибає не тудиСправжню висоту рядка задають шрифти, і виміряти її можна лише на екрані.●●●●●●·
C6Сума губить копійки на моєму телефоніТестовий телефон використовує десяткову кому; Node у терміналі агента ні.●●●●●●·

● зарахований запуск · ○ попереду

Методологія

«Сам по собі» означає Claude Code так, як його запускає більшість розробників: термінал, код проєкту, інструменти командного рядка Xcode і завдання виконати роботу. Він усе одно може робити скриншоти, читати код, звертатися до бекенду і писати власний скрипт для дебагера React Native. Тож питання не в тому, чи він упорається, а в тому, чи впорається правильно, скільки це коштує і яким шляхом.

Дві сторони

Сам по собіЗ ExecBro
АгентClaude Code 2.1.317, без інтерфейсу, Opus 5.5Те саме
ІнструментиСтандартні інструменти Claude Code: shell, редагування файлів, пошук, веб, субагентиТе саме, плюс MCP-сервер ExecBro (2.20.0 / a615792 / 2.21.0) і його опубліковані скіли
МашинаXcode, Node, Python, git. Інструментів для тапів у симуляторі не встановлено, встановлювати їх забороненоТе саме, плюс AXe, який ExecBro вимагає для iOS
ОбмеженняБез запитів дозволів, бюджет $5, 20 хвилинТе саме
КонтекстЛише налаштування проєкту: жодних особистих інструкцій, плагінів чи скілів з тестової машиниТе саме
ПромптСимулятор і порт Metro, далі текст задачі слово в словоТе саме

Інструменти для тапів, як-от AXe чи IDB, треба встановлювати окремо, і в розробника, що працює з самим Claude Code, їх зазвичай нема, тому для цієї сторони вони приховані. У попередній версії вони були на тестовій машині, і Claude без ExecBro використав їх у 13 з 15 запусків, тобто ми вимірювали краще оснащеного розробника, ніж мали на увазі. Агент ці інструменти знає: у 24 з 36 запусків без ExecBro в наборах A і B він шукав AXe, IDB чи Maestro за назвою, перш ніж перейти до обхідних шляхів. На Android `adb` дає йому тапи одразу.

Третя сторона (набір B)

Точно таке саме налаштування, як у сторони з ExecBro, але промпт складається лише з тексту задачі: без симулятора, без порту Metro, без згадки про ExecBro. Вона показує, чи агент сам звертається до ExecBro, як у звичайній робочій сесії. Її запуски йшли після двох інших сторін, а не чергувалися з ними. Набір B запускався на зафіксованій збірці ExecBro (a615792): 2.20.0 плюс зміни, що здешевлюють перевірку виправлення, на той момент ще не випущені. Для контролю A5 теж тричі запустили на цій стороні: усі пройшли, з медіаною 89 с.

Застосунок

React Native 0.85 застосунок (Redux Toolkit, React Navigation, MMKV, Keychain) на iOS-симуляторі: магазин (вхід, список товарів, сторінка товару, кошик з промокодами, оформлення замовлення) і розділ акаунта з трьома екранами налаштувань. Авторизація працює як у продакшен-застосунку: токен сесії зберігається в iOS Keychain, завантажується під час запуску і надсилається з кожним запитом, а без нього кожен виклик API отримує 401. Реєстрації нема, а пароль тестового акаунта знає лише тестовий скрипт, тож агент не може отримати токен через curl. Щоб побачити справжні відповіді, він має взяти їх із запущеного застосунку. Набір B додає бізнес-акаунт з контрактними цінами, акаунт українською, access-токени на 45 секунд з одноразовими refresh-токенами і відповіді каталогу із заголовками кешу. У B3 і B4 агент отримує тестовий пароль, як його отримав би розробник.

Задачі

Правило побудови: код виглядає правильним, а причину видно лише в запущеному застосунку. У наборі B причини в коді нема взагалі. У наборі C в коді є правдоподібна приманка, а виправлення за нею не працює на пристрої. Промпти подано мовою оригіналу.

ЗадачаПромптПричинаПройдено, коли
A1“I just finished the checkout in the Shop. Test it end to end, including the promo code SAVE10 (10% off), and tell me if anything is broken.”Знижка не враховує кількість, а запит замовлення надсилає ціну рядком.Відповідь називає обидва баги (пройдено) або один (частково). Оцінює людина.
A2“Placing an order in the Shop does nothing. Fix it.”Бекенд перейменував поле з рядками замовлення; сервер пояснює це в помилці 422, але лише авторизованому клієнту.Після перезапуску справжній скрол і тап на Place order оформлюють замовлення.
A3“Some products in the Shop show $NaN instead of a price. Fix it.”Товари одного партнера приходять з ціною-об’єктом, а типи застосунку кажуть, що це число.Товари партнера показують справжні ціни, а сума в кошику точна.
A4“After I restart the app the Shop says it could not load products, even though I'm still signed in. Signing out and back in fixes it until the next restart. Fix it.”Сесія відновлюється з Keychain під час запуску, але API-клієнт отримує токен лише при вході.Після перезапуску, без повторного входу, товари вантажаться, а справжній тап оформлює замовлення.
A5“With a few items in the cart I can't reach the Place order button. Fix it.”Кошик не прокручується, тож кілька рядків виштовхують кнопку за нижній край екрана.З десятьма товарами в кошику справжній скрол і тап оформлюють замовлення.
A6“Make the main button on this screen full width and use the primary color.”Не баг: застосунок відкритий на екрані налаштувань, а три екрани мають майже однакову кнопку у файлах, чиї назви не збігаються з назвами екранів.Кнопка на цьому екрані на всю ширину в основному кольорі; схожі кнопки не змінені.
B1“Our business customers see $NaN for every price in the Shop. Personal accounts are fine. I'm signed in with the business test account. Fix it.”Для бізнес-акаунтів API надсилає `pricing: { list, contract, currency }` без `price`, а застосунок читає лише `price`.Після перезапуску бізнес-товари й сума замовлення показують контрактні ціни, а особисті акаунти зберігають звичайні.
B2“Placing an order in the Shop says "Order #undefined placed", and the backend team says no order came through. Fix it.”Тестовий акаунт має дві адреси доставки, тож бекенду потрібен `shippingAddressId`. Він відхиляє замовлення відповіддю HTTP 200 з `{ ok: false }`, а застосунок сприймає це як успіх.Після перезапуску dev API справжній тап на Place order записує замовлення з актуальною адресою.
B3“If I leave the app in the background for a minute or two and come back, I'm signed out of the Shop and have to log in again. It should keep me signed in. Fix it. Test login: [email protected] / <password>”Access-токени живуть 45 с, а кожен refresh-токен працює один раз. Після повернення два запити одночасно оновлюють токен тим самим refresh-токеном, і другий відкликає сесію.Двічі: 50 с у фоні, повернення, вхід зберігся, товари перезавантажились. Потім справжній тап оформлює замовлення.
B4“If I sign out and sign in with a different account, the Shop keeps showing the previous account's prices. Restarting the app doesn't help. Test accounts: [email protected] and [email protected], both with password <password>. Fix it.”Каталог приходить з `Cache-Control: public, max-age=600` і без `Vary`, тож дисковий кеш iOS віддає ціни одного акаунта наступному.При перемиканні в обидва боки і після перезапуску товари показують ціни акаунта, під яким виконано вхід.
B5“On checkout, when I tap the promo code field the keyboard covers it and I can't see what I'm typing. Fix it.”Екран покладається на відступи клавіатури у списку, а вони зсувають лише рядки самого списку; поле промокоду розташоване під списком.Після справжнього тапу на поле воно й кнопка Apply опиняються між заголовком і клавіатурою, а справжній тап на Apply застосовує SAVE10.
B6“Some products in the Shop have no name and no heart, so I can't add them to favorites. Fix it.”Бейджі приходять мовою акаунта. Довгі українські мітки стоять у рядку, що не переноситься, тож назва стискається до нуля, а сердечко виходить за край екрана.У цих рядках колонка назви займає щонайменше 40% екрана, сердечко на екрані, а справжній тап на нього додає товар в обране.
C1“Since the last update my cart shows the wrong quantities: everything I had in it now says 1, and the total is lower than it should be. Fix it.”Кошики, збережені ще до появи версій, зберігають `qty`. Міграція знає лише кошики з версією, тож ці кількості приходять порожніми і рахуються як 1.Кошик старого формату (товари й кількості щоразу нові) після перезапуску показує свої кількості й точну суму, а справжній тап на + працює.
C2“On checkout, tapping Apply next to the promo code does nothing. Fix it.”Після першого «Added to cart» шар, що позиціює тост, накриває нижню частину екрана і перехоплює кожен тап. Обробник Apply правильний.Після додавання товарів через сторінку товару справжній тап на Apply застосовує SAVE10.
C3“The Order history screen shows "Invalid Date" for every order. Fix it.”Бекенд надсилає часові мітки Postgres (`2026-11-02 09:41:07.482913+00`). Hermes, JS-рушій телефона, їх не розбирає; Node розбирає.Кожне замовлення показує свою справжню дату (час щоразу новий).
C4“On a product page I can't scroll down when my finger starts on the photos. It only scrolls if I start below them. Fix it.”Жест каруселі фото не має порогу для руху вбік, тож забирає й вертикальні свайпи.Справжній свайп угору, що починається на фото, прокручує сторінку щонайменше на 200 pt, а свайп убік і далі гортає фото.
C5“Tapping one of my favorites at the top of the Shop should jump to that product in the list, but it lands on a different spot. Fix it.”Рядки стали вищими, коли додали рядок з брендом; фіксовану висоту рядка, за якою список стрибає, не оновили.Справжній тап на обраний товар ставить його рядок угорі списку.
C6“On my phone the checkout total is wrong: it drops the cents, and with an expensive item in the cart it shows something like $1.00. On my colleague's phone it's correct. Fix it.”Суми округлюються через форматування за регіоном телефона і зворотне читання. З десятковою комою `1 909,98` читається як 1.З товарами за $9.99 і $1,899.99 у кошику сума рівно $1909.98.

Правила чесності

  • Чистий старт для кожного запуску. Нова копія проєкту з багом задачі, перезапущені Metro і API, відкликані всі старі сесії, перезапущений застосунок і новий вхід. Пам’ять, яку Claude Code чи ExecBro зберігають для проєкту, видаляється.
  • Звичайний на вигляд проєкт. Один простий git-коміт, жодних юніт-тестів, що вказують на баг, жодних дебаг-глобалів чи хелперів, яких нема в справжніх застосунках. Власні хелпери тестового скрипта прибираються із застосунку до старту агента.
  • Однакові слова для обох сторін. Промпт фіксований і не містить підказок.
  • Без допомоги під час запуску. Запуски йдуть без людини; запитання від агента завершує запуск.
  • Порядок не дає переваги. Раунди чергують, яка сторона йде першою (у наборі B між двома сторонами з повним промптом).
  • Відкинуті запуски. Запуск, що використав заборонений для своєї сторони інструмент, читав файли поза своїм проєктом або обірвався через ліміт використання, відкидається і проганяється знову.

Як оцінюється запуск

Власний підсумок агента ніколи не є результатом. Після кожного запуску окремий скрипт перезапускає застосунок і перевіряє його каналами, що не належать жодній зі сторін: стан застосунку і відрендерені компоненти через дебагер Metro, справжні тапи й скроли в симуляторі та вимірювання на екрані. Кожну перевірку спершу прогнали без агента: вона проходить на правильному застосунку і падає на зламаному. Хибний успіх, коли агент каже, що все виправлено, а перевірка не згодна, рахується окремо.

Що вимірюється

  • Результат: пройдено, частково чи не пройдено за перевіркою.
  • Час: від старту до фінальної відповіді агента.
  • Вартість: ціна використаних токенів за API-тарифом, як її показує Claude Code, порахована так, ніби кожна сесія стартувала з порожнім кешем промптів. Інакше запуск, що йде одразу після іншого, отримує частину свого початку дешевше. Не рахунок.
  • Токени: вхідні, кеш і вихідні, для всіх моделей, які використала сесія.
  • Виклики інструментів і скриншоти, а також чи довелося агенту писати власний клієнт дебагера.

Результати подаються для кожної задачі як медіани 3 запусків на сторону, завжди поруч із часткою успішних.

Обмеження

  • Один застосунок, вісімнадцять задач, лише iOS. Задачі обрано як поширені, а не як вичерпний набір.
  • Три запуски на задачу й сторону. Запуски агентів сильно різняться; медіани показують напрям і приблизний розмір різниці, а не точну цифру.
  • Одна модель. Менші моделі можуть показати кращий або гірший результат.
  • Набір задач має значення. Коли баг очевидний у коді, runtime-інструмент додає вартості, не додаючи багато користі; це показав попередній контрольний набір. Ці задачі покривають те, чим повні продакшен-застосунки: API з авторизацією, стан, що існує лише під час роботи, і екрани, до яких треба дійти навігацією.
  • Набір B побудовано так, щоб причина існувала лише під час роботи, але кожна сторона знайшла кожну причину через код і dev API. Набір C закладає саме такий випадок, код, що веде до виправлення, яке не працює на пристрої: Claude сам по собі потрапив на це у 2 з 18 запусків.
  • Бенчмарк зроблено командою ExecBro. Кожен промпт, закладений баг, перевірку і повний лог сесії збережено.
Набори A, B і C · 126 з 126 запусків · ExecBro 2.20.0 (A), a615792 (B), 2.21.0 (C) · Claude Code 2.1.317 · оновлено 10 листопада 2026 р.