Kirat - Multi Model AI Council

공식

AI 하나는 한 줄의 추론만 제공합니다. Kirat은 Claude Desktop 확장 및 Claude Code 플러그인으로, ChatGPT와 Gemini를 평의회로 추가합니다: 독립적인 입장, 반대 의견이 유지되는 투표, 그리고 각 발견 사항이 두 번째 모델 계열에 의해 검증되는 코드 리뷰를 제공합니다. 자체 API 키를 사용하세요. 유료, 일회성.

Kirat Multi Model AI Council MCP(으)로 무엇을 할 수 있나요?

  • 의사결정에 대해 멀티 모델 투표 받기 — kirat_vote를 사용해 비즈니스 또는 기술 질문에 옵션과 맥락을 제공하여 평의회가 의견을 제시하도록 요청하세요.
  • 보안 및 정확성 측면에서 코드 리뷰 — kirat_review를 사용해 배포 전에 심각도 수준과 제안된 수정 사항이 포함된 교차 검증된 발견 사항을 받아보세요.
  • 의사결정 이면의 반대 의견과 근거 확인 — 소수 의견을 포함한 각 모델의 전체 입장을 신뢰도 점수 및 근거와 함께 확인하세요.

문서

01 — 다시 보기

위원회가 일하는 모습을 지켜보세요.

2026년 10월 13일에 구매하시는 버전으로 제작한 Kirat 도구의 실제 녹화입니다. 도구를 하나 골라 위원회가 일하는 모습을 지켜보세요: 독립적인 입장, 교차 검증, 익명 순위, 그리고 반대 의견까지. 이것은 다시 보기입니다. 여기서 클릭하는 어떤 것도 모델을 호출하지 않으며, 이 페이지를 벗어나는 정보도 없습니다. 채팅은 설명을 위해 작성되었고 녹화된 결과를 다시 서술할 뿐입니다. Claude가 Kirat에 보낸 내용과 돌아온 내용은 "비하인드 스토리" 아래에 변경 없이 표시됩니다.

서로 다른 분야의 다섯 가지 질문. 하나를 골라 보세요.

Kirat에게 투표를 맡겨 보세요: 저는 소규모 B2B SaaS를 혼자 운영합니다. 무료 요금제를 추가해야 할까요?

kirat_vote 이(가) 위원회에 질문했습니다

위원회가 결정했습니다 (다수 2:1): 유료만 유지하고, 아무것도 바꾸지 않는다.

제 투표는 반대 의견이었습니다: "유료만 유지하고, 체험 기간을 30일로 연장한다". 그 근거와 함께 기록에 남아 있으니 직접 판단해 보실 수 있습니다.

비하인드 스토리

kirat_vote Claude가 Kirat에 보내는 내용

질문: 저는 소규모 B2B SaaS를 혼자 운영합니다. 무료 요금제를 추가해야 할까요?

기록일 2026-10-13 · KIRAT_VOTE · 노력 수준: 표준 · 1 라운드

보낸 맥락: 1인 개발자. 프리랜서용 인보이싱 도구, 월 19달러, 14일 무료 체험, 5개월 후 유료 고객 30명. 가입은 주로 구글에서 상위 노출되는 두 개의 블로그 글로 유입됩니다. 체험 전환율은 약 12%. 지원 업무는 이미 주당 약 5시간을 차지합니다. 개발자는 본업이 있고 제품에 쓸 수 있는 시간은 주당 약 10시간입니다.

선택지: 무료 요금제 추가 · 유료만 유지하고 체험 기간을 30일로 연장 · 유료만 유지하고 아무것도 바꾸지 않음

위원회의 결과

gpt-5.6 신뢰도 88

유료만 유지하고, 아무것도 바꾸지 않음무료 요금제는 비유료 사용자와 지원 부담을 늘릴 가능성이 높으며, 지원 업무는 이미 주당 가용한 10시간의 절반을 소모하고 있습니다. 12%의 체험 전환율은 괜찮은 수준이므로 체험 기간이 병목이라는 명확한 증거는 없습니다. 현재 모델을 유지하고 부족한 시간을 지원 필요성을 줄이고 두 개의 블로그 글을 넘어 유입을 확대하는 데 쓰세요.

gemini-3.6-flash 신뢰도 90

유료만 유지하고, 아무것도 바꾸지 않음주당 10시간만 가용한 상황에서 지원 업무가 이미 역량의 50%를 차지합니다. 무료 요금제는 통제 없이 비유료 사용자로 인한 지원량을 늘릴 것입니다. 12%의 체험 전환율은 이미 강력합니다. 병목은 가격 모델이 아니라 트래픽입니다.

claude (세 번째 투표자) 신뢰도 58

유료만 유지하고, 체험 기간을 30일로 연장무료 요금제는 주로 지원 부담을 늘리며, 이는 이미 가용 시간의 절반입니다. 인보이싱은 월 단위이므로 14일 체험은 프리랜서가 두 번째 인보이스를 보내고 가치를 확인하기 전에 끝날 수 있습니다. 30일 체험은 영구 무료 사용자를 늘리지 않으면서 한 번의 전체 청구 주기를 포함합니다.반대 의견, 기록됨

결정 유료만 유지하고, 아무것도 바꾸지 않음 경로 다수 2:1 비용 $0.015

Kirat에게 투표를 맡겨 보세요: 저희 고객의 온라인 쇼핑몰을 재구축해야 합니다. WooCommerce로 재구축할까요, 아니면 Shopify로 이전할까요?

kirat_vote 이(가) 위원회에 질문했습니다

위원회가 결정했습니다 (만장일치 3:0): Shopify로 이전한다.

제 의견을 포함한 세 가지 입장 모두 같은 방향을 가리킵니다. 각각의 근거가 함께 제시됩니다.

비하인드 스토리

kirat_vote Claude가 Kirat에 보내는 내용

질문: 저희 고객의 온라인 쇼핑몰을 재구축해야 합니다. WooCommerce로 재구축할까요, 아니면 Shopify로 이전할까요?

기록일 2026-10-13 · KIRAT_VOTE · 노력 수준: 표준 · 1 라운드

보낸 맥락: 저희는 소규모 디지털 에이전시입니다. 고객은 독일, 오스트리아, 스위스에서 약 1,800개의 가구 제품을 판매하며, 직원은 3명이고 사내 개발자가 없습니다. 현재 쇼핑몰은 6년 된 자체 호스팅 WooCommerce 설치본으로, 플러그인이 31개이고 페이지가 느리며 지난 1년간 보안 사고가 두 번 있었습니다. 매출은 연간 약 120만 유로입니다. 고객은 유지보수 부담과 긴급 상황을 줄이기를 원하며, 제품 데이터를 CSV로 내보내는 로컬 ERP를 사용합니다. 재구축 예산: 25,000유로.

선택지: WooCommerce로 재구축 · Shopify로 이전

위원회의 결과

gpt-5.6 신뢰도 89

Shopify로 이전Shopify는 고객의 주요 목표인 유지보수 부담 감소, 보안 긴급 상황 감소, 사내 개발자 불필요에 더 잘 부합합니다. 1,800개 제품 카탈로그와 CSV 기반 ERP 워크플로는 관리 가능하며, 25,000유로 예산은 DACH 지역 특유의 세무, 결제, 법적 설정을 포함한 체계적인 이전을 충분히 감당할 수 있습니다. 단점은 반복되는 앱/플랫폼 비용, 백엔드 유연성 감소, 그리고 확정하기 전에 ERP 가져오기 워크플로와 가구 특유의 변형 옵션을 검증해야 한다는 점입니다. WooCommerce 재구축은 유연성을 유지할 수 있지만, 호스팅, 업데이트, 플러그인 호환성, 보안에 대한 책임을 그대로 안게 됩니다. 이는 바로 고객이 줄이고자 하는 운영 부담입니다.

gemini-3.6-flash 신뢰도 90

Shopify로 이전사내 개발자가 없고 직원이 3명이며 보안 사고 이력이 있는 상황에서 Shopify는 유지보수 부담과 보안 위험을 크게 줄여 줍니다. 25,000유로 예산은 CSV ERP 연동을 포함한 Shopify 이전에 충분하며, 반면 WooCommerce로 재구축하면 높은 유지보수 비용과 지속적인 긴급 상황 위험이 이어질 것입니다.

claude (세 번째 투표자) 신뢰도 72

Shopify로 이전사내 개발자가 없고 플러그인이 31개이며 보안 사고가 두 번 있었다면, 고객의 진짜 문제는 기능이 아니라 유지보수입니다. Shopify는 호스팅, 업데이트, 대부분의 보안 작업을 없애 주며, ERP에서의 CSV 제품 가져오기는 표준입니다. 단점은 거래 및 앱 수수료와 유연성 감소인데, 이 규모에서는 안정성이 그보다 더 중요합니다.

결정 Shopify로 이전 경로 만장일치 3:0 비용 $0.015

Kirat에게 투표를 맡겨 보세요: 동네 제과점이 케이크 사전 주문을 늘리려 합니다. 다음 3,000유로를 가장 먼저 어디에 써야 할까요?

kirat_vote 이(가) 위원회에 질문했습니다

위원회가 결정했습니다 (만장일치 3:0): 제대로 된 온라인 주문 페이지.

제 의견을 포함한 세 가지 입장 모두 같은 방향을 가리킵니다. 각각의 근거가 함께 제시됩니다.

비하인드 스토리

kirat_vote Claude가 Kirat에 보내는 내용

질문: 동네 제과점이 케이크 사전 주문을 늘리려 합니다. 다음 3,000유로를 가장 먼저 어디에 써야 할까요?

기록일 2026-10-13 · KIRAT_VOTE · 노력 수준: 표준 · 1 라운드

보낸 맥락: 인구 4만 명의 독일 소도시에 있는 직원 6명의 제과점. 맞춤 케이크와 사전 주문이 마진이 가장 좋습니다. 현재 주문은 전화와 이메일로만 들어오며, 웹사이트에는 영업시간과 문의 양식만 있고 주문할 수 있는 것은 없습니다. Google 비즈니스 프로필은 리뷰 120개에 별점 4.7입니다. 지금까지 유료 광고는 없었습니다. 예산: 다음 분기 3,000유로, 사장님은 시간이 거의 없습니다.

선택지: Google Ads · 제대로 된 온라인 주문 페이지 · 둘에 균등 분배

위원회의 결과

gpt-5.6 신뢰도 94

제대로 된 온라인 주문 페이지먼저 병목을 해결하세요. 지금은 관심 있는 고객이 편리하게, 또는 체계적인 방식으로 사전 주문할 수 없습니다. 케이크 선택, 픽업 날짜, 커스터마이징 옵션, 가격 또는 예약금, 확인 기능을 갖춘 간단한 모바일 친화적 주문 페이지는 제과점이 이미 가진 강력한 지역 인지도를 활용하고 전화와 이메일 업무를 줄여 줍니다. 신뢰할 수 있는 주문 프로세스 없는 Google Ads는 유료 트래픽을 약한 전환 경로로 보내는 셈입니다. 몇 주간 측정 가능한 주문이 쌓인 후에는 이후 광고 예산을 더 표적화된 방식으로 쓸 수 있습니다.

gemini-3.6-flash 신뢰도 90

제대로 된 온라인 주문 페이지디지털 주문 경로가 없으면 광고는 전화와 이메일로 인한 시간 소모적인 수작업만 늘릴 뿐이며, 사장님이 감당하기 어렵습니다. 게다가 강력한 Google 프로필(별점 4.7)은 이미 유입되는 자연 트래픽을 실제 주문 페이지가 있을 때 훨씬 더 잘 전환시킬 것이며, 광고에 돈을 쓰기 전에 즉시 그렇게 해야 합니다.

claude (세 번째 투표자) 신뢰도 74

제대로 된 온라인 주문 페이지광고는 클릭이 주문으로 이어질 수 있을 때만 효과가 있습니다. 지금은 모든 방문자가 전화나 이메일을 해야 하므로 유료 트래픽이 새어 나갈 것입니다. 제품 선택, 픽업 날짜, 선결제 기능을 갖춘 주문 페이지는 별점 4.7 프로필이 이미 가져오는 수요를 전환시키고, 이후 광고를 측정 가능하게 만듭니다.

결정 제대로 된 온라인 주문 페이지 경로 만장일치 3:0 비용 $0.012

Kirat에게 투표를 맡겨 보세요: 저희 청구 모듈을 지금 별도 서비스로 추출할까요, 아니면 먼저 모놀리스 내부에서 경계를 강화할까요?

kirat_vote 이(가) 위원회에 질문했습니다

위원회가 결정했습니다 (만장일치 3:0): 먼저 모놀리스 내부에서 경계를 강화한다.

제 의견을 포함한 세 가지 입장 모두 같은 방향을 가리킵니다. 각각의 근거가 함께 제시됩니다.

비하인드 스토리

kirat_vote Claude가 Kirat에 보내는 내용

질문: 저희 청구 모듈을 지금 별도 서비스로 추출할까요, 아니면 먼저 모놀리스 내부에서 경계를 강화할까요?

기록일 2026-10-13 · KIRAT_VOTE · 노력 수준: 표준 · 1 라운드

보낸 맥락: 엔지니어 8명의 팀. 약 60,000줄의 TypeScript 모놀리스 하나, Postgres 데이터베이스 하나, 하루에 여러 번 배포. 청구 모듈은 매주 변경되며 최근 8건의 프로덕션 사고 중 5건을 일으켰고, 대부분 다른 모듈이 청구 테이블을 직접 읽고 쓰기 때문입니다. 팀 중 프로덕션에서 분산 시스템을 운영해 본 사람은 없습니다. 경영진은 두 분기 안에 사고를 줄이기를 원합니다.

선택지: 청구를 지금 서비스로 추출 · 먼저 모놀리스 내부에서 경계를 강화

위원회의 결과

gpt-5.6 신뢰도 94

먼저 모놀리스 내부에서 경계를 강화사고는 주로 네트워크 경계의 부재가 아니라 통제되지 않은 데이터베이스 접근 때문에 발생합니다. 모놀리스 내부에서 청구 소유권을 강제하세요. 직접 테이블 접근을 제거하고, 좁은 내부 API를 노출하고, 데이터베이스 권한이나 스키마 수준 통제를 추가하고, 계약 및 통합 테스트를 추가하세요. 이는 두 분기라는 기간 안에 실패 모드를 빠르게 겨냥합니다. 지금 추출하면 분산 시스템 경험이 없는 팀에 배포, 관측성, 재시도, 데이터 일관성, 운영 복잡성을 더하게 됩니다. 접근 경로와 데이터 소유권이 명확해지면 추출은 더 안전해지며, 독립적인 확장이나 배포가 여전히 가치 있다면 재고할 수 있습니다.

gemini-3.6-flash 신뢰도 90

먼저 모놀리스 내부에서 경계를 강화장애의 주원인은 다른 모듈이 데이터베이스에서 청구 테이블에 직접 접근하는 것입니다. 모듈 경계를 강화하면 기존 모놀리스 내에서 이 문제를 직접 해결할 수 있습니다. 8명 팀이 분산 시스템 경험이 없으므로 지금 모듈을 추출하면 새로운 위험이 생기고 두 분기 안에 사고를 줄이려는 목표가 위태로워집니다.

claude (세 번째 투표자) 신뢰도 76

먼저 모놀리스 내부에서 경계를 강화사고는 다른 모듈이 청구 테이블을 직접 건드리기 때문에 발생합니다. 서비스 분리는 그 경계를 강제하기도 하지만, 그런 경험이 없는 팀에 네트워크 장애, 분산 트랜잭션, 새로운 운영 업무를 더합니다. 모놀리스 내부에서 모듈 API와 테이블 소유권을 강제하면 원인을 더 빠르게 해결하고, 나중을 위해 추출 옵션도 열어 둡니다.

결정 먼저 모놀리스 내부에서 경계를 강화 경로 만장일치 3:0 비용 $0.014

Kirat에게 투표를 맡겨 보세요: 저희 체계적 문헌고찰에서 LLM 선별 한 번이 두 번째 사람 선별자를 대체할 수 있을까요?

kirat_vote 이(가) 위원회에 질문했습니다

위원회가 결정했습니다 (만장일치 3:0): LLM을 추가 선별자로 사용하고, 사람이 충돌을 해결한다.

제 의견을 포함한 세 가지 입장 모두 같은 방향을 가리킵니다. 각각의 근거가 함께 제시됩니다.

비하인드 스토리

kirat_vote Claude가 Kirat에 보내는 내용

질문: 저희 체계적 문헌고찰에서 LLM 선별 한 번이 두 번째 사람 선별자를 대체할 수 있을까요?

기록일 2026-10-13 · KIRAT_VOTE · 노력 수준: 표준 · 1 라운드

보낸 맥락: 보건 서비스 연구 분야의 체계적 문헌고찰을 위해 약 3,000건의 레코드에 대한 제목 및 초록 선별, 출판 예정. 현재 프로토콜: 두 명의 독립적인 사람 선별자, 충돌은 논의로 해결. 인력 시간이 부족합니다. 이 고찰은 PRISMA를 따르며, 저널 심사자들은 선별이 어떻게 이루어졌는지 물을 것입니다. 관련 연구를 놓치는 것(잘못된 배제)이 관련 없는 연구를 포함하는 것보다 더 나쁩니다. 옵션: 예, 두 번째 사람 스크리너를 교체 · LLM을 추가 스크리너로 사용하고 충돌은 사람이 해결 · 아니요, 사람 스크리너 두 명을 유지하고 LLM은 사용하지 않음

평의회 결과

gpt-5.6 신뢰도 94

LLM을 추가 스크리너로 사용하고 충돌은 사람이 해결하십시오. 잘못된 제외가 주요 위험인 상황에서 단일 LLM 패스가 독립적인 사람 스크리닝을 대체해서는 안 됩니다. 성능은 주제, 프롬프트, 모델 버전에 따라 달라질 수 있고 오류가 체계적으로 발생할 수 있기 때문입니다. LLM은 레코드 우선순위를 정하거나 불일치를 표시하는 데 사용하되, 충돌 해결과 제외 확인은 사람이 수행하도록 요구하십시오. PRISMA 보고와 재현성을 위해 모델, 버전, 프롬프트, 검증 표본, 의사결정 워크플로를 문서화하십시오.

gemini-3.6-flash 신뢰도 88

LLM을 추가 스크리너로 사용하고 충돌은 사람이 해결하십시오. 하이브리드 접근법은 3,000개의 제목과 초록에 대한 사람의 작업량을 크게 줄이면서 PRISMA와 동료 심사자가 요구하는 방법론적 엄격성을 유지합니다. 잘못된 제외를 피해야 하므로 모든 불일치를 사람이 해결하거나(또는 매우 민감한 프롬프트 접근법을 사용하여) 관련 연구가 손실되지 않도록 보장합니다.

claude (세 번째 투표자) 신뢰도 70

LLM을 추가 스크리너로 사용하고 충돌은 사람이 해결하십시오. 잘못된 제외는 비용이 큰 오류이며, 스크리닝에서의 LLM 재현율은 주제와 프롬프트에 따라 달라집니다. 두 번째 사람을 제거하면 그러한 오류를 잡아내는 검사를 없애게 되고 저널 심사자에게 방어하기 어렵습니다. LLM을 세 번째 스크리너로 추가하고 충돌을 사람이 해결하면 프로토콜을 방어 가능하게 유지하면서도 놓칠 가능성이 있는 항목을 표시할 수 있습니다.

결정 LLM을 추가 스크리너로 사용하고 충돌은 사람이 해결 경로 만장일치 3:0 비용 $0.019

2026년 10월 13일 표준 노력 등급에서 kirat_vote과 함께 기록되었으며, 각 세션은 20초 미만이 걸리고 비용은 2센트 미만이었습니다. 질문, 옵션, 컨텍스트는 전송된 그대로 표시되며 추론은 전체가 표시됩니다. Gemini는 네 번 독일어로, ChatGPT는 한 번 답변했으며 해당 답변은 여기에서 번역되었습니다. 무료 등급 질문에서 Claude는 2:1로 투표에서 패했고 그 이의는 기록에 남았습니다. 신뢰도 값은 각 모델의 자체 보고입니다.

서로 다른 분야의 코드 발췌 다섯 개로, 각각 표시된 그대로 전송되었습니다. ChatGPT와 Gemini는 병렬로 검토하고, Claude는 자체적으로 두 가지 발견을 추가하며, 모든 발견은 다른 모델 계열에 의해 확인됩니다. 확인된 발견만 집계됩니다. 하나를 선택하십시오.

출시 전에 Kirat이 우리 Stripe 결제 웹훅의 보안과 정확성을 검토하도록 하십시오.

kirat_review이(가) 평의회에 질문했습니다

Kirat은 14개의 확인된 문제(4 × 심각, 4 × 높음, 6 × 중간)를 발견했습니다. 각 발견은 다른 모델 계열에 의해 교차 확인되었습니다.

목록 상단의 항목부터 시작하십시오. 각 항목에는 제안된 수정 사항이 함께 제공됩니다.

비하인드 스토리

kirat_review Claude가 Kirat에 보내는 내용

기록 2026-10-13 · KIRAT_REVIEW · 노력: 표준 · 14 확인, 0 거부 · $0.14

초점: 결제 웹훅의 보안과 정확성

전송된 코드:

// routes/webhooks.js — payment webhook of a solo invoicing SaaS (Node 20, Express 4, Stripe, pg)
const express = require('express');
const { db } = require('../db');
const router = express.Router();

router.post('/webhooks/stripe', express.json(), async (req, res) => {
  const event = req.body;

  if (event.type === 'invoice.paid') {
    const invoice = event.data.object;
    const userId = invoice.metadata.userId;
    await db.query('UPDATE users SET plan = $1, paid_until = $2 WHERE id = $3',
      ['pro', new Date(invoice.period_end * 1000), userId]);
    await db.query('INSERT INTO payments (user_id, amount) VALUES ($1, $2)',
      [userId, invoice.amount_paid / 100]);
  }

  if (event.type === 'customer.subscription.deleted') {
    await db.query("UPDATE users SET plan = 'free' WHERE stripe_customer = '" + event.data.object.customer + "'");
  }

  res.sendStatus(200);
});

module.exports = router;

평의회 결과

  1. 심각 웹훅이 Stripe 서명을 확인하지 않고 요청 본문을 처리합니다. 따라서 모든 외부 호출자가 위조된 invoice.paid\ 또는 customer.subscription.deleted\ 이벤트를 보내 사용자 계정을 잠금 해제하거나 다운그레이드할 수 있습니다. 또한 JSON 파서는 Stripe 서명 검증에 필요한 수정되지 않은 원시 본문을 버립니다. 수정: 이 라우트에 express.raw({ type: 'application/json' })\을(를) 사용하고 처리 전에 stripe.webhooks.constructEvent(req.body, req.headers\['stripe-signature'\], webhookSecret)\을(를) 호출하십시오. 이 라우트에 전역 JSON 파서가 이미 적용되어 있지 않은지 확인하십시오. 잘못된 서명은 400으로 거부하십시오. 6행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  2. 심각 Stripe 웹훅 서명 검증이 누락되었습니다. 공격자가 이 엔드포인트로 임의의 위조된 웹훅 이벤트를 보내 권한 없이 계정을 Pro로 설정하거나 데이터베이스 항목을 조작할 수 있습니다. 수정: Stripe 웹훅 시크릿과 함께 stripe.webhooks.constructEvent()를 사용하여 모든 이벤트의 진위와 무결성을 검증하십시오. 6행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  3. 심각 사용자 입력(event.data.object.customer)을 SQL 쿼리 문자열에 직접 연결하여 SQL 인젝션 취약점이 발생합니다. 수정: 이전 문장에서처럼 매개변수화된 쿼리를 사용하십시오: db.query('UPDATE users SET plan = $1 WHERE stripe_customer = $2', ['free', event.data.object.customer]). 18행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  4. 심각 웹훅이 Stripe 서명을 전혀 검증하지 않으며, express.json()이 검증에 필요한 원시 본문을 버립니다. 누구나 가짜 invoice.paid 이벤트를 POST하여 모든 계정을 무료로 pro로 업그레이드할 수 있습니다. 수정: 이 라우트에 express.raw({ type: 'application/json' })을(를) 사용하고 stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], endpointSecret)로 이벤트를 구성하십시오. 실패 시 요청을 거부하십시오. 6행 · claude 발견 · gpt-5.6, gemini-3.6-flash 확인
  5. 높음 고객 ID가 SQL 문에 직접 삽입됩니다. ' OR 1=1 --\과(와) 같은 값은 WHERE 절을 조작하여 모든 사용자를 무료 플랜으로 설정할 수 있으며, 데이터베이스 구성에 따라 추가 SQL 인젝션이 가능합니다. 수정: 쿼리를 완전히 매개변수화하십시오: UPDATE users SET plan = 'free' WHERE stripe\_customer = $1\ 및 \[event.data.object.customer\]\. 또한 Stripe 서명을 통해 이벤트를 인증하십시오. 19행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  6. 높음 멱등성 검사가 없습니다. Stripe는 웹훅을 최소 한 번 전달하며 시간 초과나 오류 시 재시도합니다. 따라서 동일한 invoice.paid\ 이벤트가 동일한 결제 항목을 여러 번 생성할 수 있습니다. 수정: Stripe 이벤트 ID 또는 인보이스 ID를 결제 레코드에 저장하고 UNIQUE 제약으로 보호하며, 이벤트 처리를 결제와 함께 삽입/업서트로 원자적으로 실행하십시오. 이미 처리된 이벤트는 비즈니스 작업을 반복하지 않고 200으로 확인하십시오. 14행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  7. 높음 async\ 핸들러에 오류 전달이 없습니다. Express 4는 비동기 라우트 핸들러의 거부된 프로미스를 자동으로 잡지 않습니다. 따라서 DB 오류나 불완전한 invoice.paid\ 객체는 처리되지 않은 프로미스 거부로 이어지고, Node 20에서는 오류 응답을 통제된 방식으로 반환하는 대신 프로세스를 종료시킬 수 있습니다. 수정: 핸들러를 try/catch\으로 감싸고 오류를 next(err)\로 전달하거나 비동기 래퍼를 사용하십시오. 접근 전에 입력 구조를 검증하고, 일시적 처리 오류 시 Stripe가 재전달하도록 5xx 상태를 통제된 방식으로 반환하십시오. 6행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  8. 높음 웹훅 엔드포인트에 express.json()을(를) 사용하면 본문이 미리 JSON으로 파싱됩니다. 그러나 Stripe의 서명 검증에는 수정되지 않은 원시 본문이 필요합니다. 수정: Stripe 웹훅 라우트 핸들러에 express.json() 대신 express.raw({ type: 'application/json' })을(를) 사용하십시오. 6행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  9. 중간 사용자 업데이트와 결제 항목은 독립적으로 커밋되는 두 개의 데이터베이스 작업입니다. UPDATE가 성공한 후 INSERT가 실패하면 해당 결제 레코드가 없음에도 사용자가 Pro 플랜을 받게 됩니다. 수정: 두 작업을 멱등성 마커와 함께 동일한 클라이언트에서 단일 데이터베이스 트랜잭션으로 실행하고, 오류 시 완전히 롤백하십시오. 12행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  10. 중간 처리가 Stripe가 이벤트를 생성 순서와 다르게 전달할 수 있다는 점을 고려하지 않습니다. 지연된 이전 invoice.paid\이(가) paid\_until\을(를) 재설정할 수 있고, 지연된 customer.subscription.deleted\이(가) 그 사이 재활성화된 사용자를 다시 free\(으)로 설정할 수 있습니다. 수정: 안정적인 Stripe ID를 사용하여 현재 구독 상태를 조정하십시오(예: Stripe에서 가져오기). 상태 전환이나 마지막으로 처리된 이벤트의 타임스탬프를 저장하십시오. 최소한 paid\_until\은(는) 항상 앞으로만 업데이트하고, 삭제 이벤트를 현재 사용자 상태에 무조건 적용하지 마십시오. 12행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  11. 중간 amount\_paid / 100\은(는) 통화의 소수 자릿수가 정확히 두 자리라고 확인 없이 가정합니다. 예를 들어 JPY에서는 이는 잘못입니다. 또한 통화가 함께 저장되지 않으므로 결제 레코드의 금액에는 명확한 단위가 없습니다. 수정: 가급적 금액을 invoice.currency\과(와) 함께 최소 통화 단위로 변경 없이 저장하십시오. 주요 통화 단위가 필요하면 해당 통화 지수에 따라 변환을 수행하십시오. 15행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  12. 중간 비동기 Express 4 라우트에서 예외 처리가 누락되었습니다. 데이터베이스 오류나 누락된 필드 시 처리되지 않은 프로미스 거부로 이어져 애플리케이션이 충돌할 수 있습니다. 수정: try-catch 블록을 추가하고 오류를 next(err)로 전달하거나 express-async-handler와 같은 유틸리티를 사용하십시오. 6행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  13. 중간 invoice.metadata.userId가 존재하는지 검증하지 않습니다. 메타데이터나 userId 필드가 누락되거나 undefined이면 SQL 쿼리가 실패하거나 유효하지 않은 값에 대해 작동합니다. 수정: 데이터베이스 쿼리를 실행하기 전에 invoice.metadata와 invoice.metadata.userId가 존재하고 유효한지 명시적으로 확인하십시오. 10행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  14. 중간 Stripe는 웹훅을 재시도하며 동일한 이벤트를 두 번 이상 전달할 수 있습니다. 각 전달이 또 다른 결제 행을 삽입하므로 수익 보고서가 이중 계산됩니다. 수정: event.id(또는 인보이스 id)를 고유 제약과 함께 저장하고 이미 처리된 이벤트는 건너뛰십시오. 14행 · claude 발견 · gpt-5.6, gemini-3.6-flash 확인

Kirat이 이 WooCommerce 가져오기 플러그인의 보안과 정확성을 검토하도록 하십시오.

kirat_review이(가) 평의회에 질문했습니다

Kirat은 21개의 확인된 문제(5 × 심각, 5 × 높음, 10 × 중간, 1 × 낮음)를 발견했습니다. 각 발견은 다른 모델 계열에 의해 교차 확인되었습니다.

목록 상단의 항목부터 시작하십시오. 각 항목에는 제안된 수정 사항이 함께 제공됩니다.

비하인드 스토리

kirat_review Claude가 Kirat에 보내는 내용

기록 2026-10-13 · KIRAT_REVIEW · 노력: 표준 · 21 확인, 0 거부 · $0.17

초점: WooCommerce 가져오기 플러그인의 보안과 정확성

전송된 코드:

<?php
// erp-import.php — custom plugin: imports the ERP's CSV export into WooCommerce (WordPress 6, WooCommerce 9)
add_action('wp_ajax_erp_import', 'erp_import');
add_action('wp_ajax_nopriv_erp_import', 'erp_import');

function erp_import() {
    global $wpdb;
    $path = $_POST['file'];
    $rows = array_map('str_getcsv', file($path));

    foreach ($rows as $row) {
        [$sku, $name, $price, $stock] = $row;
        $id = $wpdb->get_var("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = '$sku'");
        if (!$id) continue;
        update_post_meta($id, '_price', $price);
        update_post_meta($id, '_regular_price', $price);
        update_post_meta($id, '_stock', $stock);
        wp_update_post(['ID' => $id, 'post_title' => $name]);
    }
    echo 'Imported ' . count($rows) . ' rows';
    wp_die();
}

평의회 결과

  1. critical 가져오기는 wp\_ajax\_nopriv\_erp\_import\을 통해 공개적으로 접근 가능하며, 인증된 훅에도 권한 및 nonce 검사가 없습니다. 그 결과 익명 사용자나 CSRF 공격으로 제품 이름, 가격, 재고 수준을 변경할 수 있습니다. 수정: nopriv\ 훅을 제거하고, 처리 전에 manage\_woocommerce\와 같은 적절한 권한을 확인하며, check\_ajax\_referer()\로 요청을 보호하세요. line 3 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  2. critical wp_ajax_nopriv_erp_import 훅은 인증되지 않은 방문자에게 가져오기 기능에 대한 접근 권한을 부여합니다. 수정: nopriv 훅을 제거하고 current_user_can('manage_options')를 사용하여 권한을 확인하세요. line 4 · found by gemini-3.6-flash · confirmed by gpt-5.6
  3. critical $_POST['file']의 파일 경로가 검사 없이 file()에 전달되어 경로 순회 및 임의 파일 읽기(LFI)가 가능합니다. 수정: $_FILES를 통해 파일 업로드를 처리하거나, 입력 경로를 허용된 디렉터리(예: wp_upload_dir())에 대해 엄격하게 검증하세요. line 7 · found by gemini-3.6-flash · confirmed by gpt-5.6
  4. critical $sku가 정리 없이 SQL 쿼리에 직접 삽입되므로 SQL 인젝션 취약점이 있습니다. 수정: $wpdb->prepare()와 함께 준비된 문을 사용하세요. line 11 · found by gemini-3.6-flash · confirmed by gpt-5.6
  5. critical 가져오기가 wp_ajax_nopriv에 등록되어 있으며, 권한 검사도 nonce도 없습니다. 모든 방문자가 이를 트리거하여 가격, 재고, 제품 이름을 덮어쓸 수 있습니다. 수정: nopriv 훅을 제거하고, current_user_can('manage_woocommerce')를 확인하며, 아무 작업도 하기 전에 check_ajax_referer()로 nonce를 검증하세요. line 4 · found by claude · confirmed by gpt-5.6, gemini-3.6-flash
  6. high 클라이언트가 제공한 경로가 검사 없이 file()\에 전달됩니다. 이로 인해 읽을 수 있는 모든 로컬 파일과 – allow\_url\_fopen\에 따라 – 외부 또는 내부 URL이 처리될 수 있어 원치 않는 파일 접근 및 블라인드 SSRF가 가능합니다. 수정: 자유롭게 선택된 경로를 허용하지 마세요. 서버 측에서 알려진 업로드 ID만 사용하고, 정규 경로를 고정된 가져오기 디렉터리에 대해 확인하며, 일반 로컬 CSV 파일만 허용하세요. line 8 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  7. high $sku\은 CSV에서 가져와 SQL에 직접 보간됩니다. SQL 메타 문자를 포함한 SKU 값은 쿼리를 조작할 수 있으며, 무엇보다도 업데이트 대상으로 임의의 게시물 ID를 선택할 수 있습니다. 수정: $wpdb-\>prepare()\로 쿼리를 매개변수화하세요. 예를 들어 meta\_value = %s\를 사용하거나, SKU로 제품을 조회하는 WooCommerce 함수를 사용하세요. line 13 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  8. high file()\은 전체 입력을 메모리에 로드하며, array\_map()\은 추가로 완전히 파싱된 배열을 생성합니다. 크기 제한이 없으면 크거나 끝없는 원격 리소스가 메모리, 런타임 및 PHP 워커를 고갈시킬 수 있으며, 공개적 접근 가능성으로 인해 이 문제가 더욱 악화됩니다. 수정: 파일 크기와 줄 수를 제한하고, fopen()\로 파일을 로컬에서 열며, fgetcsv()\를 통해 레코드를 스트리밍 방식으로 처리하세요. 추가로 속도 제한이나 제어된 백그라운드 작업을 사용하세요. line 9 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  9. high CSRF 보호(nonce 검증)가 누락되었습니다. 수정: 함수 시작 부분에서 check_ajax_referer()를 호출하세요. line 6 · found by gemini-3.6-flash · confirmed by gpt-5.6
  10. high 파일 경로가 요청에서 바로 가져와져 file()에 전달됩니다. 공격자는 웹 서버가 읽을 수 있는 모든 파일을 읽거나, allow_url_fopen이 켜져 있으면 원격 URL을 읽을 수 있습니다. 수정: wp_handle_upload()를 통해 업로드된 파일을 허용하거나 고정된 하나의 가져오기 디렉터리에서만 읽으세요. 요청에서 경로를 가져오지 마세요. line 8 · found by claude · confirmed by gpt-5.6, gemini-3.6-flash
  11. medium 모든 줄에 정확히 네 개의 사용 가능한 열이 있다고 가정합니다. 비어 있거나 손상된 줄은 누락된 값을 생성하여 경고를 발생시키고, 의도치 않게 이름, 가격 또는 재고를 빈 값으로 설정할 수 있습니다. 수정: 구조 분해 전에 열 수와 필수 필드를 확인하고, 빈 줄을 건너뛰며, 결함이 있는 레코드를 명확한 오류 메시지와 함께 거부하세요. line 12 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  12. medium file()\과 str\_getcsv()\의 조합은 각 물리적 줄을 개별적으로 파싱합니다. 따라서 줄 바꿈이 포함된 유효한 CSV 필드가 여러 개의 결함 있는 레코드로 분할됩니다. 수정: fgetcsv()\로 CSV를 스트림으로 읽으세요. 이 함수는 레코드 경계를 넘는 여러 줄의 올바르게 인용된 필드를 처리합니다. line 9 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  13. medium 가격과 재고가 임의의 문자열로 검사 없이 저장됩니다. 숫자가 아닌 값, 잘못된 소수점 형식 또는 허용되지 않는 재고 수준은 제품 데이터를 손상시키고 일관되지 않은 계산을 초래할 수 있습니다. 수정: 쓰기 전에 가격과 재고를 검증하고 wc\_format\_decimal()\ 및 wc\_stock\_amount()\와 같은 WooCommerce 헬퍼로 정규화하세요. 비즈니스 관점에서 유효하지 않거나 허용되지 않는 값은 거부하세요. line 15 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  14. medium WooCommerce 데이터가 게시물 메타로 직접 변경됩니다. 그 결과 \_stock\_status\, 제품 조회 테이블 및 경우에 따라 캐시와 같은 관련 상태가 새 가격 및 재고 수준과 안정적으로 동기화되지 않습니다. 수정: wc\_get\_product()\을 통해 제품을 로드하고, set\_regular\_price()\, set\_price()\ 및 set\_stock\_quantity()\와 같은 CRUD 메서드를 사용하며, 비즈니스 규칙에 따라 재고 상태 또는 manage\_stock\을 설정한 다음 save()\을 호출하세요. line 15 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  15. medium SKU 조회는 모든 게시물 메타데이터를 고려하며, 게시물 유형이나 찾은 ID가 실제로 WooCommerce 제품 또는 변형인지 확인하지 않습니다. 중복되거나 관련 없는 \_sku\ 메타데이터가 있는 경우 비결정적 일치 항목도 업데이트됩니다. 수정: wc\_get\_product\_id\_by\_sku()\을 사용한 다음 wc\_get\_product()\ 및 예상 제품 유형으로 결과를 검증하세요. 중복 SKU는 가져오기 오류로 처리하세요. line 13 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  16. medium update\_post\_meta()\ 및 wp\_update\_post()\의 반환 값이 무시됩니다. 가져오기가 부분적으로 실패하거나 중단될 수 있지만, 여전히 읽은 총 줄 수를 성공적으로 가져온 것으로 보고합니다. 수정: 제품별로 성공과 실패를 기록하고, wp\_update\_post(..., true)\을 사용하며, 실제로 업데이트된 레코드만 계산하고, 구조화된 오류 응답을 반환하세요. 대규모 가져오기를 위해 재개 가능한 백그라운드 작업을 제공하세요. line 15 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  17. medium 각 CSV 줄마다 최소 하나의 조회 쿼리와 여러 개별 쓰기 작업이 동기적으로 실행됩니다. 따라서 대규모 가져오기는 많은 데이터베이스 왕복을 발생시키고, 요청 시간 초과에 도달할 수 있으며, 부분적으로만 업데이트된 카탈로그를 남길 수 있습니다. 수정: 가져오기를 제한된 배치로 백그라운드 프로세스로 실행하고, SKU를 일괄적으로 해석하며, 진행 상황과 재개 상태를 저장하세요. line 11 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  18. medium file()은 전체 파일을 한 번에 메모리로 읽으므로 대용량 CSV 파일에서 메모리 고갈 오류가 발생합니다. 수정: fopen() 및 fgetcsv()를 통해 파일을 한 줄씩 스트리밍하세요. line 8 · found by gemini-3.6-flash · confirmed by gpt-5.6
  19. medium 배열 구조 분해는 모든 줄에 최소 4개의 요소가 있다고 가정합니다. 그렇지 않으면 PHP 경고 또는 초기화되지 않은 인덱스 오류가 발생합니다. 수정: 압축 해제 전에 count($row)로 충분한 열이 있는지 확인하세요. line 10 · found by gemini-3.6-flash · confirmed by gpt-5.6
  20. medium 데이터베이스 쿼리와 게시물 업데이트가 루프에서 개별적으로 수행되어(N+1 문제) 실행 시간이 상당히 느려집니다. 수정: 가져오기를 배치로 분할하고 쿼리/업데이트를 묶으세요. line 11 · found by gemini-3.6-flash · confirmed by gpt-5.6
  21. low file()\의 오류가 확인되지 않습니다. 경로가 없거나, 읽을 수 없거나, 지원되지 않는 경우 file()\는 false\을 반환하며, 그러면 array\_map()\이 현재 PHP 버전에서 TypeError\를 던질 수 있습니다. 수정: 열기와 읽기를 명시적으로 확인하고, PHP 경고를 제어 흐름으로 사용하지 말며, 오류 시 적절한 HTTP 또는 wp\_send\_json\_error()\ 응답을 반환하세요. line 9 · found by gpt-5.6 · confirmed by gemini-3.6-flash

베이커리 주문 페이지의 주문 및 결제 흐름을 보안과 정확성 측면에서 Kirat에게 검토하게 하세요.

kirat_review이(가) 평의회에 질문했습니다

Kirat은 14개의 확인된 문제(4 × critical, 4 × high, 5 × medium, 1 × low)를 발견했습니다. 각 발견 사항은 다른 모델 계열에 의해 교차 검증되었습니다.

목록 상단의 항목부터 시작하세요. 각 항목에는 제안된 수정 사항이 함께 제공됩니다.

비하인드 스토리

kirat_review Claude가 Kirat에게 보내는 내용

RECORDED 2026-10-13 · KIRAT_REVIEW · EFFORT: STANDARD · 14 CONFIRMED, 0 REJECTED · $0.11

초점: 주문 및 결제 흐름의 보안과 정확성

보낸 코드:

// routes/order.js — order endpoint of the bakery's ordering page (Node 20, Express 4, pg)
const express = require('express');
const { pool } = require('../db');
const { sendConfirmation } = require('../mail');
const router = express.Router();

router.post('/order', async (req, res) => {
  const { cakeId, pickupDate, name, email, price, note } = req.body;

  const cake = await pool.query(\`SELECT * FROM cakes WHERE id = ${cakeId}\`);
  if (!cake.rows.length) return res.status(404).send('Unknown cake');

  const order = await pool.query(
    'INSERT INTO orders (cake_id, pickup_date, name, email, amount, note) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id',
    [cakeId, pickupDate, name, email, price, note]
  );

  sendConfirmation(email, order.rows[0].id);
  res.redirect(\`/pay?order=${order.rows[0].id}&amount=${price}\`);
});

module.exports = router;

평의회의 결과

  1. 심각 cakeId가 SQL 문자열에 직접 보간됩니다. 공격자는 SQL 표현식이나 추가 문을 주입하여 데이터를 읽거나 수정하거나 데이터베이스에 부하를 줄 수 있습니다. 수정: 이 쿼리도 매개변수화하세요. 예: SELECT... FROM cakes WHERE id = $1\와 \[cakeId\]\ 사용, 그리고 추가로 cakeId의 예상 타입을 검사하세요. 10행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  2. 심각 SQL 쿼리에서 cakeId를 템플릿 문자열로 직접 보간하여 SQL 주입 취약점이 발생합니다. 수정: 매개변수화된 SQL 쿼리를 사용하세요: pool.query('SELECT * FROM cakes WHERE id = $1', [cakeId]). 9행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  3. 심각 클라이언트 측 가격 조작이 가능합니다. 가격이 req.body에서 가져와져 그대로 저장되고 처리됩니다. 수정: 가격을 서버 측에서 데이터베이스(cake.rows[0].price)로부터 읽고 클라이언트가 보낸 값을 신뢰하지 마세요. 8행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  4. 심각 요청 본문의 cakeId가 SQL 문자열에 보간됩니다: SQL 주입. 수정: 매개변수화된 쿼리를 사용하세요: SELECT * FROM cakes WHERE id = $1. 10행 · claude 발견 · gpt-5.6, gemini-3.6-flash 확인
  5. 높음 저장되고 결제 흐름으로 전달되는 금액이 전적으로 req.body.price\에서 옵니다. 고객은 어떤 케이크에 대해서든 조작된, 음수 또는 매우 작은 금액을 입력할 수 있습니다. 수정: 가격을 선택된 케이크 또는 변경 불가능한 가격 버전으로부터 서버 측에서만 결정하세요. 결제 제공업체에서 이 금액으로 서버 측 결제 세션을 생성하고, 결제 확인 시 예상 금액을 서버 측에서 다시 검증하세요. 16행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  6. 높음 성공한 결제가 검증되기 전에 주문이 생성되고 확인이 발송됩니다. 따라서 중단되거나 의도적으로 결제되지 않은 거래가 확인된 주문으로 나타나며 임의로 생성될 수 있습니다. 수정: 처음에는 pending\_payment\와 같은 상태로 주문을 생성하세요. 인증되고 멱등적으로 처리된 결제 제공업체 알림 후에만 paid\로 전환하고, 그런 다음 확인을 발송하거나 생산 또는 예약을 트리거하세요. 19행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  7. 높음 async Express 4 라우트에서 오류 처리가 누락되었습니다. 데이터베이스 또는 런타임 오류로 인해 처리되지 않은 프로미스 거부가 발생합니다. 수정: try/catch 블록을 사용하고 next(err)로 오류를 전달하거나 express-async-errors와 같은 패키지를 사용하세요. 8행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  8. 높음 금액이 클라이언트(요청 본문의 가격)에서 가져와지므로 고객이 자신의 가격을 설정할 수 있습니다. 수정: 서버의 cakes 행에서 가격을 읽고 클라이언트 값을 무시하세요. 15행 · claude 발견 · gpt-5.6, gemini-3.6-flash 확인
  9. 중간 async 핸들러에 오류 전달이 없습니다. Express 4는 async\ 핸들러의 거부된 프로미스를 자동으로 처리하지 않으므로, 데이터베이스 또는 동기 메일 오류로 인해 응답 없는 요청과 처리되지 않은 거부가 발생할 수 있습니다. 수정: 핸들러를 try/catch\로 감싸고 오류를 next(err)\로 전달하거나, 검증된 async 래퍼를 사용하세요. 추가로 중앙 오류 처리를 구성하세요. 7행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  10. 중간 sendConfirmation\의 결과는 await되지 않으며 오류에 대해서도 다른 방식으로 처리되지 않습니다. 프로미스 거부가 처리되지 않은 채 남을 수 있으며, 동시에 메일 발송이 실패했을 수 있음에도 클라이언트는 이미 성공 응답을 받습니다. 수정: 결제 확인 후 재시도가 있는 영구 아웃박스 또는 작업 큐를 통해 발송을 수행하세요. 최소한 프로미스를 await하고 오류를 통제된 방식으로 기록하거나 처리하세요. 19행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  11. 중간 멱등성 보호가 없습니다. 브라우저 재시도, 더블 클릭 또는 네트워크 재시도마다 새 주문이 생성되고 확인 또는 결제 시도가 여러 번 발생할 수 있습니다. 수정: 멱등성 키 또는 체크아웃 세션 ID를 받아들이고, 고유 제약 조건으로 보호하며, 재시도 시 이미 존재하는 주문을 반환하세요. 13행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  12. 중간 pickupDate, name, email, price 및 note가 비즈니스 또는 구문 검증 없이 처리됩니다. 이는 예를 들어 과거 또는 유효하지 않은 픽업 날짜, 누락된 고객 데이터 및 부적절한 필드 값이 저장될 수 있음을 의미하며, 데이터베이스 오류도 늦게 통제되지 않은 방식으로만 발생합니다. 수정: 타입, 필수 필드, 길이 제한 및 정규화된 형식이 있는 요청 스키마를 사용하세요. 픽업 날짜를 시간대, 리드 타임 및 허용 가능한 영업시간 또는 용량 규칙에 대해 검사하세요. 가격을 클라이언트 입력으로 받아들이지 마세요. 8행 · gpt-5.6 발견 · gemini-3.6-flash 확인
  13. 중간 sendConfirmation에 대한 async 호출이 await되지 않으며 오류에 대해 잡히지 않습니다. 수정: sendConfirmation 앞에 await를 붙이고 이메일 발송 시 발생할 수 있는 오류를 처리하세요. 17행 · gemini-3.6-flash 발견 · gpt-5.6 확인
  14. 낮음 email, pickupDate, name 및 note와 같은 필드에 대한 불완전한 입력 검증. 수정: 요청 데이터를 처리하기 전에 스키마 검증(예: Zod 또는 express-validator 사용)을 구현하세요. 8행 · gemini-3.6-flash 발견 · gpt-5.6 확인

Kirat에게 이 청구 함수의 정확성과 데이터 무결성을 검사하도록 요청하세요.

kirat_review가 평의회에 질문함

Kirat이 16개의 확인된 문제(1 × 심각, 11 × 높음, 3 × 중간, 1 × 낮음)를 발견했습니다. 각 발견 사항은 다른 모델 계열에 의해 교차 검증되었습니다.

목록 상단의 항목부터 시작하세요. 각 항목에는 제안된 수정 사항이 함께 제공됩니다.

비하인드 스토리

kirat_review Claude가 Kirat에게 보내는 내용

기록됨 2026-10-13 · KIRAT_REVIEW · 노력: 표준 · 16 확인, 0 거부 · $0.14

초점: 청구 함수의 정확성 및 데이터 무결성

보낸 코드:

// billing/applyCredit.ts — billing module in the monolith (TypeScript, node-postgres)
import { pool } from '../db';

export async function applyCredit(customerId: string, invoiceId: string, creditCents: number) {
  const inv = await pool.query('SELECT total_cents, status FROM invoices WHERE id = $1', [invoiceId]);
  const balance = await pool.query('SELECT credit_cents FROM customers WHERE id = $1', [customerId]);

  const available = balance.rows[0].credit_cents;
  if (creditCents > available) throw new Error('Not enough credit');

  const newTotal = inv.rows[0].total_cents - creditCents;
  await pool.query('UPDATE invoices SET total_cents = $1 WHERE id = $2', [newTotal, invoiceId]);
  await pool.query('UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2', [creditCents, customerId]);

  if (newTotal <= 0) {
    await pool.query("UPDATE invoices SET status = 'paid' WHERE id = $1", [invoiceId]);
  }
  return newTotal * 1.19 / 100;
}

평의회의 결과

  1. critical 데이터베이스 트랜잭션과 행 잠금이 누락되었습니다. 병렬 요청이 발생하면 경쟁 조건(예: 크레딧 이중 사용)과 오류 발생 시 불완전한 업데이트가 발생할 수 있습니다. 수정: 풀에서 클라이언트를 가져와 BEGIN/COMMIT을 사용하고, SELECT FOR UPDATE로 행을 잠그고 원자적으로 업데이트하세요. line 5 · found by gemini-3.6-flash · confirmed by gpt-5.6
  2. high 세 가지 관련 업데이트가 데이터베이스 트랜잭션 내에서 실행되지 않습니다. 고객 크레딧 차감이나 상태 변경이 실패하면, 크레딧이 올바르게 청구되지 않았거나 상태가 설정되지 않았음에도 인보이스가 이미 감액되었을 수 있습니다. 수정: 풀에서 전용 클라이언트를 가져와 BEGIN과 COMMIT 사이에서 모든 검사와 업데이트를 실행하고, 오류 발생 시 ROLLBACK을 사용하세요. line 11 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  3. high 인보이스를 먼저 읽은 후 나중에 계산된 절대값으로 덮어씁니다. 두 개의 병렬 호출이 동일한 시작 값을 읽은 다음 서로를 덮어쓸 수 있습니다. 두 크레딧 차감은 모두 발생하지만, 인보이스에는 하나의 크레딧만 완전히 반영됩니다. 수정: 동일한 트랜잭션 내에서 SELECT... FOR UPDATE로 해당 인보이스를 잠그거나, 적절한 조건과 함께 UPDATE... SET total_cents = total_cents - $1로 금액을 원자적으로 변경하세요. line 4 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  4. high 고객 크레딧의 확인과 차감이 원자적이지 않습니다. 병렬 호출이 동일한 가용 범위를 모두 확인한 후 크레딧을 0 미만으로 감소시킬 수 있습니다. 수정: 고객 레코드를 트랜잭션으로 잠그거나, UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2 AND credit_cents >= $1 RETURNING credit_cents와 같은 조건부 UPDATE를 사용하고 정확히 한 행이 반환되도록 요구하세요. line 8 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  5. high 인보이스가 지정된 고객에게 속하는지 확인하지 않습니다. 그 결과, 한 고객의 크레딧이 invoiceId로 식별된 임의의 인보이스에 적용될 수 있습니다. 수정: 소유 관계를 통해 인보이스와 고객을 조회하고 업데이트하세요. 예를 들어 WHERE invoices.id = $1 AND invoices.customer_id = $2를 사용하고, 일치하는 항목이 없으면 중단하세요. line 4 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  6. high 적용할 크레딧이 미결 인보이스 금액으로 제한되지 않습니다. creditCents가 total_cents보다 크면 음수 인보이스 금액이 저장되고 초과 고객 크레딧이 소비됩니다. 수정: 미결 인보이스 금액까지만 허용하거나, 실제 사용 금액을 min(creditCents, total_cents)로 결정하고 이 금액만 고객 크레딧에서 차감하세요. line 10 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  7. high 음수, 비정수 또는 안전하게 표현할 수 없는 값이 거부되지 않습니다. 특히 음수 creditCents 값은 인보이스 금액을 증가시키고 동시에 음수 값의 뺄셈을 통해 고객 크레딧도 증가시킵니다. 수정: 데이터베이스 접근 전에 Number.isSafeInteger(creditCents) && creditCents > 0을 요구하고, 금액은 일관되게 정수 센트 값으로 처리하세요. line 8 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  8. high 읽은 인보이스 상태가 완전히 무시됩니다. 따라서 이미 결제되었거나, 취소되었거나, 그 밖의 이유로 더 이상 수정할 수 없는 인보이스에도 크레딧이 적용될 수 있으며, 그 결과 이미 결제된 인보이스가 음수가 될 수 있습니다. 수정: 허용되는 시작 상태를 명시적으로 정의하고 UPDATE 조건에서 원자적으로 확인하세요. 예: AND status = 'open'. 일치하는 항목이 없으면 작업을 중단하세요. line 4 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  9. high 사전 확인 없이 balance.rows[0] 및 inv.rows[0]에 접근합니다. 고객이나 인보이스를 찾지 못하면 처리되지 않은 TypeError로 애플리케이션이 충돌합니다. 수정: 접근 전에 inv.rows.length와 balance.rows.length를 확인하고 명시적인 오류 메시지를 발생시키세요. line 8 · found by gemini-3.6-flash · confirmed by gpt-5.6
  10. high creditCents의 음수 값 검증이 누락되었습니다. 음수 값은 검사(creditCents > available)를 우회하고 잘못된 크레딧 또는 인보이스 조정을 초래합니다. 수정: creditCents가 0보다 큰 양의 정수인지 확인하세요. line 9 · found by gemini-3.6-flash · confirmed by gpt-5.6
  11. high 읽기와 세 가지 업데이트가 트랜잭션 및 행 잠금 없이 실행됩니다. 두 개의 동시 호출이 모두 크레딧 검사를 통과하여 동일한 크레딧을 두 번 사용할 수 있으며, 업데이트 사이에 충돌이 발생하면 인보이스와 크레딧 잔액이 일관되지 않게 됩니다. 수정: 모든 작업을 단일 클라이언트의 하나의 트랜잭션에서 실행하고, SELECT... FOR UPDATE로 행을 잠그고, 모든 업데이트가 성공한 후에만 커밋하세요. line 5 · found by claude · confirmed by gpt-5.6, gemini-3.6-flash
  12. high 이 함수는 인보이스가 해당 고객에게 속하는지 또는 여전히 미결 상태인지 확인하지 않습니다. 한 고객의 크레딧이 다른 고객의 인보이스나 이미 결제된 인보이스에 적용될 수 있습니다. 수정: WHERE id = $1 AND customer_id = $2 AND status = 'open'으로 인보이스를 선택하고, 반환되는 행이 없으면 실패하세요. line 11 · found by claude · confirmed by gpt-5.6, gemini-3.6-flash
  13. medium 인보이스와 고객의 존재 여부를 확인하지 않습니다. 알 수 없는 ID의 경우 rows[0]에 접근하면 통제된 비즈니스 오류 대신 런타임 오류가 발생하며, 또한 이것이 드러나기 전에 두 쿼리가 불필요하게 실행됩니다. 수정: 두 쿼리 모두에 대해 rowCount 또는 rows.length를 확인하고 정의된 not-found 오류를 발생시키세요. 검사를 트랜잭션에 통합하고 가능하면 관계형 쿼리에 통합하세요. line 4 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  14. medium 반환 값은 저장된 센트 금액과도, 기본 통화로의 단순 변환과도 일치하지 않습니다. 고정 19퍼센트를 더하고 부동 소수점 연산을 사용합니다. 그 결과 호출자는 실제로 저장된 남은 인보이스 잔액과 세금 및 반올림 측면에서 다른 값을 받을 수 있습니다. 수정: 남은 금액을 센트 단위로 변경 없이 반환하거나, 명확하게 타입이 지정된 반환 값을 정의하세요. 비즈니스상 세금 계산이 필요한 경우 인보이스 데이터에서 세율과 반올림 규칙을 가져와 정수 또는 십진 연산으로 계산하세요. line 17 · found by gpt-5.6 · confirmed by gemini-3.6-flash
  15. medium 금융 계산에 IEEE 754 부동 소수점 연산(newTotal * 1.19 / 100)을 사용합니다. 이는 정밀도 및 반올림 오류를 초래합니다. 수정: 정수를 사용하여 센트 단위로 일관되게 계산하거나(BigInt/Math.round), 정확한 십진 연산을 위한 라이브러리를 사용하세요. line 18 · found by gemini-3.6-flash · confirmed by gpt-5.6
  16. low 인보이스 상태에 대한 별도의 UPDATE 명령은 불필요한 데이터베이스 왕복을 발생시킵니다. 수정: total_cents와 status 업데이트를 단일 UPDATE 쿼리로 결합하세요. line 12 · found by gemini-3.6-flash · confirmed by gpt-5.6

Kirat에게 체계적 문헌고찰을 위한 선별 분석 스크립트의 정확성을 검토하도록 요청하세요.

kirat_review 이(가) 평의회에 질문했습니다

Kirat이 확인된 11개 문제(6 × high, 4 × medium, 1 × low)를 발견했습니다. 각 발견 사항은 다른 모델 계열에 의해 교차 검증되었습니다.

목록 상단의 항목부터 시작하세요. 각 항목에는 제안된 수정 사항이 함께 제공됩니다.

비하인드 스토리

kirat_review Claude가 Kirat에게 보내는 내용

RECORDED 2026-10-13 · KIRAT_REVIEW · EFFORT: STANDARD · 11 CONFIRMED, 0 REJECTED · $0.09

초점: 체계적 문헌고찰을 위한 선별 분석의 정확성

전송된 코드:

# screening/agreement.py — compares two screeners' include/exclude decisions (Python 3.12, pandas)
import pandas as pd

a = pd.read_csv('screener_a.csv')   # columns: record_id, decision ('include'/'exclude')
b = pd.read_csv('screener_b.csv')

merged = a.merge(b, on='record_id', suffixes=('_a', '_b'))

agree = (merged.decision_a == merged.decision_b).mean()
p_inc_a = (merged.decision_a == 'include').mean()
p_inc_b = (merged.decision_b == 'include').mean()
expected = p_inc_a * p_inc_b + (1 - p_inc_a) * (1 - p_inc_b)
kappa = (agree - expected) / (1 - expected)

conflicts = merged[merged.decision_a != merged.decision_b]
excluded = merged[merged.decision_a == 'exclude']

print(f'Records screened: {len(a)}')
print(f"Cohen's kappa: {kappa:.2f}")
excluded.record_id.to_csv('excluded.csv', index=False)
conflicts.to_csv('conflicts.csv', index=False)

평의회의 결과

  1. 높음 기본 내부 조인은 두 파일 중 하나에만 존재하는 모든 record_id 값을 제거합니다. 따라서 카파와 충돌은 교집합에 대해서만 계산되며, 누락된 스크리닝이 드러나지 않습니다. 동시에 18번째 줄의 "Records screened"는 실제로 분석된 교집합이 아니라 a의 길이를 보고합니다. 수정: 병합 표시자가 있는 외부 조인을 사용하고, ID 집합을 명시적으로 비교하며, 누락된 결정을 별도로 보고하거나 데이터 오류로 처리하십시오. 각 지표마다 실제로 사용된 분모를 출력하십시오. 7번째 줄 · gpt-5.6 발견 · gemini-3.6-flash 확인
  2. 높음 record_id의 고유성이 확인되지 않습니다. 중복 ID는 병합 중 다대다 카티션 곱을 일으키고 개별 연구에 여러 번 가중치를 부여하여 일치도, 유병률, 카파 및 출력 파일을 왜곡합니다. 수정: 병합 전에 두 파일의 record_id가 null이 아니고 고유한지 확인하고, 중복이 있으면 중단하십시오. 또한 merge(..., validate='one_to_one')를 사용하십시오. 7번째 줄 · gpt-5.6 발견 · gemini-3.6-flash 확인
  3. 높음 결정 값이 검증되지 않습니다. 누락된 값, 오타, 대소문자 또는 추가 범주는 포함 유병률이 계산될 때 암묵적으로 "exclude"처럼 처리되는 반면, 관찰된 일치도는 정확한 값을 비교합니다. 따라서 계산이 더 이상 이진 코헨 카파에 해당하지 않으며 모순된 결과를 낼 수 있습니다. 수정: 분석 전에 decision을 통제된 방식으로 정규화하고 모든 값이 정확히 'include' 또는 'exclude'인지 확인하십시오. 누락되거나 알 수 없는 값은 데이터 오류 또는 불완전한 스크리닝으로 별도 처리하십시오. 9번째 줄 · gpt-5.6 발견 · gemini-3.6-flash 확인
  4. 높음 excluded에는 스크리너 B가 "include"로 결정한 충돌을 포함하여 스크리너 A가 제외한 모든 레코드가 포함됩니다. 따라서 그러한 레코드는 excluded.csv와 conflicts.csv 모두에 기록됩니다. excluded.csv가 최종적으로 제외된 히트를 나타내야 한다면, 해결되지 않은 충돌이 검토에서 잘못 제거될 수 있습니다. 수정: 문서화된 우선순위 규칙이 없다면 일치하는 제외만 선택하십시오. 즉, (decision_a == 'exclude') & (decision_b == 'exclude')입니다. 합의 결정이 내려질 때까지 충돌은 conflicts.csv에만 보관하십시오. 16번째 줄 · gpt-5.6 발견 · gemini-3.6-flash 확인
  5. 높음 제외된 연구의 잘못된 필터링: 'excluded'는 스크리너 A의 결정('merged.decision_a == "exclude"')만 고려합니다. 충돌이 있는 경우(스크리너 A는 제외, 스크리너 B는 포함) 해당 연구는 잘못 제외된 것으로 집계됩니다. 수정: 두 스크리너가 일관되게 'exclude'를 선택한 경우에만 제외 항목을 내보내거나(예: '(merged.decision_a == "exclude") & (merged.decision_b == "exclude")'), 충돌이 해결될 때까지 기다리십시오. 16번째 줄 · gemini-3.6-flash 발견 · gpt-5.6 확인
  6. 높음 excluded.csv에는 스크리너 B가 포함시킨 충돌을 포함하여 스크리너 A가 제외한 모든 레코드가 포함됩니다. 해당 레코드는 충돌 논의 전에 삭제되며, 이는 바로 프로토콜이 피해야 하는 잘못된 제외입니다. 수정: 두 스크리너가 모두 제외한 레코드만 제외하십시오: merged[(merged.decision_a == 'exclude') & (merged.decision_b == 'exclude')]; 모든 충돌은 먼저 해결로 보내십시오. 16번째 줄 · claude 발견 · gpt-5.6, gemini-3.6-flash 확인
  7. 중간 두 스크리너가 동일한 범주만 사용하면 expected가 1이 되고 카파의 분모가 0이 됩니다. 결과는 NaN이 되거나 0으로 나누기 경고가 발생할 수 있으며, 형식화된 출력 "nan"은 카파가 수학적으로 정의되지 않았음을 설명하지 않습니다. 분석된 교집합이 비어 있는 경우에도 의미 없는 NaN 지표가 발생합니다. 수정: 나누기 전에 유효한 쌍을 이룬 결정이 있는지, 그리고 1 - expected가 0보다 큰지 확인하십시오. 퇴화된 경우에는 카파를 "정의되지 않음"으로 명시적으로 보고하고 기저 빈도를 보고하십시오. 13번째 줄 · gpt-5.6 발견 · gemini-3.6-flash 확인
  8. 중간 기대 우연 값 'expected'가 1인 경우(예: 두 스크리너가 모든 레코드의 100%에 대해 동일한 범주를 선택한 경우) 코헨 카파에서 0으로 나누기가 발생할 수 있습니다. 수정: 계산 전에 '1 - expected == 0'인지 확인하고, 그 경우 정의된 값(예: 1.0 또는 NaN)을 할당하십시오. 12번째 줄 · gemini-3.6-flash 발견 · gpt-5.6 확인
  9. 중간 기본 내부 조인에 의한 레코드의 조용한 폐기. 스크리너 A와 스크리너 B가 서로 다른 'record_id' 집합을 평가한 경우, 처리된 연구의 불일치가 보고되지 않습니다. 또한 콘솔 출력의 'len(a)'는 실제로 매칭된 연구 수와 일치하지 않습니다. 수정: 'len(a) == len(b) == len(merged)'가 성립하는지 확인하거나, 외부 조인을 수행하여 불완전하게 평가된 레코드를 명시적으로 표시하십시오. 7번째 줄 · gemini-3.6-flash 발견 · gpt-5.6 확인
  10. 중간 내부 병합은 한 스크리너만 결정한 레코드를 조용히 삭제하며, 출력되는 개수는 len(a)를 사용합니다. 스크리닝되지 않은 레코드는 일치도와 PRISMA 수치 모두에서 사라집니다. 수정: how='outer', indicator=True로 병합하고, 어느 한 스크리너라도 결정이 없는 레코드가 있으면 실패하거나 보고하십시오. 7번째 줄 · claude 발견 · gpt-5.6, gemini-3.6-flash 확인
  11. 낮음 'decision' 열의 입력 정리 및 누락된 값 처리 부재. 대소문자, 공백 또는 NaN 값은 잘못된 비교를 초래합니다. 수정: 비교 전에 열 값을 정리하고(예: '.str.strip().str.lower()'), 데이터 유형 안전성을 보장하십시오. 9번째 줄 · gemini-3.6-flash 발견 · gpt-5.6 확인

표시된 내용: 멤버들이 작성한 대로 수정 사항과 함께 모든 확인된 발견 사항이며, 검증자의 추론은 판정으로 축약되었습니다. 중복은 병합되지 않으므로 여러 멤버가 보고한 경우 하나의 문제가 두 번 이상 나타날 수 있습니다. 코드, 포커스 및 Claude 자신의 발견 사항은 영어로 전송되었으며, 멤버들이 독일어로 작성한 발견 사항은 여기에서 번역되었습니다.

서로 다른 분야의 다섯 가지 아이디어 브리프. ChatGPT와 Gemini는 세 개의 트랙에서 작업하고, Claude는 아이디어 하나를 추가하며, 두 멤버는 모든 아이디어를 익명으로 평가합니다(각 1–10점, 최대 20점). 하나를 선택하십시오.

제 블로그 게시물 두 개는 Google에서 순위가 높지만, 체험판을 시작하는 독자는 거의 없습니다. Kirat과 함께 아이디어를 브레인스토밍하세요.

kirat_brainstorm 평의회에 질문했습니다

평의회는 14개의 아이디어를 내고 각각을 익명으로 평가했습니다. 상위 세 가지:

  1. 14일 시계를 세 번의 실제 발송으로 교체 (18/20점)
  2. 기사 안에서 작업 완료 (17/20점)
  3. 독촉 기사를 복구 콘솔로 전환 (17/20점)

비하인드 스토리

kirat_brainstorm Claude가 Kirat에게 보내는 것

기록됨 2026-10-13 · KIRAT_BRAINSTORM · 노력: 표준 · 14개 아이디어 · 1라운드 · $0.11

주제: 1인 개발자가 Google에서 순위가 높은 두 블로그 게시물의 독자를 프리랜서용 인보이싱 도구의 체험판 가입으로 더 많이 전환하기 위한 아이디어

전송된 컨텍스트: 프리랜서용 인보이싱 도구, 월 USD 19, 14일 무료 체험판, 5개월 후 유료 고객 30명. 가입은 주로 Google에서 순위가 높은 두 블로그 게시물(프리랜서 인보이스 작성 방법, 연체 대금 독촉 방법)에서 발생합니다. 체험판의 약 12%가 전환됩니다. 개발자는 본업이 있고 제품에 주당 약 10시간을 쓸 수 있습니다. 제약: 유료 광고 금지. 제약: 이 작업에 주당 최대 3시간.

평의회의 결과

  1. 1 14일 기한을 세 번의 실제 발송으로 교체 gpt-5.6 · 규칙 파괴자 · 18/20점 (9 + 9) 14일의 달력 기간이 아니라 세 건의 송장 발송 또는 결제 독촉이 끝나면 종료되는 체험판을 테스트하세요. 이는 기간 한정 체험판이 적절하다는 암묵적 가정을 의도적으로 깨뜨립니다. 프리랜서는 임의의 2주 기간 동안 송장을 발행하지 않을 수 있으므로, 현재 체험판은 제품이 가치를 입증하기 전에 만료될 수 있습니다. 월 19달러 요금제는 그대로 유지하고 코호트별로 활성화에서 유료 전환까지 비교하세요.
  2. 2 기사 안에서 작업 완료하기 gpt-5.6 · 브리프 준수 · 17/20점 (9 + 8) "프리랜서 송장 작성법"에 작은 송장 작성기를 삽입하세요. 독자가 고객, 금액, 납기일, 결제 조건을 입력하면 완성된 미리보기가 표시됩니다. "이 송장 보내기 또는 저장하기"를 누르면 해당 세부 정보가 이미 입력된 체험판이 생성되어 배움과 실행 사이의 간극을 없앱니다. 주당 3시간으로 제한된 주간 단위로 구축하고 유지보수는 거의 제로에 가깝게 유지하세요.
  3. 3 독촉 기사를 회수 콘솔로 전환 gpt-5.6 · 인접 아이디어 · 17/20점 (9 + 8) 삽입형 송장 작성기를 한 단계 대체하는 방식으로, 독자가 연체 금액과 납기일을 입력하면 날짜가 지정된 3개 메시지 독촉 시퀀스를 생성하게 하세요. 체험판을 시작하면 채무자 정보가 저장되고 메시지가 예약되며 첫 번째 초안이 발송 준비 상태로 열립니다. 이는 가입 전 유용한 결과물이라는 가장 강력한 패턴을 유지하면서 두 번째 게시물의 의도와도 일치합니다.
  4. 4 전환의 순간을 채무자의 달력에 두기 gpt-5.6 · 브리프 준수 · 16/20점 (7 + 9) 연체 결제 기사에서 납기일과 1일, 7일, 14일의 단계적 후속 조치 알림이 포함된 생성된 .ics 파일을 제공하세요. 각 캘린더 이벤트에는 날짜가 미리 입력된 관련 독촉 워크플로를 여는 딥 링크가 포함되어, 독자가 단순히 조사하는 중이 아니라 실제로 문제를 겪을 때 다시 돌아오게 합니다. 이메일 수집이 필요 없고 무인으로 운영할 수 있습니다.
  5. 5 체험 기간 대신 한 고객에 대한 영구 무료 요금제 gemini-3.6-flash · 규칙 파괴자 · 16/20점 (8 + 8) 이 아이디어는 14일 체험판이라는 암묵적 제약을 깨고 정확히 한 명의 활성 고객에 대한 프리미엄 요금제로 대체합니다. 프리랜서는 첫 고객에 대해 제품을 영구적으로 무료로 사용하고, 두 번째 고객이 추가되는 즉시 19달러 정액 요금제로 원활하게 업그레이드합니다.
  6. 6 즉각적인 문제로 독자 분류하기 gpt-5.6 · 브리프 준수 · 14/20점 (8 + 6) 일반적인 체험판 배너를 "첫 송장이 필요해요", "반복적으로 송장을 발행해요", "고객이 이미 연체했어요"와 같은 세 가지 인라인 선택지로 교체하세요. 각 선택지는 동일한 홈페이지가 아니라 그에 맞는 온보딩 상태를 엽니다. 기사 섹션 ID로 적절한 기본값을 미리 선택할 수 있습니다. CTA 클릭 수가 아니라 완료된 체험판 활성화를 측정하고 매주 하나의 경로를 테스트하세요.
  7. 7 세 가지 포렌식 송장 리메이크 게시 gpt-5.6 · 브리프 준수 · 14/20점 (8 + 6) 허가를 받아 세 개의 익명화된 고객 송장을 정적 전후 사례 연구로 전환하여 무엇이 어떻게 바뀌었는지 정확히 보여주세요. 순위 기사에서 관련 조언 옆에 각 리메이크를 삽입하고, 수정된 동일한 구조를 편집 가능한 체험판 템플릿으로 여는 CTA를 함께 넣으세요. 소규모 고객 기반에서 나온 구체적인 증거는 광범위한 추천사보다 더 신뢰할 수 있습니다.
  8. 8 독자가 두 게시물 사이에서 진행 상황을 이어가게 하기 gpt-5.6 · 브리프 준수 · 14/20점 (7 + 7) 독자가 선택한 통화, 송장 단계, 납기일을 브라우저에 로컬로 저장한 다음 두 기사 사이를 이동할 때 해당 상태를 사용하세요. 송장 계획을 만든 사람은 나중에 "송장이 이제 3일 연체되었습니다—준비된 후속 조치를 여세요"와 같은 상황별 프롬프트를 체험판 온보딩이 미리 입력된 상태로 볼 수 있습니다. 이는 계정이나 지속적인 콘텐츠 제작 없이 가벼운 두 게시물 여정을 만듭니다.
  9. 9 대화형 독촉 서한 구성 도구 gemini-3.6-flash · 브리프 준수 · 14/20점 (7 + 7) 연체 결제 후속 조치에 관한 기사에 단계적 결제 독촉 서한 생성기를 추가하세요. 텍스트를 입력하면 템플릿이 생성되고, 체험판 계정에서 향후 송장에 대한 자동 결제 알림을 설정하는 CTA와 결합됩니다.
  10. 10 사전 등록 없는 즉시 발송 매직 링크 gemini-3.6-flash · 인접 아이디어 · 14/20점 (8 + 6) 콘텐츠 내 생성기의 변형: 독자가 블로그 기사에서 직접 송장 세부 정보를 입력하고 지금 송장 보내기를 클릭합니다. 백그라운드에서 시스템이 원활하게 체험판 계정을 생성하고 이메일을 직접 발송하며, 비밀번호는 나중에야 설정됩니다.
  11. 11 블로그 기사에 직접 삽입된 실시간 송장 생성기 gemini-3.6-flash · 브리프 준수 · 13/20점 (6 + 7) 송장 작성에 관한 기사에 간단한 대화형 양식 도구를 직접 삽입하세요. 독자가 송장 세부 정보를 입력하면 완성된 PDF를 즉시 무료로 다운로드할 수 있습니다. 눈에 띄는 버튼은 한 번의 클릭으로 송장을 디지털로 발송하고 14일 체험판 계정에서 결제 상태를 추적하도록 제안합니다.
  12. 12 월 구독 대신 일회성 종량제 알림 gemini-3.6-flash · 규칙 파괴자 · 13/20점 (6 + 7) 이 아이디어는 월 19달러의 순수 SaaS 구독 모델이라는 암묵적 제약을 깨뜨립니다. 연체 결제 기사 독자는 5달러의 일회성 요금으로 추적 링크가 포함된 법적으로 문제없는 독촉 서한을 발송받을 수 있으며, 나중에 구독을 시작하면 요금이 전액 크레딧됩니다.
  13. 13 도구에서 열리는 템플릿 claude · 브리프 준수 · 11/20점 (6 + 5) 게시물의 송장 템플릿을 도구에서 바로 사용 가능한 송장으로 제공하세요. 파일 다운로드 대신 한 번의 클릭으로 미리 입력된 체험판 계정이 열립니다.
  14. 14 자동 이메일 시퀀스가 포함된 문제별 이탈 의도 팝업 gemini-3.6-flash · 브리프 준수 · 8/20점 (4 + 4) 연체 결제 기사에 이탈 의도 팝업을 구현하여 이메일 주소를 제공하는 대가로 연체 고객을 위한 긴급 이메일 템플릿을 제공하세요. 그런 다음 자동화된 3부 이메일 시퀀스가 자동화 워크플로가 연체 결제를 줄이는 방법을 수동적으로 설명하고 체험판 계정으로 연결합니다.

Kirat와 브레인스토밍: 이 일회성 쇼핑몰 재구축을 고객이 실제로 원하는 케어 플랜으로 어떻게 전환할 수 있을까요?

kirat_brainstorm 이(가) 평의회에 질문했습니다

평의회는 15개의 아이디어를 제시하고 각각을 익명으로 평가했습니다. 상위 세 가지:

  1. 예산 타개: 출시 겉치레보다 운영 우선 (18/20점)
  2. CSV 제품 게이트키퍼 (17/20점)
  3. 신뢰성 배당금 (17/20점)

비하인드 스토리

kirat_brainstorm Claude가 Kirat에 보내는 내용

기록일 2026-10-13 · KIRAT_BRAINSTORM · 노력도: 표준 · 15개 아이디어 · 1회 라운드 · $0.10

주제: 소규모 디지털 에이전시가 일회성 쇼핑몰 재구축을 고객이 실제로 원하는 반복 케어 리테이너로 전환하기 위한 아이디어

전송된 컨텍스트: 4인 에이전시. 고객은 독일, 오스트리아, 스위스에서 약 1,800개의 가구 제품을 판매하며 직원 3명과 사내 개발자가 없고 연매출은 약 120만 유로입니다. 기존 자체 호스팅 WooCommerce 쇼핑몰은 31개의 플러그인과 작년 두 건의 보안 사고가 있었습니다. 고객은 유지보수 부담과 긴급 상황을 줄이기를 원합니다. 현지 ERP가 제품 데이터를 CSV로 내보냅니다. 재구축 예산: 25,000유로. 필수: 락인 없음, 고객은 언제든지 모든 데이터와 접근 권한을 가지고 떠날 수 있어야 함. 필수: 에이전시의 추가 채용 없음.

평의회의 결과

  1. 1 예산 분할: 출시 전 운영 비용을 명시 gpt-5.6 · 규칙 위반 · 18/20점 (9 + 9) 이 아이디어는 25,000 EUR 재구축 예산이라는 소프트 제약을 의도적으로 깨뜨립니다. 예를 들어 의도적으로 간소화한 출시에 22,000 EUR, 구속력 있는 첫 운영 연도에 12,000 EUR를 제안하는 방식입니다. 그 대가로 초기 프로젝트에서 있으면 좋은 기능은 제외되고, 대신 임포트 강화, 복원 훈련, 모니터링, 월간 개선에 자금이 투입됩니다. 총액이 더 높은 것이 이득인 이유는, 고객이 겉보기에는 완성된 쇼핑몰을 사지만 실제 운영 비용은 출시 후에야 드러나는 상황을 다시 겪지 않기 때문입니다. 모든 접근 자격 증명, 데이터, 작업 결과물은 언제든 이전 가능한 상태로 유지됩니다.
  2. 2 CSV 제품 게이트키퍼 gpt-5.6 · 브리프 준수 · 17/20점 (9 + 8) 모든 ERP 임포트 전에 자동화 파이프라인이 CSV에서 누락된 가격, 중복, 잘못된 변형, 이미지 오류, DACH 세금 로직, 의심스러운 재고 변동을 검사합니다. 월간 리테이너는 규칙 유지보수, 임포트 모니터링, 세 명의 직원을 위한 이해하기 쉬운 오류 보고서를 포함합니다. 이로써 기술 유지보수가 직접적인 비즈니스 이익으로 바뀝니다. 잘못된 제품, 후속 문의, 이탈한 구매가 줄어듭니다.
  3. 3 신뢰성 배당금 gpt-5.6 · 브리프 준수 · 17/20점 (8 + 9) 고객은 모니터링과 유지보수에 대해 적당한 기본 요금을 지불하고, 성공적인 임포트, 검증된 복원, 응답 시간 등 합의된 신뢰성 목표가 충족된 경우에만 분기별 추가 금액이 청구됩니다. 대행사로 인해 발생한 예방 가능한 장애는 청구 가능한 긴급 시간 대신 서비스 크레딧을 발생시킵니다. 이 모델은 경제적 인센티브를 예방에 맞추고, 대행사가 문제로 이익을 얻는다는 고객의 두려움을 없애줍니다.
  4. 4 이탈 준비 완료 케어 헌장 gpt-5.6 · 브리프 준수 · 16/20점 (9 + 7) 리테이너는 의도적으로 락인 방지 제품으로 판매됩니다. 모니터링, 업데이트, 백업, 보안 점검, 월 2회의 소규모 변경을 약 1,200–1,500 EUR에 제공합니다. 모든 계정은 고객이 보유하고, 코드와 임포트 스크립트는 고객의 저장소에 있습니다. 매달 고객은 문서, 데이터 내보내기, 인수인계 패키지를 받아 언제든 계약을 해지할 수 있습니다. 이렇게 고객은 의존성이 아니라 입증 가능한 운영성에 비용을 지불합니다.
  5. 5 시즌별 릴리스 트레인 gpt-5.6 · 브리프 준수 · 16/20점 (8 + 8) 임의의 지원 티켓 대신 연 4회의 계획 가능한 커머스 릴리스가 있습니다. 예를 들어 정원 가구, 여름 끝자락, 블랙 위크, 크리스마스입니다. 각 릴리스마다 리테이너에 소규모 UX 또는 머천다이징 패키지, 회귀 테스트, 그 사이의 기술 유지보수가 포함됩니다. 이로써 고객은 눈에 보이는 지속적인 개발을 얻고, 4인 대행사는 작업을 묶어서 처리할 수 있습니다.
  6. 6 분기별 탈출 테스트 gpt-5.6 · 브리프 준수 · 16/20점 (9 + 7) 분기마다 대행사는 제품, 고객, 주문, 콘텐츠 데이터의 완전한 내보내기를 제공하고 중립적인 테스트 환경에서 문서화된 재시작을 수행합니다. 고객이 지불하는 것은 다름 아닌 정기적으로 입증되는 탈출입니다. 접근 목록, 복원 로그, 인수인계 매뉴얼은 고객의 소유입니다. 이로써 강력한 락인 없음 기준이 반대 의견에서 리테이너의 특별한 판매 포인트로 바뀝니다.
  7. 7 케어 헌장 플러스 성장 교환 gpt-5.6 · 인접 · 16/20점 (8 + 8) 이탈 준비 완료 케어 헌장의 작은 변형으로, 포함된 변경 시간은 미리 고정되지 않고 운영, 데이터 품질, 전환 개선 사이에서 매달 이동합니다. 사용하지 않은 분량은 최대 한 분기까지 이월됩니다. 위험과 수익 기회를 바탕으로 30분짜리 공동 회의에서 사용 방법을 결정합니다. 리테이너는 이탈 준비 상태를 유지하지만 보험보다는 유연한 외부 디지털 팀처럼 느껴집니다.
  8. 8 ERP 동기화 및 카탈로그 안전 리테이너 gemini-3.6-flash · 브리프 준수 · 13/20점 (7 + 6) 대행사는 로컬 ERP CSV와 온라인 쇼핑몰 간 인터페이스의 지속적인 모니터링과 유지보수를 맡습니다. 잘못된 데이터 임포트, 누락된 가구 변형, 잘못된 가격은 라이브 전에 자동으로 잡힙니다. 이로써 데이터 유지보수의 운영 부담이 고객의 3인 팀에서 완전히 사라집니다.
  9. 9 AI 기반 제품 데이터 강화 정액제 gemini-3.6-flash · 인접 · 13/20점 (6 + 7) ERP 인터페이스 아이디어의 변형입니다. 대행사는 CSV 임포트를 유지보수할 뿐만 아니라 AI 스크립트를 사용해 원시 데이터에 구조화된 속성, SEO 카피, DACH 특화 배송 시간 안내를 자동으로 강화합니다. 이로써 고객은 수동 유지보수 수고를 덜고 추가 대행사 인력 없이 가구 시장에서 가시성을 높입니다.
  10. 10 CI/CD 기반 시각적 회귀 유지보수 계약 gemini-3.6-flash · 브리프 준수 · 12/20점 (6 + 6) 위험한 라이브 업데이트 대신 대행사는 월간 플러그인 업데이트를 시각적·기능적으로 자동 검사하는 스테이징 파이프라인을 구축합니다. 고객은 월간 투명성 보고서와 보안 취약점에 대한 보장된 응답 시간을 받습니다. 이로써 이전의 긴급 상황 없이 절대적인 안정성이 보장됩니다.
  11. 11 분기별 전환 및 UX 다듬기 gemini-3.6-flash · 브리프 준수 · 11/20점 (6 + 5) 기본 유지보수 외에도 리테이너에는 결제 기능과 가구 변형 표시를 최적화하기 위한 고정 시간 할당량이 포함됩니다. 대행사는 매달 DACH 지역의 사용자 행동을 분석하고 수익성이 높은 조정을 구현합니다. 이로써 리테이너는 순수한 비용 요인에서 수익 동력으로 바뀝니다.
  12. 12 안전한 업데이트 및 즉시 롤백 보장 gemini-3.6-flash · 인접 · 11/20점 (5 + 6) CI/CD 유지보수 계약의 변형입니다. 리테이너는 장애 발생 시 15분 이내 자동 스냅샷 복원을 보장하는 제로 다운타임 SLA에 순수하게 집중합니다. 이는 최소한의 지속적인 수동 작업으로 두 차례 보안 사고 이후 고객의 두려움을 직접 해소합니다.
  13. 13 고정 예산 대신 수익 공유 성장 패키지 gemini-3.6-flash · 규칙 위반 · 9/20점 (4 + 5) 25,000 EUR의 경직된 일회성 재구축 예산이라는 소프트 가정을 깨뜨립니다. 재구축 비용은 10,000 EUR로 줄이고, 추가 수익의 일부를 공유하는 월간 리테이너와 결합합니다. 고객은 투자 위험을 낮추고 대행사는 120만 EUR 규모 쇼핑몰의 성장에 직접 참여하므로 이득입니다.
  14. 14 헤드리스 아키텍처 케어 서비스 gemini-3.6-flash · 규칙 위반 · 7/20점 (3 + 4) 표준 WooCommerce 같은 클래식 모놀리식 설정이라는 소프트 제약을 깨뜨립니다. 프런트엔드가 백엔드에서 분리되어 플러그인 보안 취약점이 웹사이트를 직접 공격할 수 없습니다. 긴급 상황이 구조적으로 제거되고 오픈소스 스택과 전체 Git 접근 덕분에 고객은 언제든 이전 가능한 상태로 남으므로 이득입니다.
  15. 15 월간 한 페이지 케어 보고서 claude · 브리프 준수 · 6/20점 (4 + 2) 가동 시간, 페이지 속도, 적용된 업데이트, 예방된 장애를 담은 월간 한 페이지 보고서로, 고객이 리테이너 비용의 가치를 확인할 수 있습니다.

새 주문 페이지가 다음 달에 오픈합니다. 유료 광고 없이 케이크 사전 주문을 더 많이 받으려면 어떻게 해야 할지 Kirat과 함께 브레인스토밍해 보세요.

kirat_brainstorm 님이 위원회에 질문했습니다

위원회는 15개의 아이디어를 내고 각각을 익명으로 평가했습니다. 상위 세 가지:

  1. 연간 생일 자동 파일럿 (18/20점)
  2. 일반 게시물 대신 실제 케이크 슬롯 (17/20점)
  3. 케이크가 자체 광고 매체로 이동 (16/20점)

비하인드 스토리

kirat_brainstorm Claude가 Kirat에 보내는 내용

기록일 2026-10-13 · KIRAT_BRAINSTORM · 노력: 표준 · 15개 아이디어 · 1라운드 · $0.09

주제: 지역 베이커리가 유료 광고 없이 새 온라인 주문 페이지를 통해 맞춤 케이크 사전 주문을 더 많이 받기 위한 아이디어

전달된 컨텍스트: 독일 인구 4만 명 도시의 직원 6명 베이커리. 맞춤 케이크와 사전 주문의 마진이 가장 좋습니다. 새 온라인 주문 페이지(케이크 선택, 픽업 날짜, 선결제)가 다음 달에 오픈하며, 지금까지 주문은 전화와 이메일로만 받았습니다. Google 비즈니스 프로필은 리뷰 120개에 별점 4.7입니다. 사장님은 시간이 거의 없어 아이디어는 주당 최대 2시간으로 운영되어야 합니다. 하드: 이번 분기 유료 광고 금지. 하드: 추가 인력 금지.

위원회의 결과1. 1 연례 생일 자동 파일럿 gpt-5.6 · 브리프 준수 · 18/20점 (9 + 9) 결제 시 고객은 다음 해 알림을 위해 기념일과 월을 자발적으로 남길 수 있습니다. 21일 전에 자동 이메일이 발송되어 미리 채워진 주문 페이지로 연결됩니다. 이렇게 하면 모든 주문이 지속적인 고객 확보 없이, 그리고 명확한 동의 아래 미래의 주문을 만들어냅니다. 2. 2 일반적인 게시물 대신 실제 케이크 슬롯 gpt-5.6 · 브리프 준수 · 17/20점 (9 + 8) 주문 페이지에는 향후 4주간의 실제 남은 생산 슬롯이 표시됩니다. 예를 들어 "토요일 맞춤 케이크 2개 아직 주문 가능"과 같습니다. 주간 Google 비즈니스 게시물이 이 화면으로 직접 연결되며, 업데이트와 게시를 함께 해도 최대 20분이 걸리고 할인 없이도 신뢰할 수 있는 긴박감을 만들어냅니다. 3. 3 케이크가 그 자체로 광고 매체가 되어 이동합니다 gpt-5.6 · 브리프 준수 · 16/20점 (8 + 8) 픽업된 모든 케이크에는 "이 케이크를 재주문하거나 맞춤 제작하세요"라는 작은 카드와 해당 변형으로 연결되는 QR 코드가 함께 제공됩니다. 케이크를 자를 때 카드가 눈에 띄게 전시되어, 정확히 그 자리에 있는 생일이나 결혼식 하객들이 주문 방법을 발견하게 됩니다. 한 번 만든 카드 세트는 주간 노력을 거의 발생시키지 않습니다. 4. 4 출시 시 일회성 케이크 상담 시간 gpt-5.6 · 규칙 파괴자 · 16/20점 (8 + 8) 출시 후 첫 토요일에 4시간 동안 열린 케이크 상담 시간이 있습니다. 방문객은 샘플 카드에서 맛과 스타일을 고른 뒤 배치된 QR 코드를 통해 직접 주문합니다. 이는 해당 주에 최대 2시간 노력이라는 소프트 제약을 의도적으로 깨뜨립니다. 추가 노력은 실제 주문, 관찰된 사용성 문제, 재사용 가능한 사진과 고객 질문이 동시에 생산되기 때문에 보상을 받습니다 — 추가 인력이나 유료 광고 없이 말입니다. 5. 5 인플루언서 대신 기념일 파트너 gpt-5.6 · 브리프 준수 · 15/20점 (8 + 7) 어린이 놀이 공간, 사진작가, 꽃집, 결혼식 장소, 클럽하우스가 각각 해당 기념일에 맞게 미리 구성된 케이크 선택으로 연결되는 작은 QR 스탠드를 받습니다. 그 대가로 베이커리는 지역 추천 페이지에 이 파트너들을 명시합니다. 월 5건의 표적 요청이면 충분하며 수수료와 유료 도달은 사라집니다. 6. 6 사무실과 클럽을 위한 케이크 로타 gpt-5.6 · 브리프 준수 · 15/20점 (8 + 7) 지역 사무실, 의원, 클럽은 여러 생일이나 반복되는 날짜를 모아 순차적으로 선불 결제할 수 있는 페이지를 받습니다. 분기별 로타는 한 번 설정되면 개별 기념일을 계획 가능한 시리즈 주문으로 바꿉니다. 아웃리치는 주당 두 조직으로 제한할 수 있습니다. 7. 7 카운터 태블릿에서의 하이브리드 케이크 상담 gemini-3.6-flash · 규칙 파괴자 · 14/20점 (7 + 7) 금요일에 1시간 매장 내 상담을 제공하여 '온라인 주문만'이라는 소프트 제약을 의도적으로 깨뜨리며, 그 동안 태블릿에서 함께 주문을 입력합니다. 결정을 못 내린 고객과 고령 고객이 점차 새로운 온라인 시스템에 익숙해지기 때문에 보상을 받습니다. 8. 8 리뷰가 결정 지원 도구가 됩니다 gpt-5.6 · 이웃 · 13/20점 (7 + 6) 가장 강력한 기존 자료의 작은 재조합으로, 120개의 Google 리뷰에서 의미 있는 문장 12개를 일치하는 케이크 스타일과 짝지어 각각 직접 주문 링크를 붙입니다. 이렇게 하면 4.7점이 단순한 신뢰 신호로만 표시되지 않고 제품 선택에 도움이 됩니다. 일회성 설정 후 페이지는 대부분 유지보수가 필요 없습니다. 9. 9 매장 딥링크가 있는 샘플 케이크 전시 gemini-3.6-flash · 이웃 · 13/20점 (6 + 7) 판매장의 가장 아름다운 케이크 사진 갤러리에는 각 사진마다 특정 QR 코드가 포함되어 있어 온라인 샵에서 정확히 이 케이크 모델이 미리 선택된 상태로 열립니다. 아이디어 1의 변형: 매장 전시를 샵의 직접 딥링크와 연결합니다. 10. 10 Google 프로필 최적화 및 자동 리뷰 링크 gemini-3.6-flash · 브리프 준수 · 12/20점 (6 + 6) 강력한 Google 프로필(4.7점)에 공식 '온라인 주문' 버튼을 추가하고 매주 현재 케이크 사진으로 업데이트합니다. 픽업 시 고객은 리뷰 및 재주문 페이지 링크가 포함된 템플릿을 이메일로 받습니다. 주당 30분 미만이 소요됩니다. 11. 11 영수증 및 빵 봉투의 QR 코드 티저 gemini-3.6-flash · 브리프 준수 · 11/20점 (6 + 5) 눈에 띄는 QR 코드가 모든 영수증과 포장재에 인쇄되어 온라인 케이크 구성기로 직접 연결됩니다('당신의 축하를 위한 꿈의 케이크를 온라인으로 계획하세요'). 이는 카운터에서 추가 노력 없이 매일 방문하는 고객을 디지털 사전 주문자로 전환합니다. 12. 12 지역 이벤트 장소와의 B2B 파트너십 gemini-3.6-flash · 브리프 준수 · 11/20점 (6 + 5) 웹사이트 직접 예약 코드가 있는 스탠드와 전단지가 지역 레스토랑, 이벤트 헛간, 웨딩 플래너에 배치됩니다. 축하하는 고객은 케이크를 온라인으로 직접 예약하고, 장소는 그 대가로 소액의 경비 수당이나 추천을 받습니다. 13. 13 어린이집 및 학교 생일 달력 gemini-3.6-flash · 이웃 · 10/20점 (4 + 6) 학부모회를 위한 정보 전단지를 통해 지역 유치원과 협력하며, 전단지에는 어린이 테마 케이크용 고정 할인 코드가 포함됩니다. 아이디어 3의 변형: 일반 B2B 파트너 대신 어린이 생일이라는 고빈도 기념일을 자동화된 방식으로 특별히 겨냥합니다. 14. 14 장식 케이크를 위한 월간 미니 워크숍 gemini-3.6-flash · 규칙 파괴자 · 10/20점 (4 + 6) 월 1회 4시간 워크숍이 열리므로 '주당 최대 2시간'이라는 소프트 제약을 의도적으로 깨뜨립니다. 참가자들이 브랜드 홍보대사 역할을 하고, 열정적인 소셜 미디어 콘텐츠를 만들며, 온라인 샵을 통해 후속 주문을 반드시 하기 때문에 보상을 받습니다. 15. 15 모든 케이크 상자의 주문 링크 claude · 브리프 준수 · 8/20점 (4 + 4) 케이크 상자와 영수증에 주문 페이지로 연결되는 QR 코드를 인쇄하여, 이미 케이크를 구매한 모든 고객이 전화 없이 다음 생일을 위해 재주문할 수 있게 합니다.

Claude에게 보내는 Kirat의 메모: 최고의 규칙_파괴자 아이디어는 4위에만 있습니다: "출시 시 일회성 케이크 상담 시간" — 소프트 제약을 의도적으로 깨뜨립니다. 버리기 전에 한 번 강하게 옹호해 보세요.

청구 사고를 2분기 내에 줄이면서 청구를 모놀리스에서 분리하지 않는 방법을 Kirat과 브레인스토밍해 봅시다.

kirat_brainstorm 평의회에 질문했습니다

평의회는 15개의 아이디어를 내고 각각을 익명으로 평가했습니다. 상위 세 가지:

  1. 청구 테이블을 둘러싼 데이터베이스 방화벽 (17/20점)
  2. 실행 가능한 재무 불변식 (17/20점)
  3. 릴리스 관문으로서의 사고 재현 (17/20점)

비하인드 스토리

kirat_brainstorm Claude가 Kirat에게 보내는 내용

기록됨 2026-10-13 · KIRAT_BRAINSTORM · 노력: 표준 · 15개 아이디어 · 1라운드 · $0.06

주제: 청구 모듈을 별도 서비스로 추출하지 않고 2분기 내에 청구 모듈로 인한 프로덕션 사고를 줄이는 아이디어

보낸 컨텍스트: 엔지니어 8명 팀. TypeScript 모놀리스 하나, 약 60,000줄, Postgres 데이터베이스 하나, 하루 여러 번 배포. 청구 모듈은 매주 변경되며 최근 8건의 프로덕션 사고 중 5건을 일으켰고, 대부분 다른 모듈이 청구 테이블을 직접 읽고 쓰기 때문입니다. 팀 중 프로덕션에서 분산 시스템을 운영해 본 사람은 없습니다. 경영진은 2분기 내에 사고를 줄이기를 원합니다. 하드: 청구 모듈 재작성 금지. 하드: 청구 기능 작업은 매주 계속됩니다.

평의회 결과

  1. 1 청구 테이블을 둘러싼 데이터베이스 방화벽 gpt-5.6 · 브리프 준수 · 17/20점 (9 + 8) 모놀리스의 청구 및 비청구 코드 경로에 대해 별도의 Postgres 역할을 만들고, 일반 애플리케이션 역할에서 청구 테이블에 대한 직접 쓰기 권한을 회수합니다. 모든 변경은 검토된 소수의 저장 프로시저 또는 트랜잭션 함수를 통해서만 수행하도록 하고, 먼저 임시 감사 로깅을 추가하여 주간 기능 작업을 중단하지 않고 호출자를 발견하고 마이그레이션합니다.
  2. 2 실행 가능한 재무 불변식 gpt-5.6 · 브리프 준수 · 17/20점 (9 + 8) 확정된 인보이스의 불변성, 균형 잡힌 원장 항목, 멱등적인 청구 생성, 유효한 상태 전이 등 소수의 불변식을 안전한 경우 데이터베이스 제약 조건으로, 그렇지 않은 경우 예약된 프로덕션 프로브로 인코딩합니다. 동일한 프로브를 CI에서 익명화된 프로덕션 형태의 픽스처에 대해 실행하여, 광범위한 테스트 확장 대신 사고 지식을 영구적인 트립와이어로 전환합니다.
  3. 3 릴리스 관문으로서의 사고 재현 gpt-5.6 · 브리프 준수 · 17/20점 (9 + 8) 다섯 건의 청구 사고를 캡처된 쿼리 형태와 정제된 행을 사용하여 결정론적 재현 시나리오로 전환하고, 모든 청구 변경이 이를 통과하도록 요구합니다. 해당 시나리오 주변에서 재시도, 중복 이벤트, 트랜잭션 순서, 부분 실패를 순열로 조합하는 생성형 테스트를 추가하여, 모놀리스 전체를 망라하려 하지 않고 실패 인접 영역을 겨냥합니다.
  4. 4 청구 경계의 섀도 시행 gpt-5.6 · 인접 · 16/20점 (9 + 7) 데이터베이스 방화벽의 저위험 변형으로, 처음에는 현재 권한을 유지하되 청구 테이블에 접근하는 모든 쿼리를 모듈, 호출 지점, 트랜잭션 ID와 함께 기록합니다. 4주 후 예상치 못한 쓰기를 CI 실패로 전환하고, 이후 모듈별로 프로덕션 오류로 전환합니다. 이는 즉각적인 권한 전환 대신 단계적 시행을 대체합니다.
  5. 5 청구 영향 범위 스위치보드 gpt-5.6 · 브리프 준수 · 16/20점 (9 + 7) 모듈 전체가 아닌 위험한 청구 동작을 서버 측 킬 스위치와 비율 롤아웃 뒤에 두고, 인보이스, 결제, 조정 이상 징후에 연동된 대시보드를 제공합니다. 각 주간 기능은 테스트된 오프 경로와 함께 배포되어, 대응자가 관련 없는 모놀리스 배포를 되돌리거나 스키마 마이그레이션을 취소하지 않고도 새 동작을 비활성화할 수 있습니다.
  6. 6 Postgres 스키마 캡슐화 및 행 수준 보안 gemini-3.6-flash · 브리프 준수 · 15/20점 (7 + 8) 청구 테이블을 전용 Postgres 스키마(billing.*)로 격리하고 다른 DB 역할의 직접 쓰기 및 읽기 권한을 회수합니다. 모듈은 정의된 SQL 뷰 또는 저장된 인터페이스를 통해서만 접근합니다. 이는 사고의 주요 원인을 데이터베이스 수준에서 직접 제거합니다.
  7. 7 청구 릴리스에 대한 계약 테스트 및 섀도 파이프라인 gemini-3.6-flash · 브리프 준수 · 15/20점 (8 + 7) CI 파이프라인에서 모든 청구 인터페이스에 대한 자동화된 소비자 주도 계약 테스트를 수립합니다. 또한 중요한 계산에 대한 청구 변경은 부작용 없이 자동 차이 검사와 함께 프로덕션에서 섀도 모드로 실행됩니다.
  8. 8 안전 장치로서의 두 번째 데이터베이스 gpt-5.6 · 규칙 위반 · 14/20점 (7 + 7) 논리적 복제를 통해 공급되는 읽기 전용 섀도 데이터베이스를 추가하여 "하나의 Postgres 데이터베이스"라는 소프트 가정을 의도적으로 깨되, 청구는 모놀리스 내부에 유지하고 기본 데이터베이스를 유일한 쓰기 주체로 유지합니다. 새로운 청구 읽기 및 조정 검사를 두 데이터베이스에 대해 실행하고, 노출 전에 결과를 비교하며, 섀도를 포렌식 쿼리에 사용하여 사고 진단이 프로덕션에 과부하를 주거나 실수로 변경을 가하지 않도록 합니다.
  9. 9 엄격한 모듈 경계 린팅 및 공개 API 파사드 gemini-3.6-flash · 브리프 준수 · 14/20점 (7 + 7) dependency-cruiser를 통한 아키텍처 린팅을 도입하여 빌드 단계에서 다른 모듈이 청구 내부를 직접 가져오는 것을 금지합니다. 통신은 단일한 타입 안전 BillingFacade 인터페이스를 통해서만 이루어지도록 하여, 서서히 진행되는 결합을 즉시 차단합니다.
  10. 10 청구 변경 패스포트 gpt-5.6 · 브리프 준수 · 13/20점 (7 + 6) 모든 청구 관련 풀 리퀘스트가 기계적으로 검사되는 패스포트를 갖도록 요구합니다: 영향받는 테이블, 불변식, 마이그레이션 호환성, 롤백 경로, 배포 후 상태를 입증하는 하나의 프로덕션 쿼리. CODEOWNERS 게이트와 15분 순환 청구 스튜어드 리뷰를 통해 프로세스를 주간 변경에 충분히 가볍게 유지하면서도 교차 모듈 영향에 검토를 집중합니다.
  11. 11 외부 모듈을 위한 자동 생성 읽기 전용 Postgres 뷰 gemini-3.6-flash · 인접 · 13/20점 (7 + 6) 스키마 캡슐화의 변형으로, 비용이 큰 API 리팩터링 대신 외부 쿼리를 위한 읽기 전용 Postgres 뷰가 자동으로 제공됩니다. 외부 모듈은 이 안정적인 뷰만 읽고, 직접 테이블 접근은 DB 권한을 통해 차단됩니다.
  12. 12 읽기 모델을 위한 비동기 인프로세스 이벤트 버스 gemini-3.6-flash · 브리프 준수 · 12/20점 (4 + 8) 다른 모듈이 청구 테이블을 직접 쿼리하는 대신, 청구 모듈이 상태 변경 시 인메모리 이벤트를 전송합니다. 수신 모듈은 자체 로컬 프로젝션을 구축합니다. 이는 분산 시스템을 도입하지 않고 청구 테이블에 대한 읽기 접근을 완전히 분리합니다.
  13. 13 청구 캡슐화를 위한 2주 기능 동결 gemini-3.6-flash · 규칙 위반 · 11/20점 (5 + 6) 정확히 2주 동안 지속적인 주간 기능 산출이라는 소프트 제약을 깨뜨립니다. 전체 팀이 DB 결합 분리에 집중합니다. 이 일회성 노력은 남은 5개월 동안 사고 건수를 지속적으로 줄이기 위한 기반을 마련합니다.
  14. 14 모듈별 데이터베이스 역할 claude · 브리프 준수 · 11/20점 (6 + 5) 청구에 자체 Postgres 스키마와 역할을 부여하고 다른 모듈의 청구 테이블 쓰기 권한을 회수하여, 직접 쓰기가 프로덕션에 도달하기 전에 스테이징에서 실패하도록 합니다.
  15. 15 두 번째 Postgres 인스턴스로의 물리적 DB 분할 gemini-3.6-flash · 규칙 위반 · 9/20점 (3 + 6) 단일 데이터베이스 아키텍처라는 소프트 제약을 깨지만 모놀리식 코드는 유지합니다. 청구 데이터가 자체 데이터베이스 인스턴스로 이동하여 교차 SQL 조인이 기술적으로 불가능해집니다. 코드가 모놀리식으로 유지되므로 운영 복잡성은 최소한으로 유지됩니다.

Kirat이 Claude에게 남긴 메모: 최고의 규칙 위반 아이디어는 8위에만 있습니다: "안전 장치로서의 두 번째 데이터베이스" — 이는 소프트 제약을 의도적으로 깨뜨립니다. 폐기하기 전에 한 번 강하게 옹호해 보세요.

약 3,000건의 레코드에 대한 스크리닝 시간을 검토의 엄격함을 약화시키지 않으면서 어떻게 줄일 수 있을지 Kirat과 브레인스토밍하세요.

kirat_brainstorm 이(가) 평의회에 질문했습니다

평의회는 14개의 아이디어를 제시하고 각각을 익명으로 평가했습니다. 상위 세 가지:

  1. 2인 배제 게이트 (18/20점)
  2. 엣지 케이스 원장을 활용한 캘리브레이션 스프린트 (16/20점)
  3. 축소판 데이터 추출이 아닌 빠른 이진 콘솔 (15/20점)

비하인드 스토리

kirat_brainstorm Claude가 Kirat에게 보내는 내용

기록 2026-10-13 · KIRAT_BRAINSTORM · 노력: 표준 · 14개 아이디어 · 1라운드 · $0.18

주제: 체계적 문헌고찰의 엄격함을 약화시키지 않으면서 약 3,000건의 레코드에 대한 제목 및 초록 스크리닝의 직원 시간을 줄이는 아이디어

전달된 컨텍스트: 출판을 계획 중인 보건 서비스 연구 분야의 체계적 문헌고찰. 현재 프로토콜: 두 명의 독립적인 인간 스크리너, 충돌은 논의로 해결. 직원 시간이 부족함. 저널 심사위원은 스크리닝이 어떻게 수행되었는지 질문할 것임. 관련 연구를 놓치는 것(거짓 배제)이 관련 없는 연구를 포함하는 것보다 나쁨. 필수: 방법은 PRISMA 2020에 따라 보고 가능해야 함. 필수: 거짓 배제 비율이 증가해서는 안 됨.

평의회의 결과

  1. 1 두 사람 배제 게이트 gpt-5.6 · 규칙 위반 · 18/20점 (10 + 8) 검토자 A가 모든 레코드를 선별하되, A의 포함 및 불확실 판정은 곧바로 다음 단계로 넘기고, 검토자 B는 A가 제안한 배제만 독립적으로 평가하게 하라. 두 사람이 독립적으로 배제한 경우에만 레코드를 배제하고, 모든 불일치는 자동으로 진행시켜 대부분의 갈등 논의를 없앤다. 이는 두 사람이 모든 레코드를 평가해야 한다는 현재 프로토콜의 소프트 가정을 의도적으로 깨는 것으로, 선별 시간을 절약하면서 구조적으로 더 많은 거짓 포함은 허용하되 추가적인 거짓 배제는 허용하지 않으며, PRISMA 선택 과정 섹션에 설명하기도 간단하기 때문에 가치가 있다.
  2. 2 엣지 케이스 원장을 곁들인 캘리브레이션 스프린트 gpt-5.6 · 브리프 준수 · 16/20점 (9 + 7) 계층화된 첫 배치를 독립적으로 이중 선별하고, 충돌을 해결하며, 반복되는 모호함을 긍정 및 부정 예시와 함께 짧은 운영 규칙으로 전환하라. 계속하기 전에 규칙을 확정하고, 적격성 기준이 변경되지 않은 경우에만 파일럿 결정을 유지하며, 그렇지 않으면 다시 선별하라. 이는 이중 독립 선별을 유지하면서 이후의 숙의 및 충돌 해결 시간을 줄이며, 캘리브레이션은 PRISMA에 따라 보고할 수 있다.
  3. 3 축소판 데이터 추출이 아닌 빠른 이진 콘솔 gpt-5.6 · 브리프 준수 · 15/20점 (8 + 7) 두 검토자에게 블라인드 처리된 키보드 기반 인터페이스를 제공하되 포함, 배제, 불확실로만 제한하고 전체 제목과 초록은 항상 보이게 하라. 상세 코딩과 배제 사유는 전문 검토로 미뤄라. PRISMA 2020은 제목 및 초록 단계에서 레코드 수준의 사유를 요구하지 않는다. 결정 과정은 그대로 유지되지만 불필요한 읽기, 클릭, 문서화 시간이 줄어든다.
  4. 4 포함 전용 기계 릴리스 밸브 gpt-5.6 · 인접 · 15/20점 (9 + 6) 두 사람 배제 게이트의 1단계 변형으로, A가 제안한 배제를 검증된 분류기에 통과시키되 분류기는 레코드를 포함으로 릴리스할 수만 있고 배제할 수는 없게 하라. 검토자 B는 분류기가 릴리스하지 않은 모든 것을 독립적으로 선별한다. 최종 배제는 여전히 두 사람의 일치된 결정을 요구하므로, 기계 오류는 전문을 추가할 수는 있어도 거짓 배제를 만들 수는 없다. 모델, 버전, 입력, 임계값, 검증 및 엄격히 포함 전용인 역할을 PRISMA에 따라 보고하라.
  5. 5 비대칭 배제 선별 gemini-3.6-flash · 브리프 준수 · 15/20점 (7 + 8) 첫 번째 검토자가 3,000개 레코드를 모두 완전히 분류한다. 두 번째 검토자는 거짓 음성을 잡아내기 위해 첫 번째 검토자가 배제한 레코드만 확인한다(포함은 그대로 수용). 이는 두 번째 검토자의 노력을 거의 절반으로 줄이고, 거짓 배제 위험을 극히 낮게 유지하며, 모든 PRISMA 요구 사항을 충족한다.
  6. 6 고수율 계층에 대한 선별 우회 gpt-5.6 · 규칙 위반 · 13/20점 (8 + 5) 고수율 하위 집합(예: 매우 특정한 검색 블록의 레코드, 알려진 적격 연구의 직계 후속 연구, 또는 밀접하게 연관된 리뷰에 이미 포함된 레코드)을 사전에 선언하고, 이들 모두를 제목 및 초록 결정 없이 전문 검색으로 직접 보내라. 이는 해당 레코드에 대해 두 명의 선별자 프로토콜이라는 소프트 가정을 의도적으로 깨지만, 하위 집합의 어떤 것도 배제되지 않으므로 거짓 배제를 늘릴 수는 없다. 대가는 추가적인 전문 작업이다. 우회 규칙과 그에 따른 수치를 PRISMA 흐름도와 선택 방법에 명시적으로 보고하라.
  7. 7 능동 학습을 통한 우선순위 선별 gemini-3.6-flash · 브리프 준수 · 13/20점 (5 + 8) 두 명의 인간 선별자가 관련 제목/초록을 상위로 정렬하는 능동 학습 도구(예: ASReview)를 사용한다. 통계적으로 검증된 중단 기준(예: 연속 500개의 무관한 적중)에 도달하는 즉시 선별을 종료한다. 이 절차는 최대 70%의 시간을 절약하고, PRISMA 2020 준수 방식으로 문서화할 수 있으며, 알고리즘 캘리브레이션을 통해 최소한의 거짓 배제율을 유지한다.
  8. 8 선별 전 정확 일치 전용 중복 제거 gpt-5.6 · 브리프 준수 · 12/20점 (8 + 4) DOI, 데이터베이스 수탁 번호 또는 정확히 정규화된 서지 매칭을 통해 동일함이 입증된 레코드만 제거하고, 메타데이터가 가장 풍부한 사본을 유지하며 불확실한 유사 중복은 표시만 하라. 그런 다음 두 검토자가 남은 모든 고유 레코드를 독립적으로 선별하며, PRISMA는 선별 전에 제거된 중복을 보고한다. 이는 고유 연구를 배제할 수 있는 경로를 만들지 않으면서 분량을 줄인다.
  9. 9 AI 안전망을 갖춘 인간-AI 캐스케이드 gemini-3.6-flash · 인접 · 12/20점 (5 + 7) 비대칭 배제 선별의 변형: 한 명의 인간 선별자가 모든 레코드를 단독으로 처리하고, 최대 민감도로 조정된 AI 모델이 인간의 배제만 확인한다. 두 번째 인간은 불일치가 있는 경우에만 확인한다. 이는 완전한 커버리지를 유지하면서 인간 역량을 50% 이상 줄인다.
  10. 10 완전 자동화된 AI 두 번째 검토자 gemini-3.6-flash · 규칙 위반 · 11/20점 (3 + 8) 두 명의 인간이 반드시 선별을 수행해야 한다는 소프트 제약을 깬다. 대규모 언어 모델(LLM)이 거짓 음성 제로 프롬프트를 통해 독립적인 두 번째 검토자 역할을 맡는다. 인간의 작업 시간이 절반으로 줄고, LLM이 초록 선별에서 높은 재현율을 달성하는 것으로 입증되었기 때문에 가치가 있다. PRISMA 2020은 AI 도구의 보고를 명시적으로 허용한다.
  11. 11 신뢰도 분류를 곁들인 위험 적응형 단일 선별 gemini-3.6-flash · 규칙 위반 · 11/20점 (5 + 6) 전체 데이터셋에 대한 지속적 이중 선별이라는 소프트 제약을 깬다. 첫 번째 검토자가 높은 주관적 신뢰도를 밝히고 명확한 배제 사유가 존재하면 두 번째 검토자를 생략하고, 불확실한 사례만 이중 선별로 넘긴다. 이는 최대 60%의 인력 시간을 절약하며, 자원이 회색 지대에 집중되므로 연구 누락 위험은 최소로 유지된다.
  12. 12 먼저 캘리브레이션 라운드 claude · 브리프 준수 · 11/20점 (6 + 5) 두 선별자가 동일한 100개 레코드를 선별하고, 모든 충돌을 논의하며 본 라운드 전에 적격성 기준을 다듬어 이후의 충돌과 재읽기를 줄인다.
  13. 13 AI 분류를 곁들인 이진화된 신속 선별 gemini-3.6-flash · 인접 · 10/20점 (4 + 6) 능동 학습 우선순위의 변형: 팀은 빠른 평가를 위한 단순화된 인터페이스를 사용한다('포함/불확실' 대 '배제'만 클릭). AI 모델이 백그라운드에서 불확실성을 평가하고 경계선 후보만 심층 이중 확인으로 넘긴다. 초록당 인지 부하와 읽기 시간을 대폭 최소화한다.
  14. 14 매칭 알고리즘을 통한 결정론적 사전 필터링 gemini-3.6-flash · 브리프 준수 · 6/20점 (3 + 3) 보수적인 검색 필터와 스크립트가 명백히 부적합한 적중(예: 잘못된 연구 설계 또는 비인간 모집단)을 사전에 걸러낸다. 두 선별자는 이러한 자동 배제를 대표 표본(예: 10%)을 통해서만 확인한다. 이는 민감도 손실 없이 PRISMA 준수 방식으로 수동 선별할 총 분량을 줄인다.

모든 아이디어, 완전하고 순위 순서대로. Claude의 자체 아이디어는 익명으로 동등한 조건에서 참여한다. 주제와 맥락은 영어로 전송되었으며, 멤버들이 독일어로 작성한 아이디어는 여기서 번역되었다.

서로 다른 분야의 다섯 개 헤드라인과 제목. 각 멤버가 하나의 변형을 작성하고, Claude의 초안이 참여하며, 두 멤버가 세 가지 모두를 익명으로 평가한다. 하나를 골라라.

Kirat이 내 가격 페이지용 헤드라인 변형을 작성하게 하라. 최대 8단어, 최상급 금지.

kirat_create 의회에 질문했다

우승 변형(17/20점): "Get paid without Word—free for 14 days"

내 초안은 #2위였으며, 멤버들은 세 가지 모두를 익명으로 평가했다.

비하인드 스토리

kirat_create Claude가 Kirat에 보내는 것

기록 2026-10-13 · KIRAT_CREATE · 모드: 변형 · 노력: 표준 · $0.03

브리프: 프리랜서용 소규모 인보이싱 도구의 가격 페이지 헤드라인(월 USD 19, 14일 무료 체험). 대상: 현재 Word나 Excel로 인보이스를 작성하는 프리랜서. 목표: 체험이 위험 부담 없고 가치 있게 느껴지게 하기. 형식: 헤드라인 하나, 영어로.

기준: 최대 8단어 · 구체적, 최상급 금지 · 절약된 시간 또는 대금 수령 언급 · 느낌표 금지

의회의 결과

  1. 1 "Get paid without Word—free for 14 days" gpt-5.6 · 17/20점 (9 + 8) Word 사용자에게 직접 말을 걸고, 대금 수령을 전면에 내세우며, 위험 부담 없는 체험을 구체적으로 만든다.
  2. 2 "Send invoices in minutes. Get paid on time." claude · 17/20점 (8 + 9) 오케스트레이터의 자체 초안.
  3. 3 "Replace Word and Excel. Get paid days faster." gemini-3.6-flash · 14/20점 (7 + 7) 현재의 수동 워크플로를 직접 겨냥하여 즉각적인 대비를 제시하고, 체험을 일반적인 과장 없이 현금 흐름으로의 빠르고 위험 부담 없는 업그레이드로 프레이밍한다.

Kirat이 WooCommerce를 사용하는 가구점을 위한 우리 랜딩 페이지용 헤드라인 변형을 작성하게 하라. 최대 10단어, 전문 용어 금지.

kirat_create 의회에 질문했다

우승 변형(18/20점): "Losing furniture buyers to a slow, frustrating WooCommerce store?"

내 초안은 #3위였으며, 멤버들은 세 가지 모두를 익명으로 평가했다.

비하인드 스토리

kirat_create Claude가 Kirat에 보내는 것

기록 2026-10-13 · KIRAT_CREATE · 모드: 변형 · 노력: 표준 · $0.02

브리프: WooCommerce를 운영하는 가구 소매업체를 위한 쇼핑몰 재구축에 관한 소규모 디지털 에이전시의 랜딩 페이지 헤드라인. 대상: 사내 개발자가 없는 중규모 가구점 소유자. 목표: 무료 쇼핑몰 점검 예약. 형식: 헤드라인 하나, 독일 시장이지만 영어로 작성.

기준: 최대 10단어 · 에이전시가 아닌 독자의 고통을 명명 · "headless"나 "omnichannel" 같은 전문 용어 금지 · 최상급 금지

의회의 결과

  1. 1 "Losing furniture buyers to a slow, frustrating WooCommerce store?" gemini-3.6-flash · 18/20점 (8 + 10) 기술 전문 용어나 자기 칭송적인 에이전시 언어 없이, 소유자의 주된 불만—형편없는 쇼핑몰 성능으로 인한 판매 손실—을 직접 겨냥한다.
  2. 2 "Is your WooCommerce shop turning furniture buyers away?" gpt-5.6 · 17/20점 (9 + 8) 핵심 고통을 직접 명명하고 전문 용어 없이 가구 소매업체에게 말을 건다.
  3. 3 "Fewer shop emergencies, more time for your furniture." claude · 11/20점 (7 + 4) 오케스트레이터의 자체 초안.

Kirat이 베이커리의 새 케이크 주문 페이지용 헤드라인 변형을 작성하게 하라. 짧고, 지역적이며, 체인점 같지 않게.

kirat_create 의회에 질문했다

우승 변형(19/20점): "Your celebration cake, baked here for pickup."

내 초안은 #3위였으며, 멤버들은 세 가지 모두를 익명으로 평가했다.

비하인드 스토리

kirat_create Claude가 Kirat에 보내는 것

기록 2026-10-13 · KIRAT_CREATE · 모드: 변형 · 노력: 표준 · $0.02

브리프: 맞춤 케이크를 위한 베이커리의 새 온라인 주문 페이지 헤드라인. 대상: 지금까지 전화로 주문하던 지역 고객. 목표: 온라인 주문이 쉽고 개인적으로 느껴지게 하기. 형식: 헤드라인 하나, 독일 시장이지만 영어로 작성.

기준: 최대 8단어 · 구체적, 최상급 금지 · 픽업 또는 행사 언급 · 체인점이 아닌 지역 베이커리처럼 들리기

의회의 결과

  1. 1 "Your celebration cake, baked here for pickup." gpt-5.6 · 19/20점 (10 + 9) 따뜻하고 구체적이며 개인적: "baked here"는 지역적 느낌을 주고, "for pickup"은 온라인 과정을 간단하게 느껴지게 한다.
  2. 2 "Order your custom birthday cake, pick up fresh." gemini-3.6-flash · 16/20점 (8 + 8) 헤드라인은 픽업뿐 아니라 행사를 구체적으로 명명하며, 신선도 약속을 통해 비인격적인 상투어 없이 지역 장인 품질을 전달한다.
  3. 3 "Your cake, your date. Order in two minutes." claude · 9/20점 (5 + 4) 오케스트레이터의 자체 초안.

Kirat이 모놀리스 내부에서 먼저 청구의 경계를 강화하자는 내 제안의 제목을 찾게 하라.

kirat_create 의회에 질문했다

내 초안이 우승했다(19/20점): "Fix billing's boundaries first, split it later if needed"

비하인드 스토리 kirat_create Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_CREATE · 모드: VARIANTS · 노력: STANDARD · $0.02

브리프: 내부 엔지니어링 제안서의 제목: 별도 서비스를 고려하기 전에 모놀리스 내부에서 청구 모듈의 경계를 강화하자. 대상: 장애를 줄이고 싶어 하는 엔지니어 8명과 리더십. 목표: 제안서를 읽고 승인받는 것. 형식: 제목 하나, 영어로.

기준: 최대 10단어 · 주제가 아니라 결정을 명시 · 유행어 금지 · 비엔지니어도 이해 가능

평의회의 결과

  1. 1 "Fix billing's boundaries first, split it later if needed" claude · 19/20점 (10 + 9) 오케스트레이터 자신의 초안.
  2. 2 "Keep Billing Together, but Isolate It to Prevent Incidents" gpt-5.6 · 16/20점 (9 + 7) 이 제목은 청구를 모놀리스에 유지하면서 그 경계를 강화하겠다는 결정을 명시하고, 그 선택을 장애 감소라는 공동 목표와 연결한다.
  3. 3 "Strengthen Billing Boundaries in Current App Before Splitting Service" gemini-3.6-flash · 13/20점 (7 + 6) 이 제목은 방향에 대한 명확한 결정을 제시하고, 경영진에게 '모놀리스' 같은 불필요한 전문용어를 피하며, 안정성이라는 공동 목표를 직접 다룬다.

LLM을 추가 스크리너로 사용하는 방법 논문의 제목을 Kirat이 찾아보게 해줘. 정확하게, 과장 없이.

kirat_create 평의회에 물었다

우승한 변형(18/20점): "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews"

내 초안은 2위였다. 멤버들은 세 후보를 모두 익명으로 평가했다.

비하인드 스토리

kirat_create Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_CREATE · 모드: VARIANTS · 노력: STANDARD · $0.02

브리프: 보건 서비스 연구의 체계적 문헌고찰에서 LLM을 추가 스크리너로 사용하는 방법 논문의 제목. 대상: 연구자와 저널 심사자. 목표: 정확하고 인용 가능하게, 과장 없이. 형식: 제목 하나, 콜론 뒤에 부제 가능, 영어로.

기준: 최대 20단어 · 방법과 환경을 명시 · 데이터를 넘어서는 주장 금지 · "revolutionize" 같은 과장 표현 금지

평의회의 결과

  1. 1 "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews" gpt-5.6 · 18/20점 (9 + 9) 이 제목은 성능이나 이점을 암시하지 않으면서 스크리닝 방법, 체계적 문헌고찰 맥락, 보건 서비스 연구 환경을 밝힌다.
  2. 2 "An LLM as additional screener: a prospective comparison in a health services systematic review" claude · 16/20점 (9 + 7) 오케스트레이터 자신의 초안.
  3. 3 "Large Language Models as Auxiliary Screeners in Health Services Research Systematic Reviews: A Methodological Evaluation" gemini-3.6-flash · 15/20점 (7 + 8) 이 제목은 적용 분야와 방법론을 정확히 명시하고, 자극적인 단어를 피하며 과학 출판 맥락에 맞는 사실적이고 인용 가능한 어조를 선택한다.

헤드라인과 제목은 브리프에서 요청한 대로 영어로 작성된 그대로 표시된다. Claude 항목의 추론은 Kirat이 붙인 자체 라벨이다. 독일어로 작성된 추론은 여기서 번역되었다.

서로 다른 분야의 이미지 브리프 다섯 개. OpenAI와 Google이 각각 이미지 하나를 생성하고, 두 멤버가 두 이미지를 모두 익명으로 평가한다. 하나를 고르세요.

내 인보이싱 도구 랜딩 페이지용 히어로 이미지를 Kirat이 만들어보게 해줘: 조용한 홈오피스 책상, 읽을 수 있는 화면 없이.

kirat_image 평의회에 물었다

심사단은 gpt-image-2의 이미지(18/20점)를 선택했다. 두 멤버가 두 이미지를 모두 익명으로 평가했다.

비하인드 스토리

kirat_image Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_IMAGE · 모드: VARIANTS · 가로형 · ≈ $0.17

브리프: 프리랜서용 소형 인보이싱 도구의 랜딩 페이지 히어로 이미지: 아침의 정돈된 홈오피스 책상에 노트북(화면은 돌아가 있거나 흐릿하게, 읽을 수 있는 인터페이스 없음), 커피 한 잔, 종이 노트북. 자연광, 차분한 다큐멘터리 사진 스타일, 텍스트 없음, 로고 없음, 사람 얼굴 없음.

기준: 스톡 사진 사무실이 아니라 실제 프리랜서의 작업 공간처럼 느껴질 것 · 차분하고 어수선하지 않을 것 · 헤드라인을 위한 여유 공간을 남길 것 · 텍스트, 로고, 읽을 수 있는 화면 없음

평의회의 결과

Image by gpt-image-2: a laptop seen from behind on a wooden desk in a bright room, with a cup of coffee, a closed notebook and a pen, and shelves in the background.

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

Image by gemini-3.1-flash-image: a wooden desk by a window with an open laptop showing a blurred screen, a cup of coffee on a saucer, a notebook and a pen.

2 gemini-3.1-flash-image · 13/20점 (6 + 7)

가구점용 제품 사진을 Kirat이 만들어보게 해줘: 실제 거실에 놓인 오크 원목 식탁과 의자 네 개.

kirat_image 평의회에 물었다

심사단은 gemini-3.1-flash-image의 이미지(18/20점)를 선택했다. 두 멤버가 두 이미지를 모두 익명으로 평가했다.

비하인드 스토리

kirat_image Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_IMAGE · 모드: VARIANTS · 가로형 · ≈ $0.17

브리프: 가구 온라인 숍용 제품 사진: 밝고 실제처럼 보이는 중부 유럽식 거실에 놓인 견고한 오크 원목 식탁과 의자 네 개. 자연광, 에디토리얼 인테리어 스타일, 텍스트 없음, 로고 없음, 사람 없음.

기준: 식탁이 명확한 주제일 것 · 실제에 가까운 나무 질감과 색상 · 3D 렌더가 아니라 실제 집처럼 보일 것 · 텍스트나 로고 없음

평의회의 결과

Image by gemini-3.1-flash-image: a wooden dining table with four chairs on a rug in a bright living room with plants and a glass door to the garden.

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

Image by gpt-image-2: an oak dining table with four chairs with dark seat cushions in a bright room, with a sofa and a window in the background.

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

케이크 주문 페이지용 히어로 이미지를 Kirat이 만들어보게 해줘: 픽업 준비가 된 상자에 담긴 생일 케이크.

kirat_image 평의회에 물었다

심사단은 gpt-image-2의 이미지(17/20점)를 선택했다. 두 멤버가 두 이미지를 모두 익명으로 평가했다.

비하인드 스토리

kirat_image Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_IMAGE · 모드: VARIANTS · 가로형 · $0.17

브리프: 맞춤 케이크를 위한 작은 동네 빵집의 새 온라인 주문 페이지 히어로 이미지: 밝고 실제처럼 보이는 가족 운영 빵집의 나무 카운터 위에 놓인 완성된 생일 케이크, 간단한 판지 케이크 상자에 담겨 픽업 준비 완료. 자연광, 다큐멘터리 사진 스타일, 텍스트 없음, 로고 없음, 사람 얼굴 없음.

기준: 체인점이나 스톡 사진이 아니라 실제 동네 빵집처럼 보일 것 · 케이크가 명확한 주제일 것 · 헤드라인을 위한 여유 공간을 남길 것 · 이미지에 텍스트나 로고 없음

평의회의 결과

Image by gpt-image-2: a birthday cake with candles and piped flowers in an open cardboard box on a wooden counter in a bright bakery.

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

Image by gemini-3.1-flash-image: a small birthday cake with a “Happy Birthday” topper in an open cardboard box on a bakery counter, with chalkboard menus behind it.

2 gemini-3.1-flash-image · 7/20점 (4 + 3)

모놀리스에서 청구를 분리하는 것에 관한 블로그 글의 커버 이미지를 Kirat이 만들어보게 해줘. 추상적이고 차분하게.

kirat_image 평의회에 물었다

심사단은 gpt-image-2의 이미지(16/20점)를 선택했다. 두 멤버가 두 이미지를 모두 익명으로 평가했다.

비하인드 스토리

kirat_image Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_IMAGE · 모드: VARIANTS · 가로형 · ≈ $0.17

브리프: 모놀리스에서 청구 모듈을 분리하는 것에 관한 내부 엔지니어링 블로그 글의 커버 이미지: 서로 연결된 블록의 빽빽한 무리에서 명확히 경계 지어진 하나의 블록이 분리되어 있는 추상적이고 차분한 일러스트. 플랫 스타일, 차분한 색상, 텍스트 없음, 로고 없음.

기준: 명확한 경계라는 개념이 한눈에 읽힐 것 · 차분하고 극적이지 않을 것 · 작은 크기에서도 잘 보일 것 · 텍스트나 로고 없음

평의회의 결과

Image by gpt-image-2: a dense cluster of grey and green cubes joined by lines, and one separate green cube inside a dashed outline, linked by a dashed line.

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

Image by gemini-3.1-flash-image: a small screen-like box on the left, linked by thin lines to a dense, tangled cluster of blocks.

2 gemini-3.1-flash-image · 10/20점 (6 + 4)

AI 지원 스크리닝에 관한 내 컨퍼런스 발표의 커버 이미지를 Kirat이 만들어보게 해줘. 진지하게, 로봇 없이.

kirat_image 평의회에 물었다

심사단은 gpt-image-2의 이미지(18/20점)를 선택했다. 두 멤버가 두 이미지를 모두 익명으로 평가했다.

비하인드 스토리

kirat_image Claude가 Kirat에 보내는 것

기록일 2026-10-13 · KIRAT_IMAGE · 모드: VARIANTS · 가로형 · ≈ $0.17

브리프: 체계적 문헌고찰에서 AI 지원 스크리닝에 관한 컨퍼런스 발표의 커버 이미지: 책상 위에 가지런히 쌓인 인쇄된 연구 초록, 일부는 두 개의 트레이로 분류됨, 부드러운 자연광, 다큐멘터리 사진 스타일. 읽을 수 있는 텍스트 없음, 로고 없음, 사람 얼굴 없음.

기준: 과장 없이 진지하고 과학적일 것 · 로봇이나 빛나는 뇌 없음 · 분류라는 아이디어가 보일 것 · 읽을 수 있는 텍스트나 로고 없음

평의회의 결과

Image by gpt-image-2: a large stack of printed abstracts on a wooden desk next to two black trays of sorted papers, a pen and a notebook.

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

Image by gemini-3.1-flash-image: stacks of printed papers and labelled sorting trays on a wooden desk in an office, with a person working at a desk in the background.

2 gemini-3.1-flash-image · 9/20점 (5 + 4)

AI 생성 이미지로, 축소되었을 뿐 그 외에는 편집되지 않았다. ≈로 표시된 비용은 병렬로 실행된 런에서 나온 것으로, 각 런의 이미지 비용에 평가 호출 비용의 균등 분담을 더한 값이다. 순위는 사전 선별이며, 최종 선택은 당신에게 달려 있다. 독일어로 작성된 평가는 여기서 번역되었다.

02 — 문제

모델 하나, 사각지대 하나.

자기 검토는 자기 편을 든다

자기 작업을 검토하는 모델은 자기 답이 설득력 있다고 본다. 같은 모델의 두 번째 패스는 독립적인 검증이 아니다.

라운드를 늘리는 것은 해결책이 아니다

Kirat은 토론을 코드로, 프롬프트가 아니라 코드로 두 라운드로 제한한다. 모델이 말로 한도를 넘어설 수 없다. 그래도 다수결이 없으면 그렇다고 알려준다.

서로 다른 계열은 서로 다르게 실패한다

Kirat은 Claude, ChatGPT, Gemini를 같은 질문에 투입하고 분열을 보여준다 — 누가 반대했는지, 왜 그런지까지.

03 — 작동 방식

한 번 묻고, 세 가지 입장과 투표를 받는다.

1단계

Claude에서 묻는다

늘 그렇듯 평범한 언어로: Kirat 평의회에 물어봐: 내 쇼핑몰에 Shopify가 좋을까 WooCommerce가 좋을까? 너의 입장도 내놔. Claude가 대신 Kirat을 호출한다.

2단계

세 가지 독립적인 입장

ChatGPT와 Gemini는 서로의 답을 보지 않고 각자 답한다. Claude는 세 번째 멤버로서 자기 입장을 낸다.

3단계

투표, 반대 의견도 보존

셋 중 둘이 동의하면 그것이 다수 의견이다. 모든 입장을 그 이유와 함께, 그리고 누가 반대했는지 본다. 다수결이 없으면 Kirat이 그렇다고 말하며, 판단은 당신에게 달려 있다.

Kirat은 코드도 리뷰하고(각 발견은 다른 모델 계열이 검증), 아이디어 순위를 매기고, 카피를 비평하고, 이미지를 비교한다. 위의 리플레이가 그 전부를 보여준다.

코딩은 필요 없다. Claude 확장을 설치하고 OpenAI와 Google에서 각각 API 키 하나를 만들면 된다. 설치 단계는 아래 세부 정보에 있다.

아홉 가지 도구와 기록된 예시 호출 →

04 — 가격

Claude Desktop과 Claude Code를 위한 한 번의 구매.

구독 없음, 시트 없음, 우리 쪽 계정 없음. 구매 전에 Kirat이 어디서 실행되는지 확인하세요:

Kirat이 실행되는 곳

작동함

  • macOS와 Windows의 Claude Desktop 채팅
  • 터미널, VS Code, Claude Desktop의 Code 탭에서의 Claude Code
  • Claude Code 클라우드 세션, 클라우드 환경별 일회성 설정 후 제한 사항 있음: 네트워크 시크릿으로 저장된 키는 읽을 수 없는 상태로 유지되며(Team 및 Enterprise 플랜에서는 관리자가 추가해야 할 수 있음), 환경 변수의 키는 해당 환경을 사용하는 모든 사람이 읽을 수 있고, 일일 예산은 세션별로 계산된다.

작동하지 않음

  • 브라우저의 채팅(claude.ai) 또는 Claude 모바일 앱
  • 클라우드에서 실행되는 Cowork 작업
  • 일부 기업 환경: Windows 계정으로 로그인하는 프록시(NTLM/Kerberos), 그리고 Desktop 확장을 허용 목록으로 제한하는 조직 먼저 IT 팀에 문의하세요.

실행되는 곳 전체 · 모든 클라우드 제한

Desktop 확장 + Claude Code 플러그인

Kirat

$99

$99 출시 가격 — 첫 50명 구매자

이후 $149. 일회성 구매. 두 형식이 담긴 ZIP 다운로드 하나. OpenAI와 Gemini API 키도 필요합니다: 질문은 두 제공자 모두에게 전송되며, 사용량에 따라 각자 청구합니다.

  • 01Claude Desktop 확장과 Claude Code 플러그인, 다운로드 하나에
  • 02Claude Code 클라우드 세션용 설정 스크립트
  • 03아홉 가지 도구 전부: 투표, 코드 리뷰, 아이디어 순위, 카피 비평, 이미지 비교 등
  • 04비용 제어: 초과할 수 있는 호출을 보류하는 일일 예산(기본 $5). 최선 노력 방식이므로 제공자 쪽에서도 한도를 설정하세요
  • 05본인 기기와 클라우드 환경에서 한 사람을 위한 라이선스
  • 06가능할 때 호환성 업데이트 — 무료, 다만 보장은 없음 Claude Desktop(macOS/Windows)과 Claude Code에서 실행됩니다. Claude Code 클라우드 세션은 일회성 설정이 필요합니다 — 브라우저나 모바일 채팅에서는 실행되지 않습니다. 실행 환경 · 클라우드 제한

블루프린트

$49

문서만 포함 — 코딩 에이전트로 자체 카운슬 서버를 구축하거나 각색하려는 분을 위한 것입니다. Kirat을 사용하는 데는 필요하지 않습니다.

  • 01사양: 도구에 대한 구조화된 요구사항
  • 02아키텍처 결정과 각 결정의 근거
  • 03에이전트가 스스로 검증할 수 있는 인수 체크리스트
  • 04이 사이트의 수치 뒤에 있는 벤치마크 데이터

코드 없음, 설치 가능한 확장 없음.

일회성 구매 · Lemon Squeezy(판매 대행사)를 통한 결제, 결제 시 부가세 처리 · 환불: 약관 참조

API 사용료는 귀하의 계정으로 OpenAI와 Google에 직접 지불됩니다 — 저희 측정 기준 카운슬 결정당 $0.02–$0.15입니다.

Kirat이 맞지 않는 경우…

  • —브라우저나 휴대폰에서 채팅으로만 Claude를 사용하는 경우. Kirat은 Claude Desktop(macOS/Windows)과 Claude Code, 그리고 일회성 설정을 거친 Claude Code 클라우드 세션에서 실행됩니다 — 그 채팅에서는 실행되지 않습니다.
  • —호스팅 서비스나 어떤 형태의 지원이 필요한 경우.
  • —두 제공업체에 API 계정과 결제를 설정하고 싶지 않은 경우.
  • —한 달에 몇 번만 결정을 내리고, 별도 채팅에서 답변을 직접 비교하는 것으로 충분한 경우.
  • —확신에 찬 답변을 원하는 경우. 카운슬의 역할은 의견이 갈리는 지점을 보여주는 것이며, 때로는 그 갈림 자체가 답입니다.
  • —데이터를 OpenAI나 Google로 보낼 수 없는 경우. Kirat에 제공하는 모든 것은 귀하의 계정과 그들의 약관에 따라 두 곳 모두로 전송됩니다.

05 — 질문

구매 전에.

llm-council이나 PAL MCP와 어떻게 다른가요?

먼저 둘 다 살펴보세요. llm-council은 오픈소스 웹 앱이며, 작성자는 설계상 지원되지 않는다고 설명합니다. PAL MCP는 터미널로 설치하는 무료 오픈소스 MCP 서버로, 다양한 제공업체를 지원하며 자체 합의 도구가 있습니다. 현재 상태를 확인해 보세요. 둘 중 하나가 필요한 것을 충족한다면 그것을 사용하세요.

Kirat의 차별점은 패키지입니다: Claude Desktop 자체의 확장 대화상자를 통해 설치되고 키는 운영체제의 보안 저장소에 보관되며, 일일 상한이 있는 예산 가드, 2라운드 상한, 도메인 타이브레이크, 백그라운드 티켓, 실패 처리, 345개의 테스트, 영어 결과 필드, 그리고 평이한 언어 사용을 제공합니다.

전체 답변 →

개발자여야 하나요?

아니요. Claude 확장을 설치하고 API 키 두 개를 만들 수 있다면 Kirat을 사용할 수 있습니다. 평이한 언어로 Claude에게 요청합니다 — Ask the Kirat council: Postgres or SQLite? Give your own position too. — 그러면 Claude가 도구를 호출합니다.

무엇이 필요한가요?

macOS 또는 Windows의 Claude Desktop. 자체 Node를 포함하므로 다른 것은 설치할 필요가 없습니다. 또는 Node.js 20 이상이 있는 Claude Code. Claude Code 클라우드 세션의 경우 클라우드 환경의 일회성 설정이 필요합니다(아래 참조).

그리고 결제가 활성화된 OpenAI API 키 하나와 Google Gemini API 키 하나. Kirat은 키 하나로도 실행됩니다: 이 경우 카운슬에는 외부 멤버가 하나뿐이며, 모든 결과에 누락된 키가 명시됩니다.

실행 비용은 얼마이며, 청구서가 폭주하는 것을 무엇이 막나요?

사용한 만큼 OpenAI와 Google에 직접 지불합니다. 저희 측정 기준 카운슬 결정 하나에 $0.02–$0.15가 들며, 이는 노력 등급과 입력 크기에 따라 다르고 8초에서 3분이 걸립니다. 이미지 생성은 호출당 약 $0.05–$0.20입니다.

예산 가드는 모든 호출 전에 최악의 비용을 예약하고 일일 예산을 초과할 수 있는 호출을 차단합니다 — 기본값은 UTC 기준 하루 $5이며 조정 가능합니다. 이는 최선의 노력 방식이므로 제공업체에서도 지출 한도를 설정하세요. kirat_status은 예산과 지출을 보여주며 비용이 들지 않습니다.

전체 답변 →

제 데이터와 키는 어디로 가나요?

귀하의 데이터: Kirat에 제공하는 모든 것(질문, 컨텍스트, 코드, 이미지)은 귀하의 계정과 그들의 약관에 따라 OpenAI와 Google로 직접 전송됩니다 — 귀하의 컴퓨터에서, 또는 Claude Code 클라우드 세션에서는 해당 환경에 대한 Anthropic의 네트워크 프록시를 통해 귀하의 클라우드 환경에서 전송됩니다. Kirat 서버도, 저희와의 계정도, 텔레메트리도 없습니다. 저희는 귀하의 키나 데이터를 절대 보지 않습니다.

귀하의 키: Claude 자체의 설치 또는 설정 대화상자에 입력합니다. Claude Desktop은 이를 운영체제의 보안 저장소(macOS Keychain, Windows Credential Manager)에 저장합니다. Claude Code는 macOS Keychain에 저장하며, Windows와 Linux에서는 ~/.claude/.credentials.json에 저장되어 귀하의 사용자만 읽을 수 있습니다. 지출 한도가 있는 별도의 제공업체 프로젝트를 권장합니다.

Claude Code 클라우드 세션에서: Kirat은 귀하의 클라우드 환경에서 실행됩니다. 키를 네트워크 시크릿으로 저장합니다: Anthropic의 프록시가 나가는 길에 Kirat의 요청에 키를 추가하므로, 세션 내 누구도 키를 읽을 수 없으며 Claude조차 읽을 수 없습니다. Team 및 Enterprise 요금제에서는 역할에 따라 조직 관리자가 키를 추가해야 할 수 있습니다. 대안으로, 키는 해당 환경의 환경 변수가 될 수 있으며, 이 경우 환경을 사용하는 모든 사람이 읽을 수 있습니다.

귀하의 컴퓨터에서: Kirat은 홈 폴더에 .kirat 폴더를 유지하며, 여기에는 일일 비용 카운터, 비용 로그, 최근 20개 결과(질문과 답변이 포함됨), 위임된 결정 및 생성된 이미지의 로그가 들어 있습니다. 언제든지 삭제할 수 있습니다. 컴퓨터의 모든 Kirat 세션(Desktop과 Code)이 이를 공유합니다.

전체 답변 →

Claude Code 클라우드 세션에서 Kirat은 어떻게 작동하며, 제한은 무엇인가요?

클라우드 세션 — Code 탭 클라우드 세션, 웹 또는 모바일 앱의 Claude Code — 은 Anthropic의 서버에서 클라우드 환경으로 실행됩니다. 귀하의 컴퓨터에 있는 확장은 이에 접근할 수 없습니다. 대신 클라우드 환경을 한 번 설정합니다:

  • 다운로드에 포함된 블록(cloud/setup-script.txt)을 환경의 설정 스크립트 맨 위에 붙여넣습니다;
  • 두 개의 키를 추가합니다 — api.openai.com 및 generativelanguage.googleapis.com에 대한 네트워크 시크릿으로(Team 및 Enterprise 요금제에서는 관리자가 추가해야 할 수 있으며, 다운로드의 가이드에 세부 사항이 있습니다); 그렇지 않으면 환경 변수로, 이상적으로는 프로젝트 자체의 OPENAI_API_KEY와 충돌하지 않는 KIRAT_OPENAI_API_KEY 및 KIRAT_GEMINI_API_KEY이라는 이름으로(Kirat은 OPENAI_API_KEY 및 GEMINI_API_KEY도 허용합니다);
  • 네트워크 액세스: Full이면 변경할 것이 없습니다; 그렇지 않으면 패키지 관리자 기본 목록에 Kirat 다운로드 호스트를 더한 Custom(최신 앱에서는 Limited)으로 설정합니다(키가 환경 변수인 경우 api.openai.com도 포함).

스크립트는 정확히 귀하의 Kirat 버전을 다운로드하고, SHA-256 체크섬을 검증한 후 설치합니다. 이는 일회성 설정이며 원클릭이 아닙니다. 클라우드 컨테이너에서 테스트했습니다.

제한: 환경 변수의 키는 환경을 사용하는 모든 사람이 읽을 수 있습니다(네트워크 시크릿은 읽을 수 없게 유지합니다). 모든 클라우드 세션은 새로 시작하므로 Kirat의 일일 예산은 세션별로 계산됩니다 — OpenAI와 Google에서 지출 한도를 설정하세요; 클라우드에서는 이것이 귀하의 실질적인 상한입니다. 백그라운드 작업과 최근 결과는 세션과 함께 종료됩니다. 환경의 네트워크 액세스는 Kirat 다운로드 호스트를 허용해야 하며, 키가 환경 변수인 경우 api.openai.com도 허용해야 합니다(Gemini는 기본 목록에 포함됩니다). 설정이 실패하면 세션은 여전히 시작되지만 Kirat 없이 시작됩니다 — 그리고 설정 스크립트를 편집할 때까지 실패 상태가 새 세션에 캐시된 채로 남을 수 있습니다(어떤 변경이든 새 세션이 스크립트를 다시 실행하게 합니다).

설정 스크립트의 다운로드 주소는 ZIP과 마찬가지로 귀하의 구매에 포함됩니다; 공개하지 마세요. 라이선스는 귀하의 클라우드 환경을 포함합니다. 다른 사람과 공유하는 클라우드 환경은 각 사람마다 라이선스가 필요합니다.

전체 답변 →

어떤 모델을 사용하나요? 제공업체가 모델을 단종시키면 어떻게 되나요?

기본적으로 OpenAI의 gpt-5.6와 Google의 gemini-3.6-flash, 그리고 세 번째 투표자로 Claude를 사용합니다.

모델 이름과 가격은 설정입니다. 제공업체가 모델을 단종시키면 새 이름과 두 가지 가격을 입력하면 됩니다. 업데이트는 필요하지 않습니다.

Claude Desktop이 확장이 Anthropic에 의해 검증되지 않았다고 표시합니다. 문제인가요?

그 경고는 예상된 것입니다. Claude Desktop은 파일에서 설치된 확장에 대해 이를 표시하며, Kirat은 파일에서 설치됩니다 — Anthropic에 의해 검증되거나 서명되지 않았습니다.

업데이트는 어떻게 작동하나요?

Claude Desktop에서 첫 설치와 같은 방식으로 새 .mcpb을 설치합니다. 키와 설정은 유지됩니다.

호환성 업데이트는 가능한 경우 무료이지만 보장되지는 않습니다. 더 큰 새 버전은 별도로 판매될 수 있습니다.

지원을 받을 수 있나요?

아니요. Kirat은 지원, 설치 도움 또는 컨설팅 없이 제공됩니다. 결제와 영수증은 Lemon Squeezy가 처리합니다. 지원되는 설정에서 Kirat이 실행되지 않으면 환불받을 수 있습니다; 약관을 참조하세요.

라이선스는 무엇을 허용하나요?

한 사람이 귀하의 모든 기기와 귀하의 클라우드 환경에서 사용할 수 있습니다. 다른 사람과 공유하는 클라우드 환경은 각 사람마다 라이선스가 필요합니다. 재판매 및 재배포는 금지됩니다. Kirat은 독점 소프트웨어이며 오픈소스가 아닙니다.

카운슬이 생성한 것을 상업적 작업을 포함한 귀하의 작업에 사용하는 것은 괜찮습니다. 전체 약관은 약관에 있습니다.

블루프린트는 무엇을 위한 것인가요? 필요한가요?

Kirat을 사용하는 데는 필요하지 않습니다. 블루프린트는 코딩 에이전트로 자체 카운슬 서버를 구축하거나 각색하려는 분을 위한 것입니다.

문서만 포함합니다 — 코드 없음, 설치 가능한 확장 없음: 사양(도구에 대한 구조화된 요구사항), 각 결정의 근거가 담긴 아키텍처 결정, 에이전트가 스스로 검증할 수 있는 인수 체크리스트, 그리고 이 사이트의 수치 뒤에 있는 벤치마크 데이터. 번들 가격은 없습니다.

06 — 세부 사항

기록을 위한 세부 사항.

설치, Kirat이 실행되는 모든 환경과 클라우드 제한, 아홉 개의 도구, 그리고 수치 뒤의 근거. 필요한 것을 펼쳐 보세요.

Kirat을 설치하고 API 키를 연결하세요

Kirat은 가입하는 서비스가 아닙니다. 귀하의 컴퓨터(또는 귀하의 Claude Code 클라우드 환경)에서 Claude 내부에서 귀하의 API 키로 실행됩니다. Kirat 서버도, 저희와의 계정도 없습니다. Kirat에 제공하는 모든 것은 귀하의 계정에 따라 OpenAI와 Google로 직접 전송됩니다 — 귀하의 컴퓨터에서, 또는 Claude Code 클라우드 세션에서는 해당 환경에 대한 Anthropic의 네트워크 프록시를 통해 귀하의 클라우드 환경에서 전송됩니다. 저희는 귀하의 키나 질문을 절대 보지 않습니다.

Kirat을 방금 구매하셨나요? 단계별 설정 가이드를 따르세요: 먼저 어떤 Claude를 사용하는지 확인한 다음, 해당하는 단계만 진행하세요.

1단계 · 시간이 걸리는 부분

두 개의 API 키

결제가 활성화된 OpenAI API 키 하나와 Google Gemini API 키 하나. 여기서 시간이 걸리는 것은 제공업체의 가입 및 결제 양식입니다. 지출 한도가 있는 별도의 제공업체 프로젝트를 만드는 것이 좋습니다.

최소 권한(선택 사항): OpenAI에서는 제한된 키로 충분하며, "List models"는 Read, "Model capabilities"는 Request로 설정하고 나머지는 모두 None으로 설정합니다. Google AI Studio의 Gemini 키는 이미 Gemini API로 제한되어 있습니다; Google Cloud 콘솔의 키는 Generative Language API로 제한하세요.

이미 두 키가 있으신가요? 2단계로 이동하세요.

2단계

설치

Claude Desktop: 다운로드의 압축을 풉니다. Settings → Extensions → Advanced settings → Install Extension…을 열고 .mcpb 파일을 선택합니다. 대화상자에 두 키를 입력합니다. Desktop은 자체 Node를 포함하므로 다른 것은 설치할 필요가 없습니다.

Claude Code: 다운로드의 압축을 풀고 추출된 kirat 폴더를 홈 폴더로 옮겨 ~/kirat/claude-code가 존재하도록 합니다. 그런 다음 아래 명령을 실행합니다. Node.js 20 이상이 필요합니다.

Claude Code 클라우드 세션: 클라우드 환경의 일회성 설정이며, 제한이 있습니다 — 아래 참조.

3단계

요청

설치 확인: Use the Kirat extension and call kirat_status. 이는 또한 OpenAI와 Google로 두 API 키를 확인하며, 무료입니다.

그런 다음 실제 질문을 하세요: Ask the Kirat council: Postgres or SQLite? Give your own position too. 또는 템플릿에서 시작하세요: Claude Desktop에서는 메시지 상자의 + 버튼에서, Claude Code에서는 플러그인을 /kirat:decide, /kirat:review, /kirat:critique 또는 /kirat:brainstorm로 사용합니다. Claude Code 클라우드 세션에서는 /mcp__kirat__decide, /mcp__kirat__review, /mcp__kirat__critique, /mcp__kirat__brainstorm이라고 합니다.

# in Claude Code, once ~/kirat/claude-code exists
/plugin marketplace add ~/kirat/claude-code
/plugin install kirat@kirat
# enter both keys when asked; to change them later:
/plugin configure kirat@kirat

Claude Desktop은 해당 확장 프로그램이 Anthropic의 검증을 받지 않았다는 경고를 표시합니다. 이 경고는 파일에서 설치된 모든 확장 프로그램에 대해 예상되는 것입니다 — FAQ를 참조하세요.

실행 위치, 전체 내용, 클라우드 제한 사항 포함 아홉 가지 도구와 기록된 예시 호출

평범한 언어로 질문하면 Claude가 호출합니다:

// a real call and a real answer — nothing staged
kirat_vote({
  question: "Cap the coupled effort default, or leave it at maximum?",
  options: ["cap at high", "decouple", "leave as is"],
  ownPosition: { position: "cap at high", reasoning: "…", confidence: 72 }
})
→ outcome:       "completed"
  decision:      "cap at high"
  decisionPath:  "unanimous"
  rounds:        1
  votes:         openai 94, gemini 92,
                 claude 72
  cost:          $0.021

다른 결과: needs_human(과반수 없음 — 직접 결정), domain_decision, limited, budget_exhausted. 신뢰도 값은 각 모델의 자체 보고입니다.

그림 6.3 — 부품 목록

Claude가 호출하는 아홉 가지 도구

API 비용 발생 7개 · 비용 없음 2개

번호도구기능API 비용
01kirat_vote투표로 결정: 각 멤버가 입장을 취한 뒤 3분의 2 다수, 도메인 소유자 또는 needs_human으로 결정합니다.API 비용
02kirat_review코드 리뷰. 모든 발견 사항은 다른 모델 계열이 검증합니다.API 비용
03kirat_create초안을 비평하거나, 멤버가 초안을 작성하거나, 짧은 변형들을 순위 매깁니다.API 비용
04kirat_brainstorm세 가지 트랙 — 브리프 내, 인접, 규칙 파괴 — 으로 발산적 아이디어를 익명으로 순위 매깁니다.API 비용
05kirat_decide되돌릴 수 있는 업무 선택에 대한 위임 결정으로, 거부권과 일일 한도가 있습니다.API 비용
06kirat_ask정확히 한 멤버에게 질문합니다. 평의회 없음.API 비용
07kirat_image두 제공자가 이미지를 생성하고 익명 배심원이 평가합니다.API 비용
08kirat_result백그라운드 작업과 최근 결과를 가져옵니다.없음
09kirat_status예산, 지출, 사용 가능한 멤버, 설정, 무료 키 확인.없음

"API 비용"은 해당 도구가 귀하의 키로 OpenAI와 Google을 호출하며, 귀하가 해당 제공자에게 직접 비용을 지불한다는 뜻입니다. 위의 재생은 각 실행에 든 비용을 보여줍니다. Kirat 자체는 사용당 요금을 받지 않습니다: 한 번 구매하면 됩니다. kirat_image와 이미지 입력은 컴퓨터의 파일로 작동하므로 Claude Code에 가장 적합합니다.

근거: 기록된 결정, 측정된 비용, 문서화된 실패