Kirat - Multi Model AI Council
oficialUma IA oferece uma única linha de raciocínio. Kirat é uma extensão do Claude Desktop e um plugin do Claude Code que adiciona ChatGPT e Gemini como um conselho: posições independentes, uma votação com a dissidência mantida e revisão de código em que cada achado é verificado por uma segunda família de modelos. Traga suas próprias chaves de API. Pago, pagamento único.
O que você pode fazer com Kirat Multi Model AI Council MCP?
- Obtenha uma votação multimodelo sobre uma decisão — Peça ao
kirat_votepara que o conselho avalie uma questão de negócios ou técnica com opções e contexto. - Revise o código em busca de segurança e correção — Use
kirat_reviewpara obter constatações verificadas de forma cruzada, com níveis de severidade e correções sugeridas antes do envio. - Veja a dissidência e o raciocínio por trás de uma decisão — Obtenha as posições completas de cada modelo, incluindo o voto minoritário, com pontuações de confiança e justificativas.
Documentação
01 — Replay
Veja o conselho trabalhar.
Gravações reais das ferramentas do Kirat, feitas em 13 de outubro de 2026 com a versão que você compra. Escolha uma ferramenta e veja o conselho trabalhar: posições independentes, verificações cruzadas, rankings anônimos e a dissidência. Isto é uma reprodução: nada que você clicar aqui chama um modelo, e nada sai desta página. O chat é escrito para fins ilustrativos e apenas reafirma o resultado gravado; o que o Claude enviou ao Kirat e o que voltou são mostrados sem alterações em “Nos bastidores”.
Cinco perguntas de áreas diferentes. Escolha uma.
Deixe o Kirat votar sobre isto: Eu administro sozinho um pequeno SaaS B2B. Devo adicionar um plano gratuito?
kirat_vote perguntou ao conselho
O conselho decidiu (maioria 2:1): Manter apenas o plano pago, não mudar nada.
Meu próprio voto foi a dissidência: “Manter apenas o plano pago, estender o teste para 30 dias”. Ele fica registrado com seu raciocínio, para que você possa avaliá-lo por conta própria.
Nos bastidores
kirat_vote O que o Claude envia ao Kirat
Pergunta: Eu administro sozinho um pequeno SaaS B2B. Devo adicionar um plano gratuito?
GRAVADO EM 2026-10-13 · KIRAT_VOTE · ESFORÇO: PADRÃO · 1 RODADA
Contexto enviado: Desenvolvedor solo. Ferramenta de faturamento para freelancers, USD 19 por mês, teste gratuito de 14 dias, 30 clientes pagantes após 5 meses. Os cadastros vêm principalmente de dois posts de blog que ranqueiam no Google. Cerca de 12% dos testes convertem. O suporte já consome cerca de 5 horas por semana. O desenvolvedor tem um emprego fixo e cerca de 10 horas por semana para o produto.
Opções: Adicionar um plano gratuito · Manter apenas o plano pago, estender o teste para 30 dias · Manter apenas o plano pago, não mudar nada
Resultado do conselho
gpt-5.6 confiança 88
Manter apenas o plano pago, não mudar nadaUm plano gratuito provavelmente aumentaria os usuários não pagantes e a carga de suporte, que já consome metade das 10 horas semanais disponíveis. Uma conversão de 12% nos testes é respeitável, então não há evidência clara de que a duração do teste seja o gargalo. Mantenha o modelo atual e use o tempo escasso para reduzir as necessidades de suporte e ampliar a aquisição além dos dois posts de blog.
gemini-3.6-flash confiança 90
Manter apenas o plano pago, não mudar nadaCom apenas 10 horas por semana disponíveis, o suporte já consome 50% da capacidade. Um plano gratuito aumentaria o volume de suporte de usuários não pagantes sem qualquer controle. Uma taxa de conversão de 12% nos testes já é forte; o gargalo é o tráfego, não o modelo de preços.
claude (terceiro votante) confiança 58
Manter apenas o plano pago, estender o teste para 30 diasUm plano gratuito adiciona principalmente carga de suporte, que já é metade do tempo disponível. O faturamento é mensal, então um teste de 14 dias pode terminar antes que um freelancer envie uma segunda fatura e veja o valor. Um teste de 30 dias cobre um ciclo de cobrança completo sem adicionar usuários gratuitos permanentes.Dissidência, registrada
Decisão Manter apenas o plano pago, não mudar nada Caminho maioria 2:1 Custo $0.015
Deixe o Kirat votar sobre isto: A loja online do nosso cliente precisa ser refeita. Reconstruir em WooCommerce ou migrar para Shopify?
kirat_vote perguntou ao conselho
O conselho decidiu (unânime 3:0): Migrar para Shopify.
Todas as três posições, incluindo a minha, apontam na mesma direção. Cada uma vem com seu raciocínio.
Nos bastidores
kirat_vote O que o Claude envia ao Kirat
Pergunta: A loja online do nosso cliente precisa ser refeita. Reconstruir em WooCommerce ou migrar para Shopify?
GRAVADO EM 2026-10-13 · KIRAT_VOTE · ESFORÇO: PADRÃO · 1 RODADA
Contexto enviado: Somos uma pequena agência digital. O cliente vende cerca de 1.800 produtos de mobiliário na Alemanha, Áustria e Suíça, tem 3 funcionários e nenhum desenvolvedor interno. A loja atual é uma instalação WooCommerce auto-hospedada, com 6 anos, 31 plugins, páginas lentas e dois incidentes de segurança no último ano. A receita é de cerca de EUR 1,2 milhão por ano. O cliente quer menos manutenção e menos emergências; eles usam um ERP local que exporta dados de produtos em CSV. Orçamento para a reconstrução: EUR 25.000.
Opções: Reconstruir em WooCommerce · Migrar para Shopify
Resultado do conselho
gpt-5.6 confiança 89
Migrar para ShopifyO Shopify atende melhor aos objetivos principais do cliente: menos manutenção, menos emergências de segurança e nenhuma necessidade de desenvolvedor interno. Um catálogo de 1.800 produtos e um fluxo de ERP baseado em CSV são gerenciáveis, e o orçamento de EUR 25.000 deve cobrir uma migração disciplinada mais a configuração de impostos, pagamentos e aspectos legais específicos da região DACH. As contrapartidas são custos recorrentes de apps/plataforma, menos flexibilidade no backend e a necessidade de validar o fluxo de importação do ERP e quaisquer variantes específicas de mobiliário antes de se comprometer. Reconstruir em WooCommerce poderia preservar a flexibilidade, mas manteria a responsabilidade por hospedagem, atualizações, compatibilidade de plugins e segurança — exatamente o fardo operacional que o cliente quer reduzir.
gemini-3.6-flash confiança 90
Migrar para ShopifySem desenvolvedor interno, com 3 funcionários e um histórico de incidentes de segurança, o Shopify reduz drasticamente a sobrecarga de manutenção e os riscos de segurança. Um orçamento de €25.000 é suficiente para uma migração para Shopify, incluindo integração de ERP via CSV, enquanto reconstruir em WooCommerce perpetuaria altos custos de manutenção e riscos contínuos de emergência.
claude (terceiro votante) confiança 72
Migrar para ShopifySem desenvolvedor interno, com 31 plugins e dois incidentes de segurança, o problema real do cliente é manutenção, não funcionalidades. O Shopify elimina hospedagem, atualizações e a maior parte do trabalho de segurança; a importação de produtos via CSV do ERP é padrão. A contrapartida são taxas de transação e de apps e menos flexibilidade, o que importa menos do que a estabilidade neste porte.
Decisão Migrar para Shopify Caminho unânime 3:0 Custo $0.015
Deixe o Kirat votar sobre isto: Uma padaria local quer mais encomendas antecipadas de bolos. Onde devem ir primeiro os próximos EUR 3.000?
kirat_vote perguntou ao conselho
O conselho decidiu (unânime 3:0): Uma página de pedidos online adequada.
Todas as três posições, incluindo a minha, apontam na mesma direção. Cada uma vem com seu raciocínio.
Nos bastidores
kirat_vote O que o Claude envia ao Kirat
Pergunta: Uma padaria local quer mais encomendas antecipadas de bolos. Onde devem ir primeiro os próximos EUR 3.000?
GRAVADO EM 2026-10-13 · KIRAT_VOTE · ESFORÇO: PADRÃO · 1 RODADA
Contexto enviado: Padaria com 6 funcionários em uma cidade alemã de 40.000 habitantes. Bolos personalizados e encomendas antecipadas têm a melhor margem. Hoje, os pedidos chegam apenas por telefone e e-mail; o site tem horário de funcionamento e um formulário de contato, nada para fazer pedidos. O Perfil da Empresa no Google tem 4,7 estrelas de 120 avaliações. Nenhuma publicidade paga até agora. Orçamento: EUR 3.000 para o próximo trimestre, o proprietário tem pouco tempo.
Opções: Google Ads · Uma página de pedidos online adequada · Dividir igualmente entre os dois
Resultado do conselho
gpt-5.6 confiança 94
Uma página de pedidos online adequadaResolva o gargalo primeiro: no momento, os clientes interessados não conseguem fazer encomendas antecipadas de forma conveniente ou estruturada. Uma página de pedidos simples e amigável para dispositivos móveis, com seleção de bolos, data de retirada, opções de personalização, preço ou sinal e uma confirmação, aproveita a forte visibilidade local que a padaria já tem e reduz o trabalho por telefone e e-mail. O Google Ads sem um processo de pedidos confiável enviaria tráfego pago para um caminho de conversão fraco. Após algumas semanas de pedidos mensuráveis, um orçamento de anúncios posterior pode ser gasto de forma mais direcionada.
gemini-3.6-flash confiança 90
Uma página de pedidos online adequadaSem um caminho de pedidos digital, os anúncios só criam mais trabalho manual demorado por telefone e e-mail, que o proprietário mal consegue lidar. Além disso, o forte perfil no Google (4,7 estrelas) converterá o tráfego orgânico que já traz muito melhor com uma página de pedidos real, imediatamente, antes que qualquer dinheiro deva ir para anúncios.
claude (terceiro votante) confiança 74
Uma página de pedidos online adequadaAnúncios só compensam se o clique puder se transformar em um pedido. No momento, todo visitante precisa ligar ou enviar e-mail, então o tráfego pago vazaria. Uma página de pedidos com opções de produtos, datas de retirada e pagamento antecipado converte a demanda que o perfil de 4,7 estrelas já traz, e torna os anúncios posteriores mensuráveis.
Decisão Uma página de pedidos online adequada Caminho unânime 3:0 Custo $0.012
Deixe o Kirat votar sobre isto: Extrair nosso módulo de faturamento para um serviço separado agora, ou primeiro reforçar suas fronteiras dentro do monólito?
kirat_vote perguntou ao conselho
O conselho decidiu (unânime 3:0): Primeiro reforçar as fronteiras dentro do monólito.
Todas as três posições, incluindo a minha, apontam na mesma direção. Cada uma vem com seu raciocínio.
Nos bastidores
kirat_vote O que o Claude envia ao Kirat
Pergunta: Extrair nosso módulo de faturamento para um serviço separado agora, ou primeiro reforçar suas fronteiras dentro do monólito?
GRAVADO EM 2026-10-13 · KIRAT_VOTE · ESFORÇO: PADRÃO · 1 RODADA
Contexto enviado: Equipe de 8 engenheiros. Um monólito TypeScript, com cerca de 60.000 linhas, um banco de dados Postgres, implantado várias vezes ao dia. O módulo de faturamento muda toda semana e causou 5 dos últimos 8 incidentes em produção, principalmente porque outros módulos leem e escrevem diretamente nas tabelas de faturamento. Ninguém na equipe já operou um sistema distribuído em produção. A liderança quer menos incidentes dentro de dois trimestres.
Opções: Extrair o faturamento para um serviço agora · Primeiro reforçar as fronteiras dentro do monólito
Resultado do conselho
gpt-5.6 confiança 94
Primeiro reforçar as fronteiras dentro do monólitoOs incidentes são causados principalmente pelo acesso descontrolado ao banco de dados, não pela falta de uma fronteira de rede. Imponha a propriedade do faturamento dentro do monólito: remova o acesso direto às tabelas, exponha uma API interna estreita, adicione permissões de banco de dados ou controles em nível de schema, e adicione testes de contrato e de integração. Isso ataca o modo de falha rapidamente dentro da janela de dois trimestres. Extrair agora adicionaria complexidade de implantação, observabilidade, retentativas, consistência de dados e operações a uma equipe sem experiência em sistemas distribuídos. Uma vez que os caminhos de acesso e a propriedade dos dados estejam explícitos, a extração se torna mais segura e pode ser reconsiderada se o escalonamento ou a implantação independentes ainda forem valiosos.
gemini-3.6-flash confiança 90
Primeiro reforçar as fronteiras dentro do monólitoA principal causa das indisponibilidades é o acesso de outros módulos diretamente às tabelas de faturamento no banco de dados. Reforçar as fronteiras do módulo resolve esse problema diretamente dentro do monólito existente. Como a equipe de 8 pessoas não tem experiência com sistemas distribuídos, extrair o módulo agora criaria novos riscos e colocaria em perigo o objetivo de reduzir incidentes dentro de dois trimestres.
claude (terceiro votante) confiança 76
Primeiro reforçar as fronteiras dentro do monólitoOs incidentes vêm de outros módulos que tocam diretamente nas tabelas de faturamento. Uma divisão em serviços também forçaria essa fronteira, mas adiciona falhas de rede, transações distribuídas e novo trabalho de operações para uma equipe sem essa experiência. Impor uma API de módulo e a propriedade das tabelas dentro do monólito corrige a causa mais rápido, e mantém a opção de extração aberta para depois.
Decisão Primeiro reforçar as fronteiras dentro do monólito Caminho unânime 3:0 Custo $0.014
Deixe o Kirat votar sobre isto: Em nossa revisão sistemática, uma única passagem de triagem por LLM pode substituir o segundo triador humano?
kirat_vote perguntou ao conselho
O conselho decidiu (unânime 3:0): Usar o LLM como triador adicional; humanos resolvem conflitos.
Todas as três posições, incluindo a minha, apontam na mesma direção. Cada uma vem com seu raciocínio.
Nos bastidores
kirat_vote O que o Claude envia ao Kirat
Pergunta: Em nossa revisão sistemática, uma única passagem de triagem por LLM pode substituir o segundo triador humano?
GRAVADO EM 2026-10-13 · KIRAT_VOTE · ESFORÇO: PADRÃO · 1 RODADA
Contexto enviado: Triagem de título e resumo de cerca de 3.000 registros para uma revisão sistemática em pesquisa de serviços de saúde, planejada para publicação. Protocolo atual: dois triadores humanos independentes, conflitos resolvidos por discussão. O tempo da equipe é curto. A revisão segue o PRISMA, e os revisores do periódico perguntarão como a triagem foi feita. Perder um estudo relevante (exclusão falsa) é pior do que incluir um irrelevante. Opções: Sim, substituir o segundo triador humano · Usar o LLM como triador adicional; humanos resolvem conflitos · Não, manter dois triadores humanos e nenhum LLM
Resultado do conselho
gpt-5.6 confiança 94
Usar o LLM como triador adicional; humanos resolvem conflitosUma única passagem do LLM não deve substituir a triagem humana independente quando as exclusões falsas são o principal risco: o desempenho pode variar conforme o tópico, o prompt e a versão do modelo, e os erros podem ser sistemáticos. Use-o para priorizar registros ou sinalizar divergências, mas exija resolução humana dos conflitos e confirmação humana das exclusões. Documente o modelo, a versão, o prompt, a amostra de validação e o fluxo de decisão para o relato PRISMA e a reprodutibilidade.
gemini-3.6-flash confiança 88
Usar o LLM como triador adicional; humanos resolvem conflitosUma abordagem híbrida reduz substancialmente a carga de trabalho humana para 3.000 títulos e resumos, mantendo o rigor metodológico exigido pelo PRISMA e pelos revisores por pares. Como as exclusões falsas devem ser evitadas, ter humanos resolvendo cada discrepância (ou usar uma abordagem de prompting altamente sensível) garante que nenhum estudo relevante seja perdido.
claude (terceiro votante) confiança 70
Usar o LLM como triador adicional; humanos resolvem conflitosAs exclusões falsas são o erro custoso, e a revocação do LLM na triagem varia conforme o tópico e o prompt. Substituir o segundo humano elimina a verificação que captura esses erros e é difícil de defender perante revisores de periódicos. Adicionar o LLM como terceiro triador e resolver conflitos por humanos mantém o protocolo defensável e ainda sinaliza prováveis omissões.
Decisão Usar o LLM como triador adicional; humanos resolvem conflitos Caminho unânime 3:0 Custo $0.019
Registrado em 13 de outubro de 2026 com kirat_vote no nível de esforço padrão; cada sessão levou menos de 20 segundos e custou menos de dois centavos. Perguntas, opções e contexto são exibidos exatamente como enviados, com o raciocínio completo. O Gemini respondeu quatro vezes em alemão e o ChatGPT uma vez; essas respostas estão traduzidas aqui. Na pergunta do nível gratuito, o Claude perdeu a votação por 2:1, e sua objeção permaneceu registrada. Os valores de confiança são a autoavaliação de cada modelo.
Cinco trechos de código de áreas diferentes, cada um enviado exatamente como mostrado. ChatGPT e Gemini revisam em paralelo, o Claude acrescenta duas descobertas próprias, e cada descoberta é verificada pela outra família de modelos. Apenas descobertas confirmadas contam. Escolha uma.
Peça ao Kirat para revisar nosso webhook de pagamento do Stripe quanto a segurança e correção antes de publicarmos.
kirat_review perguntou ao conselho
O Kirat encontrou 14 problemas confirmados (4 × críticos, 4 × altos, 6 × médios). Cada descoberta foi verificada de forma cruzada pela outra família de modelos.
Comece pelos que estão no topo da lista; cada um vem com uma correção sugerida.
Nos bastidores
kirat_review O que o Claude envia ao Kirat
REGISTRADO 2026-10-13 · KIRAT_REVIEW · ESFORÇO: PADRÃO · 14 CONFIRMADOS, 0 REJEITADOS · $0.14
Foco: segurança e correção de um webhook de pagamento
Código enviado:
// 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;
Resultado do conselho
- crítico
O webhook processa o corpo da requisição sem verificar a assinatura do Stripe. Qualquer chamador externo pode, portanto, enviar eventos
invoice.paid\oucustomer.subscription.deleted\forjados e desbloquear ou rebaixar contas de usuários. O parser JSON também descarta o corpo bruto não modificado exigido pela verificação de assinatura do Stripe. Correção: Useexpress.raw({ type: 'application/json' })\para esta rota e chamestripe.webhooks.constructEvent(req.body, req.headers\['stripe-signature'\], webhookSecret)\antes de qualquer processamento. Certifique-se de que nenhum parser JSON global já esteja aplicado a esta rota previamente; rejeite assinaturas inválidas com 400. linha 6 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - crítico Falta de validação da assinatura do webhook do Stripe. Um atacante pode enviar eventos de webhook forjados arbitrários para este endpoint a fim de definir contas como Pro sem autorização ou manipular entradas do banco de dados. Correção: Use stripe.webhooks.constructEvent() com o segredo do webhook do Stripe para verificar a autenticidade e a integridade de cada evento. linha 6 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítico Vulnerabilidade de injeção de SQL devido à concatenação direta de entrada do usuário (event.data.object.customer) na string da consulta SQL. Correção: Use consultas parametrizadas como nas instruções anteriores: db.query('UPDATE users SET plan = $1 WHERE stripe_customer = $2', ['free', event.data.object.customer]). linha 18 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítico O webhook nunca verifica a assinatura do Stripe, e express.json() descarta o corpo bruto necessário para isso. Qualquer pessoa pode enviar um evento invoice.paid falso e atualizar qualquer conta para pro gratuitamente. Correção: Use express.raw({ type: 'application/json' }) nesta rota e construa o evento com stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], endpointSecret); rejeite a requisição em caso de falha. linha 6 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- alto
O ID do cliente é inserido diretamente em uma instrução SQL. Um valor como
' OR 1=1 --\pode manipular a cláusula WHERE e definir todos os usuários para o plano gratuito; dependendo da configuração do banco de dados, outras injeções de SQL são possíveis. Correção: Parametrize totalmente a consulta:UPDATE users SET plan = 'free' WHERE stripe\_customer = $1\com\[event.data.object.customer\]\. Além disso, autentique o evento por meio da assinatura do Stripe. linha 19 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alto
Não há verificação de idempotência. O Stripe entrega webhooks pelo menos uma vez e os repete em caso de timeouts ou erros. O mesmo evento
invoice.paid\pode, portanto, criar entradas de pagamento idênticas várias vezes. Correção: Armazene o ID do evento do Stripe ou o ID da fatura no registro de pagamento, proteja-o com uma restrição UNIQUE e execute o processamento do evento junto com o pagamento de forma atômica como insert/upsert. Confirme eventos já processados com 200 sem repetir a operação de negócio. linha 14 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alto
O handler
async\não encaminha erros. O Express 4 não captura automaticamente promessas rejeitadas de handlers de rota assíncronos. Um erro de banco de dados ou um objetoinvoice.paid\incompleto leva, portanto, a uma rejeição de promessa não tratada e, no Node 20, pode encerrar o processo em vez de retornar uma resposta de erro de forma controlada. Correção: Envolva o handler emtry/catch\e encaminhe os erros paranext(err)\, ou use um wrapper assíncrono. Valide a estrutura de entrada antes de acessá-la e, em erros temporários de processamento, retorne um status 5xx de forma controlada para que o Stripe reenvie. linha 6 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alto Usar express.json() para o endpoint do webhook analisa o corpo como JSON antecipadamente. A verificação de assinatura do Stripe, no entanto, exige o corpo bruto não modificado. Correção: Use express.raw({ type: 'application/json' }) em vez de express.json() para o handler da rota do webhook do Stripe. linha 6 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- médio A atualização do usuário e a entrada de pagamento são duas operações de banco de dados confirmadas de forma independente. Se o INSERT falhar após um UPDATE bem-sucedido, o usuário recebe o plano Pro mesmo que não exista registro de pagamento correspondente. Correção: Execute ambas as operações junto com o marcador de idempotência em uma única transação de banco de dados no mesmo cliente, e faça rollback completo em qualquer erro. linha 12 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- médio
O processamento não leva em conta que o Stripe pode entregar eventos fora da ordem de criação. Um
invoice.paid\mais antigo atrasado pode redefinirpaid\_until\; umcustomer.subscription.deleted\atrasado pode definir de volta parafree\um usuário que desde então foi reativado. Correção: Reconcilie o estado atual da assinatura usando IDs estáveis do Stripe, por exemplo, buscando-o no Stripe, e persista as transições de estado ou o timestamp do último evento processado. No mínimo, atualizepaid\_until\apenas para frente e não aplique eventos de exclusão cegamente ao estado atual do usuário. linha 12 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio
amount\_paid / 100\assume, sem verificar, que a moeda tem exatamente duas casas decimais. Isso está errado para JPY, por exemplo. Além disso, a moeda não é armazenada junto, então o valor no registro de pagamento não tem uma unidade inequívoca. Correção: De preferência, armazene os valores inalterados na menor unidade da moeda junto cominvoice.currency\. Se forem necessárias unidades principais da moeda, faça a conversão com base nos expoentes da respectiva moeda. linha 15 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio Falta de tratamento de exceções em uma rota assíncrona do Express 4. Em um erro de banco de dados ou campos ausentes, isso leva a uma rejeição de promessa não tratada que pode derrubar a aplicação. Correção: Adicione um bloco try-catch e encaminhe os erros para next(err), ou use um utilitário como express-async-handler. linha 6 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- médio Nenhuma validação de que invoice.metadata.userId está presente. Se o campo metadata ou userId estiver ausente ou indefinido, as consultas SQL falham ou operam sobre valores inválidos. Correção: Antes de executar as consultas ao banco de dados, verifique explicitamente se invoice.metadata e invoice.metadata.userId estão presentes e são válidos. linha 10 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- médio O Stripe repete webhooks e pode entregar o mesmo evento mais de uma vez. Cada entrega insere outra linha de pagamento, então os relatórios de receita contam em dobro. Correção: Armazene event.id (ou o id da fatura) com uma restrição única e ignore eventos que já foram processados. linha 14 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
Peça ao Kirat para revisar este plugin de importação do WooCommerce quanto a segurança e correção.
kirat_review perguntou ao conselho
O Kirat encontrou 21 problemas confirmados (5 × críticos, 5 × altos, 10 × médios, 1 × baixo). Cada descoberta foi verificada de forma cruzada pela outra família de modelos.
Comece pelos que estão no topo da lista; cada um vem com uma correção sugerida.
Nos bastidores
kirat_review O que o Claude envia ao Kirat
REGISTRADO 2026-10-13 · KIRAT_REVIEW · ESFORÇO: PADRÃO · 21 CONFIRMADOS, 0 REJEITADOS · $0.17
Foco: segurança e correção de um plugin de importação do WooCommerce
Código enviado:
<?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();
}
Resultado do conselho
- crítico
A importação é acessível publicamente via
wp\_ajax\_nopriv\_erp\_import\; o hook autenticado também não possui verificações de capability e nonce. Como resultado, usuários anônimos ou ataques CSRF podem alterar nomes de produtos, preços e níveis de estoque. Correção: Remova o hooknopriv\, verifique uma capability adequada, comomanage\_woocommerce\, antes de qualquer processamento e proteja a requisição comcheck\_ajax\_referer()\. linha 3 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - crítico O hook wp_ajax_nopriv_erp_import concede a visitantes não autenticados acesso à função de importação. Correção: Remova o hook nopriv e verifique a permissão usando current_user_can('manage_options'). linha 4 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítico O caminho de arquivo de $_POST['file'] é passado para file() sem verificação, o que permite path traversal e leitura arbitrária de arquivos (LFI). Correção: Trate uploads de arquivos via $_FILES ou valide estritamente o caminho de entrada em relação a diretórios permitidos (por exemplo, wp_upload_dir()). linha 7 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítico Vulnerabilidade de SQL injection, pois $sku é inserido diretamente na consulta SQL sem sanitização. Correção: Use prepared statements com $wpdb->prepare(). linha 11 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítico A importação está registrada para wp_ajax_nopriv, e não há verificação de capability nem nonce. Qualquer visitante pode acioná-la e sobrescrever preços, estoque e nomes de produtos. Correção: Remova o hook nopriv, verifique current_user_can('manage_woocommerce') e valide um nonce com check_ajax_referer() antes de fazer qualquer coisa. linha 4 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- alto
O caminho fornecido pelo cliente é passado para
file()\sem verificação. Isso permite que quaisquer arquivos locais legíveis e – dependendo deallow\_url\_fopen\– URLs externas ou internas sejam processados, o que possibilita acesso indesejado a arquivos e SSRF cego. Correção: Não aceite caminhos livremente escolhidos. Use apenas IDs de upload conhecidos no lado do servidor, verifique o caminho canônico em relação a um diretório de importação fixo e permita apenas arquivos CSV locais regulares. linha 8 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alto
$sku\vem do CSV e é interpolado diretamente no SQL. Um valor de SKU contendo metacaracteres SQL pode manipular a consulta e, entre outras coisas, selecionar qualquer ID de post como alvo da atualização. Correção: Parametrize a consulta com$wpdb-\>prepare()\, por exemplo commeta\_value = %s\, ou use a função do WooCommerce para buscar um produto por SKU. linha 13 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alto
file()\carrega toda a entrada na memória, earray\_map()\ainda cria o array completo já parseado. Sem um limite de tamanho, um recurso remoto grande ou infinito pode esgotar memória, tempo de execução e workers do PHP; a acessibilidade pública agrava isso. Correção: Limite o tamanho do arquivo e o número de linhas, abra o arquivo localmente comfopen()\e processe os registros em streaming viafgetcsv()\. Além disso, use limites de taxa ou um job em segundo plano controlado. linha 9 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alto Falta de proteção CSRF (validação de nonce). Correção: Chame check_ajax_referer() no início da função. linha 6 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- alto O caminho do arquivo vem diretamente da requisição e é passado para file(). Um atacante pode ler qualquer arquivo que o servidor web consiga ler, ou uma URL remota se allow_url_fopen estiver ativado. Correção: Aceite um arquivo enviado via wp_handle_upload() ou leia apenas de um diretório de importação fixo; nunca obtenha um caminho a partir da requisição. linha 8 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- médio Assume-se que cada linha tem exatamente quatro colunas utilizáveis. Linhas vazias ou corrompidas geram valores ausentes, o que produz avisos e pode definir involuntariamente nome, preço ou estoque como valores vazios. Correção: Antes da desestruturação, verifique a contagem de colunas e os campos obrigatórios, ignore linhas vazias e rejeite registros defeituosos com uma mensagem de erro clara. linha 12 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- médio
A combinação de
file()\estr\_getcsv()\faz o parse de cada linha física separadamente. Campos CSV válidos com quebras de linha incorporadas são, portanto, divididos em vários registros defeituosos. Correção: Leia o CSV como stream comfgetcsv()\; essa função lida com campos multilinha corretamente entre aspas através dos limites de registro. linha 9 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio
Preço e estoque são armazenados sem verificação como strings arbitrárias. Valores não numéricos, formatos decimais incorretos ou níveis de estoque inadmissíveis podem corromper os dados do produto e levar a cálculos inconsistentes.
Correção: Valide preço e estoque antes de gravar e normalize-os com helpers do WooCommerce, como
wc\_format\_decimal()\ewc\_stock\_amount()\; rejeite valores inválidos ou inadmissíveis do ponto de vista de negócio. linha 15 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio
Os dados do WooCommerce são alterados diretamente como post meta. Como resultado, estados relacionados, como
\_stock\_status\, tabelas de consulta de produtos e possivelmente caches, não são sincronizados de forma confiável com os novos preços e níveis de estoque. Correção: Carregue o produto viawc\_get\_product()\, use os métodos CRUD, comoset\_regular\_price()\,set\_price()\eset\_stock\_quantity()\, defina o status de estoque oumanage\_stock\de acordo com as regras de negócio e então chamesave()\. linha 15 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio
A busca por SKU considera todos os metadados de post e não verifica nem o tipo de post nem se o ID encontrado é realmente um produto ou variação do WooCommerce. Com metadados
\_sku\duplicados ou não relacionados, uma correspondência não determinística também é atualizada. Correção: Usewc\_get\_product\_id\_by\_sku()\e então valide o resultado comwc\_get\_product()\e o tipo de produto esperado; trate SKUs duplicados como erros de importação. linha 13 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio
Os valores de retorno de
update\_post\_meta()\ewp\_update\_post()\são ignorados. A importação pode falhar parcialmente ou abortar, mas ainda relata o número total de linhas lidas como importadas com sucesso. Correção: Registre sucesso e falha por produto, usewp\_update\_post(..., true)\, conte apenas os registros que foram realmente atualizados e retorne uma resposta de erro estruturada. Disponibilize um job em segundo plano retomável para importações grandes. linha 15 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - médio Para cada linha do CSV, pelo menos uma consulta de busca e várias operações de escrita individuais são executadas de forma síncrona. Importações grandes, portanto, causam muitas idas e voltas ao banco de dados, podem atingir um timeout de requisição e deixar para trás um catálogo apenas parcialmente atualizado. Correção: Execute a importação em lotes limitados como processo em segundo plano, resolva SKUs coletivamente e armazene o progresso e o estado de retomada. linha 11 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- médio file() lê o arquivo inteiro na memória de uma vez, o que leva a erros de esgotamento de memória com arquivos CSV grandes. Correção: Faça o stream do arquivo linha por linha via fopen() e fgetcsv(). linha 8 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- médio A desestruturação de array assume que cada linha contém pelo menos 4 elementos; caso contrário, ocorrem avisos do PHP ou erros de índice não inicializado. Correção: Antes de desempacotar, verifique com count($row) se há colunas suficientes. linha 10 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- médio Consultas ao banco de dados e atualizações de posts são executadas individualmente em um loop (problema N+1), o que desacelera consideravelmente o tempo de execução. Correção: Divida a importação em lotes e agrupe consultas/atualizações. linha 11 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- baixo
Erros de
file()\não são verificados. Para um caminho ausente, ilegível ou não suportado,file()\retornafalse\, após o quearray\_map()\pode lançar umTypeError\nas versões atuais do PHP. Correção: Verifique explicitamente a abertura e a leitura, não use avisos do PHP como controle de fluxo e, em caso de erros, retorne uma resposta HTTP ouwp\_send\_json\_error()\apropriada. linha 9 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
Peça ao Kirat para revisar o fluxo de pedido e pagamento da página de pedidos da padaria quanto a segurança e correção.
kirat_review perguntou ao conselho
Kirat encontrou 14 problemas confirmados (4 × crítico, 4 × alto, 5 × médio, 1 × baixo). Cada descoberta foi verificada de forma cruzada pela outra família de modelos.
Comece pelos que estão no topo da lista; cada um vem com uma correção sugerida.
Nos bastidores
kirat_review O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_REVIEW · ESFORÇO: PADRÃO · 14 CONFIRMADOS, 0 REJEITADOS · $0.11
Foco: segurança e correção de um fluxo de pedido e pagamento
Código enviado:
// 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;
Resultado do conselho
- crítica
cakeId é interpolado diretamente na string SQL. Um atacante pode injetar expressões SQL ou instruções adicionais e, assim, ler ou modificar dados, ou sobrecarregar o banco de dados.
Correção: Parametrize também esta consulta, por exemplo
SELECT... FROM cakes WHERE id = $1\com\[cakeId\]\, e verifique adicionalmente o cakeId quanto ao tipo esperado. linha 10 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - crítica Vulnerabilidade de injeção de SQL devido à interpolação direta de cakeId em template string na consulta SQL. Correção: Use uma consulta SQL parametrizada: pool.query('SELECT * FROM cakes WHERE id = $1', [cakeId]). linha 9 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítica É possível manipular o preço no lado do cliente. O preço é obtido de req.body e armazenado e processado diretamente. Correção: Leia o preço no servidor a partir do banco de dados (cake.rows[0].price) e não confie no valor enviado pelo cliente. linha 8 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- crítica cakeId do corpo da requisição é interpolado na string SQL: injeção de SQL. Correção: Use uma consulta parametrizada: SELECT * FROM cakes WHERE id = $1. linha 10 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- alta
O valor que é armazenado e passado ao fluxo de pagamento vem inteiramente de
req.body.price\. Um cliente pode informar um valor manipulado, negativo ou muito pequeno para qualquer bolo. Correção: Determine o preço exclusivamente no servidor a partir do bolo selecionado ou de uma versão de preço imutável. Crie uma sessão de pagamento no servidor com esse valor no provedor de pagamento e verifique novamente o valor esperado no servidor na confirmação do pagamento. linha 16 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alta
O pedido é criado e uma confirmação é enviada antes de qualquer pagamento bem-sucedido ter sido verificado. Transações abortadas ou deliberadamente não pagas aparecem, portanto, como pedidos confirmados e podem ser geradas à vontade.
Correção: Crie pedidos inicialmente com um status como
pending\_payment\. Só mude parapaid\após uma notificação autenticada e processada de forma idempotente do provedor de pagamento, e então envie a confirmação ou dispare a produção ou a reserva. linha 19 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - alta Tratamento de erros ausente em uma rota assíncrona do Express 4. Erros de banco de dados ou de execução levam a rejeições de promise não tratadas. Correção: Use um bloco try/catch e encaminhe erros com next(err), ou use um pacote como express-async-errors. linha 8 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- alta O valor é obtido do cliente (preço no corpo da requisição), então um cliente pode definir seu próprio preço. Correção: Leia o preço da linha de cakes no servidor e ignore qualquer valor do cliente. linha 15 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- média
O handler assíncrono não encaminha erros. O Express 4 não trata automaticamente promises rejeitadas de handlers
async\; erros de banco de dados ou de envio de e-mail síncronos podem, portanto, levar a requisições sem resposta e rejeições não tratadas. Correção: Envolva o handler emtry/catch\e encaminhe erros paranext(err)\, ou use um wrapper assíncrono consolidado. Além disso, configure um tratamento central de erros. linha 7 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - média
O resultado de
sendConfirmation\não é aguardado nem tratado de outra forma para erros. Uma rejeição de promise pode permanecer não tratada; ao mesmo tempo, o cliente já recebe uma resposta de sucesso mesmo que o envio do e-mail possa ter falhado. Correção: Realize o envio após o pagamento confirmado por meio de uma outbox persistente ou fila de jobs com novas tentativas. No mínimo, aguarde a promise e registre ou trate erros de forma controlada. linha 19 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash - média Não há proteção de idempotência. Novas tentativas do navegador, cliques duplos ou novas tentativas de rede criam cada um um novo pedido e possivelmente múltiplas confirmações ou tentativas de pagamento. Correção: Aceite uma chave de idempotência ou ID de sessão de checkout, proteja-a com uma restrição de unicidade e retorne o pedido já existente em novas tentativas. linha 13 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- média pickupDate, name, email, price e note são processados sem validação de negócio ou sintática. Isso significa, por exemplo, que datas de retirada passadas ou inválidas, dados de cliente ausentes e valores de campo inadequados podem ser armazenados; erros de banco de dados também só ocorrem tardiamente e de forma descontrolada. Correção: Use um schema de requisição com tipos, campos obrigatórios, limites de comprimento e formatos normalizados. Verifique as datas de retirada em relação a fuso horário, prazo mínimo e regras permitidas de horário de funcionamento ou capacidade; não aceite o preço como entrada do cliente. linha 8 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- média A chamada assíncrona para sendConfirmation não é aguardada nem tem seus erros capturados. Correção: Coloque await antes de sendConfirmation e trate possíveis erros no envio do e-mail. linha 17 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- baixa Validação de entrada incompleta para campos como email, pickupDate, name e note. Correção: Implemente validação de schema (por exemplo, com Zod ou express-validator) antes de processar os dados da requisição. linha 8 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
Peça a Kirat para verificar esta função de cobrança quanto à correção e integridade dos dados.
kirat_review perguntou ao conselho
Kirat encontrou 16 problemas confirmados (1 × crítica, 11 × alta, 3 × média, 1 × baixa). Cada achado foi verificado de forma cruzada pela outra família de modelos.
Comece pelos que estão no topo da lista; cada um vem com uma correção sugerida.
Nos bastidores
kirat_review O que Claude envia a Kirat
REGISTRADO 2026-10-13 · KIRAT_REVIEW · ESFORÇO: PADRÃO · 16 CONFIRMADOS, 0 REJEITADOS · $0.14
Foco: correção e integridade dos dados de uma função de cobrança
Código enviado:
// 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;
}
Resultado do conselho
- crítico Falta transação de banco de dados e bloqueio de linha. Com requisições paralelas, podem ocorrer condições de corrida (por exemplo, gasto duplo de crédito) e atualizações incompletas em caso de erro. Correção: Use um cliente do pool com BEGIN/COMMIT e use SELECT FOR UPDATE para bloquear e atualizar linhas atomicamente. linha 5 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- alto As três atualizações relacionadas não são executadas em uma transação de banco de dados. Se o débito do crédito do cliente ou a mudança de status falhar, a fatura pode já ter sido reduzida sem que o crédito tenha sido cobrado corretamente ou o status tenha sido definido. Correção: Obtenha um cliente dedicado do pool e execute todas as verificações e atualizações entre BEGIN e COMMIT; use ROLLBACK em qualquer erro. linha 11 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto A fatura é lida primeiro e depois sobrescrita com um valor calculado absoluto. Duas chamadas paralelas podem ler o mesmo valor inicial e então sobrescrever uma à outra; ambos os débitos de crédito ainda ocorrem, enquanto apenas um crédito permanece totalmente visível na fatura. Correção: Bloqueie a fatura afetada dentro da mesma transação com SELECT... FOR UPDATE, ou altere o valor atomicamente via UPDATE... SET total_cents = total_cents - $1 com condições adequadas. linha 4 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto A verificação e o débito do crédito do cliente não são atômicos. Chamadas paralelas podem ambas ver a mesma cobertura disponível e então reduzir o crédito abaixo de zero. Correção: Bloqueie o registro do cliente transacionalmente ou use um UPDATE condicional, como UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2 AND credit_cents >= $1 RETURNING credit_cents, e exija exatamente uma linha retornada. linha 8 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto Não é verificado se a fatura pertence ao cliente especificado. Como resultado, o crédito de um cliente pode ser aplicado a qualquer fatura identificada via invoiceId. Correção: Consulte e atualize fatura e cliente por meio do relacionamento de propriedade, por exemplo com WHERE invoices.id = $1 AND invoices.customer_id = $2; aborte se não houver correspondência. linha 4 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto O crédito a ser aplicado não é limitado ao valor em aberto da fatura. Se creditCents for maior que total_cents, um valor de fatura negativo é armazenado e o crédito excedente do cliente é consumido. Correção: Permita apenas valores até o valor em aberto da fatura, ou determine o valor efetivamente usado como min(creditCents, total_cents) e debite apenas esse valor do crédito do cliente. linha 10 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto Valores negativos, não inteiros ou não representáveis com segurança não são rejeitados. Em particular, um valor negativo de creditCents aumenta o valor da fatura e, ao mesmo tempo, por meio da subtração de um valor negativo, o crédito do cliente. Correção: Exija Number.isSafeInteger(creditCents) && creditCents > 0 antes de qualquer acesso ao banco de dados; trate valores monetários consistentemente como valores inteiros em centavos. linha 8 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto O status da fatura que é lido é completamente ignorado. O crédito pode, portanto, também ser aplicado a faturas que já estão pagas, canceladas ou de outra forma não mais modificáveis; uma fatura já paga pode se tornar negativa como resultado. Correção: Defina explicitamente os status iniciais permitidos e verifique-os atomicamente na condição do UPDATE, por exemplo AND status = 'open'. Se não houver correspondência, aborte a operação. linha 4 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alto Acesso a balance.rows[0] e inv.rows[0] sem verificação prévia. Se um cliente ou fatura não for encontrado, a aplicação falha com um TypeError não tratado. Correção: Verifique inv.rows.length e balance.rows.length antes do acesso e lance uma mensagem de erro explícita. linha 8 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- alto Falta validação de creditCents para valores negativos. Um valor negativo contorna a verificação (creditCents > available) e leva a ajustes incorretos de crédito ou fatura. Correção: Certifique-se de que creditCents seja um inteiro positivo maior que 0. linha 9 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- alto As leituras e as três atualizações são executadas fora de uma transação e sem bloqueios de linha. Duas chamadas concorrentes podem ambas passar na verificação de crédito e gastar o mesmo crédito duas vezes, e uma falha entre as atualizações deixa a fatura e o saldo de crédito inconsistentes. Correção: Execute tudo em uma única transação em um único cliente, bloqueie as linhas com SELECT... FOR UPDATE e faça commit somente após todas as atualizações terem sucesso. linha 5 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- alto A função nunca verifica se a fatura pertence ao cliente ou se ainda está em aberto. O crédito de um cliente pode ser aplicado à fatura de outro cliente, ou a uma fatura que já está paga. Correção: Selecione a fatura com WHERE id = $1 AND customer_id = $2 AND status = 'open' e falhe se nenhuma linha for retornada. linha 11 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- médio A existência da fatura e do cliente não é verificada. Para IDs desconhecidos, o acesso a rows[0] leva a erros de execução em vez de um erro de negócio controlado; além disso, ambas as consultas são executadas desnecessariamente antes que isso se torne aparente. Correção: Verifique rowCount ou rows.length para ambas as consultas e gere um erro de não encontrado definido; integre a verificação à transação e, se possível, a uma consulta relacional. linha 4 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- médio O valor de retorno não corresponde nem ao valor armazenado em centavos nem a uma simples conversão para a moeda principal: ele adiciona 19 por cento fixos e usa aritmética de ponto flutuante. Como resultado, o chamador pode receber um valor que difere, em termos de impostos e arredondamento, do saldo restante da fatura realmente armazenado. Correção: Retorne o valor restante em centavos sem alteração, ou defina um valor de retorno com tipo claramente definido. Se um cálculo de imposto for necessário por razões de negócio, obtenha a alíquota e a regra de arredondamento dos dados da fatura e calcule com aritmética inteira ou decimal. linha 17 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- médio Uso de aritmética de ponto flutuante IEEE 754 (newTotal * 1.19 / 100) para cálculos financeiros. Isso leva a erros de precisão e arredondamento. Correção: Calcule consistentemente em centavos com inteiros (BigInt/Math.round), ou use uma biblioteca para aritmética decimal exata. linha 18 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- baixo Um comando UPDATE separado para o status da fatura causa idas e voltas desnecessárias ao banco de dados. Correção: Combine a atualização de total_cents e status em uma única consulta UPDATE. linha 12 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
Peça a Kirat para verificar a correção do script de análise de triagem para nossa revisão sistemática.
kirat_review perguntou ao conselho
Kirat encontrou 11 problemas confirmados (6 × alto, 4 × médio, 1 × baixo). Cada descoberta foi verificada de forma cruzada pela outra família de modelos.
Comece pelos que estão no topo da lista; cada um vem com uma correção sugerida.
Nos bastidores
kirat_review O que Claude envia a Kirat
GRAVADO EM 2026-10-13 · KIRAT_REVIEW · ESFORÇO: PADRÃO · 11 CONFIRMADOS, 0 REJEITADOS · $0.09
Foco: correção de uma análise de triagem para uma revisão sistemática
Código enviado:
# 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)
Resultado do conselho
- alta O inner join padrão remove todos os valores de record_id que ocorrem em apenas um dos dois arquivos. Kappa e conflitos são, portanto, calculados apenas para a interseção, sem tornar visíveis as triagens ausentes. Ao mesmo tempo, "Records screened" na linha 18 informa o comprimento de a em vez da interseção realmente analisada. Correção: Use um outer join com indicador de merge, compare os conjuntos de IDs explicitamente e relate as decisões ausentes separadamente ou trate-as como erros de dados. Para cada métrica, informe o denominador realmente usado. linha 7 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alta A unicidade de record_id não é verificada. IDs duplicados levam a um produto cartesiano muitos-para-muitos durante o merge e ponderam estudos individuais várias vezes, o que distorce a concordância, as prevalências, o kappa e os arquivos de saída. Correção: Antes do merge, verifique record_id em ambos os arquivos quanto a não nulidade e unicidade, e aborte em caso de duplicatas. Além disso, use merge(..., validate='one_to_one'). linha 7 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alta Os valores de decision não são validados. Valores ausentes, erros de digitação, maiúsculas/minúsculas ou categorias adicionais são implicitamente tratados como "exclude" quando a prevalência de inclusão é calculada, enquanto a concordância observada compara valores exatos. O cálculo, portanto, deixa de corresponder a um kappa de Cohen binário e pode produzir resultados contraditórios. Correção: Normalize decision de forma controlada antes da análise e garanta que cada valor seja exatamente 'include' ou 'exclude'. Trate valores ausentes ou desconhecidos separadamente como erros de dados ou triagem incompleta. linha 9 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alta excluded contém todos os registros excluídos pelo triador A, incluindo conflitos em que o triador B decidiu "include". Tais registros são, portanto, gravados tanto em excluded.csv quanto em conflicts.csv. Se excluded.csv deve representar os hits finalmente excluídos, conflitos não resolvidos podem ser removidos indevidamente da revisão. Correção: Sem uma regra de precedência documentada, selecione apenas exclusões coincidentes, ou seja, (decision_a == 'exclude') & (decision_b == 'exclude'). Mantenha os conflitos exclusivamente em conflicts.csv até que uma decisão por consenso seja tomada. linha 16 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- alta Filtragem incorreta dos estudos excluídos: 'excluded' leva em conta apenas a decisão do triador A ('merged.decision_a == "exclude"'). Se houver um conflito (triador A exclui, triador B inclui), o estudo é contado indevidamente como excluído. Correção: Exporte exclusões apenas se ambos os triadores tiverem escolhido consistentemente 'exclude' (por exemplo, '(merged.decision_a == "exclude") & (merged.decision_b == "exclude")'), ou aguarde a resolução do conflito. linha 16 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- alta excluded.csv contém todos os registros que o triador A excluiu, incluindo conflitos em que o triador B o incluiu. Esses registros são descartados antes da discussão de conflitos, o que é exatamente a exclusão falsa que o protocolo deve evitar. Correção: Exclua apenas registros que ambos os triadores excluíram: merged[(merged.decision_a == 'exclude') & (merged.decision_b == 'exclude')]; envie todo conflito primeiro para resolução. linha 16 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- média Se ambos os triadores usarem apenas a mesma categoria, expected é igual a 1 e o denominador do kappa é igual a 0. O resultado se torna NaN ou pode produzir um aviso de divisão por zero; a saída formatada "nan" não explica que o kappa é matematicamente indefinido. Uma interseção analisada vazia também leva a métricas NaN sem significado. Correção: Antes da divisão, verifique se há quaisquer decisões válidas emparelhadas e se 1 - expected é maior que 0. Em casos degenerados, relate explicitamente o kappa como "não definido" e informe as frequências subjacentes. linha 13 · encontrado por gpt-5.6 · confirmado por gemini-3.6-flash
- média Possível divisão por zero no kappa de Cohen se o valor esperado por acaso 'expected' for igual a 1 (por exemplo, se ambos os triadores escolherem a mesma categoria para 100% dos registros). Correção: Antes do cálculo, capture se '1 - expected == 0' e, nesse caso, atribua um valor definido (por exemplo, 1.0 ou NaN). linha 12 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- média Descarte silencioso de registros pelo inner join padrão. Se o triador A e o triador B avaliaram conjuntos diferentes de 'record_id's, discrepâncias nos estudos processados não são relatadas. Além disso, 'len(a)' na saída do console então não corresponde ao número de estudos realmente emparelhados. Correção: Verifique se 'len(a) == len(b) == len(merged)' é válido, ou realize um outer join para mostrar explicitamente registros avaliados de forma incompleta. linha 7 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
- média O inner merge descarta silenciosamente registros que apenas um triador decidiu, e a contagem impressa usa len(a). Registros não triados desaparecem tanto da concordância quanto dos números do PRISMA. Correção: Faça o merge com how='outer', indicator=True, e falhe ou relate quando qualquer registro não tiver decisão de um dos triadores. linha 7 · encontrado por claude · confirmado por gpt-5.6, gemini-3.6-flash
- baixa Falta de sanitização da entrada e de tratamento de valores ausentes na coluna 'decision'. Maiúsculas/minúsculas, espaços em branco ou valores NaN levam a comparações incorretas. Correção: Limpe os valores da coluna antes da comparação (por exemplo, com '.str.strip().str.lower()') e garanta a segurança do tipo de dados. linha 9 · encontrado por gemini-3.6-flash · confirmado por gpt-5.6
Exibido: cada achado confirmado com sua correção, conforme os membros escreveram; o raciocínio dos verificadores é resumido em seu veredito. Duplicatas não são mescladas, então um problema pode aparecer mais de uma vez quando vários membros o relatam. Código, foco e os próprios achados do Claude foram enviados em inglês; os achados que os membros escreveram em alemão são traduzidos aqui.
Cinco briefs de ideias de áreas diferentes. ChatGPT e Gemini trabalham em três trilhas, Claude acrescenta uma ideia, e ambos os membros avaliam cada ideia anonimamente (1–10 cada, até 20 pontos). Escolha uma.
Meus dois posts de blog ranqueiam no Google, mas poucos leitores iniciam um teste. Faça um brainstorming de ideias com Kirat.
kirat_brainstorm perguntou ao conselho
O conselho gerou 14 ideias e avaliou cada uma anonimamente. As três principais:
- Substituir o relógio de 14 dias por três envios reais (18/20 pontos)
- Concluir a tarefa dentro do artigo (17/20 pontos)
- Transformar o artigo de cobrança em um console de recuperação (17/20 pontos)
Nos bastidores
kirat_brainstorm O que Claude envia a Kirat
GRAVADO EM 2026-10-13 · KIRAT_BRAINSTORM · ESFORÇO: PADRÃO · 14 IDEIAS · 1 RODADA · $0.11
Tópico: Ideias para um desenvolvedor solo converter mais leitores de dois posts de blog que ranqueiam no Google em inscrições de teste para uma ferramenta de faturamento para freelancers
Contexto enviado: Ferramenta de faturamento para freelancers, USD 19 por mês, teste gratuito de 14 dias, 30 clientes pagantes após 5 meses. As inscrições vêm principalmente de dois posts de blog que ranqueiam no Google (como escrever uma fatura de freelancer; como cobrar pagamentos atrasados). Cerca de 12% dos testes convertem. O desenvolvedor tem um emprego fixo e cerca de 10 horas por semana para o produto. RESTRIÇÃO: sem publicidade paga. RESTRIÇÃO: no máximo 3 horas por semana para isso.
Resultado do conselho
- 1 Substitua o prazo de 14 dias por três envios reais gpt-5.6 · rule breaker · 18/20 pontos (9 + 9) Teste um trial que termina após três faturas enviadas ou cobranças de pagamento, em vez de após 14 dias corridos. Isso quebra deliberadamente a premissa implícita de que um trial por tempo limitado é adequado: freelancers podem não emitir faturas durante uma janela arbitrária de duas semanas, então o trial atual pode expirar antes de o produto provar seu valor. Mantenha o plano mensal de US$ 19 inalterado e compare a conversão de ativação para pago por coorte.
- 2 Conclua a tarefa dentro do artigo gpt-5.6 · within brief · 17/20 pontos (9 + 8) Incorpore um pequeno gerador de faturas em "como escrever uma fatura de freelancer": os leitores informam cliente, valor, data de vencimento e condições de pagamento, e então veem uma prévia finalizada. "Enviar ou salvar esta fatura" cria um trial com esses dados já carregados, eliminando a lacuna entre aprender e fazer. Construa em fatias semanais limitadas a três horas e depois mantenha a manutenção próxima de zero.
- 3 Transforme o artigo de cobrança em um console de recuperação gpt-5.6 · neighbor · 17/20 pontos (9 + 8) Como substituição em uma etapa do gerador de faturas incorporado, permita que os leitores informem um valor em atraso e uma data de vencimento para gerar uma sequência de cobrança datada com três mensagens. Iniciar um trial salva o devedor, agenda as mensagens e abre o primeiro rascunho pronto para envio. Isso preserva o padrão mais forte — resultado útil antes do cadastro — enquanto corresponde à intenção do segundo post.
- 4 Coloque o momento de conversão na agenda do devedor gpt-5.6 · within brief · 16/20 pontos (7 + 9) Ofereça um arquivo .ics gerado no artigo sobre atraso de pagamento, com lembretes para a data de vencimento e acompanhamentos escalonados nos dias 1, 7 e 14. Cada evento de calendário contém um deep link que abre o fluxo de cobrança relevante com as datas preenchidas, trazendo o leitor de volta quando a dor é real, e não enquanto ele está apenas pesquisando. Não exige captura de e-mail e pode funcionar sem supervisão.
- 5 Plano permanentemente gratuito para um cliente em vez de um período de trial gemini-3.6-flash · rule breaker · 16/20 pontos (8 + 8) Esta ideia quebra a restrição implícita do trial de 14 dias e a substitui por um plano freemium para exatamente um cliente ativo. Freelancers usam o produto permanentemente de graça para seu primeiro cliente e fazem upgrade sem atrito para a tarifa fixa de 19 dólares assim que um segundo cliente é adicionado.
- 6 Direcione os leitores pelo problema imediato gpt-5.6 · within brief · 14/20 pontos (8 + 6) Substitua banners genéricos de trial por três escolhas inline, como "Preciso da minha primeira fatura", "Faturamento repetidamente" e "Um cliente já está atrasado". Cada escolha abre um estado de onboarding correspondente em vez da mesma homepage, e os IDs das seções do artigo podem pré-selecionar padrões sensatos. Meça a ativação de trial concluída, não apenas cliques em CTA, e teste uma rota por semana.
- 7 Publique três reformulações forenses de faturas gpt-5.6 · within brief · 14/20 pontos (8 + 6) Com permissão, transforme três faturas anonimizadas de clientes em estudos de caso estáticos de antes e depois, mostrando exatamente o que mudou e por quê. Insira cada reformulação ao lado do conselho relevante no post de ranking, com um CTA que abre a mesma estrutura corrigida como um template de trial editável. Evidências específicas de uma base pequena de clientes podem ser mais críveis do que depoimentos amplos.
- 8 Permita que os leitores levem o progresso entre os dois posts gpt-5.6 · within brief · 14/20 pontos (7 + 7) Armazene localmente no navegador a moeda escolhida, o estágio da fatura e a data de vencimento do leitor, e use esse estado quando ele transitar entre os dois artigos. Alguém que criou um plano de fatura pode depois ver um prompt contextual como "Sua fatura está agora 3 dias atrasada — abra o acompanhamento preparado", com o onboarding do trial preenchido. Isso cria uma jornada leve entre dois posts sem exigir conta ou produção contínua de conteúdo.
- 9 Configurador interativo de cartas de lembrete gemini-3.6-flash · within brief · 14/20 pontos (7 + 7) Adicione um gerador de cartas escalonadas de lembrete de pagamento ao artigo sobre acompanhamento de pagamentos em atraso. Após inserir o texto, o template é gerado, combinado com o CTA para configurar lembretes automáticos de pagamento para faturas futuras na conta de trial.
- 10 Magic link de envio instantâneo sem cadastro prévio gemini-3.6-flash · neighbor · 14/20 pontos (8 + 6) Mutação do gerador dentro do conteúdo: o leitor insere os dados da fatura diretamente no artigo do blog e clica em Enviar fatura agora. Em segundo plano, o sistema cria uma conta de trial de forma transparente e envia o e-mail diretamente; a senha só é definida depois.
- 11 Gerador de faturas ao vivo diretamente no artigo do blog gemini-3.6-flash · within brief · 13/20 pontos (6 + 7) Incorpore uma ferramenta de formulário simples e interativa diretamente no artigo sobre como escrever faturas. Os leitores digitam os dados da fatura e podem baixar o PDF finalizado imediatamente e de graça. Um botão em destaque oferece enviar a fatura digitalmente com um clique e acompanhar o status do pagamento na conta de trial de 14 dias.
- 12 Lembrete avulso pay-per-use em vez de assinatura mensal gemini-3.6-flash · rule breaker · 13/20 pontos (6 + 7) Esta ideia quebra a restrição implícita do modelo puro de assinatura SaaS a 19 dólares por mês. Por uma taxa única de 5 dólares, os leitores do artigo sobre atraso de pagamento podem ter uma carta de lembrete juridicamente sólida, incluindo um link de rastreamento, enviada, com a taxa totalmente creditada caso depois contratem uma assinatura.
- 13 Template que abre na ferramenta claude · within brief · 11/20 pontos (6 + 5) Ofereça o template de fatura do post como uma fatura pronta para uso na ferramenta: um clique abre uma conta de trial pré-preenchida em vez de baixar um arquivo.
- 14 Exit intent específico por problema com sequência automatizada de e-mails gemini-3.6-flash · within brief · 8/20 pontos (4 + 4) Implemente um popup de exit intent no artigo sobre atraso de pagamento que oferece um template de e-mail de emergência para clientes que pagam atrasado em troca de um endereço de e-mail. Uma sequência automatizada de três e-mails então explica passivamente como fluxos automatizados reduzem atrasos de pagamento e direciona para a conta de trial.
Faça um brainstorm com Kirat: como transformamos essa reformulação pontual de loja em um plano de cuidado que o cliente realmente quer?
kirat_brainstorm perguntou ao conselho
O conselho apresentou 15 ideias e avaliou cada uma anonimamente. As três principais:
- Pausa no orçamento: operações antes do brilho do lançamento (18/20 pontos)
- Porteiro de produtos via CSV (17/20 pontos)
- Dividendo de confiabilidade (17/20 pontos)
Nos bastidores
kirat_brainstorm O que o Claude envia ao Kirat
REGISTRADO EM 2026-10-13 · KIRAT_BRAINSTORM · ESFORÇO: PADRÃO · 15 IDEIAS · 1 RODADA · US$ 0,10
Tópico: Ideias para uma pequena agência digital transformar uma reformulação pontual de loja em um contrato recorrente de cuidado que o cliente realmente quer
Contexto enviado: Agência de 4 pessoas. O cliente vende cerca de 1.800 produtos de mobiliário na Alemanha, Áustria e Suíça, tem 3 funcionários e nenhum desenvolvedor interno, com receita de cerca de EUR 1,2 milhão por ano. A antiga loja WooCommerce auto-hospedada tinha 31 plugins e dois incidentes de segurança no ano passado; o cliente quer menos manutenção e menos emergências. Um ERP local exporta dados de produtos como CSV. Orçamento da reformulação: EUR 25.000. RÍGIDO: sem lock-in; o cliente deve poder sair com todos os dados e acessos a qualquer momento. RÍGIDO: sem contratações extras na agência.
Resultado do conselho
- 1 Ruptura de orçamento: operações antes do lançamento gpt-5.6 · infrator de regras · 18/20 pontos (9 + 9) Esta ideia quebra deliberadamente a restrição flexível do orçamento de reconstrução de 25.000 EUR: a oferta é, por exemplo, 22.000 EUR para um lançamento deliberadamente enxuto mais 12.000 EUR para um primeiro ano de operação vinculante. Em troca, recursos desejáveis mas não essenciais são retirados do projeto inicial; em vez disso, são financiados o endurecimento da importação, os testes de restauração, o monitoramento e as melhorias mensais. O volume total mais alto compensa porque o cliente não está comprando mais uma vez uma loja aparentemente pronta cujos custos reais de operação só se tornam visíveis após o lançamento; todas as credenciais de acesso, dados e resultados de trabalho permanecem transferíveis a qualquer momento.
- 2 Porteiro de Produtos CSV gpt-5.6 · dentro do escopo · 17/20 pontos (9 + 8) Antes de cada importação para o ERP, um pipeline automatizado verifica o CSV em busca de preços ausentes, duplicatas, variantes inválidas, erros de imagem, lógica fiscal DACH e alterações suspeitas de estoque. O retainer mensal cobre a manutenção das regras, o monitoramento das importações e um relatório de erros compreensível para os três funcionários. Isso transforma a manutenção técnica em um benefício direto para o negócio: menos produtos errados, menos perguntas de acompanhamento e menos compras abandonadas.
- 3 Dividendo de Confiabilidade gpt-5.6 · dentro do escopo · 17/20 pontos (8 + 9) O cliente paga uma taxa base moderada por monitoramento e manutenção; um valor trimestral adicional só se torna devido se metas de confiabilidade acordadas, como importações bem-sucedidas, restauração testada e tempos de resposta, tiverem sido cumpridas. Interrupções evitáveis causadas pela agência geram créditos de serviço em vez de horas de emergência faturáveis. Esse modelo alinha os incentivos econômicos com a prevenção e elimina o medo do cliente de que a agência lucre com problemas.
- 4 Carta de Cuidados Pronta para Saída gpt-5.6 · dentro do escopo · 16/20 pontos (9 + 7) O retainer é deliberadamente vendido como um produto anti-lock-in: monitoramento, atualizações, backups, verificações de segurança e duas pequenas alterações por mês por cerca de 1.200–1.500 EUR. Todas as contas estão em nome do cliente, e o código e os scripts de importação ficam no repositório do cliente; todo mês o cliente também recebe documentação, uma exportação de dados e um pacote de transferência que lhe permite cancelar a qualquer momento. Assim, o cliente paga por operabilidade demonstrável em vez de dependência.
- 5 Trem de lançamentos sazonais gpt-5.6 · dentro do escopo · 16/20 pontos (8 + 8) Em vez de tickets de suporte arbitrários, há quatro lançamentos de comércio planejáveis por ano, por exemplo para móveis de jardim, fim do verão, Black Week e Natal. Incluídos no retainer para cada lançamento estão um pequeno pacote de UX ou merchandising, testes de regressão e a manutenção técnica no intervalo. Isso dá ao cliente um desenvolvimento contínuo visível e mantém o esforço agrupável para a agência de quatro pessoas.
- 6 O teste de saída trimestral gpt-5.6 · dentro do escopo · 16/20 pontos (9 + 7) Uma vez por trimestre, a agência fornece uma exportação completa de dados de produtos, clientes, pedidos e conteúdo e realiza uma reinicialização documentada em um ambiente de teste neutro. O que o cliente paga, ironicamente, é a saída comprovada regularmente: a lista de acessos, o registro de restauração e o manual de transferência pertencem ao cliente. O critério rígido de não-lock-in deixa assim de ser uma objeção e se torna um argumento de venda incomum para o retainer.
- 7 Carta de Cuidados mais troca de crescimento gpt-5.6 · vizinho · 16/20 pontos (8 + 8) Como uma pequena mutação da Carta de Cuidados Pronta para Saída, as horas de alteração incluídas não são fixadas antecipadamente, mas redistribuídas mensalmente entre operações, qualidade de dados e melhorias de conversão; o volume não utilizado é transferido por no máximo um trimestre. Um conselho conjunto de 30 minutos decide como elas são usadas, com base em riscos e oportunidades de receita. O retainer continua pronto para saída, mas parece menos um seguro e mais uma equipe digital externa flexível.
- 8 Retainer de sincronização com ERP e segurança do catálogo gemini-3.6-flash · dentro do escopo · 13/20 pontos (7 + 6) A agência assume o monitoramento contínuo e a manutenção da interface entre o CSV do ERP local e a loja online. Importações de dados defeituosas, variantes de móveis ausentes ou preços errados são detectados automaticamente antes de entrarem no ar. Isso retira completamente a carga operacional da manutenção de dados da equipe de 3 pessoas do cliente.
- 9 Tarifa fixa de enriquecimento de dados de produtos com IA gemini-3.6-flash · vizinho · 13/20 pontos (6 + 7) Mutação da ideia da interface com o ERP: a agência não apenas mantém a importação do CSV, mas também usa scripts de IA para enriquecer automaticamente os dados brutos com atributos estruturados, textos de SEO e notas de prazo de entrega específicas para DACH. Isso poupa ao cliente o esforço de manutenção manual e aumenta a visibilidade no mercado de móveis sem contratação adicional na agência.
- 10 Contrato de manutenção de regressão visual baseado em CI/CD gemini-3.6-flash · dentro do escopo · 12/20 pontos (6 + 6) Em vez de atualizações arriscadas em produção, a agência configura um pipeline de staging que verifica automaticamente as atualizações mensais de plugins de forma visual e funcional. O cliente recebe um relatório mensal de transparência e tempos de resposta garantidos para vulnerabilidades de segurança. Isso garante estabilidade absoluta sem as emergências anteriores.
- 11 Polimento trimestral de conversão e UX gemini-3.6-flash · dentro do escopo · 11/20 pontos (6 + 5) Além da manutenção básica, o retainer inclui cotas fixas de horas para otimizar funções de checkout e exibições de variantes de móveis. A agência analisa o comportamento dos usuários na região DACH todos os meses e implementa ajustes de alto retorno. Isso transforma o retainer de um mero fator de custo em um impulsionador de receita.
- 12 Garantia de atualização segura e rollback instantâneo gemini-3.6-flash · vizinho · 11/20 pontos (5 + 6) Mutação do contrato de manutenção CI/CD: o retainer concentra-se puramente em um SLA garantido de zero downtime com restauração automatizada de snapshot em até 15 minutos em caso de incidentes. Isso aborda diretamente o medo do cliente após os dois incidentes de segurança, com esforço manual contínuo mínimo.
- 13 Pacote de crescimento com participação na receita em vez de orçamento fixo gemini-3.6-flash · infrator de regras · 9/20 pontos (4 + 5) Quebra a premissa flexível de um orçamento rígido de reconstrução única de 25.000 EUR: os custos de reconstrução são reduzidos para 10.000 EUR, combinados com um retainer mensal com uma pequena participação na receita adicional. Isso compensa porque o cliente reduz seu risco de investimento e a agência participa diretamente do crescimento da loja de 1,2 milhão de EUR.
- 14 Serviço de Cuidados com Arquitetura Headless gemini-3.6-flash · infrator de regras · 7/20 pontos (3 + 4) Quebra a restrição flexível de uma configuração monolítica clássica (como o WooCommerce padrão): o frontend é desacoplado do backend, de modo que vulnerabilidades de segurança de plugins não podem mais atacar o site diretamente. Isso compensa porque as emergências são eliminadas estruturalmente e o cliente permanece portável a qualquer momento graças a uma stack de código aberto e acesso total ao Git.
- 15 Relatório mensal de cuidados de uma página claude · dentro do escopo · 6/20 pontos (4 + 2) Um relatório mensal de uma página com uptime, velocidade da página, atualizações aplicadas e incidentes evitados, para que o cliente veja pelo que o retainer está pagando.
Nossa nova página de pedidos entra no ar no próximo mês. Faça um brainstorming com Kirat sobre como conseguir mais pré-encomendas de bolos sem anúncios pagos.
kirat_brainstorm perguntou ao conselho
O conselho apresentou 15 ideias e avaliou cada uma anonimamente. As três melhores:
- O piloto automático de aniversários anual (18/20 pontos)
- Vagas reais de bolo em vez de posts genéricos (17/20 pontos)
- O bolo viaja como seu próprio meio de publicidade (16/20 pontos)
Nos bastidores
kirat_brainstorm O que o Claude envia para Kirat
GRAVADO EM 2026-10-13 · KIRAT_BRAINSTORM · ESFORÇO: PADRÃO · 15 IDEIAS · 1 RODADA · $0,09
Tópico: Ideias para uma padaria local conseguir mais pré-encomendas de bolos personalizados por meio de sua nova página de pedidos online, sem anúncios pagos
Contexto enviado: Padaria com 6 funcionários em uma cidade alemã de 40.000 habitantes. Bolos personalizados e pré-encomendas têm a melhor margem. Uma nova página de pedidos online (escolha do bolo, data de retirada, pagamento antecipado) entra no ar no próximo mês; até agora os pedidos chegavam apenas por telefone e e-mail. O Perfil da Empresa no Google tem 4,7 estrelas de 120 avaliações. O proprietário tem pouco tempo, então as ideias devem funcionar com no máximo 2 horas por semana. RÍGIDO: sem publicidade paga neste trimestre. RÍGIDO: sem funcionários adicionais.
Resultado do conselho
- 1 O piloto automático anual de aniversários gpt-5.6 · dentro do briefing · 18/20 pontos (9 + 9) No checkout, os clientes podem, de forma voluntária, deixar a ocasião e o mês para receberem um lembrete no ano seguinte. Um e-mail automatizado 21 dias antes leva à página de pedido pré-preenchida; assim, cada pedido gera um pedido futuro, sem aquisição contínua de clientes e com consentimento claro.
- 2 Vagas reais de bolo em vez de posts genéricos gpt-5.6 · dentro do briefing · 17/20 pontos (9 + 8) A página de pedido mostra as vagas reais de produção restantes para as próximas quatro semanas, como “Ainda 2 bolos personalizados disponíveis para sábado”. Um post semanal no Google Business leva diretamente a essa visualização; atualizá-la e publicar juntos leva no máximo 20 minutos e cria urgência crível sem descontos.
- 3 O bolo viaja como seu próprio meio de divulgação gpt-5.6 · dentro do briefing · 16/20 pontos (8 + 8) Cada bolo retirado recebe um pequeno cartão dizendo “Repita o pedido ou personalize este bolo” e um QR code para a variante correspondente. O cartão fica visível quando o bolo é cortado, para que justamente os convidados de aniversário ou casamento presentes descubram o caminho para pedir; um conjunto de cartões criado uma única vez gera quase nenhum esforço semanal.
- 4 Hora de consulta de bolo única no lançamento gpt-5.6 · quebra de regra · 16/20 pontos (8 + 8) No primeiro sábado após o lançamento há uma hora aberta de consulta de bolo por quatro horas: os convidados escolhem sabor e estilo a partir de cartões de amostra e depois fazem o pedido eles mesmos via QR codes dispostos para eles. Isso quebra deliberadamente a restrição flexível de no máximo duas horas de esforço naquela semana; o esforço extra compensa porque pedidos reais, problemas de usabilidade observados e fotos e perguntas de clientes reutilizáveis são todos produzidos ao mesmo tempo — sem equipe adicional ou publicidade paga.
- 5 Parceiros de ocasião em vez de influenciadores gpt-5.6 · dentro do briefing · 15/20 pontos (8 + 7) Espaços de recreação infantil, fotógrafos, floristas, locais de casamento e sedes de clubes recebem cada um um pequeno suporte com QR code que leva a uma seleção de bolos pré-configurada para sua ocasião. Em troca, a confeitaria nomeia esses parceiros em uma página de recomendações locais; cinco solicitações direcionadas por mês são suficientes, e comissões e alcance pago são eliminados.
- 6 Rodízio de bolos para escritórios e clubes gpt-5.6 · dentro do briefing · 15/20 pontos (8 + 7) Escritórios, consultórios e clubes locais recebem uma página onde vários aniversários ou datas recorrentes podem ser reunidos e pré-pagos um após o outro. Rodízios trimestrais, uma vez configurados, transformam ocasiões individuais em pedidos seriados planejáveis; a prospecção pode ser limitada a duas organizações por semana.
- 7 Consulta de bolo híbrida no tablet do balcão gemini-3.6-flash · quebra de regra · 14/20 pontos (7 + 7) Quebra deliberadamente a restrição flexível 'somente pedidos online' ao oferecer 1 hora de consulta na loja às sextas-feiras, durante a qual os pedidos são inseridos juntos em um tablet. Compensa porque clientes indecisos e mais velhos são gradualmente introduzidos ao novo sistema online.
- 8 Avaliações se tornam um auxílio à decisão gpt-5.6 · vizinho · 13/20 pontos (7 + 6) Como uma pequena recombinação do material existente mais forte, doze frases significativas das 120 avaliações do Google são combinadas com estilos de bolo correspondentes, cada uma com um link direto de pedido. Assim, as 4,7 estrelas não são apenas exibidas como sinal de confiança, mas ajudam na seleção do produto; após a configuração única, a página é praticamente livre de manutenção.
- 9 Expositores de bolos de amostra com deep links da loja gemini-3.6-flash · vizinho · 13/20 pontos (6 + 7) Uma galeria de fotos física dos bolos mais bonitos no salão de vendas inclui um QR code específico com cada imagem que abre exatamente esse modelo de bolo pré-selecionado na loja online. Mutação da ideia 1: vincular o expositor na loja a um deep link direto na loja.
- 10 Otimização do perfil do Google e links de avaliação automatizados gemini-3.6-flash · dentro do briefing · 12/20 pontos (6 + 6) O forte perfil do Google (4,7 estrelas) é complementado com o botão oficial 'Pedir online' e atualizado semanalmente com uma foto dos bolos atuais. Na retirada, os clientes recebem um modelo por e-mail com um link para a página de avaliação e de novo pedido. Leva menos de 30 minutos por semana.
- 11 QR code teaser em recibos e sacolas de pão gemini-3.6-flash · dentro do briefing · 11/20 pontos (6 + 5) Um QR code chamativo é impresso em cada recibo e na embalagem, levando diretamente ao configurador de bolos online ('Planeje seu bolo dos sonhos para sua celebração online'). Isso converte clientes diários de balcão em pré-encomendadores digitais sem esforço extra no balcão.
- 12 Parceria B2B com locais de eventos locais gemini-3.6-flash · dentro do briefing · 11/20 pontos (6 + 5) Suportes e panfletos com um código de reserva direto para o site são colocados em restaurantes locais, celeiros de eventos e planejadores de casamento. Clientes em celebração reservam seu bolo diretamente online, enquanto o local recebe uma pequena ajuda de custo ou uma indicação em troca.
- 13 Calendário de aniversários de creches e escolas gemini-3.6-flash · vizinho · 10/20 pontos (4 + 6) Cooperação com jardins de infância locais via panfletos informativos para conselhos de pais que contêm um código de desconto fixo para bolos temáticos infantis. Mutação da ideia 3: em vez de parceiros B2B gerais, a ocasião de alta frequência dos aniversários infantis é especificamente abordada de forma automatizada.
- 14 Mini workshop mensal para bolos decorados gemini-3.6-flash · quebra de regra · 10/20 pontos (4 + 6) Quebra deliberadamente a restrição flexível 'máximo de 2 horas de tempo por semana', já que um workshop de 4 horas ocorre uma vez por mês. Compensa porque os participantes atuam como embaixadores da marca, criam conteúdo entusiasmado para redes sociais e com certeza fazem pedidos de acompanhamento pela loja online.
- 15 Link de pedido em cada caixa de bolo claude · dentro do briefing · 8/20 pontos (4 + 4) Imprima um QR code para a página de pedidos nas caixas de bolo e nos recibos, para que cada cliente que já compra um bolo possa repetir o pedido para o próximo aniversário sem ligar.
Nota de Kirat para Claude: Melhor ideia de quebra de regra apenas na posição 4: "Hora de consulta de bolo única no lançamento" — ela quebra deliberadamente uma restrição flexível. Faça um steelman dela uma vez antes de descartá-la.
Faça um brainstorm com Kirat sobre como reduzir incidentes de cobrança em dois trimestres sem separar a cobrança do monólito.
kirat_brainstorm perguntou ao conselho
O conselho apresentou 15 ideias e avaliou cada uma anonimamente. As três principais:
- Firewall de banco de dados em torno das tabelas de cobrança (17/20 pontos)
- Invariantes financeiros executáveis (17/20 pontos)
- Replay de incidentes como teste de liberação (17/20 pontos)
Nos bastidores
kirat_brainstorm O que Claude envia a Kirat
REGISTRADO EM 2026-10-13 · KIRAT_BRAINSTORM · ESFORÇO: PADRÃO · 15 IDEIAS · 1 RODADA · $0,06
Tópico: Ideias para reduzir incidentes em produção causados pelo módulo de cobrança em dois trimestres, sem extraí-lo para um serviço separado
Contexto enviado: Equipe de 8 engenheiros. Um monólito TypeScript, cerca de 60.000 linhas, um banco de dados Postgres, implantado várias vezes ao dia. O módulo de cobrança muda toda semana e causou 5 dos últimos 8 incidentes em produção, principalmente por outros módulos lerem e escreverem diretamente nas tabelas de cobrança. Ninguém na equipe executou um sistema distribuído em produção. A liderança quer menos incidentes em dois trimestres. RÍGIDO: sem reescrita do módulo de cobrança. RÍGIDO: o trabalho de funcionalidades na cobrança continua toda semana.
Resultado do conselho
- 1 Firewall de banco de dados em torno das tabelas de faturamento gpt-5.6 · dentro do escopo · 17/20 pontos (9 + 8) Crie funções do Postgres separadas para os caminhos de código de faturamento e não faturamento do monólito e, em seguida, revogue as gravações diretas nas tabelas de faturamento da função de aplicação geral. Encaminhe todas as mutações por meio de um pequeno conjunto de stored procedures ou funções de transação revisadas, adicionando primeiro um registro de auditoria temporário para descobrir e migrar os chamadores sem interromper o trabalho semanal de funcionalidades.
- 2 Invariantes financeiros executáveis gpt-5.6 · dentro do escopo · 17/20 pontos (9 + 8) Codifique uma lista curta de invariantes — como faturas finalizadas imutáveis, lançamentos contábeis balanceados, criação idempotente de cobranças e transições de estado válidas — como restrições de banco de dados quando for seguro e como sondas de produção agendadas quando não for. Execute as mesmas sondas contra fixtures anonimizados com o formato da produção no CI, transformando o conhecimento de incidentes em armadilhas permanentes em vez de uma ampla expansão de testes.
- 3 Replay de incidentes como prova de fogo para releases gpt-5.6 · dentro do escopo · 17/20 pontos (9 + 8) Converta os cinco incidentes de faturamento em cenários de replay determinísticos usando formatos de consulta capturados e linhas sanitizadas e, em seguida, exija que toda alteração de faturamento sobreviva a eles. Adicione testes generativos que permutem retentativas, eventos duplicados, ordenação de transações e falhas parciais em torno desses cenários exatos, mirando a vizinhança da falha em vez de tentar uma cobertura exaustiva do monólito.
- 4 Aplicar o limite de faturamento em modo sombra gpt-5.6 · vizinho · 16/20 pontos (9 + 7) Como uma mutação de menor risco do firewall de banco de dados, mantenha as permissões atuais inicialmente, mas registre toda consulta que toque nas tabelas de faturamento com seu módulo, local de chamada e ID de transação. Após quatro semanas, transforme gravações inesperadas em falhas de CI e depois em erros de produção, módulo por módulo; isso substitui a troca imediata de permissões por uma aplicação escalonada.
- 5 Painel de controle de raio de impacto do faturamento gpt-5.6 · dentro do escopo · 16/20 pontos (9 + 7) Coloque comportamentos de faturamento arriscados — não o módulo inteiro — atrás de kill switches do lado do servidor e lançamentos percentuais, com dashboards vinculados a anomalias de faturas, pagamentos e conciliação. Cada funcionalidade semanal é entregue com um caminho de desativação testado, para que os respondedores possam desativar o novo comportamento sem reverter implantações não relacionadas do monólito ou desfazer migrações de esquema.
- 6 Encapsulamento de esquema no Postgres e Row Level Security gemini-3.6-flash · dentro do escopo · 15/20 pontos (7 + 8) Isole as tabelas de faturamento em um esquema dedicado do Postgres (billing.*) e revogue o acesso direto de leitura e gravação de outras funções do banco de dados. Os módulos acessam essas tabelas apenas por meio de views SQL definidas ou interfaces armazenadas. Isso elimina diretamente no nível do banco de dados a principal causa dos incidentes.
- 7 Testes de contrato e pipeline sombra para releases de faturamento gemini-3.6-flash · dentro do escopo · 15/20 pontos (8 + 7) Estabeleça testes de contrato automatizados orientados pelo consumidor para todas as interfaces de faturamento no pipeline de CI. Além disso, alterações de faturamento em cálculos críticos são executadas em modo sombra em produção, sem efeitos colaterais e com verificação automática de diferenças.
- 8 Um segundo banco de dados como instrumento de segurança gpt-5.6 · quebrador de regras · 14/20 pontos (7 + 7) Quebre deliberadamente a suposição flexível de “um único banco de dados Postgres” adicionando um banco de dados sombra somente leitura alimentado por replicação lógica, mantendo o faturamento dentro do monólito e retendo o primário como único escritor. Execute novas leituras de faturamento e verificações de conciliação nos dois bancos de dados, compare os resultados antes da exposição e use o sombra para consultas forenses, para que o diagnóstico de incidentes não sobrecarregue nem mute acidentalmente a produção.
- 9 Linting rigoroso de limites de módulo e fachada de API pública gemini-3.6-flash · dentro do escopo · 14/20 pontos (7 + 7) Introduza linting de arquitetura via dependency-cruiser que proíba importações diretas de componentes internos de faturamento em outros módulos na etapa de build. A comunicação só pode ocorrer por meio de uma única interface BillingFacade com tipagem segura, de modo que o acoplamento crescente seja bloqueado imediatamente.
- 10 Passaportes de alteração de faturamento gpt-5.6 · dentro do escopo · 13/20 pontos (7 + 6) Exija que todo pull request relacionado a faturamento carregue um passaporte verificado por máquina: tabelas afetadas, invariantes, compatibilidade de migração, caminho de rollback e uma consulta de produção que comprove a saúde pós-implantação. Um gate de CODEOWNERS mais uma revisão de 15 minutos por um responsável rotativo de faturamento mantém o processo leve o suficiente para alterações semanais, ao mesmo tempo que concentra o escrutínio nos efeitos entre módulos.
- 11 Views somente leitura do Postgres geradas automaticamente para módulos externos gemini-3.6-flash · vizinho · 13/20 pontos (7 + 6) Uma mutação do encapsulamento de esquema: em vez de refatorações custosas de API, views somente leitura do Postgres são fornecidas automaticamente para consultas externas. Módulos externos leem apenas essas views estáveis, enquanto o acesso direto às tabelas é bloqueado por permissões do banco de dados.
- 12 Barramento de eventos assíncrono em processo para modelos de leitura gemini-3.6-flash · dentro do escopo · 12/20 pontos (4 + 8) Em vez de outros módulos consultarem diretamente as tabelas de faturamento, o módulo de faturamento envia eventos em memória em mudanças de estado. Os módulos receptores constroem suas próprias projeções locais. Isso desacopla completamente o acesso de leitura das tabelas de faturamento sem introduzir sistemas distribuídos.
- 13 Congelamento de funcionalidades de duas semanas para encapsulamento do faturamento gemini-3.6-flash · quebrador de regras · 11/20 pontos (5 + 6) Quebra a restrição flexível de entrega contínua semanal de funcionalidades por exatamente duas semanas. A equipe inteira se concentra em separar os acoplamentos de banco de dados. O esforço único estabelece a base para reduzir de forma sustentável o número de incidentes ao longo dos 5 meses restantes.
- 14 Função de banco de dados por módulo claude · dentro do escopo · 11/20 pontos (6 + 5) Dê ao faturamento seu próprio esquema e função no Postgres e revogue o acesso de gravação de outros módulos às tabelas de faturamento, para que gravações diretas falhem em staging antes de chegar à produção.
- 15 Particionamento físico do banco de dados em uma segunda instância do Postgres gemini-3.6-flash · quebrador de regras · 9/20 pontos (3 + 6) Quebra a restrição flexível da arquitetura de banco de dados único, mas mantém o código monolítico. Os dados de faturamento passam para sua própria instância de banco de dados, o que torna joins SQL transversais tecnicamente impossíveis. A complexidade operacional permanece mínima porque o código continua monolítico.
Nota de Kirat para Claude: A melhor ideia de quebrador de regras só está na posição 8: "Um segundo banco de dados como instrumento de segurança" — ela quebra deliberadamente uma restrição flexível. Faça o steelman dela uma vez antes de descartá-la.
Faça um brainstorm com Kirat sobre como podemos reduzir o tempo de triagem de cerca de 3.000 registros sem enfraquecer a revisão.
kirat_brainstorm perguntou ao conselho
O conselho apresentou 14 ideias e avaliou cada uma anonimamente. As três principais:
- Portão de exclusão com dois humanos (18/20 pontos)
- Sprint de calibração com um registro de casos extremos (16/20 pontos)
- Console binário rápido, não extração de dados em miniatura (15/20 pontos)
Nos bastidores
kirat_brainstorm O que Claude envia a Kirat
REGISTRADO EM 2026-10-13 · BRAINSTORM DE KIRAT · ESFORÇO: PADRÃO · 14 IDEIAS · 1 RODADA · US$ 0,18
Tópico: Ideias para reduzir o tempo da equipe na triagem de títulos e resumos de cerca de 3.000 registros sem enfraquecer o rigor de uma revisão sistemática
Contexto enviado: Revisão sistemática em pesquisa de serviços de saúde, planejada para publicação. Protocolo atual: dois triadores humanos independentes, conflitos resolvidos por discussão. O tempo da equipe é curto. Os revisores da revista perguntarão como a triagem foi feita. Perder um estudo relevante (exclusão falsa) é pior do que incluir um irrelevante. RÍGIDO: o método deve ser reportável segundo o PRISMA 2020. RÍGIDO: a taxa de exclusões falsas não pode aumentar.
Resultado do conselho
- 1 Portão de exclusão com dois humanos gpt-5.6 · infrator de regras · 18/20 pontos (10 + 8) Faça o Revisor A triar todos os registros, mas encaminhe diretamente as inclusões e decisões incertas de A; o Revisor B avalia de forma independente apenas as exclusões propostas por A. Exclua um registro somente quando ambos os humanos o excluírem de forma independente, e avance automaticamente toda discordância, eliminando a maior parte das discussões de conflito. Isso quebra deliberadamente a suposição branda do protocolo atual de que dois humanos devem avaliar cada registro; vale a pena porque economiza tempo de triagem enquanto, estruturalmente, permite mais inclusões falsas, mas nenhuma exclusão falsa adicional, e é simples de descrever na seção de processo de seleção do PRISMA.
- 2 Sprint de calibração com um registro de casos-limite gpt-5.6 · dentro do escopo · 16/20 pontos (9 + 7) Faça a triagem dupla independente de um primeiro lote estratificado, resolva os conflitos e transforme ambiguidades recorrentes em regras operacionais curtas com exemplos positivos e negativos. Bloqueie as regras antes de continuar; mantenha as decisões do piloto apenas se os critérios de elegibilidade não mudaram, caso contrário, retriagem-nas. Isso preserva a triagem dupla independente enquanto reduz o tempo posterior de deliberação e resolução de conflitos, e a calibração pode ser relatada no PRISMA.
- 3 Console binário rápido, não extração de dados em miniatura gpt-5.6 · dentro do escopo · 15/20 pontos (8 + 7) Dê a ambos os revisores uma interface cega, operada por teclado, limitada a incluir, excluir ou incerto, com o título e o resumo completos sempre visíveis; adie a codificação detalhada e os motivos de exclusão para a revisão de texto completo. O PRISMA 2020 não exige motivos em nível de registro na etapa de título e resumo. O processo de decisão permanece inalterado, mas o tempo evitável de leitura, cliques e documentação diminui.
- 4 Válvula de escape de máquina apenas para inclusão gpt-5.6 · vizinho · 15/20 pontos (9 + 6) Como uma mutação de uma etapa do portão de exclusão com dois humanos, passe as exclusões propostas por A por um classificador validado que só pode liberar registros para inclusão, nunca excluí-los; o Revisor B tria de forma independente tudo o que o classificador não liberar. A exclusão final ainda exige decisões concordantes de dois humanos, então um erro da máquina pode adicionar textos completos, mas não pode criar uma exclusão falsa. Relate o modelo, a versão, as entradas, os limiares, a validação e seu papel estritamente de apenas inclusão no PRISMA.
- 5 Triagem assimétrica de exclusão gemini-3.6-flash · dentro do escopo · 15/20 pontos (7 + 8) Um primeiro revisor classifica completamente todos os 3.000 registros. O segundo revisor verifica apenas os registros que o primeiro revisor excluiu, a fim de capturar falsos negativos (as inclusões são aceitas diretamente). Isso quase reduz pela metade o esforço do segundo revisor, mantém o risco de exclusões falsas extremamente baixo e atende a todos os requisitos do PRISMA.
- 6 Ignorar a triagem para estratos de alto rendimento gpt-5.6 · infrator de regras · 13/20 pontos (8 + 5) Pré-declare subconjuntos de alto rendimento — como registros de um bloco de busca altamente específico, descendentes diretos de estudos elegíveis conhecidos ou registros já incluídos em uma revisão estreitamente alinhada — e envie todos eles diretamente para a recuperação de texto completo sem decisões de título e resumo. Isso quebra deliberadamente o protocolo brando de dois triadores para esses registros, mas não pode aumentar as exclusões falsas porque nada no subconjunto é excluído; a contrapartida é trabalho adicional de texto completo. Relate a regra de desvio e as contagens resultantes explicitamente no diagrama de fluxo do PRISMA e nos métodos de seleção.
- 7 Triagem priorizada via aprendizado ativo gemini-3.6-flash · dentro do escopo · 13/20 pontos (5 + 8) Ambos os triadores humanos usam uma ferramenta de aprendizado ativo (como o ASReview) que classifica títulos/resumos relevantes no topo. Assim que um critério de parada estatisticamente validado é atingido (por exemplo, 500 resultados irrelevantes consecutivos), a triagem é encerrada. O procedimento economiza até 70% do tempo, pode ser documentado de forma compatível com o PRISMA 2020 e mantém uma taxa mínima de exclusão falsa por meio da calibração do algoritmo.
- 8 Desduplicação apenas exata antes da triagem gpt-5.6 · dentro do escopo · 12/20 pontos (8 + 4) Remova apenas registros comprovadamente idênticos por meio de DOI, número de acesso do banco de dados ou correspondência bibliográfica normalizada exata; mantenha a cópia com metadados mais ricos e apenas sinalize quase-duplicatas incertas. Ambos os revisores então triam de forma independente cada registro único restante, enquanto o PRISMA relata as duplicatas removidas antes da triagem. Isso reduz o volume sem criar um caminho para excluir um estudo único.
- 9 Cascata humano-IA com uma rede de segurança de IA gemini-3.6-flash · vizinho · 12/20 pontos (5 + 7) Uma mutação da triagem assimétrica de exclusão: um triador humano processa todos os registros sozinho, enquanto um modelo de IA ajustado para sensibilidade máxima verifica apenas as exclusões humanas. Um segundo humano verifica apenas onde há discrepâncias. Isso reduz a capacidade humana em mais de 50% com cobertura completa.
- 10 Segundo revisor de IA totalmente automatizado gemini-3.6-flash · infrator de regras · 11/20 pontos (3 + 8) Quebra a restrição branda de que dois seres humanos devem necessariamente fazer a triagem. Um grande modelo de linguagem (LLM) assume o papel do segundo revisor independente com prompting de zero falsos negativos. Vale a pena porque o tempo de trabalho humano é reduzido pela metade e os LLMs demonstraram alcançar altas taxas de recall na triagem de resumos; o PRISMA 2020 permite explicitamente que ferramentas de IA sejam relatadas.
- 11 Triagem única adaptada ao risco com triagem por confiança gemini-3.6-flash · infrator de regras · 11/20 pontos (5 + 6) Quebra a restrição branda de triagem dupla contínua para todo o conjunto de dados. Se o primeiro revisor declarar alta confiança subjetiva e existirem motivos claros de exclusão, o segundo revisor é dispensado; apenas os casos incertos passam para a triagem dupla. Isso economiza até 60% do tempo da equipe, enquanto o risco de estudos perdidos permanece mínimo porque os recursos se concentram nas áreas cinzentas.
- 12 Rodada de calibração primeiro claude · dentro do escopo · 11/20 pontos (6 + 5) Ambos os triadores triam os mesmos 100 registros, discutem cada conflito e aprimoram os critérios de elegibilidade antes da rodada principal, de modo que os conflitos e releituras posteriores diminuem.
- 13 Triagem rápida binarizada com triagem de IA gemini-3.6-flash · vizinho · 10/20 pontos (4 + 6) Mutação da priorização por aprendizado ativo: a equipe usa uma interface simplificada para avaliação rápida (apenas cliques para 'Incluir/Incerto' vs. 'Excluir'). Um modelo de IA avalia as incertezas em segundo plano e envia apenas os candidatos limítrofes para verificação dupla aprofundada. Minimiza drasticamente a carga cognitiva e o tempo de leitura por resumo.
- 14 Pré-filtragem determinística via algoritmos de correspondência gemini-3.6-flash · dentro do escopo · 6/20 pontos (3 + 3) Filtros de busca conservadores e scripts separam antecipadamente os resultados claramente inadequados (por exemplo, desenho de estudo errado ou população não humana). Ambos os triadores verificam essas exclusões automatizadas apenas por meio de uma amostra representativa (por exemplo, 10%). Isso reduz o volume total a ser triado manualmente de forma compatível com o PRISMA e sem perda de sensibilidade.
Todas as ideias, completas e em ordem de classificação. A própria ideia do Claude participa anonimamente e em igualdade de condições. O tópico e o contexto foram enviados em inglês; as ideias que os membros escreveram em alemão são traduzidas aqui.
Cinco manchetes e títulos de áreas diferentes. Cada membro escreve uma variante, o rascunho do Claude participa, e ambos os membros avaliam as três anonimamente. Escolha uma.
Peça ao Kirat para escrever variantes de manchete para minha página de preços. Máx. 8 palavras, sem superlativos.
kirat_create perguntou ao conselho
A variante vencedora (17/20 pontos): "Get paid without Word—free for 14 days"
Meu próprio rascunho ficou em #2; os membros avaliaram as três anonimamente.
Nos bastidores
kirat_create O que o Claude envia ao Kirat
REGISTRADO EM 2026-10-13 · KIRAT_CREATE · MODO: VARIANTES · ESFORÇO: PADRÃO · $0.03
Brief: Manchete para a página de preços de uma pequena ferramenta de faturamento para freelancers (US$ 19 por mês, teste gratuito de 14 dias). Público: freelancers que hoje emitem faturas no Word ou Excel. Objetivo: fazer o teste parecer sem risco e que valha a pena. Formato: uma manchete, em inglês.
Critérios: máx. 8 palavras · concreta, sem superlativos · menciona tempo economizado ou recebimento de pagamento · sem pontos de exclamação
Resultado do conselho
- 1 "Get paid without Word—free for 14 days" gpt-5.6 · 17/20 pontos (9 + 8) Fala diretamente com usuários do Word, coloca o recebimento de pagamento em primeiro plano e torna o teste sem risco concreto.
- 2 "Send invoices in minutes. Get paid on time." claude · 17/20 pontos (8 + 9) O próprio rascunho do orquestrador.
- 3 "Replace Word and Excel. Get paid days faster." gemini-3.6-flash · 14/20 pontos (7 + 7) Abordar diretamente o fluxo de trabalho manual atual oferece um contraste imediato, enquadrando o teste como uma atualização rápida e sem risco para o fluxo de caixa, sem usar hype genérico.
Peça ao Kirat para escrever variantes de manchete para nossa landing page para lojas de móveis no WooCommerce. Máx. 10 palavras, sem jargão.
kirat_create perguntou ao conselho
A variante vencedora (18/20 pontos): "Losing furniture buyers to a slow, frustrating WooCommerce store?"
Meu próprio rascunho ficou em #3; os membros avaliaram as três anonimamente.
Nos bastidores
kirat_create O que o Claude envia ao Kirat
REGISTRADO EM 2026-10-13 · KIRAT_CREATE · MODO: VARIANTES · ESFORÇO: PADRÃO · $0.02
Brief: Manchete para a landing page de uma pequena agência digital sobre reconstruções de lojas para varejistas de móveis que usam WooCommerce. Público: proprietários de lojas de móveis de médio porte sem desenvolvedores internos. Objetivo: agendar uma verificação gratuita da loja. Formato: uma manchete, mercado alemão, mas escreva em inglês.
Critérios: máx. 10 palavras · nomeia a dor do leitor, não a agência · sem jargão como "headless" ou "omnichannel" · sem superlativos
Resultado do conselho
- 1 "Losing furniture buyers to a slow, frustrating WooCommerce store?" gemini-3.6-flash · 18/20 pontos (8 + 10) Mira diretamente a principal frustração do proprietário — vendas perdidas devido ao mau desempenho da loja — sem usar jargão técnico ou linguagem autoelogiosa de agência.
- 2 "Is your WooCommerce shop turning furniture buyers away?" gpt-5.6 · 17/20 pontos (9 + 8) Nomeia a dor central diretamente e fala com varejistas de móveis sem jargão.
- 3 "Fewer shop emergencies, more time for your furniture." claude · 11/20 pontos (7 + 4) O próprio rascunho do orquestrador.
Peça ao Kirat para escrever variantes de manchete para a nova página de pedidos de bolos da padaria. Curta, local, não como uma rede.
kirat_create perguntou ao conselho
A variante vencedora (19/20 pontos): "Your celebration cake, baked here for pickup."
Meu próprio rascunho ficou em #3; os membros avaliaram as três anonimamente.
Nos bastidores
kirat_create O que o Claude envia ao Kirat
REGISTRADO EM 2026-10-13 · KIRAT_CREATE · MODO: VARIANTES · ESFORÇO: PADRÃO · $0.02
Brief: Manchete para a nova página de pedidos online da padaria para bolos personalizados. Público: clientes locais que até agora pediam por telefone. Objetivo: fazer o pedido online parecer fácil e pessoal. Formato: uma manchete, mercado alemão, mas escreva em inglês.
Critérios: máx. 8 palavras · concreta, sem superlativos · menciona a retirada ou a ocasião · soa como uma padaria local, não uma rede
Resultado do conselho
- 1 "Your celebration cake, baked here for pickup." gpt-5.6 · 19/20 pontos (10 + 9) Calorosa, concreta e pessoal: "baked here" soa local, enquanto "for pickup" torna o processo online direto.
- 2 "Order your custom birthday cake, pick up fresh." gemini-3.6-flash · 16/20 pontos (8 + 8) A manchete nomeia especificamente a ocasião, bem como a retirada e, por meio da promessa de frescor, transmite qualidade artesanal local sem clichês impessoais.
- 3 "Your cake, your date. Order in two minutes." claude · 9/20 pontos (5 + 4) O próprio rascunho do orquestrador.
Peça ao Kirat para encontrar um título para minha proposta de endurecer os limites do faturamento dentro do monólito primeiro.
kirat_create perguntou ao conselho
Meu próprio rascunho venceu (19/20 pontos): "Fix billing's boundaries first, split it later if needed"
Nos bastidores
kirat_create O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_CREATE · MODO: VARIANTES · ESFORÇO: PADRÃO · $0,02
Briefing: Título para uma proposta interna de engenharia: reforçar as fronteiras do módulo de faturamento dentro do monólito antes de considerar um serviço separado. Público: 8 engenheiros e a liderança que quer menos incidentes. Objetivo: fazer a proposta ser lida e aprovada. Formato: um título, em inglês.
Critérios: máx. 10 palavras · declara a decisão, não apenas o tema · sem jargões da moda · compreensível para não engenheiros
Resultado do conselho
- 1 "Fix billing's boundaries first, split it later if needed" claude · 19/20 pontos (10 + 9) O próprio rascunho do orquestrador.
- 2 "Keep Billing Together, but Isolate It to Prevent Incidents" gpt-5.6 · 16/20 pontos (9 + 7) O título declara a decisão de manter o faturamento no monólito enquanto reforça suas fronteiras, e vincula essa escolha ao objetivo comum de menos incidentes.
- 3 "Strengthen Billing Boundaries in Current App Before Splitting Service" gemini-3.6-flash · 13/20 pontos (7 + 6) O título toma uma decisão clara de direção, evita jargão desnecessário como 'monólito' para a gestão e aborda diretamente o objetivo comum de estabilidade.
Deixe o Kirat encontrar um título para nosso artigo de métodos sobre um LLM como triador adicional. Preciso, sem exagero.
kirat_create perguntou ao conselho
A variante vencedora (18/20 pontos): "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews"
Meu próprio rascunho ficou em #2; os membros avaliaram as três anonimamente.
Nos bastidores
kirat_create O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_CREATE · MODO: VARIANTES · ESFORÇO: PADRÃO · $0,02
Briefing: Título para um artigo de métodos sobre o uso de um LLM como triador adicional em uma revisão sistemática na pesquisa em serviços de saúde. Público: pesquisadores e revisores de periódicos. Objetivo: preciso e citável, sem exagero. Formato: um título, pode incluir um subtítulo após dois-pontos, em inglês.
Critérios: máx. 20 palavras · nomeia o método e o contexto · sem afirmações além dos dados · sem palavras de exagero como "revolucionar"
Resultado do conselho
- 1 "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews" gpt-5.6 · 18/20 pontos (9 + 9) O título identifica o método de triagem, o contexto de revisão sistemática e o campo da pesquisa em serviços de saúde sem implicar desempenho ou benefício.
- 2 "An LLM as additional screener: a prospective comparison in a health services systematic review" claude · 16/20 pontos (9 + 7) O próprio rascunho do orquestrador.
- 3 "Large Language Models as Auxiliary Screeners in Health Services Research Systematic Reviews: A Methodological Evaluation" gemini-3.6-flash · 15/20 pontos (7 + 8) O título nomeia o campo de aplicação e a metodologia com precisão, evita palavras-gatilho e escolhe um tom factual e citável para um contexto de publicação científica.
Manchetes e títulos são exibidos como escritos, em inglês, conforme os briefings pediram. O raciocínio na entrada do Claude é o próprio rótulo do Kirat para ela. Raciocínios escritos em alemão são traduzidos aqui.
Cinco briefings de imagem de áreas diferentes. OpenAI e Google geram uma imagem cada, e ambos os membros avaliam as duas imagens anonimamente. Escolha uma.
Deixe o Kirat criar uma imagem hero para a landing page da minha ferramenta de faturamento: uma mesa de home office tranquila, sem tela legível.
kirat_image perguntou ao conselho
O júri escolheu a imagem do gpt-image-2 (18/20 pontos). Ambos os membros avaliaram as duas imagens anonimamente.
Nos bastidores
kirat_image O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_IMAGE · MODO: VARIANTES · PAISAGEM · ≈ $0,17
Briefing: Imagem hero para a landing page de uma pequena ferramenta de faturamento para freelancers: uma mesa de home office arrumada pela manhã com um laptop (tela virada para o lado ou desfocada, sem interface legível), uma xícara de café e um caderno de papel. Luz natural do dia, estilo de foto documental tranquila, sem texto, sem logos, sem rostos de pessoas.
Critérios: parece o espaço de trabalho de um freelancer real, não um escritório de banco de imagens · tranquilo e sem bagunça · deixa espaço calmo para uma manchete · sem texto, logos ou telas legíveis
Resultado do conselho

1 gpt-image-2 · 18/20 pontos (9 + 9)

2 gemini-3.1-flash-image · 13/20 pontos (6 + 7)
Deixe o Kirat criar uma foto de produto para a loja de móveis: uma mesa de jantar de carvalho com quatro cadeiras em uma sala de estar real.
kirat_image perguntou ao conselho
O júri escolheu a imagem do gemini-3.1-flash-image (18/20 pontos). Ambos os membros avaliaram as duas imagens anonimamente.
Nos bastidores
kirat_image O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_IMAGE · MODO: VARIANTES · PAISAGEM · ≈ $0,17
Briefing: Foto de produto para uma loja de móveis online: uma mesa de jantar de carvalho maciço com quatro cadeiras em uma sala de estar clara e realista da Europa Central. Luz natural do dia, estilo editorial de interiores, sem texto, sem logos, sem pessoas.
Critérios: a mesa é o assunto claro · textura e cor da madeira fiéis à realidade · parece uma casa real, não uma renderização 3D · sem texto ou logos
Resultado do conselho

1 gemini-3.1-flash-image · 18/20 pontos (9 + 9)

2 gpt-image-2 · 17/20 pontos (8 + 9)
Deixe o Kirat criar uma imagem hero para a página de pedidos de bolo: um bolo de aniversário em uma caixa, pronto para retirada.
kirat_image perguntou ao conselho
O júri escolheu a imagem do gpt-image-2 (17/20 pontos). Ambos os membros avaliaram as duas imagens anonimamente.
Nos bastidores
kirat_image O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_IMAGE · MODO: VARIANTES · PAISAGEM · $0,17
Briefing: Imagem hero para a nova página de pedidos online de bolos personalizados de uma pequena padaria local: um bolo de aniversário pronto sobre um balcão de madeira em uma padaria familiar clara e realista, pronto para retirada em uma caixa de papelão simples. Luz natural do dia, estilo de foto documental, sem texto, sem logos, sem rostos de pessoas.
Critérios: parece uma padaria local real, não uma rede ou banco de imagens · o bolo é o assunto claro · deixa espaço calmo para uma manchete · sem texto ou logos na imagem
Resultado do conselho

1 gpt-image-2 · 17/20 pontos (8 + 9)

2 gemini-3.1-flash-image · 7/20 pontos (4 + 3)
Deixe o Kirat criar uma imagem de capa para nosso post de blog sobre desembaraçar o faturamento do monólito. Abstrata e calma.
kirat_image perguntou ao conselho
O júri escolheu a imagem do gpt-image-2 (16/20 pontos). Ambos os membros avaliaram as duas imagens anonimamente.
Nos bastidores
kirat_image O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_IMAGE · MODO: VARIANTES · PAISAGEM · ≈ $0,17
Briefing: Imagem de capa para um post de blog interno de engenharia sobre desembaraçar um módulo de faturamento de um monólito: uma ilustração abstrata e calma de um bloco claramente delimitado separado de um aglomerado denso de blocos interconectados. Estilo flat, cores suaves, sem texto, sem logos.
Critérios: a ideia de uma fronteira clara é legível à primeira vista · calma, não dramática · funciona em tamanho pequeno · sem texto ou logos
Resultado do conselho

1 gpt-image-2 · 16/20 pontos (9 + 7)

2 gemini-3.1-flash-image · 10/20 pontos (6 + 4)
Deixe o Kirat criar uma imagem de capa para minha palestra sobre triagem assistida por IA. Séria, sem robôs.
kirat_image perguntou ao conselho
O júri escolheu a imagem do gpt-image-2 (18/20 pontos). Ambos os membros avaliaram as duas imagens anonimamente.
Nos bastidores
kirat_image O que o Claude envia ao Kirat
GRAVADO EM 2026-10-13 · KIRAT_IMAGE · MODO: VARIANTES · PAISAGEM · ≈ $0,17
Briefing: Imagem de capa para uma palestra sobre triagem assistida por IA em revisões sistemáticas: uma pilha arrumada de resumos de pesquisa impressos sobre uma mesa, alguns separados em duas bandejas, luz suave do dia, estilo de foto documental. Sem texto legível, sem logos, sem rostos de pessoas.
Critérios: séria e científica, sem exagero · sem robôs ou cérebros brilhantes · a ideia de triagem é visível · sem texto legível ou logos
Resultado do conselho

1 gpt-image-2 · 18/20 pontos (9 + 9)

2 gemini-3.1-flash-image · 9/20 pontos (5 + 4)
Imagens geradas por IA, reduzidas e sem outras edições. Custos marcados com ≈ vêm de execuções que rodaram em paralelo: o custo da própria imagem de cada execução mais uma parte igual das chamadas de avaliação. O ranking é uma pré-seleção, e a escolha final é sua. Avaliações escritas em alemão são traduzidas aqui.
02 — O problema
Um modelo, um ponto cego.
A autorrevisão bajula
Um modelo que verifica o próprio trabalho se acha convincente. Uma segunda passada do mesmo modelo não é uma verificação independente.
Mais rodadas não são a solução
O Kirat limita o debate a duas rodadas, no código, não em um prompt. Um modelo não consegue contornar o limite na conversa. Se ainda não houver maioria, você é avisado.
Famílias diferentes falham de formas diferentes
O Kirat coloca Claude, ChatGPT e Gemini na mesma pergunta e mostra a divisão — incluindo quem discordou, e por quê.
03 — Como funciona
Pergunte uma vez. Receba três posições e um voto.
Passo 1
Você pergunta no Claude
Em linguagem simples, como sempre: Pergunte ao conselho Kirat: Shopify ou WooCommerce para minha loja? Dê também sua própria posição. O Claude chama o Kirat por você.
Passo 2
Três posições independentes
ChatGPT e Gemini respondem cada um sem ver a resposta do outro. O Claude assume sua própria posição como terceiro membro.
Passo 3
Um voto, com a dissidência preservada
Se dois dos três concordam, essa é a visão majoritária. Você vê cada posição com seus motivos, e quem discordou. Sem maioria, o Kirat avisa, e a decisão é sua.
O Kirat também revisa código (cada achado é verificado pela outra família de modelos), classifica ideias, critica seus textos e compara imagens. A reprodução acima mostra tudo isso.
Não é preciso programar. Você instala uma extensão do Claude e cria uma chave de API na OpenAI e uma no Google; os passos de instalação estão nos detalhes abaixo.
As nove ferramentas e uma chamada de exemplo gravada →
04 — Preços
Uma compra para Claude Desktop e Claude Code.
Sem assinatura, sem licenças por usuário, sem conta conosco. Verifique onde o Kirat funciona antes de comprar:
Onde o Kirat funciona
Funciona em
- Conversas no Claude Desktop no macOS e no Windows
- Claude Code em um terminal, no VS Code ou na aba Code do Claude Desktop
- Sessões na nuvem do Claude Code, após uma configuração única por ambiente de nuvem Com limites: chaves armazenadas como segredos de rede permanecem ilegíveis (nos planos Team e Enterprise, um administrador pode precisar adicioná-las), chaves em variáveis de ambiente são legíveis por todos que usam o ambiente, e o orçamento diário conta por sessão.
Não funciona em
- Chat no navegador (claude.ai) ou nos aplicativos móveis do Claude
- Tarefas do Cowork que rodam na nuvem
- Algumas configurações corporativas: proxies que fazem login com sua conta do Windows (NTLM/Kerberos), e organizações que restringem extensões do Desktop a uma lista de permissões Consulte sua equipe de TI primeiro.
Onde funciona, em detalhes · Todos os limites da nuvem
Extensão do Desktop + plugin do Claude Code
Kirat
$99
Preço de lançamento de $99 — primeiros 50 compradores
Depois $149. Compra única. Um download em ZIP com os dois formatos. Você também precisa de uma chave de API da OpenAI e uma do Gemini: o que você pergunta vai para ambos os provedores, e eles cobram por uso.
- 01Extensão do Claude Desktop e plugin do Claude Code, em um único download
- 02Script de configuração para sessões na nuvem do Claude Code
- 03Todas as nove ferramentas: votação, revisão de código, classificação de ideias, crítica de textos, comparação de imagens e mais
- 04Controle de custos: um orçamento diário ($5 por padrão) que retém chamadas que poderiam ultrapassá-lo. Melhor esforço, então também defina limites nos provedores
- 05Licença para uma pessoa, nos seus próprios dispositivos e ambientes de nuvem
- 06Atualizações de compatibilidade quando possível — gratuitas, mas sem garantia Roda no Claude Desktop (macOS/Windows) e no Claude Code; sessões em nuvem do Claude Code com uma configuração única — não no chat do navegador ou do celular. Onde roda · Limites da nuvem
Blueprint
$49
Apenas documentos — para construir ou adaptar seu próprio servidor de conselho com um agente de programação. Não é necessário para usar o Kirat.
- 01A especificação: requisitos estruturados para as ferramentas
- 02As decisões de arquitetura, com o raciocínio por trás de cada uma
- 03A lista de verificação de aceitação contra a qual um agente pode se verificar
- 04Os dados de benchmark por trás dos números deste site
Sem código, sem extensão instalável.
Compra única · Pagamento via Lemon Squeezy (merchant of record), IVA tratado no checkout · Reembolsos: consulte os Termos
O uso da API é pago diretamente à OpenAI e ao Google, nas suas contas — US$ 0,02–US$ 0,15 por decisão do conselho nas nossas medições.
O Kirat não é para você se…
- —você usa o Claude apenas como chat no navegador ou no celular. O Kirat roda no Claude Desktop (macOS/Windows) e no Claude Code, e em sessões em nuvem do Claude Code com uma configuração única — não nesses chats.
- —você precisa de um serviço hospedado ou de qualquer tipo de suporte.
- —você não quer contas de API e cobrança em dois provedores.
- —você toma poucas decisões por mês e fica feliz em comparar respostas manualmente em chats separados.
- —você quer uma resposta que soe certa. O trabalho de um conselho é mostrar a divisão, e às vezes a divisão é a resposta.
- —seus dados não podem ir para a OpenAI ou o Google. Tudo o que você fornece ao Kirat vai para ambos, nas suas contas e sob os termos deles.
05 — Perguntas
Antes de comprar.
Como isso é diferente do llm-council ou do PAL MCP?
Veja os dois primeiro. O llm-council é um aplicativo web de código aberto; seu autor o descreve como sem suporte por design. O PAL MCP é um servidor MCP gratuito e de código aberto que você instala pelo terminal; ele suporta muitos provedores e tem sua própria ferramenta de consenso. Verifique o estado atual deles. Se um deles cobre o que você precisa, use-o.
A diferença do Kirat é o pacote: ele é instalado pelo próprio diálogo de extensões do Claude Desktop com suas chaves no armazenamento seguro do sistema operacional, e traz uma proteção de orçamento com teto diário, limite de duas rodadas, desempate por domínio, tickets em segundo plano, tratamento de falhas, 345 testes, campos de resultado em inglês e uso em linguagem natural.
Preciso ser desenvolvedor?
Não. Se você consegue instalar uma extensão do Claude e criar duas chaves de API, você consegue usar o Kirat. Você pergunta ao Claude em linguagem natural — Pergunte ao conselho Kirat: Postgres ou SQLite? Dê também a sua própria posição. — e o Claude chama as ferramentas.
Do que eu preciso?
Claude Desktop no macOS ou Windows. Ele já vem com seu próprio Node, então você não instala mais nada. Ou Claude Code com Node.js 20 ou superior. Para sessões em nuvem do Claude Code, uma configuração única do seu ambiente de nuvem (veja abaixo).
Além disso, uma chave de API da OpenAI e uma chave de API do Google Gemini, ambas com cobrança habilitada. O Kirat também roda com uma chave: o conselho então tem um membro externo, e todo resultado indica a chave ausente.
Quanto custa rodar, e o que impede uma conta descontrolada?
Você paga à OpenAI e ao Google diretamente pelo que usar. Nas nossas medições, uma decisão do conselho custa $0.02–$0.15, dependendo do nível de esforço e do tamanho da entrada, e leva de 8 segundos a 3 minutos. A geração de imagens custa cerca de $0.05–$0.20 por chamada.
A proteção de orçamento reserva o custo do pior caso antes de cada chamada e bloqueia chamadas que possam exceder seu orçamento diário — US$ 5 por dia UTC por padrão, ajustável. É best-effort, então também defina limites de gastos nos provedores. kirat_status mostra orçamento e gastos, e não custa nada.
Para onde vão meus dados e chaves?
Seus dados: tudo o que você fornece ao Kirat (perguntas, contexto, código, imagens) vai diretamente para a OpenAI e o Google, nas suas contas e sob os termos deles — do seu computador, ou em sessões em nuvem do Claude Code a partir do seu próprio ambiente de nuvem, através do proxy de rede da Anthropic para esse ambiente. Não há servidor do Kirat, nem conta conosco, nem telemetria. Nunca vemos suas chaves nem seus dados.
Suas chaves: você as insere no próprio diálogo de instalação ou configurações do Claude. O Claude Desktop as armazena no armazenamento seguro do seu sistema operacional (Keychain do macOS, Gerenciador de Credenciais do Windows). O Claude Code as armazena no Keychain do macOS; no Windows e no Linux em ~/.claude/.credentials.json, legível apenas pelo seu usuário. Recomendamos um projeto separado no provedor com um limite de gastos.
Em sessões em nuvem do Claude Code: o Kirat roda no seu ambiente de nuvem. Você armazena as chaves lá como segredos de rede: o proxy da Anthropic as adiciona às requisições do Kirat na saída, então ninguém em uma sessão consegue lê-las, nem mesmo o Claude. Nos planos Team e Enterprise, dependendo do seu papel, um administrador da organização pode precisar adicioná-las. Como alternativa, as chaves podem ser variáveis de ambiente desse ambiente, legíveis por todos que o usam.
No seu computador: o Kirat mantém uma pasta .kirat na sua pasta pessoal com o contador de custo diário, o log de custos, os últimos 20 resultados (eles contêm suas perguntas e respostas), o log de decisões delegadas e imagens geradas. Você pode apagá-la a qualquer momento. Todas as sessões do Kirat no computador a compartilham, Desktop e Code.
Como o Kirat funciona em sessões em nuvem do Claude Code, e quais são os limites?
Sessões em nuvem — sessões em nuvem da aba Code, Claude Code na web ou no aplicativo móvel — rodam nos servidores da Anthropic em um ambiente de nuvem. A extensão no seu computador não consegue alcançá-las. Em vez disso, você configura o ambiente de nuvem uma vez:
- cole o bloco do download (
cloud/setup-script.txt) no topo do script de configuração do ambiente; - adicione suas duas chaves — como segredos de rede para
api.openai.comegenerativelanguage.googleapis.com(nos planos Team e Enterprise, um administrador pode precisar adicioná-las; o guia no download tem os detalhes); caso contrário, como variáveis de ambiente, de preferência nomeadasKIRAT_OPENAI_API_KEYeKIRAT_GEMINI_API_KEY, que não colidem com oOPENAI_API_KEYde um projeto (o Kirat também aceitaOPENAI_API_KEYeGEMINI_API_KEY); - acesso à rede: se for Full, não há nada a mudar; caso contrário, defina como Custom (em aplicativos mais novos: Limited) com a lista padrão do gerenciador de pacotes, mais o host de download do Kirat (com chaves em variáveis de ambiente, também
api.openai.com).
O script baixa exatamente a sua versão do Kirat, verifica seu checksum SHA-256 e a instala. É uma configuração única, não um clique. Testamos em um contêiner de nuvem.
Os limites: chaves em variáveis de ambiente são legíveis por todos que usam o ambiente (segredos de rede as mantêm ilegíveis). Toda sessão em nuvem começa do zero, então o orçamento diário do Kirat conta por sessão — defina limites de gastos na OpenAI e no Google; na nuvem eles são seu teto real. Tarefas em segundo plano e resultados recentes terminam com a sessão. O acesso à rede do ambiente deve permitir o host de download do Kirat, e api.openai.com também, se suas chaves forem variáveis de ambiente (o Gemini é coberto pela lista padrão). Se a configuração falhar, a sessão ainda inicia, só que sem o Kirat — e o estado de falha pode ficar em cache para novas sessões até você editar o script de configuração (qualquer alteração faz novas sessões executá-lo novamente).
O endereço de download no script de configuração faz parte da sua compra, como o ZIP; não o publique. A licença cobre seus próprios ambientes de nuvem. Um ambiente de nuvem compartilhado com outras pessoas exige uma licença para cada pessoa.
Quais modelos ele usa? E se um provedor aposentar um?
Por padrão, gpt-5.6 da OpenAI e gemini-3.6-flash do Google, com o Claude como terceiro votante.
Nomes de modelos e preços são configurações. Se um provedor aposentar um modelo, você insere o novo nome e seus dois preços. Nenhuma atualização necessária.
O Claude Desktop diz que a extensão não é verificada pela Anthropic. Isso é um problema?
Esse aviso é esperado. O Claude Desktop o exibe para extensões instaladas a partir de um arquivo, e o Kirat é instalado a partir de um arquivo — ele não é verificado nem assinado pela Anthropic.
Como funcionam as atualizações?
No Claude Desktop, instale o novo .mcpb da mesma forma que o primeiro. Suas chaves e configurações são mantidas.
Atualizações de compatibilidade são gratuitas quando possível, mas não há garantia. Versões novas maiores podem ser vendidas separadamente.
Tenho suporte?
Não. O Kirat vem sem suporte, ajuda de instalação ou consultoria. Pagamento e recibos são tratados pela Lemon Squeezy. Se o Kirat não rodar em uma configuração suportada, você recebe seu dinheiro de volta; consulte os Termos.
O que a licença permite?
Uma pessoa, em qualquer número dos seus próprios dispositivos e nos seus próprios ambientes de nuvem. Um ambiente de nuvem compartilhado com outras pessoas exige uma licença para cada pessoa. Sem revenda e sem redistribuição. O Kirat é software proprietário, não de código aberto.
Usar o que o conselho produz no seu próprio trabalho, incluindo trabalho comercial, é permitido. Os termos completos estão nos Termos.
Para que serve o Blueprint? Eu preciso dele?
Você não precisa dele para usar o Kirat. O Blueprint é para quem quer construir ou adaptar seu próprio servidor de conselho com um agente de programação.
São apenas documentos — sem código, sem extensão instalável: a especificação (requisitos estruturados para as ferramentas), as decisões de arquitetura com o raciocínio por trás de cada uma, a lista de verificação de aceitação contra a qual um agente pode se verificar, e os dados de benchmark por trás dos números deste site. Não há preço de pacote.
06 — Detalhes
Os detalhes, para constar.
Instalação, em todos os lugares onde o Kirat roda e os limites da nuvem, as nove ferramentas e as evidências por trás dos números. Abra o que precisar.
Instale o Kirat e conecte suas chaves de API
O Kirat não é um serviço no qual você se cadastra. Ele roda no seu computador (ou no seu próprio ambiente de nuvem do Claude Code), dentro do Claude, com suas próprias chaves de API. Não há servidor do Kirat nem conta conosco. Tudo o que você fornece ao Kirat vai diretamente para a OpenAI e o Google, nas suas contas — do seu computador, ou em sessões em nuvem do Claude Code a partir do seu próprio ambiente de nuvem, através do proxy de rede da Anthropic para esse ambiente. Nunca vemos suas chaves nem suas perguntas.
Acabou de comprar o Kirat? Siga o guia de configuração passo a passo: primeiro qual Claude você usa, depois apenas os passos para ele.
Passo 1 · a parte lenta
Duas chaves de API
Uma chave de API da OpenAI e uma chave de API do Google Gemini, ambas com cobrança habilitada. O que leva tempo aqui são os formulários de cadastro e cobrança dos provedores. Um projeto separado no provedor com um limite de gastos é uma boa ideia.
Permissões mínimas (opcional): na OpenAI, uma chave restrita é suficiente, com “List models” em Read e “Model capabilities” em Request, todo o resto em None. Uma chave do Gemini do Google AI Studio já é restrita à API Gemini; restrinja uma chave do console do Google Cloud à API Generative Language.
Já tem as duas chaves? Vá para o passo 2.
Passo 2
Instalar
Claude Desktop: descompacte o download. Abra Configurações → Extensões → Configurações avançadas → Instalar extensão… e escolha o arquivo .mcpb. Insira as duas chaves no diálogo. O Desktop já vem com seu próprio Node, então não há mais nada a instalar.
Claude Code: descompacte o download e mova a pasta kirat extraída para a sua pasta pessoal, de modo que ~/kirat/claude-code exista. Depois execute os comandos abaixo. Requer Node.js 20 ou superior.
Sessões em nuvem do Claude Code: uma configuração única do seu ambiente de nuvem, com limites — veja abaixo.
Passo 3
Perguntar
Verifique a instalação: Use a extensão Kirat e chame kirat_status. Ela também verifica as duas chaves de API com a OpenAI e o Google, sem custo.
Depois faça uma pergunta real: Pergunte ao conselho Kirat: Postgres ou SQLite? Dê também a sua própria posição.
Ou comece a partir de um modelo: no Claude Desktop, pelo botão + na caixa de mensagem; no Claude Code, com o plugin como /kirat:decide, /kirat:review, /kirat:critique ou /kirat:brainstorm. Em sessões na nuvem do Claude Code, eles são chamados de /mcp__kirat__decide, /mcp__kirat__review, /mcp__kirat__critique e /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
O Claude Desktop avisará que a extensão não foi verificada pela Anthropic. Esse aviso é esperado para toda extensão instalada a partir de um arquivo — consulte as Perguntas Frequentes.
Onde ele roda, em detalhes, com os limites da nuvem As nove ferramentas e uma chamada de exemplo registrada
Você pergunta em linguagem natural. O Claude faz a chamada:
// 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
Outros resultados: needs_human (sem maioria — você decide), domain_decision, limited, budget_exhausted. Os valores de confiança são a autoavaliação de cada modelo.
Fig. 6.3 — Lista de peças
Nove ferramentas que o Claude chama
7 com custos de API · 2 sem
| Pos. | Ferramenta | O que faz | Custos de API |
|---|---|---|---|
| 01 | kirat_vote | Decisão por votação: cada membro assume uma posição, depois uma maioria de dois terços, o responsável pelo domínio ou needs_human. | Custos de API |
| 02 | kirat_review | Revisão de código. Cada achado é verificado pela outra família de modelos. | Custos de API |
| 03 | kirat_create | Critique seu rascunho, deixe um membro rascunhar ou classifique variantes curtas. | Custos de API |
| 04 | kirat_brainstorm | Ideias divergentes em três trilhas — dentro do briefing, vizinha, quebra-regras — classificadas anonimamente. | Custos de API |
| 05 | kirat_decide | Decisão delegada para escolhas de trabalho reversíveis, com veto e um limite diário. | Custos de API |
| 06 | kirat_ask | Consulte exatamente um membro. Sem conselho. | Custos de API |
| 07 | kirat_image | Geração de imagens pelos dois provedores, avaliada por um júri anônimo. | Custos de API |
| 08 | kirat_result | Busque tarefas em segundo plano e resultados recentes. | nenhum |
| 09 | kirat_status | Orçamento, gastos, membros disponíveis, configurações, verificação de chave gratuita. | nenhum |
“Custos de API” significa que a ferramenta chama a OpenAI e o Google com suas próprias chaves, e você paga diretamente a esses provedores. A reprodução acima mostra quanto custou cada execução. O Kirat em si não cobra nada por uso: você o compra uma vez. kirat_image e a entrada de imagens funcionam com arquivos no seu computador, então combinam melhor com o Claude Code.
Evidências: decisões registradas, custos medidos, falhas documentadas