[π°π· νκ΅μ΄](README.md) Β· πΊπΈ English
# ir-search
> β οΈ **This skill covers South Korean government / public-agency support programs only.** It does not cover programs from any other country, and the announcements it processes are written in Korean.
A plugin for **exhaustive surveys of Korean government support programs** (startup grants, commercialization funding, incubation space, R&D calls, vouchers, competitions) β installable in **Claude Code, Codex, agy (Antigravity CLI), Cursor, Gemini CLI, and Grok Build (x.ai)**.
It crawls every currently-open announcement from K-Startup, Bizinfo, NIPA, KOCCA, and SMTECH, matches them against the profile of the project in your working folder β founding stage, region, needs (funding / space / R&D) β verifies eligibility against the original announcement text, and produces a report with a three-tier classification:
- **Group A β Apply right now**: eligible as-is (sorted by deadline, imminent ones flagged)
- **Group B β Unlocked by a requirement (roadmap)**: triggers like incorporation or securing investment, with chained paths spelled out (e.g., competition prize β non-metro incorporation β Pre-TIPS β TIPS)
- **Group C β Eligible with reframing**: concrete angles for re-describing your item in another domain's language (content production, social services, artΓtech, ...)
Why exhaustive review instead of keyword search: the programs an "AI startup" can actually win β content-production grants, artΓtech residencies, social-service startup funds β never match the keyword "AI".
## Sample output (excerpt)
A run saves the report (md), raw jsonl, and verified announcement texts to `~/Documents/μ§μμ¬μ
μ‘°μ¬__/`. The report looks like this (announcements themselves are in Korean):
```markdown
# Support-program survey β ββ (AI voice SaaS, pre-founder, Chungnam)
Surveyed 2026-07-11 Β· reviewed all 262 K-Startup + 300 Bizinfo items β verified 31 candidates
## Group A β Apply right now (by deadline)
1. **2026 Youth Startup Academy, extra round** β KOSME
- Support: up to β©100M commercialization fund + space + mentoring
- Eligibility: pre-founders β Β· under 39 β Β· nationwide β
- Deadline: 2026-07-18 16:00 (D-7) β οΈ imminent
- https://www.k-startup.go.kr/web/contents/bizpbanc-ongoing.do?schM=view&pbancSn=1784xx
## Group B β Unlocked by a requirement (roadmap)
- **Pre-TIPS**: trigger = incorporating outside the capital region.
Chain: competition prize/seed β Chungnam incorporation β Pre-TIPS β TIPS
## Group C β Eligible with reframing
- **Content production grant (KOCCA)**: reframe "AI voice tech" as an
"audio-content production pipeline". Risk: deliverable must be content
## Absence check
- Pre-Startup Package: not currently open (usually announced in Feb)
## Priority actions
- by 7/18: apply to A-1 (note the 16:00 cutoff)
- by 7/25: draft C-1 content framing, then call the agency to confirm
```
Every mentioned announcement carries its original URL; anything not stated in the announcement text is marked "unknown" rather than guessed.
## Covered sources
| Source | What it is | Crawler |
| --------------------------------------- | ------------------------------------------------- | --------------------- |
| [K-Startup](https://www.k-startup.go.kr) | Unified startup-support portal (default) | `kstartup_crawl.py` (+ `kstartup_api.py`) |
| [Bizinfo](https://www.bizinfo.go.kr) | All-ministry/region SME support (widest coverage) | `sources_crawl.py` |
| [NIPA](https://www.nipa.kr) | AI / ICT programs | `sources_crawl.py` |
| [KOCCA](https://www.kocca.kr) | Content-industry programs | `sources_crawl.py` |
| [SMTECH](https://www.smtech.go.kr) | SME R&D calls | `sources_crawl.py` |
More sources (NIA, IITP, IRIS, regional agencies) are catalogued in `skills/ir-search/references/sources.md`.
### K-Startup official API (optional β more accurate & faster when present, crawl otherwise)
`kstartup_crawl.py list` uses the official [data.go.kr](https://www.data.go.kr/data/15125364/openapi.do) K-Startup Open API (dataset 15125364) when a **data.go.kr service key** is available, and **automatically falls back to the public-page crawler when no key is present or the API fails / is blocked / returns an unexpected shape** (identical output schema and manifest). The key is read from the repo-root `.env` (`DATA_GO_KR_KEY=...`), the `DATA_GO_KR_KEY` env var, or the shared `~/.config/data_go_kr_key`, and is **never printed to logs, errors, or the command line** (`.env` is gitignored). The same key is reused by sole-search's gov24.
- **Coverage honesty**: this dataset is ordered newest-registration-first, so if the API proves exhaustion via `totalCount` it records `stop_reason: api` (status `ok`, exit 0); if it stops early on the newest-first window it records `stop_reason: api-window` (status `partial`, **exit 2**). The crawl is the authority for exhaustive coverage, and diff mode does not conclude GONE from a partial (`api-window`) run.
- **Bizinfo stays crawl** β its official API needs a separate `crtfcKey` (issued by Bizinfo, distinct from the data.go.kr key) and the crawler already provides full coverage, so no API is used there.
## Install
**One-command install** β detects installed host CLIs (claude/codex/agy/gemini) and installs for each; falls back to cloning into `~/.agents/skills/` (for Cursor / Grok Build) when no CLI is found. Also handles the `curl_cffi` dependency:
```bash
curl -fsSL https://raw.githubusercontent.com/djfksjd/ir-search/main/install.sh | bash
```
To install manually instead, pick the method for the agent you use β one tree supports all hosts.
### Claude Code
```bash
claude plugin marketplace add djfksjd/ir-search
claude plugin install ir-search@djfksjd
```
The `curl_cffi` dependency is auto-installed by a SessionStart hook.
### Codex
```bash
codex plugin marketplace add djfksjd/ir-search
codex plugin add ir-search@djfksjd
```
### agy (Antigravity CLI)
```bash
agy plugin install djfksjd/ir-search
agy plugin enable ir-search
pip3 install 'curl_cffi>=0.15' # no SessionStart hook in agy β install manually
```
### Gemini CLI
```bash
gemini extensions install https://github.com/djfksjd/ir-search
pip3 install 'curl_cffi>=0.15'
```
The extension manifest (`gemini-extension.json`) auto-discovers the skill under `skills/` and loads `AGENTS.md` as context.
### Cursor / Grok Build (x.ai)
Both read the shared skills directory (`~/.agents/skills/`) as well as `~/.claude/skills/`. A single clone is enough:
```bash
mkdir -p ~/.agents/skills
git clone https://github.com/djfksjd/ir-search.git ~/.agents/skills/ir-search
pip3 install 'curl_cffi>=0.15'
```
(The root-level `SKILL.md` symlink makes the clone directory itself act as the skill folder. Grok Build also reads Claude Code plugins directly, so if you installed via the Claude Code method above, nothing extra is needed.)
### Classic (clone directly as a Claude Code skill)
```bash
git clone https://github.com/djfksjd/ir-search.git ~/.claude/skills/ir-search
pip3 install 'curl_cffi>=0.15'
```
## Use
With your project folder open in any agent:
```
μ°λ¦¬ μμ΄ν
μ λ§λ μ§μμ¬μ
μ μμ‘°μ¬ ν΄μ€
(Survey the support programs that fit this project)
```
or `/ir-search` (Claude Code). The agent reads the project context from the folder and asks only for the missing profile fields (founding stage, region, needs) before starting.
**Built for repeated use:**
- The profile is saved to `ir-search-profile.md` in your project folder β subsequent surveys just confirm "anything changed?" instead of re-asking
- Re-surveys are diffed against the previous run automatically, reporting only **new announcements / deadline changes / closed opportunities** instead of re-reading 250+ items every time
The crawlers also work standalone (paths relative to the plugin directory):
```bash
python3 skills/ir-search/scripts/kstartup_crawl.py list -o all.jsonl # all open K-Startup announcements
python3 skills/ir-search/scripts/kstartup_crawl.py detail 178481 -o details/ # K-Startup detail pages
python3 skills/ir-search/scripts/sources_crawl.py list bizinfo -o biz.jsonl # Bizinfo
python3 skills/ir-search/scripts/sources_crawl.py list all -o sources.jsonl # all four extra sources
python3 skills/ir-search/scripts/sources_crawl.py detail -o details/ # detail page from any source
```
## Layout
```
ir-search/
βββ install.sh # one-command installer (auto-detects hosts)
βββ plugin.json # agy marker (name/version/description)
βββ gemini-extension.json # Gemini CLI extension manifest
βββ AGENTS.md # shared agent guide (all hosts)
βββ SKILL.md β skills/ir-search/SKILL.md # symlink β lets a plain clone act as the skill folder
βββ .claude-plugin/ # Claude Code manifests
β βββ plugin.json # + inline SessionStart hook (curl_cffi auto-install)
β βββ marketplace.json # enables `claude plugin marketplace add`
βββ .codex-plugin/
β βββ plugin.json # Codex manifest (+ interface)
βββ .agents/skills β skills # symlink β shared standard (Cursor, Grok Build, β¦)
βββ .cursor/skills β skills # symlink β Cursor project skills
βββ .gemini/skills β skills # symlink β Gemini CLI workspace skills
βββ skills/
βββ ir-search/
βββ SKILL.md # workflow (profile β collect all β review all β verify β 3-tier report)
βββ scripts/
β βββ kstartup_crawl.py # K-Startup crawler (API-first, crawl fallback)
β βββ kstartup_api.py # K-Startup official Open API client (data.go.kr)
β βββ sources_crawl.py # Bizinfo / NIPA / KOCCA / SMTECH crawler
β βββ attach_download.py # shared attachment download (robots-safe, hash)
β βββ run_manifest.py # shared run_manifest.json writer (coverage)
β βββ diff_surveys.py # incremental re-survey diff (new / changed / closed)
βββ references/sources.md # source registry (verified access recipes + secondary sources)
```
Note: `SKILL.md` is written in Korean β the whole domain (announcements, eligibility criteria, report vocabulary) is Korean, and the model works with it natively.
## Caveats
- Announcement details (deadlines, eligibility, amounts) change frequently. **Always confirm with the accepting agency before applying.** The report reflects the announcement text at survey time.
- Only public announcement pages are accessed, with a delay between requests. Please respect the target sites' terms of service.
## License
MIT