@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,133 @@
|
|
|
1
|
+
# Korean Jangbu For (thin wrapper)
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
[`kimlawtech/korean-jangbu-for`](https://github.com/kimlawtech/korean-jangbu-for) (Apache-2.0) 업스트림을 중심으로 한국 사업자 장부 자동화 흐름을 안내한다. 원저작자·관리자는 **[@kimlawtech](https://github.com/kimlawtech) (SpeciAI)** 이며, k-skill 측은 원본 발견·설치 진입점·출처/면책 고지·agent-neutral 사용 절차만 유지하는 **얇은 wrapper** 다.
|
|
6
|
+
|
|
7
|
+
업스트림은 카드명세서 PDF, 은행 CSV, 엑셀 장부, 영수증/세금계산서 이미지·PDF를 표준 거래내역으로 정리하고, 계정과목 매핑, 세무용 BS/PL, 경영용 현금흐름·cash burn 리포트, 세무사 전달 CSV 생성을 목표로 한다.
|
|
8
|
+
|
|
9
|
+
**중요:** 이 스킬을 사용할 때 모든 답변에는 원본 링크 `https://github.com/kimlawtech/korean-jangbu-for` 와 원저작자 **@kimlawtech (SpeciAI)** 를 반드시 멘션한다.
|
|
10
|
+
|
|
11
|
+
## When to use
|
|
12
|
+
|
|
13
|
+
- "사업자 장부 자동화해줘"
|
|
14
|
+
- "카드 명세서 PDF를 장부로 바꿔줘"
|
|
15
|
+
- "은행 CSV랑 영수증으로 세무사 전달 자료 만들어줘"
|
|
16
|
+
- "개인사업자/프리랜서 종소세 준비 체크리스트 만들어줘"
|
|
17
|
+
- "장부 데이터를 계정과목으로 분류하고 경영 리포트 만들어줘"
|
|
18
|
+
- "CODEF 키로 홈택스·은행·카드 내역 자동 수집 설정하고 싶어"
|
|
19
|
+
|
|
20
|
+
## When not to use
|
|
21
|
+
|
|
22
|
+
- 공식 회계감사, 세무신고 대행, 기장대리, 절세 자문 자체를 요청하는 경우 → 세무사/공인회계사 상담을 안내한다.
|
|
23
|
+
- 사용자가 자격증명 입력, 간편인증, 금융기관 로그인 등 side-effect 를 명시적으로 승인하지 않은 상태.
|
|
24
|
+
- 정식 외부 제출용 재무제표·공시자료를 자동 산출물만으로 확정하려는 경우.
|
|
25
|
+
- 한국 사업자 장부가 아닌 해외 회계 기준(IFRS/US GAAP 등) 중심 작업.
|
|
26
|
+
|
|
27
|
+
## Prerequisites
|
|
28
|
+
|
|
29
|
+
- 인터넷 연결 (업스트림 clone 용)
|
|
30
|
+
- `git` 2.20+
|
|
31
|
+
- `bash`
|
|
32
|
+
- Python 3.11+
|
|
33
|
+
- macOS 또는 Linux
|
|
34
|
+
- OCR/PDF 처리를 위한 업스트림 의존성 (install.sh 가 안내/설치)
|
|
35
|
+
- 자동 수집을 쓰는 경우: 사용자가 직접 발급한 CODEF Client ID/Secret (**BYOK**)
|
|
36
|
+
|
|
37
|
+
## Install (dual-install)
|
|
38
|
+
|
|
39
|
+
업스트림을 `~/.claude/skills/korean-jangbu-for/upstream/` 와 `~/.agents/skills/korean-jangbu-for/upstream/` 양쪽에 pinned SHA 로 체크아웃한다. 또한 업스트림 `skills/jangbu-*` 를 양쪽 홈 디렉터리의 top-level skill 로 등록해 `/jangbu-connect`, `/jangbu-import`, `/jangbu-tag`, `/jangbu-tax`, `/jangbu-dash`, `/jangbu-jongso` 라우팅이 agent-compatible 런타임에서도 발견되게 한다. `/korean-jangbu-for` 는 이 wrapper 의 top-level skill 로 유지한다. 레포 내부에는 업스트림 payload 를 커밋하지 않는다.
|
|
40
|
+
|
|
41
|
+
홈 디렉터리 wrapper 에는 `SKILL.md`, `scripts/install.sh`, `scripts/upstream.pin`, `LICENSE.upstream`, `DISCLAIMER.md`, `NOTICE` 를 함께 설치한다. Promoted `jangbu-*` top-level 경로에 사용자가 만든 다른 스킬이 이미 있으면 installer 는 덮어쓰지 않고 중단한다. wrapper 가 이전에 설치한 managed 스킬만 자동 갱신하며, 의도적으로 교체해야 할 때만 `KOREAN_JANGBU_FOR_OVERWRITE_SKILLS=1` 을 설정한다.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
bash korean-jangbu-for/scripts/install.sh
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
레포를 로컬에 clone 하지 않고 이미 홈 디렉토리 스킬 번들만 가진 상태에서도 설치할 수 있다:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
bash ~/.claude/skills/korean-jangbu-for/scripts/install.sh
|
|
51
|
+
# 또는
|
|
52
|
+
bash ~/.agents/skills/korean-jangbu-for/scripts/install.sh
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
설치 확인:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cat korean-jangbu-for/scripts/upstream.pin
|
|
59
|
+
git -C ~/.claude/skills/korean-jangbu-for/upstream rev-parse HEAD
|
|
60
|
+
git -C ~/.agents/skills/korean-jangbu-for/upstream rev-parse HEAD
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
세 SHA 가 모두 같으면 wrapper 설치가 성공한 것이다. 업스트림 런타임 의존성까지 검증해야 할 때만 아래를 이어서 실행한다. 업스트림 `scripts/install.sh` 는 Claude Code 스킬 symlink 를 등록하므로, k-skill wrapper 개발 중이면 실행 후 wrapper 디렉토리를 다시 sync 한다.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/install.sh
|
|
67
|
+
bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/verify.sh
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
오프라인 환경에서는 upstream clone 이 실패하므로 실행할 수 없다.
|
|
71
|
+
|
|
72
|
+
## Mandatory intake first
|
|
73
|
+
|
|
74
|
+
사용자가 장부 자동화나 세무사 전달 자료 생성을 요청하면 바로 파일을 만들지 말고 먼저 아래를 확인한다. 한 번에 1~3문항씩, 사용자가 모르면 "넘어가도 됩니다" 로 열어 둔다.
|
|
75
|
+
|
|
76
|
+
- 사업자 유형: 개인사업자 / 법인 / 프리랜서 / 복수 사업장
|
|
77
|
+
- 목표 산출물: 표준 거래내역 / 계정과목 분류 / 세무사 전달 CSV / BS·PL / 현금흐름·경영 리포트 / 종소세 체크리스트
|
|
78
|
+
- 입력 자료: 은행 CSV, 카드 PDF, 엑셀, 영수증 이미지, 세금계산서 PDF, 홈택스·은행·카드 자동 수집(CODEF)
|
|
79
|
+
- 기간과 통화: 대상 월/분기/연도, KRW 외 통화 여부
|
|
80
|
+
- 민감정보 처리: 원본 보관 위치, 마스킹 필요 수준, 외부 LLM 경유 허용 여부
|
|
81
|
+
- 자동 수집 사용 여부: CODEF BYOK 준비 여부, 인증/로그인/간편인증은 사용자가 직접 승인해야 함
|
|
82
|
+
- 공식 제출 예정 여부: 세무사 검토 / 공인회계사 감사 필요성을 함께 확인
|
|
83
|
+
|
|
84
|
+
## Workflow
|
|
85
|
+
|
|
86
|
+
1. 위 intake 로 목표와 입력 자료를 확정한다.
|
|
87
|
+
2. `bash korean-jangbu-for/scripts/install.sh` 로 업스트림을 dual-install 한다.
|
|
88
|
+
3. 사용 목적에 맞게 업스트림 스킬을 선택한다:
|
|
89
|
+
- `/korean-jangbu-for` — 전체 메뉴 라우팅
|
|
90
|
+
- `/jangbu-connect` — CODEF API 자격증명 설정(BYOK, 홈택스·은행·카드 자동 수집)
|
|
91
|
+
- `/jangbu-import` — 원본 데이터(엑셀·CSV·이미지·PDF) → 표준 거래내역
|
|
92
|
+
- `/jangbu-tag` — 표준 거래내역 → 계정과목 매핑
|
|
93
|
+
- `/jangbu-tax` — 세무용 BS·PL / 세무사 전달 CSV
|
|
94
|
+
- `/jangbu-dash` — 경영용 현금흐름·대시보드·카드별 분석
|
|
95
|
+
- `/jangbu-jongso` — 종합소득세 준비 체크리스트 및 홈택스 다운로드 경로 안내
|
|
96
|
+
4. 민감정보는 업스트림의 Level 2 마스킹 원칙을 따른다. 사업자번호·주민번호·카드번호·계좌번호·account_id 는 토큰화/마스킹한 뒤 LLM fallback 에 전달한다.
|
|
97
|
+
5. 자동 수집은 CODEF BYOK 원칙을 따른다. 자격증명은 macOS Keychain 또는 `~/.jangbu/credentials.env`(0o600) 같은 로컬 저장소에만 두며, 사용자의 명시 승인 없이 외부 인증·금융 조회를 실행하지 않는다.
|
|
98
|
+
6. 완료 보고에는 아래 Response policy 의 고정 블록을 반드시 포함한다.
|
|
99
|
+
|
|
100
|
+
## Response policy
|
|
101
|
+
|
|
102
|
+
모든 답변 말미에 아래 정보를 포함한다.
|
|
103
|
+
|
|
104
|
+
- 원본: https://github.com/kimlawtech/korean-jangbu-for
|
|
105
|
+
- 원저작자: **@kimlawtech (SpeciAI)**
|
|
106
|
+
- 라이선스: Apache-2.0 (`korean-jangbu-for/LICENSE.upstream`)
|
|
107
|
+
- 생성된 장부·재무제표·경영 리포트·세무사 전달 CSV 는 **참고용 초안**이며, **공식 회계감사** 또는 **세무신고** 를 대체하지 않는다.
|
|
108
|
+
- 법인세·종합소득세 신고 전 **세무사 검토** 가 필요하고, 외감 대상 법인은 **공인회계사 감사** 가 필요하다.
|
|
109
|
+
|
|
110
|
+
## Done when
|
|
111
|
+
|
|
112
|
+
- 목표 산출물, 입력 자료, 사업자 유형, 기간, 민감정보 처리 수준이 확인되었다.
|
|
113
|
+
- `scripts/install.sh` 이 업스트림을 dual-install 했고 양쪽 `upstream/` 경로가 `scripts/upstream.pin` 과 같은 SHA 를 가리킨다.
|
|
114
|
+
- 업스트림 `skills/jangbu-*` 가 `~/.claude/skills/<skill-name>` 및 `~/.agents/skills/<skill-name>` top-level 경로에 등록되어 slash skill discovery 가 가능하다.
|
|
115
|
+
- 업스트림의 해당 하위 스킬(`/jangbu-import`, `/jangbu-tag`, `/jangbu-tax`, `/jangbu-dash`, `/jangbu-jongso`, `/jangbu-connect`) 흐름을 사용했다.
|
|
116
|
+
- 사용자가 공식 제출/신고 목적이라고 밝힌 경우 세무사 검토 또는 공인회계사 감사 필요성을 명시했다.
|
|
117
|
+
- 최종 답변에 원본 링크, 원저작자 @kimlawtech (SpeciAI), Apache-2.0, 회계·세무 면책 고지가 포함되었다.
|
|
118
|
+
|
|
119
|
+
## Failure modes
|
|
120
|
+
|
|
121
|
+
- 네트워크 차단: upstream clone/pin checkout 실패 → 네트워크 확보 후 `scripts/install.sh` 재실행.
|
|
122
|
+
- Python/OCR 의존성 실패: 업스트림 `scripts/verify.sh` 출력 기준으로 Python 3.11+, poppler, Vision/PaddleOCR 환경을 점검.
|
|
123
|
+
- CODEF 인증 실패: 사용자의 BYOK 자격증명과 간편인증 상태를 확인하되, 자격증명 값을 채팅에 노출하지 않는다.
|
|
124
|
+
- OCR 오인식/분류 신뢰도 낮음: 원본 파일과 표준 거래내역을 사용자에게 검토시키고, 자동 확정하지 않는다.
|
|
125
|
+
- 공식 제출이 필요한 경우: 자동 산출물을 최종본으로 단정하지 말고 세무사/공인회계사 검토 단계로 넘긴다.
|
|
126
|
+
|
|
127
|
+
## Notes
|
|
128
|
+
|
|
129
|
+
- upstream pin: `korean-jangbu-for/scripts/upstream.pin`
|
|
130
|
+
- upstream disclaimer: `korean-jangbu-for/DISCLAIMER.md`
|
|
131
|
+
- upstream license copy: `korean-jangbu-for/LICENSE.upstream`
|
|
132
|
+
- attribution notice: `korean-jangbu-for/NOTICE`
|
|
133
|
+
- k-skill 루트 `LICENSE` 는 이 저장소 wrapper 의 기본 라이선스이고, 이 스킬 하위 upstream 자료는 Apache-2.0 고지와 재배포 조건을 따른다.
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# korean-jangbu-for upstream installer.
|
|
4
|
+
#
|
|
5
|
+
# k-skill 측은 얇은 wrapper 만 유지하고, 장부 자동화 구현은 업스트림
|
|
6
|
+
# kimlawtech/korean-jangbu-for (Apache-2.0, @kimlawtech / SpeciAI) 에 위임한다.
|
|
7
|
+
# 이 스크립트는 scripts/upstream.pin 에 기록된 커밋 SHA 를 두 홈 디렉토리
|
|
8
|
+
# 스킬 경로 아래에 동일하게 체크아웃한다.
|
|
9
|
+
#
|
|
10
|
+
# ~/.claude/skills/korean-jangbu-for/upstream/
|
|
11
|
+
# ~/.agents/skills/korean-jangbu-for/upstream/
|
|
12
|
+
#
|
|
13
|
+
# 사용법:
|
|
14
|
+
# bash korean-jangbu-for/scripts/install.sh
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
UPSTREAM_REPO="${KOREAN_JANGBU_FOR_UPSTREAM_REPO:-https://github.com/kimlawtech/korean-jangbu-for.git}"
|
|
19
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
WRAPPER_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
21
|
+
PIN_FILE="${SCRIPT_DIR}/upstream.pin"
|
|
22
|
+
SKILL_NAME="korean-jangbu-for"
|
|
23
|
+
MANAGED_MARKER="k-skill wrapper attribution and disclaimer"
|
|
24
|
+
|
|
25
|
+
if [[ ! -f "${PIN_FILE}" ]]; then
|
|
26
|
+
echo "[korean-jangbu-for] upstream.pin not found at ${PIN_FILE}" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
UPSTREAM_SHA="${KOREAN_JANGBU_FOR_UPSTREAM_SHA:-$(tr -d '[:space:]' <"${PIN_FILE}")}"
|
|
31
|
+
|
|
32
|
+
if [[ ! "${UPSTREAM_SHA}" =~ ^[0-9a-f]{40}$ ]]; then
|
|
33
|
+
echo "[korean-jangbu-for] upstream.pin must contain a 40-char git SHA (got: ${UPSTREAM_SHA})" >&2
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
CACHE_DIR="${HOME}/.cache/k-skill/${SKILL_NAME}"
|
|
38
|
+
CLONE_DIR="${CACHE_DIR}/upstream"
|
|
39
|
+
UPSTREAM_SUBSKILLS=(
|
|
40
|
+
"jangbu-connect"
|
|
41
|
+
"jangbu-dash"
|
|
42
|
+
"jangbu-import"
|
|
43
|
+
"jangbu-jongso"
|
|
44
|
+
"jangbu-tag"
|
|
45
|
+
"jangbu-tax"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
sync_dir() {
|
|
49
|
+
local source_dir="$1"
|
|
50
|
+
local target_dir="$2"
|
|
51
|
+
|
|
52
|
+
if [[ -e "${target_dir}" || -L "${target_dir}" ]]; then
|
|
53
|
+
rm -rf "${target_dir}"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if command -v rsync >/dev/null 2>&1; then
|
|
57
|
+
rsync -a --delete "${source_dir}/" "${target_dir}/"
|
|
58
|
+
else
|
|
59
|
+
cp -a "${source_dir}/" "${target_dir}/"
|
|
60
|
+
fi
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
copy_file_if_different() {
|
|
64
|
+
local source_file="$1"
|
|
65
|
+
local target_file="$2"
|
|
66
|
+
|
|
67
|
+
if [[ -e "${target_file}" ]] && [[ "$(cd "$(dirname "${source_file}")" && pwd -P)/$(basename "${source_file}")" == "$(cd "$(dirname "${target_file}")" && pwd -P)/$(basename "${target_file}")" ]]; then
|
|
68
|
+
return 0
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
cp "${source_file}" "${target_file}"
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
install_wrapper_payload() {
|
|
75
|
+
local target_dir="$1"
|
|
76
|
+
|
|
77
|
+
mkdir -p "${target_dir}/scripts"
|
|
78
|
+
copy_file_if_different "${WRAPPER_DIR}/SKILL.md" "${target_dir}/SKILL.md"
|
|
79
|
+
copy_file_if_different "${WRAPPER_DIR}/LICENSE.upstream" "${target_dir}/LICENSE.upstream"
|
|
80
|
+
copy_file_if_different "${WRAPPER_DIR}/DISCLAIMER.md" "${target_dir}/DISCLAIMER.md"
|
|
81
|
+
copy_file_if_different "${WRAPPER_DIR}/NOTICE" "${target_dir}/NOTICE"
|
|
82
|
+
copy_file_if_different "${WRAPPER_DIR}/scripts/install.sh" "${target_dir}/scripts/install.sh"
|
|
83
|
+
copy_file_if_different "${WRAPPER_DIR}/scripts/upstream.pin" "${target_dir}/scripts/upstream.pin"
|
|
84
|
+
chmod +x "${target_dir}/scripts/install.sh"
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
is_managed_promoted_skill() {
|
|
88
|
+
local target_dir="$1"
|
|
89
|
+
local skill_file="${target_dir}/SKILL.md"
|
|
90
|
+
|
|
91
|
+
[[ -f "${skill_file}" ]] && grep -q "${MANAGED_MARKER}" "${skill_file}"
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
assert_promoted_skill_writable() {
|
|
95
|
+
local target_dir="$1"
|
|
96
|
+
|
|
97
|
+
if [[ -e "${target_dir}" || -L "${target_dir}" ]]; then
|
|
98
|
+
if [[ "${KOREAN_JANGBU_FOR_OVERWRITE_SKILLS:-}" != "1" ]] && ! is_managed_promoted_skill "${target_dir}"; then
|
|
99
|
+
echo "[korean-jangbu-for] refusing to overwrite unrelated skill: ${target_dir}" >&2
|
|
100
|
+
echo " Set KOREAN_JANGBU_FOR_OVERWRITE_SKILLS=1 to replace this top-level skill." >&2
|
|
101
|
+
exit 1
|
|
102
|
+
fi
|
|
103
|
+
fi
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
sync_promoted_skill() {
|
|
107
|
+
local source_dir="$1"
|
|
108
|
+
local target_dir="$2"
|
|
109
|
+
|
|
110
|
+
assert_promoted_skill_writable "${target_dir}"
|
|
111
|
+
sync_dir "${source_dir}" "${target_dir}"
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
preflight_promoted_skill() {
|
|
115
|
+
local source_dir="$1"
|
|
116
|
+
local target_dir="$2"
|
|
117
|
+
|
|
118
|
+
if [[ ! -f "${source_dir}/SKILL.md" ]]; then
|
|
119
|
+
echo "[korean-jangbu-for] missing upstream skill: ${source_dir}/SKILL.md" >&2
|
|
120
|
+
exit 1
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
assert_promoted_skill_writable "${target_dir}"
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
preflight_promoted_skills() {
|
|
127
|
+
local home_skill_dir
|
|
128
|
+
local home_skills_root
|
|
129
|
+
local upstream_skill
|
|
130
|
+
local upstream_skill_dir
|
|
131
|
+
local home_upstream_skill_dir
|
|
132
|
+
|
|
133
|
+
for home_skill_dir in "${HOME_DIRS[@]}"; do
|
|
134
|
+
home_skills_root="$(dirname "${home_skill_dir}")"
|
|
135
|
+
|
|
136
|
+
for upstream_skill in "${UPSTREAM_SUBSKILLS[@]}"; do
|
|
137
|
+
upstream_skill_dir="${CLONE_DIR}/skills/${upstream_skill}"
|
|
138
|
+
home_upstream_skill_dir="${home_skills_root}/${upstream_skill}"
|
|
139
|
+
preflight_promoted_skill "${upstream_skill_dir}" "${home_upstream_skill_dir}"
|
|
140
|
+
done
|
|
141
|
+
done
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
append_response_policy() {
|
|
145
|
+
local skill_file="$1"
|
|
146
|
+
|
|
147
|
+
cat >>"${skill_file}" <<'POLICY'
|
|
148
|
+
|
|
149
|
+
## k-skill wrapper attribution and disclaimer
|
|
150
|
+
|
|
151
|
+
This top-level skill is registered by the k-skill `korean-jangbu-for` thin wrapper so agent-compatible runtimes can discover the upstream `jangbu-*` workflows. Preserve the upstream workflow above, but every response that uses this skill must include:
|
|
152
|
+
|
|
153
|
+
- 원본: https://github.com/kimlawtech/korean-jangbu-for
|
|
154
|
+
- 원저작자: **@kimlawtech (SpeciAI)**
|
|
155
|
+
- 라이선스: Apache-2.0 (`korean-jangbu-for/LICENSE.upstream`)
|
|
156
|
+
- 생성된 장부·재무제표·경영 리포트·세무사 전달 CSV 는 **참고용 초안**이며, **공식 회계감사** 또는 **세무신고** 를 대체하지 않는다.
|
|
157
|
+
- 법인세 신고 전에는 **세무사 검토** 가 필요하고, 외감 대상 법인은 **공인회계사 감사** 가 필요하다.
|
|
158
|
+
POLICY
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
mkdir -p "${CACHE_DIR}"
|
|
162
|
+
|
|
163
|
+
if [[ ! -d "${CLONE_DIR}/.git" ]]; then
|
|
164
|
+
echo "[korean-jangbu-for] cloning upstream into ${CLONE_DIR}"
|
|
165
|
+
if ! git clone --filter=blob:none "${UPSTREAM_REPO}" "${CLONE_DIR}" >&2; then
|
|
166
|
+
echo "" >&2
|
|
167
|
+
echo "[korean-jangbu-for] upstream clone failed (network required)." >&2
|
|
168
|
+
echo " upstream: ${UPSTREAM_REPO}" >&2
|
|
169
|
+
echo " 오프라인 환경에서는 이 스킬의 장부 자동화 흐름을 실행할 수 없다." >&2
|
|
170
|
+
exit 1
|
|
171
|
+
fi
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
echo "[korean-jangbu-for] syncing upstream to pinned SHA ${UPSTREAM_SHA}"
|
|
175
|
+
git -C "${CLONE_DIR}" fetch --tags origin "${UPSTREAM_SHA}" >&2 || git -C "${CLONE_DIR}" fetch origin >&2
|
|
176
|
+
git -C "${CLONE_DIR}" checkout --force --detach "${UPSTREAM_SHA}" >&2
|
|
177
|
+
|
|
178
|
+
HEAD_SHA="$(git -C "${CLONE_DIR}" rev-parse HEAD)"
|
|
179
|
+
|
|
180
|
+
if [[ "${HEAD_SHA}" != "${UPSTREAM_SHA}" ]]; then
|
|
181
|
+
echo "[korean-jangbu-for] HEAD (${HEAD_SHA}) does not match pinned SHA (${UPSTREAM_SHA})" >&2
|
|
182
|
+
exit 1
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
HOME_DIRS=(
|
|
186
|
+
"${HOME}/.claude/skills/${SKILL_NAME}"
|
|
187
|
+
"${HOME}/.agents/skills/${SKILL_NAME}"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
preflight_promoted_skills
|
|
191
|
+
|
|
192
|
+
for HOME_SKILL_DIR in "${HOME_DIRS[@]}"; do
|
|
193
|
+
HOME_UPSTREAM="${HOME_SKILL_DIR}/upstream"
|
|
194
|
+
HOME_SKILLS_ROOT="$(dirname "${HOME_SKILL_DIR}")"
|
|
195
|
+
if [[ -L "${HOME_SKILL_DIR}" ]]; then
|
|
196
|
+
rm -f "${HOME_SKILL_DIR}"
|
|
197
|
+
fi
|
|
198
|
+
install_wrapper_payload "${HOME_SKILL_DIR}"
|
|
199
|
+
|
|
200
|
+
sync_dir "${CLONE_DIR}" "${HOME_UPSTREAM}"
|
|
201
|
+
|
|
202
|
+
INSTALLED_SHA="$(git -C "${HOME_UPSTREAM}" rev-parse HEAD)"
|
|
203
|
+
|
|
204
|
+
if [[ "${INSTALLED_SHA}" != "${UPSTREAM_SHA}" ]]; then
|
|
205
|
+
echo "[korean-jangbu-for] ${HOME_UPSTREAM} HEAD (${INSTALLED_SHA}) does not match pin (${UPSTREAM_SHA})" >&2
|
|
206
|
+
exit 1
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
echo "[korean-jangbu-for] installed upstream@${UPSTREAM_SHA} -> ${HOME_UPSTREAM}"
|
|
210
|
+
|
|
211
|
+
for UPSTREAM_SKILL in "${UPSTREAM_SUBSKILLS[@]}"; do
|
|
212
|
+
UPSTREAM_SKILL_DIR="${CLONE_DIR}/skills/${UPSTREAM_SKILL}"
|
|
213
|
+
HOME_UPSTREAM_SKILL_DIR="${HOME_SKILLS_ROOT}/${UPSTREAM_SKILL}"
|
|
214
|
+
|
|
215
|
+
if [[ ! -f "${UPSTREAM_SKILL_DIR}/SKILL.md" ]]; then
|
|
216
|
+
echo "[korean-jangbu-for] missing upstream skill: ${UPSTREAM_SKILL_DIR}/SKILL.md" >&2
|
|
217
|
+
exit 1
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
sync_promoted_skill "${UPSTREAM_SKILL_DIR}" "${HOME_UPSTREAM_SKILL_DIR}"
|
|
221
|
+
append_response_policy "${HOME_UPSTREAM_SKILL_DIR}/SKILL.md"
|
|
222
|
+
|
|
223
|
+
echo "[korean-jangbu-for] registered upstream skill /${UPSTREAM_SKILL} -> ${HOME_UPSTREAM_SKILL_DIR}"
|
|
224
|
+
done
|
|
225
|
+
done
|
|
226
|
+
|
|
227
|
+
echo ""
|
|
228
|
+
echo "[korean-jangbu-for] done."
|
|
229
|
+
echo " pinned upstream SHA: ${UPSTREAM_SHA}"
|
|
230
|
+
echo " upstream repo: ${UPSTREAM_REPO}"
|
|
231
|
+
echo " runtime install: bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/install.sh"
|
|
232
|
+
echo " verify command: bash ~/.claude/skills/korean-jangbu-for/upstream/scripts/verify.sh"
|
|
233
|
+
echo " namespace note: Re-run this wrapper installer after upstream runtime install to restore wrapper-managed top-level skills."
|
|
234
|
+
echo " subskills: /korean-jangbu-for /jangbu-connect /jangbu-import /jangbu-tag /jangbu-tax /jangbu-dash /jangbu-jongso"
|
|
235
|
+
echo " 원저작자: @kimlawtech (SpeciAI) — 응답마다 원본 링크와 함께 언급해야 한다."
|
|
236
|
+
echo " 생성물은 참고용 초안이며 공식 회계감사·세무신고를 대체하지 않는다."
|
|
237
|
+
echo " 법인세 신고 전 세무사 검토, 외감 대상은 공인회계사 감사가 필요하다."
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d8c2875ace84e212672e2d6206df254c5048b927
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "korean-jangbu-for",
|
|
3
|
+
"description": "kimlawtech/korean-jangbu-for (Apache-2.0) 업스트림을 중심으로 한국 스타트업·1인 법인·프리랜서·개인사업자 장부 자동화와 사업자 세무 자료 정리, 원본 데이터 가져오기, 계정과목 태깅, 세무사 전달 CSV, 경영 리포트 생성을 안내하는 thin wrapper 스킬. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"action:submission"
|
|
6
|
+
],
|
|
7
|
+
"frontmatter": "name: korean-jangbu-for\ndescription: kimlawtech/korean-jangbu-for (Apache-2.0) 업스트림을 중심으로 한국 스타트업·1인 법인·프리랜서·개인사업자 장부 자동화와 사업자 세무 자료 정리, 원본 데이터 가져오기, 계정과목 태깅, 세무사 전달 CSV, 경영 리포트 생성을 안내하는 thin wrapper 스킬. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: Apache-2.0\nmetadata:\n category: finance\n locale: ko-KR\n phase: v1"
|
|
8
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Korean Law Search
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
기본적으로 `https://k-skill-proxy.nomadamas.org/v1/korean-law/...` 로 요청해서 한국 법령/조문/판례/유권해석/자치법규를 조회한다. 법제처(국가법령정보센터) 공식 Open API(`open.law.go.kr` 의 DRF `lawSearch.do`/`lawService.do`)를 기반으로 하며, 설계는 `chrisryugj/korean-law-mcp` 의 read-only 도구 표면을 참고했다.
|
|
6
|
+
|
|
7
|
+
사용자는 별도 API key(`LAW_OC`)나 로컬 CLI 설치가 필요 없다. `LAW_OC` 와 브라우저 User-Agent/Referer 주입은 proxy 서버에서만 처리한다.
|
|
8
|
+
|
|
9
|
+
- 검색/목록: `GET /v1/korean-law/search`
|
|
10
|
+
- 본문/상세: `GET /v1/korean-law/detail`
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
- "산업안전보건법 찾아줘"
|
|
15
|
+
- "관세법 제38조 보여줘"
|
|
16
|
+
- "부당해고 판례 찾아줘"
|
|
17
|
+
- "개인정보보호법 시행령 조문 확인해줘"
|
|
18
|
+
- "한국 법령/판례/자치법규 검색해줘"
|
|
19
|
+
|
|
20
|
+
## When not to use
|
|
21
|
+
|
|
22
|
+
- 미국/일본/EU 등 비한국 법령 검색
|
|
23
|
+
- 실제 법률 자문·소송 전략을 단정적으로 제공해야 하는 경우
|
|
24
|
+
- 법령 원문이 아니라 일반 상식 설명만 필요한 경우
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
없음. 사용자는 별도 API key를 준비할 필요가 없다. upstream `LAW_OC` 는 proxy 서버에서만 주입한다.
|
|
29
|
+
|
|
30
|
+
## Default path
|
|
31
|
+
|
|
32
|
+
추가 client API 레이어는 불필요하다. 그냥 프록시 서버에 HTTP 요청만 넣으면 된다.
|
|
33
|
+
|
|
34
|
+
`KSKILL_PROXY_BASE_URL` 환경변수가 있으면 그 값을 사용하고, 없으면 기본 경로 `https://k-skill-proxy.nomadamas.org` 를 사용한다.
|
|
35
|
+
|
|
36
|
+
## Supported endpoints
|
|
37
|
+
|
|
38
|
+
### 검색/목록 조회
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
GET /v1/korean-law/search?target={target}&query={검색어}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`target` 은 read-only 법령정보 종류다.
|
|
45
|
+
|
|
46
|
+
| target | 설명 |
|
|
47
|
+
|---|---|
|
|
48
|
+
| `law` | 현행법령 |
|
|
49
|
+
| `eflaw` | 시행일 법령 |
|
|
50
|
+
| `elaw` | 영문법령 |
|
|
51
|
+
| `prec` | 판례 |
|
|
52
|
+
| `detc` | 헌재결정례 |
|
|
53
|
+
| `expc` | 법령해석례(유권해석) |
|
|
54
|
+
| `admrul` | 행정규칙 |
|
|
55
|
+
| `ordin` | 자치법규 |
|
|
56
|
+
| `trty` | 조약 |
|
|
57
|
+
| `lstrm` | 법령용어 |
|
|
58
|
+
|
|
59
|
+
지원 필터: `query`(검색어), `display`, `page`, `sort`, `date`, `prncYd`(선고일자), `nb`(사건번호), `datSrcNm`(데이터출처명), `curt`(법원), `org`, `knd`, `gana`, `nw`, `efYd`, `ancYd`. 응답은 법제처 DRF JSON 그대로에 `proxy` 메타데이터만 덧붙인다. 요약 전에 반환 메타데이터를 먼저 확인한다.
|
|
60
|
+
|
|
61
|
+
### 본문/상세 조회
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
GET /v1/korean-law/detail?target={target}&ID={일련번호}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
검색 결과의 식별자(`ID` 또는 `MST`/`LID`)를 넘겨 상세 본문을 가져온다. 조문 지정은 `JO`(예: `000200` = 제2조), 언어는 `LANG` 로 넘긴다.
|
|
68
|
+
|
|
69
|
+
## Example requests
|
|
70
|
+
|
|
71
|
+
법령명 검색:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
curl -fsS --get 'https://k-skill-proxy.nomadamas.org/v1/korean-law/search' \
|
|
75
|
+
--data-urlencode 'target=law' \
|
|
76
|
+
--data-urlencode 'query=관세법'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
판례 검색:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
curl -fsS --get 'https://k-skill-proxy.nomadamas.org/v1/korean-law/search' \
|
|
83
|
+
--data-urlencode 'target=prec' \
|
|
84
|
+
--data-urlencode 'query=부당해고'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
판례 본문 조회:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
curl -fsS --get 'https://k-skill-proxy.nomadamas.org/v1/korean-law/detail' \
|
|
91
|
+
--data-urlencode 'target=prec' \
|
|
92
|
+
--data-urlencode 'ID=228541'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Response policy
|
|
96
|
+
|
|
97
|
+
- 한국 법령 관련 요청은 이 proxy endpoint로 처리한다. 별도 크롤러나 검색엔진 우회로 넘어가지 않는다.
|
|
98
|
+
- 약칭(`화관법`)이면 `target=law` 로 정식 법령명을 먼저 확인한다.
|
|
99
|
+
- 조문 요청이면 검색 결과의 식별자(`MST`/`ID`)를 확인한 뒤 `detail` 로 본문을 가져온다.
|
|
100
|
+
- 판례는 `target=prec`, 유권해석은 `target=expc`, 자치법규는 `target=ordin` 로 조회한다.
|
|
101
|
+
- 판례 본문이 필요하면 검색 결과의 판례 일련번호를 `detail?target=prec&ID=...` 로 이어서 조회한다.
|
|
102
|
+
- 검색 결과가 0건이어도 "관련 규범이 없다"고 단정하지 말고 검색어·법원·사건번호·선고일자·출처명을 바꿔 다시 시도한다.
|
|
103
|
+
- 일부 출처는 본문을 제공하지 않을 수 있다. 본문을 못 가져오면 목록 메타데이터(사건번호·법원·선고일자·출처·요지)까지만 제공하고 본문이 없다는 점을 명시한다(없는 본문을 지어내지 않는다).
|
|
104
|
+
- 법적 판단이 필요한 경우 `검색 결과 요약`과 `원문 출처`까지만 제공하고 법률 자문처럼 단정하지 않는다.
|
|
105
|
+
|
|
106
|
+
## Failure modes
|
|
107
|
+
|
|
108
|
+
- `target` 이 없거나 허용되지 않은 값이면 400 응답
|
|
109
|
+
- 검색어/식별자가 없으면 400 응답
|
|
110
|
+
- 프록시 서버에 `LAW_OC` 가 없으면 503 응답
|
|
111
|
+
- 법제처 API가 사용자 검증 실패(`사용자 정보 검증 실패`)를 반환하면 502 + `law_user_verification_failed` (서버 OC/UA/Referer 점검)
|
|
112
|
+
- 법제처 API가 일시적으로 빈/HTML 응답이면 proxy가 재시도 후 502 + `upstream_unstable`
|
|
113
|
+
|
|
114
|
+
## Done when
|
|
115
|
+
|
|
116
|
+
- 한국 법령 관련 질의를 proxy endpoint로 라우팅했다.
|
|
117
|
+
- 법령/조문은 `target=law` + 필요 시 `detail`, 판례는 `target=prec`, 유권해석은 `target=expc`, 자치법규는 `target=ordin` 로 맞는 종류를 조회했다.
|
|
118
|
+
- 판례/조문 본문이 필요하면 식별자로 `detail` 본문까지 연결했다.
|
|
119
|
+
- 결과를 요약하고 원문 출처(법제처 국가법령정보센터)를 함께 남겼다.
|
|
120
|
+
|
|
121
|
+
## Notes
|
|
122
|
+
|
|
123
|
+
- 설계 참고(upstream): `https://github.com/chrisryugj/korean-law-mcp`
|
|
124
|
+
- official data source: 법제처 Open API (`https://open.law.go.kr`, DRF `lawSearch.do`/`lawService.do`)
|
|
125
|
+
- 운영자(proxy) 전용 시크릿: `LAW_OC` (사용자는 불필요). 무료 발급: `https://open.law.go.kr`
|
|
126
|
+
- 이 저장소 안에는 한국 법령 전용 npm package나 python package를 추가하지 않는다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "korean-law-search",
|
|
3
|
+
"description": "Search Korean statutes, articles, precedents, interpretations, and local ordinances via k-skill-proxy. Use when the user asks for Korean law/article/precedent lookups.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"browser",
|
|
7
|
+
"lookup"
|
|
8
|
+
],
|
|
9
|
+
"frontmatter": "name: korean-law-search\ndescription: Search Korean statutes, articles, precedents, interpretations, and local ordinances via k-skill-proxy. Use when the user asks for Korean law/article/precedent lookups.\nlicense: MIT\nmetadata:\n category: legal\n locale: ko-KR\n phase: v1"
|
|
10
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Korean Marathon Schedule
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
한국 마라톤/러닝 대회 일정을 조회하고, 가능한 경우 대한철인3종협회 공개 일정에서 철인3종 대회도 함께 확인한다.
|
|
6
|
+
|
|
7
|
+
응답에는 최소한 아래 필드를 포함한다.
|
|
8
|
+
|
|
9
|
+
- 대회명
|
|
10
|
+
- 개최일
|
|
11
|
+
- 장소/지역
|
|
12
|
+
- 신청 마감일 또는 접수 기간
|
|
13
|
+
- 종목/코스(예: Half, 10km, 5km, 스탠다드)
|
|
14
|
+
- 공식/상세 링크
|
|
15
|
+
- 조회 시점 기준 정보라는 주의 문구
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- "서울 마라톤 일정 찾아줘"
|
|
20
|
+
- "10km 대회 접수 마감일 알려줘"
|
|
21
|
+
- "가을 마라톤 일정과 장소 정리해줘"
|
|
22
|
+
- "철인3종 경기 일정도 가능하면 같이 봐줘"
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
- 인터넷 연결
|
|
27
|
+
- Node.js 18+
|
|
28
|
+
- 이 저장소의 `korean-marathon-schedule` npm package 또는 동일 로직
|
|
29
|
+
|
|
30
|
+
## Public access path discovered
|
|
31
|
+
|
|
32
|
+
### Primary marathon source: GoRunning
|
|
33
|
+
|
|
34
|
+
- list entry point: `https://gorunning.kr/races/`
|
|
35
|
+
- detail pages: same-host `gorunning.kr` links matching `/races/<id>/<slug>/`
|
|
36
|
+
- detail fields used: title, event date, region/venue, registration period, registration deadline, status, organizer, website, categories.
|
|
37
|
+
- reason selected: public unauthenticated race list/detail pages include the required venue, deadline/registration period, and event categories. It works with direct HTTP requests and does not require a proxy or API key.
|
|
38
|
+
|
|
39
|
+
### Optional triathlon source: 대한철인3종협회
|
|
40
|
+
|
|
41
|
+
- list entry point: `https://triathlon.or.kr/events/tour/?sYear=<YYYY>&vType=list`
|
|
42
|
+
- detail pages: same-host `triathlon.or.kr` links matching `/events/tour/overview/?mode=overview&tourcd=<id>`
|
|
43
|
+
- detail fields used: title, event date, venue, registration period, organizer, and course/category labels. Non-competition list entries such as education, seminars, notices, and referee/leader sessions are filtered out before detail fetch.
|
|
44
|
+
- reason selected: the official federation page is public and unauthenticated, and provides triathlon schedules when available.
|
|
45
|
+
|
|
46
|
+
## Workflow
|
|
47
|
+
|
|
48
|
+
### 1. Search schedules
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
const { searchEvents } = require("korean-marathon-schedule")
|
|
52
|
+
|
|
53
|
+
const result = await searchEvents({
|
|
54
|
+
query: "서울", // title, venue, region, or category filter. Optional.
|
|
55
|
+
from: "2026-05-01", // optional YYYY-MM-DD
|
|
56
|
+
to: "2026-12-31", // optional YYYY-MM-DD
|
|
57
|
+
includeTriathlon: true, // optional; default false
|
|
58
|
+
limit: 10, // optional; default 10
|
|
59
|
+
maxDetailsPerSource: 100 // optional crawl budget; default max(300, limit * 10)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
console.log(result.items)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
CLI:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
node packages/korean-marathon-schedule/src/cli.js 서울 --from 2026-05-01 --to 2026-12-31 --include-triathlon --limit 10 --max-details-per-source 100
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Summarize conservatively
|
|
72
|
+
|
|
73
|
+
For each event, show:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
- 대회명: ...
|
|
77
|
+
일정: ...
|
|
78
|
+
장소: ...
|
|
79
|
+
신청 마감: ...
|
|
80
|
+
종목: ...
|
|
81
|
+
링크: ...
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
If no deadline is present, say `신청 마감일을 공개 페이지에서 확인하지 못함` instead of guessing.
|
|
85
|
+
|
|
86
|
+
### 3. Use fallback order
|
|
87
|
+
|
|
88
|
+
1. GoRunning list → same-host GoRunning detail pages for marathon/road-running schedules; continue through the public list until enough matching results are collected, the list is exhausted, or the explicit per-source detail budget is reached.
|
|
89
|
+
2. If the user asks for triathlon or `includeTriathlon` is useful, query the 대한철인3종협회 year list and same-host public detail pages; skip non-competition list entries and continue until enough matching results are collected, the selected year lists are exhausted, or the explicit per-source detail budget shared across selected years is reached.
|
|
90
|
+
3. If either source returns an empty, blocked, changed page, or detail-budget warning, report the source-specific failure/warning and return any successfully parsed results from the other source.
|
|
91
|
+
|
|
92
|
+
## Done when
|
|
93
|
+
|
|
94
|
+
- User's location/date/category filter was applied or explicitly left broad.
|
|
95
|
+
- At least one available result is summarized, or a clear empty-result/failure reason is given.
|
|
96
|
+
- Venue, registration deadline/period, and categories are included when present.
|
|
97
|
+
- Triathlon events were included when requested or when the user asked for them as "가능하면".
|
|
98
|
+
|
|
99
|
+
## Failure modes
|
|
100
|
+
|
|
101
|
+
- 일정/접수 정보는 수시로 바뀔 수 있다; always state results are based on the current public page read.
|
|
102
|
+
- GoRunning or triathlon.or.kr HTML structure may change; then parsing may return empty fields or fail. Off-origin detail links are ignored to keep the lookup bounded to documented public sources. If a public list is larger than the per-source detail budget, results can be partial and a warning is returned; triathlon applies that budget once across all selected years.
|
|
103
|
+
- Some official event websites may be linked only from the detail page; if absent, return the source detail URL.
|
|
104
|
+
- Registration may already be closed even if the event date is upcoming.
|
|
105
|
+
- Login, payment, CAPTCHA, or private member-only pages are outside scope and must not be automated.
|
|
106
|
+
|
|
107
|
+
## Notes
|
|
108
|
+
|
|
109
|
+
- This is a read-only lookup skill.
|
|
110
|
+
- No k-skill-proxy route is used because the upstream surfaces are public and do not require API keys.
|
|
111
|
+
- Do not register, reserve, pay for, or modify race entries.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "korean-marathon-schedule",
|
|
3
|
+
"description": "고러닝과 대한철인3종협회 공개 표면으로 한국 마라톤·철인3종 경기 일정, 장소, 신청 마감일, 종목을 조회한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"action:booking"
|
|
7
|
+
],
|
|
8
|
+
"frontmatter": "name: korean-marathon-schedule\ndescription: 고러닝과 대한철인3종협회 공개 표면으로 한국 마라톤·철인3종 경기 일정, 장소, 신청 마감일, 종목을 조회한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: sports\n locale: ko-KR\n phase: v1"
|
|
9
|
+
}
|