@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.
Files changed (350) hide show
  1. package/bin/k-skill.js +60 -0
  2. package/package.json +37 -0
  3. package/skills/assembly-bill-vote-search/instruction.md +111 -0
  4. package/skills/assembly-bill-vote-search/skill.json +10 -0
  5. package/skills/biz-health-check/instruction.md +69 -0
  6. package/skills/biz-health-check/scripts/biz_health_check.py +163 -0
  7. package/skills/biz-health-check/skill.json +10 -0
  8. package/skills/bok-ecos-stats/instruction.md +95 -0
  9. package/skills/bok-ecos-stats/scripts/bok_ecos.py +302 -0
  10. package/skills/bok-ecos-stats/skill.json +10 -0
  11. package/skills/building-register-search/instruction.md +69 -0
  12. package/skills/building-register-search/scripts/building_register.py +309 -0
  13. package/skills/building-register-search/scripts/building_register_xml.py +32 -0
  14. package/skills/building-register-search/skill.json +9 -0
  15. package/skills/bunjang-search/instruction.md +154 -0
  16. package/skills/bunjang-search/skill.json +10 -0
  17. package/skills/catchtable-sniper/instruction.md +270 -0
  18. package/skills/catchtable-sniper/skill.json +9 -0
  19. package/skills/cheap-gas-nearby/instruction.md +107 -0
  20. package/skills/cheap-gas-nearby/skill.json +10 -0
  21. package/skills/corporate-registration-consulting/instruction.md +117 -0
  22. package/skills/corporate-registration-consulting/scripts/fill_official_hwp.py +106 -0
  23. package/skills/corporate-registration-consulting/skill.json +8 -0
  24. package/skills/coupang-product-search/instruction.md +219 -0
  25. package/skills/coupang-product-search/scripts/coupang_partners_mcp.py +146 -0
  26. package/skills/coupang-product-search/skill.json +10 -0
  27. package/skills/court-auction-notice-search/instruction.md +201 -0
  28. package/skills/court-auction-notice-search/skill.json +9 -0
  29. package/skills/court-payment-order-assistant/instruction.md +120 -0
  30. package/skills/court-payment-order-assistant/skill.json +10 -0
  31. package/skills/d2b-notice-search/instruction.md +117 -0
  32. package/skills/d2b-notice-search/skill.json +10 -0
  33. package/skills/daangn-cars-search/instruction.md +91 -0
  34. package/skills/daangn-cars-search/scripts/daangn_cars.py +72 -0
  35. package/skills/daangn-cars-search/skill.json +9 -0
  36. package/skills/daangn-jobs-search/instruction.md +90 -0
  37. package/skills/daangn-jobs-search/scripts/daangn_jobs.py +98 -0
  38. package/skills/daangn-jobs-search/skill.json +9 -0
  39. package/skills/daangn-realty-search/instruction.md +114 -0
  40. package/skills/daangn-realty-search/scripts/daangn_detail_ld.py +76 -0
  41. package/skills/daangn-realty-search/scripts/daangn_realty.py +216 -0
  42. package/skills/daangn-realty-search/scripts/daangn_relay_store.py +174 -0
  43. package/skills/daangn-realty-search/skill.json +8 -0
  44. package/skills/daangn-used-goods-search/instruction.md +90 -0
  45. package/skills/daangn-used-goods-search/scripts/daangn_used_goods.py +80 -0
  46. package/skills/daangn-used-goods-search/skill.json +9 -0
  47. package/skills/daishin-report-search/instruction.md +138 -0
  48. package/skills/daishin-report-search/skill.json +10 -0
  49. package/skills/daiso-product-search/instruction.md +172 -0
  50. package/skills/daiso-product-search/skill.json +8 -0
  51. package/skills/danawa-price-search/instruction.md +183 -0
  52. package/skills/danawa-price-search/scripts/danawa_search.py +354 -0
  53. package/skills/danawa-price-search/skill.json +8 -0
  54. package/skills/delivery-tracking/instruction.md +358 -0
  55. package/skills/delivery-tracking/skill.json +8 -0
  56. package/skills/donation-place-search/instruction.md +129 -0
  57. package/skills/donation-place-search/skill.json +9 -0
  58. package/skills/emergency-room-beds/instruction.md +82 -0
  59. package/skills/emergency-room-beds/skill.json +8 -0
  60. package/skills/ev-charger-nearby/instruction.md +80 -0
  61. package/skills/ev-charger-nearby/scripts/ev_charger.py +222 -0
  62. package/skills/ev-charger-nearby/skill.json +10 -0
  63. package/skills/ev-subsidy-status/instruction.md +165 -0
  64. package/skills/ev-subsidy-status/skill.json +10 -0
  65. package/skills/express-bus-booking/instruction.md +207 -0
  66. package/skills/express-bus-booking/references/kobus-http-flow.md +159 -0
  67. package/skills/express-bus-booking/scripts/kobus_express_booking.py +243 -0
  68. package/skills/express-bus-booking/skill.json +8 -0
  69. package/skills/fine-dust-location/instruction.md +89 -0
  70. package/skills/fine-dust-location/skill.json +9 -0
  71. package/skills/flight-ticket-search/instruction.md +237 -0
  72. package/skills/flight-ticket-search/scripts/flight_ticket_search.py +501 -0
  73. package/skills/flight-ticket-search/skill.json +9 -0
  74. package/skills/foresttrip-vacancy/instruction.md +167 -0
  75. package/skills/foresttrip-vacancy/scripts/run_foresttrip_vacancy.py +549 -0
  76. package/skills/foresttrip-vacancy/skill.json +10 -0
  77. package/skills/fsc-corporate-info/instruction.md +57 -0
  78. package/skills/fsc-corporate-info/scripts/fsc_corporate_info.py +113 -0
  79. package/skills/fsc-corporate-info/skill.json +10 -0
  80. package/skills/g2b-order-plan-search/instruction.md +131 -0
  81. package/skills/g2b-order-plan-search/scripts/g2b_order_plan.py +158 -0
  82. package/skills/g2b-order-plan-search/skill.json +10 -0
  83. package/skills/g2b-sanctioned-supplier/instruction.md +61 -0
  84. package/skills/g2b-sanctioned-supplier/scripts/g2b_sanctioned_supplier.py +114 -0
  85. package/skills/g2b-sanctioned-supplier/skill.json +10 -0
  86. package/skills/gangnamunni-clinic-search/instruction.md +113 -0
  87. package/skills/gangnamunni-clinic-search/skill.json +9 -0
  88. package/skills/geeknews-search/instruction.md +69 -0
  89. package/skills/geeknews-search/scripts/geeknews_search.py +296 -0
  90. package/skills/geeknews-search/skill.json +8 -0
  91. package/skills/gongsijiga-search/instruction.md +128 -0
  92. package/skills/gongsijiga-search/skill.json +9 -0
  93. package/skills/gov-overseas-trip-report/instruction.md +488 -0
  94. package/skills/gov-overseas-trip-report/scripts/gov_overseas_trip_report.py +1206 -0
  95. package/skills/gov-overseas-trip-report/skill.json +9 -0
  96. package/skills/han-river-water-level/instruction.md +83 -0
  97. package/skills/han-river-water-level/skill.json +10 -0
  98. package/skills/highway-traffic-status/instruction.md +88 -0
  99. package/skills/highway-traffic-status/scripts/highway_traffic.py +315 -0
  100. package/skills/highway-traffic-status/skill.json +11 -0
  101. package/skills/hipass-receipt/instruction.md +97 -0
  102. package/skills/hipass-receipt/skill.json +10 -0
  103. package/skills/hola-poke-yeoksam/instruction.md +247 -0
  104. package/skills/hola-poke-yeoksam/skill.json +8 -0
  105. package/skills/household-waste-info/instruction.md +117 -0
  106. package/skills/household-waste-info/skill.json +10 -0
  107. package/skills/housing-official-price/instruction.md +177 -0
  108. package/skills/housing-official-price/skill.json +10 -0
  109. package/skills/hwp/instruction.md +206 -0
  110. package/skills/hwp/skill.json +8 -0
  111. package/skills/intercity-bus-booking/instruction.md +189 -0
  112. package/skills/intercity-bus-booking/references/tmoney-intercity-http-flow.md +126 -0
  113. package/skills/intercity-bus-booking/scripts/intercity_bus_search.py +381 -0
  114. package/skills/intercity-bus-booking/skill.json +8 -0
  115. package/skills/iros-registry-automation/instruction.md +229 -0
  116. package/skills/iros-registry-automation/scripts/iros_pdf_summary.py +249 -0
  117. package/skills/iros-registry-automation/scripts/upstream.pin +1 -0
  118. package/skills/iros-registry-automation/skill.json +9 -0
  119. package/skills/job-posting-match/instruction.md +130 -0
  120. package/skills/job-posting-match/scripts/job_posting_match.py +396 -0
  121. package/skills/job-posting-match/scripts/test_job_posting_match.py +54 -0
  122. package/skills/job-posting-match/skill.json +8 -0
  123. package/skills/jobkorea-talent-search/instruction.md +118 -0
  124. package/skills/jobkorea-talent-search/scripts/jobkorea_talent_models.py +27 -0
  125. package/skills/jobkorea-talent-search/scripts/jobkorea_talent_parse.py +186 -0
  126. package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search.py +94 -0
  127. package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search_condition.py +136 -0
  128. package/skills/jobkorea-talent-search/scripts/test_jobkorea_talent_search.py +76 -0
  129. package/skills/jobkorea-talent-search/skill.json +9 -0
  130. package/skills/joseon-sillok-search/instruction.md +76 -0
  131. package/skills/joseon-sillok-search/scripts/sillok_search.py +552 -0
  132. package/skills/joseon-sillok-search/skill.json +8 -0
  133. package/skills/k-dart/instruction.md +406 -0
  134. package/skills/k-dart/skill.json +8 -0
  135. package/skills/k-schoollunch-menu/instruction.md +109 -0
  136. package/skills/k-schoollunch-menu/skill.json +9 -0
  137. package/skills/k-skill-cleaner/instruction.md +80 -0
  138. package/skills/k-skill-cleaner/scripts/k_skill_cleaner.py +410 -0
  139. package/skills/k-skill-cleaner/skill.json +8 -0
  140. package/skills/k-skill-setup/instruction.md +253 -0
  141. package/skills/k-skill-setup/skill.json +11 -0
  142. package/skills/kakao-bar-nearby/instruction.md +76 -0
  143. package/skills/kakao-bar-nearby/skill.json +8 -0
  144. package/skills/kakao-map/instruction.md +176 -0
  145. package/skills/kakao-map/skill.json +10 -0
  146. package/skills/kakaotalk-mac/instruction.md +189 -0
  147. package/skills/kakaotalk-mac/skill.json +8 -0
  148. package/skills/kbl-results/instruction.md +89 -0
  149. package/skills/kbl-results/skill.json +9 -0
  150. package/skills/kbo-results/instruction.md +82 -0
  151. package/skills/kbo-results/skill.json +8 -0
  152. package/skills/keris-academic-search/instruction.md +81 -0
  153. package/skills/keris-academic-search/scripts/keris_academic.py +210 -0
  154. package/skills/keris-academic-search/skill.json +10 -0
  155. package/skills/kleague-results/instruction.md +92 -0
  156. package/skills/kleague-results/skill.json +8 -0
  157. package/skills/kopis-performance-search/instruction.md +109 -0
  158. package/skills/kopis-performance-search/skill.json +10 -0
  159. package/skills/korea-weather/instruction.md +93 -0
  160. package/skills/korea-weather/skill.json +10 -0
  161. package/skills/korean-character-count/instruction.md +87 -0
  162. package/skills/korean-character-count/scripts/korean_character_count.js +268 -0
  163. package/skills/korean-character-count/skill.json +8 -0
  164. package/skills/korean-cinema-search/instruction.md +177 -0
  165. package/skills/korean-cinema-search/skill.json +8 -0
  166. package/skills/korean-heritage-search/instruction.md +106 -0
  167. package/skills/korean-heritage-search/scripts/korean_heritage_search.py +321 -0
  168. package/skills/korean-heritage-search/skill.json +8 -0
  169. package/skills/korean-holiday-calendar/instruction.md +97 -0
  170. package/skills/korean-holiday-calendar/skill.json +9 -0
  171. package/skills/korean-humanizer/instruction.md +389 -0
  172. package/skills/korean-humanizer/references/ai-tell-taxonomy.md +147 -0
  173. package/skills/korean-humanizer/skill.json +8 -0
  174. package/skills/korean-jangbu-for/instruction.md +133 -0
  175. package/skills/korean-jangbu-for/scripts/install.sh +237 -0
  176. package/skills/korean-jangbu-for/scripts/upstream.pin +1 -0
  177. package/skills/korean-jangbu-for/skill.json +8 -0
  178. package/skills/korean-law-search/instruction.md +126 -0
  179. package/skills/korean-law-search/skill.json +10 -0
  180. package/skills/korean-marathon-schedule/instruction.md +111 -0
  181. package/skills/korean-marathon-schedule/skill.json +9 -0
  182. package/skills/korean-middle-korean/instruction.md +79 -0
  183. package/skills/korean-middle-korean/scripts/korean_middle_korean.js +214 -0
  184. package/skills/korean-middle-korean/skill.json +8 -0
  185. package/skills/korean-patent-search/instruction.md +79 -0
  186. package/skills/korean-patent-search/scripts/patent_search.py +409 -0
  187. package/skills/korean-patent-search/skill.json +9 -0
  188. package/skills/korean-privacy-terms/instruction.md +128 -0
  189. package/skills/korean-privacy-terms/scripts/install.sh +108 -0
  190. package/skills/korean-privacy-terms/scripts/upstream.pin +1 -0
  191. package/skills/korean-privacy-terms/skill.json +8 -0
  192. package/skills/korean-scholarship-search/instruction.md +317 -0
  193. package/skills/korean-scholarship-search/references/report-format.md +40 -0
  194. package/skills/korean-scholarship-search/references/school-discovery.md +61 -0
  195. package/skills/korean-scholarship-search/references/search-clues.md +58 -0
  196. package/skills/korean-scholarship-search/references/source-patterns.md +67 -0
  197. package/skills/korean-scholarship-search/scripts/scholarship_filter.py +811 -0
  198. package/skills/korean-scholarship-search/scripts/test_scholarship_filter.py +224 -0
  199. package/skills/korean-scholarship-search/scripts/university_search_plan.py +148 -0
  200. package/skills/korean-scholarship-search/skill.json +8 -0
  201. package/skills/korean-slang-writing/instruction.md +181 -0
  202. package/skills/korean-slang-writing/scripts/_slang_http.py +91 -0
  203. package/skills/korean-slang-writing/scripts/slang_lookup.py +291 -0
  204. package/skills/korean-slang-writing/scripts/slang_search.py +284 -0
  205. package/skills/korean-slang-writing/skill.json +8 -0
  206. package/skills/korean-spell-check/instruction.md +105 -0
  207. package/skills/korean-spell-check/scripts/korean_spell_check.py +523 -0
  208. package/skills/korean-spell-check/skill.json +9 -0
  209. package/skills/korean-stock-search/instruction.md +194 -0
  210. package/skills/korean-stock-search/skill.json +10 -0
  211. package/skills/korean-transit-route/instruction.md +113 -0
  212. package/skills/korean-transit-route/skill.json +10 -0
  213. package/skills/kosis-stats/instruction.md +232 -0
  214. package/skills/kosis-stats/references/kosis-openapi-guide.md +171 -0
  215. package/skills/kosis-stats/scripts/run_kosis_stats.py +896 -0
  216. package/skills/kosis-stats/skill.json +9 -0
  217. package/skills/kr-whois-lookup/instruction.md +107 -0
  218. package/skills/kr-whois-lookup/skill.json +10 -0
  219. package/skills/kstartup-search/instruction.md +186 -0
  220. package/skills/kstartup-search/scripts/run_kstartup.py +424 -0
  221. package/skills/kstartup-search/skill.json +11 -0
  222. package/skills/ktx-booking/instruction.md +244 -0
  223. package/skills/ktx-booking/skill.json +10 -0
  224. package/skills/lck-analytics/instruction.md +192 -0
  225. package/skills/lck-analytics/scripts/_lib.js +103 -0
  226. package/skills/lck-analytics/scripts/analyze-live-game.js +52 -0
  227. package/skills/lck-analytics/scripts/build-match-report.js +44 -0
  228. package/skills/lck-analytics/scripts/sync-oracle.js +50 -0
  229. package/skills/lck-analytics/skill.json +9 -0
  230. package/skills/lh-notice-search/instruction.md +206 -0
  231. package/skills/lh-notice-search/skill.json +10 -0
  232. package/skills/library-book-search/instruction.md +139 -0
  233. package/skills/library-book-search/skill.json +9 -0
  234. package/skills/local-election-candidate-search/instruction.md +77 -0
  235. package/skills/local-election-candidate-search/skill.json +8 -0
  236. package/skills/localdata-business-status/instruction.md +64 -0
  237. package/skills/localdata-business-status/scripts/localdata_business_status.py +206 -0
  238. package/skills/localdata-business-status/skill.json +8 -0
  239. package/skills/lotto-results/instruction.md +80 -0
  240. package/skills/lotto-results/skill.json +8 -0
  241. package/skills/lovebug-report/instruction.md +185 -0
  242. package/skills/lovebug-report/skill.json +9 -0
  243. package/skills/market-kurly-search/instruction.md +125 -0
  244. package/skills/market-kurly-search/skill.json +8 -0
  245. package/skills/mfds-drug-safety/instruction.md +86 -0
  246. package/skills/mfds-drug-safety/scripts/mfds_drug_safety.py +184 -0
  247. package/skills/mfds-drug-safety/skill.json +10 -0
  248. package/skills/mfds-food-safety/instruction.md +126 -0
  249. package/skills/mfds-food-safety/scripts/mfds_food_safety.py +281 -0
  250. package/skills/mfds-food-safety/skill.json +10 -0
  251. package/skills/myrealtrip-search/instruction.md +239 -0
  252. package/skills/myrealtrip-search/scripts/myrealtrip_mcp.py +194 -0
  253. package/skills/myrealtrip-search/scripts/test_myrealtrip_mcp.py +99 -0
  254. package/skills/myrealtrip-search/skill.json +9 -0
  255. package/skills/naming-house/instruction.md +146 -0
  256. package/skills/naming-house/skill.json +8 -0
  257. package/skills/national-pension-workplace/instruction.md +64 -0
  258. package/skills/national-pension-workplace/scripts/national_pension_workplace.py +113 -0
  259. package/skills/national-pension-workplace/skill.json +10 -0
  260. package/skills/naver-ad-performance/instruction.md +108 -0
  261. package/skills/naver-ad-performance/scripts/naver_ad_performance.py +240 -0
  262. package/skills/naver-ad-performance/skill.json +9 -0
  263. package/skills/naver-blog-research/instruction.md +128 -0
  264. package/skills/naver-blog-research/scripts/_naver_http.py +58 -0
  265. package/skills/naver-blog-research/scripts/naver_download_images.py +233 -0
  266. package/skills/naver-blog-research/scripts/naver_read.py +256 -0
  267. package/skills/naver-blog-research/scripts/naver_search.py +192 -0
  268. package/skills/naver-blog-research/skill.json +8 -0
  269. package/skills/naver-news-search/instruction.md +103 -0
  270. package/skills/naver-news-search/skill.json +10 -0
  271. package/skills/naver-shopping-search/instruction.md +94 -0
  272. package/skills/naver-shopping-search/skill.json +11 -0
  273. package/skills/nhis-care-checkup-search/instruction.md +116 -0
  274. package/skills/nhis-care-checkup-search/skill.json +10 -0
  275. package/skills/nts-business-registration/instruction.md +115 -0
  276. package/skills/nts-business-registration/scripts/nts_business_registration.py +215 -0
  277. package/skills/nts-business-registration/skill.json +10 -0
  278. package/skills/nts-tax-delinquency/instruction.md +54 -0
  279. package/skills/nts-tax-delinquency/scripts/nts_tax_delinquency.py +150 -0
  280. package/skills/nts-tax-delinquency/skill.json +8 -0
  281. package/skills/ohou-today-deal/instruction.md +182 -0
  282. package/skills/ohou-today-deal/scripts/ohou_today_deal.py +369 -0
  283. package/skills/ohou-today-deal/skill.json +9 -0
  284. package/skills/olive-young-search/instruction.md +154 -0
  285. package/skills/olive-young-search/skill.json +8 -0
  286. package/skills/parking-lot-search/instruction.md +96 -0
  287. package/skills/parking-lot-search/skill.json +9 -0
  288. package/skills/popbill/instruction.md +146 -0
  289. package/skills/popbill/scripts/popbill_cli.py +284 -0
  290. package/skills/popbill/scripts/popbill_registry.py +54 -0
  291. package/skills/popbill/scripts/popbill_safety.py +37 -0
  292. package/skills/popbill/scripts/popbill_templates.py +71 -0
  293. package/skills/popbill/skill.json +9 -0
  294. package/skills/public-restroom-nearby/instruction.md +89 -0
  295. package/skills/public-restroom-nearby/skill.json +9 -0
  296. package/skills/real-estate-search/instruction.md +172 -0
  297. package/skills/real-estate-search/skill.json +10 -0
  298. package/skills/rhwp-advanced/instruction.md +145 -0
  299. package/skills/rhwp-advanced/skill.json +8 -0
  300. package/skills/rhwp-edit/instruction.md +153 -0
  301. package/skills/rhwp-edit/skill.json +8 -0
  302. package/skills/s2b-notice-search/instruction.md +66 -0
  303. package/skills/s2b-notice-search/skill.json +9 -0
  304. package/skills/saju-fortune/instruction.md +177 -0
  305. package/skills/saju-fortune/skill.json +8 -0
  306. package/skills/saramin-talent-search/instruction.md +119 -0
  307. package/skills/saramin-talent-search/skill.json +9 -0
  308. package/skills/seoul-bike/instruction.md +83 -0
  309. package/skills/seoul-bike/scripts/seoul_bike.py +247 -0
  310. package/skills/seoul-bike/skill.json +10 -0
  311. package/skills/seoul-density/instruction.md +109 -0
  312. package/skills/seoul-density/scripts/seoul_density.py +271 -0
  313. package/skills/seoul-density/skill.json +10 -0
  314. package/skills/seoul-subway-arrival/instruction.md +85 -0
  315. package/skills/seoul-subway-arrival/skill.json +9 -0
  316. package/skills/sh-notice-search/instruction.md +150 -0
  317. package/skills/sh-notice-search/skill.json +9 -0
  318. package/skills/srt-booking/instruction.md +181 -0
  319. package/skills/srt-booking/scripts/srt_booking.py +272 -0
  320. package/skills/srt-booking/scripts/srt_seats.py +156 -0
  321. package/skills/srt-booking/skill.json +20 -0
  322. package/skills/subway-lost-property/instruction.md +93 -0
  323. package/skills/subway-lost-property/scripts/subway_lost_property.py +244 -0
  324. package/skills/subway-lost-property/skill.json +8 -0
  325. package/skills/ticket-availability/instruction.md +175 -0
  326. package/skills/ticket-availability/scripts/ticket_availability.py +430 -0
  327. package/skills/ticket-availability/skill.json +9 -0
  328. package/skills/toss-securities/instruction.md +116 -0
  329. package/skills/toss-securities/skill.json +9 -0
  330. package/skills/used-car-price-search/instruction.md +109 -0
  331. package/skills/used-car-price-search/skill.json +8 -0
  332. package/skills/yebigun-training/instruction.md +177 -0
  333. package/skills/yebigun-training/skill.json +9 -0
  334. package/skills/zipcode-search/instruction.md +159 -0
  335. package/skills/zipcode-search/scripts/zipcode_search.py +150 -0
  336. package/skills/zipcode-search/skill.json +8 -0
  337. package/src/assemble.js +134 -0
  338. package/src/detect.js +18 -0
  339. package/templates/action-account.md +4 -0
  340. package/templates/action-booking.md +5 -0
  341. package/templates/action-commerce.md +5 -0
  342. package/templates/action-communication.md +5 -0
  343. package/templates/action-submission.md +5 -0
  344. package/templates/browser.md +4 -0
  345. package/templates/core.md +5 -0
  346. package/templates/hard-boundary.md +3 -0
  347. package/templates/local.md +2 -0
  348. package/templates/lookup.md +2 -0
  349. package/templates/proxy.md +2 -0
  350. package/templates/vault.md +4 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "k-skill-setup",
3
+ "description": "After installing the full k-skill bundle, configure and verify the shared cross-platform setup, then optionally wire update checks and GitHub starring with explicit user consent.",
4
+ "profiles": [
5
+ "proxy",
6
+ "vault",
7
+ "browser",
8
+ "local"
9
+ ],
10
+ "frontmatter": "name: k-skill-setup\ndescription: After installing the full k-skill bundle, configure and verify the shared cross-platform setup, then optionally wire update checks and GitHub starring with explicit user consent.\nlicense: MIT\nmetadata:\n category: setup\n locale: ko-KR\n phase: v1"
11
+ }
@@ -0,0 +1,76 @@
1
+ # Kakao Bar Nearby
2
+
3
+ ## What this skill does
4
+
5
+ 유저가 알려준 현재 위치를 기준으로 **카카오맵 기준 근처 술집**을 찾아준다.
6
+
7
+ - 위치는 자동으로 추정하지 않는다.
8
+ - **반드시 먼저 현재 위치를 질문**한다.
9
+ - `서울역`, `강남`, `사당`, `신논현`, `논현` 같은 역명/동네/랜드마크 질의를 그대로 받을 수 있다.
10
+ - 결과에는 현재 영업 상태, 대표 메뉴, 좌석 옵션(단체석/바테이블 등), 전화번호를 포함한다.
11
+
12
+ ## When to use
13
+
14
+ - "서울역 근처 술집 찾아줘"
15
+ - "강남에서 지금 영업중인 와인바 뭐 있어?"
16
+ - "논현 근처 4명 갈만한 술집 알려줘"
17
+ - "사당에서 전화번호 있는 이자카야 몇 군데만 보여줘"
18
+
19
+ ## Mandatory first question
20
+
21
+ 위치 정보 없이 바로 검색하지 말고 반드시 먼저 물어본다.
22
+
23
+ - 권장 질문: `현재 위치를 알려주세요. 서울역/강남/사당 같은 역명이나 동네명으로 보내주시면 카카오맵 기준 근처 술집을 찾아볼게요.`
24
+ - 위치가 애매하면: `가까운 역명이나 동 이름으로 한 번만 더 알려주세요.`
25
+
26
+ ## Official Kakao Map surfaces
27
+
28
+ - 모바일 검색: `https://m.map.kakao.com/actions/searchView?q=<query>`
29
+ - 장소 패널 JSON: `https://place-api.map.kakao.com/places/panel3/<confirmId>`
30
+ - 장소 상세 페이지: `https://place.map.kakao.com/<confirmId>`
31
+
32
+ ## Workflow
33
+
34
+ 1. 유저에게 반드시 현재 위치를 묻는다.
35
+ 2. 받은 위치 문자열을 카카오맵 검색으로 anchor 후보(역/랜드마크)로 해석한다.
36
+ 3. 같은 위치 문자열에 `술집` 키워드를 붙여 nearby 술집 검색 결과를 가져온다.
37
+ 4. 상위 후보의 panel3 JSON 을 조회해 현재 영업 상태, 메뉴, 좌석 옵션, 전화번호를 정규화한다.
38
+ 5. **영업 중인 술집을 먼저** 보여주고, 필요하면 곧 열 곳도 함께 보여준다.
39
+
40
+ ## Responding
41
+
42
+ 보통 3~5개만 짧게 정리한다.
43
+
44
+ - 술집명
45
+ - 카테고리
46
+ - 영업 상태 (`영업 중`, `영업 전`, `휴무일` 등)
47
+ - 대표 메뉴 2~3개
48
+ - 좌석/인원 수용 힌트 (`단체석`, `바테이블` 등)
49
+ - 전화번호
50
+ - 거리(가능하면)
51
+
52
+ ## Node.js example
53
+
54
+ ```js
55
+ const { searchNearbyBarsByLocationQuery } = require("kakao-bar-nearby");
56
+
57
+ async function main() {
58
+ const result = await searchNearbyBarsByLocationQuery("서울역", {
59
+ limit: 5
60
+ });
61
+
62
+ console.log(result.anchor);
63
+ console.log(result.items);
64
+ }
65
+
66
+ main().catch((error) => {
67
+ console.error(error);
68
+ process.exitCode = 1;
69
+ });
70
+ ```
71
+
72
+ ## Done when
73
+
74
+ - 유저의 현재 위치를 먼저 확인했다.
75
+ - 카카오맵 기준 술집 결과를 최소 1개 이상 찾았거나, 찾지 못한 이유와 다음 질문을 제시했다.
76
+ - 영업 상태/메뉴/좌석 옵션/전화번호가 포함된 요약을 보여줬다.
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "kakao-bar-nearby",
3
+ "description": "Use when the user asks for nearby bars or 근처 술집. Always ask the user's current location first, then use Kakao Map search + place detail panels to find open-now bars with menu, seating, and phone hints. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
+ "profiles": [
5
+ "action:booking"
6
+ ],
7
+ "frontmatter": "name: kakao-bar-nearby\ndescription: Use when the user asks for nearby bars or 근처 술집. Always ask the user's current location first, then use Kakao Map search + place detail panels to find open-now bars with menu, seating, and phone hints. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: food\n locale: ko-KR\n phase: v1"
8
+ }
@@ -0,0 +1,176 @@
1
+ # Kakao Map
2
+
3
+ ## What this skill does
4
+
5
+ Kakao Developers의 두 API를 `k-skill-proxy` 경유로 묶어 다음 두 종류 질문에 답한다:
6
+
7
+ 1. **장소 검색** — 키워드/카테고리/좌표 기준으로 가게·시설·랜드마크를 찾고, 좌표↔주소·행정구역을 변환한다 (Kakao Local REST API).
8
+ 2. **자동차 길찾기** — 출발지·목적지 좌표를 받아 거리·소요시간·통행료·예상 택시 요금을 조회한다 (Kakao Mobility Directions API).
9
+
10
+ - 운영자 `KAKAO_REST_API_KEY` 를 proxy 서버에만 보관한다. 사용자는 키 발급 필요 없음.
11
+ - 두 API 모두 같은 Kakao REST API key (KakaoAK 헤더) 로 인증한다.
12
+ - 본 스킬은 **조회 전용**이다. 예약·결제·운전 자동화는 하지 않는다.
13
+
14
+ ## When to use
15
+
16
+ - "강남역 근처 스타벅스 찾아줘" → keyword 검색 (x,y 중심)
17
+ - "역삼동 카페 카테고리로 보여줘" → category 검색 (FD6/CE7 등)
18
+ - "이 좌표가 어느 동/도로명 주소야?" → coord2address / coord2region
19
+ - "강남역에서 시청까지 자동차로 얼마나 걸려?" → Kakao Mobility directions
20
+ - "통행료 회피 경로로 알려줘" → avoid=toll (필요 시 priority=DISTANCE 병행)
21
+
22
+ ## When NOT to use
23
+
24
+ - 대중교통(지하철·버스) 경로 → Kakao Mobility는 **자동차 전용**. 대중교통은 `korean-transit-route`(ODsay) 사용
25
+ - 도보·자전거 경로 (Kakao Mobility에 정식 API 없음)
26
+ - 실시간 교통 상황을 1분 단위로 추적 (proxy cache 가 있음)
27
+ - 카카오맵 외부 임베드/렌더링 (본 스킬은 데이터 조회만 함)
28
+ - 대량 인덱싱/스크래핑 (Kakao 약관 위반 + 일일 quota 초과 위험)
29
+
30
+ ## Prerequisites
31
+
32
+ - Python 3 표준 라이브러리만 사용 가능. JS/curl 호출도 동일하게 지원.
33
+ - optional: `KSKILL_PROXY_BASE_URL` (self-host·별도 프록시 사용 시. 비우면 hosted `https://k-skill-proxy.nomadamas.org` 기본).
34
+
35
+ ## Required environment variables
36
+
37
+ 사용자 머신에는 **필요 없다.** 운영자 proxy 서버에 다음을 둔다:
38
+
39
+ - `KAKAO_REST_API_KEY` — Kakao Developers REST API 키 (Local + Mobility 공용)
40
+
41
+ 키가 없으면 모든 `/v1/kakao-map/*` 및 `/v1/kakao-mobility/*` 라우트가 `503 upstream_not_configured` 를 돌려준다.
42
+
43
+ ## Proxy routes
44
+
45
+ | endpoint | 용도 | 주요 입력 |
46
+ |---|---|---|
47
+ | `GET /v1/kakao-map/search/keyword` | 키워드 장소 검색 | `q`, optional `x`,`y`(중심좌표), `radius`(0~20000m), `category_group_code`, `sort`(accuracy\|distance), `page`(1~45), `size`(1~15) |
48
+ | `GET /v1/kakao-map/search/category` | 카테고리 장소 검색 (좌표 중심 필수) | `category_group_code`(예: FD6 음식점, CE7 카페), `x`, `y`, `radius`(기본 500), `sort`, `page`, `size` |
49
+ | `GET /v1/kakao-map/coord2address` | 좌표 → 도로명/지번 주소 | `x`, `y`, optional `input_coord`(WGS84 기본) |
50
+ | `GET /v1/kakao-map/coord2region` | 좌표 → 행정구역(시/도/시군구/동) | `x`, `y`, optional `input_coord` |
51
+ | `GET /v1/kakao-mobility/directions` | 자동차 길찾기 | `origin=x,y`, `destination=x,y`, optional `waypoints`(최대 5, `\|` 구분), `priority`(RECOMMEND\|TIME\|DISTANCE), `car_fuel`(GASOLINE\|DIESEL\|LPG), `car_hipass`(true\|false), `alternatives`(true\|false), `avoid`(ferries\|toll\|motorway\|schoolzone\|uturn; `\|` 구분) |
52
+
53
+ **Kakao 카테고리 그룹 코드** (자주 쓰는 것):
54
+
55
+ | 코드 | 의미 |
56
+ |---|---|
57
+ | MT1 | 대형마트 |
58
+ | CS2 | 편의점 |
59
+ | PK6 | 주차장 |
60
+ | OL7 | 주유소/충전소 |
61
+ | SW8 | 지하철역 |
62
+ | BK9 | 은행 |
63
+ | CT1 | 문화시설 |
64
+ | AT4 | 관광명소 |
65
+ | AD5 | 숙박 |
66
+ | FD6 | 음식점 |
67
+ | CE7 | 카페 |
68
+ | HP8 | 병원 |
69
+ | PM9 | 약국 |
70
+
71
+ ## Workflow
72
+
73
+ ### 1. 키워드 검색
74
+
75
+ ```bash
76
+ BASE="${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}"
77
+ curl -fsS --get "${BASE}/v1/kakao-map/search/keyword" \
78
+ --data-urlencode 'q=스타벅스' \
79
+ --data-urlencode 'x=127.0276' \
80
+ --data-urlencode 'y=37.4979' \
81
+ --data-urlencode 'radius=500' \
82
+ --data-urlencode 'sort=distance'
83
+ ```
84
+
85
+ 응답의 `documents[]` 에서 `place_name`, `road_address_name`, `phone`, `place_url`, `distance` 를 추출해 사용자에게 보여준다.
86
+
87
+ ### 2. 카테고리 검색
88
+
89
+ ```bash
90
+ curl -fsS --get "${BASE}/v1/kakao-map/search/category" \
91
+ --data-urlencode 'category_group_code=FD6' \
92
+ --data-urlencode 'x=127.0276' \
93
+ --data-urlencode 'y=37.4979' \
94
+ --data-urlencode 'radius=300'
95
+ ```
96
+
97
+ ### 3. 좌표 → 주소
98
+
99
+ ```bash
100
+ curl -fsS --get "${BASE}/v1/kakao-map/coord2address" \
101
+ --data-urlencode 'x=127.0276' \
102
+ --data-urlencode 'y=37.4979'
103
+ ```
104
+
105
+ `documents[0].road_address.address_name`, `documents[0].address.address_name` 사용.
106
+
107
+ ### 4. 좌표 → 행정구역
108
+
109
+ ```bash
110
+ curl -fsS --get "${BASE}/v1/kakao-map/coord2region" \
111
+ --data-urlencode 'x=127.0276' \
112
+ --data-urlencode 'y=37.4979'
113
+ ```
114
+
115
+ 응답에 `region_type`(B=법정동, H=행정동) 별 결과가 들어있다.
116
+
117
+ ### 5. 자동차 길찾기
118
+
119
+ ```bash
120
+ curl -fsS --get "${BASE}/v1/kakao-mobility/directions" \
121
+ --data-urlencode 'origin=126.9706,37.5559' \
122
+ --data-urlencode 'destination=127.0276,37.4979' \
123
+ --data-urlencode 'priority=RECOMMEND' \
124
+ --data-urlencode 'avoid=toll'
125
+ ```
126
+
127
+ 응답에서 `routes[0].summary` 를 읽는다:
128
+
129
+ - `distance` (meter) → km 환산
130
+ - `duration` (second) → 분 환산
131
+ - `fare.taxi`, `fare.toll` → 원
132
+ - `priority` (요청한 값 echo)
133
+ - `avoid` 요청 시 `toll` 등 회피 옵션 적용
134
+
135
+ ### 6. 출력 포맷
136
+
137
+ 장소 검색:
138
+
139
+ ```text
140
+ 강남역 근처 스타벅스 5곳 (반경 500m, 가까운 순)
141
+ 1) 스타벅스 강남R점 — 강남구 테헤란로 ... (120m, 02-...)
142
+ 2) ...
143
+ ```
144
+
145
+ 자동차 길찾기:
146
+
147
+ ```text
148
+ 자동차 경로: (126.9706,37.5559) → (127.0276,37.4979)
149
+ - 거리: 12.3km / 예상 소요시간: 25분
150
+ - 통행료: 1,200원 / 예상 택시요금: 18,500원
151
+ - 옵션: RECOMMEND, avoid=toll
152
+ - 조회 시각: 2026-05-23T14:00:00.000Z
153
+ ```
154
+
155
+ ## Failure modes
156
+
157
+ - `KAKAO_REST_API_KEY` 미설정 → `503 upstream_not_configured`
158
+ - Kakao 인증 실패(401/403) → proxy가 `503` 으로 변환 (key revoke / 쿼터 초과 신호)
159
+ - 좌표/파라미터 형식 오류 → `400 bad_request`
160
+ - 출발지=도착지가 너무 가까움 (`result_code=104` 등) → `502 upstream_semantic_error` + `result_msg`
161
+ - Kakao 일일 쿼터 초과 → `502` 또는 `503` (proxy cache 가 있는 만큼 호출 빈도를 줄임)
162
+ - 네트워크 실패 → `502 upstream_error`
163
+
164
+ ## Done when
165
+
166
+ - 사용자 질문에 맞는 endpoint 1~2개를 선택해 호출했고, 응답을 사람-읽기 좋게 정리했다.
167
+ - 좌표나 주소는 출처 endpoint를 함께 명시한다 (Kakao Local vs Kakao Mobility).
168
+ - secret/token/.env 원문은 노출되지 않았다.
169
+ - 자동차 외 이동 수단을 요청받으면 본 스킬의 범위 외임을 명시하고 `korean-transit-route` 등 대체 안내.
170
+
171
+ ## Notes
172
+
173
+ - Kakao Mobility는 **자동차 전용** API다. 대중교통 길찾기는 별도 ODsay 기반 `korean-transit-route` 스킬을 쓴다.
174
+ - 무료 일일 쿼터(2026년 기준 Local 300,000건 / Mobility 1,000건) 안에서 proxy cache(기본 TTL 5분) + rate-limit(기본 60req/분) 으로 보호한다.
175
+ - proxy 운영/환경변수는 [k-skill 프록시 서버 가이드](../docs/features/k-skill-proxy.md) 참고.
176
+ - `/v1/kakao-local/geocode` (기존)도 같은 키를 쓰며 여전히 사용 가능하다 (address → keyword 자동 fallback). 본 스킬은 그 위에 keyword/category/coord 계열을 명시적으로 노출한다.
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "kakao-map",
3
+ "description": "Kakao Local (장소 검색·주소-좌표 변환) + Kakao Mobility (자동차 길찾기) 를 k-skill-proxy 경유로 조회한다. 사용자 키 불필요. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
+ "profiles": [
5
+ "proxy",
6
+ "vault",
7
+ "action:booking"
8
+ ],
9
+ "frontmatter": "name: kakao-map\ndescription: Kakao Local (장소 검색·주소-좌표 변환) + Kakao Mobility (자동차 길찾기) 를 k-skill-proxy 경유로 조회한다. 사용자 키 불필요. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: transit\n locale: ko-KR\n phase: v1"
10
+ }
@@ -0,0 +1,189 @@
1
+ # KakaoTalk katok Search
2
+
3
+ ## What this skill does
4
+
5
+ `katok` CLI를 유일한 실행 표면으로 사용해 macOS 카카오톡 대화를 로컬 아카이브와 검색 인덱스로 동기화하고, keyword/BM25/semantic 검색과 chunk 조회를 수행한다.
6
+
7
+ 이 스킬은 기존 `kakaotalk-mac` 설치 경로를 유지하지만 내부 동작은 `katok` 기반이다. 메시지 전송, 삭제, UI 자동화, 직접 DB 읽기, 인증 캐시 처리, 복호화 material 처리는 이 스킬의 범위가 아니다.
8
+
9
+ ## Privacy Rules
10
+
11
+ - Do not inspect local database internals from this skill.
12
+ - Do not directly read KakaoTalk DB files.
13
+ - Do not handle auth caches or decryption material.
14
+ - Use `katok sync --source macos --json` for live macOS KakaoTalk ingestion.
15
+ - Search commands should return snippets and chunk ids first.
16
+ - Retrieve full chunk content only when the user explicitly asks to open a result or provides a chunk id.
17
+
18
+ ## When to use
19
+
20
+ - "카카오톡에서 특정 키워드 검색해줘"
21
+ - "카톡에서 지난 회의/계약/약속 이야기 찾아줘"
22
+ - "이 검색 결과 chunk를 열어줘"
23
+ - "최근 대화가 반영됐는지 확인하고 검색해줘"
24
+
25
+ ## When not to use
26
+
27
+ - macOS가 아닌 환경
28
+ - Intel Mac에서 로컬 EmbeddingGemma semantic index가 필요한 경우
29
+ - 카카오톡 메시지를 보내거나 삭제해야 하는 경우
30
+ - 카카오톡 DB 파일, 인증 캐시, 복호화 material을 직접 다루라는 요청
31
+ - 서버-투-서버 공식 Kakao API 연동 요청
32
+
33
+ ## Prerequisites
34
+
35
+ - Apple Silicon macOS
36
+ - KakaoTalk for Mac 설치
37
+ - Homebrew 또는 Cargo
38
+ - `katok` CLI 설치
39
+ - 현재 터미널 앱에 Full Disk Access 권한
40
+
41
+ ## Install katok
42
+
43
+ Homebrew:
44
+
45
+ ```bash
46
+ brew tap NomaDamas/katok https://github.com/NomaDamas/katok.git
47
+ brew install katok
48
+ ```
49
+
50
+ Cargo:
51
+
52
+ ```bash
53
+ cargo install katok
54
+ export PATH="$HOME/.cargo/bin:$PATH"
55
+ ```
56
+
57
+ 설치 후 CLI가 보이는지 확인한다.
58
+
59
+ ```bash
60
+ katok --help
61
+ katok doctor --json
62
+ ```
63
+
64
+ ## Workflow
65
+
66
+ ### 1. Check readiness without prompting for app data
67
+
68
+ ```bash
69
+ katok doctor --json
70
+ ```
71
+
72
+ `doctor --json`의 `freshness` 섹션에서 마지막 sync/index 상태를 확인한다. 이 기본 doctor는 macOS app-data probe를 실행하지 않으므로 권한 prompt를 띄우지 않는 준비 상태 점검에 적합하다.
73
+
74
+ ### 2. Open macOS permission settings when needed
75
+
76
+ Full Disk Access 설정이 필요하면 사용자가 직접 허용할 수 있도록 설정 화면을 연다.
77
+
78
+ ```bash
79
+ katok permissions macos
80
+ ```
81
+
82
+ KakaoTalk UI 자동화는 이 스킬 범위가 아니지만, upstream 진단을 위해 Accessibility 설정 화면까지 열어야 하는 경우에만 다음 명령을 쓴다.
83
+
84
+ ```bash
85
+ katok permissions macos --accessibility
86
+ ```
87
+
88
+ ### 3. Run explicit macOS setup diagnostics only when needed
89
+
90
+ 카카오톡 앱 설치, container, DB 파일 접근 같은 macOS source adapter 상태를 확인해야 할 때만 probe를 실행한다. 이 명령은 macOS가 app-data 접근 prompt를 띄울 수 있다.
91
+
92
+ ```bash
93
+ katok doctor --macos-probe --json
94
+ ```
95
+
96
+ ### 4. Sync local KakaoTalk archives
97
+
98
+ 최신 대화가 중요하거나 `freshness.recommendation.sync_before_search`가 true이면 검색 전에 sync한다.
99
+
100
+ ```bash
101
+ katok sync --source macos --json
102
+ ```
103
+
104
+ 설정 파일의 기본 source adapter를 쓰는 경우:
105
+
106
+ ```bash
107
+ katok sync --json
108
+ ```
109
+
110
+ ### 5. Build or refresh the semantic index
111
+
112
+ semantic search 전 `freshness.recommendation.index_before_semantic_search`가 true이거나 방금 sync한 내용을 semantic 검색에 반영해야 하면 index를 만든다.
113
+
114
+ ```bash
115
+ katok index --json
116
+ ```
117
+
118
+ `katok index`는 기본적으로 로컬 `embeddinggemma-300m-q4` embedder를 사용한다. Python, Jina, TEI, 별도 HTTP embedding server를 요구하지 않는다.
119
+
120
+ ### 6. Search with the narrowest useful mode
121
+
122
+ 정확한 문자열, 이름, 계좌번호, 고유명사는 keyword search를 먼저 쓴다.
123
+
124
+ ```bash
125
+ katok search keyword "검색어" --json
126
+ ```
127
+
128
+ 여러 단어가 섞인 일반 질의는 BM25를 쓴다.
129
+
130
+ ```bash
131
+ katok search bm25 "지난주 미팅 자료" --json
132
+ ```
133
+
134
+ 표현이 정확히 기억나지 않는 의미 기반 질의는 semantic search를 쓴다.
135
+
136
+ ```bash
137
+ katok search semantic "최근에 논의한 세금 신고 일정" --json
138
+ ```
139
+
140
+ ### 7. Retrieve explicit chunks only when needed
141
+
142
+ 검색 결과는 먼저 snippet과 chunk id 중심으로 요약한다. 사용자가 특정 결과를 열어 달라고 하거나 chunk id를 제공했을 때만 원문 chunk를 조회한다.
143
+
144
+ ```bash
145
+ katok chunk get <chunk-id> --json
146
+ katok chunk context <chunk-id> --json
147
+ katok chunk parent <chunk-id> --json
148
+ ```
149
+
150
+ - `katok chunk get <chunk-id> --json`: 해당 chunk 원문 조회
151
+ - `katok chunk context <chunk-id> --json`: 같은 채팅방의 직전/직후 micro chunk 조회
152
+ - `katok chunk parent <chunk-id> --json`: semantic search parent window 조회
153
+
154
+ ## Synthetic QA only
155
+
156
+ 실제 카카오톡 설치 없이 upstream fixture로 테스트할 때만 fixture source와 deterministic embedder를 사용한다.
157
+
158
+ ```bash
159
+ katok sync --source fixture tests/fixtures/kakao/replies.jsonl --json
160
+ KATOK_EMBEDDER=local-test katok index --json
161
+ KATOK_EMBEDDER=mock katok index --json
162
+ ```
163
+
164
+ 실사용 경로에서는 fixture, mock embedder, 원격 embedding endpoint를 사용하지 않는다.
165
+
166
+ ## Done when
167
+
168
+ - readiness 요청이면 `katok doctor --json` 결과와 freshness 권장사항을 요약했다.
169
+ - 최신 검색 요청이면 필요한 경우 `katok sync --source macos --json`과 `katok index --json` 실행 여부를 명확히 했다.
170
+ - 검색 요청이면 keyword/BM25/semantic 중 선택한 이유와 JSON 검색 결과 요약을 제공했다.
171
+ - chunk 조회 요청이면 사용자가 지정한 chunk id에 대해서만 `katok chunk get/context/parent` 결과를 요약했다.
172
+
173
+ ## Failure modes
174
+
175
+ - `katok` 미설치 또는 Cargo binary PATH 누락
176
+ - Apple Silicon macOS가 아님
177
+ - KakaoTalk for Mac 미설치
178
+ - Full Disk Access 미부여
179
+ - `katok doctor --macos-probe --json`에서 container 또는 DB 파일 접근 실패
180
+ - sync 전이라 local archive가 비어 있음
181
+ - semantic index가 오래되었거나 아직 생성되지 않음
182
+ - 검색 결과가 snippet/chunk id만으로 충분하지 않아 명시적 chunk 조회가 필요함
183
+
184
+ ## Notes
185
+
186
+ - 이 스킬은 read/search/retrieve 전용이다.
187
+ - 메시지 전송과 삭제는 지원하지 않는다.
188
+ - DB 내부 구조, auth cache, decryption material은 직접 다루지 않는다.
189
+ - 기존 설치 이름은 `kakaotalk-mac`이지만 실행 표면은 `katok`이다.
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "kakaotalk-mac",
3
+ "description": "Search local KakaoTalk archives on Apple Silicon macOS through the katok CLI. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
+ "profiles": [
5
+ "action:communication"
6
+ ],
7
+ "frontmatter": "name: kakaotalk-mac\ndescription: Search local KakaoTalk archives on Apple Silicon macOS through the katok CLI. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: messaging\n locale: ko-KR\n phase: v2"
8
+ }
@@ -0,0 +1,89 @@
1
+ # KBL Results
2
+
3
+ ## What this skill does
4
+
5
+ 공식 KBL JSON 표면으로 특정 날짜의 한국프로농구 경기 일정/결과를 조회하고, 필요하면 특정 팀(예: `서울 SK`, `부산 KCC`, 팀 코드 `55`)만 필터링한 뒤 현재 팀 순위까지 함께 정리한다.
6
+
7
+ ## When to use
8
+
9
+ - "오늘 KBL 경기 결과 알려줘"
10
+ - "2026-04-01 서울 SK 경기 결과 보여줘"
11
+ - "KBL 현재 팀 순위 알려줘"
12
+
13
+ ## Prerequisites
14
+
15
+ - Node.js 18+
16
+ - `npm install -g kbl-results`
17
+
18
+ ## Inputs
19
+
20
+ - 날짜: `YYYY-MM-DD`
21
+ - 선택 사항: 팀명, 풀네임, 팀 코드
22
+
23
+ ## Workflow
24
+
25
+ ### 0. Install the package globally when missing
26
+
27
+ `npm root -g` 아래에 `kbl-results` 가 없으면 HTML scraping 으로 우회하지 말고 먼저 전역 Node 패키지 설치를 시도한다.
28
+
29
+ ```bash
30
+ npm install -g kbl-results
31
+ ```
32
+
33
+ ### 1. Fetch the official KBL JSON
34
+
35
+ 공식 KBL 웹앱은 `https://api.kbl.or.kr` JSON API를 사용한다. 따라서 브라우저 크롤링 전에 아래 표면을 우선 사용한다.
36
+
37
+ - 일정/결과: `https://api.kbl.or.kr/match/list`
38
+ - 팀 순위: `https://api.kbl.or.kr/league/rank/team`
39
+
40
+ ```bash
41
+ GLOBAL_NPM_ROOT="$(npm root -g)" node --input-type=module - <<'JS'
42
+ import path from "node:path";
43
+ import { pathToFileURL } from "node:url";
44
+
45
+ const entry = pathToFileURL(
46
+ path.join(process.env.GLOBAL_NPM_ROOT, "kbl-results", "src", "index.js"),
47
+ ).href;
48
+ const { getKBLSummary } = await import(entry);
49
+
50
+ const summary = await getKBLSummary("2026-04-01", {
51
+ team: "부산 KCC",
52
+ includeStandings: true,
53
+ });
54
+
55
+ console.log(JSON.stringify(summary, null, 2));
56
+ JS
57
+ ```
58
+
59
+ ### 2. Normalize for humans
60
+
61
+ 원본 JSON을 그대로 던지지 말고 아래 기준으로 정리한다.
62
+
63
+ - 홈팀 vs 원정팀
64
+ - 경기 시간 / 종료 여부 / LIVE 여부
65
+ - 스코어
66
+ - 현재 순위
67
+ - 요청 팀이 있으면 해당 팀 경기만 필터링
68
+
69
+ ### 3. Keep the answer compact
70
+
71
+ 요청이 scoreboard 면 경기별 한 줄 요약부터 준다. 특정 팀 요청이면 그 팀 경기와 현재 순위만 먼저 보여준다.
72
+
73
+ ## Done when
74
+
75
+ - 날짜 기준 경기 요약이 있다
76
+ - 팀 요청이면 해당 팀 경기만 남아 있다
77
+ - 현재 순위가 같이 정리되어 있다
78
+
79
+ ## Failure modes
80
+
81
+ - KBL가 `api.kbl.or.kr` 응답 구조를 바꾸면 패키지 수정이 필요하다
82
+ - 경기 전 날짜면 결과 대신 예정 상태가 반환될 수 있다
83
+ - 크롤링 fallback은 공식 JSON이 막혔을 때만 검토한다
84
+
85
+ ## Notes
86
+
87
+ - 이 스킬은 조회 전용이다
88
+ - 사용자의 "오늘/어제" 요청은 항상 절대 날짜(`YYYY-MM-DD`)로 변환해서 실행한다
89
+ - 자세한 사용 예시는 `docs/features/kbl-results.md` 와 `packages/kbl-results/README.md` 를 따른다
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "kbl-results",
3
+ "description": "KBL 한국프로농구 경기 결과와 현재 팀 순위를 날짜/팀 기준으로 조회한다. 공식 JSON 엔드포인트와 kbl-results npm 패키지를 사용한다.",
4
+ "profiles": [
5
+ "browser",
6
+ "lookup"
7
+ ],
8
+ "frontmatter": "name: kbl-results\ndescription: KBL 한국프로농구 경기 결과와 현재 팀 순위를 날짜/팀 기준으로 조회한다. 공식 JSON 엔드포인트와 kbl-results npm 패키지를 사용한다.\nlicense: MIT\nmetadata:\n category: sports\n locale: ko-KR\n phase: v1"
9
+ }
@@ -0,0 +1,82 @@
1
+ # KBO Results
2
+
3
+ ## What this skill does
4
+
5
+ `kbo-game` 패키지로 특정 날짜 KBO 경기 정보를 가져와 경기 일정, 스코어, 상태를 요약한다.
6
+
7
+ ## When to use
8
+
9
+ - "오늘 KBO 경기 결과 알려줘"
10
+ - "어제 한화 경기 스코어 보여줘"
11
+ - "2026-04-01 KBO 일정 정리해줘"
12
+
13
+ ## Prerequisites
14
+
15
+ - Node.js 18+
16
+ - `npm install -g kbo-game`
17
+
18
+ ## Inputs
19
+
20
+ - 날짜: `YYYY-MM-DD`
21
+ - 선택 사항: 특정 팀명
22
+
23
+ ## Workflow
24
+
25
+ ### 0. Install the package globally when missing
26
+
27
+ `npm root -g` 아래에 `kbo-game` 이 없으면 다른 구현으로 우회하지 말고 전역 Node 패키지 설치를 먼저 시도한다.
28
+
29
+ ```bash
30
+ npm install -g kbo-game
31
+ ```
32
+
33
+ 패키지가 없다는 이유로 다른 비공식 scoreboard 소스를 자동 채택하지 않는다.
34
+
35
+ ### 1. Fetch the date
36
+
37
+ ```bash
38
+ GLOBAL_NPM_ROOT="$(npm root -g)" node --input-type=module - <<'JS'
39
+ import path from "node:path";
40
+ import { pathToFileURL } from "node:url";
41
+
42
+ const entry = pathToFileURL(
43
+ path.join(process.env.GLOBAL_NPM_ROOT, "kbo-game", "dist", "index.js"),
44
+ ).href;
45
+ const { getGame } = await import(entry);
46
+
47
+ const date = "2026-03-25";
48
+ const games = await getGame(new Date(`${date}T00:00:00+09:00`));
49
+ console.log(JSON.stringify(games, null, 2));
50
+ JS
51
+ ```
52
+
53
+ `kbo-game@0.0.2` 기준 실제 export는 `getGame` 하나이며, 문자열 날짜(`"2026-03-25"`)를 직접 넘기면 실패한다. 항상 `Date` 객체로 변환해서 호출한다. 전역 설치를 기본으로 쓰므로 inline snippet에서는 전역 npm root 아래 entry file을 직접 import 한다.
54
+
55
+ ### 2. Normalize for humans
56
+
57
+ 원본 데이터를 그대로 던지지 말고 아래 기준으로 정리한다.
58
+
59
+ - 홈팀 vs 원정팀
60
+ - 진행 상태 또는 경기 종료 여부
61
+ - 스코어
62
+ - 필요한 경우 특정 팀만 필터링
63
+
64
+ ### 3. Keep the answer compact
65
+
66
+ 사용자가 scoreboard를 원하면 경기별 한 줄 요약부터 준다.
67
+
68
+ ## Done when
69
+
70
+ - 날짜 기준 전체 경기 요약이 있다
71
+ - 팀 필터 요청이면 해당 팀 경기만 남아 있다
72
+ - raw JSON이 필요하면 별도로 제공할 수 있다
73
+
74
+ ## Failure modes
75
+
76
+ - KBO 사이트 변경으로 패키지 응답이 깨질 수 있다
77
+ - 비시즌 날짜는 빈 결과가 올 수 있다
78
+
79
+ ## Notes
80
+
81
+ - 이 스킬은 조회 전용이다
82
+ - 사용자 기준 "오늘/어제" 같은 상대 날짜는 항상 절대 날짜로 변환해서 실행한다
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "kbo-results",
3
+ "description": "Fetch KBO game schedules and results for a specific date with the kbo-game npm package. Use when the user asks for today's KBO games, yesterday's scores, or a date-specific scoreboard.",
4
+ "profiles": [
5
+ "lookup"
6
+ ],
7
+ "frontmatter": "name: kbo-results\ndescription: Fetch KBO game schedules and results for a specific date with the kbo-game npm package. Use when the user asks for today's KBO games, yesterday's scores, or a date-specific scoreboard.\nlicense: MIT\nmetadata:\n category: sports\n locale: ko-KR\n phase: v1"
8
+ }