@nomadamas/k-skill 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/k-skill.js +60 -0
- package/package.json +37 -0
- package/skills/assembly-bill-vote-search/instruction.md +111 -0
- package/skills/assembly-bill-vote-search/skill.json +10 -0
- package/skills/biz-health-check/instruction.md +69 -0
- package/skills/biz-health-check/scripts/biz_health_check.py +163 -0
- package/skills/biz-health-check/skill.json +10 -0
- package/skills/bok-ecos-stats/instruction.md +95 -0
- package/skills/bok-ecos-stats/scripts/bok_ecos.py +302 -0
- package/skills/bok-ecos-stats/skill.json +10 -0
- package/skills/building-register-search/instruction.md +69 -0
- package/skills/building-register-search/scripts/building_register.py +309 -0
- package/skills/building-register-search/scripts/building_register_xml.py +32 -0
- package/skills/building-register-search/skill.json +9 -0
- package/skills/bunjang-search/instruction.md +154 -0
- package/skills/bunjang-search/skill.json +10 -0
- package/skills/catchtable-sniper/instruction.md +270 -0
- package/skills/catchtable-sniper/skill.json +9 -0
- package/skills/cheap-gas-nearby/instruction.md +107 -0
- package/skills/cheap-gas-nearby/skill.json +10 -0
- package/skills/corporate-registration-consulting/instruction.md +117 -0
- package/skills/corporate-registration-consulting/scripts/fill_official_hwp.py +106 -0
- package/skills/corporate-registration-consulting/skill.json +8 -0
- package/skills/coupang-product-search/instruction.md +219 -0
- package/skills/coupang-product-search/scripts/coupang_partners_mcp.py +146 -0
- package/skills/coupang-product-search/skill.json +10 -0
- package/skills/court-auction-notice-search/instruction.md +201 -0
- package/skills/court-auction-notice-search/skill.json +9 -0
- package/skills/court-payment-order-assistant/instruction.md +120 -0
- package/skills/court-payment-order-assistant/skill.json +10 -0
- package/skills/d2b-notice-search/instruction.md +117 -0
- package/skills/d2b-notice-search/skill.json +10 -0
- package/skills/daangn-cars-search/instruction.md +91 -0
- package/skills/daangn-cars-search/scripts/daangn_cars.py +72 -0
- package/skills/daangn-cars-search/skill.json +9 -0
- package/skills/daangn-jobs-search/instruction.md +90 -0
- package/skills/daangn-jobs-search/scripts/daangn_jobs.py +98 -0
- package/skills/daangn-jobs-search/skill.json +9 -0
- package/skills/daangn-realty-search/instruction.md +114 -0
- package/skills/daangn-realty-search/scripts/daangn_detail_ld.py +76 -0
- package/skills/daangn-realty-search/scripts/daangn_realty.py +216 -0
- package/skills/daangn-realty-search/scripts/daangn_relay_store.py +174 -0
- package/skills/daangn-realty-search/skill.json +8 -0
- package/skills/daangn-used-goods-search/instruction.md +90 -0
- package/skills/daangn-used-goods-search/scripts/daangn_used_goods.py +80 -0
- package/skills/daangn-used-goods-search/skill.json +9 -0
- package/skills/daishin-report-search/instruction.md +138 -0
- package/skills/daishin-report-search/skill.json +10 -0
- package/skills/daiso-product-search/instruction.md +172 -0
- package/skills/daiso-product-search/skill.json +8 -0
- package/skills/danawa-price-search/instruction.md +183 -0
- package/skills/danawa-price-search/scripts/danawa_search.py +354 -0
- package/skills/danawa-price-search/skill.json +8 -0
- package/skills/delivery-tracking/instruction.md +358 -0
- package/skills/delivery-tracking/skill.json +8 -0
- package/skills/donation-place-search/instruction.md +129 -0
- package/skills/donation-place-search/skill.json +9 -0
- package/skills/emergency-room-beds/instruction.md +82 -0
- package/skills/emergency-room-beds/skill.json +8 -0
- package/skills/ev-charger-nearby/instruction.md +80 -0
- package/skills/ev-charger-nearby/scripts/ev_charger.py +222 -0
- package/skills/ev-charger-nearby/skill.json +10 -0
- package/skills/ev-subsidy-status/instruction.md +165 -0
- package/skills/ev-subsidy-status/skill.json +10 -0
- package/skills/express-bus-booking/instruction.md +207 -0
- package/skills/express-bus-booking/references/kobus-http-flow.md +159 -0
- package/skills/express-bus-booking/scripts/kobus_express_booking.py +243 -0
- package/skills/express-bus-booking/skill.json +8 -0
- package/skills/fine-dust-location/instruction.md +89 -0
- package/skills/fine-dust-location/skill.json +9 -0
- package/skills/flight-ticket-search/instruction.md +237 -0
- package/skills/flight-ticket-search/scripts/flight_ticket_search.py +501 -0
- package/skills/flight-ticket-search/skill.json +9 -0
- package/skills/foresttrip-vacancy/instruction.md +167 -0
- package/skills/foresttrip-vacancy/scripts/run_foresttrip_vacancy.py +549 -0
- package/skills/foresttrip-vacancy/skill.json +10 -0
- package/skills/fsc-corporate-info/instruction.md +57 -0
- package/skills/fsc-corporate-info/scripts/fsc_corporate_info.py +113 -0
- package/skills/fsc-corporate-info/skill.json +10 -0
- package/skills/g2b-order-plan-search/instruction.md +131 -0
- package/skills/g2b-order-plan-search/scripts/g2b_order_plan.py +158 -0
- package/skills/g2b-order-plan-search/skill.json +10 -0
- package/skills/g2b-sanctioned-supplier/instruction.md +61 -0
- package/skills/g2b-sanctioned-supplier/scripts/g2b_sanctioned_supplier.py +114 -0
- package/skills/g2b-sanctioned-supplier/skill.json +10 -0
- package/skills/gangnamunni-clinic-search/instruction.md +113 -0
- package/skills/gangnamunni-clinic-search/skill.json +9 -0
- package/skills/geeknews-search/instruction.md +69 -0
- package/skills/geeknews-search/scripts/geeknews_search.py +296 -0
- package/skills/geeknews-search/skill.json +8 -0
- package/skills/gongsijiga-search/instruction.md +128 -0
- package/skills/gongsijiga-search/skill.json +9 -0
- package/skills/gov-overseas-trip-report/instruction.md +488 -0
- package/skills/gov-overseas-trip-report/scripts/gov_overseas_trip_report.py +1206 -0
- package/skills/gov-overseas-trip-report/skill.json +9 -0
- package/skills/han-river-water-level/instruction.md +83 -0
- package/skills/han-river-water-level/skill.json +10 -0
- package/skills/highway-traffic-status/instruction.md +88 -0
- package/skills/highway-traffic-status/scripts/highway_traffic.py +315 -0
- package/skills/highway-traffic-status/skill.json +11 -0
- package/skills/hipass-receipt/instruction.md +97 -0
- package/skills/hipass-receipt/skill.json +10 -0
- package/skills/hola-poke-yeoksam/instruction.md +247 -0
- package/skills/hola-poke-yeoksam/skill.json +8 -0
- package/skills/household-waste-info/instruction.md +117 -0
- package/skills/household-waste-info/skill.json +10 -0
- package/skills/housing-official-price/instruction.md +177 -0
- package/skills/housing-official-price/skill.json +10 -0
- package/skills/hwp/instruction.md +206 -0
- package/skills/hwp/skill.json +8 -0
- package/skills/intercity-bus-booking/instruction.md +189 -0
- package/skills/intercity-bus-booking/references/tmoney-intercity-http-flow.md +126 -0
- package/skills/intercity-bus-booking/scripts/intercity_bus_search.py +381 -0
- package/skills/intercity-bus-booking/skill.json +8 -0
- package/skills/iros-registry-automation/instruction.md +229 -0
- package/skills/iros-registry-automation/scripts/iros_pdf_summary.py +249 -0
- package/skills/iros-registry-automation/scripts/upstream.pin +1 -0
- package/skills/iros-registry-automation/skill.json +9 -0
- package/skills/job-posting-match/instruction.md +130 -0
- package/skills/job-posting-match/scripts/job_posting_match.py +396 -0
- package/skills/job-posting-match/scripts/test_job_posting_match.py +54 -0
- package/skills/job-posting-match/skill.json +8 -0
- package/skills/jobkorea-talent-search/instruction.md +118 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_models.py +27 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_parse.py +186 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search.py +94 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search_condition.py +136 -0
- package/skills/jobkorea-talent-search/scripts/test_jobkorea_talent_search.py +76 -0
- package/skills/jobkorea-talent-search/skill.json +9 -0
- package/skills/joseon-sillok-search/instruction.md +76 -0
- package/skills/joseon-sillok-search/scripts/sillok_search.py +552 -0
- package/skills/joseon-sillok-search/skill.json +8 -0
- package/skills/k-dart/instruction.md +406 -0
- package/skills/k-dart/skill.json +8 -0
- package/skills/k-schoollunch-menu/instruction.md +109 -0
- package/skills/k-schoollunch-menu/skill.json +9 -0
- package/skills/k-skill-cleaner/instruction.md +80 -0
- package/skills/k-skill-cleaner/scripts/k_skill_cleaner.py +410 -0
- package/skills/k-skill-cleaner/skill.json +8 -0
- package/skills/k-skill-setup/instruction.md +253 -0
- package/skills/k-skill-setup/skill.json +11 -0
- package/skills/kakao-bar-nearby/instruction.md +76 -0
- package/skills/kakao-bar-nearby/skill.json +8 -0
- package/skills/kakao-map/instruction.md +176 -0
- package/skills/kakao-map/skill.json +10 -0
- package/skills/kakaotalk-mac/instruction.md +189 -0
- package/skills/kakaotalk-mac/skill.json +8 -0
- package/skills/kbl-results/instruction.md +89 -0
- package/skills/kbl-results/skill.json +9 -0
- package/skills/kbo-results/instruction.md +82 -0
- package/skills/kbo-results/skill.json +8 -0
- package/skills/keris-academic-search/instruction.md +81 -0
- package/skills/keris-academic-search/scripts/keris_academic.py +210 -0
- package/skills/keris-academic-search/skill.json +10 -0
- package/skills/kleague-results/instruction.md +92 -0
- package/skills/kleague-results/skill.json +8 -0
- package/skills/kopis-performance-search/instruction.md +109 -0
- package/skills/kopis-performance-search/skill.json +10 -0
- package/skills/korea-weather/instruction.md +93 -0
- package/skills/korea-weather/skill.json +10 -0
- package/skills/korean-character-count/instruction.md +87 -0
- package/skills/korean-character-count/scripts/korean_character_count.js +268 -0
- package/skills/korean-character-count/skill.json +8 -0
- package/skills/korean-cinema-search/instruction.md +177 -0
- package/skills/korean-cinema-search/skill.json +8 -0
- package/skills/korean-heritage-search/instruction.md +106 -0
- package/skills/korean-heritage-search/scripts/korean_heritage_search.py +321 -0
- package/skills/korean-heritage-search/skill.json +8 -0
- package/skills/korean-holiday-calendar/instruction.md +97 -0
- package/skills/korean-holiday-calendar/skill.json +9 -0
- package/skills/korean-humanizer/instruction.md +389 -0
- package/skills/korean-humanizer/references/ai-tell-taxonomy.md +147 -0
- package/skills/korean-humanizer/skill.json +8 -0
- package/skills/korean-jangbu-for/instruction.md +133 -0
- package/skills/korean-jangbu-for/scripts/install.sh +237 -0
- package/skills/korean-jangbu-for/scripts/upstream.pin +1 -0
- package/skills/korean-jangbu-for/skill.json +8 -0
- package/skills/korean-law-search/instruction.md +126 -0
- package/skills/korean-law-search/skill.json +10 -0
- package/skills/korean-marathon-schedule/instruction.md +111 -0
- package/skills/korean-marathon-schedule/skill.json +9 -0
- package/skills/korean-middle-korean/instruction.md +79 -0
- package/skills/korean-middle-korean/scripts/korean_middle_korean.js +214 -0
- package/skills/korean-middle-korean/skill.json +8 -0
- package/skills/korean-patent-search/instruction.md +79 -0
- package/skills/korean-patent-search/scripts/patent_search.py +409 -0
- package/skills/korean-patent-search/skill.json +9 -0
- package/skills/korean-privacy-terms/instruction.md +128 -0
- package/skills/korean-privacy-terms/scripts/install.sh +108 -0
- package/skills/korean-privacy-terms/scripts/upstream.pin +1 -0
- package/skills/korean-privacy-terms/skill.json +8 -0
- package/skills/korean-scholarship-search/instruction.md +317 -0
- package/skills/korean-scholarship-search/references/report-format.md +40 -0
- package/skills/korean-scholarship-search/references/school-discovery.md +61 -0
- package/skills/korean-scholarship-search/references/search-clues.md +58 -0
- package/skills/korean-scholarship-search/references/source-patterns.md +67 -0
- package/skills/korean-scholarship-search/scripts/scholarship_filter.py +811 -0
- package/skills/korean-scholarship-search/scripts/test_scholarship_filter.py +224 -0
- package/skills/korean-scholarship-search/scripts/university_search_plan.py +148 -0
- package/skills/korean-scholarship-search/skill.json +8 -0
- package/skills/korean-slang-writing/instruction.md +181 -0
- package/skills/korean-slang-writing/scripts/_slang_http.py +91 -0
- package/skills/korean-slang-writing/scripts/slang_lookup.py +291 -0
- package/skills/korean-slang-writing/scripts/slang_search.py +284 -0
- package/skills/korean-slang-writing/skill.json +8 -0
- package/skills/korean-spell-check/instruction.md +105 -0
- package/skills/korean-spell-check/scripts/korean_spell_check.py +523 -0
- package/skills/korean-spell-check/skill.json +9 -0
- package/skills/korean-stock-search/instruction.md +194 -0
- package/skills/korean-stock-search/skill.json +10 -0
- package/skills/korean-transit-route/instruction.md +113 -0
- package/skills/korean-transit-route/skill.json +10 -0
- package/skills/kosis-stats/instruction.md +232 -0
- package/skills/kosis-stats/references/kosis-openapi-guide.md +171 -0
- package/skills/kosis-stats/scripts/run_kosis_stats.py +896 -0
- package/skills/kosis-stats/skill.json +9 -0
- package/skills/kr-whois-lookup/instruction.md +107 -0
- package/skills/kr-whois-lookup/skill.json +10 -0
- package/skills/kstartup-search/instruction.md +186 -0
- package/skills/kstartup-search/scripts/run_kstartup.py +424 -0
- package/skills/kstartup-search/skill.json +11 -0
- package/skills/ktx-booking/instruction.md +244 -0
- package/skills/ktx-booking/skill.json +10 -0
- package/skills/lck-analytics/instruction.md +192 -0
- package/skills/lck-analytics/scripts/_lib.js +103 -0
- package/skills/lck-analytics/scripts/analyze-live-game.js +52 -0
- package/skills/lck-analytics/scripts/build-match-report.js +44 -0
- package/skills/lck-analytics/scripts/sync-oracle.js +50 -0
- package/skills/lck-analytics/skill.json +9 -0
- package/skills/lh-notice-search/instruction.md +206 -0
- package/skills/lh-notice-search/skill.json +10 -0
- package/skills/library-book-search/instruction.md +139 -0
- package/skills/library-book-search/skill.json +9 -0
- package/skills/local-election-candidate-search/instruction.md +77 -0
- package/skills/local-election-candidate-search/skill.json +8 -0
- package/skills/localdata-business-status/instruction.md +64 -0
- package/skills/localdata-business-status/scripts/localdata_business_status.py +206 -0
- package/skills/localdata-business-status/skill.json +8 -0
- package/skills/lotto-results/instruction.md +80 -0
- package/skills/lotto-results/skill.json +8 -0
- package/skills/lovebug-report/instruction.md +185 -0
- package/skills/lovebug-report/skill.json +9 -0
- package/skills/market-kurly-search/instruction.md +125 -0
- package/skills/market-kurly-search/skill.json +8 -0
- package/skills/mfds-drug-safety/instruction.md +86 -0
- package/skills/mfds-drug-safety/scripts/mfds_drug_safety.py +184 -0
- package/skills/mfds-drug-safety/skill.json +10 -0
- package/skills/mfds-food-safety/instruction.md +126 -0
- package/skills/mfds-food-safety/scripts/mfds_food_safety.py +281 -0
- package/skills/mfds-food-safety/skill.json +10 -0
- package/skills/myrealtrip-search/instruction.md +239 -0
- package/skills/myrealtrip-search/scripts/myrealtrip_mcp.py +194 -0
- package/skills/myrealtrip-search/scripts/test_myrealtrip_mcp.py +99 -0
- package/skills/myrealtrip-search/skill.json +9 -0
- package/skills/naming-house/instruction.md +146 -0
- package/skills/naming-house/skill.json +8 -0
- package/skills/national-pension-workplace/instruction.md +64 -0
- package/skills/national-pension-workplace/scripts/national_pension_workplace.py +113 -0
- package/skills/national-pension-workplace/skill.json +10 -0
- package/skills/naver-ad-performance/instruction.md +108 -0
- package/skills/naver-ad-performance/scripts/naver_ad_performance.py +240 -0
- package/skills/naver-ad-performance/skill.json +9 -0
- package/skills/naver-blog-research/instruction.md +128 -0
- package/skills/naver-blog-research/scripts/_naver_http.py +58 -0
- package/skills/naver-blog-research/scripts/naver_download_images.py +233 -0
- package/skills/naver-blog-research/scripts/naver_read.py +256 -0
- package/skills/naver-blog-research/scripts/naver_search.py +192 -0
- package/skills/naver-blog-research/skill.json +8 -0
- package/skills/naver-news-search/instruction.md +103 -0
- package/skills/naver-news-search/skill.json +10 -0
- package/skills/naver-shopping-search/instruction.md +94 -0
- package/skills/naver-shopping-search/skill.json +11 -0
- package/skills/nhis-care-checkup-search/instruction.md +116 -0
- package/skills/nhis-care-checkup-search/skill.json +10 -0
- package/skills/nts-business-registration/instruction.md +115 -0
- package/skills/nts-business-registration/scripts/nts_business_registration.py +215 -0
- package/skills/nts-business-registration/skill.json +10 -0
- package/skills/nts-tax-delinquency/instruction.md +54 -0
- package/skills/nts-tax-delinquency/scripts/nts_tax_delinquency.py +150 -0
- package/skills/nts-tax-delinquency/skill.json +8 -0
- package/skills/ohou-today-deal/instruction.md +182 -0
- package/skills/ohou-today-deal/scripts/ohou_today_deal.py +369 -0
- package/skills/ohou-today-deal/skill.json +9 -0
- package/skills/olive-young-search/instruction.md +154 -0
- package/skills/olive-young-search/skill.json +8 -0
- package/skills/parking-lot-search/instruction.md +96 -0
- package/skills/parking-lot-search/skill.json +9 -0
- package/skills/popbill/instruction.md +146 -0
- package/skills/popbill/scripts/popbill_cli.py +284 -0
- package/skills/popbill/scripts/popbill_registry.py +54 -0
- package/skills/popbill/scripts/popbill_safety.py +37 -0
- package/skills/popbill/scripts/popbill_templates.py +71 -0
- package/skills/popbill/skill.json +9 -0
- package/skills/public-restroom-nearby/instruction.md +89 -0
- package/skills/public-restroom-nearby/skill.json +9 -0
- package/skills/real-estate-search/instruction.md +172 -0
- package/skills/real-estate-search/skill.json +10 -0
- package/skills/rhwp-advanced/instruction.md +145 -0
- package/skills/rhwp-advanced/skill.json +8 -0
- package/skills/rhwp-edit/instruction.md +153 -0
- package/skills/rhwp-edit/skill.json +8 -0
- package/skills/s2b-notice-search/instruction.md +66 -0
- package/skills/s2b-notice-search/skill.json +9 -0
- package/skills/saju-fortune/instruction.md +177 -0
- package/skills/saju-fortune/skill.json +8 -0
- package/skills/saramin-talent-search/instruction.md +119 -0
- package/skills/saramin-talent-search/skill.json +9 -0
- package/skills/seoul-bike/instruction.md +83 -0
- package/skills/seoul-bike/scripts/seoul_bike.py +247 -0
- package/skills/seoul-bike/skill.json +10 -0
- package/skills/seoul-density/instruction.md +109 -0
- package/skills/seoul-density/scripts/seoul_density.py +271 -0
- package/skills/seoul-density/skill.json +10 -0
- package/skills/seoul-subway-arrival/instruction.md +85 -0
- package/skills/seoul-subway-arrival/skill.json +9 -0
- package/skills/sh-notice-search/instruction.md +150 -0
- package/skills/sh-notice-search/skill.json +9 -0
- package/skills/srt-booking/instruction.md +181 -0
- package/skills/srt-booking/scripts/srt_booking.py +272 -0
- package/skills/srt-booking/scripts/srt_seats.py +156 -0
- package/skills/srt-booking/skill.json +20 -0
- package/skills/subway-lost-property/instruction.md +93 -0
- package/skills/subway-lost-property/scripts/subway_lost_property.py +244 -0
- package/skills/subway-lost-property/skill.json +8 -0
- package/skills/ticket-availability/instruction.md +175 -0
- package/skills/ticket-availability/scripts/ticket_availability.py +430 -0
- package/skills/ticket-availability/skill.json +9 -0
- package/skills/toss-securities/instruction.md +116 -0
- package/skills/toss-securities/skill.json +9 -0
- package/skills/used-car-price-search/instruction.md +109 -0
- package/skills/used-car-price-search/skill.json +8 -0
- package/skills/yebigun-training/instruction.md +177 -0
- package/skills/yebigun-training/skill.json +9 -0
- package/skills/zipcode-search/instruction.md +159 -0
- package/skills/zipcode-search/scripts/zipcode_search.py +150 -0
- package/skills/zipcode-search/skill.json +8 -0
- package/src/assemble.js +134 -0
- package/src/detect.js +18 -0
- package/templates/action-account.md +4 -0
- package/templates/action-booking.md +5 -0
- package/templates/action-commerce.md +5 -0
- package/templates/action-communication.md +5 -0
- package/templates/action-submission.md +5 -0
- package/templates/browser.md +4 -0
- package/templates/core.md +5 -0
- package/templates/hard-boundary.md +3 -0
- package/templates/local.md +2 -0
- package/templates/lookup.md +2 -0
- package/templates/proxy.md +2 -0
- package/templates/vault.md +4 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# k-dart — 금감원 DART 전자공시 조회
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
`API_K_DART` 환경변수에 담긴 인증키로 DART OpenAPI(`https://opendart.fss.or.kr/api/`)를 직접 호출해 공시·재무·주요사항 정보를 조회한다. 프록시를 거치지 않는다.
|
|
6
|
+
|
|
7
|
+
## When to use
|
|
8
|
+
|
|
9
|
+
- "삼성전자 최근 공시 보여줘"
|
|
10
|
+
- "카카오 기업개황 알려줘"
|
|
11
|
+
- "LG에너지솔루션 2024년 연간 재무제표"
|
|
12
|
+
- "네이버 배당 현황"
|
|
13
|
+
- "하이브 전환사채 발행 이력"
|
|
14
|
+
- "셀트리온 소송 현황"
|
|
15
|
+
- "SK하이닉스 감사의견"
|
|
16
|
+
- "현대차 증자/감자 이력"
|
|
17
|
+
- "삼성바이오 자기주식 취득/처분"
|
|
18
|
+
|
|
19
|
+
## When not to use
|
|
20
|
+
|
|
21
|
+
- 실시간 주가/호가/체결 조회 → `korean-stock-search` 스킬
|
|
22
|
+
- 해외 기업 공시
|
|
23
|
+
- 투자 자문/매수 추천
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
`API_K_DART` 환경변수가 설정되어 있어야 한다. 키 발급: <https://opendart.fss.or.kr/uss/umt/EgovMberInsertView.do>
|
|
28
|
+
|
|
29
|
+
## corp_code 확보 절차
|
|
30
|
+
|
|
31
|
+
DART API 대부분은 `corp_code`(8자리 고유번호)를 요구한다. 사용자가 종목명이나 종목코드(6자리)만 제공하면:
|
|
32
|
+
|
|
33
|
+
1. **고유번호 전체 목록(`corpCode.xml`)을 다운로드**해 회사명 또는 종목코드로 `corp_code`를 조회한다:
|
|
34
|
+
|
|
35
|
+
**macOS / Linux (bash):**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# ZIP 다운로드 → 압축 해제 (이미 있으면 생략)
|
|
39
|
+
[ -f /tmp/dart_corp/CORPCODE.xml ] || {
|
|
40
|
+
curl -fsS -o /tmp/dart_corp.zip \
|
|
41
|
+
"https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=$API_K_DART"
|
|
42
|
+
mkdir -p /tmp/dart_corp && unzip -o /tmp/dart_corp.zip -d /tmp/dart_corp
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# 회사명 또는 종목코드로 corp_code 검색 (상장사만)
|
|
46
|
+
grep -B2 -A3 '삼성전자' /tmp/dart_corp/CORPCODE.xml | awk '
|
|
47
|
+
/<corp_code>/{code=$0; gsub(/.*<corp_code>|<\/corp_code>.*/,"",code)}
|
|
48
|
+
/<corp_name>/{name=$0; gsub(/.*<corp_name>|<\/corp_name>.*/,"",name)}
|
|
49
|
+
/<stock_code>[0-9]/{stock=$0; gsub(/.*<stock_code>|<\/stock_code>.*/,"",stock); print code, stock, name}
|
|
50
|
+
'
|
|
51
|
+
# 출력: 00126380 005930 삼성전자
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Windows (PowerShell):**
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
# ZIP 다운로드 → 압축 해제 (이미 있으면 생략)
|
|
58
|
+
$dartDir = "$env:TEMP\dart_corp"
|
|
59
|
+
if (-not (Test-Path "$dartDir\CORPCODE.xml")) {
|
|
60
|
+
Invoke-WebRequest "https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=$env:API_K_DART" -OutFile "$dartDir.zip"
|
|
61
|
+
New-Item -ItemType Directory -Path $dartDir -Force | Out-Null
|
|
62
|
+
Expand-Archive "$dartDir.zip" -DestinationPath $dartDir -Force
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# 회사명 또는 종목코드로 corp_code 검색 (상장사만)
|
|
66
|
+
[xml]$xml = Get-Content "$dartDir\CORPCODE.xml"
|
|
67
|
+
$xml.result.list | Where-Object { $_.corp_name -like '*삼성전자*' -and $_.stock_code.Trim() -ne '' } |
|
|
68
|
+
Select-Object corp_code, stock_code, corp_name
|
|
69
|
+
# 출력: 00126380 005930 삼성전자
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
2. 획득한 `corp_code`로 나머지 API 호출
|
|
73
|
+
|
|
74
|
+
> **참고:** `/tmp/dart_corp/CORPCODE.xml`이 이미 있으면 재다운로드 없이 재사용한다. 파일은 약 30MB이며 전체 법인 목록(상장+비상장)을 포함한다. `corpCode.xml`에 회사명·종목코드·고유번호가 모두 포함되어 있으므로 별도 스킬 연계 없이 단독으로 corp_code를 확보할 수 있다.
|
|
75
|
+
|
|
76
|
+
## Supported endpoints
|
|
77
|
+
|
|
78
|
+
모든 요청은 `GET https://opendart.fss.or.kr/api/{endpoint}.json?crtfc_key=$API_K_DART&...` 형식이다.
|
|
79
|
+
|
|
80
|
+
### 1. 공시검색
|
|
81
|
+
|
|
82
|
+
```http
|
|
83
|
+
GET /api/list.json?crtfc_key={key}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
84
|
+
[&corp_code={code}]
|
|
85
|
+
[&last_reprt_at=Y|N] [&pblntf_ty=A..J] [&pblntf_detail_ty=...]
|
|
86
|
+
[&corp_cls=Y|K|N|E] [&sort=date|crp|rpt] [&sort_mth=asc|desc]
|
|
87
|
+
[&page_no=1] [&page_count=10]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
공식 가이드(DS001/2019001) 요청 인자 정리 (필수여부·기본값·허용값은 공식 표 기준, 식별자는 코드 폰트로 표기):
|
|
91
|
+
|
|
92
|
+
| 요청키 | 명칭 | 타입 | 필수여부 | 값설명 |
|
|
93
|
+
|---|---|---|---|---|
|
|
94
|
+
| `crtfc_key` | API 인증키 | STRING(40) | Y | 발급받은 인증키(40자리) |
|
|
95
|
+
| `corp_code` | 고유번호 | STRING(8) | N | 공시대상회사의 고유번호(8자리). ※ 개발가이드 > 공시정보 > 고유번호 참고 |
|
|
96
|
+
| `bgn_de` | 시작일 | STRING(8) | Y | 검색시작 접수일자(YYYYMMDD). 1) 기본값: 종료일(`end_de`). 2) **고유번호(`corp_code`)가 없는 경우 검색기간은 3개월로 제한** |
|
|
97
|
+
| `end_de` | 종료일 | STRING(8) | Y | 검색종료 접수일자(YYYYMMDD). 1) 기본값: 당일 |
|
|
98
|
+
| `last_reprt_at` | 최종보고서 검색여부 | STRING(1) | N | 최종보고서만 검색여부(Y or N). 1) 기본값: N (정정이 있는 경우 최종정정만 검색) |
|
|
99
|
+
| `pblntf_ty` | 공시유형 | STRING(1) | N | A=정기공시, B=주요사항보고, C=발행공시, D=지분공시, E=기타공시, F=외부감사관련, G=펀드공시, H=자산유동화, I=거래소공시, J=공정위공시 |
|
|
100
|
+
| `pblntf_detail_ty` | 공시상세유형 | STRING(4) | N | (※ 상세 유형 참조: `pblntf_detail_ty`) |
|
|
101
|
+
| `corp_cls` | 법인구분 | STRING(1) | N | Y(유가), K(코스닥), N(코넥스), E(기타). ※ 없으면 전체조회, **복수조건 불가** |
|
|
102
|
+
| `sort` | 정렬 | STRING(4) | N | 접수일자: `date` / 회사명: `crp` / 보고서명: `rpt`. ※ 기본값: `date` |
|
|
103
|
+
| `sort_mth` | 정렬방법 | STRING(4) | N | 오름차순(`asc`), 내림차순(`desc`). ※ 기본값: `desc` |
|
|
104
|
+
| `page_no` | 페이지 번호 | STRING(5) | N | 페이지 번호 (1~n). 기본값: 1 |
|
|
105
|
+
| `page_count` | 페이지 별 건수 | STRING(3) | N | 페이지당 건수 (1~100). 기본값: 10, 최대값: 100 |
|
|
106
|
+
|
|
107
|
+
`pblntf_detail_ty` 자주 쓰는 코드 예시: A001=사업보고서, A002=반기보고서, A003=분기보고서, B001=주요사항보고서, F001=감사보고서, F002=연결감사보고서, D001=주식등의대량보유상황보고서.
|
|
108
|
+
|
|
109
|
+
> **주의:** DART OpenAPI `list.json` 의 공식 요청 파라미터 표에 `corp_name` 은 존재하지 않는다. 회사명을 기준으로 특정 기업 공시만 좁혀 보려면 위 "corp_code 확보 절차"로 먼저 `corp_code`(8자리 고유번호)를 얻은 뒤 호출한다.
|
|
110
|
+
|
|
111
|
+
### 2. 기업개황
|
|
112
|
+
|
|
113
|
+
```http
|
|
114
|
+
GET /api/company.json?crtfc_key={key}&corp_code={code}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 3. 재무제표 (단일회사 전체 재무제표)
|
|
118
|
+
|
|
119
|
+
```http
|
|
120
|
+
GET /api/fnlttSinglAcntAll.json?crtfc_key={key}&corp_code={code}&bsns_year={YYYY}&reprt_code={code}&fs_div={OFS|CFS}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
`reprt_code`: 11013(1분기), 11012(반기), 11014(3분기), 11011(사업보고서)
|
|
124
|
+
`fs_div`: OFS(개별), CFS(연결)
|
|
125
|
+
|
|
126
|
+
### 4. 증자(감자) 현황
|
|
127
|
+
|
|
128
|
+
```http
|
|
129
|
+
GET /api/irdsSttus.json?crtfc_key={key}&corp_code={code}&bsns_year={YYYY}&reprt_code={code}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 5. 배당에 관한 사항
|
|
133
|
+
|
|
134
|
+
```http
|
|
135
|
+
GET /api/alotMatter.json?crtfc_key={key}&corp_code={code}&bsns_year={YYYY}&reprt_code={code}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 6. 자기주식 취득 및 처분 현황
|
|
139
|
+
|
|
140
|
+
```http
|
|
141
|
+
GET /api/tesstkAcqsDspsSttus.json?crtfc_key={key}&corp_code={code}&bsns_year={YYYY}&reprt_code={code}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 7. 회계감사인의 명칭 및 감사의견
|
|
145
|
+
|
|
146
|
+
```http
|
|
147
|
+
GET /api/accnutAdtorNmNdAdtOpinion.json?crtfc_key={key}&corp_code={code}&bsns_year={YYYY}&reprt_code={code}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 8. 직원 현황
|
|
151
|
+
|
|
152
|
+
```http
|
|
153
|
+
GET /api/empSttus.json?crtfc_key={key}&corp_code={code}&bsns_year={YYYY}&reprt_code={code}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
부문별·성별 정규직/계약직 인원수, 평균 근속연수, 1인 평균 급여 등을 반환한다.
|
|
157
|
+
|
|
158
|
+
### 9. 유무상증자 결정
|
|
159
|
+
|
|
160
|
+
```http
|
|
161
|
+
GET /api/pifricDecsn.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
> **주의:** `pifricDecsn.json` 은 **유무상증자 결정** 전용 endpoint다. 유상증자만 따로 조회하려면 `piicDecsn.json` (유상증자 결정), 무상증자만 따로 조회하려면 `fricDecsn.json` (무상증자 결정)을 호출한다.
|
|
165
|
+
|
|
166
|
+
### 10. 소송 등의 제기
|
|
167
|
+
|
|
168
|
+
```http
|
|
169
|
+
GET /api/lwstLg.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 11. 해외 증권시장 주권등 상장 결정
|
|
173
|
+
|
|
174
|
+
```http
|
|
175
|
+
GET /api/ovLstDecsn.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### 12. 해외 증권시장 주권등 상장폐지 결정
|
|
179
|
+
|
|
180
|
+
```http
|
|
181
|
+
GET /api/ovDlstDecsn.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 13. 전환사채권 발행결정
|
|
185
|
+
|
|
186
|
+
```http
|
|
187
|
+
GET /api/cvbdIsDecsn.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 14. 교환사채권 발행결정
|
|
191
|
+
|
|
192
|
+
```http
|
|
193
|
+
GET /api/exbdIsDecsn.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 15. 회사분할합병 결정
|
|
197
|
+
|
|
198
|
+
```http
|
|
199
|
+
GET /api/cmpDvmgDecsn.json?crtfc_key={key}&corp_code={code}&bgn_de={YYYYMMDD}&end_de={YYYYMMDD}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Example requests
|
|
203
|
+
|
|
204
|
+
공시검색 (특정 기업, 삼성전자):
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# 1. 먼저 위 "corp_code 확보 절차"로 corp_code(예: 삼성전자=00126380) 획득
|
|
208
|
+
# 2. corp_code로 기간 내 공시 조회
|
|
209
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/list.json' \
|
|
210
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
211
|
+
--data-urlencode 'corp_code=00126380' \
|
|
212
|
+
--data-urlencode 'bgn_de=20260101' \
|
|
213
|
+
--data-urlencode 'end_de=20260419' \
|
|
214
|
+
--data-urlencode 'page_count=5'
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
공시검색 (전체 시장 최근 공시, corp_code 미지정 — 공식 spec상 검색 기간 ≤ 3개월):
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/list.json' \
|
|
221
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
222
|
+
--data-urlencode 'bgn_de=20260301' \
|
|
223
|
+
--data-urlencode 'end_de=20260419' \
|
|
224
|
+
--data-urlencode 'pblntf_ty=A' \
|
|
225
|
+
--data-urlencode 'corp_cls=Y' \
|
|
226
|
+
--data-urlencode 'page_count=10'
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
기업개황:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/company.json' \
|
|
233
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
234
|
+
--data-urlencode 'corp_code=00126380'
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
재무제표 (연결, 사업보고서):
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json' \
|
|
241
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
242
|
+
--data-urlencode 'corp_code=00126380' \
|
|
243
|
+
--data-urlencode 'bsns_year=2024' \
|
|
244
|
+
--data-urlencode 'reprt_code=11011' \
|
|
245
|
+
--data-urlencode 'fs_div=CFS'
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
배당 현황:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/alotMatter.json' \
|
|
252
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
253
|
+
--data-urlencode 'corp_code=00126380' \
|
|
254
|
+
--data-urlencode 'bsns_year=2024' \
|
|
255
|
+
--data-urlencode 'reprt_code=11011'
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
직원 현황 (사업보고서 기준):
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/empSttus.json' \
|
|
262
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
263
|
+
--data-urlencode 'corp_code=00126380' \
|
|
264
|
+
--data-urlencode 'bsns_year=2024' \
|
|
265
|
+
--data-urlencode 'reprt_code=11011'
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
유무상증자 결정 (`pifricDecsn.json` — 유상증자만 보려면 `piicDecsn.json`):
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/pifricDecsn.json' \
|
|
272
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
273
|
+
--data-urlencode 'corp_code=00126380' \
|
|
274
|
+
--data-urlencode 'bgn_de=20200101' \
|
|
275
|
+
--data-urlencode 'end_de=20260419'
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
전환사채 발행결정:
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
curl -fsS --get 'https://opendart.fss.or.kr/api/cvbdIsDecsn.json' \
|
|
282
|
+
--data-urlencode "crtfc_key=$API_K_DART" \
|
|
283
|
+
--data-urlencode 'corp_code=00126380' \
|
|
284
|
+
--data-urlencode 'bgn_de=20200101' \
|
|
285
|
+
--data-urlencode 'end_de=20260419'
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Response shape
|
|
289
|
+
|
|
290
|
+
### DART 공통 응답 구조
|
|
291
|
+
|
|
292
|
+
모든 응답은 `status`와 `message` 필드를 포함한다:
|
|
293
|
+
|
|
294
|
+
```json
|
|
295
|
+
{
|
|
296
|
+
"status": "000",
|
|
297
|
+
"message": "정상",
|
|
298
|
+
"list": [ ... ]
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 상태코드
|
|
303
|
+
|
|
304
|
+
| status | 의미 |
|
|
305
|
+
|--------|------|
|
|
306
|
+
| 000 | 정상 |
|
|
307
|
+
| 010 | 등록되지 않은 키 |
|
|
308
|
+
| 011 | 사용할 수 없는 키 |
|
|
309
|
+
| 012 | 접근할 수 없는 IP |
|
|
310
|
+
| 013 | 조회된 데이터 없음 |
|
|
311
|
+
| 014 | 파일이 존재하지 않음 |
|
|
312
|
+
| 020 | 요청 제한 초과 (공식 가이드: 일반적으로 20,000건 이상 요청 시 발생. 키별 별도 한도가 설정된 경우에도 동일 코드가 반환될 수 있음) |
|
|
313
|
+
| 021 | 조회 가능한 회사 개수 초과 (최대 100개) |
|
|
314
|
+
| 100 | 필드 오류 (필드의 부적절한 값) |
|
|
315
|
+
| 800 | 원천 시스템 점검 중 |
|
|
316
|
+
| 900 | 정의되지 않은 오류 |
|
|
317
|
+
|
|
318
|
+
### 공시검색 응답 예시
|
|
319
|
+
|
|
320
|
+
```json
|
|
321
|
+
{
|
|
322
|
+
"status": "000",
|
|
323
|
+
"message": "정상",
|
|
324
|
+
"page_no": 1,
|
|
325
|
+
"page_count": 5,
|
|
326
|
+
"total_count": 142,
|
|
327
|
+
"total_page": 29,
|
|
328
|
+
"list": [
|
|
329
|
+
{
|
|
330
|
+
"corp_code": "00126380",
|
|
331
|
+
"corp_name": "삼성전자",
|
|
332
|
+
"stock_code": "005930",
|
|
333
|
+
"corp_cls": "Y",
|
|
334
|
+
"report_nm": "[기재정정]사업보고서 (2024.12)",
|
|
335
|
+
"rcept_no": "20250401000123",
|
|
336
|
+
"flr_nm": "삼성전자",
|
|
337
|
+
"rcept_dt": "20250401",
|
|
338
|
+
"rm": ""
|
|
339
|
+
}
|
|
340
|
+
]
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### 기업개황 응답 예시
|
|
345
|
+
|
|
346
|
+
```json
|
|
347
|
+
{
|
|
348
|
+
"status": "000",
|
|
349
|
+
"message": "정상",
|
|
350
|
+
"corp_code": "00126380",
|
|
351
|
+
"corp_name": "삼성전자",
|
|
352
|
+
"corp_name_eng": "SAMSUNG ELECTRONICS CO.,LTD",
|
|
353
|
+
"stock_name": "삼성전자",
|
|
354
|
+
"stock_code": "005930",
|
|
355
|
+
"ceo_nm": "한종희, 경계현",
|
|
356
|
+
"corp_cls": "Y",
|
|
357
|
+
"jurir_no": "1301110006246",
|
|
358
|
+
"bizr_no": "1248100998",
|
|
359
|
+
"adres": "경기도 수원시 영통구 삼성로 129",
|
|
360
|
+
"hm_url": "www.samsung.com",
|
|
361
|
+
"ir_url": "",
|
|
362
|
+
"phn_no": "031-200-1114",
|
|
363
|
+
"induty_code": "264",
|
|
364
|
+
"est_dt": "19690113",
|
|
365
|
+
"acc_mt": "12"
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Response policy
|
|
370
|
+
|
|
371
|
+
- `status`가 `"000"`이 아니면 에러 메시지를 사용자에게 안내한다.
|
|
372
|
+
- `status: "013"` (조회된 데이터 없음) 이면 기간/보고서 종류/`corp_code` 를 재확인하도록 안내한다.
|
|
373
|
+
- `status: "020"` (요청 제한 초과)이면 호출 한도 도달 가능성을 안내한다. 공식 가이드는 "일반적으로 20,000건 이상 요청 시" 발생한다고만 명시하며, 키별로 별도 한도가 설정되어 있으면 다른 임계치에서도 발생할 수 있음을 함께 알린다. 잠시 후 재시도를 권한다.
|
|
374
|
+
- 종목명만 알고 있다면 위 "corp_code 확보 절차"의 `corpCode.xml` 파싱으로 먼저 `corp_code`를 확보한 뒤 후속 API를 호출한다 (DART OpenAPI `list.json` 의 공식 요청 파라미터 표에 `corp_name` 은 존재하지 않는다).
|
|
375
|
+
- 재무제표 조회 시 `reprt_code` 를 사용자가 지정하지 않으면 사업보고서(11011)를 기본값으로 사용한다.
|
|
376
|
+
- `fs_div`를 지정하지 않으면 연결(CFS)을 기본값으로 사용한다.
|
|
377
|
+
- 주요사항보고서(9~15번)는 날짜 범위가 필요하다. 사용자가 기간을 지정하지 않으면 최근 1년을 기본으로 한다.
|
|
378
|
+
- 숫자는 읽기 쉬운 단위(억, 조, 주)로 풀어주되 원본 수치도 유지한다.
|
|
379
|
+
- 답변 말미에 "금감원 DART 공시 데이터 기준 / 투자 조언 아님" 을 짧게 남긴다.
|
|
380
|
+
|
|
381
|
+
## Keep the answer compact
|
|
382
|
+
|
|
383
|
+
- 공시검색: 공시명 / 접수일 / 제출인 위주로 최근 5~10건
|
|
384
|
+
- 기업개황: 회사명 / 대표자 / 업종 / 주소 / 결산월
|
|
385
|
+
- 재무제표: 매출액 / 영업이익 / 당기순이익 / 자산총계 / 부채총계 / 자본총계 핵심 항목
|
|
386
|
+
- 주요사항보고서: 핵심 결정 내용과 일자를 요약
|
|
387
|
+
|
|
388
|
+
## Failure modes
|
|
389
|
+
|
|
390
|
+
- `API_K_DART` 환경변수 미설정 → 키 발급 안내 후 중단
|
|
391
|
+
- `status` ≠ `"000"` → 상태코드표 참고해 에러 안내
|
|
392
|
+
- `corp_code`를 찾을 수 없음 → 회사명 재확인 요청
|
|
393
|
+
- 해당 기간/보고서에 데이터 없음 → 기간 또는 `reprt_code` 변경 안내
|
|
394
|
+
|
|
395
|
+
## Done when
|
|
396
|
+
|
|
397
|
+
- `API_K_DART` 존재를 확인했다.
|
|
398
|
+
- 사용자 요청에 맞는 endpoint를 호출해 결과를 정리했다.
|
|
399
|
+
- 필요 시 `corp_code`를 먼저 확보한 뒤 후속 조회를 수행했다.
|
|
400
|
+
- 금감원 DART 공시 데이터 기준임을 짧게 남겼다.
|
|
401
|
+
|
|
402
|
+
## Notes
|
|
403
|
+
|
|
404
|
+
- 공식 데이터 출처: [DART OpenAPI](https://opendart.fss.or.kr/intro/main.do)
|
|
405
|
+
- 이 스킬은 read-only 조회 전용이다.
|
|
406
|
+
- DART API 요청 한도: 공식 가이드(`020` 메시지 설명)는 "**일반적으로 20,000건 이상의 요청** 에 대해 `020` (요청 제한 초과)이 발생하며, **키별로 별도 한도가 설정된 경우** 다른 임계치에서도 동일 코드가 반환될 수 있다"고 명시한다. 분당 throttle 등 세부 제약 수치는 공개 가이드에 별도로 게시되어 있지 않다. 본인 키의 정확한 사용 현황은 로그인 후 [OpenDART 이용현황](https://opendart.fss.or.kr/mng/apiUsageStatusView.do) 페이지에서 확인할 수 있다.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "k-dart",
|
|
3
|
+
"description": "금융감독원 전자공시시스템(DART) OpenAPI로 공시검색, 기업개황, 재무제표, 주요사항보고서를 조회한다. 사용자의 API_K_DART 환경변수를 직접 사용한다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"lookup"
|
|
6
|
+
],
|
|
7
|
+
"frontmatter": "name: k-dart\ndescription: 금융감독원 전자공시시스템(DART) OpenAPI로 공시검색, 기업개황, 재무제표, 주요사항보고서를 조회한다. 사용자의 API_K_DART 환경변수를 직접 사용한다.\nlicense: MIT\nmetadata:\n category: finance\n locale: ko-KR\n phase: v1"
|
|
8
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Korean School Lunch Menu (NEIS)
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
나이스(NEIS) 교육정보 개방 포털의 **학교기본정보**·**급식식단정보**를 `k-skill-proxy`가 중계하는 HTTP API로 조회한다.
|
|
6
|
+
|
|
7
|
+
- 사용자는 **시도교육청 이름**(자연어)과 **학교 이름**, **날짜**만 말하면 된다.
|
|
8
|
+
- 에이전트는 먼저 `/v1/neis/school-search`로 학교를 찾고, 응답의 `SD_SCHUL_CODE`·`ATPT_OFCDC_SC_CODE`로 `/v1/neis/school-meal`을 호출한다.
|
|
9
|
+
- 인증키(`KEDU_INFO_KEY`)는 **프록시 서버에만** 두고, 클라이언트는 키 없이 프록시 URL만 호출한다.
|
|
10
|
+
|
|
11
|
+
## When to use
|
|
12
|
+
|
|
13
|
+
- "서울특별시교육청 미래초등학교 오늘 급식 뭐야?"
|
|
14
|
+
- "○○초 급식 식단 알려줘"
|
|
15
|
+
- "이번 주 화요일 중학교 급식 메뉴"
|
|
16
|
+
- "급식 메뉴 조회해줘" (교육청·학교·날짜 확인 후 진행)
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
- 인터넷 연결
|
|
21
|
+
- `curl` 사용 가능 환경
|
|
22
|
+
- `k-skill-proxy`에 `KEDU_INFO_KEY`가 설정된 배포(기본 hosted 또는 self-host)에 접근 가능할 것
|
|
23
|
+
|
|
24
|
+
## Credential requirements
|
|
25
|
+
|
|
26
|
+
- 사용자 측 **필수** 시크릿 없음.
|
|
27
|
+
- `KSKILL_PROXY_BASE_URL` — self-host·별도 프록시를 쓸 때만 설정. 비우면 기본 hosted `https://k-skill-proxy.nomadamas.org` 를 사용한다.
|
|
28
|
+
- `KEDU_INFO_KEY` 는 **프록시 운영 서버** 환경에만 둔다.
|
|
29
|
+
|
|
30
|
+
## Proxy base URL
|
|
31
|
+
|
|
32
|
+
에이전트는 아래처럼 base 를 정한다.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
BASE="${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}"
|
|
36
|
+
BASE="${BASE%/}"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Workflow
|
|
40
|
+
|
|
41
|
+
### 1) Collect inputs (do not guess)
|
|
42
|
+
|
|
43
|
+
다음이 없으면 사용자에게 짧게 묻는다.
|
|
44
|
+
|
|
45
|
+
1. **교육청** — 자연어 허용 (예: `서울특별시교육청`, `서울`, `경기도교육청`).
|
|
46
|
+
2. **학교명** — 자연어 (예: `미래초등학교`, `○○중학교`).
|
|
47
|
+
3. **급식일** — `YYYYMMDD` 또는 사용자가 말한 날짜를 한국 시간 기준으로 `YYYYMMDD`로 정한다. 생략 시 **오늘(한국 시간)**.
|
|
48
|
+
|
|
49
|
+
교육청 표현이 애매해 `ambiguous_education_office`가 나오면, 응답의 `candidate_codes`를 보여 주고 더 구체적인 이름(예: `경상북도교육청` vs `경상남도교육청`)을 받는다.
|
|
50
|
+
|
|
51
|
+
### 2) Search school (`/v1/neis/school-search`)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
curl -fsS --get "${BASE}/v1/neis/school-search" \
|
|
55
|
+
--data-urlencode "educationOffice=${EDU_OFFICE}" \
|
|
56
|
+
--data-urlencode "schoolName=${SCHOOL_NAME}"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- `EDU_OFFICE`, `SCHOOL_NAME`은 사용자 입력을 그대로 넣어도 된다. 프록시가 교육청명을 코드로 해석한다.
|
|
60
|
+
- 응답의 `resolved_education_office.atpt_ofcdc_sc_code`로 실제 매칭된 시도교육청 코드를 확인할 수 있다.
|
|
61
|
+
|
|
62
|
+
### 3) Disambiguate when multiple schools match
|
|
63
|
+
|
|
64
|
+
`schoolInfo` 본문에서 `row`가 **여러 개**면 사용자에게 **학교명·주소(`ORG_RDNMA` 등)**를 보여 주고 하나를 고르게 한다.
|
|
65
|
+
|
|
66
|
+
한 건뿐이면 그 row의 `ATPT_OFCDC_SC_CODE`, `SD_SCHUL_CODE`를 다음 단계에 쓴다.
|
|
67
|
+
|
|
68
|
+
### 4) Fetch meal (`/v1/neis/school-meal`)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl -fsS --get "${BASE}/v1/neis/school-meal" \
|
|
72
|
+
--data-urlencode "educationOfficeCode=${ATPT}" \
|
|
73
|
+
--data-urlencode "schoolCode=${SD}" \
|
|
74
|
+
--data-urlencode "mealDate=${YYYYMMDD}"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- `ATPT` / `SD`는 3단계에서 확정한 코드.
|
|
78
|
+
- **조식·중식·석식만** 보고 싶으면 `mealKindCode=1|2|3` (선택).
|
|
79
|
+
|
|
80
|
+
### 5) Summarize for the user
|
|
81
|
+
|
|
82
|
+
- `mealServiceDietInfo` 안의 `row`를 기준으로 요약한다.
|
|
83
|
+
- 메뉴 문자열(`DDISH_NM` 등)의 `<br/>`는 줄바꿈으로 바꿔 읽기 쉽게 한다.
|
|
84
|
+
- 칼로리·영양 정보 필드가 있으면 한두 줄로 덧붙인다.
|
|
85
|
+
- NEIS가 빈 결과를 주면 "해당 일자 급식 데이터 없음" 가능성을 안내한다.
|
|
86
|
+
|
|
87
|
+
## Upstream reference
|
|
88
|
+
|
|
89
|
+
- 급식·학교기본정보 데이터: [나이스 교육정보 개방 포털](https://open.neis.go.kr/)
|
|
90
|
+
|
|
91
|
+
## Done when
|
|
92
|
+
|
|
93
|
+
- 교육청·학교·날짜를 확인했다.
|
|
94
|
+
- 학교 검색으로 단일 학교를 확정했다(또는 사용자가 선택했다).
|
|
95
|
+
- 급식 API 호출에 성공했고, 메뉴를 사용자 친화적으로 정리했다.
|
|
96
|
+
|
|
97
|
+
## Failure modes
|
|
98
|
+
|
|
99
|
+
- 프록시에 `KEDU_INFO_KEY` 미설정 → `503` / `upstream_not_configured`
|
|
100
|
+
- 교육청 이름이 여러 시도에 걸침 → `400` / `ambiguous_education_office`
|
|
101
|
+
- 학교명이 여러 건 — 사용자 선택 없이 임의로 고르지 말 것
|
|
102
|
+
- 공휴일·방학·미제공 일자로 빈 급식
|
|
103
|
+
- NEIS API 일시 장애·호출 제한
|
|
104
|
+
|
|
105
|
+
## Notes
|
|
106
|
+
|
|
107
|
+
- 학교 코드를 사용자에게 외우게 하지 않는다. 항상 `school-search` → `school-meal` 순서를 따른다.
|
|
108
|
+
- Raw JSON을 그대로 붙여 넣지 말고 요약 위주로 답한다.
|
|
109
|
+
- 자세한 엔드포인트·필드는 `docs/features/k-schoollunch-menu.md`와 `docs/features/k-skill-proxy.md`를 참고한다.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "k-schoollunch-menu",
|
|
3
|
+
"description": "Use when the user asks for Korean school meal menus (급식 식단) by natural-language education office and school name, via k-skill-proxy NEIS school-search and school-meal routes.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"lookup"
|
|
7
|
+
],
|
|
8
|
+
"frontmatter": "name: k-schoollunch-menu\ndescription: Use when the user asks for Korean school meal menus (급식 식단) by natural-language education office and school name, via k-skill-proxy NEIS school-search and school-meal routes.\nlicense: MIT\nmetadata:\n category: utility\n locale: ko-KR\n phase: v1"
|
|
9
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# k-skill-cleaner
|
|
2
|
+
|
|
3
|
+
## Safety contract
|
|
4
|
+
|
|
5
|
+
- **Do not delete skills automatically.** Produce a ranked recommendation first, then make deletions only after the user explicitly approves the shortlist.
|
|
6
|
+
- Treat trigger counts as **best-effort signals**, not absolute truth. Different agents store transcripts differently and may rotate or omit logs.
|
|
7
|
+
- Protect any skill the user marks as "keep", even if its trigger count is zero.
|
|
8
|
+
- Prefer removing whole root-level skill directories only after checking README/docs/install references in the same change.
|
|
9
|
+
|
|
10
|
+
## Interview first
|
|
11
|
+
|
|
12
|
+
Ask a compact interview before scanning or recommending deletion:
|
|
13
|
+
|
|
14
|
+
1. 어떤 에이전트를 주로 쓰나요? (Claude Code, Codex, OpenCode, OpenClaw/ClawHub, Hermes Agent, 기타)
|
|
15
|
+
2. 절대 지우면 안 되는 스킬은 무엇인가요?
|
|
16
|
+
3. 본인이 절대로 쓰지 않는다고 확신하는 스킬은 무엇인가요?
|
|
17
|
+
4. 최근 30/90/180일 중 어떤 기간의 사용 흔적을 우선 볼까요? helper 실행 시 `--days` 또는 `--since`로 반영합니다.
|
|
18
|
+
5. 추천만 원하나요, 아니면 승인 후 실제 삭제까지 원하나요?
|
|
19
|
+
|
|
20
|
+
## Trigger count sources by agent
|
|
21
|
+
|
|
22
|
+
| Agent | Where to check | Reliability | Notes |
|
|
23
|
+
| --- | --- | --- | --- |
|
|
24
|
+
| Claude Code | `~/.claude/projects/**/*.jsonl`, `~/.claude/transcripts/**/*.jsonl` | best-effort | Look for skill-trigger events, `$skill-name` mentions, and `SKILL.md` loads. |
|
|
25
|
+
| Codex | `~/.codex/sessions/**/*.jsonl`, `~/.codex/log/**/*.log`, `.omx/logs/**/*.log` | best-effort | Look for routed skill names, explicit `$skill` invocations, and skill file reads. |
|
|
26
|
+
| OpenCode | `~/.local/share/opencode/**/*.jsonl`, `~/.config/opencode/**/*.jsonl` | best-effort | If local schema differs, ask the user for an exported transcript or usage JSON. |
|
|
27
|
+
| OpenClaw/ClawHub | `~/.openclaw/**/*.jsonl`, `~/.clawhub/**/*.jsonl` if present | manual-confirm | No stable public local trigger-count schema is assumed; prefer exported stats when available. |
|
|
28
|
+
| Hermes Agent | `~/.hermes/**/*.jsonl`, `~/.config/hermes/**/*.jsonl` if present | manual-confirm | No stable public local trigger-count schema is assumed; prefer exported stats when available. |
|
|
29
|
+
|
|
30
|
+
## Local helper
|
|
31
|
+
|
|
32
|
+
From an installed standalone skill, run the deterministic helper from the `k-skill-cleaner` skill directory. In a full repository checkout, the compatibility wrapper at `scripts/k_skill_cleaner.py` accepts the same options.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
python3 scripts/k_skill_cleaner.py \
|
|
36
|
+
--skills-root . \
|
|
37
|
+
--scan-default-logs \
|
|
38
|
+
--days 90 \
|
|
39
|
+
--never-use blue-ribbon-nearby,lotto-results \
|
|
40
|
+
--keep k-skill-setup,k-skill-cleaner
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
For agent exports or hand-curated counts, pass a JSON object mapping skill name to trigger count:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python3 scripts/k_skill_cleaner.py --skills-root . --usage-json usage-counts.json --days 90
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`--days` and `--since` filter scanned log records only. `--usage-json` values are already-aggregated counts, so prepare/export that JSON for the same time window before passing it to the helper.
|
|
50
|
+
|
|
51
|
+
The helper prints JSON with:
|
|
52
|
+
|
|
53
|
+
- `skill_count`: number of root-level skills discovered.
|
|
54
|
+
- `candidates`: ranked `remove` or `review` candidates with `trigger_count` and `reasons`.
|
|
55
|
+
- `agent_usage_sources`: the agent-specific paths and caveats above.
|
|
56
|
+
- `time_window`: the effective `--since`/`--days` cutoff and mtime fallback caveat.
|
|
57
|
+
- `usage_json`: whether imported counts were merged and the pre-windowing caveat.
|
|
58
|
+
- `scanned_logs`: how many readable log files were scanned and which paths contributed best-effort evidence.
|
|
59
|
+
- `safety`: reminder that no files were deleted.
|
|
60
|
+
|
|
61
|
+
## Recommendation policy
|
|
62
|
+
|
|
63
|
+
- `remove`: user explicitly marked the skill as never used. Mention any zero/low trigger evidence as supporting context.
|
|
64
|
+
- `review`: trigger count is zero or below the selected low-usage threshold, but the user did not explicitly ask to remove it.
|
|
65
|
+
- `keep`: user-protected skills and actively triggered skills.
|
|
66
|
+
|
|
67
|
+
When reporting, group recommendations like this:
|
|
68
|
+
|
|
69
|
+
1. **삭제 후보** — interview says never used, with trigger evidence.
|
|
70
|
+
2. **검토 후보** — zero/low trigger count only.
|
|
71
|
+
3. **보존 후보** — protected or recently used.
|
|
72
|
+
4. **통계 한계** — which agents had no readable logs and require manual export.
|
|
73
|
+
|
|
74
|
+
## If deletion is approved
|
|
75
|
+
|
|
76
|
+
1. Remove the skill directory.
|
|
77
|
+
2. Remove README table/list entries and `docs/features/<skill>.md` links.
|
|
78
|
+
3. Remove `docs/install.md --skill <skill>` entries.
|
|
79
|
+
4. Remove package/workspace/test references only if the skill owns those files.
|
|
80
|
+
5. Run `npm run lint`, `npm run typecheck`, and `npm run test` (or `npm run ci` for packaging/release changes).
|