웹 검색 및 출처 필터링 공통 로직. 공식 문서, 커뮤니티, 기술 블로그 검색 시 자동 활성화
Inherits all available tools
Additional assets for this skill
This skill inherits all available tools. When active, it can use any tool Claude has access to.
resources/output-formats.mdresources/source-filters.md웹 검색을 위한 재사용 가능한 인터페이스를 제공합니다. 3개의 검색 에이전트(official-docs, comprehensive, best-practice)가 공통으로 사용하는 핵심 로직입니다.
검색은 다음 우선순위로 실행됩니다:
| 순위 | 방법 | 조건 | 도구 |
|---|---|---|---|
| 1순위 | Gemini via MCP | other-agents MCP + gemini 설치 | google_search, web_fetch |
| 2순위 | Gemini via Bash | gemini CLI 설치 | google_search, web_fetch |
| 3순위 | 자체 WebSearch | Gemini 불가 시 | WebSearch, WebFetch |
Gemini에게 다음 도구를 사용하도록 지시합니다:
| 순위 | 도구 | 용도 |
|---|---|---|
| 1순위 | google_search | 구글 검색 수행 |
| 2순위 | web_fetch | 특정 페이지 내용 조회 |
google_search 도구 활용# 1순위: MCP로 Gemini 호출
response = mcp__other-agents__use_agent(
cli_name="gemini",
message="google_search 도구로 'React Server Components' 검색해줘"
)
# 2순위: Bash로 Gemini CLI 호출
response = Bash('gemini "google_search 도구로 React Server Components 검색해줘"')
# 3순위: 자체 WebSearch (Fallback)
response = WebSearch(query="React Server Components")
// Input:
{
query: string, // 검색어 (최소 3자)
tier?: 1 | 2 | 3 | 4, // 출처 필터 (생략 시 전체)
maxResults?: number // 최대 결과 수 (기본 10)
}
// Output:
Array<{
title: string,
url: string,
snippet: string,
tier: 1 | 2 | 3 | 4,
reliability_score: number // 0-100
}>
사용 예시:
검색어: "React Server Components tutorial"
필터: tier=1 (공식 문서만)
→ [{
title: "Server Components - React",
url: "https://react.dev/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023#react-server-components",
snippet: "React Server Components allow developers to build applications...",
tier: 1,
reliability_score: 95
}]
특정 URL의 전체 내용을 가져와 분석할 때 사용합니다.
// Input:
{
url: string,
prompt: string // 추출할 정보
}
// Output:
{
content: string,
tier: 1 | 2 | 3 | 4,
reliability_score: number
}
모든 검색 결과는 다음 형식을 준수:
interface SearchResult {
title: string; // 비어있지 않음
url: string; // 유효한 URL 형식
snippet: string; // 200자 이하
tier: 1 | 2 | 3 | 4;
reliability_score: number; // 0-100
}
[] + 경고 메시지상세 내용은 resources/source-filters.md 참고
Tier 1 (공식 문서)
.org 도메인 + 프로젝트명 일치docs.* 서브도메인Tier 2 (준공식)
Tier 3 (커뮤니티)
Tier 4 (전문가 블로그)
다음 URL은 동일하게 처리:
http://example.com = https://example.comexample.com/page = example.com/page/example.com/page#section = example.com/pageexample.com/page?utm_source=x = example.com/pagefunction normalizeUrl(url: string): string {
const parsed = new URL(url);
// 프로토콜 제거, 트레일링 슬래시 제거, 쿼리/해시 제거
return parsed.hostname + parsed.pathname.replace(/\/$/, '');
}
function deduplicateResults(results: SearchResult[]): SearchResult[] {
const seen = new Set<string>();
return results.filter(result => {
const normalized = normalizeUrl(result.url);
if (seen.has(normalized)) return false;
seen.add(normalized);
return true;
});
}
기본 정렬 순서:
results.sort((a, b) => {
if (a.tier !== b.tier) return a.tier - b.tier;
if (a.reliability_score !== b.reliability_score)
return b.reliability_score - a.reliability_score;
return 0; // 동일 tier + score 시 원본 순서 유지
});
상세 내용은 resources/output-formats.md 참고
사용자가 빠른 답변을 원할 때:
## 답변
[핵심 내용 2-3문장]
## 참고 링크
- [공식 문서] Title (tier 1)
- [공식 가이드] Title (tier 2)
- [커뮤니티] Title (tier 3)
Sources:
- [Title 1](url1)
- [Title 2](url2)
각 출처를 비교 분석할 때:
## 공식 문서 (Tier 1)
### [Title](url) - 신뢰도: 95/100
[요약]
주요 내용:
- 포인트 1
- 포인트 2
## 커뮤니티 (Tier 3)
### [Title](url) - 신뢰도: 65/100
[요약 + 주의사항]
Sources:
- [all URLs]
초기 검색 후 drill-down:
## 초기 검색 결과 (Top 5)
1. [Title 1](url1) - tier 1, score: 95
2. [Title 2](url2) - tier 2, score: 80
더 알아보고 싶은 영역:
- [ ] 공식 문서 상세 보기
- [ ] 실전 예제 찾기
- [ ] 커뮤니티 의견 확인
Sources: [...]
WebSearch API 제한
WebFetch 캐싱
성능
// WebSearch 실패 시
if (!results || results.length === 0) {
console.warn("No results found for query:", query);
return [];
}
// URL 파싱 실패 시
try {
new URL(result.url);
} catch {
console.error("Invalid URL:", result.url);
continue; // 스킵
}
1. tier=1 검색 실행
2. 결과 >= 3개 → 종료
3. 결과 < 3개 → tier=2 추가 검색
4. 결과 < 5개 → tier=3,4 추가 검색
1. 전체 tier 검색 (maxResults=20)
2. tier별 그룹화
3. 각 tier에서 top 2-3개씩 선택
4. 총 10개 이내로 제한
1. 초기: tier=1,2 + maxResults=5
2. 사용자 피드백: "더 많은 예제 필요"
3. 추가 검색: tier=3 + keyword="example" + maxResults=10
4. 결과 병합 + deduplication
// Input
const query = "React Server Components";
const tier = 1; // 공식 문서만
// Process
1. WebSearch 호출
2. 결과 필터링 (tier=1만)
3. URL 중복 제거
4. 신뢰도 점수 계산
5. 정렬 (reliability_score DESC)
// Output
[
{
title: "Server Components - React",
url: "https://react.dev/blog/2023/03/22/...",
snippet: "React Server Components allow...",
tier: 1,
reliability_score: 95
},
{
title: "React Server Components - RFC",
url: "https://github.com/reactjs/rfcs/blob/main/text/0188-server-components.md",
tier: 1,
reliability_score: 92
}
]
// Input
const query = "Next.js App Router tutorial";
// tier 미지정 = 전체 검색
// Process
1. WebSearch 호출 (maxResults=20)
2. 모든 tier 결과 수집
3. 중복 제거
4. tier별 그룹화
5. 각 tier에서 top 3개씩 선택
// Output (tier 혼합)
[
// Tier 1
{ title: "App Router - Next.js", tier: 1, score: 95, ... },
{ title: "Routing Fundamentals", tier: 1, score: 93, ... },
// Tier 2
{ title: "Vercel Guide: App Router", tier: 2, score: 85, ... },
// Tier 3
{ title: "Dev.to: Migrating to App Router", tier: 3, score: 68, ... },
{ title: "Stack Overflow: App Router Best Practices", tier: 3, score: 62, ... }
]
(현재 구현하지 않음 - YAGNI 원칙)
중요: 위 기능은 실제 필요성이 확인될 때까지 구현하지 않습니다.