
펜테스트 결과 또는 버그 바운티 보고서를 위한 AI 기반 피어 리뷰 — 전달 전에 심각도, 증거 및 보고 품질을 검증하며, 여러 독립적인 AI 검토자(Claude, GPT, Gemini)가 서로를 비판한 후 최종 판정을 내립니다.
클라이언트에게 전달되기 전에 침투 테스트 결과(취약점 발견)를 검증하는 블라인드 피어 리뷰 파이프라인입니다. 독립적인 전문가 관점(렌즈)이 결과를 평가하고, 서로 블라인드 리뷰를 수행하며, 의장(Chairman)이 하나의 검증된 평결을 종합합니다. 보고할 가치가 있는지, 심각도가 적절히 조정되었는지 여부를 판단합니다.
두 가지 실행 방식:
| 모드 | 위치 | 설명 |
|---|---|---|
| 수동 의장 (Manual Chairman) | claude.ai / Claude 앱 채팅 | 각 렌즈를 개별적으로 추론한 후 종합합니다. 비용 무료, 키 불필요. |
| 병렬 (교차 벤더) | 사용자 머신의 Claude Code | council_direct.py가 렌즈를 Claude + ChatGPT + Gemini에 실제 동시 호출로 분배합니다. 제공자 토큰 비용 발생. 단일 벤더의 사각지대를 포착합니다. |
이 저장소는 진실 공급원입니다. 여기서 편집하고, git으로 커밋하세요. Claude Project 지식 베이스는 읽기 전용 미러입니다. 파일이 실질적으로 변경되면 다시 업로드하세요. 양방향 동기화하지 마세요.
llm-council-vapt/
├── README.md # this file
├── requirements.txt # python deps
├── .env.template # key names, no values
├── .gitignore # ignores .env (keys never committed)
├── skills/
│ └── llm-council/
│ └── SKILL.md # the skill (8 members, protocols, modes)
├── scripts/
│ └── council_direct.py # parallel cross-vendor engine
└── docs/
└── project_system_prompt.md # paste into Claude Project settings
# 1. clone / place the repo
git clone <your-repo-url> llm-council-vapt
cd llm-council-vapt
# 2. make the skill discoverable by Claude Code (symlink, so edits stay live)
mkdir -p ~/.claude/skills
ln -s ~/llm-council-vapt/skills/llm-council ~/.claude/skills/llm-council
# 3. keys
cp .env.template .env
nano .env # paste the three keys, save
.env 파일을 편집하여 Anthropic, OpenAI, Google API 키를 추가하세요.
시스템 Python과 종속성을 분리합니다.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements.txt
참고 (Kali / Debian 기반 시스템): PEP 668은 기본적으로 시스템 전체
pip install을 차단합니다.externally-managed-environment오류가 발생하면 옵션 A를 사용하거나 강제로 설치하세요:pip install -r requirements.txt --break-system-packages
python scripts/council_direct.py --help
ls -l ~/.claude/skills/llm-council/SKILL.md # should resolve via the symlink
두 명령어 모두 정상 실행되면 설정이 완료된 것입니다.
전체 명령어 참조(모든 플래그, 모드, 예제)는 docs/USAGE.md를 참조하세요.
명령어를 입력하기만 하면 됩니다. 키나 스크립트가 필요 없습니다:
/llm-council -q -u # quick, upload file
/llm-council medium validation -p # medium, paste content
/llm-council -f -u -v2 -s high # full, upload, version 2, validate High claim
플래그: 모드 -q|-m|-f (또는 quick|medium|full validation), 입력 -u (업로드) / -p (붙여넣기), 버전 -vN, 심각도 -s low|medium|high|critical.
python3 scripts/council_direct.py \
--mode full \
--finding ./finding.md \
--severity high \
--version 2 \
--finding-id <YOUR-FINDING-ID> \
--project <PREFIX> > council_run.json
--finding은 파일 경로 또는 원시 텍스트를 허용합니다. 스크립트는 JSON(평가 + 블라인드 순위 + 집계 + 실패 내역)을 출력합니다. 그런 다음 Claude Code에게 council_run.json을 읽고 카운슬의 3단계(의장 종합)를 실행하여 최종 평결을 생성하도록 요청하세요.
quick (-q) → Red-teamer · CVSS Auditor · Evidence Auditor (3)
medium (-m) → + Attack Chain Analyst · Remediation Critic (5)
full (-f) → + Threat Intel Analyst · False Negative Hunter ·
Business Impact Translator (8)
Quick = 빠른 인게이지먼트 내 온전성 검사. Medium = 보고할 목적의 취약점 발견. Full = 전달 전 게이트; High/Critical의 기본값.
공식 제공자 문서(2026년 6월) 기준으로 확인됨. 영구적이지 않음 — 제공자가 새로운 플래그십을 출시하면 scripts/council_direct.py 상단의 MODELS를 업데이트하세요.
.env는 gitignore에 등록되어 있습니다. 실제 키는 절대 커밋되지 않습니다. 첫 git add 전에 git status로 확인하세요. .env가 나타나면 안 됩니다.python-dotenv를 통해 런타임에 환경에서 읽어옵니다. 로그나 출력 JSON에 기록되지 않습니다.스크립트는 텍스트 기반 결과를 직접 읽습니다: .md, .txt, .json, .csv, .yaml 또는 인라인으로 전달된 원시 텍스트. 바이너리/문서 형식 (.pdf, .docx, .xlsx 등)은 지원되지 않습니다. 스크립트가 이를 감지하고 먼저 .md/.txt로 변환하라는 메시지와 함께 종료됩니다. 결과는 일반적으로 마크다운으로 작성되므로 문제가 되지 않습니다.
전체/중간 모드에서 공격 체인 분석가(Attack Chain Analyst)는 형제 결과를 고려할 수 있습니다:
--findings-dir <path> — 스캔할 디렉토리 (기본값: 결과 파일의 자체 디렉토리).--project <prefix> — 형제 결과 중 관련 있는 것으로 간주할 파일 이름 접두사 태그 (선택 사항). 생략하면 모든 읽을 수 있는 텍스트 형제 결과가 고려됩니다. 태그는 런타임에 제공되며, 클라이언트 이름이나 접두사가 코드에 하드코딩되지 않습니다.실제 결과 파일은 이 저장소 외부(사용자 머신 어디든)에 보관하세요. 실행 시 --findings-dir을 해당 위치로 지정하세요.
제작: Holiday
| 역할 | 제공자 | 모델 ID | 키 |
|---|
| Claude | Anthropic | claude-opus-4-8 | ANTHROPIC_API_KEY |
| ChatGPT | OpenAI | gpt-5.5 | OPENAI_API_KEY |
| Gemini | gemini-3.1-pro-preview | GEMINI_API_KEY |