by djfksjd
๐ฐ๐ท ํ๊ตญ ์ ๋ถ ์ง์์ฌ์ ์ ์์กฐ์ฌ ์์ด์ ํธ ์คํฌ [Claude CodeยทCodexยทagy(Antigravity)ยทCursorยทGemini CLIยทGrok Build ์ง์] K-Startupยท๊ธฐ์ ๋ง๋นยทNIPAยทKOCCAยทSMTECH ํฌ๋กค๋ง + ์ฆ์/๋ก๋๋งต/๋ณํ 3๋ถ๋ฅ (Korea-only)
# Add to your Claude Code skills
git clone https://github.com/djfksjd/ir-searchLast scanned: 7/12/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-07-12T06:31:55.109Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}ir-search is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by djfksjd. ๐ฐ๐ท ํ๊ตญ ์ ๋ถ ์ง์์ฌ์ ์ ์์กฐ์ฌ ์์ด์ ํธ ์คํฌ [Claude CodeยทCodexยทagy(Antigravity)ยทCursorยทGemini CLIยทGrok Build ์ง์] K-Startupยท๊ธฐ์ ๋ง๋นยทNIPAยทKOCCAยทSMTECH ํฌ๋กค๋ง + ์ฆ์/๋ก๋๋งต/๋ณํ 3๋ถ๋ฅ (Korea-only). It has 360 GitHub stars.
Yes. ir-search passed SkillsLLM's automated security scan โ a dependency vulnerability audit plus prompt-injection heuristics โ with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/djfksjd/ir-search" and add it to your Claude Code skills directory (see the Installation section above). ir-search ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
ir-search is primarily written in Python. It is open-source under djfksjd on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ir-search against similar tools.
No comments yet. Be the first to share your thoughts!
์คํฌ๋ฆฝํธ ์์น: ํฌ๋กค๋ฌยท์ ํธ๋ฆฌํฐ๋ ํ๋ฌ๊ทธ์ธ ๋๋ ํ ๋ฆฌ ์๋
${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๋ ์คํจ ์์ธ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ง๋ ์คํฌ์ด๋ค:
๋จผ์ ํ๋ก์ ํธ ํด๋์์ ir-search-profile.md๋ฅผ ์ฐพ๋๋ค. ์์ผ๋ฉด ๋ด์ฉ์ ์์ฝํด ๋ณด์ฌ์ฃผ๊ณ "๋ฐ๋ ๊ฒ ์๋์?" ํ ๋ฒ๋ง ํ์ธํ ๋ค ๋ฐ๋ก 1๋จ๊ณ๋ก ๊ฐ๋ค โ ๊ฐ์ ์ง๋ฌธ์ ์กฐ์ฌ ๋๋ง๋ค ๋ฐ๋ณตํ๋ ๊ฒ์ด ์ด ์คํฌ์ ๊ฐ์ฅ ํฐ ๋ง์ฐฐ์ด๋ฏ๋ก, ํ๋กํ์ด ์์ผ๋ฉด ์๋ ์ง๋ฌธ์ ์๋ตํ๋ค.
์์ผ๋ฉด ํ์ฌ ์์ ํด๋์์ ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ์์งํ๋ค: CLAUDE.md, README, docs/, ๋ฉ๋ชจ๋ฆฌ(์๋ค๋ฉด). ๊ทธ๋๋ ๋น๋ ํญ๋ชฉ์ ์ฌ์ฉ์์๊ฒ ํ ๋ฒ์ ๋ฌป๋๋ค (์ฌ๋ฌ ๋ฒ ๋๋ ๋ฌป์ง ์๋๋ค):
์ด๋ฏธ ๋ํ๋ ํด๋์์ ํ์ ๋ ํญ๋ชฉ์ ๋ค์ ๋ฌป์ง ์๋๋ค.
ํ๋กํ ํ์ ํ ํ๋ก์ ํธ ํด๋์ ir-search-profile.md๋ก ์ ์ฅํ๋ค (๊ธฐ์กด ํ์ผ์ด ์์ผ๋ฉด ๊ฐฑ์ ). ํ์:
# ir-search ํ๋กํ
- ๋์: <ํ๋ก์ ํธ๋ช
(์์ดํ
ํ ์ค)>
- ์ฐฝ์
๋จ๊ณ: <์๋น์ฐฝ์
์ / ๊ฐ์ธ์ฌ์
์ / ๋ฒ์ธ N๋
์ฐจ>
- ์ง์ญ ์ฐ๊ณ : <์์ฌ์ง (์ด์ ๊ฐ๋ฅ: ...)>
- ๋ํ์: <์ฐ๋ น๋ / ์ฑ๋ณ / ์์>
- ํ์ํ ๊ฒ: <์๊ธ, ๊ณต๊ฐ, R&D, ...>
- ๋ง์ง๋ง ์กฐ์ฌ: <๋ณด๊ณ ์ ํด๋ ๊ฒฝ๋ก> (<YYYY-MM-DD>)
๋ง์ง๋ง ์กฐ์ฌ ์ค์ ๋งค ์กฐ์ฌ ์๋ฃ ์ ๊ฐฑ์ ํ๋ค โ ์ฌ์กฐ์ฌ(diff ๋ชจ๋)๊ฐ ์ด ๊ฒฝ๋ก๋ก ์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๋๋ค. ์ด ํ์ผ์ ๋ก์ปฌ ํ๋ก์ ํธ ํด๋์๋ง ์ ์ฅ๋๋ฉฐ, ํ๋กํ ์ถ ์ธ์ ๊ฐ์ธ์ ๋ณด๋ ๋ฃ์ง ์๋๋ค.
์ค์ ์์ง ์ ์ ๋ฒ์ ๊ณํ๊ธฐ๋ฅผ ์คํํด ์ฌ์ฉ์ ์ ํ๊ณผ ์ปค๋ฒ๋ฆฌ์ง ํ๊ณ๋ฅผ ๊ณ ์ ํ๋ค. ๊ณํ๊ธฐ๋ Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ฌ์ฉํ๊ณ ๋คํธ์ํฌยทLLM์ ํธ์ถํ์ง ์์ผ๋ฏ๋ก ๋ชจ๋ธ ํ ํฐ์ 0์ด๋ค.
# ๋น ๋ฅธ ํ์ธ: 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/manualscope-plan.json์ ๋ชจ๋ ์์ค ์ํ(selected / omitted_by_user / not_applicable,
automated / manual)์ ์์ฒญ ์ยท์๊ฐ ์ถ์ ์ ๋จผ์ ๋ณด์ฌ์ค๋ค. ๋ณด๊ณ ์์๋
scope_fingerprint์ "์ ํ ๋ฒ์ ๊ธฐ์ค" ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ธฐ๋กํ๋ค. ์ฌ์กฐ์ฌ๋ ์ง์ ๊ณผ fingerprint๊ฐ
๊ฐ์ ๋๋ง GONEยทUNCHANGED ์น๊ณ๋ฅผ ํ์ฉํ๋ค. fingerprint๊ฐ ๋ค๋ฅด๋ฉด ์์ค ์ ์ธ๋ฅผ GONE์ผ๋ก
์คํํ์ง ๋ง๊ณ ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ํ์ํด ์ ์ฒด ์ฌํ์ ํ๋ค. ํ๋ณดยท์๋ ์ถ์ฒ ๋ชฉ๋ก๊ณผ ๋ฑ๋ก ์กฐ๊ฑด์
references/sources.md๋ฅผ ๋ฐ๋ฅธ๋ค.
ํ๋กํ์ ๋ง์ง๋ง ์กฐ์ฌ ํด๋๊ฐ ์กด์ฌํ๋ฉด (๋๋ ์ฌ์ฉ์๊ฐ ์ด์ ๋ณด๊ณ ์ ํด๋๋ฅผ ์ง๋ชฉํ๋ฉด) ์ ์ ์ฌ๊ฒํ ๋์ ์ฆ๋ถ ์กฐ์ฌ๋ฅผ ํ๋ค. ์ง์์ฌ์
์กฐ์ฌ๋ 2~4์ฃผ๋ง๋ค ๋ฐ๋ณตํ๋ ์ผ์ด๊ณ , ๋งค๋ฒ 250๊ฑด+๋ฅผ ๋ค์ ์ฝ๋ ๊ฒ์ ๋ญ๋น๋ค:
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
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)์ ๊ธฐ๋ก๋๋ค โ ๊ธฐํ ์๋ฉธ ์๋ฆผ ์ฌ๋ฃ--merge-into)์ ๊ฑฐ์น ๋ ์ฝ๋๋ content_hash๋ก๋ ๋น๊ต๋๋ค: ๋ชฉ๋ก ํ๋๊ฐ ๊ทธ๋๋ก์ฌ๋ ๋ณธ๋ฌธ(ํด์)์ด ๋ฐ๋๋ฉด CHANGED๋ค. ๋ ์กฐ์ฌ์ hash_version์ด ๋ค๋ฅด๋ฉด(v2โv3 ์ฐ์ ์ ํ โ ๊ฐ ๋น๊ต ๋ถ๊ฐ) **1ํ CHANGED(์์ธ ์ฌ๊ฒ์ฆ)**๋ก ํก์ํ๋ค--out์ ๊ธฐ๋กํ๋คir-profile-snapshot.md๋ก ์ ์ฅํ๋ค โ ๋ค์ diff์ --old-profile ์
๋ ฅ์ด ๋๋คdiff ์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ ฅํ๋ WARNING(์ฌํฌ๋กค ์ ๋ ์์ค)์ด ์์ผ๋ฉด ๊ทธ ์์ค๋ "๋ฏธ๊ฐฑ์ "์ผ๋ก ๋ณด๊ณ ์์ ๋ช ์ํ๋ค โ ์กฐ์ฉํ ๋น ๋จ๋ฆฌ์ง ์๋๋ค.
๋ ๊ฐ์ ๊ฒ์ฆ๋ ํฌ๋กค๋ฌ๊ฐ ๋๋ด๋์ด ์๋ค:
# ๊ธฐ๋ณธ: 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) ์ปค๋ฒ๋ฆฌ์ง, ์ ์ ์ฆ๋ช
์๋ โ ๊ธฐ์กด exit ๊ณ์ฝ๊ณผ ์ผ์น). api-window์ผ ๋๋ ๋ค๋ฆ๊ฒ ์ฌ์ฐ์ฅ๋ ์ค๋๋ ๊ณต๊ณ ๊ฐ ๋๋ฝ๋ ์ ์์ผ๋ฏ๋ก ์ ์ ๋ณด์ฆ์ ํฌ๋กค์ด ๊ถ์์ด๋ฉฐ, diff ๋ชจ๋๋ partial(api-window) ์คํ์์ GONE(์๋ฉธ)์ ๋จ์ ํ์ง ์๋๋ค. reported_total์ ์ ์ฒด ์ด๋ ฅ ๊ฑด์๋ค. 401/403ยท200 ์์ฅ ์ฐจ๋จ(CAPTCHA)์ ํฌ๋กค๋ก ์ฐํํ์ง ์๊ณ **์๋ ์ ํ(exit 3)**ํ๋ค. ํค๋ DATA_GO_KR_KEY ํ๊ฒฝ๋ณ์ โ ๋ฆฌํฌ ๋ฃจํธ .env โ ~/.config/ir-search/data_go_kr_key ์์ผ๋ก ํ์ํ๊ณ ๋ก๊ทธยท์๋ฌยท๋ช
๋ นํ์ ์ ๋ ์ถ๋ ฅํ์ง ์๋๋ค(๋ฆฌ๋ค์ด๋ ํธยทURL ์ธ์ฝ๋ฉ ๋ณํ๊น์ง ๋ง์คํน, apis.data.go.kr ํธ์คํธ ๊ฒ์ฆ, ์๋ ๋ฆฌ๋ค์ด๋ ํธ ์ฐจ๋จ). ํค ๋ฐ๊ธ: data.go.kr/data/15125364/openapi.do์์ ํ์ฉ์ ์ฒญ โ ์๋น์คํค ํ์ธ(๊ฐ์ ํค๋ฅผ bizinfoยทgov24 ๋ฑ ๋ค๋ฅธ data.go.kr API์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ). .env๋ gitignore๋ก ์ปค๋ฐ๋์ง ์๋๋ค.
ํฌ๋กค๋ฌ ์ข ๋ฃ์ฝ๋ ๊ณ์ฝ: 0 = ์ ์ฒด ์์ง ์ฑ๊ณต / 2 = partial(๋คํธ์ํฌ ์ค๋ฅยท๊ตฌ์กฐ ๋ณ๊ฒฝยทํ์ด์ง ์บกยท์์ค ์ผ๋ถ ์คํจ). exit 2๋ฉด partial์ด๋ค โ ์ ๋ "0๊ฑด์ด์ง๋ง ์ฑ๊ณต"์ผ๋ก ์ทจ๊ธํ์ง ์๋๋ค. jsonl์ partial์ด์ด๋ ์์ง๋ถ๊น์ง๋ ์ ์ฅ๋ผ ์๋ค.
์ปค๋ฒ๋ฆฌ์ง ๊ธฐ๋ก โ run_manifest.json ๊ธฐ์ค: ๋ ํฌ๋กค๋ฌ ๋ชจ๋ list ์คํ์ด ๋๋๋ฉด(์ฑ๊ณตยทpartial ๋ชจ๋) ์ถ๋ ฅ jsonl ์์ run_manifest.json(schema v1)์ ์์์ ์ผ๋ก ๊ธฐ๋กํ๋ค. ์์ค๋ณ run ํญ๋ชฉ์ status(ok/partial)ยทexit_codeยทpages_fetchedยทcollectedยทduplicatesยทstop_reasonยทerrors๊ฐ ๋ค์ด ์๊ณ , ๊ฐ์ ํด๋์ ์ฌ๋ฌ ์์ค๋ฅผ ์์งํ๋ฉด(all ๋ชจ๋ ํฌํจ) ์์ค๋ณ ํญ๋ชฉ์ด ํ ํ์ผ์ ๋์ ๋๋ค(๊ฐ์ ์์ค๋ ์ต์ ์ผ๋ก ๊ต์ฒด). ๋ณด๊ณ ์์ ์ปค๋ฒ๋ฆฌ์ง(ํ๊ณ ๊ณ ์ง)๋ stderr ๋ฉ์์ง๊ฐ ์๋๋ผ ์ด ํ์ผ์ ์ฝ์ด ์์ฑํ๋ค โ ์ด๋ค ์์ค๊ฐ ๋ช ํ์ด์ง๊น์งยท๋ช ๊ฑด ์์ง๋๊ณ ์ ๋ฉ์ท๋์ง(stop_reasonยทerrors)๋ฅผ ๊ทธ๋๋ก ์ฎ๊ธด๋ค. status๊ฐ partial์ธ ์์ค๋ "๋ฏธ์ ์์ง"์ผ๋ก ๋ช
์ํ๋ค. manifest์๋ ์นด์ดํธยท์ํ๋ง ์๊ณ ๊ฒ์์ดยทํ๋กํยท๊ณต๊ณ ๋ณธ๋ฌธ์ ๋ฃ์ง ์๋๋ค.
์์ค ์ ํ ๋งคํธ๋ฆญ์ค โ ํ๋กํ์์ ๋์ถํ ํ์์ ๋ฐ๋ผ K-Startup์ ์ถ๊ฐํ๋ค:
| ํ๋กํ/ํ์ | ์ถ๊ฐ ์์ค | ์ด์ |
|---|---|---|
| ์ปค๋ฒ๋ฆฌ์ง ์ต๋ํ, ์ง์์ฒดยท์ ๋ถ์ฒ | bizinfo (๊ธฐ์
๋ง๋น) |
์ต๋ ํตํฉ ํฌํธ. K-Startup์ ์๋ ๊ณต๊ณ ๋ค์ |
| AI/ICT/SW ์์ดํ | nipa |
AI ๋ฐ์ฐ์ฒยทAI ์ตํฉ ๋ฑ ๋ํ ์ฌ์ |
| ์ฝํ ์ธ ์ต๊ธ (๋ณํ ํฌํจ) | kocca |
์ ์์ง์ยท์ฝํ ์ธ ์คํํธ์ |
| R&D ์๊ธ (๋ฒ์ธ) | smtech |
์ค๊ธฐ๋ถ ๊ธฐ์ ๊ฐ๋ฐ(๋๋ค๋ ๋ฑ) ์ ์ฉ ์ ์์ฒ |
์ฌ์ฉ์๊ฐ "์ ๋ถ ๋ค", "๋น ์ง์์ด"๋ฅผ ์๊ตฌํ๋ฉด all์ ์ด๋ค. ์์ค๋ณ ํน์ฑ๊ณผ ํจ์ ์ ${CLAUDE_PLUGIN_ROOT}/skills/ir-search/references/sources.md ์ฐธ์กฐ.
๊ต์ฐจ ์์ค ์ค๋ณต ์ฃผ์: ๊ฐ์ ์ฌ์ ์ด K-Startup๊ณผ ๊ธฐ์ ๋ง๋น์ ๋์ ๊ฒ์ฌ๋๋ ๊ฒฝ์ฐ๊ฐ ํํ๋ค. ์ ๋ชฉ ์ ์ฌ๋๋ก ์ค๋ณต์ ์ ๊ณ , ๋ณด๊ณ ์์๋ ์์ค๋ฅผ ๋ณ๊ธฐํ๋ค.
๊ธฐ์
๋ง๋น ์ฃผ์: ๊ณต๊ณ ๋์ด ๋ง๊ณ (๋ชจ์ง์ค 1,000๊ฑด ์ด์) ๋ง๊ฐ ์๋ฐ~์ง๋ ๊ฒ์ด ์์ฌ ๋์จ๋ค. ๋ ๋ชจ๋๋ฅผ ๊ตฌ๋ถํด ์ด๋ค โ ์ ์ ๋ชจ๋: --max-pages๋ฅผ ํ๋(~96p, 15๊ฑด/p)ํด ๋ชจ์ง์ค ์ ์ฒด๋ฅผ ์์ง. ์ต๊ทผ๋ถ ๋ชจ๋: ๊ธฐ๋ณธ --max-pages 20์ ์ต๊ทผ ๋ฑ๋ก๋ถ๋ง์ด๋ฉฐ ์ ์๊ฐ ์๋๋ค โ ์ด ๊ฒฝ์ฐ ๋ณด๊ณ ์์ ๋ฐ๋์ "๊ธฐ์
๋ง๋น์ ์ต๊ทผ ๋ฑ๋ก๋ถ N๊ฑด ๊ธฐ์ค"์ด๋ผ๊ณ ๋ช
์ํ๋ค. ์ด๋ ๋ชจ๋๋ ๋ง๊ฐ์ผ ํํฐ๋ฅผ ๋ฐ๋์ ์ ์ฉํ๋ค.
์์ง๋ ์ ์ฒด ๋ชฉ๋ก์ ์ ๋ชฉยท์นดํ ๊ณ ๋ฆฌยท๊ธฐ๊ดยท๋ง๊ฐ์ผ์ ์ง์ ์ฝ๊ณ ํ๋ณด๋ฅผ ๋ฝ๋๋ค. grep ํํฐ๋ง์ผ๋ก ๋์ฒดํ์ง ์๋๋ค โ ๋ณํ ๊ฐ๋ฅ์ฑ(์: TTS ๊ธฐ์ ์๊ฒ ์ฝํ ์ธ ์ ์์ง์, ์์ ร๊ธฐ์ ์ ์ฃผ์ฌ์ )์ ํค์๋๋ก ์กํ์ง ์๋๋ค.
์ ๋ณ ๊ธฐ์ค:
ํต์ 250๊ฑด ์ค 25~40๊ฑด์ด ํ๋ณด๋ก ๋จ๋๋ค.
ํ๋ณด ์ ๊ฑด์ ์์ธ๊ณต๊ณ ๋ฅผ ๊ฐ์ ธ์ ์๊ฒฉ์๊ฑด์ ์๋ฌธ ํ์ธํ๋ค:
# K-Startup ๊ณต๊ณ (๊ณต๊ณ ๋ฒํธ๋ก)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/kstartup_crawl.py" detail <pbancSn> <pbancSn> ... -o details/
# ๊ทธ ์ธ ์์ค ๊ณต๊ณ (jsonl์ url๋ก)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" detail <url> <url> ... -o details/
์ฒจ๋ถ ๋ค์ด๋ก๋ (--download-dir) โ ๋ณธ๋ฌธ์ด ์ฒจ๋ถํ์ผ(HWP/PDF)์๋ง ์๋ ๊ณต๊ณ ๋ฅผ ๊ฒ์ฆํ ๋ ์ด๋ค. ์์ค๋ณ ์ง์ ์ฌ๋ถ (robotsยท๊ณ์ฝ ์ค์ธก ๊ทผ๊ฑฐ๋ references/sources.md "์ฒจ๋ถ ๋ค์ด๋ก๋ ๊ณ์ฝ" ํ):
| ์์ค | ์ฒจ๋ถ ์ง์ | ๋น๊ณ |
|---|---|---|
| ๊ธฐ์ ๋ง๋น (bizinfo) | ๋ค์ด๋ก๋ | /uploads/โฆ๋ง robots ๋ถํ โ ๋งํฌ๋ง(skipped_robots) |
| NIPA | ๋ค์ด๋ก๋ | robots ์ ํ ์์ (2026-07-24) |
| SMTECH | ๋ค์ด๋ก๋ | /front/comn/AtchFileDownload.do (2026-07-24) |
| KOCCA | ๋ถ๋ถ | ํ์ 1(๊ณต๊ณ ๊ด๋ จ์๋ฃ) ๋ค์ด๋ก๋ / ํ์ 2(pms.kocca.kr)๋ ๊ณ์ฝ ๋ฏธํ์ โ ๋งํฌ๋ง(skipped_unverified) |
| K-Startup | ๋งํฌ๋ง | ์ฒจ๋ถ ๊ฒฝ๋ก /afile/โฆ ์ ์ฒด๊ฐ robots ๋ถํ (2026-07-23) |
# bizinfo/NIPA/KOCCA/SMTECH: ์ฒจ๋ถ ๋ค์ด๋ก๋ + ๋ชฉ๋ก jsonl์ ํด์ยท์ฒจ๋ถ ๋ณํฉ (jsonl์ url ์ฌ์ฉ)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" detail <url> \
-o details/ --download-dir attachments/ --merge-into sources.jsonl
# K-Startup: ์ฒจ๋ถ ๋งํฌ ์์ง + ๋ณธ๋ฌธ ํด์ (์๋ robots ์ฃผ์)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/kstartup_crawl.py" detail <pbancSn> \
-o details/ --download-dir attachments/ --merge-into kstartup_all.jsonl
์ฃผ์: KOCCA๋ ์ฒจ๋ถ ๋ชฉ๋ก์ด ํ์
(noticeFilePop.do)์ ์์ด ๊ณต๊ณ ๋น ์์ฒญ์ด 1ํ ์ถ๊ฐ๋๋ค. SMTECH ์์ธ๋ ๋ชฉ๋ก jsonl์ url(์ ์ฒด ์ฟผ๋ฆฌ ํฌํจ)์ ๊ทธ๋๋ก ์จ์ผ ํ๋ค โ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ด๋ฉด intro ํ์ด์ง๋ก 302๋๋ค.
๋์ ๊ณ์ฝ:
blocked_redirect) โ ํ์ฉ ๊ฒฝ๋ก๊ฐ robots ๋ถํ ๊ฒฝ๋ก๋ก 302ํด๋ ์์ฒญ์ด ๋๊ฐ์ง ์๋๋ค. ํ์ผ๋น 50MB ์คํธ๋ฆฌ๋ฐ ์ํ, sha256 ๊ธฐ๋ก, ์๋ฒ ํ์ผ๋ช
์ ์ ์ (latin-1โUTF-8 ๋ชจ์ง๋ฐ์ผ ๋ณต๊ตฌ + basename)ํด์๋ง ์ ์ฅํ๋ค. ์ฒจ๋ถ๋ --download-dir ์๋ ๊ณต๊ณ ๋ณ ํ์ ํด๋(pblancId/pbancSn)์ ์ ์ฅ๋ผ ์ฌ๋ฌ ๊ณต๊ณ ์ ๋๋ช
์ฒจ๋ถ(๊ณต๊ณ ๋ฌธ.pdf ๋ฑ)๊ฐ ์ถฉ๋ํ์ง ์๋๋ค.download_status: "skipped_robots"). ๊ธฐ์
๋ง๋น์ /uploads/โฆ๊ฐ, K-Startup์ ์ฒจ๋ถ ๋ค์ด๋ก๋ ๊ฒฝ๋ก ์ ์ฒด(/afile/โฆ)๊ฐ ๋ถํ๋ค(2026-07-23 ํ์ธ) โ ๋ฐ๋ผ์ K-Startup ์ฒจ๋ถ๋ ํญ์ ๋งํฌ๋ง ๋จ๊ณ , ๋ด์ฉ ํ์ธ์ด ํ์ํ๋ฉด ์ฌ์ฉ์์๊ฒ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ด๋ ค๋ฐ์ผ๋ผ๊ณ ์๋ดํ๋ค.content_hash๊ฐ v3(๋ณธ๋ฌธ + ์ ๋ ฌ๋ ์ฒจ๋ถ sha256 ๊ฒฐํฉ)๋ก ์คํฌํ๋๋ค(hash_version: 3). v2(๋ณธ๋ฌธ๋ง)์ v3๋ ๋น๊ต ๋ถ๊ฐ โ diff๊ฐ hash_version ๋ถ์ผ์น๋ฅผ 1ํ CHANGED(์์ธ ์ฌ๊ฒ์ฆ)๋ก ํก์ํ๋ค.hash_version: 2 โ None์ผ๋ก ์ง์ฐ์ง ์๋๋ค, ์ง์ฐ๋ฉด ๋ฐ๋ณต ์คํจ ์ฌ์ด์ ๋ณธ๋ฌธ ๋ณ๊ฒฝ์ด diff์์ ์จ๋๋ค) attachments_complete: false + exit 2(partial) ๋ก ๋๋๋ค. ์ด ๊ฒฝ์ฐ ๋ณด๊ณ ์ ํ๊ณ ๊ณ ์ง์ "์ฒจ๋ถ ๋ฏธ๊ฒ์ฆ"์ ๋ช
์ํ๋ค.--merge-into๋ ๋ชฉ๋ก jsonl์ ํด๋น ๋ ์ฝ๋์ content_hash / hash_version / attachments / attachments_complete๋ฅผ ์์์ ์ผ๋ก ๋ณํฉํ๋ค.๊ฐ ๊ฑด์์ ํ์ธํ ๊ฒ (์์ผ๋ฉด '๋ถ๋ช '์ผ๋ก ๊ธฐ๋ก):
๊ฑด์๊ฐ ๋ง์ผ๋ฉด(15๊ฑด ์ด์) ์๋ธ์์ด์ ํธ์๊ฒ ๊ตฌ์กฐํ ์ถ์ถ์ ์์ํ๊ณ , ๋ณธ์ธ์ ์ ํฉ์ฑ ํ์ ๋ง ์ง์ ํ๋ค.
๊ฒ์ฆ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๊ตฌ์กฐ๋ก ๋ถ๋ฅํ๋ค. ์ด 3๋ถ๋ฅ๊ฐ ์ด ์คํฌ์ ํต์ฌ ์ฐ์ถ๋ฌผ์ด๋ค:
~/Documents/์ง์์ฌ์
์กฐ์ฌ_<๋์>_<YYYYMMDD>/ โ ๋ณด๊ณ ์ md + ์์ jsonl + ์์ธ ์๋ฌธ...bizpbanc-ongoing.do?schM=view&pbancSn={๊ณต๊ณ ๋ฒํธ}, ๊ทธ ์ธ ์์ค๋ jsonl์ url ํ๋impersonate='safari'๋ก ์ ๊ทผ (์คํฌ๋ฆฝํธ ๋ด์ฅ, ๋ฏธ์ค์น ์ ์๋ด)--download-dir๋ก ์ฒจ๋ถ๋ฅผ ๋ด๋ ค๋ฐ์ ํ์ธํ ์ ์๊ณ , K-StartupยทKOCCA ํ์
2(PMS)๋ ๋งํฌ๋ง ์์ง๋๋ฏ๋ก "๋ณธ๋ฌธ์ ์ฒจ๋ถ ์ฐธ์กฐ(๋งํฌ) + ๋ฌธ์์ฒ"๋ก ๊ธฐ๋กํ๋ค๐ฐ๐ท ํ๊ตญ์ด ยท ๐บ๐ธ English
โ ๏ธ ํ๊ตญ(๋ํ๋ฏผ๊ตญ) ์ ๋ถยท๊ณต๊ณต๊ธฐ๊ด ์ง์์ฌ์ ์ ์ฉ์ ๋๋ค. ๋ค๋ฅธ ๊ตญ๊ฐ์ ์ง์ ํ๋ก๊ทธ๋จ์ ๋ค๋ฃจ์ง ์์ต๋๋ค.
ํ๊ตญ ์ ๋ถยท๊ณต๊ณต๊ธฐ๊ด ์ง์์ฌ์ ์ ์์กฐ์ฌ ์คํฌ โ Claude CodeยทCodexยทagy(Antigravity CLI)ยทCursorยทGemini CLIยทGrok Build(x.ai)์์ ์ธ ์ ์๋ ํ๋ฌ๊ทธ์ธ/์คํฌ.
K-Startupยท๊ธฐ์ ๋ง๋น(bizinfo)ยทNIPAยทKOCCAยทSMTECH์ ๋ชจ์ง์ค ๊ณต๊ณ ๋ฅผ ํฌ๋กค๋งํด์, ํ์ฌ ์์ ์ค์ธ ํ๋ก์ ํธ(์์ดํ )์ ํ๋กํ โ ์ฐฝ์ ๋จ๊ณยท์ง์ญยทํ์(์๊ธ/๊ณต๊ฐ/R&D) โ ์ ๋ง๋ ์ฌ์ ์ ๊ณจ๋ผ๋ด๊ณ , ์์ธ๊ณต๊ณ ์๋ฌธ์ผ๋ก ์๊ฒฉ์๊ฑด์ ๊ฒ์ฆํ ๋ค 3๋จ๊ณ๋ก ๋ถ๋ฅํ ๋ณด๊ณ ์๋ฅผ ๋ง๋ค์ด ์ค๋๋ค:
ํค์๋ ๊ฒ์์ด ์๋๋ผ ์ ์ ๊ฒํ ๋ฅผ ํ๋ ์ด์ : "AI ์คํํธ์ "์ด ์ง์ํ ์ ์๋ ์ฝํ ์ธ ์ ์์ง์ยท์์ ร๊ธฐ์ ์ ์ฃผยท์ฌํ์๋น์ค ์ฐฝ์ ์ง์ ๊ฐ์ ์ฌ์ ์ ํค์๋๋ก ์กํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์คํํ๋ฉด ~/Documents/์ง์์ฌ์
์กฐ์ฌ_<๋์>_<๋ ์ง>/์ ๋ณด๊ณ ์ md + ์์ jsonl + ์์ธ๊ณต๊ณ ์๋ฌธ์ด ์ ์ฅ๋ฉ๋๋ค. ๋ณด๊ณ ์๋ ์ด๋ฐ ์์
๋๋ค:
# ์ง์์ฌ์
์ ์์กฐ์ฌ โ โโ (AI ์์ฑ SaaS, ์๋น์ฐฝ์
์, ์ถฉ๋จ)
์กฐ์ฌ์ผ 2026-07-11 ยท K-Startup 262๊ฑด + ๊ธฐ์
๋ง๋น 300๊ฑด ์ ์ ๊ฒํ โ ํ๋ณด 31๊ฑด ์์ธ ๊ฒ์ฆ
## A๊ทธ๋ฃน โ ์ง๊ธ ์ฆ์ ์ง์ ๊ฐ๋ฅ (๋ง๊ฐ์)
1. **2026 ์ฒญ๋
์ฐฝ์
์ฌ๊ดํ๊ต ์ถ๊ฐ๋ชจ์ง** โ ์ค์๋ฒค์ฒ๊ธฐ์
์งํฅ๊ณต๋จ
- ์ง์: ์ฌ์
ํ ์๊ธ ์ต๋ 1์ต ์ + ์
์ฃผ๊ณต๊ฐ + ๋ฉํ ๋ง
- ์๊ฒฉ: ์๋น์ฐฝ์
์ ํฌํจ โ ยท ๋ง 39์ธ ์ดํ โ ยท ์ ๊ตญ ์ ์ โ
- ๋ง๊ฐ: 2026-07-18 16:00 (D-7) โ ๏ธ ์๋ฐ
- https://www.k-startup.go.kr/web/contents/bizpbanc-ongoing.do?schM=view&pbancSn=1784xx
## B๊ทธ๋ฃน โ ์๊ฑด ์ถฉ์กฑ ์ ์ด๋ฆผ (๋ก๋๋งต)
- **ํ๋ฆฌํ์ค(Pre-TIPS)**: ํธ๋ฆฌ๊ฑฐ = ๋น์๋๊ถ ๋ฒ์ธ ์ค๋ฆฝ.
์ฐ์ ๊ฒฝ๋ก: ๊ฒฝ์ง๋ํ ์๊ธยท์๋ โ ์ถฉ๋จ ๋ฒ์ธ ์ค๋ฆฝ โ ํ๋ฆฌํ์ค โ TIPS
- https://www.k-startup.go.kr/...&pbancSn=1779xx
## C๊ทธ๋ฃน โ ๋ณํ(ํ๋ ์ด๋ฐ)ํ๋ฉด ๊ฐ๋ฅ
- **์ฝํ
์ธ ์ ์์ง์ (KOCCA)**: "AI ์์ฑ ๊ธฐ์ "์ด ์๋๋ผ "์ค๋์ค ์ฝํ
์ธ
์ ์ ํ์ดํ๋ผ์ธ"์ผ๋ก ์ฌ์์ ํ๋ฉด ๋์. ๋ฆฌ์คํฌ: ๊ฒฐ๊ณผ๋ฌผ์ด ์ฝํ
์ธ ์ฌ์ผ ํจ
- https://www.kocca.kr/...
## ๋ถ์ฌ ํ์ธ
- ์๋น์ฐฝ์
ํจํค์ง: ํ์ฌ ๋ชจ์ง์ค ์๋ (ํต์ 2์ ๊ณต๊ณ โ ์๋ฆผ ์ค์ ๊ถ์ฅ)
## ์ฐ์ ์์ ์ก์
- ~7/18: A-1 ์ฒญ์ฐฝ์ฌ ์ ์ฒญ (16:00 ๋ง๊ฐ ์ฃผ์)
- ~7/25: C-1 ์ฝํ
์ธ ํ๋ ์ด๋ฐ ์ด์ ์์ฑ ํ ๋ฌธ์์ฒ ์ ์ ํ์ธ
๋ชจ๋ ๊ณต๊ณ ์ ์๋ฌธ URL์ด ๋ถ๊ณ , ๊ณต๊ณ ์ ์๋ ์ ๋ณด๋ ์ถ์ ํ์ง ์๊ณ '๋ถ๋ช '์ผ๋ก ํ๊ธฐํฉ๋๋ค.
| ์์ค | ๋ด์ฉ | ํฌ๋กค๋ฌ |
|---|---|---|
| K-Startup | ์ฐฝ์ ์ง์ ํตํฉ (๊ธฐ๋ณธ) | kstartup_crawl.py (+ kstartup_api.py) |
| ๊ธฐ์ ๋ง๋น | ์ ๋ถ์ฒยท์ง์์ฒด ์ค์๊ธฐ์ ์ง์ (์ต๋ ์ปค๋ฒ๋ฆฌ์ง) | sources_crawl.py |
| NIPA | AI/ICT ์ฌ์ | sources_crawl.py |
| KOCCA | ์ฝํ ์ธ ์ง์ | sources_crawl.py |
| SMTECH | ์ค๊ธฐ๋ถ R&D | sources_crawl.py |
๊ทธ ์ธ ์์ค(NIAยทIITPยทIRISยท์ง์ญ๊ธฐ๊ด ๋ฑ)๋ skills/ir-search/references/sources.md์ ๋ ์ง์คํธ๋ฆฌ ์ฐธ์กฐ.
๋งค๋ฒ ๋ชจ๋ ์ฌ์ดํธ๋ฅผ ํ์ง ์์๋ ๋ฉ๋๋ค. scope_plan.py๊ฐ ์์ฒญ ๋ฒ์๋ฅผ ๋จผ์ ๊ณ ์ ํ๊ณ ,
์๋ ์์งยท์๋ ํ์ธยทํ๋ณด ์์ค๋ฅผ ๊ตฌ๋ถํ ์คํ๊ณํ๊ณผ ์์ ์ ์ธ scope_fingerprint๋ฅผ ๋ง๋ญ๋๋ค.
์ด ๊ณผ์ ์ ๋คํธ์ํฌยทAPIยทLLM์ ํธ์ถํ์ง ์์ ํ ํฐ๊ณผ ์ธ๋ถ ์ฟผํฐ๋ฅผ ์ฐ์ง ์์ต๋๋ค.
| ํ๋ฆฌ์ | ์ฉ๋ |
|---|---|
quick |
K-Startup ํ ๊ณณ๋ง ๋น ๋ฅด๊ฒ ํ์ธ |
focused |
์ฌ์ฉ์๊ฐ ๊ณ ๋ฅธ ๋ฑ๋ก ์์ค ํ ๊ณณ๋ง |
recommended |
K-Startupยท๊ธฐ์ ๋ง๋น + ํ๋กํ ํ๊ทธ์ ๋ง๋ ์๋ ์์ค(๊ถ์ฅ) |
all_registered |
ํ์ฌ ์๋ํ๋ ๋ชจ๋ ๋ฑ๋ก ์์ค |
all_known |
ํ๋ณดยท์๋ ํ์ธ ์์ค๊น์ง ๋น ์ง์์ด ๊ณํ |
custom |
--include๋ก ์ง์ ํ ์์ค๋ง ์ ํ |
python3 skills/ir-search/scripts/scope_plan.py \
--preset recommended --need ai --need rnd \
--out survey-20260730/scope-plan.json
# K-Startup๋ง ํ์ธ
python3 skills/ir-search/scripts/scope_plan.py \
--preset custom --source kstartup --out /tmp/ir-scope.json
all_known์ ํฌํจ๋ IRISยทIITPยทNIAยทKIATยท์์ถ๋ฐ์ฐ์ฒยท์ฐฝ์กฐ๊ฒฝ์ ํ์ ์ผํฐยท์ง์ญ๊ธฐ๊ด์
์๋ ํฌ๋กค ์ฑ๊ณต์ผ๋ก ๊ฐ์ฅํ์ง ์๊ณ manual ๋๋ candidate๋ก ๋จ๊น๋๋ค. ์ฌ์กฐ์ฌ diff๋
๋์ผํ fingerprint์ ์์ ์์ง ์ํ์ผ ๋๋ง ์๋ฉธ์ ํ์ ํ๋ฏ๋ก ๋ฒ์ ๋ณ๊ฒฝ์ GONE์ผ๋ก
์ค์ธํ์ง ์์ต๋๋ค.
kstartup_crawl.py list๋ ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์ data.go.kr ์๋น์คํค๊ฐ ์์ผ๋ฉด K-Startup ๊ณต์ ์คํAPI๋ก ๋ชจ์ง์ค ๊ณต๊ณ ๋ฅผ ๋ฐ๊ณ , ํค๊ฐ ์๊ฑฐ๋ API๊ฐ ์คํจยท์ฐจ๋จยท์ด์์ด๋ฉด ์๋์ผ๋ก ๊ณต๊ฐ ํ์ด์ง ํฌ๋กค๋ก ํด๋ฐฑํฉ๋๋ค(์ถ๋ ฅ ์คํค๋งยท๋งค๋ํ์คํธ ๋์ผ). ํค๋ ๋ฆฌํฌ ๋ฃจํธ .env(DATA_GO_KR_KEY=...), ํ๊ฒฝ๋ณ์ DATA_GO_KR_KEY, ๋๋ ๊ณต์ฉ ~/.config/data_go_kr_key์์ ์ฝ์ผ๋ฉฐ ๋ก๊ทธยท์๋ฌยท๋ช
๋ นํ์ ์ ๋ ์ถ๋ ฅ๋์ง ์์ต๋๋ค(.env๋ .gitignore). ๊ฐ์ ํค๊ฐ sole-search์ gov24์๋ ์ฌ์ฌ์ฉ๋ฉ๋๋ค.
stop_reason: apiยทexit 0, ์ต์ ์ฐ์ ์กฐ๊ธฐ์ข
๋ฃ(์ต๊ทผ ์ฐฝ)๋ฉด stop_reason: api-windowยท**exit 2(partial)**๋ก ๋จ๊น๋๋ค. ์ ์ ๋ณด์ฆ์ ํฌ๋กค์ด ๊ถ์์ด๋ฉฐ diff๋ partial ์คํ์์ ์๋ฉธ์ ๋จ์ ํ์ง ์์ต๋๋ค.crtfcKey(๊ธฐ์
๋ง๋น ๋ฐ๊ธ, data.go.kr ํค์ ๋ค๋ฆ)๋ฅผ ์๊ตฌํ๊ณ ํฌ๋กค์ด ์ด๋ฏธ ์ ์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ ๊ณตํ๋ฏ๋ก API๋ฅผ ์ฐ์ง ์์ต๋๋ค.ํ ์ค ์ค์น โ ์ค์น๋ ํธ์คํธ(claude/codex/agy/gemini)๋ฅผ ์๋ ๊ฐ์งํด ์ ๋ถ ์ค์นํ๊ณ , CLI๊ฐ ์์ผ๋ฉด ~/.agents/skills/์ clone(CursorยทGrok Build์ฉ)ํฉ๋๋ค. ์์กด์ฑ(curl_cffi)๊น์ง ์ฒ๋ฆฌ:
curl -fsSL https://raw.githubusercontent.com/djfksjd/ir-search/main/install.sh | bash
์๋์ผ๋ก ํ๋ ค๋ฉด ์๋์์ ์ฐ๋ ์์ด์ ํธ์ ๋ฐฉ๋ฒ์ ๊ณ ๋ฅด์ธ์ โ ํ ํธ๋ฆฌ๋ก ๋ชจ๋ ํธ์คํธ๋ฅผ ์ง์ํฉ๋๋ค.
claude plugin marketplace add djfksjd/ir-search
claude plugin install ir-search@djfksjd
์์กด์ฑ curl_cffi๋ ์ธ์
์์ ํ
(SessionStart)์ด ์๋์ผ๋ก ์ค์นํฉ๋๋ค.
codex plugin marketplace add djfksjd/ir-search
codex plugin add ir-search@djfksjd
์์กด์ฑ curl_cffi๋ ์ธ์
์์ ํ
(SessionStart)์ด ์๋์ผ๋ก ์ค์นํฉ๋๋ค.
agy plugin install djfksjd/ir-search
agy plugin enable ir-search
pip3 install 'curl_cffi>=0.15' # agy๋ SessionStart ํ
์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ค์น ํ์
gemini extensions install https://github.com/djfksjd/ir-search
pip3 install 'curl_cffi>=0.15'
ํ์ฅ(gemini-extension.json)์ด skills/ ์๋ ์คํฌ์ ์๋ ๋ฐ๊ฒฌํ๊ณ , AGENTS.md๋ฅผ ์ปจํ
์คํธ๋ก ๋ก๋ํฉ๋๋ค.
๋ ๋ค ๊ณต์ฉ ์คํฌ ๋๋ ํ ๋ฆฌ(~/.agents/skills/)์ ~/.claude/skills/๋ฅผ ์ฝ์ต๋๋ค. clone ํ ๋ฒ์ด๋ฉด ๋ฉ๋๋ค:
mkdir -p ~/.agents/skills
git clone https://github.com/djfksjd/ir-search.git ~/.agents/skills/ir-search
pip3 install 'curl_cffi>=0.15'
(๋ฃจํธ์ SKILL.md ์ฌ๋งํฌ ๋๋ถ์ clone ๋๋ ํ ๋ฆฌ๊ฐ ๊ทธ๋๋ก ์คํฌ ํด๋๋ก ์ธ์๋ฉ๋๋ค. Grok Build๋ Claude Code ํ๋ฌ๊ทธ์ธ๋ ๊ทธ๋๋ก ์ฝ์ผ๋ฏ๋ก, ์ Claude Code ๋ฐฉ์์ผ๋ก ์ค์นํ๋ค๋ฉด ์ถ๊ฐ ์์
์ด ํ์ ์์ต๋๋ค.)
git clone https://github.com/djfksjd/ir-search.git ~/.claude/skills/ir-search
pip3 install 'curl_cffi>=0.15'
์ด๋ ์์ด์ ํธ์์๋ ํ๋ก์ ํธ ํด๋๋ฅผ ์ฐ ์ํ๋ก:
์ฐ๋ฆฌ ์์ดํ
์ ๋ง๋ ์ง์์ฌ์
์ ์์กฐ์ฌ ํด์ค
๋๋ /ir-search(Claude Code). ์์ด์ ํธ๊ฐ ํด๋์์ ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ์ฝ๊ณ , ๋น๋ ํญ๋ชฉ(์ฐฝ์
๋จ๊ณยท์ง์ญยทํ์ํ ๊ฒ)๋ง ๋ฌผ์ด๋ณธ ๋ค ์กฐ์ฌ๋ฅผ ์์ํฉ๋๋ค.
๋ฐ๋ณต ์ฌ์ฉ์ ์ ์ ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค:
ir-search-profile.md์ ์ ์ฅ โ ๋ค์ ์กฐ์ฌ๋ถํฐ๋ ๋ค์ ๋ฌป์ง ์๊ณ "๋ฐ๋ ๊ฒ ์๋์?" ํ ๋ฒ๋ง ํ์ธํฌ๋กค๋ฌ๋ ๋จ๋ ์ผ๋ก๋ ์ธ ์ ์์ต๋๋ค(ํ๋ฌ๊ทธ์ธ ๋๋ ํ ๋ฆฌ ๊ธฐ์ค ๊ฒฝ๋ก):
python3 skills/ir-search/scripts/scope_plan.py --preset recommended -o scope-plan.json
python3 skills/ir-search/scripts/kstartup_crawl.py list -o all.jsonl # K-Startup ๋ชจ์ง์ค ์ ์
python3 skills/ir-search/scripts/kstartup_crawl.py detail 178481 -o details/ # K-Startup ์์ธ๊ณต๊ณ
python3 skills/ir-search/scripts/sources_crawl.py list bizinfo -o biz.jsonl # ๊ธฐ์
๋ง๋น
python3 skills/ir-search/scripts/sources_crawl.py list all -o sources.jsonl # 4๊ฐ ์์ค ์ผ๊ด
python3 skills/ir-search/scripts/sources_crawl.py detail <URL> -o details/ # ์์ค ๋ฌด๊ด ์์ธ๊ณต๊ณ
ir-search/
โโโ install.sh # ํ ์ค ์ค์น ์คํฌ๋ฆฝํธ (ํธ์คํธ ์๋ ๊ฐ์ง)
โโโ plugin.json # agy ๋ง์ปค (name/version/description)
โโโ gemini-extension.json # Gemini CLI ํ์ฅ ๋งค๋ํ์คํธ
โโโ AGENTS.md # ๊ณต์ ์์ด์ ํธ ๊ฐ์ด๋ (์ ํธ์คํธ)
โโโ SKILL.md โ skills/ir-search/SKILL.md # ์ฌ๋งํฌ โ clone ๋๋ ํ ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์คํฌ ํด๋๋ก ์ฐ๊ธฐ ์ํ ํธํ ๊ณ์ธต
โโโ .claude-plugin/ # Claude Code ๋งค๋ํ์คํธ
โ โโโ plugin.json # + SessionStart ํ
(curl_cffi ์๋์ค์น) ์ธ๋ผ์ธ
โ โโโ marketplace.json # claude plugin marketplace add ์ง์
โโโ .codex-plugin/
โ โโโ plugin.json # Codex ๋งค๋ํ์คํธ (+ interface)
โโโ .agents/skills โ skills # ์ฌ๋งํฌ โ CursorยทGrok Build ๋ฑ ๊ณต์ฉ ํ์ค
โโโ .cursor/skills โ skills # ์ฌ๋งํฌ โ Cursor ํ๋ก์ ํธ ์คํฌ
โโโ .gemini/skills โ skills # ์ฌ๋งํฌ โ Gemini CLI ์ํฌ์คํ์ด์ค ์คํฌ
โโโ skills/
โโโ ir-search/
โโโ SKILL.md # ์ํฌํ๋ก (ํ๋กํ โ ์ ์์์ง โ ์ ์๊ฒํ โ ์์ธ๊ฒ์ฆ โ 3๋ถ๋ฅ ๋ณด๊ณ )
โโโ scripts/
โ โโโ scope_plan.py # ์กฐ์ฌ ๋ฒ์ยท์์ค ์ํยทfingerprint ์คํ๊ณํ(์คํ๋ผ์ธ)
โ โโโ kstartup_crawl.py # K-Startup ํฌ๋กค๋ฌ (API ์ฐ์ , ํค ์์ผ๋ฉด ํฌ๋กค ํด๋ฐฑ)
โ โโโ kstartup_api.py # K-Startup ๊ณต์ ์คํAPI ํด๋ผ์ด์ธํธ (data.go.kr)
โ โโโ sources_crawl.py # ๊ธฐ์
๋ง๋นยทNIPAยทKOCCAยทSMTECH ํฌ๋กค๋ฌ
โ โโโ attach_download.py # ์ฒจ๋ถ ๋ค์ด๋ก๋ ๊ณต์ฉ (robots ์ค์ยทํด์)
โ โโโ run_manifest.py # run_manifest.json ๊ณต์ฉ ๊ธฐ๋ก๊ธฐ (์ปค๋ฒ๋ฆฌ์ง)
โ โโโ diff_surveys.py # ์ฌ์กฐ์ฌ ์ฆ๋ถ ๋น๊ต (์ ๊ท/๋ง๊ฐ๋ณ๊ฒฝ/์ข
๋ฃ)
โโโ references/sources.md # ์์ค ๋ ์ง์คํธ๋ฆฌ (๊ฒ์ฆ๋ ์ ๊ทผ๋ฒ + ๋ณด์กฐ ์์ค)
MIT