instruction.md
# Naver News Search
## What this skill does
`k-skill-proxy`가 네이버 검색 Open API 뉴스 검색(`openapi.naver.com/v1/search/news.json`)을 호출해 최근 뉴스 기사 후보를 정규화된 JSON 으로 돌려준다.
- 검색어 기반 최신 뉴스 후보 목록을 정리한다.
- 기사 제목, 본문 요약(description), 발행 시각(`pub_date`/`pub_date_iso`), 네이버 뉴스 링크(`link`), 원문 링크(`original_link`)를 제공한다.
- Naver 가 응답에 섞어주는 `<b>` 하이라이트 태그와 HTML entity(`&`, `"`, `<` 등)는 proxy 쪽에서 미리 제거한다.
- 사용자 로그인·개인화·회원 전용 뉴스는 지원하지 않는다.
## When to use
- "오늘 삼성전자 관련 뉴스 찾아줘"
- "최근 AI 규제 관련 기사 최신순으로 5개만"
- "네이버 뉴스에서 금리 인상 기사 요약해줘"
- "이 사건 기사 링크 정리해줘"
## When not to use
- 특정 언론사 내부 유료 기사, 로그인 뒤에만 보이는 기사
- 기사 본문 전체가 필요한 경우 (API 는 요약 description 만 제공)
- 주식/환율/부동산 실시간 시세 (뉴스 API 는 기사만 다룬다)
- 차단/CAPTCHA 우회가 필요한 경로
## Required inputs
검색어(`q` / `query`)가 없으면 먼저 물어본다.
권장 질문:
> 찾을 네이버 뉴스 검색어를 알려주세요. 예: "삼성전자 실적", "인공지능 규제", "금리 인상"
단어 2글자 미만이면 의미가 불분명하므로 되묻는다.
## Proxy endpoint
기본값은 public/read-only/no-auth 프록시다. 사용자는 **네이버 개발자 센터 Client ID/Secret 을 발급받지 않아도 된다**. upstream key(`NAVER_SEARCH_CLIENT_ID` / `NAVER_SEARCH_CLIENT_SECRET`)는 프록시 서버에서만 주입한다.
```bash
curl -fsS --get "${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}/v1/naver-news/search" \
--data-urlencode 'q=삼성전자 실적' \
--data-urlencode 'display=10' \
--data-urlencode 'sort=date'
```
쿼리 파라미터:
- `q` 또는 `query` — 검색어. 2글자 이상.
- `display` — 반환 건수. 기본 10, 범위 1~100.
- `start` — 검색 시작 위치(1-indexed). 기본 1, 최대 1000. **`start + display - 1` 은 1000 을 넘을 수 없다**: 예를 들어 `start=1000 & display=100` 은 `1099`번째 아이템을 요구하므로 proxy가 업스트림 호출 전에 `400 bad_request`("start + display exceeds Naver's 1000-item search window")로 거절한다. 아주 오래된 기사를 찾으려면 검색어를 좁히는 것이 낫다.
- `sort` — `sim`(유사도 순, 기본값) 또는 `date`(최신순). 그 외 값은 `sim` 으로 fallback.
응답 주요 필드:
- `items[].title` — `<b>` 태그·HTML entity 가 제거된 기사 제목
- `items[].description` — `<b>` 태그·HTML entity 가 제거된 기사 요약
- `items[].link` — 네이버 뉴스 redirect 링크
- `items[].original_link` — 원문 뉴스 링크(빈 문자열이면 `null`)
- `items[].pub_date` — 원본 RFC822 형식 발행 시각
- `items[].pub_date_iso` — 파싱된 ISO-8601(UTC) 발행 시각. 파싱 실패시 `null`
- `meta.extraction` — 항상 `naver-openapi`
- `meta.total`, `meta.start`, `meta.display`, `meta.last_build_date`, `meta.sort`
## Workflow
1. 검색어를 확인한다. (없거나 2글자 미만이면 먼저 물어본다)
2. 사용자가 "최신순"을 원하면 `sort=date`, 그 외에는 `sort=sim` 으로 호출한다.
3. `GET /v1/naver-news/search` 를 호출한다.
4. `items` 가 있으면 상위 3~5건을 제목, 발행 시각(KST 기준으로 재포맷해도 좋다), 요약, 링크로 짧게 정리한다.
5. 발행 시각은 `pub_date_iso` 기준으로 오늘/어제 표기를 붙여도 된다. (KST = UTC+9)
6. `items` 가 비었거나 `upstream_error` 가 나면 재시도하지 말고 검색어를 좁혀 다시 물어본다.
## Response style
- 기사 제목/요약은 API 가 돌려준 원문만 인용한다. 원문에 없는 해설은 덧붙이지 않는다.
- 기사 발행 시각은 "KST 기준 {YYYY-MM-DD HH:mm}" 또는 "{n}시간 전" 정도로 짧게 표시한다.
- 원문 링크(`original_link`)가 있으면 우선 노출하고, 없으면 `link`(네이버 뉴스 redirect)를 안내한다.
- 서로 다른 언론사가 같은 사건을 다루면 링크 2~3개를 병렬로 제시해 사용자가 비교할 수 있게 한다.
- `description` 은 요약이므로, 팩트로 단정하지 말고 "기사 요약에 따르면"이라고 전한다.
## Failure modes
- `400 bad_request` — 검색어 누락, 2글자 미만, 허용되지 않는 파라미터, 혹은 `start + display - 1 > 1000` 조합(네이버 1000-item search window 초과). 에러 메시지를 그대로 사용자에게 노출한다.
- `503 upstream_not_configured` — 프록시 서버에 `NAVER_SEARCH_CLIENT_ID`/`NAVER_SEARCH_CLIENT_SECRET` 가 없는 경우. 운영자가 키를 등록해야 한다. 사용자에게는 "잠시 후 다시 시도해 주세요" 정도로 안내한다.
- `502 upstream_error` — 네이버 API 가 4xx/5xx 를 돌려준 경우(프록시가 자체적으로 502 로 정규화한다. 네이버 상태 코드는 `upstream.status_code`, 네이버 오류 코드는 `upstream.error_code` 로 남는다), 또는 응답 JSON 파싱 실패.
- `upstream.status_code: 401` + `upstream.error_code: "024"` — 프록시 서버의 Client ID/Secret 이 잘못된 경우. 운영자가 재발급해야 하고, 사용자는 재시도해도 소용없다.
- `upstream.status_code: 404` + `upstream.error_code: "SE05"` — 해당 검색 API 권한이 앱에 없거나 검색 API 경로가 바뀐 경우. 운영자가 앱 권한을 확인해야 한다.
- `429 upstream_rate_limited` — 네이버 검색 API 호출 제한 초과(`errorCode: 010`). `retry-after` 헤더 / `upstream.retry_after`(초)를 참고한다. 재시도 루프는 금지. 잠시 후 다시 시도하도록 안내한다.
- upstream 차단이나 장애 발생 시 재시도하지 않는다. cache + rate limit 만으로 대응하고, 사용자에게는 현재 조회 불가능함을 분명히 말한다.
## Privacy
- 검색어/결과를 영구 저장하지 않는다.
- 기사 본문은 요청하지 않는다. description(API 가 주는 요약)만 사용한다.
- 특정 인물·사건을 비방·추측하는 서술은 하지 않는다. 기사 원문만 전달한다.
## Done when
- 검색어를 확인했다.
- 최소 1건 이상의 기사를 제목·요약·발행 시각·링크로 정리해서 돌려주거나, 왜 결과가 없는지 설명했다.
- 발행 시각은 KST 기준으로 표시했다.
- 네이버 API 쿼터 상태·차단 발생 여부·재시도 금지 원칙을 지켰다.
- 로그인/개인화/차단 우회 범위를 벗어나지 않았다.
references/DISCLAIMER.md
# DISCLAIMER — `naver-news-search`
이 스킬은 네이버 또는 언론사의 공식 기능 또는 공식 지원 도구가 아니며, 공식 제휴·후원·승인·인증 또는 협업한 사실이 전혀 없습니다. 상표와 서비스명은 뉴스 검색 기능과 대상을 설명하기 위해서만 사용합니다.
대법원 2005. 6. 10. 선고 [2005도1637 판결](https://www.law.go.kr/LSW/precInfoP.do?precSeq=83920)(소니용 리모컨 사건)은 기능 설명용 표장과 출처표시를 구별했습니다. [상표법 제2조](https://www.law.go.kr/법령/상표법/제2조), [제89조](https://www.law.go.kr/법령/상표법/제89조), [제90조](https://www.law.go.kr/법령/상표법/제90조), [제108조](https://www.law.go.kr/법령/상표법/제108조)에 따른 출처 혼동 판단은 별도입니다.
대법원 2022. 5. 12. 선고 [2021도1533 판결](https://www.law.go.kr/LSW/precInfoP.do?precSeq=221765)은 공개정보 수집만으로 곧바로 [정보통신망법 제48조](https://www.law.go.kr/법령/정보통신망이용촉진및정보보호등에관한법률/제48조) 위반이 되는 것은 아닌 사정을 제시했지만, 기사 본문의 저작권까지 소멸시키지 않습니다. [저작권법 제93조](https://www.law.go.kr/법령/저작권법/제93조)과 [형법 제314조 제2항](https://www.law.go.kr/법령/형법/제314조)은 별도입니다.
- 공개 뉴스 메타데이터 자동 수집은 반드시 개인의 정보 조회용으로만 사용합니다.
- 조직적·대량 크롤링, 기사 전문·이미지 아카이브, 별도 DB 구축·재배포를 하지 않습니다.
- 제목·요약·원문 링크 중심으로 제공하고 접근통제·차단·quota를 우회하거나 정상 서비스를 방해하지 않습니다.
이 문서는 적법성을 보증하는 법률 자문이 아닙니다.
references/TRADEMARK-LEGAL-STATEMENT.md
# 상표 사용 법적 고지 — `naver-news-search`
이 스킬에서 `네이버 뉴스` 및 `Naver` 명칭은 뉴스 검색 결과와 기사 링크 조회의 **대상 검색 서비스**를 식별하기 위해 사용한다. k-skill의 출처를 네이버로 표시하려는 사용이 아니다.
대법원 2005. 6. 10. 선고 [2005도1637 판결](https://www.law.go.kr/LSW/precInfoP.do?precSeq=83920)은 타인의 표장을 출처표시가 아니라 상품 기능 또는 적용 기종을 밝히기 위해 사용하고 상표 사용으로 인식될 수 없는 경우 침해가 아니라고 판시했다. [상표법 제2조](https://www.law.go.kr/법령/상표법/제2조), [제89조](https://www.law.go.kr/법령/상표법/제89조), [제90조](https://www.law.go.kr/법령/상표법/제90조), [제108조](https://www.law.go.kr/법령/상표법/제108조)와 대법원 [2011다18802](https://www.law.go.kr/LSW/precInfoP.do?precSeq=167457), [2019후10418](https://law.go.kr/LSW/precInfoP.do?mode=0&precSeq=230725) 판결에 따라 실제 거래계에서 출처표시로 기능하는지는 표시 태양과 사용 경위 등을 종합해 판단해야 한다.
따라서 이 명칭은 필요한 범위의 평문으로만 사용하고, 별도 근거 없이 로고, 공식·제휴·후원·인증·파트너 표현을 사용하지 않는다. 각 상표의 권리는 해당 권리자에게 있다. 이 문서는 기사·요약의 저작권, 데이터베이스권, 언론사 권리, 약관·계약 또는 재사용의 적법성을 판단하지 않는다.
전체 검토: [제3자 상표의 기능 설명·호환 대상 표시 검토](https://github.com/NomaDamas/k-skill/blob/dev/docs/legal/trademark-use-review.md)
skill.json
{
"name": "naver-news-search",
"description": "네이버 검색 Open API 뉴스 검색(news.json)을 k-skill-proxy 경유로 조회해 최신 뉴스 기사 제목·발행시각·링크·요약을 보수적으로 정리한다. 사용자는 별도 API 키 발급 없이 호출한다.",
"profiles": [
"proxy",
"lookup"
],
"frontmatter": "name: naver-news-search\ndescription: 네이버 검색 Open API 뉴스 검색(news.json)을 k-skill-proxy 경유로 조회해 최신 뉴스 기사 제목·발행시각·링크·요약을 보수적으로 정리한다. 사용자는 별도 API 키 발급 없이 호출한다.\nlicense: MIT\nmetadata:\n category: information\n locale: ko-KR\n phase: v1"
}
SKILL.md
---
name: naver-news-search
description: 네이버 검색 Open API 뉴스 검색(news.json)을 k-skill-proxy 경유로 조회해 최신 뉴스 기사 제목·발행시각·링크·요약을 보수적으로 정리한다. 사용자는 별도 API 키 발급 없이 호출한다.
license: MIT
metadata:
category: information
locale: ko-KR
phase: v1
---
# naver-news-search
<!-- k-skill:cli-stub — generated by scripts/generate-skill-stubs.js; edit skill.json / instruction.md instead -->
## Get the full instructions (required first step)
Run this and follow its output as the primary instructions for this skill:
```bash
npx -y @nomadamas/k-skill@0 instruct naver-news-search
```
The CLI detects the current runtime (Dolshoi vault/CloakBrowser vs generic) and prints only the applicable instructions, always up to date. Helper files bundled with the CLI are listed by:
```bash
npx -y @nomadamas/k-skill@0 files naver-news-search
```
Keep the CLI and every coding-agent skill install current (including Vercel Agent Skills) with:
```bash
npx -y @nomadamas/k-skill@0 update
```
If `npx` is unavailable, install Node.js 18+ or follow https://github.com/NomaDamas/k-skill#readme, or read the source instructions at https://github.com/NomaDamas/k-skill/blob/main/naver-news-search/instruction.md.
## Legal disclaimer (required)
This skill is not an official feature of, officially supported by, affiliated with, sponsored by, approved by, or developed in collaboration with any third-party trademark owner or service operator it identifies. Third-party names are used only to describe the skill's function, lookup target, or compatibility.
Any automated collection of publicly accessible information must be limited to personal, non-organizational lookup. Do not use this skill for systematic or bulk crawling, database building, access-control or block circumvention, or conduct that interferes with a third party's business or service.
Read the full Korean legal disclaimer, including the cited Korean Supreme Court precedents and statutory limits, before use:
```bash
npx -y @nomadamas/k-skill@0 read naver-news-search references/DISCLAIMER.md
```
## Hard rules even without the CLI
- Never execute payment, message/email delivery, final submission, cancellation, or public posting without the user's explicit approval immediately beforehand.
- Never ask for, print, or store plaintext credentials in chat, files, or shell arguments.
- Never bypass legal, physical-presence, CAPTCHA, identity-proofing, or electronic-signature boundaries.