Как Gemini CLI поймал у моего Claude Code критическую дыру в paywall за 30 секунд

от автора

Solo-фаундер. Делаю всё через Claude Code. На прошлой неделе он спроектировал мне систему loyalty-кредитов, я её четыре раза перечитал и собрался релизить. Сказал Claude: «обсуди это с Gemini». Через 30 секунд получил ответ, что я в буквальном смысле платил юзерам за то, чтобы они НЕ подписывались.

Что сломалось

Дизайн: юзер дочитывает книгу → получает бонусные credits на дальнейшее чтение. Cap на гранты — 1 раз в неделю. Я выбрал формулу:

Linear cap: min(pages × 3, 600)

Посчитал paywall:

  • Cap 600 × 4 недели = 2400/мес максимум

  • Premium Basic = 3000/мес

  • 2400 < 3000 → paywall сохранён.

Логично? Логично. Сказал Claude: «обсуди этот дизайн с Gemini». Через 30 секунд получил:

VERDICT — GOOD WITH FIXES2. Paywall Risk: CRITICAL FAILURE.   Max free potential = 250 (monthly) + 1500 (daily refills) +   2400 (4× 600 grants) = 4150 credits/mo.   Your Premium Basic is 3000.   You are literally paying users to NOT subscribe.   Grant must not exceed 250-300 per week.5. Abuse Vectors: You missed "Speed Flipping."   If completion is just reaching the last page, a user will   swipe through a 200p book in 60 seconds to farm 600 credits.   Need min 3 seconds/page check.SINGLE MOST IMPORTANT FIX: Reduce grant cap to 300 credits/week.

Я забыл daily refill в своей mental model. 1500 невидимых credits/мес. Полный потолок free = 4150 — выше Premium на 38%. Free выходил выгоднее платного. Я бы катил это в прод.

Бонус: speed-flipping exploit, который я не рассмотрел вообще. Кто-то напишет скрипт, прокрутит 200-страничную книгу за 60 секунд, нафармит 600 credits. Очевидно постфактум, не очевидно изнутри собственного дизайна.

Один запрос — два critical bug’а до релиза. 30 секунд. $0.

Зачем нужен второй ИИ как ревьюер

В апреле 2025-го Дмитрий Дементьев на Хабре показал паттерн: один ИИ ревьюит работу другого через CLI. Идея сильная — разные RLHF-приоры → разные blind spots → cross-model критика ловит то, что self-critique структурно пропускает.

Узкое место его подхода: Codex CLI требует платный OpenAI API. Solo-фаундер начинает скупиться, использует редко.

Gemini CLI снимает это:

  • OAuth через Google-аккаунт (никаких API ключей)

  • 1000 запросов в день бесплатно

  • Контекст 1M токенов (читает PDF до 1000 страниц нативно)

  • Другой вендор — другие RLHF-приоры — другие находки

Как я это делаю

Сразу честно: я не формулирую prompt вручную. Я не сижу и не пишу «context: …, audience: …, anti-criteria: …». Я говорю Claude:

«Обсуди это с Gemini».

Дальше Claude сам собирает prompt со всем контекстом сессии (артефакт, аудитория, цифры, что я уже отверг и почему), запускает gemini, возвращает мне verbatim critique. Я просто читаю результат.

Это работает, потому что у Claude Code на эту задачу повешен skill: маленький markdown-файл, в котором описано, как ловить триггер («обсуди с Gemini» / «second opinion»), как структурировать запрос и какие anti-patterns избегать (например, не упоминать «Claude wrote this» — это смещает critique).

Skill открытый, MIT, лежит в github.com/anydasa/claude-skills. Положили в репо сегодня. Установка — два файла: SKILL.md в .claude/skills/gemini-review/, и gemini auth login для OAuth. Дальше Claude Code сам делает всё остальное.

Финальные правки в дизайн после Gemini

Параметр

Было

Стало

Formula

min(pages×3, 600)

min(pages×3, 300)

Speed-flip защита

нет

min 3s/страница ИЛИ ≥80% страниц открыто

Level-up trigger

открыл новый CEFR

прочитал ≥10 страниц или ≥10% книги на новом уровне

С чем не согласился: Gemini предложил перевести copy в gamer-tone («B1 unlocked. A2 is beneath you now»). Для аудитории взрослых читателей классики на иностранных языках это пахнет Duolingo, ломает positioning. Cross-model ревью — это suggestion, не приказ. Founder судит, что применять.

Track-record

Чтобы skill не превратился в pseudo-rigor оправдание для shipping:

  • <60% suggestions applied → judge sycophancy-noisy, tighten criteria

  • >90% applied → underusing own judgment, audit

  • 60-90% → healthy zone

За три недели — 4 invocation’а, 4 материальных catch’а:

  • Loyalty-credit design (выше) — paywall math + speed-flip exploit

  • Partner-program PDF — caught missing founder presence

  • Pricing strategy — caught mis-framing translation as premium feature

  • Architecture proposal — flagged «drop economy» as the one critical pre-launch decision

Все — freeform strategic артефакты. На код с тестами skill не используется: тесты и есть judge.

А эта статья — её писал ИИ?

Конечно. Иронично было бы пытаться скрыть. Драфт сделал Claude Code, потом я её прочитал, отредактировал, поправил тон, переставил абзацы, выкинул половину технических деталей.

Это и есть рабочий human-in-the-loop: AI пишет первый драфт, человек правит, второй AI ревьюит итог. Эту статью я тоже прогнал через Gemini перед публикацией — он подсказал убрать одну секцию, которая выглядела как самореклама.

Что не помешало написать про себя в footer’е 🙂

Чем я сегодня занимался — для иллюстрации скорости

Эта статья — побочный продукт обычного утра. Чтобы было понятно, что входит в «обычное утро» с Claude Code, вот фактический git-лог за сегодня (4 часа, до обеда):

В продуктовом репо (бэкенд + Telegram Mini App):

  • feat(credits) — динамическая награда за дочитывание книги + транзакционные нотификации

  • feat(admin) — lifetime reading-time в админке + бэкфилл из истории

  • fix(chunk-analyzer) — per-target_lang кэш + native-slot labels + консолидация промптов

  • feat(credits) — снижение signup-бонуса 1000 → 250 + сжатие non-premium балансов

  • feat(onboarding) — дефолтный CEFR-уровень A2 вместо B1

Параллельно в маркетинг/ресёрч-репо:

  • Partner-program PDF (8 страниц) для outreach к Telegram-creator’ам — драфт, ревью Gemini, фиксы по результатам ревью, рендер через headless Chrome

  • Эта статья на Хабре — драфт, ревью Gemini

  • LinkedIn-пост — три версии (EN-personal, EN-insight, RU)

  • Опубликовали github.com/anydasa/claude-skills с MIT-лицензией

  • Десяток обновлений в memory-файлах

Это не sprint-режим под дедлайн. Это обычное утро при тарифе Claude Code Max за $200/месяц. В лимиты ни разу не упирался, хотя пару раз подходил близко к недельному. На solo-bootstrap это, пожалуй, лучший $200, которые я вообще трачу — за эту цену я получаю эквивалент middle-разработчика на full-time, которому дополнительно можно поручить partner-PDF, Habr-статью и SQL-запрос в analytics между делом.

Контекст для тех, кто сравнивает: я не ML-инженер, не профессиональный маркетолог и не профессиональный copywriter. Английский — B1+, выучил сам. То, что вы читаете — типичный солист с продуктовым бэкграундом, который раньше делал три из этих десяти вещей вручную, плохо, и редко.

Cross-model judge — один из инструментов в этом setup. Не магия, но кратно поднимает уверенность в freeform-артефактах, которые иначе пришлось бы либо катать на удачу, либо платить $300/час консультанту.

О себе

Делаю Osmo Lingo — Telegram Mini App и Web Application для чтения классики на иностранных языках с AI-адаптацией под уровень.

Solo-founder. Лечу как ракета: десятки исследований и экспериментов, ежедневные столкновения с проблемами, разочарованиями, неуверенностью. Иногда честно хочется всё бросить. Если интересно, как я прохожу этот путь — задавайте вопросы в комментариях, расскажу о неудачах, поворотах и что реально работает на solo-стадии.

Ссылки:

ссылка на оригинал статьи https://habr.com/ru/articles/1028104/