web-search-verifier
3개 출처 교차검증 웹검색 프로토콜. 환각 방지 첫 번째 방어선. 모든 거시경제 데이터 수집 시 필수 사용.
Best use case
web-search-verifier is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
3개 출처 교차검증 웹검색 프로토콜. 환각 방지 첫 번째 방어선. 모든 거시경제 데이터 수집 시 필수 사용.
Teams using web-search-verifier should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/web-search-verifier/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How web-search-verifier Compares
| Feature / Agent | web-search-verifier | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
3개 출처 교차검증 웹검색 프로토콜. 환각 방지 첫 번째 방어선. 모든 거시경제 데이터 수집 시 필수 사용.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 웹검색 교차검증 스킬
## ⚠️ CRITICAL: 스킬 사용 방법 (반드시 숙지)
> **이 스킬은 "함수"가 아닙니다. 지침 문서입니다.**
>
> - ❌ `search_rate("fed_funds")` 같은 함수 호출은 **작동하지 않습니다**
> - ✅ 에이전트가 `mcp_websearch_web_search_exa` 도구를 **직접 호출**해야 합니다
> - ✅ 이 스킬은 **검색 쿼리 패턴과 검증 절차**를 안내하는 문서입니다
### 올바른 사용 방법
```
1. 이 스킬 문서를 읽고 검색 쿼리 패턴 파악
2. mcp_websearch_web_search_exa 도구를 직접 호출
3. 검색 결과에서 데이터 추출
4. 3개 출처 교차 검증 수행
5. 출력 스키마에 맞춰 결과 포장
```
### 잘못된 사용 방법 (환각 발생)
```
❌ "search_rate() 호출" (존재하지 않는 함수)
❌ "스킬이 알아서 검색해줌" (스킬은 문서일 뿐)
❌ 예시 데이터의 숫자를 그대로 사용 (하드코딩된 오래된 값)
```
---
## Overview
이 스킬은 거시경제 데이터(지수, 금리, 환율) 수집 시 **환각을 방지**하기 위한 표준 프로토콜입니다.
모든 수치 데이터는 **에이전트가 직접 웹검색 도구를 호출**하여 **3개 이상의 독립 출처에서 교차 검증** 후에만 사용 가능합니다.
---
## 절대 규칙 (Zero Tolerance)
### 금지 사항 (NEVER)
- ❌ 웹검색 없이 숫자 생성 → 즉시 FAIL
- ❌ 단일 출처만으로 확정 → 최소 3개 필수
- ❌ 출처 URL 없이 데이터 반환 → 검증 불가
- ❌ 7일 이상 오래된 데이터 사용 → 최신성 위반
- ❌ Blocklist 출처 사용 → 신뢰도 위반
### 필수 사항 (MUST)
- ✅ 최소 3개 독립 출처에서 교차 검증
- ✅ 1차 출처(공식) 최소 1개 필수 포함
- ✅ 출처 간 ±1% 이내 일치 확인
- ✅ 모든 데이터에 [출처: URL, 날짜] 태그 포함
- ✅ 검증 실패 시 FAIL 반환 (추정값 금지)
- ✅ **원문 인용 필수** (v2.0 신규) - 숫자를 포함한 검색 결과 원문을 그대로 인용
---
## ⚠️ 원문 인용 규칙 (v2.0 신규 - CRITICAL)
> **환각 방지의 핵심**: 검색 결과에서 숫자를 추출할 때 반드시 **원문을 그대로 인용**해야 합니다.
> 원문과 보고 값이 일치하지 않으면 **FAIL**입니다.
### 올바른 숫자 추출 방법
```
1. 웹검색 실행
2. 검색 결과에서 숫자가 포함된 문장을 **그대로 복사**
3. 원문에서 숫자 추출
4. 추출한 숫자와 원문을 함께 보고
```
### 출력 형식 (필수)
모든 수치 데이터는 다음 형식으로 보고해야 합니다:
```json
{
"value": 6936,
"original_text": "The US500 fell to 6936 points on January 12, 2026",
"source": "Trading Economics",
"url": "https://tradingeconomics.com/united-states/stock-market"
}
```
### 검증 규칙
| 규칙 | 설명 | 위반 시 |
|:-----|:-----|:--------|
| **원문 필수** | `original_text` 필드 없으면 무효 | FAIL |
| **숫자 일치** | `value`가 `original_text` 내 숫자와 일치해야 함 | FAIL |
| **복사 금지** | 이전 결과나 예시 값을 복사하면 안 됨 | FAIL |
### 원문 인용 예시
**✅ 올바른 예시**:
```json
{
"index": "S&P 500",
"value": 6936,
"original_text": "The main stock market index of United States, the US500, fell to 6936 points on January 12, 2026",
"source_url": "https://tradingeconomics.com/united-states/stock-market"
}
```
**❌ 잘못된 예시 (환각 위험)**:
```json
{
"index": "S&P 500",
"value": 5906,
"original_text": null,
"source_url": "https://tradingeconomics.com/united-states/stock-market"
}
```
→ 원문 없이 숫자만 보고하면 검증 불가능
---
## 검색 프로토콜
### 1. 지수 데이터 검색
**데이터 유형**: 지수 (Index)
> ⚠️ 아래는 **검색 패턴 가이드**입니다. `search_index()`라는 함수는 **존재하지 않습니다**.
> 반드시 `mcp_websearch_web_search_exa`를 **직접 호출**하세요.
**지원 지수**:
- S&P 500, NASDAQ, Dow Jones
- KOSPI, KOSDAQ
- USD/KRW, EUR/KRW, JPY/KRW
**검색 쿼리 패턴** (3개 병렬 실행):
| # | 패턴 | 대상 출처 |
|:-:|:-----|:---------|
| 1 | `"[index] price today site:investing.com OR site:bloomberg.com"` | 글로벌 금융 |
| 2 | `"[지수] 종가 site:tradingeconomics.com"` | 금융 데이터 |
| 3 | `"[index] quote site:finance.yahoo.com OR site:marketwatch.com"` | 시세 사이트 |
**검증 절차**:
1. 3개 검색 결과에서 수치 추출
2. 날짜 일치 확인 (동일 거래일)
3. 값 일치 확인 (±1% 이내)
4. 1차 출처 포함 확인
**출력 스키마 (v2.0 업데이트)**:
```json
{
"index": "S&P 500",
"value": "[SEARCH_RESULT - 웹검색 결과로 대체]",
"unit": "pt",
"date": "[SEARCH_DATE - 검색 시점 날짜]",
"verified": true,
"variance": "[CALCULATED - 출처 간 편차 계산]",
"original_text": "[REQUIRED - 숫자를 포함한 검색 결과 원문]",
"sources": [
{
"name": "Trading Economics",
"url": "[ACTUAL_URL]",
"value": "[ACTUAL_VALUE]",
"original_text": "[EXACT_QUOTE - 이 출처에서 숫자가 포함된 문장]",
"tier": 2
},
{
"name": "Bloomberg",
"url": "[ACTUAL_URL]",
"value": "[ACTUAL_VALUE]",
"original_text": "[EXACT_QUOTE]",
"tier": 1
}
]
}
⚠️ CRITICAL (v2.0):
1. `original_text` 필드는 **필수**입니다. 없으면 FAIL.
2. `value`는 반드시 `original_text` 내의 숫자와 일치해야 합니다.
3. 예시 값을 그대로 사용하지 마세요.
```
### 2. 금리 데이터 검색
**데이터 유형**: 금리 (Interest Rate)
> ⚠️ 아래는 **검색 패턴 가이드**입니다. `search_rate()`라는 함수는 **존재하지 않습니다**.
> 반드시 `mcp_websearch_web_search_exa`를 **직접 호출**하세요.
**지원 금리**:
- fed_funds: 미국 기준금리
- bok_base: 한국 기준금리
- us_10y_treasury: 미국 10년물 국채
**검색 쿼리 패턴**:
| 금리 | 1차 출처 쿼리 | 2차 출처 쿼리 |
|:-----|:-------------|:-------------|
| Fed | `"federal funds rate site:federalreserve.gov"` | `"fed rate site:tradingeconomics.com"` |
| BOK | `"기준금리 site:bok.or.kr"` | `"korea rate site:tradingeconomics.com"` |
**검증 절차**:
1. 공식 출처(1차) 검색
2. 교차검증 출처(2차) 검색
3. 값 일치 확인
4. FOMC/금통위 결정일 확인
5. 다음 회의 일정 확인
**출력 스키마 (v2.0 업데이트)**:
```json
{
"rate_type": "fed_funds",
"value": "[SEARCH_RESULT - 웹검색으로 확인한 실제 금리]",
"decision_date": "[SEARCH_RESULT - 최근 FOMC/금통위 결정일]",
"next_meeting": "[SEARCH_RESULT - 다음 회의 예정일]",
"verified": true,
"original_text": "[REQUIRED - 금리 수치가 포함된 검색 결과 원문]",
"sources": [
{
"name": "Federal Reserve",
"url": "[ACTUAL_URL]",
"value": "[ACTUAL_VALUE]",
"original_text": "[EXACT_QUOTE - 공식 출처의 금리 언급 원문]",
"official": true
},
{
"name": "Trading Economics",
"url": "[ACTUAL_URL]",
"value": "[ACTUAL_VALUE]",
"original_text": "[EXACT_QUOTE]",
"official": false
}
]
}
⚠️ CRITICAL (v2.0):
1. `original_text` 필드는 **필수**입니다. 없으면 FAIL.
2. `value`는 반드시 `original_text` 내의 숫자와 일치해야 합니다.
3. 금리의 경우 "3.50-3.75%" 형식으로 범위 표기 가능.
4. 예시 값을 그대로 사용하면 환각(hallucination)이 발생합니다.
```
---
## 허용 출처 (Allowlist)
### Tier 1: 공식 출처 (필수 1개 이상)
| 데이터 | 출처 | URL |
|:-------|:-----|:----|
| 미국 주식/경제 | FRED | fred.stlouisfed.org |
| 미국 금리 | Federal Reserve | federalreserve.gov |
| 한국 주식 | 한국거래소 | krx.co.kr |
| 한국 금리 | 한국은행 | bok.or.kr |
| 글로벌 | Bloomberg | bloomberg.com |
### Tier 2: 교차검증 출처
| 출처 | URL | 커버리지 |
|:-----|:----|:---------|
| Trading Economics | tradingeconomics.com | 글로벌 |
| Investing.com | investing.com | 글로벌 |
| Yahoo Finance | finance.yahoo.com | 글로벌 |
| MarketWatch | marketwatch.com | 미국 중심 |
### Tier 3: 보조 출처
| 출처 | URL | 용도 |
|:-----|:----|:-----|
| 한국경제 | hankyung.com | 한국 시장 |
| 연합뉴스 | yna.co.kr | 한국 경제 |
| Reuters | reuters.com | 글로벌 뉴스 |
| FT | ft.com | 글로벌 금융 |
### Blocklist (금지)
- 개인 블로그
- 위키피디아 (실시간 데이터용)
- 커뮤니티 사이트
- 신뢰도 미검증 사이트
---
## 검증 실패 처리
### 실패 유형별 대응
| 실패 유형 | 코드 | 대응 |
|:----------|:-----|:-----|
| 출처 부족 | `INSUFFICIENT_SOURCES` | 추가 검색 시도 (최대 3회) |
| 값 불일치 | `VALUE_MISMATCH` | 범위로 표현 또는 1차 출처 우선 |
| 날짜 불일치 | `DATE_MISMATCH` | 가장 최신 날짜 출처 우선 |
| 1차 출처 없음 | `NO_PRIMARY_SOURCE` | 경고 + 2차 출처로 진행 |
| 전체 실패 | `COMPLETE_FAILURE` | FAIL 반환, 수동 확인 요청 |
### 실패 출력 스키마
```json
{
"index": "KOSPI",
"value": null,
"verified": false,
"error": {
"code": "VALUE_MISMATCH",
"reason": "출처 간 5.2% 차이 (허용: ±1%)",
"details": {
"source1": {"name": "A", "value": 4500},
"source2": {"name": "B", "value": 4735}
}
},
"recommendation": "수동 확인 필요"
}
```
---
## 사용 예시
### 에이전트에서 스킬 사용
```markdown
# index-fetcher 에이전트
## 데이터 수집
1. web-search-verifier 스킬 로드 확인 (검색 패턴 가이드로 참조)
2. S&P 500 수집:
- mcp_websearch_web_search_exa(query="S&P 500 price today") **직접 호출**
- 검색 결과에서 original_text 추출
- verified: true 확인
3. KOSPI 수집:
- mcp_websearch_web_search_exa(query="KOSPI 지수 현재") **직접 호출**
- 검색 결과에서 original_text 추출
- verified: true 확인
## 검증 실패 시
verified: false인 경우:
- 해당 지수는 "데이터 수집 실패" 명시
- 추정값 생성 금지
- 에러 코드 전달
```
---
## 리소스
- 허용 출처: 위 "Tier 1/2/3 출처" 섹션 참조
- 검색 패턴: 위 "검색 전략" 섹션 참조
---
## 메타 정보
```yaml
version: "2.1"
created: "2026-01-12"
updated: "2026-01-12"
author: "Claude"
purpose: "환각 방지 웹검색 표준화"
dependencies:
- mcp_websearch_web_search_exa
- mcp_websearch_web_search_exa
- WebFetch
consumers:
- index-fetcher
- rate-analyst
- sector-analyst
- risk-analyst
- leadership-analyst
- macro-synthesizer
changes_v2.1:
- "범위 검증 (Sanity Check) 제거 - 대폭락 시 정상 데이터 reject 문제"
changes_v2.0:
- "원문 인용 필수화 (original_text 필드)"
- "S&P 500 첫자리 오류 환각 방지"
```Related Skills
stock-data-verifier
주식/ETF 데이터 3개 출처 교차검증 프로토콜. 환각 방지 첫 번째 방어선.
patent-search-collect
KIPRIS API 기반 특허 검색 실행, 배치 내보내기, 중복 제거. Use when: (1) 특허 데이터 검색 및 다운로드 시, (2) 검색 계획 실행 시, (3) '특허 검색', 'search patents', 'collect patent data', 'export patents to Excel' 요청 시, (4) 키워드, 출원인, 출원번호, IPC 코드 기반 한국/해외 특허 배치 검색 시.
patent-research-planning
특허 연구 영역 클러스터링, 키워드 최적화, 검색 전략 수립. Use when: (1) 새로운 특허 조사 프로젝트 시작 시, (2) KIPRIS API 호출 전 키워드 조합 최적화 시, (3) IPC 코드와 키워드 분류 체계 구성 시, (4) 다국가 특허 검색 전략 수립 시, (5) '검색 계획', 'plan patent search', 'optimize keywords', 'cluster research areas' 요청 시.
wiki-gen
>
theme-whatif
visual-generator whatif 목적 테마(미래 비전 스냅샷). theme=whatif 또는 purpose=whatif일 때 사용. 단일 팔레트 + Future Snapshot/Hero Statement 레이아웃 가이드 + 장면 구성 5요소 + 몰입 기법 포함.
theme-seminar
visual-generator seminar 테마(세미나/발표 자료) 무드 팔레트. theme=seminar일 때 사용. 9종 무드(technical-report, clarity, tech-focus, growth, connection, innovation, knowledge, presentation, workshop) 각각 4색 팔레트 제공.
theme-pitch
visual-generator pitch 목적 테마(피치덱). theme=pitch 또는 purpose=pitch일 때 사용. Apple 다크 그래디언트 팔레트 + Z-Pattern/Single-Hero 레이아웃 가이드 + 피치덱 슬라이드 시퀀스 포함.
theme-gov
visual-generator gov 테마(정부/공공기관 PPT 슬라이드) 무드 팔레트. theme=gov일 때 사용. 9종 무드(technical-report, growth, clarity, connection, innovation, tech-focus, knowledge, presentation, workshop) 각각 4색 팔레트 제공.
theme-concept
visual-generator concept 테마(Kurzgesagt 풍 시각 스토리텔링) 무드 팔레트. theme=concept일 때 사용. 텍스트 없이 장면으로 개념을 설명하는 교육용 일러스트레이션. 9종 무드 각각 4색 팔레트 제공.
theme-comparison
visual-generator comparison 목적 테마(Before/After 비교). theme=comparison 또는 purpose=comparison일 때 사용. 단일 팔레트 + 대비 메타포(Contrast) 레이아웃 가이드 + 비교 항목 작성법 포함.
slide-renderer
Gemini와 OpenAI gpt-image-2를 사용한 슬라이드 이미지 렌더링 스킬. renderer-agent / renderer-agent-openai가 프롬프트 파일을 이미지로 변환할 때 사용. generate_slide_images.py / generate_slide_images_openai.py 실행 가이드, 환경 요구사항, 출력 해석, 에러 처리 방법을 포함합니다.
layout-types
visual-generator 스킬이 공유하는 24종 레이아웃 정의. 각 레이아웃의 핵심 아이디어, ASCII 시각 구성, 시각화 원칙, 권장 사양, 적합/부적합 케이스를 포함합니다.