Skip to main content
ClaudeWave
Skill366 repo starsupdated 1mo ago

ir-search

한국 정부·공공기관 지원사업(창업지원, 사업화 자금, 입주공간, R&D, 바우처, 경진대회) 전수조사 및 프로젝트 적합성 판정 스킬. K-Startup·기업마당(bizinfo)·NIPA·KOCCA·SMTECH 공고를 크롤링해 현재 작업 폴더의 프로젝트(아이템) 프로필에 맞는 사업을 "즉시 지원 가능 / 요건 충족 시 / 변형하면 가능" 3단계로 분류하고 마감일·자격요건을 원문 검증해 보고서를 만든다. 사용자가 "지원사업 찾아줘", "정부지원", "창업지원 사업", "입주공간/사업화 자금 알아봐", "공모전/경진대회 조사", "우리 아이템에 맞는 지원사업", "K-Startup/기업마당 조사" 등을 요청하면 반드시 이 스킬을 사용한다. 이전에 조사한 적이 있는 프로젝트에서 "재조사", "새로 나온 지원사업 있나", "지난번 이후 뭐 올라왔나"를 물으면 diff 모드(증분 재조사)로 이 스킬을 사용한다. 특정 사이트를 지목하지 않아도 지원사업·보조금·정부과제 탐색 의도가 보이면 트리거된다. 단, 이미 운영 중인 소상공인·가게·점포·자영업자의 지원(소상공인 지원금, 정책자금 대출, 가게 시설개선, 소상공인24, 폐업·재기 지원)은 이 스킬이 아니라 sole-search 스킬을 사용한다. 신호가 섞이면(예: ''온라인 셀러 지원금'') 어느 쪽인지 한 번 묻는다. 사용자 신분보다 요청 목적이 우선이다 — 가게 사장이라도 신규 아이템 창업지원·R&D를 찾으면 ir-search. 한국 지원사업 전용.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/djfksjd/ir-search /tmp/ir-search && cp -r /tmp/ir-search/skills/ir-search ~/.claude/skills/ir-search
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# ir-search — 지원사업 전수조사

> **스크립트 위치**: 크롤러·유틸리티는 플러그인 디렉토리 아래 `${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/` 에 있다. `${CLAUDE_PLUGIN_ROOT}`가 미정의(단독 스킬 설치)면 폴백: `~/.claude/skills/ir-search/skills/ir-search/scripts/` (클래식 설치) 또는 **이 SKILL.md와 같은 폴더의 `scripts/`**. 아래 코드 블록의 `${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/` 부분을 실제 확인된 경로로 치환해 실행한다.

정부 지원사업 탐색의 3대 실패 원인을 구조적으로 막는 스킬이다:

1. **키워드 검색의 사각지대** — "AI"로 검색하면 변형 지원이 가능한 콘텐츠·사회서비스·예술융합 사업을 놓친다. → 모집중 공고 **전수(全數)** 수집 후 제목 전체를 직접 검토한다.
2. **자격요건 오판** — 제목만 보고 지원했다가 "예비창업자 불가", "지역 제한"으로 탈락한다. → 후보는 반드시 상세공고 원문에서 신청대상·지역제한을 검증한다.
3. **추정 보고** — "아마 될 것"이라는 결론은 방향을 망친다. → 공고 텍스트에 없는 것은 '불명'으로 표기하고 접수기관 유선확인을 권고한다.

## 워크플로

### 0단계 — 신청자(아이템) 프로필 구축

**먼저 프로젝트 폴더에서 `ir-search-profile.md`를 찾는다.** 있으면 내용을 요약해 보여주고 "바뀐 것 있나요?" **한 번만** 확인한 뒤 바로 1단계로 간다 — 같은 질문을 조사 때마다 반복하는 것이 이 스킬의 가장 큰 마찰이므로, 프로필이 있으면 아래 질문은 생략한다.

없으면 현재 작업 폴더에서 프로젝트 정보를 수집한다: CLAUDE.md, README, docs/, 메모리(있다면). 그래도 비는 항목은 사용자에게 **한 번에** 묻는다 (여러 번 나눠 묻지 않는다):

- **창업 단계**: 예비창업자(사업자 미등록) / 개인사업자 / 법인 + 업력 — 가장 많은 사업을 가르는 축
- **지역 연고**: 현재 소재지, 이전 가능 지역 — 지역 제한 사업 판정과 "비수도권" 요건(프리팁스 등)에 필요
- **대표자 특성**: 연령대(청년 만39세 이하 / 중장년 만40세 이상), 성별(여성 특화 사업), 소속(대학·출연연 재직 여부)
- **필요한 것**: 사업화 자금 / 입주공간 / R&D / 멘토링·컨설팅 / 글로벌 / 인프라(GPU·장비) — 복수 선택
- **아이템 한 줄 요약**: 기술·업종 (변형 프레이밍 판단의 재료)

이미 대화나 폴더에서 파악된 항목은 다시 묻지 않는다.

**프로필 확정 후 프로젝트 폴더에 `ir-search-profile.md`로 저장한다** (기존 파일이 있으면 갱신). 형식:

```markdown
# ir-search 프로필
- 대상: <프로젝트명 (아이템 한 줄)>
- 창업 단계: <예비창업자 / 개인사업자 / 법인 N년차>
- 지역 연고: <소재지 (이전 가능: ...)>
- 대표자: <연령대 / 성별 / 소속>
- 필요한 것: <자금, 공간, R&D, ...>
- 마지막 조사: <보고서 폴더 경로> (<YYYY-MM-DD>)
```

`마지막 조사` 줄은 매 조사 완료 시 갱신한다 — 재조사(diff 모드)가 이 경로로 직전 결과를 찾는다. 이 파일은 로컬 프로젝트 폴더에만 저장되며, 프로필 축 외의 개인정보는 넣지 않는다.

### 0.5단계 — 조사 범위 명시 선택

실제 수집 전에 범위 계획기를 실행해 사용자 선택과 커버리지 한계를 고정한다. 계획기는
Python 표준 라이브러리만 사용하고 **네트워크·LLM을 호출하지 않으므로 모델 토큰은 0**이다.

```bash
# 빠른 확인: K-Startup만
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
    --preset quick -o scope-plan.json

# 특정 소스 하나만
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
    --preset focused --source kstartup -o scope-plan.json

# 프로필 기반 권장 범위
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
    --preset recommended --need ai --need rnd --province 서울 -o scope-plan.json

# 사용자가 직접 고른 범위 (후보 소스는 자동화하지 않고 manual로 남음)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
    --preset custom --source kstartup --source iris -o scope-plan.json
```

프리셋 의미:

- `quick`: K-Startup만. 빠른 확인이지 전체 조사가 아니다
- `focused`: 사용자가 지목한 소스 정확히 하나
- `recommended`: K-Startup·기업마당 + 프로필 태그에 맞는 **검증된** 어댑터
- `all_registered`: 현재 저장소에 검증된 자동 어댑터 5개 전체. 인터넷 전체가 아니다
- `all_known`: 등록 어댑터와 알려진 공식 후보 전체. 후보는 모두 수동 확인으로 남는다
- `custom`: 사용자가 명시한 소스 조합. 미검증 후보는 `candidate/manual`

`scope-plan.json`의 모든 소스 상태(`selected / omitted_by_user / not_applicable`,
`automated / manual`)와 요청 수·시간 추정을 먼저 보여준다. 보고서에는
`scope_fingerprint`와 "선택 범위 기준" 커버리지를 기록한다. 재조사는 직전과 fingerprint가
같을 때만 GONE·UNCHANGED 승계를 허용한다. fingerprint가 다르면 소스 제외를 GONE으로
오판하지 말고 범위 변경으로 표시해 전체 재판정한다. 후보·수동 출처 목록과 등록 조건은
`references/sources.md`를 따른다.

### 재조사 — diff 모드

프로필의 `마지막 조사` 폴더가 존재하면 (또는 사용자가 이전 보고서 폴더를 지목하면) **전수 재검토 대신 증분 조사**를 한다. 지원사업 조사는 2~4주마다 반복하는 일이고, 매번 250건+를 다시 읽는 것은 낭비다:

1. 1단계 크롤링은 **직전과 같은 소스 구성으로** 그대로 실행한다 (소스를 빼면 diff가 그 소스를 비교 못 하고, 새 소스는 전수 검토 대상이 된다)
2. 새 보고서 폴더에 jsonl 저장 후 비교 — 프로필 스냅샷이 있으면 반드시 함께 넘긴다:
   ```bash
   python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/diff_surveys.py" <직전_폴더> <새_폴더> --out new_items.jsonl \
       --old-profile <직전_폴더>/ir-profile-snapshot.md --new-profile ir-search-profile.md
   ```
3. **검토·상세검증은 `new_items.jsonl`(신규 + 변경 + NEEDS_REHASH + 새 소스분)만** 한다. UNCHANGED 항목은 직전 보고서의 A/B/C 판정을 그대로 승계하고 재검증하지 않는다. `--out` 파일은 sole-search와 공통인 wrapper 형식이다 — 한 줄에 `{"kind": NEW|CHANGED|NEEDS_REHASH, "diff_status": kind와 동일, "changed_fields": [...], "record": {원본 레코드 + source/source_id 정규화}}` (`references/diff_record_schema.json` 계약). NEEDS_REHASH(직전엔 content_hash가 있었는데 새 조사에 없음)는 상세 재수집(`--merge-into`) 후 재분류한다. 소멸 공고는 `--out`이 아니라 옆의 `gone_new_items.jsonl`(kind GONE)에 기록된다 — 기회 소멸 알림 재료
4. 상세 검증(`--merge-into`)을 거친 레코드는 content_hash로도 비교된다: 목록 필드가 그대로여도 본문(해시)이 바뀌면 CHANGED다. 두 조사의 hash_version이 다르면(v2↔v3 산식 전환 — 값 비교 불가) **1회 CHANGED(상세 재검증)**로 흡수한다
5. **프로필의 판정 축(창업 단계·지역·연령 등)이 바뀌었으면 UNCHANGED 승계 금지 — 전수 재검토한다.** diff 스크립트가 fingerprint로 이를 검증하며, 프로필 인자를 한쪽만 줬거나 fingerprint가 다르면 "CARRY-OVER INVALIDATED"를 출력하고 전건을 `--out`에 기록한다
6. CHANGED(제목·기간·상태 변경)는 changed_fields를 보고 판단: 마감일만 연장이면 판정 유지 + 마감일 갱신, 단 이전 A그룹 건이면 상세를 재확인 (연장 공고는 자격요건 변경이 동반되기도 한다)
7. 보고서는 증분 구조로: **신규 공고 (A/B/C 분류) / 변경 (changed_fields 명시) / 종료된 공고 중 직전 A그룹이던 것 (기회 소멸 알림) / 승계 요약 (직전 A그룹 현황 + 남은 마감)**. 직전 보고서 경로를 상단에 링크한다
8. **조사 완료 시 사용한 프로필 사본을 보고서 폴더에 `ir-profile-snapshot.md`로 저장한다** — 다음 diff의 `--old-profile` 입력이 된다

diff 스크립트가 출력하는 WARNING(재크롤 안 된 소스)이 있으면 그 소스는 "미갱신"으로 보고서에 명시한다 — 조용히 빠뜨리지 않는다.

### 1단계 — 전수 수집 (다중 소스)

두 개의 검증된 크롤러가 동봉되어 있다:

```bash
# 기본: K-Startup 모집중 전수 (창업지원 중심, 250~300건, 1~2분)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/kstartup_crawl.py" list -o kstartup_all.jsonl

# 보강: 기업마당·NIPA·KOCCA·SMTECH (프로필에 따라 선택)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" list bizinfo -o bizinfo.jsonl --max-pages 20
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" list all -o sources_all.jsonl
```

**K-Startup 공식 API 우선 (data.go.kr 키가 있으면)**: `kstartup_crawl.py list`는 data.go.kr 서비스키가 있으면 **공식 오픈API(K-Startup 사업공고, 데이터셋 15125364)로 모집중 공고를 받고**, 키가 없거나 API가 실패/응답 이상/커버리지 부족이면 **자동으로 공개 페이지 크롤로 폴백**한다. 출력 jsonl 스키마·`run_manifest.json`은 두 경로가 동일하다. **커버리지 정직성**: 이 데이터셋은 등록순(최신우선)이고 모집중 공고가 마감 이력 사이에 분산돼 있어, API는 최신우선 스캔으로 모집중 집합을 모은다 — 데이터셋 끝까지 스캔해 totalCount로 소진을 증명하면 manifest `stop_reason: "api"`·status `ok`·**exit 0**(전수 증명), 최신우선 무마감 페이지 연속으로 조기 종료하면 `stop_reason: "api-window"`·status `partial`·**exit 2**로 정직하게 남긴다(최근 창(window) 커버리지, 전수 증명 아