Kirat - Multi Model AI Council
официальныйОдин ИИ даёт одну линию рассуждений. Kirat — это расширение для Claude Desktop и плагин для Claude Code, которое добавляет ChatGPT и Gemini в качестве совета: независимые позиции, голосование с сохранением особого мнения и код-ревью, где каждая находка проверяется второй семьёй моделей. Используйте собственные API-ключи. Платно, разовый платёж.
Что можно делать с Kirat Multi Model AI Council MCP?
- Получить мнение нескольких моделей по решению — Обратитесь к
kirat_vote, чтобы совет высказался по деловому или техническому вопросу с вариантами и контекстом. - Проверить код на безопасность и корректность — Используйте
kirat_review, чтобы получить перекрёстно проверенные находки с уровнями серьёзности и предложенными исправлениями перед выпуском. - Увидеть особое мнение и обоснование решения — Получите полные позиции каждой модели, включая мнение меньшинства, с оценками уверенности и обоснованием.
Документация
01 — Воспроизведение
Посмотрите, как работает совет.
Реальные записи работы инструментов Kirat, сделанные 13 октября 2026 года с той версией, которую вы покупаете. Выберите инструмент и посмотрите, как работает совет: независимые позиции, перекрёстные проверки, анонимные рейтинги и особое мнение. Это воспроизведение: ничто, на что вы здесь нажмёте, не вызывает модель, и ничто не покидает эту страницу. Чат написан для иллюстрации и лишь пересказывает записанный результат; то, что Claude отправил в Kirat, и то, что пришло в ответ, показано без изменений в разделе «За кулисами».
Пять вопросов из разных областей. Выберите один.
Пусть Kirat проголосует по этому вопросу: Я один веду небольшой B2B SaaS. Стоит ли мне добавить бесплатный тариф?
kirat_vote спросил совет
Совет принял решение (большинство 2:1): Оставить только платный тариф, ничего не менять.
Мой собственный голос был особым мнением: «Оставить только платный тариф, продлить пробный период до 30 дней». Он остаётся в протоколе вместе с обоснованием, чтобы вы могли взвесить его сами.
За кулисами
kirat_vote Что Claude отправляет в Kirat
Вопрос: Я один веду небольшой B2B SaaS. Стоит ли мне добавить бесплатный тариф?
ЗАПИСАНО 2026-10-13 · KIRAT_VOTE · УСИЛИЕ: СТАНДАРТНОЕ · 1 РАУНД
Отправленный контекст: Разработчик-одиночка. Инструмент выставления счетов для фрилансеров, 19 долларов США в месяц, 14-дневный бесплатный пробный период, 30 платящих клиентов через 5 месяцев. Регистрации приходят в основном из двух постов в блоге, которые ранжируются в Google. Около 12% пробных периодов конвертируются. Поддержка уже занимает около 5 часов в неделю. У разработчика есть основная работа и около 10 часов в неделю на продукт.
Варианты: Добавить бесплатный тариф · Оставить только платный тариф, продлить пробный период до 30 дней · Оставить только платный тариф, ничего не менять
Результат от совета
gpt-5.6 уверенность 88
Оставить только платный тариф, ничего не менятьБесплатный тариф, вероятно, увеличит число неплатящих пользователей и нагрузку на поддержку, которая уже consumes половину доступных 10 часов в неделю. Конверсия пробного периода в 12% — достойный показатель, поэтому нет явных доказательств того, что длительность пробного периода является узким местом. Сохраните текущую модель и потратьте скудное время на снижение потребности в поддержке и расширение привлечения за пределы двух постов в блоге.
gemini-3.6-flash уверенность 90
Оставить только платный тариф, ничего не менятьПри наличии всего 10 часов в неделю поддержка уже занимает 50% ресурсов. Бесплатный тариф увеличил бы объём поддержки от неплатящих пользователей без какого-либо контроля. Конверсия пробного периода в 12% уже сильна; узкое место — трафик, а не модель ценообразования.
claude (третий голосующий) уверенность 58
Оставить только платный тариф, продлить пробный период до 30 днейБесплатный тариф в основном добавляет нагрузку на поддержку, которая уже составляет половину доступного времени. Выставление счетов ежемесячное, поэтому 14-дневный пробный период может закончиться до того, как фрилансер отправит второй счёт и увидит ценность. 30-дневный пробный период охватывает один полный расчётный цикл, не добавляя постоянных бесплатных пользователей.Особое мнение, записано
Решение Оставить только платный тариф, ничего не менять Путь большинство 2:1 Стоимость $0.015
Пусть Kirat проголосует по этому вопросу: Интернет-магазину нашего клиента нужна перестройка. Перестроить его на WooCommerce или перейти на Shopify?
kirat_vote спросил совет
Совет принял решение (единогласно 3:0): Перейти на Shopify.
Все три позиции, включая мою, указывают в одном направлении. Каждая из них сопровождается обоснованием.
За кулисами
kirat_vote Что Claude отправляет в Kirat
Вопрос: Интернет-магазину нашего клиента нужна перестройка. Перестроить его на WooCommerce или перейти на Shopify?
ЗАПИСАНО 2026-10-13 · KIRAT_VOTE · УСИЛИЕ: СТАНДАРТНОЕ · 1 РАУНД
Отправленный контекст: Мы — небольшое цифровое агентство. Клиент продаёт около 1 800 товаров для мебели в Германии, Австрии и Швейцарии, имеет 3 сотрудников и не имеет собственного разработчика. Текущий магазин — это самостоятельно размещённая установка WooCommerce, 6 лет, 31 плагин, медленные страницы и два инцидента безопасности за последний год. Выручка — около 1,2 млн евро в год. Клиент хочет меньше обслуживания и меньше аварийных ситуаций; он использует локальную ERP, которая экспортирует данные о товарах в формате CSV. Бюджет на перестройку: 25 000 евро.
Варианты: Перестроить на WooCommerce · Перейти на Shopify
Результат от совета
gpt-5.6 уверенность 89
Перейти на ShopifyShopify лучше соответствует основным целям клиента: меньше обслуживания, меньше аварийных ситуаций в области безопасности и отсутствие необходимости в собственном разработчике. Каталог из 1 800 товаров и рабочий процесс ERP на основе CSV поддаются управлению, и бюджет в 25 000 евро должен покрыть дисциплинированную миграцию плюс настройку налогов, платежей и юридических аспектов для региона DACH. Компромиссы — это регулярные расходы на приложения и платформу, меньшая гибкость бэкенда и необходимость проверить рабочий процесс импорта из ERP и любые специфические для мебели варианты перед принятием обязательств. Перестройка WooCommerce могла бы сохранить гибкость, но она сохранила бы ответственность за хостинг, обновления, совместимость плагинов и безопасность — именно ту операционную нагрузку, которую клиент хочет снизить.
gemini-3.6-flash уверенность 90
Перейти на ShopifyБез собственного разработчика, с 3 сотрудниками и историей инцидентов безопасности Shopify радикально снижает накладные расходы на обслуживание и риски безопасности. Бюджета в 25 000 евро достаточно для миграции на Shopify, включая интеграцию ERP через CSV, тогда как перестройка на WooCommerce увековечила бы высокие затраты на обслуживание и постоянные риски аварийных ситуаций.
claude (третий голосующий) уверенность 72
Перейти на ShopifyБез собственного разработчика, с 31 плагином и двумя инцидентами безопасности реальная проблема клиента — обслуживание, а не функции. Shopify устраняет хостинг, обновления и большую часть работы по безопасности; импорт товаров из ERP через CSV — стандартная процедура. Компромисс — это транзакционные сборы и сборы за приложения, а также меньшая гибкость, что при таком размере менее важно, чем стабильность.
Решение Перейти на Shopify Путь единогласно 3:0 Стоимость $0.015
Пусть Kirat проголосует по этому вопросу: Местная пекарня хочет больше предзаказов на торты. Куда следует направить следующие 3 000 евро в первую очередь?
kirat_vote спросил совет
Совет принял решение (единогласно 3:0): Надлежащая страница онлайн-заказа.
Все три позиции, включая мою, указывают в одном направлении. Каждая из них сопровождается обоснованием.
За кулисами
kirat_vote Что Claude отправляет в Kirat
Вопрос: Местная пекарня хочет больше предзаказов на торты. Куда следует направить следующие 3 000 евро в первую очередь?
ЗАПИСАНО 2026-10-13 · KIRAT_VOTE · УСИЛИЕ: СТАНДАРТНОЕ · 1 РАУНД
Отправленный контекст: Пекарня с 6 сотрудниками в немецком городе с населением 40 000 человек. Торты на заказ и предзаказы имеют лучшую маржу. Сегодня заказы принимаются только по телефону и электронной почте; на сайте есть часы работы и контактная форма, ничего для заказа. Профиль в Google Business имеет 4,7 звезды от 120 отзывов. Платной рекламы до сих пор не было. Бюджет: 3 000 евро на следующий квартал, у владельца мало времени.
Варианты: Google Ads · Надлежащая страница онлайн-заказа · Разделить поровну между обоими
Результат от совета
gpt-5.6 уверенность 94
Надлежащая страница онлайн-заказаСначала устраните узкое место: прямо сейчас заинтересованные клиенты не могут удобно или структурированно оформить предзаказ. Простая, удобная для мобильных устройств страница заказа с выбором торта, датой самовывоза, вариантами настройки, ценой или предоплатой и подтверждением использует сильную локальную видимость, которая уже есть у пекарни, и сокращает работу по телефону и электронной почте. Google Ads без надёжного процесса заказа направили бы платный трафик в слабый путь конверсии. После нескольких недель измеримых заказов более поздний рекламный бюджет можно потратить более целенаправленно.
gemini-3.6-flash уверенность 90
Надлежащая страница онлайн-заказаБез цифрового пути заказа реклама лишь создаёт больше трудоёмкой ручной работы по телефону и электронной почте, с которой владелец едва справляется. Кроме того, сильный профиль в Google (4,7 звезды) будет гораздо лучше конвертировать органический трафик, который он уже приносит, с настоящей страницей заказа, сразу, прежде чем деньги должны пойти в рекламу.
claude (третий голосующий) уверенность 74
Надлежащая страница онлайн-заказаРеклама окупается только в том случае, если клик может превратиться в заказ. Прямо сейчас каждый посетитель должен позвонить или написать по электронной почте, поэтому платный трафик утекал бы. Страница заказа с выбором продуктов, датами самовывоза и предоплатой конвертирует спрос, который уже приносит профиль с 4,7 звезды, и делает более позднюю рекламу измеримой.
Решение Надлежащая страница онлайн-заказа Путь единогласно 3:0 Стоимость $0.012
Пусть Kirat проголосует по этому вопросу: Выделить наш модуль выставления счетов в отдельный сервис сейчас или сначала укрепить его границы внутри монолита?
kirat_vote спросил совет
Совет принял решение (единогласно 3:0): Сначала укрепить границы внутри монолита.
Все три позиции, включая мою, указывают в одном направлении. Каждая из них сопровождается обоснованием.
За кулисами
kirat_vote Что Claude отправляет в Kirat
Вопрос: Выделить наш модуль выставления счетов в отдельный сервис сейчас или сначала укрепить его границы внутри монолита?
ЗАПИСАНО 2026-10-13 · KIRAT_VOTE · УСИЛИЕ: СТАНДАРТНОЕ · 1 РАУНД
Отправленный контекст: Команда из 8 инженеров. Один монолит на TypeScript, около 60 000 строк, одна база данных Postgres, развёртывание несколько раз в день. Модуль выставления счетов меняется каждую неделю и стал причиной 5 из последних 8 производственных инцидентов, в основном из-за того, что другие модули напрямую читают и записывают таблицы выставления счетов. Никто в команде не запускал распределённую систему в производстве. Руководство хочет меньше инцидентов в течение двух кварталов.
Варианты: Выделить выставление счетов в сервис сейчас · Сначала укрепить границы внутри монолита
Результат от совета
gpt-5.6 уверенность 94
Сначала укрепить границы внутри монолитаИнциденты вызваны в первую очередь неконтролируемым доступом к базе данных, а не отсутствием сетевой границы. Обеспечьте владение выставлением счетов внутри монолита: удалите прямой доступ к таблицам, предоставьте узкий внутренний API, добавьте разрешения на уровне базы данных или элементы управления на уровне схемы, а также добавьте контрактные и интеграционные тесты. Это быстро нацелено на режим отказа в рамках двухквартального окна. Выделение сейчас добавило бы развёртывание, наблюдаемость, повторные попытки, согласованность данных и операционную сложность команде без опыта распределённых систем. Как только пути доступа и владение данными станут явными, выделение станет безопаснее, и его можно будет пересмотреть, если независимое масштабирование или развёртывание всё ещё будет ценным.
gemini-3.6-flash уверенность 90
Сначала укрепить границы внутри монолитаОсновная причина сбоев — другие модули напрямую обращаются к таблицам выставления счетов в базе данных. Укрепление границ модуля решает эту проблему напрямую в существующем монолите. Поскольку команда из 8 человек не имеет опыта работы с распределёнными системами, выделение модуля сейчас создало бы новые риски и поставило бы под угрозу цель сокращения инцидентов в течение двух кварталов.
claude (третий голосующий) уверенность 76
Сначала укрепить границы внутри монолитаИнциденты происходят из-за того, что другие модули напрямую обращаются к таблицам выставления счетов. Разделение на сервисы тоже заставило бы установить эту границу, но оно добавляет сетевые сбои, распределённые транзакции и новую операционную работу для команды без такого опыта. Обеспечение API модуля и владения таблицами внутри монолита быстрее устраняет причину и сохраняет возможность выделения на будущее.
Решение Сначала укрепить границы внутри монолита Путь единогласно 3:0 Стоимость $0.014
Пусть Kirat проголосует по этому вопросу: В нашем систематическом обзоре может ли один проход скрининга с помощью LLM заменить второго человека-скринера?
kirat_vote спросил совет
Совет принял решение (единогласно 3:0): Использовать LLM как дополнительного скринера; люди разрешают конфликты.
Все три позиции, включая мою, указывают в одном направлении. Каждая из них сопровождается обоснованием.
За кулисами
kirat_vote Что Claude отправляет в Kirat
Вопрос: В нашем систематическом обзоре может ли один проход скрининга с помощью LLM заменить второго человека-скринера?
ЗАПИСАНО 2026-10-13 · KIRAT_VOTE · УСИЛИЕ: СТАНДАРТНОЕ · 1 РАУНД
Отправленный контекст: Скрининг заголовков и аннотаций около 3 000 записей для систематического обзора в области исследований служб здравоохранения, планируемого к публикации. Текущий протокол: два независимых человека-скринера, конфликты разрешаются путём обсуждения. Рабочего времени сотрудников не хватает. Обзор следует PRISMA, и рецензенты журнала спросят, как проводился скрининг. Пропустить релевантное исследование (ложное исключение) хуже, чем включить нерелевантное. Варианты: Да, заменить второго человека-скринера · Использовать LLM как дополнительного скринера; конфликты разрешают люди · Нет, оставить двух людей-скринеров и не использовать LLM
Результат совета
gpt-5.6 уверенность 94
Использовать LLM как дополнительного скринера; конфликты разрешают люди. Один проход LLM не должен заменять независимый скрининг людьми, когда основной риск — ложные исключения: качество может зависеть от темы, промпта и версии модели, а ошибки могут быть систематическими. Используйте его для приоритизации записей или пометки разногласий, но требуйте разрешения конфликтов людьми и подтверждения исключений человеком. Документируйте модель, версию, промпт, валидационную выборку и рабочий процесс принятия решений для отчётности по PRISMA и воспроизводимости.
gemini-3.6-flash уверенность 88
Использовать LLM как дополнительного скринера; конфликты разрешают люди. Гибридный подход существенно снижает нагрузку на людей при работе с 3000 заголовками и аннотациями, сохраняя методологическую строгость, которую требуют PRISMA и рецензенты. Поскольку ложных исключений необходимо избегать, разрешение людьми каждого расхождения (или использование подхода с высокой чувствительностью промпта) гарантирует, что ни одно релевантное исследование не будет потеряно.
claude (третий голосующий) уверенность 70
Использовать LLM как дополнительного скринера; конфликты разрешают люди. Ложные исключения — дорогостоящая ошибка, а полнота LLM при скрининге зависит от темы и промпта. Замена второго человека устраняет проверку, которая отлавливает такие ошибки, и это трудно защитить перед рецензентами журнала. Добавление LLM в качестве третьего скринера и разрешение конфликтов людьми сохраняет защищённость протокола и по-прежнему помечает вероятные пропуски.
Решение Использовать LLM как дополнительного скринера; конфликты разрешают люди Путь единогласно 3:0 Стоимость $0.019
Записано 13 октября 2026 г. с kirat_vote на стандартном уровне усилий; каждая сессия заняла менее 20 секунд и стоила менее двух центов. Вопросы, варианты и контекст показаны точно в том виде, в каком были отправлены, рассуждения — полностью. Gemini ответил четыре раза на немецком, а ChatGPT — один раз; эти ответы переведены здесь. В вопросе о бесплатном тарифе Claude проиграл голосование 2:1, и его возражение осталось в протоколе. Значения уверенности — это самооценка каждой модели.
Пять фрагментов кода из разных областей, каждый отправлен точно в том виде, как показан. ChatGPT и Gemini проверяют параллельно, Claude добавляет две собственные находки, и каждая находка проверяется другой семьёй моделей. Учитываются только подтверждённые находки. Выберите одну.
Попросите Kirat проверить наш вебхук платежей Stripe на безопасность и корректность перед выпуском.
kirat_review спросил совет
Kirat нашёл 14 подтверждённых проблем (4 × критических, 4 × высоких, 6 × средних). Каждая находка была перепроверена другой семьёй моделей.
Начните с тех, что в начале списка; к каждой прилагается предлагаемое исправление.
За кулисами
kirat_review Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_REVIEW · УСИЛИЕ: СТАНДАРТНОЕ · 14 ПОДТВЕРЖДЕНО, 0 ОТКЛОНЕНО · $0.14
Фокус: безопасность и корректность вебхука платежей
Отправленный код:
// routes/webhooks.js — payment webhook of a solo invoicing SaaS (Node 20, Express 4, Stripe, pg)
const express = require('express');
const { db } = require('../db');
const router = express.Router();
router.post('/webhooks/stripe', express.json(), async (req, res) => {
const event = req.body;
if (event.type === 'invoice.paid') {
const invoice = event.data.object;
const userId = invoice.metadata.userId;
await db.query('UPDATE users SET plan = $1, paid_until = $2 WHERE id = $3',
['pro', new Date(invoice.period_end * 1000), userId]);
await db.query('INSERT INTO payments (user_id, amount) VALUES ($1, $2)',
[userId, invoice.amount_paid / 100]);
}
if (event.type === 'customer.subscription.deleted') {
await db.query("UPDATE users SET plan = 'free' WHERE stripe_customer = '" + event.data.object.customer + "'");
}
res.sendStatus(200);
});
module.exports = router;
Результат совета
- critical
Вебхук обрабатывает тело запроса без проверки подписи Stripe. Поэтому любой внешний вызывающий может отправлять поддельные события
invoice.paid\илиcustomer.subscription.deleted\и разблокировать или понижать учётные записи пользователей. JSON-парсер также отбрасывает неизменённое исходное тело, которое требуется для проверки подписи Stripe. Исправление: Используйтеexpress.raw({ type: 'application/json' })\для этого маршрута и вызывайтеstripe.webhooks.constructEvent(req.body, req.headers\['stripe-signature'\], webhookSecret)\до любой обработки. Убедитесь, что к этому маршруту заранее не применён глобальный JSON-парсер; отклоняйте недействительные подписи с кодом 400. строка 6 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - critical Отсутствует проверка подписи вебхука Stripe. Злоумышленник может отправлять произвольные поддельные события вебхука на эту конечную точку, чтобы без авторизации переводить учётные записи на Pro или манипулировать записями базы данных. Исправление: Используйте stripe.webhooks.constructEvent() с секретом вебхука Stripe для проверки подлинности и целостности каждого события. строка 6 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical Уязвимость SQL-инъекции из-за прямой конкатенации пользовательского ввода (event.data.object.customer) в строку SQL-запроса. Исправление: Используйте параметризованные запросы, как в предыдущих операторах: db.query('UPDATE users SET plan = $1 WHERE stripe_customer = $2', ['free', event.data.object.customer]). строка 18 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical Вебхук никогда не проверяет подпись Stripe, а express.json() отбрасывает исходное тело, необходимое для этого. Любой может отправить поддельное событие invoice.paid и бесплатно перевести любую учётную запись на pro. Исправление: Используйте express.raw({ type: 'application/json' }) на этом маршруте и создавайте событие с помощью stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], endpointSecret); при ошибке отклоняйте запрос. строка 6 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- high
Идентификатор клиента вставляется напрямую в SQL-оператор. Значение вроде
' OR 1=1 --\может манипулировать предложением WHERE и перевести всех пользователей на бесплатный план; в зависимости от конфигурации базы данных возможны и дальнейшие SQL-инъекции. Исправление: Полностью параметризуйте запрос:UPDATE users SET plan = 'free' WHERE stripe\_customer = $1\с\[event.data.object.customer\]\. Дополнительно аутентифицируйте событие через подпись Stripe. строка 19 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high
Отсутствует проверка идемпотентности. Stripe доставляет вебхуки как минимум один раз и повторяет их при тайм-аутах или ошибках. Поэтому одно и то же событие
invoice.paid\может создавать идентичные записи о платежах несколько раз. Исправление: Сохраняйте ID события Stripe или ID счёта в записи о платеже, защитите его ограничением UNIQUE и выполняйте обработку события вместе с платежом атомарно как insert/upsert. Подтверждайте уже обработанные события кодом 200, не повторяя бизнес-операцию. строка 14 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high
Обработчик
async\не передаёт ошибки дальше. Express 4 не перехватывает автоматически отклонённые промисы из асинхронных обработчиков маршрутов. Поэтому ошибка БД или неполный объектinvoice.paid\приводят к необработанному отклонению промиса и в Node 20 могут завершить процесс вместо контролируемого возврата ответа с ошибкой. Исправление: Оберните обработчик вtry/catch\и передавайте ошибки вnext(err)\, либо используйте асинхронную обёртку. Проверяйте структуру входных данных перед обращением к ней и при временных ошибках обработки контролируемо возвращайте статус 5xx, чтобы Stripe повторил доставку. строка 6 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high Использование express.json() для конечной точки вебхука заранее разбирает тело как JSON. Однако проверка подписи Stripe требует неизменённого исходного тела. Исправление: Используйте express.raw({ type: 'application/json' }) вместо express.json() для обработчика маршрута вебхука Stripe. строка 6 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Обновление пользователя и запись о платеже — две независимо фиксируемые операции базы данных. Если INSERT завершается ошибкой после успешного UPDATE, пользователь получает план Pro, хотя соответствующей записи о платеже не существует. Исправление: Выполняйте обе операции вместе с маркером идемпотентности в одной транзакции базы данных на одном клиенте и полностью откатывайте при любой ошибке. строка 12 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium
Обработка не учитывает, что Stripe может доставлять события не в порядке их создания. Задержанное более старое событие
invoice.paid\может сброситьpaid\_until\; задержанное событиеcustomer.subscription.deleted\может вернуть пользователя, который с тех пор был повторно активирован, обратно вfree\. Исправление: Согласуйте текущее состояние подписки с помощью стабильных ID Stripe, например получив его из Stripe, и сохраняйте переходы состояния или временную метку последнего обработанного события. Как минимум обновляйтеpaid\_until\только вперёд и не применяйте события удаления слепо к текущему состоянию пользователя. строка 12 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium
amount\_paid / 100\предполагает без проверки, что валюта имеет ровно два знака после запятой. Это неверно, например, для JPY. Кроме того, валюта не сохраняется рядом, поэтому сумма в записи о платеже не имеет однозначной единицы. Исправление: Предпочтительно сохраняйте суммы без изменений в наименьшей денежной единице вместе сinvoice.currency\. Если нужны основные денежные единицы, выполняйте преобразование на основе соответствующих показателей степени валюты. строка 15 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium Отсутствует обработка исключений в асинхронном маршруте Express 4. При ошибке базы данных или отсутствующих полях это приводит к необработанному отклонению промиса, которое может обрушить приложение. Исправление: Добавьте блок try-catch и передавайте ошибки в next(err), либо используйте утилиту вроде express-async-handler. строка 6 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Нет проверки наличия invoice.metadata.userId. Если поле metadata или userId отсутствует или не определено, SQL-запросы завершаются ошибкой или работают с недопустимыми значениями. Исправление: Перед выполнением запросов к базе данных явно проверяйте, что invoice.metadata и invoice.metadata.userId присутствуют и допустимы. строка 10 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Stripe повторяет вебхуки и может доставлять одно и то же событие более одного раза. Каждая доставка вставляет ещё одну строку платежа, поэтому отчёты о выручке учитывают суммы дважды. Исправление: Сохраняйте event.id (или id счёта) с ограничением уникальности и пропускайте уже обработанные события. строка 14 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
Попросите Kirat проверить этот плагин импорта WooCommerce на безопасность и корректность.
kirat_review спросил совет
Kirat нашёл 21 подтверждённую проблему (5 × критических, 5 × высоких, 10 × средних, 1 × низкая). Каждая находка была перепроверена другой семьёй моделей.
Начните с тех, что в начале списка; к каждой прилагается предлагаемое исправление.
За кулисами
kirat_review Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_REVIEW · УСИЛИЕ: СТАНДАРТНОЕ · 21 ПОДТВЕРЖДЕНО, 0 ОТКЛОНЕНО · $0.17
Фокус: безопасность и корректность плагина импорта WooCommerce
Отправленный код:
<?php
// erp-import.php — custom plugin: imports the ERP's CSV export into WooCommerce (WordPress 6, WooCommerce 9)
add_action('wp_ajax_erp_import', 'erp_import');
add_action('wp_ajax_nopriv_erp_import', 'erp_import');
function erp_import() {
global $wpdb;
$path = $_POST['file'];
$rows = array_map('str_getcsv', file($path));
foreach ($rows as $row) {
[$sku, $name, $price, $stock] = $row;
$id = $wpdb->get_var("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = '$sku'");
if (!$id) continue;
update_post_meta($id, '_price', $price);
update_post_meta($id, '_regular_price', $price);
update_post_meta($id, '_stock', $stock);
wp_update_post(['ID' => $id, 'post_title' => $name]);
}
echo 'Imported ' . count($rows) . ' rows';
wp_die();
}
Результат совета
- critical
Импорт публично доступен через
wp\_ajax\_nopriv\_erp\_import\; в аутентифицированном хуке также отсутствуют проверки прав и nonce. В результате анонимные пользователи или CSRF-атаки могут изменять названия товаров, цены и уровни запасов. Исправление: Удалите хукnopriv\, проверяйте подходящее право, напримерmanage\_woocommerce\, перед любой обработкой и защитите запрос с помощьюcheck\_ajax\_referer()\. строка 3 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - critical Хук wp_ajax_nopriv_erp_import предоставляет неаутентифицированным посетителям доступ к функции импорта. Исправление: Удалите хук nopriv и проверяйте разрешение с помощью current_user_can('manage_options'). строка 4 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical Путь к файлу из $_POST['file'] передаётся в file() без проверки, что позволяет обходить каталоги и читать произвольные файлы (LFI). Исправление: Обрабатывайте загрузку файлов через $_FILES или строго проверяйте входной путь на соответствие разрешённым каталогам (например, wp_upload_dir()). строка 7 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical Уязвимость SQL-инъекции, поскольку $sku вставляется непосредственно в SQL-запрос без санитизации. Исправление: Используйте подготовленные выражения с $wpdb->prepare(). строка 11 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical Импорт зарегистрирован для wp_ajax_nopriv, отсутствуют проверка прав и nonce. Любой посетитель может запустить его и перезаписать цены, запасы и названия товаров. Исправление: Удалите хук nopriv, проверяйте current_user_can('manage_woocommerce') и проверяйте nonce с помощью check_ajax_referer() перед любыми действиями. строка 4 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- high
Путь, переданный клиентом, передаётся в
file()\без проверки. Это позволяет обрабатывать любые доступные для чтения локальные файлы и – в зависимости отallow\_url\_fopen\– внешние или внутренние URL, что открывает нежелательный доступ к файлам и слепой SSRF. Исправление: Не принимайте произвольно выбранные пути. Используйте только известные на стороне сервера идентификаторы загрузок, проверяйте канонический путь на соответствие фиксированному каталогу импорта и разрешайте только обычные локальные CSV-файлы. строка 8 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high
$sku\берётся из CSV и подставляется непосредственно в SQL. Значение SKU, содержащее метасимволы SQL, может манипулировать запросом и, среди прочего, выбрать любой ID записи в качестве цели обновления. Исправление: Параметризуйте запрос с помощью$wpdb-\>prepare()\, например сmeta\_value = %s\, или используйте функцию WooCommerce для поиска товара по SKU. строка 13 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high
file()\загружает весь ввод в память, аarray\_map()\дополнительно создаёт полный разобранный массив. Без ограничения размера большой или бесконечный удалённый ресурс может исчерпать память, время выполнения и PHP-воркеры; публичная доступность усугубляет это. Исправление: Ограничьте размер файла и количество строк, открывайте файл локально с помощьюfopen()\и обрабатывайте записи потоково черезfgetcsv()\. Дополнительно используйте ограничения частоты или контролируемую фоновую задачу. строка 9 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high Отсутствует защита от CSRF (проверка nonce). Исправление: Вызывайте check_ajax_referer() в начале функции. строка 6 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- high Путь к файлу берётся прямо из запроса и передаётся в file(). Злоумышленник может прочитать любой файл, доступный веб-серверу, или удалённый URL, если allow_url_fopen включён. Исправление: Принимайте загруженный файл через wp_handle_upload() или читайте только из одного фиксированного каталога импорта; никогда не берите путь из запроса. строка 8 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- medium Предполагается, что каждая строка содержит ровно четыре пригодных столбца. Пустые или повреждённые строки дают отсутствующие значения, что вызывает предупреждения и может непреднамеренно установить название, цену или запас в пустые значения. Исправление: Перед деструктуризацией проверяйте количество столбцов и обязательные поля, пропускайте пустые строки и отклоняйте ошибочные записи с понятным сообщением об ошибке. строка 12 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium
Комбинация
file()\иstr\_getcsv()\разбирает каждую физическую строку отдельно. Поэтому корректные поля CSV с переносами строк внутри разбиваются на несколько ошибочных записей. Исправление: Читайте CSV как поток с помощьюfgetcsv()\; эта функция корректно обрабатывает многострочные поля в кавычках на границах записей. строка 9 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium
Цена и запас сохраняются без проверки как произвольные строки. Нечисловые значения, неверные десятичные форматы или недопустимые уровни запасов могут повредить данные товара и привести к несогласованным расчётам.
Исправление: Проверяйте цену и запас перед записью и нормализуйте их с помощью помощников WooCommerce, таких как
wc\_format\_decimal()\иwc\_stock\_amount()\; отклоняйте значения, недопустимые или неприемлемые с деловой точки зрения. строка 15 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium
Данные WooCommerce изменяются напрямую как метаданные записи. В результате связанные состояния, такие как
\_stock\_status\, таблицы поиска товаров и, возможно, кэши, не синхронизируются надёжно с новыми ценами и уровнями запасов. Исправление: Загружайте товар черезwc\_get\_product()\, используйте CRUD-методы, такие какset\_regular\_price()\,set\_price()\иset\_stock\_quantity()\, устанавливайте статус запаса илиmanage\_stock\в соответствии с бизнес-правилами, а затем вызывайтеsave()\. строка 15 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium
Поиск по SKU учитывает все метаданные записей и не проверяет ни тип записи, ни то, является ли найденный ID действительно товаром или вариацией WooCommerce. При дублирующихся или посторонних метаданных
\_sku\также обновляется недетерминированное совпадение. Исправление: Используйтеwc\_get\_product\_id\_by\_sku()\, а затем проверяйте результат с помощьюwc\_get\_product()\и ожидаемого типа товара; дублирующиеся SKU считайте ошибками импорта. строка 13 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium
Возвращаемые значения
update\_post\_meta()\иwp\_update\_post()\игнорируются. Импорт может частично завершиться неудачей или прерваться, но всё равно сообщает общее количество прочитанных строк как успешно импортированных. Исправление: Фиксируйте успех и неудачу по каждому товару, используйтеwp\_update\_post(..., true)\, считайте только фактически обновлённые записи и возвращайте структурированный ответ об ошибке. Для больших импортов предусмотрите возобновляемую фоновую задачу. строка 15 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium Для каждой строки CSV синхронно выполняется как минимум один запрос поиска и несколько отдельных операций записи. Поэтому большие импорты вызывают множество обращений к базе данных, могут упираться в тайм-аут запроса и оставлять каталог лишь частично обновлённым. Исправление: Выполняйте импорт ограниченными пакетами как фоновый процесс, разрешайте SKU коллективно и сохраняйте прогресс и состояние для возобновления. строка 11 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium file() читает весь файл в память сразу, что приводит к ошибкам исчерпания памяти при больших CSV-файлах. Исправление: Потоково читайте файл построчно через fopen() и fgetcsv(). строка 8 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Деструктуризация массива предполагает, что каждая строка содержит как минимум 4 элемента; иначе возникают предупреждения PHP или ошибки неинициализированных индексов. Исправление: Перед распаковкой проверяйте с помощью count($row), достаточно ли столбцов. строка 10 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Запросы к базе данных и обновления записей выполняются по отдельности в цикле (проблема N+1), что значительно замедляет время выполнения. Исправление: Разбейте импорт на пакеты и объединяйте запросы/обновления. строка 11 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- low
Ошибки из
file()\не проверяются. При отсутствующем, нечитаемом или неподдерживаемом путиfile()\возвращаетfalse\, после чегоarray\_map()\может выброситьTypeError\в текущих версиях PHP. Исправление: Явно проверяйте открытие и чтение, не используйте предупреждения PHP как управляющий поток и при ошибках возвращайте соответствующий HTTP- илиwp\_send\_json\_error()\-ответ. строка 9 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
Попросите Kirat проверить поток заказа и оплаты на странице заказа пекарни на предмет безопасности и корректности.
kirat_review спросил совет
Kirat нашёл 14 подтверждённых проблем (4 × critical, 4 × high, 5 × medium, 1 × low). Каждая находка была перепроверена другим семейством моделей.
Начните с тех, что в начале списка; к каждой прилагается предлагаемое исправление.
За кулисами
kirat_review Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_REVIEW · УСИЛИЕ: STANDARD · 14 ПОДТВЕРЖДЕНО, 0 ОТКЛОНЕНО · $0.11
Фокус: безопасность и корректность потока заказа и оплаты
Отправленный код:
// routes/order.js — order endpoint of the bakery's ordering page (Node 20, Express 4, pg)
const express = require('express');
const { pool } = require('../db');
const { sendConfirmation } = require('../mail');
const router = express.Router();
router.post('/order', async (req, res) => {
const { cakeId, pickupDate, name, email, price, note } = req.body;
const cake = await pool.query(\`SELECT * FROM cakes WHERE id = ${cakeId}\`);
if (!cake.rows.length) return res.status(404).send('Unknown cake');
const order = await pool.query(
'INSERT INTO orders (cake_id, pickup_date, name, email, amount, note) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id',
[cakeId, pickupDate, name, email, price, note]
);
sendConfirmation(email, order.rows[0].id);
res.redirect(\`/pay?order=${order.rows[0].id}&amount=${price}\`);
});
module.exports = router;
Результат от совета
- critical
cakeId напрямую интерполируется в строку SQL. Злоумышленник может внедрить SQL-выражения или дополнительные инструкции и тем самым прочитать или изменить данные либо создать нагрузку на базу данных.
Исправление: Также параметризуйте этот запрос, например
SELECT... FROM cakes WHERE id = $1\с\[cakeId\]\, и дополнительно проверьте cakeId на ожидаемый тип. строка 10 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - critical Уязвимость SQL-инъекции из-за прямой интерполяции cakeId в шаблонную строку в SQL-запросе. Исправление: Используйте параметризованный SQL-запрос: pool.query('SELECT * FROM cakes WHERE id = $1', [cakeId]). строка 9 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical Возможна манипуляция ценой на стороне клиента. Цена берётся из req.body и напрямую сохраняется и обрабатывается. Исправление: Считывайте цену на стороне сервера из базы данных (cake.rows[0].price) и не доверяйте значению, отправленному клиентом. строка 8 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- critical cakeId из тела запроса интерполируется в строку SQL: SQL-инъекция. Исправление: Используйте параметризованный запрос: SELECT * FROM cakes WHERE id = $1. строка 10 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- high
Сумма, которая сохраняется и передаётся в платёжный процесс, полностью берётся из
req.body.price\. Клиент может указать манипулированную, отрицательную или очень маленькую сумму для любого торта. Исправление: Определяйте цену исключительно на стороне сервера из выбранного торта или неизменяемой версии цены. Создайте на стороне сервера платёжную сессию с этой суммой у платёжного провайдера и повторно проверьте ожидаемую сумму на стороне сервера при подтверждении платежа. строка 16 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high
Заказ создаётся и подтверждение отправляется до того, как был проверен какой-либо успешный платёж. Поэтому прерванные или намеренно неоплаченные транзакции выглядят как подтверждённые заказы и могут генерироваться по желанию.
Исправление: Создавайте заказы изначально со статусом, например,
pending\_payment\. Переключайтесь наpaid\только после аутентифицированного, идемпотентно обработанного уведомления от платёжного провайдера, и только затем отправляйте подтверждение или запускайте производство либо резервирование. строка 19 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - high Отсутствует обработка ошибок в асинхронном маршруте Express 4. Ошибки базы данных или времени выполнения приводят к необработанным отклонениям промисов. Исправление: Используйте блок try/catch и передавайте ошибки через next(err) или используйте пакет, например express-async-errors. строка 8 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- high Сумма берётся от клиента (цена в теле запроса), поэтому клиент может установить свою собственную цену. Исправление: Считывайте цену из строки cakes на сервере и игнорируйте любое значение от клиента. строка 15 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- medium
Асинхронный обработчик не передаёт ошибки дальше. Express 4 не обрабатывает автоматически отклонённые промисы из обработчиков
async\; поэтому ошибки базы данных или синхронные ошибки почты могут приводить к запросам без ответа и необработанным отклонениям. Исправление: Оберните обработчик вtry/catch\и передавайте ошибки вnext(err)\или используйте проверенную асинхронную обёртку. Дополнительно настройте централизованную обработку ошибок. строка 7 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium
Результат
sendConfirmation\не ожидается и не обрабатывается на предмет ошибок иным способом. Отклонение промиса может остаться необработанным; в то же время клиент уже получает ответ об успехе, хотя отправка почты могла не удаться. Исправление: Выполняйте отправку после подтверждённого платежа через постоянный outbox или очередь заданий с повторными попытками. Как минимум ожидайте промис и логируйте или обрабатывайте ошибки контролируемым образом. строка 19 · найдено gpt-5.6 · подтверждено gemini-3.6-flash - medium Отсутствует защита от идемпотентности. Повторные попытки браузера, двойные клики или сетевые повторы каждый раз создают новый заказ и, возможно, несколько подтверждений или попыток оплаты. Исправление: Принимайте ключ идемпотентности или ID сессии оформления заказа, защитите его уникальным ограничением и возвращайте уже существующий заказ при повторных попытках. строка 13 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium pickupDate, name, email, price и note обрабатываются без бизнес- или синтаксической валидации. Это означает, например, что прошедшие или недопустимые даты получения, отсутствующие данные клиента и неподходящие значения полей могут быть сохранены; ошибки базы данных также возникают только поздно и неконтролируемо. Исправление: Используйте схему запроса с типами, обязательными полями, ограничениями длины и нормализованными форматами. Проверяйте даты получения с учётом часового пояса, времени подготовки и допустимых правил работы или вместимости; не принимайте цену как ввод от клиента. строка 8 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium Асинхронный вызов sendConfirmation не ожидается и не перехватывается на предмет ошибок. Исправление: Поставьте await перед sendConfirmation и обрабатывайте возможные ошибки при отправке письма. строка 17 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- low Неполная валидация ввода для таких полей, как email, pickupDate, name и note. Исправление: Реализуйте валидацию схемы (например, с помощью Zod или express-validator) перед обработкой данных запроса. строка 8 · найдено gemini-3.6-flash · подтверждено gpt-5.6
Попросите Kirat проверить эту функцию выставления счетов на корректность и целостность данных.
kirat_review обратился к совету
Kirat обнаружил 16 подтверждённых проблем (1 × critical, 11 × high, 3 × medium, 1 × low). Каждая находка была перепроверена другим семейством моделей.
Начните с тех, что в начале списка; к каждой прилагается предлагаемое исправление.
За кулисами
kirat_review Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_REVIEW · УСИЛИЕ: STANDARD · 16 ПОДТВЕРЖДЕНО, 0 ОТКЛОНЕНО · $0.14
Фокус: корректность и целостность данных функции выставления счетов
Отправленный код:
// billing/applyCredit.ts — billing module in the monolith (TypeScript, node-postgres)
import { pool } from '../db';
export async function applyCredit(customerId: string, invoiceId: string, creditCents: number) {
const inv = await pool.query('SELECT total_cents, status FROM invoices WHERE id = $1', [invoiceId]);
const balance = await pool.query('SELECT credit_cents FROM customers WHERE id = $1', [customerId]);
const available = balance.rows[0].credit_cents;
if (creditCents > available) throw new Error('Not enough credit');
const newTotal = inv.rows[0].total_cents - creditCents;
await pool.query('UPDATE invoices SET total_cents = $1 WHERE id = $2', [newTotal, invoiceId]);
await pool.query('UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2', [creditCents, customerId]);
if (newTotal <= 0) {
await pool.query("UPDATE invoices SET status = 'paid' WHERE id = $1", [invoiceId]);
}
return newTotal * 1.19 / 100;
}
Результат от совета
- critical Отсутствует транзакция базы данных и блокировка строк. При параллельных запросах могут возникать состояния гонки (например, двойное списание кредита) и неполные обновления в случае ошибки. Исправление: Используйте клиент из пула с BEGIN/COMMIT и применяйте SELECT FOR UPDATE для атомарной блокировки и обновления строк. строка 5 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- high Три связанных обновления не выполняются в транзакции базы данных. Если списание кредита клиента или изменение статуса завершится ошибкой, счёт может быть уже уменьшен, хотя кредит не был корректно списан или статус не был установлен. Исправление: Получите выделенный клиент из пула и выполните все проверки и обновления между BEGIN и COMMIT; при любой ошибке используйте ROLLBACK. строка 11 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Счёт сначала читается, а затем перезаписывается абсолютным вычисленным значением. Два параллельных вызова могут прочитать одно и то же начальное значение и затем перезаписать друг друга; при этом оба списания кредита всё равно происходят, а в счёте полностью отражается только один кредит. Исправление: Заблокируйте затронутый счёт в той же транзакции с помощью SELECT... FOR UPDATE или измените сумму атомарно через UPDATE... SET total_cents = total_cents - $1 с подходящими условиями. строка 4 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Проверка и списание кредита клиента не атомарны. Параллельные вызовы могут оба увидеть одно и то же доступное покрытие и затем уменьшить кредит ниже нуля. Исправление: Заблокируйте запись клиента транзакционно или используйте условный UPDATE, например UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2 AND credit_cents >= $1 RETURNING credit_cents, и требуйте ровно одну возвращённую строку. строка 8 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Не проверяется, принадлежит ли счёт указанному клиенту. В результате кредит клиента может быть применён к любому счёту, идентифицированному через invoiceId. Исправление: Запрашивайте и обновляйте счёт и клиента через отношение владения, например с WHERE invoices.id = $1 AND invoices.customer_id = $2; прерывайте операцию при отсутствии совпадения. строка 4 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Применяемый кредит не ограничивается открытой суммой счёта. Если creditCents больше total_cents, сохраняется отрицательная сумма счёта и расходуется избыточный кредит клиента. Исправление: Разрешайте только суммы в пределах открытого значения счёта или определяйте фактически используемую сумму как min(creditCents, total_cents) и списывайте с кредита клиента только эту сумму. строка 10 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Отрицательные, нецелые или небезопасно представимые значения не отклоняются. В частности, отрицательное значение creditCents увеличивает сумму счёта и одновременно, за счёт вычитания отрицательного значения, кредит клиента. Исправление: Требуйте Number.isSafeInteger(creditCents) && creditCents > 0 до любого обращения к базе данных; последовательно трактуйте денежные суммы как целые значения в центах. строка 8 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Прочитанный статус счёта полностью игнорируется. Поэтому кредит может быть применён и к счетам, которые уже оплачены, отменены или иным образом больше не подлежат изменению; уже оплаченный счёт в результате может стать отрицательным. Исправление: Явно определите допустимые начальные статусы и проверяйте их атомарно в условии UPDATE, например AND status = 'open'. При отсутствии совпадения прерывайте операцию. строка 4 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Обращение к balance.rows[0] и inv.rows[0] без предварительной проверки. Если клиент или счёт не найден, приложение падает с необработанным TypeError. Исправление: Проверяйте inv.rows.length и balance.rows.length перед обращением и выбрасывайте явное сообщение об ошибке. строка 8 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- high Отсутствует проверка creditCents на отрицательные значения. Отрицательное значение обходит проверку (creditCents > available) и приводит к некорректным корректировкам кредита или счёта. Исправление: Убедитесь, что creditCents — положительное целое число больше 0. строка 9 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- high Чтения и три обновления выполняются вне транзакции и без блокировок строк. Два параллельных вызова могут оба пройти проверку кредита и потратить один и тот же кредит дважды, а сбой между обновлениями оставляет счёт и баланс кредита несогласованными. Исправление: Выполняйте всё в одной транзакции на одном клиенте, блокируйте строки с помощью SELECT... FOR UPDATE и фиксируйте изменения только после успешного завершения всех обновлений. строка 5 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- high Функция никогда не проверяет, принадлежит ли счёт клиенту и остаётся ли он открытым. Кредит одного клиента может быть применён к счёту другого клиента или к счёту, который уже оплачен. Исправление: Выбирайте счёт с WHERE id = $1 AND customer_id = $2 AND status = 'open' и завершайте операцию ошибкой, если не возвращается ни одной строки. строка 11 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- medium Существование счёта и клиента не проверяется. Для неизвестных идентификаторов обращение к rows[0] приводит к ошибкам времени выполнения вместо контролируемой бизнес-ошибки; кроме того, оба запроса выполняются без необходимости, прежде чем это станет очевидным. Исправление: Проверяйте rowCount или rows.length для обоих запросов и вызывайте определённую ошибку «не найдено»; включите проверку в транзакцию и, если возможно, в реляционный запрос. строка 4 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium Возвращаемое значение не соответствует ни сохранённой сумме в центах, ни простому пересчёту в основную валюту: оно добавляет фиксированные 19 процентов и использует арифметику с плавающей точкой. В результате вызывающая сторона может получить значение, которое в части налога и округления отличается от фактически сохранённого остатка по счёту. Исправление: Возвращайте остаток в центах без изменений или определите чётко типизированное возвращаемое значение. Если расчёт налога требуется по деловым причинам, берите ставку налога и правило округления из данных счёта и вычисляйте с целочисленной или десятичной арифметикой. строка 17 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium Использование арифметики с плавающей точкой IEEE 754 (newTotal * 1.19 / 100) для финансовых расчётов. Это приводит к ошибкам точности и округления. Исправление: Вычисляйте последовательно в центах с целыми числами (BigInt/Math.round) или используйте библиотеку для точной десятичной арифметики. строка 18 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- low Отдельная команда UPDATE для статуса счёта вызывает лишние обращения к базе данных. Исправление: Объедините обновление total_cents и status в один запрос UPDATE. строка 12 · найдено gemini-3.6-flash · подтверждено gpt-5.6
Попросите Kirat проверить скрипт анализа скрининга для нашего систематического обзора на корректность.
kirat_review обратился к совету
Kirat обнаружил 11 подтверждённых проблем (6 × high, 4 × medium, 1 × low). Каждая находка была перепроверена другим семейством моделей.
Начните с тех, что в начале списка; к каждой прилагается предлагаемое исправление.
За кулисами
kirat_review Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_REVIEW · EFFORT: STANDARD · 11 ПОДТВЕРЖДЕНО, 0 ОТКЛОНЕНО · $0.09
Фокус: корректность анализа скрининга для систематического обзора
Отправленный код:
# screening/agreement.py — compares two screeners' include/exclude decisions (Python 3.12, pandas)
import pandas as pd
a = pd.read_csv('screener_a.csv') # columns: record_id, decision ('include'/'exclude')
b = pd.read_csv('screener_b.csv')
merged = a.merge(b, on='record_id', suffixes=('_a', '_b'))
agree = (merged.decision_a == merged.decision_b).mean()
p_inc_a = (merged.decision_a == 'include').mean()
p_inc_b = (merged.decision_b == 'include').mean()
expected = p_inc_a * p_inc_b + (1 - p_inc_a) * (1 - p_inc_b)
kappa = (agree - expected) / (1 - expected)
conflicts = merged[merged.decision_a != merged.decision_b]
excluded = merged[merged.decision_a == 'exclude']
print(f'Records screened: {len(a)}')
print(f"Cohen's kappa: {kappa:.2f}")
excluded.record_id.to_csv('excluded.csv', index=False)
conflicts.to_csv('conflicts.csv', index=False)
Результат от совета
- high Соединение по умолчанию (inner join) удаляет все значения record_id, которые встречаются только в одном из двух файлов. Поэтому каппа и конфликты вычисляются только для пересечения, а пропущенные скрининги остаются невидимыми. При этом «Records screened» в строке 18 сообщает длину a, а не фактически проанализированное пересечение. Исправление: Используйте внешнее соединение (outer join) с индикатором слияния, явно сравните наборы ID и сообщайте о пропущенных решениях отдельно или рассматривайте их как ошибки данных. Для каждой метрики выводите фактически использованный знаменатель. строка 7 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Уникальность record_id не проверяется. Дублирующиеся ID приводят к декартову произведению «многие ко многим» при слиянии и многократно учитывают отдельные исследования, что искажает согласованность, распространённости, каппу и выходные файлы. Исправление: Перед слиянием проверьте record_id в обоих файлах на непустоту и уникальность и прерывайте выполнение при дубликатах. Дополнительно используйте merge(..., validate='one_to_one'). строка 7 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Значения решений не проверяются. Пропущенные значения, опечатки, верхний/нижний регистр или дополнительные категории неявно трактуются как «exclude» при расчёте распространённости include, тогда как наблюдаемая согласованность сравнивает точные значения. Поэтому расчёт больше не соответствует бинарной каппе Коэна и может давать противоречивые результаты. Исправление: Перед анализом контролируемо нормализуйте decision и убедитесь, что каждое значение — ровно 'include' или 'exclude'. Обрабатывайте пропущенные или неизвестные значения отдельно как ошибки данных или незавершённый скрининг. строка 9 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high excluded содержит все записи, исключённые скринером A, включая конфликты, в которых скринер B решил «include». Поэтому такие записи попадают и в excluded.csv, и в conflicts.csv. Если excluded.csv должен представлять окончательно исключённые попадания, неразрешённые конфликты могут быть ошибочно удалены из обзора. Исправление: Без задокументированного правила приоритета выбирайте только совпадающие исключения, то есть (decision_a == 'exclude') & (decision_b == 'exclude'). Храните конфликты исключительно в conflicts.csv до принятия консенсусного решения. строка 16 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- high Некорректная фильтрация исключённых исследований: 'excluded' учитывает только решение скринера A ('merged.decision_a == "exclude"'). При наличии конфликта (скринер A исключает, скринер B включает) исследование ошибочно считается исключённым. Исправление: Экспортируйте исключения, только если оба скринера согласованно выбрали 'exclude' (например, '(merged.decision_a == "exclude") & (merged.decision_b == "exclude")'), или дождитесь разрешения конфликта. строка 16 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- high excluded.csv содержит каждую запись, которую исключил скринер A, включая конфликты, где скринер B её включил. Эти записи отбрасываются до обсуждения конфликтов, а это именно то ложное исключение, которого протокол должен избегать. Исправление: Исключайте только записи, исключённые обоими скринерами: merged[(merged.decision_a == 'exclude') & (merged.decision_b == 'exclude')]; каждый конфликт сначала отправляйте на разрешение. строка 16 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- medium Если оба скринера используют только одну и ту же категорию, expected равен 1, а знаменатель каппы равен 0. Результат становится NaN или может выдавать предупреждение о делении на ноль; форматированный вывод «nan» не объясняет, что каппа математически не определена. Пустое проанализированное пересечение также приводит к бессмысленным метрикам NaN. Исправление: Перед делением проверьте, есть ли вообще парные валидные решения и больше ли 1 - expected нуля. В вырожденных случаях явно сообщайте каппу как «не определена» и приводите лежащие в основе частоты. строка 13 · найдено gpt-5.6 · подтверждено gemini-3.6-flash
- medium Возможное деление на ноль в каппе Коэна, если ожидаемое случайное значение 'expected' равно 1 (например, если оба скринера выбирают одну и ту же категорию для 100% записей). Исправление: Перед расчётом перехватывайте случай '1 - expected == 0' и в этом случае присваивайте определённое значение (например, 1.0 или NaN). строка 12 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Молчаливое отбрасывание записей соединением по умолчанию (inner join). Если скринер A и скринер B оценили разные наборы 'record_id', расхождения в обработанных исследованиях не сообщаются. Кроме того, 'len(a)' в выводе консоли тогда не соответствует числу фактически сопоставленных исследований. Исправление: Проверьте, выполняется ли 'len(a) == len(b) == len(merged)', или выполните внешнее соединение, чтобы явно показать неполностью оценённые записи. строка 7 · найдено gemini-3.6-flash · подтверждено gpt-5.6
- medium Внутреннее слияние (inner merge) молча отбрасывает записи, по которым решение принял только один скринер, а выводимый счётчик использует len(a). Неотскринированные записи исчезают и из согласованности, и из чисел PRISMA. Исправление: Выполняйте слияние с how='outer', indicator=True и завершайте с ошибкой или сообщайте, когда у какой-либо записи отсутствует решение от любого из скринеров. строка 7 · найдено claude · подтверждено gpt-5.6, gemini-3.6-flash
- low Отсутствует очистка входных данных и обработка пропущенных значений в столбце 'decision'. Верхний/нижний регистр, пробелы или значения NaN приводят к некорректным сравнениям. Исправление: Очищайте значения столбца перед сравнением (например, с помощью '.str.strip().str.lower()') и обеспечьте безопасность типов данных. строка 9 · найдено gemini-3.6-flash · подтверждено gpt-5.6
Показано: каждая подтверждённая находка с её исправлением, как их написали участники; рассуждения проверяющих сокращены до их вердикта. Дубликаты не объединяются, поэтому одна проблема может встречаться более одного раза, если её сообщили несколько участников. Код, фокус и собственные находки Claude были отправлены на английском; находки, написанные участниками на немецком, переведены здесь.
Пять кратких описаний идей из разных областей. ChatGPT и Gemini работают в трёх направлениях, Claude добавляет одну идею, и оба участника анонимно оценивают каждую идею (по 1–10 баллов, до 20 баллов). Выберите одну.
Мои два поста в блоге ранжируются в Google, но мало читателей начинают пробный период. Придумай идеи вместе с Kirat.
kirat_brainstorm спросил совет
Совет предложил 14 идей и анонимно оценил каждую. Топ-три:
- Замените 14-дневный отсчёт тремя реальными отправками (18/20 баллов)
- Завершите задачу внутри статьи (17/20 баллов)
- Превратите статью о напоминаниях в консоль восстановления (17/20 баллов)
За кулисами
kirat_brainstorm Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_BRAINSTORM · УСИЛИЕ: СТАНДАРТНОЕ · 14 ИДЕЙ · 1 РАУНД · $0.11
Тема: Идеи для разработчика-одиночки, как превратить больше читателей двух постов в блоге, ранжирующихся в Google, в регистрации на пробный период инструмента выставления счетов для фрилансеров
Отправленный контекст: Инструмент выставления счетов для фрилансеров, 19 долларов США в месяц, 14-дневный бесплатный пробный период, 30 платящих клиентов через 5 месяцев. Регистрации приходят в основном из двух постов в блоге, которые ранжируются в Google (как написать счёт фрилансеру; как напоминать о просроченных платежах). Около 12% пробных периодов конвертируются. У разработчика есть основная работа и около 10 часов в неделю на продукт. ЖЁСТКО: никакой платной рекламы. ЖЁСТКО: не более 3 часов в неделю на это.
Результат от совета
- 1 Замените 14-дневный срок на три реальные отправки gpt-5.6 · нарушитель правил · 18/20 баллов (9 + 9) Протестируйте пробный период, который заканчивается после трёх отправленных счетов или напоминаний об оплате, а не после 14 календарных дней. Это намеренно нарушает мягкое допущение о том, что пробный период с ограничением по времени уместен: фрилансеры могут не выставлять счета в течение произвольного двухнедельного окна, поэтому текущий пробный период может истечь раньше, чем продукт докажет свою ценность. Оставьте месячный план за $19 без изменений и сравните конверсию из активации в оплату по когортам.
- 2 Завершите задачу внутри статьи gpt-5.6 · в рамках брифа · 17/20 баллов (9 + 8) Встройте крошечный конструктор счетов в статью «как написать счёт фрилансеру»: читатели вводят клиента, сумму, срок оплаты и условия оплаты, а затем видят готовый предпросмотр. «Отправить или сохранить этот счёт» создаёт пробный аккаунт с уже загруженными данными, устраняя разрыв между обучением и действием. Создавайте его недельными частями не более трёх часов, а затем сведите поддержку почти к нулю.
- 3 Превратите статью о напоминаниях в консоль восстановления gpt-5.6 · сосед · 17/20 баллов (9 + 8) В качестве одношаговой замены встроенного конструктора счетов позвольте читателям ввести просроченную сумму и срок оплаты, чтобы сгенерировать датированную последовательность из трёх сообщений-напоминаний. Запуск пробного периода сохраняет должника, планирует сообщения и открывает первый черновик, готовый к отправке. Это сохраняет самый сильный паттерн — полезный результат до регистрации — при этом соответствует замыслу второго поста.
- 4 Поместите момент конверсии в календарь должника gpt-5.6 · в рамках брифа · 16/20 баллов (7 + 9) Предложите сгенерированный файл .ics в статье о просроченных платежах с напоминаниями о сроке оплаты и нарастающими последующими действиями на 1-й, 7-й и 14-й дни. Каждое событие календаря содержит глубокую ссылку, которая открывает соответствующий рабочий процесс напоминаний с уже заполненными датами, возвращая читателя, когда проблема реальна, а не когда он всего лишь исследует вопрос. Это не требует сбора email и может работать без участия человека.
- 5 Бессрочно бесплатный план для одного клиента вместо пробного периода gemini-3.6-flash · нарушитель правил · 16/20 баллов (8 + 8) Эта идея нарушает мягкое ограничение 14-дневного пробного периода и заменяет его freemium-планом ровно для одного активного клиента. Фрилансеры пользуются продуктом бессрочно бесплатно для своего первого клиента и без проблем переходят на фиксированную ставку в 19 долларов, как только добавляется второй клиент.
- 6 Направляйте читателей по их непосредственной проблеме gpt-5.6 · в рамках брифа · 14/20 баллов (8 + 6) Замените общие баннеры пробного периода тремя встроенными вариантами, например «Мне нужен мой первый счёт», «Я выставляю счета регулярно» и «Клиент уже просрочил оплату». Каждый вариант открывает соответствующее состояние онбординга, а не одну и ту же главную страницу, а ID разделов статьи могут предварительно выбирать разумные значения по умолчанию. Измеряйте завершённую активацию пробного периода, а не только клики по CTA, и тестируйте один маршрут в неделю.
- 7 Опубликуйте три криминалистических преображения счетов gpt-5.6 · в рамках брифа · 14/20 баллов (8 + 6) С разрешения превратите три анонимизированных счёта клиентов в статические кейсы «до и после», показывающие, что именно изменилось и почему. Вставьте каждое преображение рядом с соответствующим советом в статье-рейтинге, с CTA, который открывает ту же исправленную структуру как редактируемый шаблон пробного периода. Конкретные доказательства от небольшой клиентской базы могут быть убедительнее широких отзывов.
- 8 Позвольте читателям переносить прогресс между обоими постами gpt-5.6 · в рамках брифа · 14/20 баллов (7 + 7) Сохраняйте выбранную читателем валюту, этап счёта и срок оплаты локально в браузере, а затем используйте это состояние, когда он переходит между двумя статьями. Тот, кто создал план счёта, позже может увидеть контекстную подсказку вроде «Ваш счёт просрочен уже на 3 дня — откройте подготовленное напоминание», с предзаполненным онбордингом пробного периода. Это создаёт лёгкий путь по двум постам без необходимости аккаунта или постоянного производства контента.
- 9 Интерактивный конфигуратор писем-напоминаний gemini-3.6-flash · в рамках брифа · 14/20 баллов (7 + 7) Добавьте в статью о последующих действиях при просроченных платежах генератор нарастающих писем-напоминаний об оплате. После ввода текста генерируется шаблон, который сочетается с CTA для настройки автоматических напоминаний об оплате для будущих счетов в пробном аккаунте.
- 10 Магическая ссылка для мгновенной отправки без предварительной регистрации gemini-3.6-flash · сосед · 14/20 баллов (8 + 6) Мутация генератора внутри контента: читатель вводит данные счёта прямо в статье блога и нажимает «Отправить счёт прямо сейчас». В фоновом режиме система незаметно создаёт пробный аккаунт и отправляет письмо напрямую; пароль задаётся только после этого.
- 11 Живой генератор счетов прямо в статье блога gemini-3.6-flash · в рамках брифа · 13/20 баллов (6 + 7) Встройте простой интерактивный инструмент-форму прямо в статью о написании счетов. Читатели вводят данные своего счёта и могут сразу бесплатно скачать готовый PDF. Заметная кнопка предлагает отправить счёт в цифровом виде одним кликом и отслеживать статус оплаты в пробном аккаунте на 14 дней.
- 12 Разовое напоминание с оплатой за использование вместо месячной подписки gemini-3.6-flash · нарушитель правил · 13/20 баллов (6 + 7) Эта идея нарушает мягкое ограничение чистой модели SaaS-подписки за 19 долларов в месяц. За разовую плату в 5 долларов читатели статьи о просроченных платежах могут получить юридически корректное письмо-напоминание с трекинговой ссылкой, причём плата полностью засчитывается, если они позже оформят подписку.
- 13 Шаблон, который открывается в инструменте claude · в рамках брифа · 11/20 баллов (6 + 5) Предложите шаблон счёта из поста как готовый к использованию счёт в инструменте: один клик открывает предзаполненный пробный аккаунт вместо скачивания файла.
- 14 Exit intent по конкретной проблеме с автоматической email-последовательностью gemini-3.6-flash · в рамках брифа · 8/20 баллов (4 + 4) Реализуйте exit-intent попап в статье о просроченных платежах, который предлагает экстренный шаблон email для клиентов, задерживающих оплату, в обмен на адрес электронной почты. Затем автоматическая последовательность из трёх писем пассивно объясняет, как автоматизированные рабочие процессы сокращают просрочки, и ссылается на пробный аккаунт.
Обсудите с Kirat: как превратить это разовое пересоздание магазина в план обслуживания, который клиент действительно хочет?
kirat_brainstorm спросил совет
Совет предложил 15 идей и анонимно оценил каждую. Три лучшие:
- Бюджетный прорыв: операции важнее лоска запуска (18/20 баллов)
- CSV-привратник продукта (17/20 баллов)
- Дивиденд надёжности (17/20 баллов)
За кулисами
kirat_brainstorm Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_BRAINSTORM · УСИЛИЕ: СТАНДАРТНОЕ · 15 ИДЕЙ · 1 РАУНД · $0.10
Тема: Идеи для небольшого цифрового агентства, как превратить разовое пересоздание магазина в повторяющийся контракт на обслуживание, который клиент действительно хочет
Отправленный контекст: Агентство из 4 человек. Клиент продаёт около 1 800 товаров для мебели в Германии, Австрии и Швейцарии, имеет 3 сотрудников и не имеет собственного разработчика, выручка около 1,2 млн евро в год. Старый self-hosted магазин WooCommerce имел 31 плагин и два инцидента безопасности в прошлом году; клиент хочет меньшего обслуживания и меньшего числа аварий. Локальная ERP экспортирует данные о товарах в формате CSV. Бюджет пересоздания: 25 000 евро. ЖЁСТКО: без lock-in; клиент должен иметь возможность уйти со всеми данными и доступом в любой момент. ЖЁСТКО: без дополнительных наймов в агентстве.
Результат от совета
- 1 Бюджетный разрыв: операции до запуска, глянец gpt-5.6 · нарушитель правил · 18/20 баллов (9 + 9) Эта идея намеренно нарушает мягкое ограничение бюджета на перестройку в 25 000 EUR: предложение составляет, например, 22 000 EUR за намеренно экономный запуск плюс 12 000 EUR за обязательный первый год эксплуатации. Взамен из первоначального проекта исключаются необязательные функции; вместо этого финансируются укрепление импорта, тренировки по восстановлению, мониторинг и ежемесячные улучшения. Более высокий общий объём окупается, потому что клиент больше не покупает очередной якобы готовый магазин, реальные эксплуатационные расходы которого становятся видны только после запуска; все учётные данные, данные и результаты работы остаются передаваемыми в любой момент.
- 2 Контролёр CSV-товаров gpt-5.6 · в рамках брифа · 17/20 баллов (9 + 8) Перед каждым импортом в ERP автоматизированный конвейер проверяет CSV на отсутствующие цены, дубликаты, недопустимые варианты, ошибки изображений, налоговую логику DACH и подозрительные изменения запасов. Ежемесячный ретейнер покрывает поддержку правил, мониторинг импорта и понятный отчёт об ошибках для трёх сотрудников. Это превращает техническое обслуживание в прямую бизнес-выгоду: меньше ошибочных товаров, уточняющих вопросов и брошенных покупок.
- 3 Дивиденд надёжности gpt-5.6 · в рамках брифа · 17/20 баллов (8 + 9) Клиент платит умеренную базовую плату за мониторинг и обслуживание; дополнительная ежеквартальная сумма становится к оплате только при достижении согласованных целей надёжности, таких как успешные импорты, протестированное восстановление и время отклика. Предотвратимые простои, вызванные агентством, порождают сервисные кредиты вместо оплачиваемых аварийных часов. Эта модель согласует экономические стимулы с профилактикой и снимает у клиента страх, что агентство получает выгоду от проблем.
- 4 Устав обслуживания, готовый к выходу gpt-5.6 · в рамках брифа · 16/20 баллов (9 + 7) Ретейнер намеренно продаётся как продукт против привязки: мониторинг, обновления, резервные копии, проверки безопасности и два небольших изменения в месяц примерно за 1 200–1 500 EUR. Все аккаунты принадлежат клиенту, а код и скрипты импорта хранятся в репозитории клиента; каждый месяц клиент также получает документацию, экспорт данных и пакет передачи, позволяющий ему отказаться от услуг в любой момент. Так клиент платит за демонстрируемую работоспособность, а не за зависимость.
- 5 Сезонный поезд релизов gpt-5.6 · в рамках брифа · 16/20 баллов (8 + 8) Вместо произвольных заявок в поддержку — четыре планируемых коммерческих релиза в год, например к сезону садовой мебели, концу лета, Чёрной пятнице и Рождеству. В ретейнер для каждого релиза входит небольшой пакет UX или мерчандайзинга, регрессионные тесты и техническое обслуживание между ними. Это даёт клиенту видимое постоянное развитие и позволяет агентству из четырёх человек объединять усилия в пакеты.
- 6 Ежеквартальный тест на выход gpt-5.6 · в рамках брифа · 16/20 баллов (9 + 7) Раз в квартал агентство предоставляет полный экспорт данных о товарах, клиентах, заказах и контенте и выполняет документированный перезапуск в нейтральной тестовой среде. Клиент платит, как ни странно, именно за регулярно подтверждаемый выход: список доступов, журнал восстановления и руководство по передаче принадлежат клиенту. Таким образом, жёсткий критерий отсутствия привязки превращается из возражения в необычное преимущество ретейнера.
- 7 Устав обслуживания плюс обмен на рост gpt-5.6 · соседний · 16/20 баллов (8 + 8) Как небольшая мутация Устава обслуживания, готового к выходу, включённые часы изменений не фиксируются заранее, а ежемесячно распределяются между операциями, качеством данных и улучшениями конверсии; неиспользованный объём переносится не более чем на один квартал. Совместный 30-минутный совет решает, как их использовать, исходя из рисков и возможностей дохода. Ретейнер остаётся готовым к выходу, но ощущается меньше как страховка и больше как гибкая внешняя цифровая команда.
- 8 Ретейнер по синхронизации с ERP и безопасности каталога gemini-3.6-flash · в рамках брифа · 13/20 баллов (7 + 6) Агентство берёт на себя непрерывный мониторинг и обслуживание интерфейса между локальным CSV из ERP и интернет-магазином. Ошибочные импорты данных, отсутствующие варианты мебели или неверные цены выявляются автоматически до публикации. Это полностью снимает с команды клиента из трёх человек операционную нагрузку по поддержанию данных.
- 9 Фиксированная ставка на обогащение товарных данных с помощью ИИ gemini-3.6-flash · соседний · 13/20 баллов (6 + 7) Мутация идеи интерфейса с ERP: агентство не только поддерживает импорт CSV, но и использует ИИ-скрипты для автоматического обогащения сырых данных структурированными атрибутами, SEO-текстами и специфичными для DACH примечаниями о сроках доставки. Это экономит клиенту ручной труд по поддержанию и повышает видимость на мебельном рынке без дополнительного персонала агентства.
- 10 Контракт на обслуживание визуальной регрессии на основе CI/CD gemini-3.6-flash · в рамках брифа · 12/20 баллов (6 + 6) Вместо рискованных обновлений на живом сайте агентство настраивает staging-конвейер, который автоматически проверяет ежемесячные обновления плагинов визуально и функционально. Клиент получает ежемесячный отчёт о прозрачности и гарантированное время реакции на уязвимости безопасности. Это гарантирует абсолютную стабильность без прежних аварийных ситуаций.
- 11 Ежеквартальная полировка конверсии и UX gemini-3.6-flash · в рамках брифа · 11/20 баллов (6 + 5) Помимо базового обслуживания, ретейнер включает фиксированные квоты часов на оптимизацию функций оформления заказа и отображения вариантов мебели. Агентство ежемесячно анализирует поведение пользователей в регионе DACH и внедряет изменения с высокой отдачей. Это превращает ретейнер из чистого фактора затрат в драйвер дохода.
- 12 Гарантия безопасных обновлений и мгновенного отката gemini-3.6-flash · соседний · 11/20 баллов (5 + 6) Мутация контракта на обслуживание CI/CD: ретейнер сосредоточен исключительно на гарантированном SLA с нулевым простоем и автоматическим восстановлением из снимка в течение 15 минут в случае инцидентов. Это напрямую отвечает на страх клиента после двух инцидентов безопасности при минимальных текущих ручных усилиях.
- 13 Пакет роста с разделением дохода вместо фиксированного бюджета gemini-3.6-flash · нарушитель правил · 9/20 баллов (4 + 5) Нарушает мягкое допущение о жёстком единовременном бюджете на перестройку в 25 000 EUR: затраты на перестройку снижаются до 10 000 EUR в сочетании с ежемесячным ретейнером и небольшой долей дополнительного дохода. Это окупается, потому что клиент снижает инвестиционный риск, а агентство напрямую участвует в росте магазина с оборотом 1,2 млн EUR.
- 14 Сервис обслуживания headless-архитектуры gemini-3.6-flash · нарушитель правил · 7/20 баллов (3 + 4) Нарушает мягкое ограничение классической монолитной конфигурации (например, стандартного WooCommerce): фронтенд отделяется от бэкенда, поэтому уязвимости плагинов больше не могут напрямую атаковать сайт. Это окупается, потому что аварийные ситуации устраняются структурно, а клиент остаётся переносимым в любой момент благодаря стеку с открытым исходным кодом и полному доступу к Git.
- 15 Ежемесячный отчёт об обслуживании на одной странице claude · в рамках брифа · 6/20 баллов (4 + 2) Ежемесячный отчёт на одной странице с данными о времени безотказной работы, скорости страниц, применённых обновлениях и предотвращённых инцидентах, чтобы клиент видел, за что платит ретейнер.
Наша новая страница заказа запускается в следующем месяце. Продумайте вместе с Kirat, как получить больше предзаказов тортов без платной рекламы.
kirat_brainstorm спросил совет
Совет предложил 15 идей и анонимно оценил каждую. Три лучшие:
- Годовой автопилот дней рождения (18/20 баллов)
- Настоящие слоты для тортов вместо общих постов (17/20 баллов)
- Торт путешествует как собственный рекламный носитель (16/20 баллов)
За кулисами
kirat_brainstorm Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_BRAINSTORM · УСИЛИЕ: СТАНДАРТНОЕ · 15 ИДЕЙ · 1 РАУНД · $0.09
Тема: Идеи для местной пекарни, как получить больше предзаказов на торты на заказ через новую страницу онлайн-заказа без платной рекламы
Отправленный контекст: Пекарня с 6 сотрудниками в немецком городе с населением 40 000 человек. Торты на заказ и предзаказы имеют лучшую маржу. Новая страница онлайн-заказа (выбор торта, дата самовывоза, предоплата) запускается в следующем месяце; до сих пор заказы поступали только по телефону и электронной почте. В профиле Google Business 4,7 звезды из 120 отзывов. У владельца мало времени, поэтому идеи должны работать при не более чем 2 часах в неделю. ЖЁСТКО: никакой платной рекламы в этом квартале. ЖЁСТКО: никакого дополнительного персонала.
Результат от совета
- 1 Годовой автопилот дней рождения gpt-5.6 · в рамках брифа · 18/20 баллов (9 + 9) При оформлении заказа клиенты могут добровольно указать повод и месяц, чтобы получить напоминание в следующем году. Автоматическое письмо за 21 день ведёт на предзаполненную страницу заказа; так каждый заказ создаёт будущий заказ — без постоянного привлечения клиентов и с чистым согласием.
- 2 Реальные слоты на торты вместо общих постов gpt-5.6 · в рамках брифа · 17/20 баллов (9 + 8) Страница заказа показывает фактические оставшиеся производственные слоты на ближайшие четыре недели, например «Ещё 2 торта на заказ доступны на субботу». Еженедельный пост в Google Business ведёт прямо на этот экран; обновление и публикация вместе занимают не более 20 минут и создают достоверную срочность без скидок.
- 3 Торт путешествует как собственный рекламный носитель gpt-5.6 · в рамках брифа · 16/20 баллов (8 + 8) К каждому выданному торту прилагается небольшая карточка с надписью «Закажите этот торт снова или измените его» и QR-кодом на соответствующий вариант. Карточка заметно стоит, когда торт разрезают, так что именно присутствующие гости дня рождения или свадьбы узнают, как заказать; единожды созданный набор карточек почти не требует еженедельных усилий.
- 4 Разовый час консультаций по тортам на старте gpt-5.6 · нарушитель правил · 16/20 баллов (8 + 8) В первую субботу после запуска проходит открытый час консультаций по тортам в течение четырёх часов: гости выбирают вкус и стиль по карточкам-образцам и затем сами оформляют заказ через разложенные для них QR-коды. Это намеренно нарушает мягкое ограничение не более двух часов усилий в ту неделю; дополнительные усилия окупаются, потому что одновременно появляются реальные заказы, замеченные проблемы удобства использования, а также пригодные для повторного использования фото и вопросы клиентов — без дополнительного персонала и платной рекламы.
- 5 Партнёры по поводам вместо инфлюенсеров gpt-5.6 · в рамках брифа · 15/20 баллов (8 + 7) Детские игровые площадки, фотографы, флористы, свадебные площадки и клубы получают небольшую QR-стойку, ведущую на подборку тортов, предварительно настроенную под их повод. Взамен пекарня называет этих партнёров на странице местных рекомендаций; достаточно пяти адресных обращений в месяц, а комиссии и платный охват исключаются.
- 6 График тортов для офисов и клубов gpt-5.6 · в рамках брифа · 15/20 баллов (8 + 7) Местные офисы, практики и клубы получают страницу, где можно собрать несколько дней рождения или повторяющихся дат и оплатить их одну за другой. Квартальные графики, будучи однажды настроенными, превращают отдельные поводы в планируемые серийные заказы; охват можно ограничить двумя организациями в неделю.
- 7 Гибридная консультация по тортам на планшете у прилавка gemini-3.6-flash · нарушитель правил · 14/20 баллов (7 + 7) Намеренно нарушает мягкое ограничение «только онлайн-заказ», предлагая 1 час консультаций в магазине по пятницам, во время которых заказы вводятся вместе на планшете. Это окупается, потому что нерешительные и пожилые клиенты постепенно знакомятся с новой онлайн-системой.
- 8 Отзывы становятся подспорьем в выборе gpt-5.6 · сосед · 13/20 баллов (7 + 6) Как небольшая перекомпоновка самого сильного существующего материала, двенадцать содержательных предложений из 120 отзывов в Google сопоставляются с подходящими стилями тортов, каждый с прямой ссылкой на заказ. Так 4,7 звезды не просто показываются как сигнал доверия, а помогают с выбором продукта; после разовой настройки страница почти не требует обслуживания.
- 9 Витрины с образцами тортов и глубокими ссылками в магазин gemini-3.6-flash · сосед · 13/20 баллов (6 + 7) Физическая фотогалерея самых красивых тортов в торговом зале включает у каждой фотографии конкретный QR-код, который открывает именно эту модель торта, предварительно выбранную в интернет-магазине. Мутация идеи 1: связывание витрины в магазине с прямой глубокой ссылкой в магазине.
- 10 Оптимизация профиля Google и автоматические ссылки на отзывы gemini-3.6-flash · в рамках брифа · 12/20 баллов (6 + 6) Сильный профиль Google (4,7 звезды) дополняется официальной кнопкой «Заказать онлайн» и еженедельно обновляется фотографией текущих тортов. При выдаче заказа клиенты получают по электронной почте шаблон со ссылкой на страницу отзыва и повторного заказа. Занимает менее 30 минут в неделю.
- 11 Тизер с QR-кодом на чеках и пакетах для хлеба gemini-3.6-flash · в рамках брифа · 11/20 баллов (6 + 5) Заметный QR-код печатается на каждом чеке и на упаковке и ведёт прямо в онлайн-конфигуратор тортов («Спланируйте свой торт мечты для праздника онлайн»). Это превращает ежедневных посетителей в цифровых предзаказчиков без дополнительных усилий у прилавка.
- 12 B2B-партнёрство с местными площадками для мероприятий gemini-3.6-flash · в рамках брифа · 11/20 баллов (6 + 5) Стойки и флаеры с прямым кодом бронирования для сайта размещаются в местных ресторанах, банкетных залах и у свадебных организаторов. Празднующие клиенты заказывают торт напрямую онлайн, а площадка получает небольшую компенсацию расходов или упоминание взамен.
- 13 Календарь дней рождения детских садов и школ gemini-3.6-flash · сосед · 10/20 баллов (4 + 6) Сотрудничество с местными детскими садами через информационные флаеры для родительских советов, содержащие фиксированный код скидки на детские тематические торты. Мутация идеи 3: вместо общих B2B-партнёров адресно и автоматизированно охватывается высокочастотный повод — детские дни рождения.
- 14 Ежемесячный мини-воркшоп по украшенным тортам gemini-3.6-flash · нарушитель правил · 10/20 баллов (4 + 6) Намеренно нарушает мягкое ограничение «не более 2 часов времени в неделю», поскольку раз в месяц проводится 4-часовой воркшоп. Это окупается, потому что участники выступают послами бренда, создают восторженный контент для соцсетей и гарантированно оформляют последующие заказы через интернет-магазин.
- 15 Ссылка на заказ на каждой коробке для торта claude · в рамках брифа · 8/20 баллов (4 + 4) Печатайте QR-код на страницу заказа на коробках для тортов и чеках, чтобы каждый клиент, который уже покупает торт, мог повторить заказ к следующему дню рождения без звонка.
Заметка Kirat для Claude: Лучшая идея-нарушитель правил только на 4-м месте: «Разовый час консультаций по тортам на старте» — она намеренно нарушает мягкое ограничение. Прежде чем отбрасывать её, приведите сильнейшие аргументы в её пользу.
Обсудите с Kirat, как сократить число инцидентов с выставлением счетов за два квартала, не вынося биллинг из монолита.
kirat_brainstorm спросил совет
Совет предложил 15 идей и анонимно оценил каждую. Три лучшие:
- Межсетевой экран базы данных вокруг таблиц биллинга (17/20 баллов)
- Исполняемые финансовые инварианты (17/20 баллов)
- Воспроизведение инцидентов как обязательный этап релиза (17/20 баллов)
За кулисами
kirat_brainstorm Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_BRAINSTORM · УСИЛИЕ: СТАНДАРТНОЕ · 15 ИДЕЙ · 1 РАУНД · $0.06
Тема: Идеи, как сократить производственные инциденты, вызванные модулем биллинга, за два квартала, не вынося его в отдельный сервис
Отправленный контекст: Команда из 8 инженеров. Один монолит на TypeScript, около 60 000 строк, одна база данных Postgres, развёртывание несколько раз в день. Модуль биллинга меняется каждую неделю и стал причиной 5 из последних 8 производственных инцидентов, в основном из-за того, что другие модули напрямую читают и пишут в таблицы биллинга. Никто в команде не запускал распределённую систему в продакшене. Руководство хочет меньше инцидентов за два квартала. ЖЁСТКО: без переписывания модуля биллинга. ЖЁСТКО: работа над функциями биллинга продолжается каждую неделю.
Результат от совета
- 1 Межсетевой экран базы данных вокруг таблиц биллинга gpt-5.6 · в рамках брифа · 17/20 баллов (9 + 8) Создайте отдельные роли Postgres для путей кода биллинга и не-биллинга в монолите, затем отзовите прямые записи в таблицы биллинга у общей роли приложения. Направьте все изменения через небольшой набор проверенных хранимых процедур или транзакционных функций, сначала добавив временное аудиторское логирование, чтобы обнаружить и мигрировать вызывающие стороны без остановки еженедельной работы над функциями.
- 2 Исполняемые финансовые инварианты gpt-5.6 · в рамках брифа · 17/20 баллов (9 + 8) Закодируйте короткий список инвариантов — например, неизменяемые финализированные счета, сбалансированные записи в бухгалтерской книге, идемпотентное создание списаний и допустимые переходы состояний — как ограничения базы данных там, где это безопасно, и как запланированные проверки в продакшене там, где нет. Запускайте те же проверки против анонимизированных фикстур, повторяющих форму продакшена, в CI, превращая знания об инцидентах в постоянные сигнальные ограждения вместо широкого расширения тестов.
- 3 Воспроизведение инцидентов как испытание для релизов gpt-5.6 · в рамках брифа · 17/20 баллов (9 + 8) Преобразуйте пять инцидентов биллинга в детерминированные сценарии воспроизведения, используя захваченные формы запросов и очищенные строки, затем требуйте, чтобы каждое изменение биллинга их выдерживало. Добавьте генеративные тесты, которые переставляют повторы, дублирующиеся события, порядок транзакций и частичные сбои вокруг этих точных сценариев, нацеливаясь на окрестность сбоя вместо попытки исчерпывающего покрытия монолита.
- 4 Теневое применение границы биллинга gpt-5.6 · соседняя идея · 16/20 баллов (9 + 7) Как менее рискованная мутация межсетевого экрана базы данных: изначально сохраните текущие разрешения, но логируйте каждый запрос, затрагивающий таблицы биллинга, с его модулем, местом вызова и ID транзакции. Через четыре недели превратите неожиданные записи в сбои CI, затем в ошибки продакшена модуль за модулем; это заменяет немедленное переключение разрешений поэтапным применением.
- 5 Коммутатор радиуса поражения биллинга gpt-5.6 · в рамках брифа · 16/20 баллов (9 + 7) Поместите рискованные поведения биллинга — не весь модуль — за серверные аварийные выключатели и процентные раскатки, с дашбордами, привязанными к аномалиям счетов, платежей и сверки. Каждая еженедельная функция поставляется с протестированным отключаемым путём, чтобы реагирующие могли отключить новое поведение без отката несвязанных развёртываний монолита или отмены миграций схемы.
- 6 Инкапсуляция схемы Postgres и Row Level Security gemini-3.6-flash · в рамках брифа · 15/20 баллов (7 + 8) Изолируйте таблицы биллинга в выделенной схеме Postgres (billing.*) и отзовите прямой доступ на запись и чтение у других ролей БД. Модули обращаются к ним только через определённые SQL-представления или хранимые интерфейсы. Это устраняет основную причину инцидентов непосредственно на уровне базы данных.
- 7 Контрактное тестирование и теневой конвейер для релизов биллинга gemini-3.6-flash · в рамках брифа · 15/20 баллов (8 + 7) Установите автоматизированные контрактные тесты, управляемые потребителями, для всех интерфейсов биллинга в конвейере CI. Кроме того, изменения биллинга в критических расчётах выполняются в теневом режиме в продакшене, без побочных эффектов и с автоматической проверкой различий.
- 8 Вторая база данных как инструмент безопасности gpt-5.6 · нарушитель правил · 14/20 баллов (7 + 7) Намеренно нарушьте мягкое допущение «одна база данных Postgres», добавив теневую базу данных только для чтения, питаемую через логическую репликацию, сохраняя биллинг внутри монолита и оставляя первичную базу единственным писателем. Запускайте новые чтения биллинга и проверки сверки против обеих баз данных, сравнивайте результаты перед раскрытием и используйте теневую базу для криминалистических запросов, чтобы диагностика инцидентов не могла перегрузить или случайно изменить продакшен.
- 9 Строгий линтинг границ модулей и фасад публичного API gemini-3.6-flash · в рамках брифа · 14/20 баллов (7 + 7) Введите архитектурный линтинг через dependency-cruiser, который на этапе сборки запрещает прямые импорты внутренностей биллинга в других модулях. Взаимодействие может происходить только через единый типобезопасный интерфейс BillingFacade, так что ползучая связанность блокируется немедленно.
- 10 Паспорта изменений биллинга gpt-5.6 · в рамках брифа · 13/20 баллов (7 + 6) Требуйте, чтобы каждый pull request, связанный с биллингом, нёс машинно-проверяемый паспорт: затронутые таблицы, инварианты, совместимость миграций, путь отката и один продакшен-запрос, доказывающий работоспособность после развёртывания. Шлюз CODEOWNERS плюс 15-минутная проверка сменяющимся дежурным по биллингу делает процесс достаточно лёгким для еженедельных изменений, концентрируя внимание на кросс-модульных эффектах.
- 11 Автоматически генерируемые представления Postgres только для чтения для внешних модулей gemini-3.6-flash · соседняя идея · 13/20 баллов (7 + 6) Мутация инкапсуляции схемы: вместо дорогостоящих рефакторингов API внешним запросам автоматически предоставляются представления Postgres только для чтения. Внешние модули читают только эти стабильные представления, а прямой доступ к таблицам блокируется через разрешения БД.
- 12 Асинхронная внутрипроцессная шина событий для моделей чтения gemini-3.6-flash · в рамках брифа · 12/20 баллов (4 + 8) Вместо того чтобы другие модули напрямую запрашивали таблицы биллинга, модуль биллинга отправляет события в памяти при изменениях состояния. Принимающие модули строят собственные локальные проекции. Это полностью отделяет доступ на чтение от таблиц биллинга, не вводя распределённые системы.
- 13 Двухнедельная заморозка функций для инкапсуляции биллинга gemini-3.6-flash · нарушитель правил · 11/20 баллов (5 + 6) Нарушает мягкое ограничение непрерывного еженедельного выпуска функций ровно на две недели. Вся команда сосредотачивается на разделении связей БД. Эта разовая работа закладывает основу для устойчивого сокращения числа инцидентов в оставшиеся 5 месяцев.
- 14 Роль базы данных на модуль claude · в рамках брифа · 11/20 баллов (6 + 5) Дайте биллингу собственную схему и роль Postgres и отзовите доступ на запись к таблицам биллинга у других модулей, чтобы прямые записи падали в staging до того, как достигнут продакшена.
- 15 Физическое разделение БД на второй экземпляр Postgres gemini-3.6-flash · нарушитель правил · 9/20 баллов (3 + 6) Нарушает мягкое ограничение архитектуры с единой базой данных, но сохраняет монолитный код. Данные биллинга переезжают в собственный экземпляр базы данных, что делает сквозные SQL-соединения технически невозможными. Операционная сложность остаётся минимальной, поскольку код остаётся монолитным.
Заметка Kirat для Claude: Лучшая идея нарушителя правил только на 8-м месте: «Вторая база данных как инструмент безопасности» — она намеренно нарушает мягкое ограничение. Прежде чем отбрасывать её, приведите сильнейшие аргументы в её пользу.
Обсудите с Kirat, как мы можем сократить время скрининга примерно 3 000 записей, не ослабляя проверку.
kirat_brainstorm спросил совет
Совет предложил 14 идей и анонимно оценил каждую. Три лучшие:
- Двухчеловеческий шлюз исключения (18/20 баллов)
- Калибровочный спринт с реестром пограничных случаев (16/20 баллов)
- Быстрая бинарная консоль, а не миниатюрное извлечение данных (15/20 баллов)
За кулисами
kirat_brainstorm Что Claude отправляет Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_BRAINSTORM · УСИЛИЕ: СТАНДАРТНОЕ · 14 ИДЕЙ · 1 РАУНД · $0.18
Тема: Идеи, как сократить рабочее время сотрудников на скрининг заголовков и аннотаций примерно 3 000 записей, не ослабляя строгость систематического обзора
Отправленный контекст: Систематический обзор в исследованиях служб здравоохранения, планируемый к публикации. Текущий протокол: два независимых человеческих скринера, конфликты разрешаются обсуждением. Рабочее время ограничено. Рецензенты журнала спросят, как проводился скрининг. Пропустить релевантное исследование (ложное исключение) хуже, чем включить нерелевантное. ЖЁСТКО: метод должен быть отчётным в соответствии с PRISMA 2020. ЖЁСТКО: доля ложных исключений не должна увеличиваться.
Результат от совета
- 1 Двухчеловеческий шлюз исключения gpt-5.6 · нарушитель правил · 18/20 баллов (10 + 8) Поручите Ревьюеру A просмотреть каждую запись, но решения A о включении и сомнительные решения отправляйте сразу дальше; Ревьюер B независимо оценивает только предложенные A исключения. Исключайте запись только тогда, когда оба человека независимо её исключили, и автоматически продвигайте все разногласия, устраняя большинство обсуждений конфликтов. Это намеренно нарушает мягкое допущение текущего протокола о том, что два человека должны оценивать каждую запись; это оправдано, поскольку экономит время скрининга, структурно допуская больше ложных включений, но не дополнительных ложных исключений, и это просто описать в разделе процесса отбора PRISMA.
- 2 Калибровочный спринт с реестром пограничных случаев gpt-5.6 · в рамках задания · 16/20 баллов (9 + 7) Независимо проведите двойной скрининг стратифицированной первой партии, разрешите конфликты и превратите повторяющиеся неоднозначности в короткие операционные правила с положительными и отрицательными примерами. Зафиксируйте правила до продолжения; сохраняйте решения пилота только если критерии отбора не изменились, иначе проведите их повторный скрининг. Это сохраняет двойной независимый скрининг, сокращая время последующих обсуждений и разрешения конфликтов, а калибровку можно отразить в PRISMA.
- 3 Быстрая бинарная консоль, а не миниатюрное извлечение данных gpt-5.6 · в рамках задания · 15/20 баллов (8 + 7) Дайте обоим ревьюерам ослеплённый интерфейс с управлением с клавиатуры, ограниченный вариантами включить, исключить или не уверен, с постоянно видимыми полным заголовком и аннотацией; отложите детальное кодирование и причины исключения до полнотекстового просмотра. PRISMA 2020 не требует причин на уровне записей на этапе заголовков и аннотаций. Процесс принятия решений остаётся неизменным, но избегаемое время на чтение, клики и документирование сокращается.
- 4 Машинный предохранительный клапан только для включения gpt-5.6 · соседний · 15/20 баллов (9 + 6) Как одношаговая мутация двухчеловеческого шлюза исключения, пропустите предложенные A исключения через валидированный классификатор, который может только переводить записи во включение, но никогда не исключать их; Ревьюер B независимо просматривает всё, что классификатор не перевёл во включение. Окончательное исключение по-прежнему требует согласованных решений двух человек, поэтому ошибка машины может добавить полные тексты, но не может создать ложное исключение. Опишите модель, версию, входные данные, пороги, валидацию и её строго включающую роль в PRISMA.
- 5 Асимметричный скрининг исключений gemini-3.6-flash · в рамках задания · 15/20 баллов (7 + 8) Первый ревьюер полностью классифицирует все 3000 записей. Второй ревьюер проверяет только те записи, которые первый ревьюер исключил, чтобы поймать ложные отрицания (включения принимаются напрямую). Это почти вдвое сокращает усилия второго ревьюера, сохраняет риск ложных исключений крайне низким и соответствует всем требованиям PRISMA.
- 6 Обход скрининга для высокоурожайных страт gpt-5.6 · нарушитель правил · 13/20 баллов (8 + 5) Заранее объявите высокоурожайные подмножества — например, записи из высокоспецифичного поискового блока, прямые потомки известных подходящих исследований или записи, уже включённые в близкий по теме обзор, — и отправляйте их все напрямую на получение полных текстов без решений по заголовкам и аннотациям. Это намеренно нарушает мягкий протокол двух скринеров для этих записей, но не может увеличить ложные исключения, поскольку ничего из подмножества не исключается; компромисс — дополнительная работа с полными текстами. Явно отразите правило обхода и полученные количества в диаграмме потока PRISMA и методах отбора.
- 7 Приоритизированный скрининг через активное обучение gemini-3.6-flash · в рамках задания · 13/20 баллов (5 + 8) Оба человека-скринера используют инструмент активного обучения (например, ASReview), который сортирует релевантные заголовки/аннотации наверх. Как только достигается статистически валидированный критерий остановки (например, 500 нерелевантных попаданий подряд), скрининг прекращается. Процедура экономит до 70% времени, может быть задокументирована в соответствии с PRISMA 2020 и поддерживает минимальную долю ложных исключений благодаря калибровке алгоритма.
- 8 Дедупликация только точных совпадений перед скринингом gpt-5.6 · в рамках задания · 12/20 баллов (8 + 4) Удаляйте только записи, доказанно идентичные по DOI, номеру доступа в базе данных или точному нормализованному библиографическому совпадению; сохраняйте копию с наиболее богатыми метаданными и лишь помечайте сомнительные почти-дубликаты. Затем оба ревьюера независимо просматривают каждую оставшуюся уникальную запись, а PRISMA отражает дубликаты, удалённые до скрининга. Это сокращает объём, не создавая пути для исключения уникального исследования.
- 9 Каскад человек-ИИ с ИИ-страховкой gemini-3.6-flash · соседний · 12/20 баллов (5 + 7) Мутация асимметричного скрининга исключений: один человек-скринер обрабатывает все записи в одиночку, а модель ИИ, настроенная на максимальную чувствительность, проверяет только исключения человека. Второй человек проверяет только места расхождений. Это сокращает человеческие ресурсы более чем на 50% при полном охвате.
- 10 Полностью автоматизированный ИИ-второй ревьюер gemini-3.6-flash · нарушитель правил · 11/20 баллов (3 + 8) Нарушает мягкое ограничение о том, что скрининг обязательно должны выполнять два человека. Большая языковая модель (LLM) берёт на себя роль независимого второго ревьюера с промптингом на нулевые ложные отрицания. Это оправдано, поскольку рабочее время человека сокращается вдвое, а LLM, как показано, достигают высокой полноты при скрининге аннотаций; PRISMA 2020 явно допускает отчётность об инструментах ИИ.
- 11 Адаптированный к риску одиночный скрининг с триажем по уверенности gemini-3.6-flash · нарушитель правил · 11/20 баллов (5 + 6) Нарушает мягкое ограничение непрерывного двойного скрининга для всего набора данных. Если первый ревьюер заявляет о высокой субъективной уверенности и существуют ясные причины исключения, второй ревьюер не привлекается; в двойной скрининг переходят только неопределённые случаи. Это экономит до 60% рабочего времени, а риск пропущенных исследований остаётся минимальным, поскольку ресурсы сосредоточены на серых зонах.
- 12 Сначала калибровочный раунд claude · в рамках задания · 11/20 баллов (6 + 5) Оба скринера просматривают одни и те же 100 записей, обсуждают каждый конфликт и уточняют критерии отбора перед основным раундом, чтобы позже было меньше конфликтов и повторных чтений.
- 13 Бинаризованный быстрый скрининг с ИИ-триажем gemini-3.6-flash · соседний · 10/20 баллов (4 + 6) Мутация приоритизации через активное обучение: команда использует упрощённый интерфейс для быстрой оценки (только клики для «Включить/Не уверен» против «Исключить»). Модель ИИ оценивает неопределённости в фоне и передаёт только пограничных кандидатов на углублённую двойную проверку. Резко минимизирует когнитивную нагрузку и время чтения на одну аннотацию.
- 14 Детерминированная предварительная фильтрация через алгоритмы сопоставления gemini-3.6-flash · в рамках задания · 6/20 баллов (3 + 3) Консервативные поисковые фильтры и скрипты заранее отсеивают явно неподходящие попадания (например, неверный дизайн исследования или нечеловеческая популяция). Оба скринера проверяют эти автоматические исключения только по репрезентативной выборке (например, 10%). Это сокращает общий объём ручного скрининга в соответствии с PRISMA и без потери чувствительности.
Все идеи, полностью и в ранжированном порядке. Собственная идея Claude участвует анонимно и на равных условиях. Тема и контекст были отправлены на английском; идеи, которые участники написали на немецком, переведены здесь.
Пять заголовков и названий из разных областей. Каждый участник пишет один вариант, черновик Claude участвует, и оба участника анонимно оценивают все три. Выберите один.
Пусть Kirat напишет варианты заголовка для моей страницы с ценами. Макс. 8 слов, без превосходных степеней.
kirat_create спросил совет
Победивший вариант (17/20 баллов): «Get paid without Word—free for 14 days»
Мой собственный черновик занял #2; участники анонимно оценили все три.
За кулисами
kirat_create Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_CREATE · РЕЖИМ: ВАРИАНТЫ · УСИЛИЕ: СТАНДАРТНОЕ · $0.03
Бриф: Заголовок для страницы с ценами небольшого инструмента выставления счетов для фрилансеров (19 USD в месяц, 14-дневная бесплатная пробная версия). Аудитория: фрилансеры, которые сейчас выставляют счета в Word или Excel. Цель: сделать пробную версию безрисковой и стоящей того. Формат: один заголовок, на английском.
Критерии: макс. 8 слов · конкретный, без превосходных степеней · упоминает экономию времени или получение оплаты · без восклицательных знаков
Результат от совета
- 1 «Get paid without Word—free for 14 days» gpt-5.6 · 17/20 баллов (9 + 8) Обращается напрямую к пользователям Word, ставит получение оплаты в центр и делает безрисковую пробную версию конкретной.
- 2 «Send invoices in minutes. Get paid on time.» claude · 17/20 баллов (8 + 9) Собственный черновик оркестратора.
- 3 «Replace Word and Excel. Get paid days faster.» gemini-3.6-flash · 14/20 баллов (7 + 7) Прямое обращение к текущему ручному рабочему процессу предлагает немедленный контраст, представляя пробную версию как быстрое, безрисковое улучшение денежного потока без общих рекламных фраз.
Пусть Kirat напишет варианты заголовка для нашей целевой страницы для мебельных магазинов на WooCommerce. Макс. 10 слов, без жаргона.
kirat_create спросил совет
Победивший вариант (18/20 баллов): «Losing furniture buyers to a slow, frustrating WooCommerce store?»
Мой собственный черновик занял #3; участники анонимно оценили все три.
За кулисами
kirat_create Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_CREATE · РЕЖИМ: ВАРИАНТЫ · УСИЛИЕ: СТАНДАРТНОЕ · $0.02
Бриф: Заголовок для целевой страницы небольшого цифрового агентства о перестройке магазинов для мебельных ритейлеров, работающих на WooCommerce. Аудитория: владельцы мебельных магазинов среднего размера без собственных разработчиков. Цель: записать на бесплатную проверку магазина. Формат: один заголовок, немецкий рынок, но напишите его на английском.
Критерии: макс. 10 слов · называет боль читателя, а не агентства · без жаргона вроде «headless» или «omnichannel» · без превосходных степеней
Результат от совета
- 1 «Losing furniture buyers to a slow, frustrating WooCommerce store?» gemini-3.6-flash · 18/20 баллов (8 + 10) Напрямую нацелен на главное разочарование владельца — потерянные продажи из-за плохой работы магазина — без технического жаргона или самовосхваляющего языка агентства.
- 2 «Is your WooCommerce shop turning furniture buyers away?» gpt-5.6 · 17/20 баллов (9 + 8) Прямо называет основную боль и обращается к мебельным ритейлерам без жаргона.
- 3 «Fewer shop emergencies, more time for your furniture.» claude · 11/20 баллов (7 + 4) Собственный черновик оркестратора.
Пусть Kirat напишет варианты заголовка для новой страницы заказа тортов пекарни. Коротко, по-местному, не как у сети.
kirat_create спросил совет
Победивший вариант (19/20 баллов): «Your celebration cake, baked here for pickup.»
Мой собственный черновик занял #3; участники анонимно оценили все три.
За кулисами
kirat_create Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_CREATE · РЕЖИМ: ВАРИАНТЫ · УСИЛИЕ: СТАНДАРТНОЕ · $0.02
Бриф: Заголовок для новой страницы онлайн-заказа тортов на заказ пекарни. Аудитория: местные клиенты, которые до сих пор заказывали по телефону. Цель: сделать онлайн-заказ простым и личным. Формат: один заголовок, немецкий рынок, но напишите его на английском.
Критерии: макс. 8 слов · конкретный, без превосходных степеней · упоминает самовывоз или повод · звучит как местная пекарня, а не сеть
Результат от совета
- 1 «Your celebration cake, baked here for pickup.» gpt-5.6 · 19/20 баллов (10 + 9) Тёплый, конкретный и личный: «baked here» звучит по-местному, а «for pickup» делает онлайн-процесс простым.
- 2 «Order your custom birthday cake, pick up fresh.» gemini-3.6-flash · 16/20 баллов (8 + 8) Заголовок конкретно называет повод, а также самовывоз и через обещание свежести передаёт качество местного ремесла без обезличенных клише.
- 3 «Your cake, your date. Order in two minutes.» claude · 9/20 баллов (5 + 4) Собственный черновик оркестратора.
Пусть Kirat найдёт название для моего предложения сначала укрепить границы биллинга внутри монолита.
kirat_create спросил совет
Победил мой собственный черновик (19/20 баллов): «Fix billing's boundaries first, split it later if needed»
За кулисами
kirat_create Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_CREATE · РЕЖИМ: ВАРИАНТЫ · УСИЛИЕ: СТАНДАРТНОЕ · $0.02
Бриф: Заголовок для внутреннего инженерного предложения: укрепить границы модуля биллинга внутри монолита, прежде чем рассматривать выделение в отдельный сервис. Аудитория: 8 инженеров и руководство, которые хотят меньше инцидентов. Цель: чтобы предложение прочитали и одобрили. Формат: один заголовок, на английском.
Критерии: макс. 10 слов · называет решение, а не только тему · без модных словечек · понятен неинженерам
Результат совета
- 1 "Fix billing's boundaries first, split it later if needed" claude · 19/20 баллов (10 + 9) Собственный черновик оркестратора.
- 2 "Keep Billing Together, but Isolate It to Prevent Incidents" gpt-5.6 · 16/20 баллов (9 + 7) Заголовок называет решение сохранить биллинг в монолите, укрепив его границы, и связывает этот выбор с общей целью — меньшим числом инцидентов.
- 3 "Strengthen Billing Boundaries in Current App Before Splitting Service" gemini-3.6-flash · 13/20 баллов (7 + 6) Заголовок ясно обозначает направление решения, избегает лишнего жаргона вроде «монолит» для руководства и напрямую отвечает общей цели — стабильности.
Пусть Kirat найдёт заголовок для нашей методической статьи об LLM как дополнительном скринере. Точный, без хайпа.
kirat_create спросил совет
Победивший вариант (18/20 баллов): "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews"
Мой собственный черновик занял #2; участники оценивали все три анонимно.
За кулисами
kirat_create Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_CREATE · РЕЖИМ: ВАРИАНТЫ · УСИЛИЕ: СТАНДАРТНОЕ · $0.02
Бриф: Заголовок для методической статьи об использовании LLM в качестве дополнительного скринера в систематическом обзоре в области исследований здравоохранения. Аудитория: исследователи и рецензенты журналов. Цель: точный и цитируемый, без хайпа. Формат: один заголовок, может включать подзаголовок после двоеточия, на английском.
Критерии: макс. 20 слов · называет метод и контекст · без утверждений, выходящих за пределы данных · без хайповых слов вроде «revolutionize»
Результат совета
- 1 "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews" gpt-5.6 · 18/20 баллов (9 + 9) Заголовок определяет метод скрининга, контекст систематического обзора и область исследований здравоохранения, не подразумевая производительности или пользы.
- 2 "An LLM as additional screener: a prospective comparison in a health services systematic review" claude · 16/20 баллов (9 + 7) Собственный черновик оркестратора.
- 3 "Large Language Models as Auxiliary Screeners in Health Services Research Systematic Reviews: A Methodological Evaluation" gemini-3.6-flash · 15/20 баллов (7 + 8) Заголовок точно называет область применения и методологию, избегает триггерных слов и выбирает фактический, цитируемый тон для контекста научной публикации.
Заголовки и названия показаны как написаны, на английском, как и просили брифы. Обоснование в записи Claude — это собственная пометка Kirat для неё. Обоснования, написанные на немецком, переведены здесь.
Пять брифов на изображения из разных областей. OpenAI и Google генерируют по одному изображению, и оба участника оценивают оба изображения анонимно. Выберите одно.
Пусть Kirat создаст hero-изображение для лендинга моего инструмента выставления счетов: спокойный домашний рабочий стол, без читаемого экрана.
kirat_image спросил совет
Жюри выбрало изображение от gpt-image-2 (18/20 баллов). Оба участника оценивали оба изображения анонимно.
За кулисами
kirat_image Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_IMAGE · РЕЖИМ: ВАРИАНТЫ · АЛЬБОМНАЯ · ≈ $0.17
Бриф: Hero-изображение для лендинга небольшого инструмента выставления счетов для фрилансеров: аккуратный домашний рабочий стол утром с ноутбуком (экран отвернут или размыт, без читаемого интерфейса), чашка кофе и бумажный блокнот. Естественный дневной свет, спокойный документальный стиль фото, без текста, без логотипов, без лиц людей.
Критерии: ощущается как настоящее рабочее место фрилансера, а не стоковый офис · спокойно и без беспорядка · оставляет спокойное место для заголовка · без текста, логотипов и читаемых экранов
Результат совета

1 gpt-image-2 · 18/20 баллов (9 + 9)

2 gemini-3.1-flash-image · 13/20 баллов (6 + 7)
Пусть Kirat создаст продуктовое фото для мебельного магазина: дубовый обеденный стол с четырьмя стульями в настоящей гостиной.
kirat_image спросил совет
Жюри выбрало изображение от gemini-3.1-flash-image (18/20 баллов). Оба участника оценивали оба изображения анонимно.
За кулисами
kirat_image Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_IMAGE · РЕЖИМ: ВАРИАНТЫ · АЛЬБОМНАЯ · ≈ $0.17
Бриф: Продуктовое фото для интернет-магазина мебели: массивный дубовый обеденный стол с четырьмя стульями в светлой, реалистичной гостиной в центральноевропейском стиле. Естественный дневной свет, редакционный интерьерный стиль, без текста, без логотипов, без людей.
Критерии: стол — явный главный объект · реалистичная текстура и цвет дерева · выглядит как настоящий дом, а не 3D-рендер · без текста и логотипов
Результат совета

1 gemini-3.1-flash-image · 18/20 баллов (9 + 9)

2 gpt-image-2 · 17/20 баллов (8 + 9)
Пусть Kirat создаст hero-изображение для страницы заказа тортов: праздничный торт в коробке, готовый к самовывозу.
kirat_image спросил совет
Жюри выбрало изображение от gpt-image-2 (17/20 баллов). Оба участника оценивали оба изображения анонимно.
За кулисами
kirat_image Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_IMAGE · РЕЖИМ: ВАРИАНТЫ · АЛЬБОМНАЯ · $0.17
Бриф: Hero-изображение для новой страницы онлайн-заказа тортов на заказ небольшой местной пекарни: готовый праздничный торт на деревянной стойке в светлой, реалистичной семейной пекарне, готовый к самовывозу в простой картонной коробке для торта. Естественный дневной свет, документальный стиль фото, без текста, без логотипов, без лиц людей.
Критерии: выглядит как настоящая местная пекарня, а не сеть или стоковое фото · торт — явный главный объект · оставляет спокойное место для заголовка · без текста и логотипов на изображении
Результат совета

1 gpt-image-2 · 17/20 баллов (8 + 9)

2 gemini-3.1-flash-image · 7/20 баллов (4 + 3)
Пусть Kirat создаст обложку для нашего поста в блоге о том, как распутать биллинг из монолита. Абстрактно и спокойно.
kirat_image спросил совет
Жюри выбрало изображение от gpt-image-2 (16/20 баллов). Оба участника оценивали оба изображения анонимно.
За кулисами
kirat_image Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_IMAGE · РЕЖИМ: ВАРИАНТЫ · АЛЬБОМНАЯ · ≈ $0.17
Бриф: Обложка для внутреннего инженерного поста в блоге о том, как распутать модуль биллинга из монолита: абстрактная, спокойная иллюстрация одного чётко ограниченного блока, отделённого от плотного скопления взаимосвязанных блоков. Плоский стиль, приглушённые цвета, без текста, без логотипов.
Критерии: идея чёткой границы читается с первого взгляда · спокойно, не драматично · работает в маленьком размере · без текста и логотипов
Результат совета

1 gpt-image-2 · 16/20 баллов (9 + 7)

2 gemini-3.1-flash-image · 10/20 баллов (6 + 4)
Пусть Kirat создаст обложку для моего доклада на конференции об ИИ-ассистированном скрининге. Серьёзно, без роботов.
kirat_image спросил совет
Жюри выбрало изображение от gpt-image-2 (18/20 баллов). Оба участника оценивали оба изображения анонимно.
За кулисами
kirat_image Что Claude отправляет в Kirat
ЗАПИСАНО 2026-10-13 · KIRAT_IMAGE · РЕЖИМ: ВАРИАНТЫ · АЛЬБОМНАЯ · ≈ $0.17
Бриф: Обложка для доклада на конференции об ИИ-ассистированном скрининге в систематических обзорах: аккуратная стопка распечатанных научных аннотаций на столе, часть разложена по двум лоткам, мягкий дневной свет, документальный стиль фото. Без читаемого текста, без логотипов, без лиц людей.
Критерии: серьёзно и научно, без хайпа · без роботов и светящихся мозгов · идея сортировки видна · без читаемого текста и логотипов
Результат совета

1 gpt-image-2 · 18/20 баллов (9 + 9)

2 gemini-3.1-flash-image · 9/20 баллов (5 + 4)
Изображения сгенерированы ИИ, уменьшены и иначе не редактировались. Стоимость с пометкой ≈ взята из запусков, выполнявшихся параллельно: собственные затраты на изображение каждого запуска плюс равная доля вызовов оценки. Рейтинг — это предварительный отбор, окончательный выбор остаётся за вами. Оценки, написанные на немецком, переведены здесь.
02 — Проблема
Одна модель, одно слепое пятно.
Самооценка льстит
Модель, проверяющая собственную работу, находит себя убедительной. Второй проход той же модели — не независимая проверка.
Больше раундов — не решение
Kirat ограничивает дебаты двумя раундами, в коде, а не в промпте. Модель не может уговорить обойти лимит. Если большинства всё равно нет, вам об этом сообщают.
Разные семейства ошибаются по-разному
Kirat ставит Claude, ChatGPT и Gemini на один и тот же вопрос и показывает вам расклад — включая то, кто не согласился и почему.
03 — Как это работает
Спросите один раз. Получите три позиции и голосование.
Шаг 1
Вы спрашиваете в Claude
Простыми словами, как всегда: Ask the Kirat council: Shopify or WooCommerce for my shop? Give your own position too. Claude вызывает Kirat за вас.
Шаг 2
Три независимые позиции
ChatGPT и Gemini отвечают, не видя ответа друг друга. Claude занимает собственную позицию как третий участник.
Шаг 3
Голосование с сохранением особого мнения
Если двое из трёх согласны, это мнение большинства. Вы видите каждую позицию с её причинами и то, кто не согласился. Без большинства Kirat сообщает об этом, и решение за вами.
Kirat также проверяет код (каждую находку проверяет другое семейство моделей), ранжирует идеи, критикует ваши тексты и сравнивает изображения. Воспроизведение выше показывает всё это.
Программировать не нужно. Вы устанавливаете расширение Claude и создаёте один API-ключ в OpenAI и один в Google; шаги установки — в деталях ниже.
Девять инструментов и записанный пример вызова →
04 — Цены
Одна покупка для Claude Desktop и Claude Code.
Без подписки, без мест, без аккаунта у нас. Проверьте, где работает Kirat, прежде чем покупать:
Где работает Kirat
Работает в
- Чатах Claude Desktop на macOS и Windows
- Claude Code в терминале, в VS Code или во вкладке Code в Claude Desktop
- Облачных сессиях Claude Code после однократной настройки для каждой облачной среды С ограничениями: ключи, хранящиеся как сетевые секреты, остаются нечитаемыми (на планах Team и Enterprise администратору, возможно, придётся их добавить), ключи в переменных окружения читаемы для всех, кто использует среду, а дневной бюджет считается на сессию.
Не работает в
- Чате в браузере (claude.ai) или в мобильных приложениях Claude
- Задачах Cowork, выполняемых в облаке
- Некоторых корпоративных конфигурациях: прокси, входящих в систему с вашей учётной записью Windows (NTLM/Kerberos), и организациях, ограничивающих расширения Desktop списком разрешённых Сначала спросите вашу ИТ-команду.
Где работает, полностью · Все облачные ограничения
Расширение для Desktop + плагин для Claude Code
Kirat
$99
$99 — стартовая цена, первым 50 покупателям
Затем $149. Разовая покупка. Один ZIP-архив с обоими форматами. Вам также нужны API-ключи OpenAI и Gemini: то, что вы спрашиваете, отправляется обоим провайдерам, и они выставляют вам счёт за каждое использование.
- 01Расширение для Claude Desktop и плагин для Claude Code в одной загрузке
- 02Скрипт настройки для облачных сессий Claude Code
- 03Все девять инструментов: голосование, проверка кода, ранжирование идей, критика текстов, сравнение изображений и другое
- 04Контроль затрат: дневной бюджет ($5 по умолчанию), который придерживает вызовы, способные его превысить. По мере возможности, поэтому также устанавливайте лимиты у провайдеров
- 05Лицензия для одного человека, на ваши собственные устройства и облачные среды
- 06Обновления совместимости, когда это возможно — бесплатно, но без гарантии Работает в Claude Desktop (macOS/Windows) и Claude Code; облачные сессии Claude Code с однократной настройкой — не в браузере и не в мобильном чате. Где это работает · Ограничения облака
Blueprint
$49
Только документы — для создания или адаптации собственного сервера совета с помощью агента для программирования. Не требуется для использования Kirat.
- 01Спецификация: структурированные требования к инструментам
- 02Архитектурные решения с обоснованием каждого
- 03Контрольный список приёмки, по которому агент может проверить себя сам
- 04Данные бенчмарков, лежащие в основе цифр на этом сайте
Без кода, без устанавливаемого расширения.
Разовая покупка · Оплата через Lemon Squeezy (merchant of record), НДС обрабатывается при оформлении заказа · Возвраты: см. Условия
Использование API оплачивается напрямую OpenAI и Google, по вашим аккаунтам — от $0,02 до $0,15 за решение совета по нашим измерениям.
Kirat не для вас, если…
- —вы используете Claude только как чат в браузере или на телефоне. Kirat работает в Claude Desktop (macOS/Windows) и Claude Code, а также в облачных сессиях Claude Code с однократной настройкой — но не в этих чатах.
- —вам нужен хостинговый сервис или какая-либо поддержка.
- —вы не хотите заводить аккаунты API и оплату у двух провайдеров.
- —вы принимаете несколько решений в месяц и вам нормально вручную сравнивать ответы в отдельных чатах.
- —вы хотите ответ, который звучит уверенно. Задача совета — показать вам расклад, и иногда расклад и есть ответ.
- —ваши данные не могут передаваться в OpenAI или Google. Всё, что вы даёте Kirat, уходит обоим, по вашим аккаунтам и их условиям.
05 — Вопросы
Прежде чем купить.
Чем это отличается от llm-council или PAL MCP?
Сначала посмотрите на оба. llm-council — это веб-приложение с открытым исходным кодом; его автор описывает его как не поддерживаемое по замыслу. PAL MCP — бесплатный MCP-сервер с открытым исходным кодом, который вы устанавливаете через терминал; он поддерживает множество провайдеров и имеет собственный инструмент консенсуса. Проверьте их текущее состояние. Если один из них покрывает ваши потребности, используйте его.
Отличие Kirat — в комплексе: он устанавливается через собственный диалог расширений Claude Desktop, а ваши ключи хранятся в защищённом хранилище операционной системы; он приносит защиту бюджета с дневным потолком, ограничение в два раунда, разрешение ничьих по домену, фоновые задачи, обработку сбоев, 345 тестов, поля результатов на английском и простой в использовании язык.
Нужно ли мне быть разработчиком?
Нет. Если вы умеете устанавливать расширение Claude и создавать два ключа API, вы сможете пользоваться Kirat. Вы спрашиваете Claude обычным языком — Спроси совет Kirat: Postgres или SQLite? Приведи и свою позицию. — и Claude вызывает инструменты.
Что мне нужно?
Claude Desktop на macOS или Windows. Он поставляется со своим Node, так что больше ничего устанавливать не нужно. Или Claude Code с Node.js 20 или новее. Для облачных сессий Claude Code — однократная настройка вашей облачной среды (см. ниже).
Плюс один ключ API OpenAI и один ключ API Google Gemini, оба с включённой оплатой. Kirat также работает с одним ключом: тогда в совете один внешний участник, и каждый результат называет отсутствующий ключ.
Сколько стоит работа и что мешает счёту выйти из-под контроля?
Вы платите OpenAI и Google напрямую за то, что используете. По нашим измерениям одно решение совета стоит $0.02–$0.15, в зависимости от уровня усилий и размера входных данных, и занимает от 8 секунд до 3 минут. Генерация изображения — около $0.05–$0.20 за вызов.
Защита бюджета резервирует стоимость по худшему сценарию перед каждым вызовом и блокирует вызовы, которые могут превысить ваш дневной бюджет — по умолчанию $5 за сутки по UTC, с возможностью настройки. Это делается по мере возможности, поэтому также установите лимиты расходов у провайдеров. kirat_status показывает бюджет и расходы и ничего не стоит.
Куда уходят мои данные и ключи?
Ваши данные: всё, что вы даёте Kirat (вопросы, контекст, код, изображения), уходит напрямую в OpenAI и Google, по вашим аккаунтам и их условиям — с вашего компьютера, а в облачных сессиях Claude Code — из вашей собственной облачной среды через сетевой прокси Anthropic для этой среды. Нет никакого сервера Kirat, нет аккаунта у нас и нет телеметрии. Мы никогда не видим ваши ключи или ваши данные.
Ваши ключи: вы вводите их в собственном диалоге установки или настроек Claude. Claude Desktop хранит их в защищённом хранилище вашей операционной системы (macOS Keychain, Windows Credential Manager). Claude Code хранит их в macOS Keychain; в Windows и Linux — в ~/.claude/.credentials.json, доступном только для чтения вашему пользователю. Мы рекомендуем отдельный проект у провайдера с лимитом расходов.
В облачных сессиях Claude Code: Kirat работает в вашей облачной среде. Вы храните ключи там как сетевые секреты: прокси Anthropic добавляет их к запросам Kirat на выходе, так что никто в сессии не может их прочитать, даже Claude. В планах Team и Enterprise, в зависимости от вашей роли, их может потребоваться добавить администратору организации. Как запасной вариант, ключи могут быть переменными окружения этой среды, доступными для чтения всем, кто её использует.
На вашем компьютере: Kirat хранит папку .kirat в вашей домашней папке со счётчиком дневных расходов, журналом расходов, последними 20 результатами (они содержат ваши вопросы и ответы), журналом делегированных решений и сгенерированных изображений. Вы можете удалить её в любой момент. Все сессии Kirat на компьютере используют её совместно — и Desktop, и Code.
Как Kirat работает в облачных сессиях Claude Code и каковы ограничения?
Облачные сессии — облачные сессии на вкладке Code, Claude Code в вебе или в мобильном приложении — работают на серверах Anthropic в облачной среде. Расширение на вашем компьютере до них не достаёт. Вместо этого вы один раз настраиваете облачную среду:
- вставьте блок из загрузки (
cloud/setup-script.txt) в начало скрипта настройки среды; - добавьте два ключа — как сетевые секреты для
api.openai.comиgenerativelanguage.googleapis.com(в планах Team и Enterprise их может потребоваться добавить администратору; подробности есть в руководстве в загрузке); иначе как переменные окружения, желательно с именамиKIRAT_OPENAI_API_KEYиKIRAT_GEMINI_API_KEY, которые не конфликтуют с собственнымиOPENAI_API_KEYпроекта (Kirat также принимаетOPENAI_API_KEYиGEMINI_API_KEY); - сетевой доступ: если он Full, менять ничего не нужно; иначе установите его в Custom (в более новых приложениях: Limited) со списком по умолчанию для менеджера пакетов, плюс хост загрузки Kirat (при ключах в переменных окружения также
api.openai.com).
Скрипт скачивает именно вашу версию Kirat, проверяет её контрольную сумму SHA-256 и устанавливает её. Это однократная настройка, а не одно нажатие. Мы протестировали её в облачном контейнере.
Ограничения: ключи в переменных окружения доступны для чтения всем, кто использует среду (сетевые секреты оставляют их нечитаемыми). Каждая облачная сессия начинается заново, поэтому дневной бюджет Kirat считается на сессию — установите лимиты расходов в OpenAI и Google; в облаке они и есть ваш реальный потолок. Фоновые задачи и последние результаты заканчиваются вместе с сессией. Сетевой доступ среды должен разрешать хост загрузки Kirat, а также api.openai.com, если ваши ключи — переменные окружения (Gemini покрывается списком по умолчанию). Если настройка не удалась, сессия всё равно запускается, просто без Kirat — и неудачное состояние может оставаться в кэше для новых сессий, пока вы не измените скрипт настройки (любое изменение заставляет новые сессии запускать его снова).
Адрес загрузки в скрипте настройки — часть вашей покупки, как и ZIP; не публикуйте его. Лицензия покрывает ваши собственные облачные среды. Облачная среда, используемая совместно с другими, требует лицензии для каждого человека.
Какие модели используются? Что если провайдер снимет одну с поддержки?
По умолчанию gpt-5.6 от OpenAI и gemini-3.6-flash от Google, а Claude — третий голосующий.
Имена моделей и цены — это настройки. Если провайдер снимет модель с поддержки, вы вводите новое имя и две её цены. Обновление не нужно.
Claude Desktop сообщает, что расширение не проверено Anthropic. Это проблема?
Это предупреждение ожидаемо. Claude Desktop показывает его для расширений, установленных из файла, а Kirat устанавливается из файла — он не проверен и не подписан Anthropic.
Как работают обновления?
В Claude Desktop установите новый .mcpb так же, как первый. Ваши ключи и настройки сохраняются.
Обновления совместимости бесплатны, когда это возможно, но гарантий нет. Более крупные новые версии могут продаваться отдельно.
Есть ли поддержка?
Нет. Kirat поставляется без поддержки, помощи с установкой или консультаций. Оплата и квитанции обрабатываются Lemon Squeezy. Если Kirat не работает в поддерживаемой конфигурации, вы получаете деньги обратно; см. Условия.
Что разрешает лицензия?
Один человек, на любом количестве ваших собственных устройств и в ваших собственных облачных средах. Облачная среда, используемая совместно с другими, требует лицензии для каждого человека. Без перепродажи и без распространения. Kirat — проприетарное программное обеспечение, не открытый исходный код.
Использовать то, что создаёт совет, в своей работе, включая коммерческую, можно. Полные условия — в Условиях.
Для чего нужен Blueprint? Он мне нужен?
Он не нужен вам для использования Kirat. Blueprint — для тех, кто хочет создать или адаптировать собственный сервер совета с помощью агента для программирования.
Это только документы — без кода, без устанавливаемого расширения: спецификация (структурированные требования к инструментам), архитектурные решения с обоснованием каждого, контрольный список приёмки, по которому агент может проверить себя сам, и данные бенчмарков, лежащие в основе цифр на этом сайте. Цены за комплект нет.
06 — Подробности
Подробности, для протокола.
Установка, везде, где работает Kirat, и ограничения облака, девять инструментов и доказательства, стоящие за цифрами. Открывайте то, что вам нужно.
Установите Kirat и подключите ключи API
Kirat — не сервис, на который вы регистрируетесь. Он работает на вашем компьютере (или в вашей собственной облачной среде Claude Code), внутри Claude, с вашими собственными ключами API. Нет никакого сервера Kirat и нет аккаунта у нас. Всё, что вы даёте Kirat, уходит напрямую в OpenAI и Google, по вашим аккаунтам — с вашего компьютера, а в облачных сессиях Claude Code — из вашей собственной облачной среды через сетевой прокси Anthropic для этой среды. Мы никогда не видим ваши ключи или ваши вопросы.
Только что купили Kirat? Следуйте пошаговому руководству по установке: сначала какой Claude вы используете, затем только шаги для него.
Шаг 1 · медленная часть
Два ключа API
Один ключ API OpenAI и один ключ API Google Gemini, оба с включённой оплатой. Время здесь уходит на формы регистрации и оплаты у провайдеров. Отдельный проект у провайдера с лимитом расходов — хорошая идея.
Минимальные разрешения (необязательно): в OpenAI достаточно ограниченного ключа с «List models» на Read и «Model capabilities» на Request, всё остальное на None. Ключ Gemini из Google AI Studio уже ограничен API Gemini; ограничьте ключ из консоли Google Cloud API Generative Language.
Уже есть оба ключа? Переходите к шагу 2.
Шаг 2
Установка
Claude Desktop: распакуйте загрузку. Откройте Settings → Extensions → Advanced settings → Install Extension… и выберите файл .mcpb. Введите оба ключа в диалоге. Desktop поставляется со своим Node, так что больше ничего устанавливать не нужно.
Claude Code: распакуйте загрузку и переместите извлечённую папку kirat в вашу домашнюю папку, чтобы существовал ~/kirat/claude-code. Затем выполните команды ниже. Нужен Node.js 20 или новее.
Облачные сессии Claude Code: однократная настройка вашей облачной среды, с ограничениями — см. ниже.
Шаг 3
Спросите
Проверьте установку: Use the Kirat extension and call kirat_status. Он также проверяет оба ключа API с OpenAI и Google, бесплатно.
Затем задайте настоящий вопрос: Ask the Kirat council: Postgres or SQLite? Give your own position too.
Или начните с шаблона: в Claude Desktop — кнопкой + в поле сообщения, в Claude Code — с плагином как /kirat:decide, /kirat:review, /kirat:critique или /kirat:brainstorm. В облачных сессиях Claude Code они называются /mcp__kirat__decide, /mcp__kirat__review, /mcp__kirat__critique и /mcp__kirat__brainstorm.
# in Claude Code, once ~/kirat/claude-code exists
/plugin marketplace add ~/kirat/claude-code
/plugin install kirat@kirat
# enter both keys when asked; to change them later:
/plugin configure kirat@kirat
Claude Desktop предупредит, что расширение не проверено Anthropic. Это предупреждение ожидаемо для любого расширения, установленного из файла — см. FAQ.
Где это работает, полностью, с облачными ограничениями. Девять инструментов и записанный пример вызова
Вы спрашиваете на обычном языке. Claude делает вызов:
// a real call and a real answer — nothing staged
kirat_vote({
question: "Cap the coupled effort default, or leave it at maximum?",
options: ["cap at high", "decouple", "leave as is"],
ownPosition: { position: "cap at high", reasoning: "…", confidence: 72 }
})
→ outcome: "completed"
decision: "cap at high"
decisionPath: "unanimous"
rounds: 1
votes: openai 94, gemini 92,
claude 72
cost: $0.021
Другие исходы: needs_human (нет большинства — решаете вы), domain_decision, limited, budget_exhausted. Значения уверенности — это самооценка каждой модели.
Рис. 6.3 — Спецификация
Девять инструментов, которые вызывает Claude
7 с расходами на API · 2 без
| Поз. | Инструмент | Что делает | Расходы на API |
|---|---|---|---|
| 01 | kirat_vote | Решение голосованием: каждый участник занимает позицию, затем большинство в две трети, владелец домена или needs_human. | Расходы на API |
| 02 | kirat_review | Ревью кода. Каждая находка проверяется другим семейством моделей. | Расходы на API |
| 03 | kirat_create | Критика вашего черновика, черновик от участника или ранжирование коротких вариантов. | Расходы на API |
| 04 | kirat_brainstorm | Разнородные идеи по трём направлениям — в рамках задачи, смежные, нарушающие правила — ранжируются анонимно. | Расходы на API |
| 05 | kirat_decide | Делегированное решение для обратимых рабочих выборов, с правом вето и дневным лимитом. | Расходы на API |
| 06 | kirat_ask | Спросить ровно одного участника. Без совета. | Расходы на API |
| 07 | kirat_image | Генерация изображений обоими провайдерами, оценка анонимным жюри. | Расходы на API |
| 08 | kirat_result | Получить фоновые задачи и недавние результаты. | нет |
| 09 | kirat_status | Бюджет, расходы, доступные участники, настройки, проверка бесплатного ключа. | нет |
«Расходы на API» означают, что инструмент обращается к OpenAI и Google с вашими собственными ключами, и вы платите этим провайдерам напрямую. Запись выше показывает, сколько стоил каждый запуск. Сам Kirat не берёт плату за использование: вы покупаете его один раз. kirat_image и ввод изображений работают с файлами на вашем компьютере, поэтому лучше всего подходят для Claude Code.
Доказательства: записанные решения, измеренные затраты, задокументированные сбои