Kirat - Multi Model AI Council
officielUn seul IA vous donne une seule ligne de raisonnement. Kirat est une extension Claude Desktop et un plugin Claude Code qui ajoute ChatGPT et Gemini en tant que conseil : positions indépendantes, vote avec dissidence conservée, et revue de code où chaque constat est vérifié par une deuxième famille de modèles. Apportez vos propres clés API. Payant, paiement unique.
Que pouvez-vous faire avec Kirat Multi Model AI Council MCP ?
- Obtenir un vote multi-modèle sur une décision — Demandez à
kirat_votede faire examiner par le conseil une question commerciale ou technique avec des options et un contexte. - Examiner le code pour la sécurité et l’exactitude — Utilisez
kirat_reviewpour obtenir des résultats recoupés avec des niveaux de gravité et des correctifs suggérés avant la mise en production. - Voir la dissidence et le raisonnement derrière une décision — Obtenez les positions complètes de chaque modèle, y compris le vote minoritaire, avec des scores de confiance et la justification.
Documentation
01 — Replay
Regardez le conseil travailler.
Enregistrements réels des outils de Kirat, réalisés le 13 octobre 2026 avec la version que vous achetez. Choisissez un outil et regardez le conseil travailler : positions indépendantes, vérifications croisées, classements anonymes et la dissidence. Ceci est une relecture : rien de ce que vous cliquez ici n’appelle un modèle, et rien ne quitte cette page. Le chat est rédigé à des fins d’illustration et ne fait que reformuler le résultat enregistré ; ce que Claude a envoyé à Kirat et ce qui est revenu sont affichés tels quels sous « Dans les coulisses ».
Cinq questions de domaines différents. Choisissez-en une.
Laissez Kirat voter sur ceci : Je gère seul une petite SaaS B2B. Devrais-je ajouter un palier gratuit ?
kirat_vote a interrogé le conseil
Le conseil a décidé (majorité 2:1) : Rester payant uniquement, ne rien changer.
Mon propre vote était la dissidence : « Rester payant uniquement, prolonger l’essai à 30 jours ». Il reste consigné avec son raisonnement, afin que vous puissiez l’évaluer vous-même.
Dans les coulisses
kirat_vote Ce que Claude envoie à Kirat
Question : Je gère seul une petite SaaS B2B. Devrais-je ajouter un palier gratuit ?
ENREGISTRÉ 2026-10-13 · KIRAT_VOTE · EFFORT : STANDARD · 1 TOUR
Contexte envoyé : Développeur solo. Outil de facturation pour freelances, 19 USD par mois, essai gratuit de 14 jours, 30 clients payants après 5 mois. Les inscriptions proviennent surtout de deux articles de blog bien classés sur Google. Environ 12 % des essais se convertissent. Le support prend déjà environ 5 heures par semaine. Le développeur a un emploi principal et environ 10 heures par semaine pour le produit.
Options : Ajouter un palier gratuit · Rester payant uniquement, prolonger l’essai à 30 jours · Rester payant uniquement, ne rien changer
Résultat du conseil
gpt-5.6 confiance 88
Rester payant uniquement, ne rien changerUn palier gratuit augmenterait probablement les utilisateurs non payants et la charge de support, qui consomme déjà la moitié des 10 heures disponibles par semaine. Un taux de conversion d’essai de 12 % est respectable, donc rien n’indique clairement que la durée de l’essai soit le goulot d’étranglement. Conservez le modèle actuel et consacrez le temps limité à réduire les besoins de support et à élargir l’acquisition au-delà de deux articles de blog.
gemini-3.6-flash confiance 90
Rester payant uniquement, ne rien changerAvec seulement 10 heures par semaine, le support prend déjà 50 % de la capacité. Un palier gratuit augmenterait le volume de support des utilisateurs non payants sans aucun contrôle. Un taux de conversion d’essai de 12 % est déjà solide ; le goulot d’étranglement est le trafic, pas le modèle tarifaire.
claude (troisième votant) confiance 58
Rester payant uniquement, prolonger l’essai à 30 joursUn palier gratuit ajoute surtout de la charge de support, qui représente déjà la moitié du temps disponible. La facturation est mensuelle, donc un essai de 14 jours peut se terminer avant qu’un freelance n’envoie une deuxième facture et ne perçoive la valeur. Un essai de 30 jours couvre un cycle de facturation complet sans ajouter d’utilisateurs gratuits permanents.Dissidence, consignée
Décision Rester payant uniquement, ne rien changer Voie majorité 2:1 Coût 0,015 USD
Laissez Kirat voter sur ceci : La boutique en ligne de notre client doit être reconstruite. La reconstruire sur WooCommerce ou migrer vers Shopify ?
kirat_vote a interrogé le conseil
Le conseil a décidé (unanime 3:0) : Migrer vers Shopify.
Les trois positions, y compris la mienne, vont dans le même sens. Chacune est accompagnée de son raisonnement.
Dans les coulisses
kirat_vote Ce que Claude envoie à Kirat
Question : La boutique en ligne de notre client doit être reconstruite. La reconstruire sur WooCommerce ou migrer vers Shopify ?
ENREGISTRÉ 2026-10-13 · KIRAT_VOTE · EFFORT : STANDARD · 1 TOUR
Contexte envoyé : Nous sommes une petite agence digitale. Le client vend environ 1 800 produits de mobilier en Allemagne, en Autriche et en Suisse, compte 3 employés et aucun développeur interne. La boutique actuelle est une installation WooCommerce auto-hébergée, vieille de 6 ans, avec 31 plugins, des pages lentes et deux incidents de sécurité au cours de la dernière année. Le chiffre d’affaires est d’environ 1,2 million EUR par an. Le client souhaite une maintenance réduite et moins d’urgences ; il utilise un ERP local qui exporte les données produits en CSV. Budget pour la reconstruction : 25 000 EUR.
Options : Reconstruire sur WooCommerce · Migrer vers Shopify
Résultat du conseil
gpt-5.6 confiance 89
Migrer vers ShopifyShopify correspond mieux aux objectifs principaux du client : maintenance réduite, moins d’urgences de sécurité et aucun besoin de développeur interne. Un catalogue de 1 800 produits et un flux ERP basé sur CSV sont gérables, et le budget de 25 000 EUR devrait couvrir une migration disciplinée ainsi que la configuration fiscale, de paiement et juridique spécifique à la région DACH. Les compromis sont les coûts récurrents d’applications/plateforme, une flexibilité backend réduite et la nécessité de valider le flux d’import ERP et les variantes spécifiques au mobilier avant de s’engager. Reconstruire sur WooCommerce pourrait préserver la flexibilité, mais cela maintiendrait la responsabilité de l’hébergement, des mises à jour, de la compatibilité des plugins et de la sécurité—exactement la charge opérationnelle que le client veut réduire.
gemini-3.6-flash confiance 90
Migrer vers ShopifySans développeur interne, avec 3 employés et un historique d’incidents de sécurité, Shopify réduit considérablement la charge de maintenance et les risques de sécurité. Un budget de 25 000 EUR est suffisant pour une migration Shopify incluant l’intégration ERP CSV, alors que reconstruire sur WooCommerce perpétuerait des coûts de maintenance élevés et des risques d’urgence continus.
claude (troisième votant) confiance 72
Migrer vers ShopifySans développeur interne, avec 31 plugins et deux incidents de sécurité, le vrai problème du client est la maintenance, pas les fonctionnalités. Shopify élimine l’hébergement, les mises à jour et la plupart du travail de sécurité ; l’import CSV des produits depuis l’ERP est standard. Le compromis réside dans les frais de transaction et d’applications et une flexibilité réduite, ce qui importe moins que la stabilité à cette échelle.
Décision Migrer vers Shopify Voie unanime 3:0 Coût 0,015 USD
Laissez Kirat voter sur ceci : Une boulangerie locale veut plus de précommandes de gâteaux. Où devraient aller les 3 000 EUR suivants en premier ?
kirat_vote a interrogé le conseil
Le conseil a décidé (unanime 3:0) : Une vraie page de commande en ligne.
Les trois positions, y compris la mienne, vont dans le même sens. Chacune est accompagnée de son raisonnement.
Dans les coulisses
kirat_vote Ce que Claude envoie à Kirat
Question : Une boulangerie locale veut plus de précommandes de gâteaux. Où devraient aller les 3 000 EUR suivants en premier ?
ENREGISTRÉ 2026-10-13 · KIRAT_VOTE · EFFORT : STANDARD · 1 TOUR
Contexte envoyé : Boulangerie avec 6 employés dans une ville allemande de 40 000 habitants. Les gâteaux sur mesure et les précommandes offrent la meilleure marge. Aujourd’hui, les commandes arrivent uniquement par téléphone et e-mail ; le site web affiche les horaires d’ouverture et un formulaire de contact, rien pour commander. La fiche Google Business a 4,7 étoiles sur 120 avis. Aucune publicité payante jusqu’ici. Budget : 3 000 EUR pour le prochain trimestre, le propriétaire a peu de temps.
Options : Google Ads · Une vraie page de commande en ligne · Répartir également entre les deux
Résultat du conseil
gpt-5.6 confiance 94
Une vraie page de commande en ligneCorrigez d’abord le goulot d’étranglement : actuellement, les clients intéressés ne peuvent pas précommander facilement ni de manière structurée. Une page de commande simple et adaptée au mobile avec sélection de gâteaux, date de retrait, options de personnalisation, prix ou acompte, et confirmation, exploite la forte visibilité locale déjà existante et réduit le travail par téléphone et e-mail. Google Ads sans processus de commande fiable enverrait du trafic payant dans un parcours de conversion faible. Après quelques semaines de commandes mesurables, un budget publicitaire ultérieur pourra être dépensé de manière plus ciblée.
gemini-3.6-flash confiance 90
Une vraie page de commande en ligneSans parcours de commande numérique, les publicités ne créent que davantage de travail manuel chronophage par téléphone et e-mail, que le propriétaire peut difficilement gérer. De plus, le profil Google solide (4,7 étoiles) convertira bien mieux le trafic organique qu’il apporte déjà avec une vraie page de commande, immédiatement, avant que de l’argent ne soit investi dans des publicités.
claude (troisième votant) confiance 74
Une vraie page de commande en ligneLes publicités ne sont rentables que si le clic peut se transformer en commande. Actuellement, chaque visiteur doit appeler ou envoyer un e-mail, donc le trafic payant fuirait. Une page de commande avec choix de produits, dates de retrait et prépaiement convertit la demande déjà apportée par le profil 4,7 étoiles et rend les publicités ultérieures mesurables.
Décision Une vraie page de commande en ligne Voie unanime 3:0 Coût 0,012 USD
Laissez Kirat voter sur ceci : Extraire notre module de facturation dans un service séparé maintenant, ou durcir d’abord ses limites dans le monolithe ?
kirat_vote a interrogé le conseil
Le conseil a décidé (unanime 3:0) : Durcir les limites dans le monolithe d’abord.
Les trois positions, y compris la mienne, vont dans le même sens. Chacune est accompagnée de son raisonnement.
Dans les coulisses
kirat_vote Ce que Claude envoie à Kirat
Question : Extraire notre module de facturation dans un service séparé maintenant, ou durcir d’abord ses limites dans le monolithe ?
ENREGISTRÉ 2026-10-13 · KIRAT_VOTE · EFFORT : STANDARD · 1 TOUR
Contexte envoyé : Équipe de 8 ingénieurs. Un monolithe TypeScript, environ 60 000 lignes, une base de données Postgres, déployé plusieurs fois par jour. Le module de facturation change chaque semaine et a causé 5 des 8 derniers incidents de production, principalement parce que d’autres modules lisent et écrivent directement dans les tables de facturation. Personne dans l’équipe n’a fait fonctionner un système distribué en production. La direction veut moins d’incidents d’ici deux trimestres.
Options : Extraire la facturation dans un service maintenant · Durcir les limites dans le monolithe d’abord
Résultat du conseil
gpt-5.6 confiance 94
Durcir les limites dans le monolithe d’abordLes incidents sont principalement causés par un accès non contrôlé à la base de données, pas par l’absence de frontière réseau. Faites respecter la propriété de la facturation dans le monolithe : supprimez l’accès direct aux tables, exposez une API interne étroite, ajoutez des permissions de base de données ou des contrôles au niveau du schéma, et ajoutez des tests de contrat et d’intégration. Cela cible rapidement le mode de défaillance dans la fenêtre de deux trimestres. Extraire maintenant ajouterait du déploiement, de l’observabilité, des nouvelles tentatives, de la cohérence des données et de la complexité opérationnelle à une équipe sans expérience des systèmes distribués. Une fois les chemins d’accès et la propriété des données explicites, l’extraction devient plus sûre et peut être reconsidérée si une mise à l’échelle ou un déploiement indépendant reste pertinent.
gemini-3.6-flash confiance 90
Durcir les limites dans le monolithe d’abordLa cause principale des pannes est l’accès direct des autres modules aux tables de facturation dans la base de données. Durcir les limites du module résout ce problème directement dans le monolithe existant. Comme l’équipe de 8 personnes n’a aucune expérience des systèmes distribués, extraire le module maintenant créerait de nouveaux risques et mettrait en danger l’objectif de réduire les incidents d’ici deux trimestres.
claude (troisième votant) confiance 76
Durcir les limites dans le monolithe d’abordLes incidents viennent d’autres modules qui touchent directement aux tables de facturation. Une séparation en service imposerait aussi cette frontière, mais elle ajoute des pannes réseau, des transactions distribuées et un nouveau travail opérationnel pour une équipe sans cette expérience. Faire respecter une API de module et la propriété des tables dans le monolithe corrige la cause plus rapidement et garde l’option d’extraction ouverte pour plus tard.
Décision Durcir les limites dans le monolithe d’abord Voie unanime 3:0 Coût 0,014 USD
Laissez Kirat voter sur ceci : Dans notre revue systématique, un seul passage de sélection par LLM peut-il remplacer le deuxième évaluateur humain ?
kirat_vote a interrogé le conseil
Le conseil a décidé (unanime 3:0) : Utiliser le LLM comme évaluateur supplémentaire ; les humains résolvent les conflits.
Les trois positions, y compris la mienne, vont dans le même sens. Chacune est accompagnée de son raisonnement.
Dans les coulisses
kirat_vote Ce que Claude envoie à Kirat
Question : Dans notre revue systématique, un seul passage de sélection par LLM peut-il remplacer le deuxième évaluateur humain ?
ENREGISTRÉ 2026-10-13 · KIRAT_VOTE · EFFORT : STANDARD · 1 TOUR
Contexte envoyé : Sélection par titre et résumé d’environ 3 000 enregistrements pour une revue systématique en recherche sur les services de santé, prévue pour publication. Protocole actuel : deux évaluateurs humains indépendants, conflits résolus par discussion. Le temps du personnel est limité. La revue suit PRISMA, et les évaluateurs de la revue demanderont comment la sélection a été effectuée. Manquer une étude pertinente (exclusion fausse) est pire que d’inclure une étude non pertinente. Options : Oui, remplacer le deuxième évaluateur humain · Utiliser le LLM comme évaluateur supplémentaire ; les humains résolvent les conflits · Non, conserver deux évaluateurs humains et aucun LLM
Résultat du conseil
gpt-5.6 confiance 94
Utiliser le LLM comme évaluateur supplémentaire ; les humains résolvent les conflitsUn seul passage du LLM ne devrait pas remplacer un dépistage humain indépendant lorsque les fausses exclusions sont le risque principal : la performance peut varier selon le sujet, l'invite et la version du modèle, et les erreurs peuvent être systématiques. Utilisez-le pour prioriser les enregistrements ou signaler les désaccords, mais exigez une résolution humaine des conflits et une confirmation humaine des exclusions. Documentez le modèle, la version, l'invite, l'échantillon de validation et le flux de décision pour le rapport PRISMA et la reproductibilité.
gemini-3.6-flash confiance 88
Utiliser le LLM comme évaluateur supplémentaire ; les humains résolvent les conflitsUne approche hybride réduit considérablement la charge de travail humaine pour 3 000 titres et résumés, tout en maintenant la rigueur méthodologique exigée par PRISMA et les pairs évaluateurs. Comme les fausses exclusions doivent être évitées, le fait que les humains résolvent chaque divergence (ou l'utilisation d'une approche d'invite très sensible) garantit qu'aucune étude pertinente n'est perdue.
claude (troisième votant) confiance 70
Utiliser le LLM comme évaluateur supplémentaire ; les humains résolvent les conflitsLes fausses exclusions sont l'erreur coûteuse, et le rappel du LLM lors du dépistage varie selon le sujet et l'invite. Remplacer le deuxième humain supprime le contrôle qui détecte ces erreurs et est difficile à défendre auprès des évaluateurs de revues. Ajouter le LLM comme troisième évaluateur et résoudre les conflits par des humains maintient le protocole défendable et signale toujours les omissions probables.
Décision Utiliser le LLM comme évaluateur supplémentaire ; les humains résolvent les conflits Voie unanime 3:0 Coût 0,019 $
Enregistré le 13 octobre 2026 avec kirat_vote au niveau d'effort standard ; chaque session a pris moins de 20 secondes et coûté moins de deux cents. Les questions, options et le contexte sont affichés exactement tels qu'envoyés, le raisonnement en entier. Gemini a répondu quatre fois en allemand et ChatGPT une fois ; ces réponses sont traduites ici. Dans la question du niveau gratuit, Claude a perdu le vote 2:1, et son objection est restée au dossier. Les valeurs de confiance sont les auto-évaluations de chaque modèle.
Cinq extraits de code de différents domaines, chacun envoyé exactement tel quel. ChatGPT et Gemini examinent en parallèle, Claude ajoute deux constatations de son cru, et chaque constatation est vérifiée par l'autre famille de modèles. Seules les constatations confirmées comptent. Choisissez-en un.
Demandez à Kirat d'examiner notre webhook de paiement Stripe pour la sécurité et l'exactitude avant de le publier.
kirat_review a demandé au conseil
Kirat a trouvé 14 problèmes confirmés (4 × critiques, 4 × élevés, 6 × moyens). Chaque constatation a été recoupée par l'autre famille de modèles.
Commencez par ceux en haut de la liste ; chacun est accompagné d'un correctif suggéré.
En coulisses
kirat_review Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_REVIEW · EFFORT : STANDARD · 14 CONFIRMÉS, 0 REJETÉ · 0,14 $
Objectif : sécurité et exactitude d'un webhook de paiement
Code envoyé :
// 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;
Résultat du conseil
- critique
Le webhook traite le corps de la requête sans vérifier la signature Stripe. Tout appelant externe peut donc envoyer des événements
invoice.paid\oucustomer.subscription.deleted\falsifiés et déverrouiller ou rétrograder des comptes utilisateurs. L'analyseur JSON ignore également le corps brut non modifié que la vérification de la signature Stripe exige. Correctif : Utilisezexpress.raw({ type: 'application/json' })\pour cette route et appelezstripe.webhooks.constructEvent(req.body, req.headers\['stripe-signature'\], webhookSecret)\avant tout traitement. Assurez-vous qu'aucun analyseur JSON global n'est déjà appliqué à cette route au préalable ; rejetez les signatures invalides avec 400. ligne 6 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - critique Validation manquante de la signature du webhook Stripe. Un attaquant peut envoyer des événements de webhook arbitraires falsifiés à ce point de terminaison afin de définir des comptes sur Pro sans autorisation ou de manipuler les entrées de la base de données. Correctif : Utilisez stripe.webhooks.constructEvent() avec le secret du webhook Stripe pour vérifier l'authenticité et l'intégrité de chaque événement. ligne 6 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique Vulnérabilité d'injection SQL due à la concaténation directe de l'entrée utilisateur (event.data.object.customer) dans la chaîne de requête SQL. Correctif : Utilisez des requêtes paramétrées comme dans les instructions précédentes : db.query('UPDATE users SET plan = $1 WHERE stripe_customer = $2', ['free', event.data.object.customer]). ligne 18 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique Le webhook ne vérifie jamais la signature Stripe, et express.json() ignore le corps brut nécessaire pour ce faire. N'importe qui peut publier un faux événement invoice.paid et passer n'importe quel compte à pro gratuitement. Correctif : Utilisez express.raw({ type : 'application/json' }) sur cette route et construisez l'événement avec stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], endpointSecret) ; rejetez la requête en cas d'échec. ligne 6 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- élevé
L'identifiant client est inséré directement dans une instruction SQL. Une valeur telle que
' OR 1=1 --\peut manipuler la clause WHERE et définir tous les utilisateurs sur le plan gratuit ; selon la configuration de la base de données, d'autres injections SQL sont possibles. Correctif : Paramétrez entièrement la requête :UPDATE users SET plan = 'free' WHERE stripe\_customer = $1\avec\[event.data.object.customer\]\. De plus, authentifiez l'événement via la signature Stripe. ligne 19 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé
Il n'y a pas de vérification d'idempotence. Stripe livre les webhooks au moins une fois et les relance en cas de délai d'attente ou d'erreur. Le même événement
invoice.paid\peut donc créer plusieurs fois des entrées de paiement identiques. Correctif : Stockez l'ID d'événement Stripe ou l'ID de facture dans l'enregistrement de paiement, sécurisez-le avec une contrainte UNIQUE et exécutez le traitement de l'événement avec le paiement de manière atomique comme une insertion/mise à jour. Accusez réception des événements déjà traités avec 200 sans répéter l'opération métier. ligne 14 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé
Le gestionnaire
async\n'a pas de transfert d'erreur. Express 4 ne capture pas automatiquement les promesses rejetées des gestionnaires de routes asynchrones. Une erreur de base de données ou un objetinvoice.paid\incomplet conduit donc à un rejet de promesse non géré et, sous Node 20, peut terminer le processus au lieu de renvoyer une réponse d'erreur de manière contrôlée. Correctif : Enveloppez le gestionnaire danstry/catch\et transmettez les erreurs ànext(err)\, ou utilisez un wrapper asynchrone. Validez la structure d'entrée avant d'y accéder et, en cas d'erreurs de traitement temporaires, renvoyez un statut 5xx de manière contrôlée afin que Stripe livre à nouveau. ligne 6 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé L'utilisation d'express.json() pour le point de terminaison du webhook analyse le corps en JSON à l'avance. La vérification de la signature Stripe, cependant, exige le corps brut non modifié. Correctif : Utilisez express.raw({ type : 'application/json' }) au lieu d'express.json() pour le gestionnaire de route du webhook Stripe. ligne 6 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- moyen La mise à jour de l'utilisateur et l'entrée de paiement sont deux opérations de base de données validées indépendamment. Si l'INSERT échoue après une UPDATE réussie, l'utilisateur obtient le plan Pro même si aucun enregistrement de paiement correspondant n'existe. Correctif : Exécutez les deux opérations ensemble avec le marqueur d'idempotence dans une seule transaction de base de données sur le même client, et annulez complètement en cas d'erreur. ligne 12 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen
Le traitement ne tient pas compte du fait que Stripe peut livrer les événements hors de leur ordre de création. Un
invoice.paid\plus ancien retardé peut réinitialiserpaid\_until\; uncustomer.subscription.deleted\retardé peut définir un utilisateur qui a depuis été réactivé surfree\. Correctif : Conciliez l'état d'abonnement actuel à l'aide d'ID Stripe stables, par exemple en le récupérant auprès de Stripe, et persistez les transitions d'état ou l'horodatage du dernier événement traité. Au minimum, ne mettez à jourpaid\_until\que vers l'avant, et n'appliquez pas aveuglément les événements de suppression à l'état utilisateur actuel. ligne 12 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen
amount\_paid / 100\suppose sans vérification que la devise a exactement deux décimales. C'est faux pour JPY, par exemple. De plus, la devise n'est pas stockée à côté, donc le montant dans l'enregistrement de paiement n'a pas d'unité sans ambiguïté. Correctif : De préférence, stockez les montants inchangés dans la plus petite unité de devise avecinvoice.currency\. Si des unités de devise principales sont nécessaires, effectuez la conversion en fonction des exposants de devise respectifs. ligne 15 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen Gestion des exceptions manquante dans une route Express 4 asynchrone. En cas d'erreur de base de données ou de champs manquants, cela conduit à un rejet de promesse non géré qui peut faire planter l'application. Correctif : Ajoutez un bloc try-catch et transmettez les erreurs à next(err), ou utilisez un utilitaire tel que express-async-handler. ligne 6 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- moyen Aucune validation que invoice.metadata.userId est présent. Si le champ metadata ou userId est manquant ou indéfini, les requêtes SQL échouent ou opèrent sur des valeurs invalides. Correctif : Avant d'exécuter les requêtes de base de données, vérifiez explicitement que invoice.metadata et invoice.metadata.userId sont présents et valides. ligne 10 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- moyen Stripe relance les webhooks et peut livrer le même événement plus d'une fois. Chaque livraison insère une autre ligne de paiement, donc les rapports de revenus comptent en double. Correctif : Stockez event.id (ou l'ID de facture) avec une contrainte unique et ignorez les événements déjà traités. ligne 14 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
Demandez à Kirat d'examiner ce plugin d'importation WooCommerce pour la sécurité et l'exactitude.
kirat_review a demandé au conseil
Kirat a trouvé 21 problèmes confirmés (5 × critiques, 5 × élevés, 10 × moyens, 1 × faible). Chaque constatation a été recoupée par l'autre famille de modèles.
Commencez par ceux en haut de la liste ; chacun est accompagné d'un correctif suggéré.
En coulisses
kirat_review Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_REVIEW · EFFORT : STANDARD · 21 CONFIRMÉS, 0 REJETÉ · 0,17 $
Objectif : sécurité et exactitude d'un plugin d'importation WooCommerce
Code envoyé :
<?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();
}
Résultat du conseil
- critique
L’importation est accessible publiquement via
wp\_ajax\_nopriv\_erp\_import\; le hook authentifié manque également de vérifications de capacité et de nonce. Par conséquent, des utilisateurs anonymes ou des attaques CSRF peuvent modifier les noms de produits, les prix et les niveaux de stock. Correctif : Supprimez le hooknopriv\, vérifiez une capacité appropriée telle quemanage\_woocommerce\avant tout traitement, et sécurisez la requête aveccheck\_ajax\_referer()\. ligne 3 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - critique Le hook wp_ajax_nopriv_erp_import accorde aux visiteurs non authentifiés l’accès à la fonction d’importation. Correctif : Supprimez le hook nopriv et vérifiez la permission à l’aide de current_user_can('manage_options'). ligne 4 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique Le chemin de fichier provenant de $_POST['file'] est transmis à file() sans vérification, ce qui permet un traversée de répertoire et une lecture arbitraire de fichiers (LFI). Correctif : Gérez les téléversements de fichiers via $_FILES, ou validez strictement le chemin d’entrée par rapport aux répertoires autorisés (par exemple wp_upload_dir()). ligne 7 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique Vulnérabilité d’injection SQL, car $sku est inséré directement dans la requête SQL sans assainissement. Correctif : Utilisez des requêtes préparées avec $wpdb->prepare(). ligne 11 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique L’importation est enregistrée pour wp_ajax_nopriv, et il n’y a ni vérification de capacité ni nonce. Tout visiteur peut la déclencher et écraser les prix, le stock et les noms de produits. Correctif : Supprimez le hook nopriv, vérifiez current_user_can('manage_woocommerce') et vérifiez un nonce avec check_ajax_referer() avant toute action. ligne 4 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- élevé
Le chemin fourni par le client est transmis à
file()\sans vérification. Cela permet de traiter tout fichier local lisible et – selonallow\_url\_fopen\– des URL externes ou internes, ce qui permet un accès non souhaité aux fichiers et un SSRF aveugle. Correctif : N’acceptez pas des chemins librement choisis. Utilisez uniquement des identifiants de téléversement connus côté serveur, vérifiez le chemin canonique par rapport à un répertoire d’importation fixe, et autorisez uniquement les fichiers CSV locaux réguliers. ligne 8 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé
$sku\provient du CSV et est interpolé directement dans SQL. Une valeur de SKU contenant des métacaractères SQL peut manipuler la requête et, entre autres, sélectionner n’importe quel ID de publication comme cible de mise à jour. Correctif : Paramétrez la requête avec$wpdb-\>prepare()\, par exemple avecmeta\_value = %s\, ou utilisez la fonction WooCommerce pour rechercher un produit par SKU. ligne 13 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé
file()\charge l’intégralité de l’entrée en mémoire, etarray\_map()\crée en plus le tableau analysé complet. Sans limite de taille, une ressource distante volumineuse ou infinie peut épuiser la mémoire, le temps d’exécution et les workers PHP ; l’accessibilité publique aggrave la situation. Correctif : Limitez la taille du fichier et le nombre de lignes, ouvrez le fichier localement avecfopen()\et traitez les enregistrements en flux viafgetcsv()\. Utilisez également des limites de débit ou un travail en arrière-plan contrôlé. ligne 9 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé Protection CSRF manquante (validation du nonce). Correctif : Appelez check_ajax_referer() au début de la fonction. ligne 6 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- élevé Le chemin du fichier provient directement de la requête et est transmis à file(). Un attaquant peut lire tout fichier que le serveur web peut lire, ou une URL distante si allow_url_fopen est activé. Correctif : Acceptez un fichier téléversé via wp_handle_upload() ou lisez uniquement depuis un répertoire d’importation fixe ; ne prenez jamais un chemin depuis la requête. ligne 8 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- moyen On suppose que chaque ligne contient exactement quatre colonnes utilisables. Les lignes vides ou corrompues produisent des valeurs manquantes, ce qui génère des avertissements et peut définir involontairement le nom, le prix ou le stock à des valeurs vides. Correctif : Avant la déstructuration, vérifiez le nombre de colonnes et les champs requis, ignorez les lignes vides et rejetez les enregistrements défectueux avec un message d’erreur clair. ligne 12 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen
La combinaison de
file()\etstr\_getcsv()\analyse chaque ligne physique séparément. Les champs CSV valides contenant des sauts de ligne intégrés sont donc divisés en plusieurs enregistrements défectueux. Correctif : Lisez le CSV en flux avecfgetcsv()\; cette fonction gère les champs multi-lignes correctement entre guillemets à travers les limites d’enregistrement. ligne 9 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen
Le prix et le stock sont stockés sans vérification comme des chaînes arbitraires. Des valeurs non numériques, des formats décimaux incorrects ou des niveaux de stock inadmissibles peuvent corrompre les données produit et entraîner des calculs incohérents.
Correctif : Validez le prix et le stock avant l’écriture et normalisez-les avec des assistants WooCommerce tels que
wc\_format\_decimal()\etwc\_stock\_amount()\; rejetez les valeurs invalides ou inadmissibles d’un point de vue commercial. ligne 15 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen
Les données WooCommerce sont modifiées directement comme métadonnées de publication. Par conséquent, les états associés tels que
\_stock\_status\, les tables de recherche de produits et éventuellement les caches ne sont pas synchronisés de manière fiable avec les nouveaux prix et niveaux de stock. Correctif : Chargez le produit viawc\_get\_product()\, utilisez les méthodes CRUD telles queset\_regular\_price()\,set\_price()\etset\_stock\_quantity()\, définissez le statut de stock oumanage\_stock\selon les règles métier, puis appelezsave()\. ligne 15 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen
La recherche de SKU considère toutes les métadonnées de publication et ne vérifie ni le type de publication ni si l’ID trouvé est réellement un produit ou une variante WooCommerce. Avec des métadonnées
\_sku\dupliquées ou non liées, une correspondance non déterministe est également mise à jour. Correctif : Utilisezwc\_get\_product\_id\_by\_sku()\puis validez le résultat avecwc\_get\_product()\et le type de produit attendu ; traitez les SKU dupliqués comme des erreurs d’importation. ligne 13 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen
Les valeurs de retour de
update\_post\_meta()\etwp\_update\_post()\sont ignorées. L’importation peut échouer partiellement ou être interrompue, mais signale toujours le nombre total de lignes lues comme importées avec succès. Correctif : Enregistrez les succès et les échecs par produit, utilisezwp\_update\_post(..., true)\, comptez uniquement les enregistrements réellement mis à jour et renvoyez une réponse d’erreur structurée. Fournissez un travail en arrière-plan reprenable pour les grandes importations. ligne 15 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen Pour chaque ligne CSV, au moins une requête de recherche et plusieurs opérations d’écriture individuelles sont exécutées de manière synchrone. Les grandes importations provoquent donc de nombreux allers-retours en base de données, peuvent atteindre un délai d’expiration de requête et laissent un catalogue partiellement mis à jour. Correctif : Exécutez l’importation en lots limités comme processus en arrière-plan, résolvez les SKU collectivement et stockez la progression et l’état de reprise. ligne 11 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen file() lit l’intégralité du fichier en mémoire d’un coup, ce qui entraîne des erreurs d’épuisement de mémoire avec les grands fichiers CSV. Correctif : Diffusez le fichier ligne par ligne via fopen() et fgetcsv(). ligne 8 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- moyen La déstructuration de tableau suppose que chaque ligne contient au moins 4 éléments ; sinon, des avertissements PHP ou des erreurs d’index non initialisé se produisent. Correctif : Avant le déballage, vérifiez avec count($row) si suffisamment de colonnes sont présentes. ligne 10 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- moyen Les requêtes de base de données et les mises à jour de publications sont effectuées individuellement dans une boucle (problème N+1), ce qui ralentit considérablement le temps d’exécution. Correctif : Divisez l’importation en lots et regroupez les requêtes/mises à jour. ligne 11 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- faible
Les erreurs de
file()\ne sont pas vérifiées. Pour un chemin manquant, illisible ou non pris en charge,file()\renvoiefalse\, après quoiarray\_map()\peut lever uneTypeError\sous les versions PHP actuelles. Correctif : Vérifiez explicitement l’ouverture et la lecture, n’utilisez pas les avertissements PHP comme flux de contrôle, et en cas d’erreur, renvoyez une réponse HTTP appropriée ouwp\_send\_json\_error()\. ligne 9 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
Demandez à Kirat de revoir le flux de commande et de paiement de la page de commande de la boulangerie pour la sécurité et l’exactitude.
kirat_review a demandé au conseil
Kirat a trouvé 14 problèmes confirmés (4 × critique, 4 × élevé, 5 × moyen, 1 × faible). Chaque constatation a été recoupée par l’autre famille de modèles.
Commencez par ceux en haut de la liste ; chacun est accompagné d’un correctif suggéré.
En coulisses
kirat_review Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_REVIEW · EFFORT : STANDARD · 14 CONFIRMÉS, 0 REJETÉS · 0,11 $
Focus : sécurité et exactitude d’un flux de commande et de paiement
Code envoyé :
// 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;
Résultat du conseil
- critique
cakeId est interpolé directement dans la chaîne SQL. Un attaquant peut injecter des expressions SQL ou des instructions supplémentaires et ainsi lire ou modifier des données, ou mettre la base de données sous charge.
Correctif : Paramétrez également cette requête, par ex.
SELECT... FROM cakes WHERE id = $1\avec\[cakeId\]\, et vérifiez en plus que cakeId est du type attendu. ligne 10 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - critique Vulnérabilité d'injection SQL due à l'interpolation directe de cakeId dans la chaîne de template de la requête SQL. Correctif : Utilisez une requête SQL paramétrée : pool.query('SELECT * FROM cakes WHERE id = $1', [cakeId]). ligne 9 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique La manipulation du prix côté client est possible. Le prix est extrait de req.body et directement stocké et traité. Correctif : Lisez le prix côté serveur depuis la base de données (cake.rows[0].price) et ne faites pas confiance à la valeur envoyée par le client. ligne 8 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- critique cakeId provenant du corps de la requête est interpolé dans la chaîne SQL : injection SQL. Correctif : Utilisez une requête paramétrée : SELECT * FROM cakes WHERE id = $1. ligne 10 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- élevé
Le montant qui est stocké et transmis au flux de paiement provient entièrement de
req.body.price\. Un client peut saisir un montant manipulé, négatif ou très faible pour n'importe quel gâteau. Correctif : Déterminez le prix exclusivement côté serveur à partir du gâteau sélectionné ou d'une version de prix immuable. Créez une session de paiement côté serveur avec ce montant auprès du fournisseur de paiement et vérifiez à nouveau le montant attendu côté serveur lors de la confirmation du paiement. ligne 16 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé
La commande est créée et une confirmation est envoyée avant qu'un paiement réussi n'ait été vérifié. Les transactions interrompues ou délibérément non payées apparaissent donc comme des commandes confirmées et peuvent être générées à volonté.
Correctif : Créez les commandes initialement avec un statut tel que
pending\_payment\. Ne passez àpaid\qu'après une notification du fournisseur de paiement authentifiée et traitée de manière idempotente, puis envoyez la confirmation ou déclenchez la production ou la réservation. ligne 19 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - élevé Gestion des erreurs manquante dans une route Express 4 asynchrone. Les erreurs de base de données ou d'exécution entraînent des rejets de promesses non gérés. Correctif : Utilisez un bloc try/catch et transmettez les erreurs avec next(err), ou utilisez un package tel que express-async-errors. ligne 8 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- élevé Le montant est extrait du client (prix dans le corps de la requête), donc un client peut définir son propre prix. Correctif : Lisez le prix depuis la ligne cakes sur le serveur et ignorez toute valeur client. ligne 15 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- moyen
Le gestionnaire asynchrone n'a pas de transfert d'erreur. Express 4 ne gère pas automatiquement les promesses rejetées des gestionnaires
async\; les erreurs de base de données ou d'envoi de courrier synchrone peuvent donc entraîner des requêtes sans réponse et des rejets non gérés. Correctif : Enveloppez le gestionnaire danstry/catch\et transmettez les erreurs ànext(err)\, ou utilisez un wrapper asynchrone établi. Configurez également une gestion centralisée des erreurs. ligne 7 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen
Le résultat de
sendConfirmation\n'est ni attendu ni géré autrement pour les erreurs. Un rejet de promesse peut rester non géré ; en même temps, le client reçoit déjà une réponse de succès même si l'envoi du courrier a pu échouer. Correctif : Effectuez l'envoi après paiement confirmé via une boîte de sortie persistante ou une file d'attente de travaux avec nouvelles tentatives. Au minimum, attendez la promesse et journalisez ou gérez les erreurs de manière contrôlée. ligne 19 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash - moyen Il n'y a pas de protection d'idempotence. Les nouvelles tentatives du navigateur, les doubles clics ou les nouvelles tentatives réseau créent chacun une nouvelle commande et éventuellement plusieurs confirmations ou tentatives de paiement. Correctif : Acceptez une clé d'idempotence ou un identifiant de session de paiement, sécurisez-le avec une contrainte d'unicité et renvoyez la commande déjà existante lors des nouvelles tentatives. ligne 13 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen pickupDate, name, email, price et note sont traités sans validation métier ou syntaxique. Cela signifie, par exemple, que des dates de retrait passées ou invalides, des données client manquantes et des valeurs de champ inappropriées peuvent être stockées ; les erreurs de base de données ne surviennent également que tardivement et de manière non contrôlée. Correctif : Utilisez un schéma de requête avec types, champs obligatoires, limites de longueur et formats normalisés. Vérifiez les dates de retrait par rapport au fuseau horaire, au délai de préparation et aux règles d'horaires d'ouverture ou de capacité ; n'acceptez pas le prix comme entrée client. ligne 8 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen L'appel asynchrone à sendConfirmation n'est ni attendu ni capturé pour les erreurs. Correctif : Placez await devant sendConfirmation et gérez les erreurs possibles lors de l'envoi de l'e-mail. ligne 17 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- faible Validation d'entrée incomplète pour des champs tels que email, pickupDate, name et note. Correctif : Implémentez une validation de schéma (par ex. avec Zod ou express-validator) avant de traiter les données de la requête. ligne 8 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
Demandez à Kirat de vérifier cette fonction de facturation pour l'exactitude et l'intégrité des données.
kirat_review a demandé au conseil
Kirat a trouvé 16 problèmes confirmés (1 × critique, 11 × élevé, 3 × moyen, 1 × faible). Chaque constatation a été recoupée par l'autre famille de modèles.
Commencez par ceux en haut de la liste ; chacun est accompagné d'un correctif suggéré.
En coulisses
kirat_review Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_REVIEW · EFFORT : STANDARD · 16 CONFIRMÉS, 0 REJETÉS · 0,14 $
Objectif : exactitude et intégrité des données d'une fonction de facturation
Code envoyé :
// 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;
}
Résultat du conseil
- critique Transaction de base de données et verrou de ligne manquants. Avec des requêtes parallèles, des conditions de course (par exemple, double dépense de crédit) et des mises à jour incomplètes en cas d'erreur peuvent se produire. Correctif : Utilisez un client du pool avec BEGIN/COMMIT, et utilisez SELECT FOR UPDATE pour verrouiller et mettre à jour les lignes de manière atomique. ligne 5 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- élevé Les trois mises à jour liées ne sont pas exécutées dans une transaction de base de données. Si le débit du crédit client ou le changement de statut échoue, la facture peut déjà avoir été réduite sans que le crédit ait été correctement débité ou que le statut ait été défini. Correctif : Obtenez un client dédié du pool et exécutez toutes les vérifications et mises à jour entre BEGIN et COMMIT ; utilisez ROLLBACK en cas d'erreur. ligne 11 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé La facture est d'abord lue puis écrasée avec une valeur calculée absolue. Deux appels parallèles peuvent lire la même valeur de départ puis s'écraser mutuellement ; les deux débits de crédit ont toujours lieu, tandis qu'un seul crédit reste entièrement visible dans la facture. Correctif : Verrouillez la facture concernée dans la même transaction avec SELECT... FOR UPDATE, ou modifiez le montant de manière atomique via UPDATE... SET total_cents = total_cents - $1 avec des conditions appropriées. ligne 4 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé La vérification et le débit du crédit client ne sont pas atomiques. Des appels parallèles peuvent tous deux voir la même couverture disponible puis réduire le crédit en dessous de zéro. Correctif : Verrouillez l'enregistrement client de manière transactionnelle ou utilisez une mise à jour conditionnelle, telle que UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2 AND credit_cents >= $1 RETURNING credit_cents, et exigez exactement une ligne retournée. ligne 8 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé Il n'est pas vérifié si la facture appartient au client spécifié. Par conséquent, le crédit d'un client peut être appliqué à n'importe quelle facture identifiée via invoiceId. Correctif : Interrogez et mettez à jour la facture et le client via la relation de propriété, par exemple avec WHERE invoices.id = $1 AND invoices.customer_id = $2 ; abandonnez s'il n'y a pas de correspondance. ligne 4 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé Le crédit à appliquer n'est pas plafonné au montant ouvert de la facture. Si creditCents est supérieur à total_cents, un montant de facture négatif est stocké et un crédit client excédentaire est consommé. Correctif : Autorisez uniquement les montants jusqu'à la valeur ouverte de la facture, ou déterminez le montant réellement utilisé comme min(creditCents, total_cents) et débitez uniquement ce montant du crédit client. ligne 10 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé Les valeurs négatives, non entières ou non représentables en toute sécurité ne sont pas rejetées. En particulier, une valeur creditCents négative augmente le montant de la facture et, en même temps, par la soustraction d'une valeur négative, le crédit client. Correctif : Exigez Number.isSafeInteger(creditCents) && creditCents > 0 avant tout accès à la base de données ; traitez les montants monétaires de manière cohérente comme des valeurs entières en centimes. ligne 8 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé Le statut de facture lu est complètement ignoré. Le crédit peut donc également être appliqué à des factures déjà payées, annulées ou autrement non modifiables ; une facture déjà payée peut devenir négative par conséquent. Correctif : Définissez explicitement les statuts de départ autorisés et vérifiez-les atomiquement dans la condition UPDATE, par exemple AND status = 'open'. S'il n'y a pas de correspondance, abandonnez l'opération. ligne 4 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- élevé Accès à balance.rows[0] et inv.rows[0] sans vérification préalable. Si un client ou une facture n'est pas trouvé, l'application plante avec une TypeError non gérée. Correctif : Vérifiez inv.rows.length et balance.rows.length avant l'accès et levez un message d'erreur explicite. ligne 8 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- élevé Validation manquante de creditCents pour les valeurs négatives. Une valeur négative contourne la vérification (creditCents > available) et conduit à des ajustements de crédit ou de facture incorrects. Correctif : Assurez-vous que creditCents est un entier positif supérieur à 0. ligne 9 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- élevé Les lectures et les trois mises à jour s'exécutent en dehors d'une transaction et sans verrous de ligne. Deux appels concurrents peuvent tous deux passer la vérification de crédit et dépenser le même crédit deux fois, et un plantage entre les mises à jour laisse la facture et le solde de crédit incohérents. Correctif : Exécutez tout dans une seule transaction sur un seul client, verrouillez les lignes avec SELECT... FOR UPDATE, et validez uniquement après que toutes les mises à jour réussissent. ligne 5 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- élevé La fonction ne vérifie jamais que la facture appartient au client ou qu'elle est toujours ouverte. Le crédit d'un client peut être appliqué à la facture d'un autre client, ou à une facture déjà payée. Correctif : Sélectionnez la facture avec WHERE id = $1 AND customer_id = $2 AND status = 'open' et échouez si aucune ligne ne revient. ligne 11 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- moyen L'existence de la facture et du client n'est pas vérifiée. Pour des identifiants inconnus, l'accès à rows[0] conduit à des erreurs d'exécution au lieu d'une erreur métier contrôlée ; de plus, les deux requêtes sont exécutées inutilement avant que cela ne devienne apparent. Correctif : Vérifiez rowCount ou rows.length pour les deux requêtes et levez une erreur de non-trouvé définie ; intégrez la vérification dans la transaction et, si possible, dans une requête relationnelle. ligne 4 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen La valeur de retour ne correspond ni au montant en centimes stocké ni à une simple conversion dans la devise principale : elle ajoute un pourcentage fixe de 19 et utilise l'arithmétique à virgule flottante. Par conséquent, l'appelant peut recevoir une valeur qui diffère, en termes de taxe et d'arrondi, du solde de facture restant réellement stocké. Correctif : Retournez le montant restant en centimes inchangé, ou définissez une valeur de retour clairement typée. Si un calcul de taxe est requis pour des raisons métier, prenez le taux de taxe et la règle d'arrondi des données de facture et calculez avec une arithmétique entière ou décimale. ligne 17 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- moyen Utilisation de l'arithmétique à virgule flottante IEEE 754 (newTotal * 1.19 / 100) pour les calculs financiers. Cela conduit à des erreurs de précision et d'arrondi. Correctif : Calculez de manière cohérente en centimes avec des entiers (BigInt/Math.round), ou utilisez une bibliothèque pour une arithmétique décimale exacte. ligne 18 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- faible Une commande UPDATE séparée pour le statut de facture provoque des allers-retours inutiles vers la base de données. Correctif : Combinez la mise à jour de total_cents et du statut dans une seule requête UPDATE. ligne 12 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
Demandez à Kirat de vérifier le script d'analyse de dépistage pour notre revue systématique pour son exactitude.
kirat_review a demandé au conseil
Kirat a trouvé 11 problèmes confirmés (6 × élevé, 4 × moyen, 1 × faible). Chaque constatation a été recoupée par l'autre famille de modèles.
Commencez par ceux en haut de la liste ; chacun est accompagné d'un correctif suggéré.
En coulisses
kirat_review Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_REVIEW · EFFORT : STANDARD · 11 CONFIRMÉS, 0 REJETÉS · $0.09
Focus : exactitude d'une analyse de dépistage pour une revue systématique
Code envoyé :
# 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)
Résultat du conseil
- high La jointure interne par défaut supprime toutes les valeurs record_id qui n'apparaissent que dans un seul des deux fichiers. Kappa et les conflits ne sont donc calculés que pour l'intersection, sans rendre visibles les screenings manquants. En même temps, « Records screened » à la ligne 18 indique la longueur de a au lieu de l'intersection réellement analysée. Correctif : Utiliser une jointure externe avec un indicateur de fusion, comparer explicitement les ensembles d'ID et signaler les décisions manquantes séparément ou les traiter comme des erreurs de données. Pour chaque métrique, afficher le dénominateur réellement utilisé. ligne 7 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- high L'unicité de record_id n'est pas vérifiée. Les ID en double entraînent un produit cartésien many-to-many lors de la fusion et pondèrent plusieurs fois certaines études, ce qui fausse l'accord, les prévalences, kappa et les fichiers de sortie. Correctif : Avant la fusion, vérifier que record_id est non nul et unique dans les deux fichiers, et interrompre en cas de doublons. Utiliser également merge(..., validate='one_to_one'). ligne 7 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- high Les valeurs de décision ne sont pas validées. Les valeurs manquantes, les fautes de frappe, la casse ou les catégories supplémentaires sont implicitement traitées comme « exclude » lors du calcul de la prévalence d'inclusion, tandis que l'accord observé compare les valeurs exactes. Le calcul ne correspond donc plus à un kappa de Cohen binaire et peut produire des résultats contradictoires. Correctif : Normaliser decision de manière contrôlée avant l'analyse et garantir que chaque valeur est exactement 'include' ou 'exclude'. Traiter les valeurs manquantes ou inconnues séparément comme des erreurs de données ou des screenings incomplets. ligne 9 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- high excluded contient tous les enregistrements exclus par le screener A, y compris les conflits où le screener B a décidé « include ». Ces enregistrements sont donc écrits à la fois dans excluded.csv et conflicts.csv. Si excluded.csv est censé représenter les résultats finalement exclus, des conflits non résolus peuvent être retirés à tort de la revue. Correctif : Sans règle de précédence documentée, ne sélectionner que les exclusions correspondantes, c'est-à-dire (decision_a == 'exclude') & (decision_b == 'exclude'). Conserver les conflits exclusivement dans conflicts.csv jusqu'à ce qu'une décision consensuelle soit prise. ligne 16 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- high Filtrage incorrect des études exclues : 'excluded' ne prend en compte que la décision du screener A ('merged.decision_a == "exclude"'). En cas de conflit (le screener A exclut, le screener B inclut), l'étude est comptée à tort comme exclue. Correctif : N'exporter les exclusions que si les deux screeners ont choisi 'exclude' de manière cohérente (par exemple '(merged.decision_a == "exclude") & (merged.decision_b == "exclude")'), ou attendre la résolution du conflit. ligne 16 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- high excluded.csv contient chaque enregistrement exclu par le screener A, y compris les conflits où le screener B l'a inclus. Ces enregistrements sont supprimés avant la discussion des conflits, ce qui est exactement la fausse exclusion que le protocole doit éviter. Correctif : N'exclure que les enregistrements exclus par les deux screeners : merged[(merged.decision_a == 'exclude') & (merged.decision_b == 'exclude')]; envoyer chaque conflit à la résolution en premier. ligne 16 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- medium Si les deux screeners n'utilisent que la même catégorie, expected est égal à 1 et le dénominateur de kappa est égal à 0. Le résultat devient NaN ou peut produire un avertissement de division par zéro ; la sortie formatée « nan » n'explique pas que kappa est mathématiquement indéfini. Une intersection analysée vide conduit également à des métriques NaN dénuées de sens. Correctif : Avant la division, vérifier s'il existe des décisions valides appariées et si 1 - expected est supérieur à 0. Dans les cas dégénérés, signaler explicitement kappa comme « non défini » et rapporter les fréquences sous-jacentes. ligne 13 · trouvé par gpt-5.6 · confirmé par gemini-3.6-flash
- medium Division possible par zéro dans le kappa de Cohen si la valeur de chance attendue 'expected' est égale à 1 (par exemple si les deux screeners choisissent la même catégorie pour 100 % des enregistrements). Correctif : Avant le calcul, détecter si '1 - expected == 0' et, dans ce cas, attribuer une valeur définie (par exemple 1.0 ou NaN). ligne 12 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- medium Suppression silencieuse d'enregistrements par la jointure interne par défaut. Si le screener A et le screener B ont évalué des ensembles différents de 'record_id's, les écarts dans les études traitées ne sont pas signalés. De plus, 'len(a)' dans la sortie console ne correspond alors pas au nombre d'études réellement appariées. Correctif : Vérifier si 'len(a) == len(b) == len(merged)' est vrai, ou effectuer une jointure externe pour montrer explicitement les enregistrements incomplètement évalués. ligne 7 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
- medium La fusion interne supprime silencieusement les enregistrements qu'un seul screener a décidés, et le nombre affiché utilise len(a). Les enregistrements non évalués disparaissent à la fois de l'accord et des nombres PRISMA. Correctif : Fusionner avec how='outer', indicator=True, et échouer ou signaler lorsqu'un enregistrement manque de décision de l'un ou l'autre screener. ligne 7 · trouvé par claude · confirmé par gpt-5.6, gemini-3.6-flash
- low Absence de nettoyage des entrées et de gestion des valeurs manquantes dans la colonne 'decision'. La casse, les espaces ou les valeurs NaN conduisent à des comparaisons incorrectes. Correctif : Nettoyer les valeurs de la colonne avant la comparaison (par exemple avec '.str.strip().str.lower()') et garantir la sécurité du type de données. ligne 9 · trouvé par gemini-3.6-flash · confirmé par gpt-5.6
Affichage : chaque constat confirmé avec son correctif, tels que les membres les ont rédigés ; le raisonnement des vérificateurs est raccourci à leur verdict. Les doublons ne sont pas fusionnés, donc un même problème peut apparaître plusieurs fois lorsque plusieurs membres le signalent. Le code, l'objectif et les propres constats de Claude ont été envoyés en anglais ; les constats rédigés en allemand par les membres sont traduits ici.
Cinq briefs d'idées de différents domaines. ChatGPT et Gemini travaillent sur trois pistes, Claude ajoute une idée, et les deux membres évaluent chaque idée anonymement (1–10 chacun, jusqu'à 20 points). Choisissez-en une.
Mes deux articles de blog sont bien classés sur Google, mais peu de lecteurs lancent un essai. Brainstormez des idées avec Kirat.
kirat_brainstorm a demandé au conseil
Le conseil a proposé 14 idées et a évalué chacune anonymement. Les trois premières :
- Remplacer le délai de 14 jours par trois envois réels (18/20 points)
- Terminer la tâche dans l'article (17/20 points)
- Transformer l'article sur les relances en console de récupération (17/20 points)
En coulisses
kirat_brainstorm Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_BRAINSTORM · EFFORT : STANDARD · 14 IDÉES · 1 TOUR · 0,11 $
Sujet : Idées pour un développeur solo afin de convertir davantage de lecteurs de deux articles de blog bien classés sur Google en inscriptions à l'essai pour un outil de facturation destiné aux freelances
Contexte envoyé : Outil de facturation pour freelances, 19 USD par mois, essai gratuit de 14 jours, 30 clients payants après 5 mois. Les inscriptions proviennent principalement de deux articles de blog bien classés sur Google (comment rédiger une facture freelance ; comment relancer les paiements en retard). Environ 12 % des essais se convertissent. Le développeur a un emploi à temps plein et environ 10 heures par semaine pour le produit. CONTRAINTE : pas de publicité payante. CONTRAINTE : au maximum 3 heures par semaine pour cela.
Résultat du conseil
- 1 Remplacez l’horloge de 14 jours par trois envois réels gpt-5.6 · briseur de règles · 18/20 points (9 + 9) Testez un essai qui se termine après trois factures envoyées ou relances de paiement au lieu de 14 jours calendaires. Cela brise délibérément l’hypothèse implicite qu’un essai limité dans le temps est approprié : les freelances peuvent ne pas facturer pendant une fenêtre arbitraire de deux semaines, donc l’essai actuel peut expirer avant que le produit ne prouve sa valeur. Conservez le plan mensuel à 19 $ inchangé et comparez la conversion activation-vers-paiement par cohorte.
- 2 Terminez la tâche dans l’article gpt-5.6 · dans le brief · 17/20 points (9 + 8) Intégrez un mini générateur de facture dans « comment rédiger une facture freelance » : les lecteurs saisissent le client, le montant, la date d’échéance et les conditions de paiement, puis voient un aperçu finalisé. « Envoyer ou enregistrer cette facture » crée un essai avec ces détails déjà chargés, éliminant l’écart entre apprendre et faire. Construisez-le en tranches hebdomadaires plafonnées à trois heures, puis maintenez la maintenance proche de zéro.
- 3 Transformez l’article sur les relances en console de recouvrement gpt-5.6 · voisin · 17/20 points (9 + 8) En substitution en une étape du générateur de facture intégré, laissez les lecteurs saisir un montant en retard et une date d’échéance pour générer une séquence datée de trois messages de relance. Démarrer un essai enregistre le débiteur, planifie les messages et ouvre le premier brouillon prêt à envoyer. Cela préserve le modèle le plus fort—un résultat utile avant l’inscription—tout en correspondant à l’intention du deuxième article.
- 4 Placez le moment de conversion sur le calendrier du débiteur gpt-5.6 · dans le brief · 16/20 points (7 + 9) Proposez un fichier .ics généré dans l’article sur les retards de paiement avec des rappels pour la date d’échéance et des relances croissantes aux jours 1, 7 et 14. Chaque événement de calendrier contient un lien profond qui ouvre le flux de relance pertinent avec les dates préremplies, ramenant le lecteur quand la douleur est réelle plutôt que pendant qu’il fait simplement des recherches. Cela ne nécessite aucune capture d’e-mail et peut fonctionner sans surveillance.
- 5 Plan gratuit permanent pour un client au lieu d’une période d’essai gemini-3.6-flash · briseur de règles · 16/20 points (8 + 8) Cette idée brise la contrainte implicite de l’essai de 14 jours et la remplace par un plan freemium pour exactement un client actif. Les freelances utilisent le produit gratuitement en permanence pour leur premier client et passent sans couture au tarif forfaitaire de 19 dollars dès qu’un deuxième client est ajouté.
- 6 Orientez les lecteurs par problème immédiat gpt-5.6 · dans le brief · 14/20 points (8 + 6) Remplacez les bannières d’essai génériques par trois choix intégrés comme « J’ai besoin de ma première facture », « Je facture régulièrement » et « Un client est déjà en retard ». Chaque choix ouvre un état d’intégration correspondant plutôt que la même page d’accueil, et les identifiants de section d’article peuvent présélectionner des valeurs par défaut sensées. Mesurez l’activation d’essai terminée, pas seulement les clics sur les CTA, et testez une route par semaine.
- 7 Publiez trois relookings de factures médico-légaux gpt-5.6 · dans le brief · 14/20 points (8 + 6) Avec permission, transformez trois factures clients anonymisées en études de cas avant-après statiques montrant exactement ce qui a changé et pourquoi. Insérez chaque relooking à côté des conseils pertinents dans l’article de classement, avec un CTA qui ouvre la même structure corrigée comme modèle d’essai modifiable. Des preuves spécifiques d’une petite base de clients peuvent être plus crédibles que des témoignages généraux.
- 8 Laissez les lecteurs transporter leur progression entre les deux articles gpt-5.6 · dans le brief · 14/20 points (7 + 7) Stockez la devise choisie par le lecteur, l’étape de facturation et la date d’échéance localement dans le navigateur, puis utilisez cet état lorsqu’ils passent entre les deux articles. Quelqu’un qui a créé un plan de facture peut ensuite voir une invite contextuelle comme « Votre facture a maintenant 3 jours de retard—ouvrez la relance préparée », avec l’intégration d’essai préremplie. Cela crée un parcours léger sur deux articles sans nécessiter de compte ni de production de contenu continue.
- 9 Configurateur interactif de lettre de rappel gemini-3.6-flash · dans le brief · 14/20 points (7 + 7) Ajoutez un générateur de lettres de rappel de paiement croissantes à l’article sur le suivi des paiements en retard. Après la saisie du texte, le modèle est généré, combiné au CTA pour configurer des rappels de paiement automatiques pour les futures factures dans le compte d’essai.
- 10 Lien magique d’envoi instantané sans inscription préalable gemini-3.6-flash · voisin · 14/20 points (8 + 6) Mutation du générateur dans le contenu : le lecteur saisit les détails de la facture directement dans l’article de blog et clique sur Envoyer la facture maintenant. En arrière-plan, le système crée sans couture un compte d’essai et envoie l’e-mail directement ; le mot de passe n’est défini qu’ensuite.
- 11 Générateur de facture en direct directement dans l’article de blog gemini-3.6-flash · dans le brief · 13/20 points (6 + 7) Intégrez un outil de formulaire interactif simple directement dans l’article sur la rédaction de factures. Les lecteurs saisissent leurs détails de facture et peuvent télécharger immédiatement et gratuitement le PDF finalisé. Un bouton proéminent propose d’envoyer la facture numériquement en un clic et de suivre le statut de paiement dans le compte d’essai de 14 jours.
- 12 Rappel ponctuel à l’usage au lieu d’un abonnement mensuel gemini-3.6-flash · briseur de règles · 13/20 points (6 + 7) Cette idée brise la contrainte implicite du modèle d’abonnement SaaS pur à 19 dollars par mois. Pour des frais uniques de 5 dollars, les lecteurs de l’article sur les retards de paiement peuvent faire envoyer une lettre de rappel juridiquement solide incluant un lien de suivi, les frais étant entièrement crédités s’ils souscrivent ensuite à un abonnement.
- 13 Modèle qui s’ouvre dans l’outil claude · dans le brief · 11/20 points (6 + 5) Proposez le modèle de facture de l’article comme facture prête à l’emploi dans l’outil : un clic ouvre un compte d’essai prérempli au lieu d’un téléchargement de fichier.
- 14 Intention de sortie spécifique au problème avec une séquence d’e-mails automatisée gemini-3.6-flash · dans le brief · 8/20 points (4 + 4) Implémentez une popup d’intention de sortie sur l’article sur les retards de paiement qui propose un modèle d’e-mail d’urgence pour les clients en retard en échange d’une adresse e-mail. Une séquence d’e-mails automatisée en trois parties explique ensuite passivement comment les flux de travail automatisés réduisent les retards de paiement et renvoie vers le compte d’essai.
Brainstorm avec Kirat : comment transformons-nous cette refonte ponctuelle de boutique en un plan de soins que le client veut réellement ?
kirat_brainstorm a demandé au conseil
Le conseil a proposé 15 idées et a évalué chacune anonymement. Les trois premières :
- Pause budgétaire : opérations avant le vernis de lancement (18/20 points)
- CSV Product Gatekeeper (17/20 points)
- Dividende de fiabilité (17/20 points)
En coulisses
kirat_brainstorm Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_BRAINSTORM · EFFORT : STANDARD · 15 IDÉES · 1 TOUR · 0,10 $
Sujet : Idées pour une petite agence numérique afin de transformer une refonte ponctuelle de boutique en un contrat de soins récurrent que le client veut réellement
Contexte envoyé : Agence de 4 personnes. Le client vend environ 1 800 produits de mobilier en Allemagne, en Autriche et en Suisse, a 3 employés et aucun développeur interne, un chiffre d’affaires d’environ 1,2 million d’euros par an. L’ancienne boutique WooCommerce auto-hébergée avait 31 plugins et deux incidents de sécurité l’année dernière ; le client veut une maintenance réduite et moins d’urgences. Un ERP local exporte les données produits en CSV. Budget de refonte : 25 000 EUR. CONTRAINTE : pas de verrouillage ; le client doit pouvoir partir avec toutes les données et l’accès à tout moment. CONTRAINTE : pas d’embauches supplémentaires à l’agence.
Résultat du conseil
- 1 Pause budgétaire : opérations avant le lancement, en bref gpt-5.6 · briseur de règles · 18/20 points (9 + 9) Cette idée brise délibérément la contrainte souple du budget de reconstruction de 25 000 EUR : l’offre est, par exemple, de 22 000 EUR pour un lancement volontairement allégé, plus 12 000 EUR pour une première année d’exploitation contraignante. En contrepartie, les fonctionnalités optionnelles sont retirées du projet initial ; à la place, le durcissement des imports, les exercices de restauration, la supervision et les améliorations mensuelles sont financés. Le volume total plus élevé est rentable car le client n’achète pas une nouvelle fois une boutique en apparence finie dont les coûts d’exploitation réels ne deviennent visibles qu’après le lancement ; tous les identifiants d’accès, les données et les résultats de travail restent transférables à tout moment.
- 2 CSV Product Gatekeeper gpt-5.6 · dans le cadre · 17/20 points (9 + 8) Avant chaque import ERP, un pipeline automatisé vérifie le CSV pour détecter les prix manquants, les doublons, les variantes invalides, les erreurs d’image, la logique fiscale DACH et les changements de stock suspects. Le forfait mensuel couvre la maintenance des règles, la supervision des imports et un rapport d’erreurs compréhensible pour les trois employés. Cela transforme la maintenance technique en bénéfice commercial direct : moins de produits erronés, de questions de suivi et d’achats abandonnés.
- 3 Dividende de fiabilité gpt-5.6 · dans le cadre · 17/20 points (8 + 9) Le client paie un forfait de base modéré pour la supervision et la maintenance ; un montant trimestriel supplémentaire n’est dû que si les objectifs de fiabilité convenus, tels que les imports réussis, la restauration testée et les délais de réponse, ont été atteints. Les pannes évitables causées par l’agence génèrent des crédits de service au lieu d’heures d’urgence facturables. Ce modèle aligne les incitations économiques sur la prévention et dissipe la crainte du client que l’agence profite des problèmes.
- 4 Charte de soins prête à la sortie gpt-5.6 · dans le cadre · 16/20 points (9 + 7) Le forfait est délibérément vendu comme un produit anti-verrouillage : supervision, mises à jour, sauvegardes, contrôles de sécurité et deux petites modifications par mois pour environ 1 200 à 1 500 EUR. Tous les comptes appartiennent au client, et le code et les scripts d’import vivent dans le dépôt du client ; chaque mois, le client reçoit également une documentation, un export de données et un pack de transfert qui lui permet de résilier à tout moment. Ainsi, le client paie pour une opérabilité démontrable plutôt que pour une dépendance.
- 5 Train de lancements saisonnier gpt-5.6 · dans le cadre · 16/20 points (8 + 8) Au lieu de tickets de support arbitraires, il y a quatre lancements commerciaux planifiables par an, par exemple pour le mobilier de jardin, la fin de l’été, la Black Week et Noël. Pour chaque lancement, le forfait inclut un petit pack UX ou merchandising, des tests de régression et la maintenance technique entre-temps. Cela donne au client un développement continu visible et maintient l’effort regroupable pour l’agence de quatre personnes.
- 6 Le test d’évasion trimestriel gpt-5.6 · dans le cadre · 16/20 points (9 + 7) Une fois par trimestre, l’agence fournit un export complet des données produits, clients, commandes et contenus, et effectue un redémarrage documenté dans un environnement de test neutre. Ce que le client paie, justement, c’est la sortie régulièrement prouvée : la liste des accès, le journal de restauration et le manuel de transfert appartiennent au client. Le critère strict de non-verrouillage devient ainsi un argument de vente inhabituel pour le forfait.
- 7 Charte de soins plus échange de croissance gpt-5.6 · voisin · 16/20 points (8 + 8) Comme petite mutation de la Charte de soins prête à la sortie, les heures de modification incluses ne sont pas fixées à l’avance mais déplacées mensuellement entre les opérations, la qualité des données et les améliorations de conversion ; le volume non utilisé est reporté au maximum d’un trimestre. Un comité conjoint de 30 minutes décide de leur utilisation, en fonction des risques et des opportunités de revenus. Le forfait reste prêt à la sortie mais semble moins une assurance et plus une équipe numérique externe flexible.
- 8 Forfait de sécurité ERP sync et catalogue gemini-3.6-flash · dans le cadre · 13/20 points (7 + 6) L’agence prend en charge la supervision et la maintenance continues de l’interface entre le CSV ERP local et la boutique en ligne. Les imports de données défectueux, les variantes de meubles manquantes ou les prix erronés sont détectés automatiquement avant leur mise en ligne. Cela retire complètement la charge opérationnelle de la maintenance des données à l’équipe de 3 personnes du client.
- 9 Forfait d’enrichissement des données produits par IA gemini-3.6-flash · voisin · 13/20 points (6 + 7) Mutation de l’idée d’interface ERP : l’agence ne maintient pas seulement l’import CSV mais utilise également des scripts IA pour enrichir automatiquement les données brutes avec des attributs structurés, des textes SEO et des notes de délai de livraison spécifiques à la région DACH. Cela évite au client un effort de maintenance manuelle et augmente la visibilité sur le marché du meuble sans personnel supplémentaire à l’agence.
- 10 Contrat de maintenance par régression visuelle CI/CD gemini-3.6-flash · dans le cadre · 12/20 points (6 + 6) Au lieu de mises à jour en direct risquées, l’agence met en place un pipeline de préproduction qui vérifie automatiquement chaque mois les mises à jour de plugins, visuellement et fonctionnellement. Le client reçoit un rapport de transparence mensuel et des délais de réponse garantis pour les vulnérabilités de sécurité. Cela garantit une stabilité absolue sans les urgences précédentes.
- 11 Polissage trimestriel de conversion et UX gemini-3.6-flash · dans le cadre · 11/20 points (6 + 5) En plus de la maintenance de base, le forfait inclut des quotas d’heures fixes pour l’optimisation des fonctions de paiement et des affichages de variantes de meubles. L’agence analyse chaque mois le comportement des utilisateurs dans la région DACH et met en œuvre des ajustements à fort retour. Cela transforme le forfait d’un pur facteur de coût en moteur de revenus.
- 12 Mise à jour sûre et garantie de restauration instantanée gemini-3.6-flash · voisin · 11/20 points (5 + 6) Mutation du contrat de maintenance CI/CD : le forfait se concentre purement sur un SLA garanti sans temps d’arrêt avec restauration automatisée des instantanés sous 15 minutes en cas d’incident. Cela répond directement à la crainte du client après les deux incidents de sécurité, avec un effort manuel continu minimal.
- 13 Pack de croissance à partage de revenus au lieu d’un budget fixe gemini-3.6-flash · briseur de règles · 9/20 points (4 + 5) Brise l’hypothèse souple d’un budget de reconstruction unique et rigide de 25 000 EUR : les coûts de reconstruction sont réduits à 10 000 EUR, couplés à un forfait mensuel avec une petite part des revenus supplémentaires. Cela est rentable car le client réduit son risque d’investissement et l’agence participe directement à la croissance de la boutique de 1,2 million EUR.
- 14 Service de soins d’architecture headless gemini-3.6-flash · briseur de règles · 7/20 points (3 + 4) Brise la contrainte souple d’une configuration monolithique classique (comme un WooCommerce standard) : le frontend est découplé du backend, de sorte que les vulnérabilités de sécurité des plugins ne peuvent plus attaquer directement le site web. Cela est rentable car les urgences sont structurellement éliminées et le client reste portable à tout moment grâce à une pile open-source et un accès Git complet.
- 15 Rapport de soins mensuel sur une page claude · dans le cadre · 6/20 points (4 + 2) Un rapport mensuel d’une page avec la disponibilité, la vitesse de page, les mises à jour appliquées et les incidents évités, afin que le client voie ce que le forfait paie.
Notre nouvelle page de commande est mise en ligne le mois prochain. Réfléchissez avec Kirat à la manière d’obtenir plus de précommandes de gâteaux sans publicité payante.
kirat_brainstorm a demandé au conseil
Le conseil a proposé 15 idées et a évalué chacune anonymement. Les trois premières :
- Le pilote automatique d’anniversaire annuel (18/20 points)
- De vrais créneaux de gâteaux au lieu de publications génériques (17/20 points)
- Le gâteau voyage comme son propre support publicitaire (16/20 points)
En coulisses
kirat_brainstorm Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_BRAINSTORM · EFFORT : STANDARD · 15 IDÉES · 1 TOUR · 0,09 $
Sujet : Idées pour une boulangerie locale afin d’obtenir plus de précommandes de gâteaux personnalisés via sa nouvelle page de commande en ligne, sans publicité payante
Contexte envoyé : Boulangerie avec 6 employés dans une ville allemande de 40 000 habitants. Les gâteaux personnalisés et les précommandes offrent la meilleure marge. Une nouvelle page de commande en ligne (choix du gâteau, date de retrait, prépaiement) est mise en ligne le mois prochain ; jusqu’à présent, les commandes arrivaient uniquement par téléphone et par e-mail. Le profil Google Business a 4,7 étoiles sur 120 avis. Le propriétaire a peu de temps, donc les idées doivent fonctionner avec au maximum 2 heures par semaine. CONTRAINTE : pas de publicité payante ce trimestre. CONTRAINTE : pas de personnel supplémentaire.
Résultat du conseil
- 1 L'autopilote d'anniversaire annuel gpt-5.6 · dans le cadre · 18/20 points (9 + 9) Lors du paiement, les clients peuvent volontairement laisser l'occasion et le mois pour un rappel l'année suivante. Un e-mail automatisé 21 jours avant mène à la page de commande pré-remplie ; ainsi chaque commande construit une future commande, sans acquisition continue de clients et avec un consentement clair.
- 2 De vrais créneaux de gâteaux au lieu de publications génériques gpt-5.6 · dans le cadre · 17/20 points (9 + 8) La page de commande affiche les créneaux de production restants réels pour les quatre prochaines semaines, comme « Encore 2 gâteaux personnalisés disponibles pour samedi ». Une publication hebdomadaire Google Business renvoie directement à cette vue ; la mise à jour et la publication ensemble prennent au plus 20 minutes et créent une urgence crédible sans réductions.
- 3 Le gâteau voyage comme son propre support publicitaire gpt-5.6 · dans le cadre · 16/20 points (8 + 8) Chaque gâteau récupéré reçoit une petite carte disant « Commandez à nouveau ou personnalisez ce gâteau » et un code QR pour la variante correspondante. La carte est affichée visiblement lorsque le gâteau est coupé, afin que précisément les invités d'anniversaire ou de mariage présents découvrent le chemin de commande ; un jeu de cartes créé une fois ne demande presque aucun effort hebdomadaire.
- 4 Consultation de gâteaux ponctuelle au lancement gpt-5.6 · briseur de règles · 16/20 points (8 + 8) Le premier samedi après le lancement, une consultation de gâteaux ouverte a lieu pendant quatre heures : les invités choisissent la saveur et le style à partir de cartes d'échantillons, puis passent leur commande eux-mêmes via des codes QR disposés pour eux. Cela brise délibérément la contrainte souple d'au plus deux heures d'effort cette semaine-là ; l'effort supplémentaire porte ses fruits car de vraies commandes, des problèmes d'utilisabilité observés et des photos et questions clients réutilisables sont produits en même temps — sans personnel supplémentaire ni publicité payante.
- 5 Partenaires d'occasion au lieu d'influenceurs gpt-5.6 · dans le cadre · 15/20 points (8 + 7) Les aires de jeux pour enfants, photographes, fleuristes, lieux de mariage et maisons de club reçoivent chacun un petit présentoir QR menant à une sélection de gâteaux préconfigurée pour leur occasion. En retour, la boulangerie nomme ces partenaires sur une page de recommandations locales ; cinq demandes ciblées par mois suffisent, et les commissions et la portée payante sont éliminées.
- 6 Rotation de gâteaux pour bureaux et clubs gpt-5.6 · dans le cadre · 15/20 points (8 + 7) Les bureaux locaux, cabinets et clubs obtiennent une page où plusieurs anniversaires ou dates récurrentes peuvent être collectés et prépayés les uns après les autres. Les rotations trimestrielles, une fois configurées, transforment les occasions individuelles en commandes en série planifiables ; la sensibilisation peut être limitée à deux organisations par semaine.
- 7 Consultation de gâteaux hybride à la tablette du comptoir gemini-3.6-flash · briseur de règles · 14/20 points (7 + 7) Brise délibérément la contrainte souple « commande en ligne uniquement » en offrant 1 heure de consultation en magasin le vendredi, pendant laquelle les commandes sont saisies ensemble sur une tablette. Cela porte ses fruits car les clients indécis et plus âgés sont progressivement introduits au nouveau système en ligne.
- 8 Les avis deviennent une aide à la décision gpt-5.6 · voisin · 13/20 points (7 + 6) Comme petite recombinaison du matériel existant le plus fort, douze phrases significatives des 120 avis Google sont associées à des styles de gâteaux correspondants, chacun avec un lien de commande direct. Ainsi, les 4,7 étoiles ne sont pas seulement montrées comme un signal de confiance mais aident à la sélection de produits ; après une configuration unique, la page est largement sans entretien.
- 9 Présentoirs de gâteaux d'échantillons avec liens profonds vers la boutique gemini-3.6-flash · voisin · 13/20 points (6 + 7) Une galerie photo physique des plus beaux gâteaux dans la salle de vente comprend un code QR spécifique avec chaque photo qui ouvre exactement ce modèle de gâteau présélectionné dans la boutique en ligne. Mutation de l'idée 1 : relier le présentoir en magasin avec un lien profond direct dans la boutique.
- 10 Optimisation du profil Google et liens d'avis automatisés gemini-3.6-flash · dans le cadre · 12/20 points (6 + 6) Le profil Google solide (4,7 étoiles) est complété par le bouton officiel « Commander en ligne » et mis à jour chaque semaine avec une photo des gâteaux actuels. Au retrait, les clients reçoivent un modèle par e-mail avec un lien vers la page d'avis et de récommande. Prend moins de 30 minutes par semaine.
- 11 Code QR teaser sur les reçus et sacs à pain gemini-3.6-flash · dans le cadre · 11/20 points (6 + 5) Un code QR accrocheur est imprimé sur chaque reçu et sur l'emballage, menant directement au configurateur de gâteaux en ligne (« Planifiez votre gâteau de rêve pour votre célébration en ligne »). Cela convertit les clients quotidiens en pré-commandes numériques sans effort supplémentaire au comptoir.
- 12 Partenariat B2B avec des lieux d'événements locaux gemini-3.6-flash · dans le cadre · 11/20 points (6 + 5) Des présentoirs et dépliants avec un code de réservation direct pour le site Web sont placés dans des restaurants locaux, des granges d'événements et des organisateurs de mariage. Les clients célébrants réservent leur gâteau directement en ligne, tandis que le lieu reçoit une petite indemnité de dépenses ou une recommandation en retour.
- 13 Calendrier d'anniversaire pour crèches et écoles gemini-3.6-flash · voisin · 10/20 points (4 + 6) Coopération avec les jardins d'enfants locaux via des dépliants d'information pour les conseils de parents contenant un code de réduction fixe pour les gâteaux à thème pour enfants. Mutation de l'idée 3 : au lieu de partenaires B2B généraux, l'occasion à haute fréquence des anniversaires d'enfants est spécifiquement adressée de manière automatisée.
- 14 Atelier mensuel miniature pour gâteaux décorés gemini-3.6-flash · briseur de règles · 10/20 points (4 + 6) Brise délibérément la contrainte souple « maximum 2 heures de temps par semaine », car un atelier de 4 heures a lieu une fois par mois. Cela porte ses fruits car les participants agissent comme des ambassadeurs de marque, créent un contenu enthousiaste sur les réseaux sociaux et sont assurés de passer des commandes de suivi via la boutique en ligne.
- 15 Lien de commande sur chaque boîte à gâteaux claude · dans le cadre · 8/20 points (4 + 4) Imprimez un code QR vers la page de commande sur les boîtes à gâteaux et les reçus, afin que chaque client qui achète déjà un gâteau puisse recommander pour le prochain anniversaire sans appeler.
Note de Kirat à Claude : Meilleure idée briseur de règles seulement au rang 4 : « Consultation de gâteaux ponctuelle au lancement » — elle brise délibérément une contrainte souple. Défendez-la une fois avant de la rejeter.
Réfléchissez avec Kirat à la manière de réduire les incidents de facturation en deux trimestres sans sortir la facturation du monolithe.
kirat_brainstorm a demandé au conseil
Le conseil a proposé 15 idées et a évalué chacune anonymement. Les trois premières :
- Pare-feu de base de données autour des tables de facturation (17/20 points)
- Invariants financiers exécutables (17/20 points)
- Rejeu d'incident comme épreuve de sortie (17/20 points)
En coulisses
kirat_brainstorm Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_BRAINSTORM · EFFORT : STANDARD · 15 IDÉES · 1 TOUR · 0,06 $
Sujet : Idées pour réduire les incidents de production causés par le module de facturation en deux trimestres, sans l'extraire en un service séparé
Contexte envoyé : Équipe de 8 ingénieurs. Un monolithe TypeScript, environ 60 000 lignes, une base de données Postgres, déployé plusieurs fois par jour. Le module de facturation change chaque semaine et a causé 5 des 8 derniers incidents de production, principalement via d'autres modules lisant et écrivant directement dans les tables de facturation. Personne dans l'équipe n'a fait fonctionner un système distribué en production. La direction veut moins d'incidents en deux trimestres. CONTRAINTE : pas de réécriture du module de facturation. CONTRAINTE : le travail de fonctionnalités sur la facturation continue chaque semaine.
Résultat du conseil
- 1 Pare-feu de base de données autour des tables de facturation gpt-5.6 · dans le cadre · 17/20 points (9 + 8) Créez des rôles Postgres distincts pour les chemins de code de facturation et hors facturation du monolithe, puis révoquez les écritures directes sur les tables de facturation depuis le rôle applicatif général. Acheminez toutes les mutations via un petit ensemble de procédures stockées ou de fonctions de transaction révisées, en ajoutant d'abord une journalisation d'audit temporaire pour découvrir et migrer les appelants sans interrompre le travail hebdomadaire sur les fonctionnalités.
- 2 Invariants financiers exécutables gpt-5.6 · dans le cadre · 17/20 points (9 + 8) Encodez une courte liste d'invariants—tels que des factures finalisées immuables, des écritures comptables équilibrées, une création de charge idempotente et des transitions d'état valides—comme contraintes de base de données lorsque c'est sûr, et comme sondes de production planifiées sinon. Exécutez les mêmes sondes contre des fixtures anonymisées de type production dans l'intégration continue, transformant la connaissance des incidents en garde-fous permanents plutôt qu'en une vaste expansion des tests.
- 3 Rejeu d'incidents comme épreuve de validation des versions gpt-5.6 · dans le cadre · 17/20 points (9 + 8) Convertissez les cinq incidents de facturation en scénarios de rejeu déterministes utilisant des formes de requêtes capturées et des lignes assainies, puis exigez que chaque modification de facturation les survive. Ajoutez des tests génératifs qui permutent les nouvelles tentatives, les événements dupliqués, l'ordre des transactions et les échecs partiels autour de ces scénarios exacts, ciblant le voisinage des pannes plutôt que de tenter une couverture exhaustive du monolithe.
- 4 Application en mode ombre de la frontière de facturation gpt-5.6 · voisin · 16/20 points (9 + 7) Comme mutation à moindre risque du pare-feu de base de données, conservez les permissions actuelles au départ mais journalisez chaque requête touchant les tables de facturation avec son module, son site d'appel et son identifiant de transaction. Après quatre semaines, transformez les écritures inattendues en échecs d'intégration continue, puis en erreurs de production module par module ; cela substitue une application progressive à un basculement immédiat des permissions.
- 5 Tableau de bord du rayon d'impact de la facturation gpt-5.6 · dans le cadre · 16/20 points (9 + 7) Placez les comportements de facturation risqués—pas tout le module—derrière des interrupteurs d'arrêt côté serveur et des déploiements progressifs en pourcentage, avec des tableaux de bord liés aux anomalies de facture, de paiement et de rapprochement. Chaque fonctionnalité hebdomadaire est livrée avec un chemin de repli testé afin que les intervenants puissent désactiver le nouveau comportement sans annuler des déploiements non liés du monolithe ni défaire des migrations de schéma.
- 6 Encapsulation de schéma Postgres et sécurité au niveau des lignes gemini-3.6-flash · dans le cadre · 15/20 points (7 + 8) Isolez les tables de facturation dans un schéma Postgres dédié (billing.*) et révoquez l'accès en écriture et en lecture directe aux autres rôles de base de données. Les modules n'y accèdent que via des vues SQL définies ou des interfaces stockées. Cela élimine directement la cause principale des incidents au niveau de la base de données.
- 7 Tests de contrat et pipeline en mode ombre pour les versions de facturation gemini-3.6-flash · dans le cadre · 15/20 points (8 + 7) Établissez des tests de contrat automatisés pilotés par les consommateurs pour toutes les interfaces de facturation dans le pipeline d'intégration continue. De plus, les modifications de facturation affectant les calculs critiques s'exécutent en mode ombre en production, sans effets secondaires et avec une vérification automatique des différences.
- 8 Une seconde base de données comme instrument de sécurité gpt-5.6 · briseur de règles · 14/20 points (7 + 7) Brisez délibérément l'hypothèse implicite d'« une seule base de données Postgres » en ajoutant une base de données miroir en lecture seule alimentée par réplication logique, tout en conservant la facturation dans le monolithe et en gardant la base principale comme unique écrivain. Exécutez les nouvelles lectures de facturation et les vérifications de rapprochement contre les deux bases, comparez les résultats avant exposition, et utilisez le miroir pour les requêtes forensiques afin que le diagnostic d'incident ne puisse pas surcharger ou muter accidentellement la production.
- 9 Linting strict des frontières de modules et façade d'API publique gemini-3.6-flash · dans le cadre · 14/20 points (7 + 7) Introduisez un linting d'architecture via dependency-cruiser qui interdit les importations directes des internes de facturation dans d'autres modules à l'étape de construction. La communication ne peut avoir lieu que via une interface unique et type-safe BillingFacade, afin que le couplage rampant soit bloqué immédiatement.
- 10 Passeports de modification de facturation gpt-5.6 · dans le cadre · 13/20 points (7 + 6) Exigez que chaque demande d'extraction liée à la facturation porte un passeport vérifié par machine : tables affectées, invariants, compatibilité de migration, chemin de retour arrière et une requête de production prouvant la santé après déploiement. Une porte CODEOWNERS plus une revue rotative de 15 minutes par un responsable de la facturation maintiennent le processus léger pour les changements hebdomadaires tout en concentrant l'examen sur les effets inter-modules.
- 11 Vues Postgres en lecture seule générées automatiquement pour les modules externes gemini-3.6-flash · voisin · 13/20 points (7 + 6) Une mutation de l'encapsulation de schéma : au lieu de refactorisations d'API coûteuses, des vues Postgres en lecture seule sont fournies automatiquement pour les requêtes externes. Les modules externes ne lisent que ces vues stables, tandis que l'accès direct aux tables est bloqué via les permissions de base de données.
- 12 Bus d'événements asynchrone en processus pour les modèles de lecture gemini-3.6-flash · dans le cadre · 12/20 points (4 + 8) Au lieu que d'autres modules interrogent directement les tables de facturation, le module de facturation envoie des événements en mémoire lors des changements d'état. Les modules récepteurs construisent leurs propres projections locales. Cela découple complètement l'accès en lecture des tables de facturation sans introduire de systèmes distribués.
- 13 Gel des fonctionnalités de deux semaines pour l'encapsulation de la facturation gemini-3.6-flash · briseur de règles · 11/20 points (5 + 6) Brise la contrainte implicite de livraison hebdomadaire continue de fonctionnalités pendant exactement deux semaines. Toute l'équipe se concentre sur la séparation des couplages de base de données. L'effort ponctuel jette les bases d'une réduction durable du nombre d'incidents sur les 5 mois restants.
- 14 Rôle de base de données par module claude · dans le cadre · 11/20 points (6 + 5) Donnez à la facturation son propre schéma et rôle Postgres et révoquez l'accès en écriture des autres modules aux tables de facturation, afin que les écritures directes échouent en préproduction avant d'atteindre la production.
- 15 Partitionnement physique de la base en une seconde instance Postgres gemini-3.6-flash · briseur de règles · 9/20 points (3 + 6) Brise la contrainte implicite de l'architecture à base unique mais conserve le code monolithique. Les données de facturation sont déplacées dans leur propre instance de base de données, ce qui rend techniquement impossibles les jointures SQL transversales. La complexité opérationnelle reste minimale car le code reste monolithique.
Note de Kirat à Claude : La meilleure idée de briseur de règles n'est qu'au rang 8 : « Une seconde base de données comme instrument de sécurité » — elle brise délibérément une contrainte implicite. Défendez-la une fois avant de l'écarter.
Réfléchissez avec Kirat à la manière de réduire le temps de sélection d'environ 3 000 enregistrements sans affaiblir la revue.
kirat_brainstorm a demandé au conseil
Le conseil a proposé 14 idées et a évalué chacune anonymement. Les trois premières :
- Porte d'exclusion à deux humains (18/20 points)
- Sprint de calibration avec un registre de cas limites (16/20 points)
- Console binaire rapide, pas une extraction de données miniature (15/20 points)
En coulisses
kirat_brainstorm Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_BRAINSTORM · EFFORT : STANDARD · 14 IDÉES · 1 TOUR · 0,18 $
Sujet : Idées pour réduire le temps de sélection des titres et résumés d'environ 3 000 enregistrements sans affaiblir la rigueur d'une revue systématique
Contexte envoyé : Revue systématique en recherche sur les services de santé, prévue pour publication. Protocole actuel : deux sélectionneurs humains indépendants, les conflits résolus par discussion. Le temps du personnel est limité. Les évaluateurs de la revue demanderont comment la sélection a été effectuée. Manquer une étude pertinente (exclusion faussement négative) est pire que d'inclure une étude non pertinente. CONTRAINTE : la méthode doit être rapportable selon PRISMA 2020. CONTRAINTE : le taux de fausses exclusions ne doit pas augmenter.
Résultat du conseil
- 1 Porte d'exclusion à deux humains gpt-5.6 · briseur de règles · 18/20 points (10 + 8) Faites examiner chaque enregistrement par le réviseur A, mais envoyez directement les inclusions et les décisions incertaines de A ; le réviseur B évalue indépendamment uniquement les exclusions proposées par A. N'excluez un enregistrement que lorsque les deux humains l'excluent indépendamment, et faites automatiquement avancer chaque désaccord, éliminant ainsi la plupart des discussions de conflit. Cela brise délibérément l'hypothèse douce du protocole actuel selon laquelle deux humains doivent évaluer chaque enregistrement ; cela en vaut la peine car cela économise du temps de criblage tout en permettant structurellement plus de fausses inclusions, mais aucune fausse exclusion supplémentaire, et c'est simple à décrire dans la section du processus de sélection PRISMA.
- 2 Sprint de calibrage avec un registre des cas limites gpt-5.6 · dans le cadre · 16/20 points (9 + 7) Effectuez un double criblage indépendant d'un premier lot stratifié, résolvez les conflits et transformez les ambiguïtés récurrentes en règles opérationnelles courtes avec des exemples positifs et négatifs. Verrouillez les règles avant de continuer ; ne conservez les décisions pilotes que si les critères d'éligibilité n'ont pas changé, sinon re-criblez-les. Cela préserve le double criblage indépendant tout en réduisant la délibération ultérieure et le temps de résolution des conflits, et le calibrage peut être rapporté sous PRISMA.
- 3 Console binaire rapide, pas d'extraction de données miniature gpt-5.6 · dans le cadre · 15/20 points (8 + 7) Donnez aux deux réviseurs une interface aveugle pilotée au clavier limitée à inclure, exclure ou incertain, avec le titre et le résumé complets toujours visibles ; reportez le codage détaillé et les raisons d'exclusion à l'examen du texte intégral. PRISMA 2020 n'exige pas de raisons au niveau de l'enregistrement à l'étape titre-résumé. Le processus de décision reste inchangé, mais le temps de lecture, de clic et de documentation évitable diminue.
- 4 Soupape de décharge machine à inclusion uniquement gpt-5.6 · voisin · 15/20 points (9 + 6) Comme mutation en une étape de la porte d'exclusion à deux humains, faites passer les exclusions proposées par A dans un classificateur validé qui ne peut que libérer des enregistrements vers l'inclusion, jamais les exclure ; le réviseur B examine indépendamment tout ce que le classificateur ne libère pas. L'exclusion finale nécessite toujours des décisions concordantes de deux humains, donc une erreur machine peut ajouter des textes complets mais ne peut pas créer de fausse exclusion. Rapportez le modèle, la version, les entrées, les seuils, la validation et son rôle strictement à inclusion uniquement sous PRISMA.
- 5 Criblage d'exclusion asymétrique gemini-3.6-flash · dans le cadre · 15/20 points (7 + 8) Un premier réviseur classe les 3 000 enregistrements complètement. Le deuxième réviseur ne vérifie que les enregistrements que le premier réviseur a exclus, afin de détecter les faux négatifs (les inclusions sont acceptées directement). Cela réduit presque de moitié l'effort du deuxième réviseur, maintient le risque de fausses exclusions extrêmement bas et satisfait toutes les exigences PRISMA.
- 6 Contournement du criblage pour les strates à haut rendement gpt-5.6 · briseur de règles · 13/20 points (8 + 5) Prédéclarez des sous-ensembles à haut rendement—tels que les enregistrements d'un bloc de recherche très spécifique, les descendants directs d'études éligibles connues, ou les enregistrements déjà inclus dans une revue étroitement alignée—et envoyez-les tous directement à la récupération du texte intégral sans décisions titre-résumé. Cela brise délibérément le protocole doux à deux cribleurs pour ces enregistrements, mais cela ne peut pas augmenter les fausses exclusions car rien dans le sous-ensemble n'est exclu ; le compromis est un travail supplémentaire sur le texte intégral. Rapportez la règle de contournement et les comptes résultants explicitement dans le diagramme de flux PRISMA et les méthodes de sélection.
- 7 Criblage priorisé via l'apprentissage actif gemini-3.6-flash · dans le cadre · 13/20 points (5 + 8) Les deux cribleurs humains utilisent un outil d'apprentissage actif (tel que ASReview) qui trie les titres/résumés pertinents en haut. Dès qu'un critère d'arrêt statistiquement validé est atteint (par exemple 500 résultats non pertinents consécutifs), le criblage est terminé. La procédure économise jusqu'à 70 % du temps, peut être documentée de manière conforme à PRISMA 2020 et maintient un taux de fausses exclusions minimal grâce au calibrage de l'algorithme.
- 8 Déduplication exacte uniquement avant le criblage gpt-5.6 · dans le cadre · 12/20 points (8 + 4) Supprimez uniquement les enregistrements prouvés identiques via DOI, numéro d'accession de base de données ou correspondance bibliographique normalisée exacte ; conservez la copie la plus riche en métadonnées et signalez simplement les quasi-doublons incertains. Les deux réviseurs criblent ensuite indépendamment chaque enregistrement unique restant, tandis que PRISMA rapporte les doublons supprimés avant le criblage. Cela réduit le volume sans créer de voie pour exclure une étude unique.
- 9 Cascade humain-IA avec un filet de sécurité IA gemini-3.6-flash · voisin · 12/20 points (5 + 7) Une mutation du criblage d'exclusion asymétrique : un cribleur humain traite tous les enregistrements seul, tandis qu'un modèle IA réglé pour une sensibilité maximale ne vérifie que les exclusions humaines. Un deuxième humain ne vérifie que là où il y a des divergences. Cela réduit la capacité humaine de plus de 50 % avec une couverture complète.
- 10 Deuxième réviseur IA entièrement automatisé gemini-3.6-flash · briseur de règles · 11/20 points (3 + 8) Brise la contrainte douce selon laquelle deux êtres humains doivent nécessairement faire le criblage. Un grand modèle de langage (LLM) assume le rôle du deuxième réviseur indépendant avec une invite à zéro faux négatif. Cela en vaut la peine car le temps de travail humain est réduit de moitié et il a été démontré que les LLM atteignent des taux de rappel élevés dans le criblage des résumés ; PRISMA 2020 permet explicitement de rapporter les outils IA.
- 11 Criblage unique adapté au risque avec triage de confiance gemini-3.6-flash · briseur de règles · 11/20 points (5 + 6) Brise la contrainte douce du double criblage continu pour l'ensemble du jeu de données. Si le premier réviseur déclare une confiance subjective élevée et que des raisons d'exclusion claires existent, le deuxième réviseur est supprimé ; seuls les cas incertains passent en double criblage. Cela économise jusqu'à 60 % du temps du personnel, tandis que le risque de manquer des études reste minimal car les ressources sont concentrées sur les zones grises.
- 12 Tour de calibrage d'abord claude · dans le cadre · 11/20 points (6 + 5) Les deux cribleurs criblent les mêmes 100 enregistrements, discutent de chaque conflit et affinent les critères d'éligibilité avant le tour principal, de sorte que les conflits et relectures ultérieurs diminuent.
- 13 Criblage rapide binarisé avec triage IA gemini-3.6-flash · voisin · 10/20 points (4 + 6) Mutation de la priorisation par apprentissage actif : l'équipe utilise une interface simplifiée pour une évaluation rapide (uniquement des clics pour « Inclure/Incertain » vs. « Exclure »). Un modèle IA évalue les incertitudes en arrière-plan et n'envoie que les candidats limites pour un double contrôle approfondi. Minimise drastiquement la charge cognitive et le temps de lecture par résumé.
- 14 Pré-filtrage déterministe via des algorithmes de correspondance gemini-3.6-flash · dans le cadre · 6/20 points (3 + 3) Des filtres de recherche conservateurs et des scripts éliminent à l'avance les résultats clairement inadaptés (par exemple, mauvaise conception d'étude ou population non humaine). Les deux cribleurs ne vérifient ces exclusions automatisées que via un échantillon représentatif (par exemple 10 %). Cela réduit le volume total à cribler manuellement de manière conforme à PRISMA et sans perte de sensibilité.
Toutes les idées, complètes et classées. L'idée propre de Claude participe anonymement et à égalité. Le sujet et le contexte ont été envoyés en anglais ; les idées que les membres ont écrites en allemand sont traduites ici.
Cinq titres et en-têtes de différents domaines. Chaque membre écrit une variante, le brouillon de Claude participe, et les deux membres évaluent tous les trois anonymement. Choisissez-en un.
Laissez Kirat écrire des variantes d'en-tête pour ma page de tarification. Max. 8 mots, pas de superlatifs.
kirat_create a demandé au conseil
La variante gagnante (17/20 points) : « Get paid without Word—free for 14 days »
Mon propre brouillon est arrivé en #2 ; les membres ont évalué les trois anonymement.
Dans les coulisses
kirat_create Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_CREATE · MODE : VARIANTS · EFFORT : STANDARD · 0,03 $
Brief : En-tête pour la page de tarification d'un petit outil de facturation pour indépendants (19 USD par mois, essai gratuit de 14 jours). Public : indépendants qui rédigent actuellement des factures dans Word ou Excel. Objectif : rendre l'essai sans risque et intéressant. Format : un en-tête, en anglais.
Critères : max. 8 mots · concret, pas de superlatifs · mentionne le temps gagné ou le fait d'être payé · pas de points d'exclamation
Résultat du conseil
- 1 « Get paid without Word—free for 14 days » gpt-5.6 · 17/20 points (9 + 8) Parle directement aux utilisateurs de Word, met le fait d'être payé au premier plan et rend l'essai sans risque concret.
- 2 « Send invoices in minutes. Get paid on time. » claude · 17/20 points (8 + 9) Le propre brouillon de l'orchestrateur.
- 3 « Replace Word and Excel. Get paid days faster. » gemini-3.6-flash · 14/20 points (7 + 7) Aborder directement le flux de travail manuel actuel offre un contraste immédiat, présentant l'essai comme une mise à niveau rapide et sans risque du flux de trésorerie sans utiliser de battage générique.
Laissez Kirat écrire des variantes d'en-tête pour notre page d'atterrissage pour les magasins de meubles sur WooCommerce. Max. 10 mots, pas de jargon.
kirat_create a demandé au conseil
La variante gagnante (18/20 points) : « Losing furniture buyers to a slow, frustrating WooCommerce store? »
Mon propre brouillon est arrivé en #3 ; les membres ont évalué les trois anonymement.
Dans les coulisses
kirat_create Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_CREATE · MODE : VARIANTS · EFFORT : STANDARD · 0,02 $
Brief : En-tête pour la page d'atterrissage d'une petite agence numérique sur les refontes de boutiques pour les détaillants de meubles qui utilisent WooCommerce. Public : propriétaires de magasins de meubles de taille moyenne sans développeurs internes. Objectif : réserver un contrôle gratuit de la boutique. Format : un en-tête, marché allemand mais écrivez-le en anglais.
Critères : max. 10 mots · nomme la douleur du lecteur, pas l'agence · pas de jargon comme « headless » ou « omnichannel » · pas de superlatifs
Résultat du conseil
- 1 « Losing furniture buyers to a slow, frustrating WooCommerce store? » gemini-3.6-flash · 18/20 points (8 + 10) Cible directement la frustration principale du propriétaire—les ventes perdues en raison de mauvaises performances de la boutique—sans utiliser de jargon technique ni de langage d'agence auto-congratulatoire.
- 2 « Is your WooCommerce shop turning furniture buyers away? » gpt-5.6 · 17/20 points (9 + 8) Nomme directement la douleur centrale et parle aux détaillants de meubles sans jargon.
- 3 « Fewer shop emergencies, more time for your furniture. » claude · 11/20 points (7 + 4) Le propre brouillon de l'orchestrateur.
Laissez Kirat écrire des variantes d'en-tête pour la nouvelle page de commande de gâteaux de la boulangerie. Court, local, pas comme une chaîne.
kirat_create a demandé au conseil
La variante gagnante (19/20 points) : « Your celebration cake, baked here for pickup. »
Mon propre brouillon est arrivé en #3 ; les membres ont évalué les trois anonymement.
Dans les coulisses
kirat_create Ce que Claude envoie à Kirat
ENREGISTRÉ 2026-10-13 · KIRAT_CREATE · MODE : VARIANTS · EFFORT : STANDARD · 0,02 $
Brief : En-tête pour la nouvelle page de commande en ligne de gâteaux personnalisés de la boulangerie. Public : clients locaux qui commandaient jusqu'ici par téléphone. Objectif : rendre la commande en ligne facile et personnelle. Format : un en-tête, marché allemand mais écrivez-le en anglais.
Critères : max. 8 mots · concret, pas de superlatifs · mentionne le retrait ou l'occasion · sonne comme une boulangerie locale, pas une chaîne
Résultat du conseil
- 1 « Your celebration cake, baked here for pickup. » gpt-5.6 · 19/20 points (10 + 9) Chaleureux, concret et personnel : « baked here » semble local, tandis que « for pickup » rend le processus en ligne simple.
- 2 « Order your custom birthday cake, pick up fresh. » gemini-3.6-flash · 16/20 points (8 + 8) L'en-tête nomme spécifiquement l'occasion ainsi que le retrait et, grâce à la promesse de fraîcheur, transmet la qualité artisanale locale sans clichés impersonnels.
- 3 « Your cake, your date. Order in two minutes. » claude · 9/20 points (5 + 4) Le propre brouillon de l'orchestrateur.
Laissez Kirat trouver un titre pour ma proposition de durcir d'abord les limites de la facturation dans le monolithe.
kirat_create a demandé au conseil
Mon propre brouillon a gagné (19/20 points) : « Fix billing's boundaries first, split it later if needed »
Dans les coulisses
kirat_create Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_CREATE · MODE : VARIANTS · EFFORT : STANDARD · 0,02 $
Brief : Titre pour une proposition d'ingénierie interne : renforcer les limites du module de facturation dans le monolithe avant d'envisager un service séparé. Public : 8 ingénieurs et la direction qui souhaitent moins d'incidents. Objectif : faire lire et approuver la proposition. Format : un titre, en anglais.
Critères : max. 10 mots · énonce la décision, pas seulement le sujet · pas de jargon · compréhensible pour les non-ingénieurs
Résultat du conseil
- 1 "Fix billing's boundaries first, split it later if needed" claude · 19/20 points (10 + 9) Le brouillon de l'orchestrateur lui-même.
- 2 "Keep Billing Together, but Isolate It to Prevent Incidents" gpt-5.6 · 16/20 points (9 + 7) Le titre énonce la décision de conserver la facturation dans le monolithe tout en renforçant ses limites, et relie ce choix à l'objectif commun de réduire les incidents.
- 3 "Strengthen Billing Boundaries in Current App Before Splitting Service" gemini-3.6-flash · 13/20 points (7 + 6) Le titre prend une décision claire sur l'orientation, évite le jargon inutile comme « monolithe » pour la direction, et répond directement à l'objectif commun de stabilité.
Laissez Kirat trouver un titre pour notre article de méthodes sur un LLM comme outil de sélection supplémentaire. Précis, sans exagération.
kirat_create a demandé au conseil
La variante gagnante (18/20 points) : « Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews »
Mon propre brouillon est arrivé en 2e position ; les membres ont évalué les trois titres de manière anonyme.
En coulisses
kirat_create Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_CREATE · MODE : VARIANTS · EFFORT : STANDARD · 0,02 $
Brief : Titre pour un article de méthodes sur l'utilisation d'un LLM comme outil de sélection supplémentaire dans une revue systématique en recherche sur les services de santé. Public : chercheurs et évaluateurs de revues. Objectif : précis et citable, sans exagération. Format : un titre, peut inclure un sous-titre après deux-points, en anglais.
Critères : max. 20 mots · nomme la méthode et le contexte · aucune affirmation au-delà des données · pas de mots accrocheurs comme « révolutionner »
Résultat du conseil
- 1 "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews" gpt-5.6 · 18/20 points (9 + 9) Le titre identifie la méthode de sélection, le contexte de la revue systématique et le domaine de la recherche sur les services de santé sans impliquer de performance ou de bénéfice.
- 2 "An LLM as additional screener: a prospective comparison in a health services systematic review" claude · 16/20 points (9 + 7) Le brouillon de l'orchestrateur lui-même.
- 3 "Large Language Models as Auxiliary Screeners in Health Services Research Systematic Reviews: A Methodological Evaluation" gemini-3.6-flash · 15/20 points (7 + 8) Le titre nomme précisément le domaine d'application et la méthodologie, évite les mots déclencheurs et adopte un ton factuel et citable pour un contexte de publication scientifique.
Les titres et manchettes sont affichés tels qu'écrits, en anglais, comme demandé dans les briefs. Le raisonnement dans l'entrée de Claude est l'étiquette propre de Kirat. Les raisonnements rédigés en allemand sont traduits ici.
Cinq briefs d'images de domaines différents. OpenAI et Google génèrent chacun une image, et les deux membres évaluent les deux images de manière anonyme. Choisissez-en une.
Laissez Kirat créer une image d'en-tête pour la page d'accueil de mon outil de facturation : un bureau calme à la maison, sans écran lisible.
kirat_image a demandé au conseil
Le jury a choisi l'image de gpt-image-2 (18/20 points). Les deux membres ont évalué les deux images de manière anonyme.
En coulisses
kirat_image Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_IMAGE · MODE : VARIANTS · PAYSAGE · ≈ 0,17 $
Brief : Image d'en-tête pour la page d'accueil d'un petit outil de facturation pour indépendants : un bureau domestique bien rangé le matin avec un ordinateur portable (écran tourné ou flou, aucune interface lisible), une tasse de café et un carnet en papier. Lumière naturelle, style documentaire calme, pas de texte, pas de logos, pas de visages.
Critères : évoque un véritable espace de travail d'indépendant, pas un bureau de photo de stock · calme et épuré · laisse un espace calme pour un titre · pas de texte, de logos ou d'écrans lisibles
Résultat du conseil

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

2 gemini-3.1-flash-image · 13/20 points (6 + 7)
Laissez Kirat créer une photo produit pour la boutique de meubles : une table à manger en chêne avec quatre chaises dans un vrai salon.
kirat_image a demandé au conseil
Le jury a choisi l'image de gemini-3.1-flash-image (18/20 points). Les deux membres ont évalué les deux images de manière anonyme.
En coulisses
kirat_image Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_IMAGE · MODE : VARIANTS · PAYSAGE · ≈ 0,17 $
Brief : Photo produit pour une boutique de meubles en ligne : une table à manger en chêne massif avec quatre chaises dans un salon lumineux et réaliste d'Europe centrale. Lumière naturelle, style éditorial d'intérieur, pas de texte, pas de logos, pas de personnes.
Critères : la table est le sujet clair · texture et couleur du bois fidèles à la réalité · ressemble à une vraie maison, pas à un rendu 3D · pas de texte ni de logos
Résultat du conseil

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

2 gpt-image-2 · 17/20 points (8 + 9)
Laissez Kirat créer une image d'en-tête pour la page de commande de gâteaux : un gâteau d'anniversaire dans une boîte, prêt à être récupéré.
kirat_image a demandé au conseil
Le jury a choisi l'image de gpt-image-2 (17/20 points). Les deux membres ont évalué les deux images de manière anonyme.
En coulisses
kirat_image Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_IMAGE · MODE : VARIANTS · PAYSAGE · 0,17 $
Brief : Image d'en-tête pour la nouvelle page de commande en ligne de gâteaux personnalisés d'une petite boulangerie locale : un gâteau d'anniversaire fini sur un comptoir en bois dans une boulangerie familiale lumineuse et réaliste, prêt à être récupéré dans une simple boîte à gâteau en carton. Lumière naturelle, style photo documentaire, pas de texte, pas de logos, pas de visages.
Critères : ressemble à une vraie boulangerie locale, pas à une chaîne ou à une photo de stock · le gâteau est le sujet clair · laisse un espace calme pour un titre · pas de texte ni de logos dans l'image
Résultat du conseil

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

2 gemini-3.1-flash-image · 7/20 points (4 + 3)
Laissez Kirat créer une image de couverture pour notre article de blog sur le démêlage de la facturation du monolithe. Abstraite et calme.
kirat_image a demandé au conseil
Le jury a choisi l'image de gpt-image-2 (16/20 points). Les deux membres ont évalué les deux images de manière anonyme.
En coulisses
kirat_image Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_IMAGE · MODE : VARIANTS · PAYSAGE · ≈ 0,17 $
Brief : Image de couverture pour un article de blog d'ingénierie interne sur le démêlage d'un module de facturation d'un monolithe : une illustration abstraite et calme d'un bloc clairement délimité, séparé d'un amas dense de blocs interconnectés. Style plat, couleurs douces, pas de texte, pas de logos.
Critères : l'idée d'une limite claire est lisible en un coup d'œil · calme, pas dramatique · fonctionne en petite taille · pas de texte ni de logos
Résultat du conseil

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

2 gemini-3.1-flash-image · 10/20 points (6 + 4)
Laissez Kirat créer une image de couverture pour ma conférence sur le dépistage assisté par IA. Sérieuse, sans robots.
kirat_image a demandé au conseil
Le jury a choisi l'image de gpt-image-2 (18/20 points). Les deux membres ont évalué les deux images de manière anonyme.
En coulisses
kirat_image Ce que Claude envoie à Kirat
ENREGISTRÉ LE 2026-10-13 · KIRAT_IMAGE · MODE : VARIANTS · PAYSAGE · ≈ 0,17 $
Brief : Image de couverture pour une conférence sur le dépistage assisté par IA dans les revues systématiques : une pile soignée de résumés de recherche imprimés sur un bureau, certains triés dans deux bacs, lumière douce, style photo documentaire. Pas de texte lisible, pas de logos, pas de visages.
Critères : sérieux et scientifique, pas d'exagération · pas de robots ni de cerveaux lumineux · l'idée de tri est visible · pas de texte lisible ni de logos
Résultat du conseil

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

2 gemini-3.1-flash-image · 9/20 points (5 + 4)
Images générées par IA, réduites et non retouchées par ailleurs. Les coûts marqués ≈ proviennent d'exécutions en parallèle : le coût de l'image de chaque exécution plus une part égale des appels d'évaluation. Le classement est une présélection, et le choix final vous appartient. Les évaluations rédigées en allemand sont traduites ici.
02 — Le problème
Un modèle, un angle mort.
L'auto-évaluation flatte
Un modèle qui vérifie son propre travail se trouve convaincant. Un second passage du même modèle n'est pas une vérification indépendante.
Plus de tours ne suffisent pas
Kirat limite le débat à deux tours, dans le code, pas dans une invite. Un modèle ne peut pas contourner la limite en discutant. S'il n'y a toujours pas de majorité, on vous le dit.
Des familles différentes échouent différemment
Kirat soumet la même question à Claude, ChatGPT et Gemini et vous montre la répartition — y compris qui a divergé, et pourquoi.
03 — Comment ça marche
Demandez une fois. Obtenez trois positions et un vote.
Étape 1
Vous demandez dans Claude
En langage naturel, comme toujours : Demandez au conseil Kirat : Shopify ou WooCommerce pour ma boutique ? Donnez aussi votre propre position. Claude appelle Kirat pour vous.
Étape 2
Trois positions indépendantes
ChatGPT et Gemini répondent chacun sans voir la réponse de l'autre. Claude prend sa propre position comme troisième membre.
Étape 3
Un vote, avec la dissidence conservée
Si deux des trois sont d'accord, c'est l'avis majoritaire. Vous voyez chaque position avec ses raisons, et qui a divergé. Sans majorité, Kirat le dit, et la décision vous appartient.
Kirat examine aussi le code (chaque constat est vérifié par l'autre famille de modèles), classe des idées, critique vos textes et compare des images. La rediffusion ci-dessus montre tout cela.
Aucune compétence en codage requise. Vous installez une extension Claude et créez une clé API chez OpenAI et une chez Google ; les étapes d'installation sont dans les détails ci-dessous.
Les neuf outils et un exemple d'appel enregistré →
04 — Tarification
Un seul achat pour Claude Desktop et Claude Code.
Pas d'abonnement, pas de sièges, pas de compte chez nous. Vérifiez où Kirat fonctionne avant d'acheter :
Où Kirat fonctionne
Fonctionne dans
- Les conversations Claude Desktop sur macOS et Windows
- Claude Code dans un terminal, dans VS Code ou dans l'onglet Code de Claude Desktop
- Les sessions cloud Claude Code, après une configuration unique par environnement cloud Avec des limites : les clés stockées comme secrets réseau restent illisibles (sur les plans Team et Enterprise, un administrateur peut devoir les ajouter), les clés dans les variables d'environnement sont lisibles par tous ceux qui utilisent l'environnement, et le budget quotidien compte par session.
Ne fonctionne pas dans
- La discussion dans le navigateur (claude.ai) ou dans les applications mobiles Claude
- Les tâches Cowork qui s'exécutent dans le cloud
- Certaines configurations d'entreprise : les proxys qui se connectent avec votre compte Windows (NTLM/Kerberos), et les organisations qui restreignent les extensions Desktop à une liste d'autorisation Demandez d'abord à votre équipe informatique.
Où ça fonctionne, en détail · Toutes les limites cloud
Extension Desktop + plugin Claude Code
Kirat
99 $
99 $ prix de lancement — les 50 premiers acheteurs
Ensuite 149 $. Achat unique. Un seul téléchargement ZIP avec les deux formats. Vous avez aussi besoin d'une clé API OpenAI et d'une clé Gemini : ce que vous demandez est envoyé aux deux fournisseurs, et ils vous facturent à l'usage.
- 01Extension Claude Desktop et plugin Claude Code, dans un seul téléchargement
- 02Script de configuration pour les sessions cloud Claude Code
- 03Les neuf outils : vote, revue de code, classement d'idées, critique de textes, comparaison d'images et plus
- 04Contrôle des coûts : un budget quotidien (5 $ par défaut) qui retient les appels qui pourraient le dépasser. Au mieux, donc fixez aussi des limites chez les fournisseurs
- 05Licence pour une personne, sur vos propres appareils et environnements cloud
- 06Mises à jour de compatibilité quand c'est possible — gratuites, mais sans garantie Runs in Claude Desktop (macOS/Windows) et Claude Code ; les sessions cloud de Claude Code nécessitent une configuration unique — pas dans le navigateur ni dans le chat mobile. Où il s'exécute · Limites cloud
Blueprint
49 $
Documents uniquement — pour construire ou adapter votre propre serveur de conseil avec un agent de codage. Pas nécessaire pour utiliser Kirat.
- 01La spécification : exigences structurées pour les outils
- 02Les décisions d'architecture, avec le raisonnement derrière chacune
- 03La liste de contrôle d'acceptation qu'un agent peut vérifier lui-même
- 04Les données de référence derrière les chiffres de ce site
Pas de code, pas d'extension installable.
Achat unique · Paiement via Lemon Squeezy (commerçant de référence), TVA gérée à la caisse · Remboursements : voir Conditions
L'utilisation de l'API est payée directement à OpenAI et Google, sous vos comptes — 0,02 $–0,15 $ par décision du conseil dans nos mesures.
Kirat n'est pas pour vous si…
- —vous utilisez Claude uniquement comme chat dans le navigateur ou sur votre téléphone. Kirat s'exécute dans Claude Desktop (macOS/Windows) et Claude Code, et dans les sessions cloud de Claude Code avec une configuration unique — pas dans ces chats.
- —vous avez besoin d'un service hébergé ou d'un support quelconque.
- —vous ne voulez pas de comptes API et de facturation chez deux fournisseurs.
- —vous prenez une poignée de décisions par mois et vous êtes satisfait de comparer les réponses dans des chats séparés à la main.
- —vous voulez une réponse qui semble certaine. Le rôle d'un conseil est de vous montrer la répartition, et parfois la répartition est la réponse.
- —vos données ne peuvent pas aller vers OpenAI ou Google. Tout ce que vous donnez à Kirat va aux deux, sous vos comptes et leurs conditions.
05 — Questions
Avant d'acheter.
En quoi est-ce différent de llm-council ou PAL MCP ?
Regardez les deux d'abord. llm-council est une application web open source ; son auteur la décrit comme non prise en charge par conception. PAL MCP est un serveur MCP gratuit et open source que vous installez via le terminal ; il prend en charge de nombreux fournisseurs et possède son propre outil de consensus. Vérifiez leur état actuel. Si l'un d'eux couvre ce dont vous avez besoin, utilisez-le.
La différence de Kirat réside dans l'ensemble : il s'installe via la boîte de dialogue d'extensions propre à Claude Desktop avec vos clés dans le stockage sécurisé du système d'exploitation, et il apporte une protection budgétaire avec un plafond quotidien, une limite de deux tours, un départage par domaine, des tickets en arrière-plan, une gestion des échecs, 345 tests, des champs de résultats en anglais et une utilisation en langage clair.
Dois-je être développeur ?
Non. Si vous pouvez installer une extension Claude et créer deux clés API, vous pouvez utiliser Kirat. Vous demandez à Claude en langage clair — Demandez au conseil Kirat : Postgres ou SQLite ? Donnez aussi votre propre position. — et Claude appelle les outils.
De quoi ai-je besoin ?
Claude Desktop sur macOS ou Windows. Il est livré avec son propre Node, donc vous n'installez rien d'autre. Ou Claude Code avec Node.js 20 ou version ultérieure. Pour les sessions cloud de Claude Code, une configuration unique de votre environnement cloud (voir ci-dessous).
Plus une clé API OpenAI et une clé API Google Gemini, toutes deux avec facturation activée. Kirat fonctionne aussi avec une seule clé : le conseil a alors un membre externe, et chaque résultat nomme la clé manquante.
Combien cela coûte-t-il à exécuter, et qu'est-ce qui empêche une facture incontrôlée ?
Vous payez OpenAI et Google directement pour ce que vous utilisez. Dans nos mesures, une décision du conseil coûte $0.02–$0.15, selon le niveau d'effort et la taille de l'entrée, et prend de 8 secondes à 3 minutes. La génération d'images coûte environ $0.05–$0.20 par appel.
La protection budgétaire réserve le coût du pire cas avant chaque appel et bloque les appels qui pourraient dépasser votre budget quotidien — 5 $ par jour UTC par défaut, ajustable. Elle est au mieux, donc définissez aussi des limites de dépenses chez les fournisseurs. kirat_status affiche le budget et les dépenses, et ne coûte rien.
Où vont mes données et mes clés ?
Vos données : tout ce que vous donnez à Kirat (questions, contexte, code, images) va directement à OpenAI et Google, sous vos comptes et leurs conditions — depuis votre ordinateur, ou dans les sessions cloud de Claude Code depuis votre propre environnement cloud via le proxy réseau d'Anthropic pour cet environnement. Il n'y a pas de serveur Kirat, pas de compte chez nous et pas de télémétrie. Nous ne voyons jamais vos clés ni vos données.
Vos clés : vous les saisissez dans la boîte de dialogue d'installation ou de paramètres propre à Claude. Claude Desktop les stocke dans le stockage sécurisé de votre système d'exploitation (Trousseau macOS, Gestionnaire d'informations d'identification Windows). Claude Code les stocke dans le Trousseau macOS ; sur Windows et Linux dans ~/.claude/.credentials.json, lisible uniquement par votre utilisateur. Nous recommandons un projet fournisseur séparé avec une limite de dépenses.
Dans les sessions cloud de Claude Code : Kirat s'exécute dans votre environnement cloud. Vous y stockez les clés comme secrets réseau : le proxy d'Anthropic les ajoute aux requêtes de Kirat à la sortie, donc personne dans une session ne peut les lire, pas même Claude. Sur les plans Team et Enterprise, selon votre rôle, un administrateur d'organisation peut devoir les ajouter. En secours, les clés peuvent être des variables d'environnement de cet environnement, lisibles par tous ceux qui l'utilisent.
Sur votre ordinateur : Kirat conserve un dossier .kirat dans votre dossier personnel avec le compteur de coût quotidien, le journal des coûts, les 20 derniers résultats (ils contiennent vos questions et réponses), le journal des décisions déléguées et des images générées. Vous pouvez le supprimer à tout moment. Toutes les sessions Kirat sur l'ordinateur le partagent, Desktop et Code.
Comment Kirat fonctionne-t-il dans les sessions cloud de Claude Code, et quelles sont les limites ?
Les sessions cloud — sessions cloud de l'onglet Code, Claude Code sur le web ou dans l'application mobile — s'exécutent sur les serveurs d'Anthropic dans un environnement cloud. L'extension sur votre ordinateur ne peut pas les atteindre. Au lieu de cela, vous configurez l'environnement cloud une fois :
- collez le bloc du téléchargement (
cloud/setup-script.txt) en haut du script de configuration de l'environnement ; - ajoutez vos deux clés — comme secrets réseau pour
api.openai.cometgenerativelanguage.googleapis.com(sur les plans Team et Enterprise, un administrateur peut devoir les ajouter ; le guide du téléchargement contient les détails) ; sinon comme variables d'environnement, idéalement nomméesKIRAT_OPENAI_API_KEYetKIRAT_GEMINI_API_KEY, qui n'entrent pas en collision avec lesOPENAI_API_KEYd'un projet (Kirat accepte aussiOPENAI_API_KEYetGEMINI_API_KEY) ; - accès réseau : s'il est complet, rien à changer ; sinon définissez-le sur Personnalisé (dans les applications plus récentes : Limité) avec la liste par défaut du gestionnaire de paquets, plus l'hôte de téléchargement Kirat (avec des clés dans les variables d'environnement, aussi
api.openai.com).
Le script télécharge exactement votre version de Kirat, vérifie sa somme de contrôle SHA-256 et l'installe. C'est une configuration unique, pas un clic. Nous l'avons testé dans un conteneur cloud.
Les limites : les clés dans les variables d'environnement sont lisibles par tous ceux qui utilisent l'environnement (les secrets réseau les gardent illisibles). Chaque session cloud démarre à neuf, donc le budget quotidien de Kirat compte par session — définissez des limites de dépenses chez OpenAI et Google ; dans le cloud, elles sont votre véritable plafond. Les tâches en arrière-plan et les résultats récents se terminent avec la session. L'accès réseau de l'environnement doit autoriser l'hôte de téléchargement Kirat, et api.openai.com aussi si vos clés sont des variables d'environnement (Gemini est couvert par la liste par défaut). Si la configuration échoue, la session démarre quand même, juste sans Kirat — et l'état d'échec peut rester en cache pour les nouvelles sessions jusqu'à ce que vous modifiiez le script de configuration (tout changement fait que les nouvelles sessions le réexécutent).
L'adresse de téléchargement dans le script de configuration fait partie de votre achat, comme le ZIP ; ne la publiez pas. La licence couvre vos propres environnements cloud. Un environnement cloud partagé avec d'autres nécessite une licence pour chaque personne.
Quels modèles utilise-t-il ? Que se passe-t-il si un fournisseur en retire un ?
Par défaut gpt-5.6 d'OpenAI et gemini-3.6-flash de Google, avec Claude comme troisième votant.
Les noms de modèles et les prix sont des paramètres. Si un fournisseur retire un modèle, vous saisissez le nouveau nom et ses deux prix. Aucune mise à jour nécessaire.
Claude Desktop dit que l'extension n'est pas vérifiée par Anthropic. Est-ce un problème ?
Cet avertissement est attendu. Claude Desktop l'affiche pour les extensions installées à partir d'un fichier, et Kirat est installé à partir d'un fichier — il n'est pas vérifié ni signé par Anthropic.
Comment fonctionnent les mises à jour ?
Dans Claude Desktop, installez le nouveau .mcpb de la même manière que le premier. Vos clés et paramètres sont conservés.
Les mises à jour de compatibilité sont gratuites quand c'est possible, mais il n'y a aucune garantie. Des versions majeures plus récentes peuvent être vendues séparément.
Ai-je du support ?
Non. Kirat est fourni sans support, aide à l'installation ou conseil. Les paiements et reçus sont gérés par Lemon Squeezy. Si Kirat ne fonctionne pas dans une configuration prise en charge, vous êtes remboursé ; voir les Conditions.
Que permet la licence ?
Une personne, sur un nombre illimité de vos propres appareils et dans vos propres environnements cloud. Un environnement cloud partagé avec d'autres nécessite une licence pour chaque personne. Pas de revente ni de redistribution. Kirat est un logiciel propriétaire, pas open source.
Utiliser ce que le conseil produit dans votre propre travail, y compris commercial, est autorisé. Les conditions complètes sont dans les Conditions.
À quoi sert le Blueprint ? En ai-je besoin ?
Vous n'en avez pas besoin pour utiliser Kirat. Le Blueprint est destiné aux personnes qui veulent construire ou adapter leur propre serveur de conseil avec un agent de codage.
Ce sont uniquement des documents — pas de code, pas d'extension installable : la spécification (exigences structurées pour les outils), les décisions d'architecture avec le raisonnement derrière chacune, la liste de contrôle d'acceptation qu'un agent peut vérifier lui-même, et les données de référence derrière les chiffres de ce site. Il n'y a pas de prix groupé.
06 — Détails
Les détails, pour la trace.
Installation, partout où Kirat s'exécute et les limites cloud, les neuf outils, et les preuves derrière les chiffres. Ouvrez ce dont vous avez besoin.
Installez Kirat et connectez vos clés API
Kirat n'est pas un service auquel vous vous inscrivez. Il s'exécute sur votre ordinateur (ou dans votre propre environnement cloud Claude Code), dans Claude, avec vos propres clés API. Il n'y a pas de serveur Kirat ni de compte chez nous. Tout ce que vous donnez à Kirat va directement à OpenAI et Google, sous vos comptes — depuis votre ordinateur, ou dans les sessions cloud de Claude Code depuis votre propre environnement cloud via le proxy réseau d'Anthropic pour cet environnement. Nous ne voyons jamais vos clés ni vos questions.
Vous venez d'acheter Kirat ? Suivez le guide de configuration étape par étape : d'abord quel Claude vous utilisez, puis seulement les étapes pour celui-ci.
Étape 1 · la partie lente
Deux clés API
Une clé API OpenAI et une clé API Google Gemini, toutes deux avec facturation activée. Ce qui prend du temps ici, ce sont les formulaires d'inscription et de facturation des fournisseurs. Un projet fournisseur séparé avec une limite de dépenses est une bonne idée.
Autorisations minimales (facultatif) : chez OpenAI, une clé restreinte suffit, avec « List models » sur Lecture et « Model capabilities » sur Requête, tout le reste sur Aucun. Une clé Gemini de Google AI Studio est déjà restreinte à l'API Gemini ; restreignez une clé de la console Google Cloud à l'API Generative Language.
Vous avez déjà les deux clés ? Passez à l'étape 2.
Étape 2
Installation
Claude Desktop : décompressez le téléchargement. Ouvrez Paramètres → Extensions → Paramètres avancés → Installer une extension… et choisissez le fichier .mcpb. Saisissez les deux clés dans la boîte de dialogue. Desktop est livré avec son propre Node, donc il n'y a rien d'autre à installer.
Claude Code : décompressez le téléchargement et déplacez le dossier kirat extrait dans votre dossier personnel, afin que ~/kirat/claude-code existe. Exécutez ensuite les commandes ci-dessous. Nécessite Node.js 20 ou version ultérieure.
Sessions cloud de Claude Code : une configuration unique de votre environnement cloud, avec des limites — voir ci-dessous.
Étape 3
Demandez
Vérifiez l'installation : utilisez l'extension Kirat et appelez kirat_status. Elle vérifie aussi les deux clés API avec OpenAI et Google, gratuitement.
Posez ensuite une vraie question : Demandez au conseil Kirat : Postgres ou SQLite ? Donnez aussi votre propre position.
Ou commencez à partir d'un modèle : dans Claude Desktop via le bouton + dans la zone de message, dans Claude Code avec le plugin en tant que /kirat:decide, /kirat:review, /kirat:critique ou /kirat:brainstorm. Dans les sessions cloud de Claude Code, ils sont appelés /mcp__kirat__decide, /mcp__kirat__review, /mcp__kirat__critique et /mcp__kirat__brainstorm.
# in Claude Code, once ~/kirat/claude-code exists
/plugin marketplace add ~/kirat/claude-code
/plugin install kirat@kirat
# enter both keys when asked; to change them later:
/plugin configure kirat@kirat
Claude Desktop vous avertira que l'extension n'est pas vérifiée par Anthropic. Cet avertissement est attendu pour toute extension installée à partir d'un fichier — voir la FAQ.
Où il s'exécute, en intégralité, avec les limites cloud Les neuf outils et un exemple d'appel enregistré
Vous posez une question en langage naturel. Claude effectue l'appel :
// 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
Autres résultats : needs_human (pas de majorité — vous décidez), domain_decision, limited, budget_exhausted. Les valeurs de confiance sont les auto-évaluations de chaque modèle.
Fig. 6.3 — Liste des pièces
Neuf outils que Claude appelle
7 avec coûts API · 2 sans
| Pos. | Outil | Ce qu'il fait | Coûts API |
|---|---|---|---|
| 01 | kirat_vote | Décision par vote : chaque membre prend position, puis une majorité des deux tiers, le propriétaire du domaine, ou needs_human. | Coûts API |
| 02 | kirat_review | Revue de code. Chaque constat est vérifié par l'autre famille de modèles. | Coûts API |
| 03 | kirat_create | Critiquez votre brouillon, laissez un membre rédiger, ou classez de courtes variantes. | Coûts API |
| 04 | kirat_brainstorm | Idées divergentes sur trois pistes — dans le cadre, voisin, briseur de règles — classées anonymement. | Coûts API |
| 05 | kirat_decide | Décision déléguée pour des choix de travail réversibles, avec veto et une limite quotidienne. | Coûts API |
| 06 | kirat_ask | Interrogez exactement un membre. Pas de conseil. | Coûts API |
| 07 | kirat_image | Génération d'images par les deux fournisseurs, évaluée par un jury anonyme. | Coûts API |
| 08 | kirat_result | Récupérez les tâches en arrière-plan et les résultats récents. | aucun |
| 09 | kirat_status | Budget, dépenses, membres disponibles, paramètres, vérification de clé gratuite. | aucun |
« Coûts API » signifie que l'outil appelle OpenAI et Google avec vos propres clés, et que vous payez ces fournisseurs directement. La relecture ci-dessus montre ce que chaque exécution a coûté. Kirat lui-même ne facture rien par utilisation : vous l'achetez une fois. kirat_image et l'entrée d'images fonctionnent avec des fichiers sur votre ordinateur, ils conviennent donc mieux à Claude Code.
Preuves : décisions enregistrées, coûts mesurés, échecs documentés