@nomadamas/k-skill 0.1.0 → 0.2.1

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 (142) hide show
  1. package/bin/k-skill.js +35 -5
  2. package/package.json +2 -2
  3. package/skills/assembly-bill-vote-search/skill.json +0 -1
  4. package/skills/biz-health-check/instruction.md +2 -2
  5. package/skills/biz-health-check/skill.json +0 -1
  6. package/skills/bok-ecos-stats/instruction.md +8 -8
  7. package/skills/bok-ecos-stats/skill.json +0 -1
  8. package/skills/building-register-search/instruction.md +6 -6
  9. package/skills/building-register-search/scripts/building_register.py +0 -0
  10. package/skills/cheap-gas-nearby/skill.json +0 -1
  11. package/skills/corporate-registration-consulting/scripts/fill_official_hwp.py +0 -0
  12. package/skills/corporate-registration-consulting/skill.json +3 -1
  13. package/skills/coupang-product-search/instruction.md +10 -10
  14. package/skills/coupang-product-search/scripts/coupang_partners_mcp.py +0 -0
  15. package/skills/court-auction-notice-search/skill.json +2 -1
  16. package/skills/court-payment-order-assistant/skill.json +1 -1
  17. package/skills/d2b-notice-search/skill.json +2 -1
  18. package/skills/daangn-cars-search/instruction.md +3 -3
  19. package/skills/daangn-cars-search/scripts/daangn_cars.py +0 -0
  20. package/skills/daangn-jobs-search/instruction.md +2 -2
  21. package/skills/daangn-jobs-search/scripts/daangn_jobs.py +0 -0
  22. package/skills/daangn-jobs-search/skill.json +3 -1
  23. package/skills/daangn-realty-search/instruction.md +1 -1
  24. package/skills/daangn-realty-search/scripts/daangn_realty.py +0 -0
  25. package/skills/daangn-used-goods-search/instruction.md +2 -2
  26. package/skills/daangn-used-goods-search/scripts/daangn_used_goods.py +0 -0
  27. package/skills/daishin-report-search/skill.json +0 -1
  28. package/skills/danawa-price-search/instruction.md +4 -4
  29. package/skills/danawa-price-search/scripts/danawa_search.py +0 -0
  30. package/skills/ev-charger-nearby/instruction.md +5 -5
  31. package/skills/ev-charger-nearby/skill.json +1 -2
  32. package/skills/express-bus-booking/instruction.md +2 -2
  33. package/skills/express-bus-booking/scripts/kobus_express_booking.py +0 -0
  34. package/skills/express-bus-booking/skill.json +2 -0
  35. package/skills/fine-dust-location/instruction.md +1 -1
  36. package/skills/fine-dust-location/scripts/fine_dust.py +549 -0
  37. package/skills/fine-dust-location/skill.json +7 -1
  38. package/skills/flight-ticket-search/instruction.md +7 -7
  39. package/skills/foresttrip-vacancy/instruction.md +7 -7
  40. package/skills/foresttrip-vacancy/scripts/run_foresttrip_vacancy.py +0 -0
  41. package/skills/fsc-corporate-info/instruction.md +1 -1
  42. package/skills/fsc-corporate-info/skill.json +0 -1
  43. package/skills/g2b-order-plan-search/instruction.md +2 -2
  44. package/skills/g2b-order-plan-search/skill.json +2 -1
  45. package/skills/g2b-sanctioned-supplier/instruction.md +1 -1
  46. package/skills/g2b-sanctioned-supplier/skill.json +0 -1
  47. package/skills/geeknews-search/instruction.md +3 -3
  48. package/skills/geeknews-search/scripts/geeknews_search.py +0 -0
  49. package/skills/gov-overseas-trip-report/instruction.md +12 -12
  50. package/skills/gov-overseas-trip-report/scripts/gov_overseas_trip_report.py +0 -0
  51. package/skills/han-river-water-level/skill.json +0 -1
  52. package/skills/highway-traffic-status/instruction.md +2 -2
  53. package/skills/highway-traffic-status/skill.json +0 -1
  54. package/skills/household-waste-info/skill.json +0 -1
  55. package/skills/intercity-bus-booking/instruction.md +3 -3
  56. package/skills/intercity-bus-booking/scripts/intercity_bus_search.py +0 -0
  57. package/skills/intercity-bus-booking/skill.json +2 -0
  58. package/skills/iros-registry-automation/instruction.md +2 -2
  59. package/skills/iros-registry-automation/skill.json +2 -1
  60. package/skills/job-posting-match/instruction.md +2 -2
  61. package/skills/job-posting-match/skill.json +1 -1
  62. package/skills/jobkorea-talent-search/instruction.md +1 -1
  63. package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search.py +0 -0
  64. package/skills/jobkorea-talent-search/skill.json +2 -1
  65. package/skills/joseon-sillok-search/instruction.md +6 -6
  66. package/skills/k-skill-cleaner/instruction.md +2 -2
  67. package/skills/k-skill-cleaner/scripts/k_skill_cleaner.py +0 -0
  68. package/skills/k-skill-setup/instruction.md +1 -1
  69. package/skills/k-skill-setup/scripts/check-setup.sh +29 -0
  70. package/skills/k-skill-setup/skill.json +8 -2
  71. package/skills/kakaotalk-mac/skill.json +1 -1
  72. package/skills/keris-academic-search/instruction.md +4 -4
  73. package/skills/korea-weather/skill.json +0 -1
  74. package/skills/korean-character-count/instruction.md +8 -8
  75. package/skills/korean-heritage-search/instruction.md +5 -5
  76. package/skills/korean-humanizer/instruction.md +1 -1
  77. package/skills/korean-jangbu-for/instruction.md +3 -3
  78. package/skills/korean-jangbu-for/scripts/install.sh +0 -0
  79. package/skills/korean-middle-korean/instruction.md +6 -6
  80. package/skills/korean-middle-korean/scripts/korean_middle_korean.js +0 -0
  81. package/skills/korean-patent-search/instruction.md +4 -4
  82. package/skills/korean-privacy-terms/instruction.md +4 -4
  83. package/skills/korean-privacy-terms/scripts/install.sh +0 -0
  84. package/skills/korean-scholarship-search/instruction.md +10 -10
  85. package/skills/korean-slang-writing/instruction.md +8 -8
  86. package/skills/korean-spell-check/instruction.md +3 -3
  87. package/skills/korean-spell-check/skill.json +0 -1
  88. package/skills/korean-stock-search/skill.json +0 -1
  89. package/skills/korean-transit-route/skill.json +0 -1
  90. package/skills/kosis-stats/instruction.md +13 -26
  91. package/skills/kr-whois-lookup/skill.json +1 -2
  92. package/skills/kstartup-search/instruction.md +8 -8
  93. package/skills/ktx-booking/instruction.md +15 -15
  94. package/skills/ktx-booking/scripts/ktx_booking.py +1316 -0
  95. package/skills/ktx-booking/skill.json +7 -1
  96. package/skills/lck-analytics/instruction.md +4 -4
  97. package/skills/lck-analytics/scripts/_lib.js +0 -0
  98. package/skills/lck-analytics/scripts/analyze-live-game.js +0 -0
  99. package/skills/lck-analytics/scripts/build-match-report.js +0 -0
  100. package/skills/lck-analytics/scripts/sync-oracle.js +0 -0
  101. package/skills/localdata-business-status/instruction.md +2 -2
  102. package/skills/mfds-drug-safety/instruction.md +3 -3
  103. package/skills/mfds-drug-safety/skill.json +0 -1
  104. package/skills/mfds-food-safety/instruction.md +6 -6
  105. package/skills/mfds-food-safety/skill.json +0 -1
  106. package/skills/myrealtrip-search/instruction.md +11 -11
  107. package/skills/myrealtrip-search/scripts/myrealtrip_mcp.py +0 -0
  108. package/skills/national-pension-workplace/instruction.md +1 -1
  109. package/skills/national-pension-workplace/skill.json +0 -1
  110. package/skills/naver-ad-performance/instruction.md +7 -7
  111. package/skills/naver-blog-research/instruction.md +4 -4
  112. package/skills/naver-news-search/skill.json +0 -1
  113. package/skills/nhis-care-checkup-search/skill.json +1 -2
  114. package/skills/nts-business-registration/instruction.md +3 -3
  115. package/skills/nts-tax-delinquency/instruction.md +1 -1
  116. package/skills/ohou-today-deal/instruction.md +4 -4
  117. package/skills/ohou-today-deal/scripts/ohou_today_deal.py +0 -0
  118. package/skills/popbill/instruction.md +9 -9
  119. package/skills/real-estate-search/skill.json +0 -1
  120. package/skills/s2b-notice-search/skill.json +2 -1
  121. package/skills/saramin-talent-search/skill.json +2 -1
  122. package/skills/seoul-bike/instruction.md +3 -3
  123. package/skills/seoul-bike/scripts/seoul_bike.py +0 -0
  124. package/skills/seoul-bike/skill.json +0 -1
  125. package/skills/seoul-density/instruction.md +4 -4
  126. package/skills/seoul-density/skill.json +0 -1
  127. package/skills/srt-booking/instruction.md +4 -4
  128. package/skills/subway-lost-property/instruction.md +2 -2
  129. package/skills/subway-lost-property/scripts/subway_lost_property.py +0 -0
  130. package/skills/subway-lost-property/skill.json +1 -1
  131. package/skills/ticket-availability/instruction.md +3 -3
  132. package/skills/ticket-availability/skill.json +2 -1
  133. package/skills/yebigun-training/skill.json +2 -1
  134. package/skills/zipcode-search/instruction.md +2 -2
  135. package/skills/zipcode-search/scripts/zipcode_search.py +0 -0
  136. package/src/assemble.js +148 -4
  137. package/src/execute.js +81 -0
  138. package/templates/action-recruiting.md +5 -0
  139. package/templates/legal.md +6 -0
  140. package/templates/operations.md +3 -0
  141. package/templates/action-communication.md +0 -5
  142. package/templates/hard-boundary.md +0 -3
package/bin/k-skill.js CHANGED
@@ -1,7 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
 
4
- const { assemble, bundledFiles, listSkills } = require("../src/assemble");
4
+ const {
5
+ assemble,
6
+ bundledFiles,
7
+ listSkills,
8
+ readBundledAsset,
9
+ resolveBundledAsset,
10
+ } = require("../src/assemble");
11
+ const { runBundledScript } = require("../src/execute");
5
12
  const { detectRuntime } = require("../src/detect");
6
13
 
7
14
  function usage() {
@@ -10,6 +17,10 @@ function usage() {
10
17
  "",
11
18
  "Commands:",
12
19
  " instruct <skill> Print runtime-aware assembled instructions for a skill",
20
+ " exec <skill> <script> -- [args...]",
21
+ " Execute a bundled scripts/ helper with its declared shebang",
22
+ " read <skill> <file> Read a bundled references/ or text scripts/ asset",
23
+ " path <skill> <file> Print the absolute path of a bundled asset",
13
24
  " files <skill> Print local paths of the skill's bundled helper files",
14
25
  " list List bundled skills",
15
26
  "",
@@ -19,7 +30,7 @@ function usage() {
19
30
  }
20
31
 
21
32
  function main() {
22
- const [command, skillName] = process.argv.slice(2);
33
+ const [command, skillName, assetPath, ...rawArgs] = process.argv.slice(2);
23
34
 
24
35
  if (!command || command === "--help" || command === "-h") {
25
36
  console.log(usage());
@@ -31,7 +42,7 @@ function main() {
31
42
  return 0;
32
43
  }
33
44
 
34
- if (command === "instruct" || command === "files") {
45
+ if (["instruct", "files", "exec", "read", "path"].includes(command)) {
35
46
  if (!skillName) {
36
47
  console.error(`error: "${command}" requires a skill name\n\n${usage()}`);
37
48
  return 1;
@@ -40,12 +51,31 @@ function main() {
40
51
  try {
41
52
  if (command === "instruct") {
42
53
  process.stdout.write(assemble(skillName, detectRuntime()));
43
- } else {
54
+ } else if (command === "files") {
44
55
  for (const filePath of bundledFiles(skillName)) console.log(filePath);
56
+ } else {
57
+ if (!assetPath) {
58
+ console.error(`error: "${command}" requires an asset path\n\n${usage()}`);
59
+ return 1;
60
+ }
61
+
62
+ if (command === "exec") {
63
+ const args = rawArgs[0] === "--" ? rawArgs.slice(1) : rawArgs;
64
+ return runBundledScript(skillName, assetPath, args).status;
65
+ }
66
+ if (command === "read") {
67
+ process.stdout.write(readBundledAsset(skillName, assetPath));
68
+ return 0;
69
+ }
70
+ console.log(resolveBundledAsset(skillName, assetPath));
45
71
  }
46
72
  return 0;
47
73
  } catch (error) {
48
- if (error.code === "EUNKNOWNSKILL") {
74
+ if (
75
+ ["EUNKNOWNSKILL", "EASSETPATH", "EASSETNOTFOUND", "EUNSUPPORTEDSCRIPT"].includes(
76
+ error.code,
77
+ )
78
+ ) {
49
79
  console.error(`error: ${error.message}`);
50
80
  return 1;
51
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomadamas/k-skill",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "k-skill unified CLI: assembles runtime-aware skill instructions and ships bundled helper files",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -31,7 +31,7 @@
31
31
  "cli"
32
32
  ],
33
33
  "scripts": {
34
- "lint": "node --check bin/k-skill.js && node --check src/assemble.js && node --check src/detect.js && node --check test/cli.test.js",
34
+ "lint": "node --check bin/k-skill.js && node --check src/assemble.js && node --check src/detect.js && node --check src/execute.js && node --check test/cli.test.js",
35
35
  "test": "node --test"
36
36
  }
37
37
  }
@@ -3,7 +3,6 @@
3
3
  "description": "열린국회정보 Open API를 k-skill-proxy 경유로 호출해 의안 검색·상세와 국회의원 본회의 표결정보를 조회한다. 조회 전용.",
4
4
  "profiles": [
5
5
  "proxy",
6
- "vault",
7
6
  "lookup"
8
7
  ],
9
8
  "frontmatter": "name: assembly-bill-vote-search\ndescription: 열린국회정보 Open API를 k-skill-proxy 경유로 호출해 의안 검색·상세와 국회의원 본회의 표결정보를 조회한다. 조회 전용.\nlicense: MIT\nmetadata:\n category: civic\n locale: ko-KR\n phase: v1"
@@ -48,10 +48,10 @@
48
48
  ## CLI examples
49
49
 
50
50
  ```bash
51
- python3 biz-health-check/scripts/biz_health_check.py 124-81-00998 --name "삼성전자"
51
+ npx -y @nomadamas/k-skill@0 exec biz-health-check scripts/biz_health_check.py -- 124-81-00998 --name "삼성전자"
52
52
 
53
53
  # 동네 사업장까지 포함
54
- python3 biz-health-check/scripts/biz_health_check.py --name "호텔샬롬" --region 제주제주시 --industry 숙박업
54
+ npx -y @nomadamas/k-skill@0 exec biz-health-check scripts/biz_health_check.py -- --name "호텔샬롬" --region 제주제주시 --industry 숙박업
55
55
  ```
56
56
 
57
57
  ## Output
@@ -3,7 +3,6 @@
3
3
  "description": "사업자등록번호 하나로 \"이 사업자, 실제 문제 없나\"를 확인한다 — 국세청 사업자등록 상태·국민연금 가입 사업장·국세 체납 명단·금융위 법인개요·조달청 부정당제재·지방행정 인허가 영업상태를 무료 공공 데이터로 교차 조회해 사실만 병렬하는 실사 리포트(점수·등급·위험 판정 없음).",
4
4
  "profiles": [
5
5
  "proxy",
6
- "vault",
7
6
  "lookup"
8
7
  ],
9
8
  "frontmatter": "name: biz-health-check\ndescription: 사업자등록번호 하나로 \"이 사업자, 실제 문제 없나\"를 확인한다 — 국세청 사업자등록 상태·국민연금 가입 사업장·국세 체납 명단·금융위 법인개요·조달청 부정당제재·지방행정 인허가 영업상태를 무료 공공 데이터로 교차 조회해 사실만 병렬하는 실사 리포트(점수·등급·위험 판정 없음).\nlicense: MIT\nmetadata:\n category: business\n locale: ko-KR\n phase: v1"
@@ -40,9 +40,9 @@
40
40
  ### 1. 자주 쓰는 지표는 alias로 바로 조회
41
41
 
42
42
  ```bash
43
- python3 bok-ecos-stats/scripts/bok_ecos.py search --alias 기준금리 --start 20260101 --end 20260721 --text
44
- python3 bok-ecos-stats/scripts/bok_ecos.py search --alias 원달러환율 --start 20260701 --end 20260721 --text
45
- python3 bok-ecos-stats/scripts/bok_ecos.py search --alias 소비자물가지수 --start 202501 --end 202606 --text
43
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- search --alias 기준금리 --start 20260101 --end 20260721 --text
44
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- search --alias 원달러환율 --start 20260701 --end 20260721 --text
45
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- search --alias 소비자물가지수 --start 202501 --end 202606 --text
46
46
  ```
47
47
 
48
48
  지원 alias: `기준금리`, `원달러환율`, `소비자물가지수`(=`cpi`), `M2`(=`통화량`), `국고채3년`.
@@ -52,22 +52,22 @@ python3 bok-ecos-stats/scripts/bok_ecos.py search --alias 소비자물가지수
52
52
  ### 2. 최신 핵심지표 한 번에 보기
53
53
 
54
54
  ```bash
55
- python3 bok-ecos-stats/scripts/bok_ecos.py key --limit 10 --text
55
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- key --limit 10 --text
56
56
  ```
57
57
 
58
58
  ### 3. 임의 통계표 탐색 → 항목 확인 → 시계열 조회
59
59
 
60
60
  ```bash
61
- python3 bok-ecos-stats/scripts/bok_ecos.py tables --text
62
- python3 bok-ecos-stats/scripts/bok_ecos.py items --stat-code 722Y001 --text
63
- python3 bok-ecos-stats/scripts/bok_ecos.py search --stat-code 722Y001 --cycle D \
61
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- tables --text
62
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- items --stat-code 722Y001 --text
63
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- search --stat-code 722Y001 --cycle D \
64
64
  --start 20260101 --end 20260721 --item-code 0101000 --text
65
65
  ```
66
66
 
67
67
  ### 4. 용어가 낯설면 사전 검색
68
68
 
69
69
  ```bash
70
- python3 bok-ecos-stats/scripts/bok_ecos.py word --query 소비자물가지수 --text
70
+ npx -y @nomadamas/k-skill@0 exec bok-ecos-stats scripts/bok_ecos.py -- word --query 소비자물가지수 --text
71
71
  ```
72
72
 
73
73
  `--text` 없이 실행하면 구조화 JSON(`result`, `rows`, `source`)을 출력한다.
@@ -3,7 +3,6 @@
3
3
  "description": "한국은행 ECOS Open API로 기준금리, 환율, 소비자물가지수, 통화량 등 중앙은행 경제통계 시계열과 100대 핵심지표를 조회한다. Use when the user asks 기준금리, 환율 추이, 물가지수, M2, 국고채 금리, 거시경제 통계. Not for 주식 시세(korean-stock-search) or KOSIS 일반 통계(kosis-stats).",
4
4
  "profiles": [
5
5
  "proxy",
6
- "vault",
7
6
  "lookup"
8
7
  ],
9
8
  "frontmatter": "name: bok-ecos-stats\ndescription: 한국은행 ECOS Open API로 기준금리, 환율, 소비자물가지수, 통화량 등 중앙은행 경제통계 시계열과 100대 핵심지표를 조회한다. Use when the user asks 기준금리, 환율 추이, 물가지수, M2, 국고채 금리, 거시경제 통계. Not for 주식 시세(korean-stock-search) or KOSIS 일반 통계(kosis-stats).\nlicense: MIT\nmetadata:\n category: data\n locale: ko-KR\n phase: v1"
@@ -18,10 +18,10 @@
18
18
  ## Commands
19
19
 
20
20
  ```bash
21
- python3 scripts/building_register.py title --address '서울 강남구 역삼동 123-4'
22
- python3 scripts/building_register.py title --pnu 1168010100101230004
23
- python3 scripts/building_register.py title --sigungu-cd 11680 --bjdong-cd 10100 --plat-gb-cd 0 --bun 123 --ji 4
24
- python3 scripts/building_register.py title --pnu 1168010100101230004 --json
21
+ npx -y @nomadamas/k-skill@0 exec building-register-search scripts/building_register.py -- title --address '서울 강남구 역삼동 123-4'
22
+ npx -y @nomadamas/k-skill@0 exec building-register-search scripts/building_register.py -- title --pnu 1168010100101230004
23
+ npx -y @nomadamas/k-skill@0 exec building-register-search scripts/building_register.py -- title --sigungu-cd 11680 --bjdong-cd 10100 --plat-gb-cd 0 --bun 123 --ji 4
24
+ npx -y @nomadamas/k-skill@0 exec building-register-search scripts/building_register.py -- title --pnu 1168010100101230004 --json
25
25
  ```
26
26
 
27
27
  PNU는 `sigunguCd(5) + bjdongCd(5) + 토지구분(1) + bun(4) + ji(4)`의 19자리다. PNU 토지구분 `1`(일반 토지)은 건축물대장 API `platGbCd=0`, `2`(산)는 `platGbCd=1`로 변환한다. 개별 필드나 주소 결과로 PNU를 구성할 때도 API 값 `0`은 PNU `1`, API 값 `1`은 PNU `2`로 역변환한다. `--plat-gb-cd`를 직접 입력할 때는 PNU 값이 아니라 건축물대장 API 값이며 공식 값 `0`, `1`, `2`를 허용한다. API 값 `2`는 그대로 조회에 전달하되 대응하는 표준 PNU 토지구분이 없으므로 PNU를 구성하지 않는다. 개별 입력의 `bun`, `ji`는 4자리로 왼쪽 zero-padding되며 `ji` 생략 시 `0000`이다. `pageNo` 기본값은 1, `numOfRows` 기본값은 10이고 최대 100이다.
@@ -31,8 +31,8 @@ PNU는 `sigunguCd(5) + bjdongCd(5) + 토지구분(1) + bun(4) + ji(4)`의 19자
31
31
  ## Direct mode
32
32
 
33
33
  ```bash
34
- python3 scripts/building_register.py title --pnu 1168010100101230004 --direct
35
- python3 scripts/building_register.py title --pnu 1168010100101230004 --direct --dry-run
34
+ npx -y @nomadamas/k-skill@0 exec building-register-search scripts/building_register.py -- title --pnu 1168010100101230004 --direct
35
+ npx -y @nomadamas/k-skill@0 exec building-register-search scripts/building_register.py -- title --pnu 1168010100101230004 --direct --dry-run
36
36
  ```
37
37
 
38
38
  `--direct`는 주소를 받지 않는다. `KSKILL_BUILDING_REGISTER_API_KEY`, 그다음 `DATA_GO_KR_API_KEY`, 마지막으로 `~/.config/k-skill/secrets.env`의 같은 키 순서로 찾는다. Kakao direct credential은 사용하지 않는다. `--dry-run`은 실제 키를 `REDACTED`로 가린다.
@@ -3,7 +3,6 @@
3
3
  "description": "Use when the user asks for nearby cheapest gas stations or 근처 가장 싼 주유소. Always ask the user's current location first, then use Kakao Map anchor resolution plus official Opinet fuel-price APIs.",
4
4
  "profiles": [
5
5
  "proxy",
6
- "vault",
7
6
  "lookup"
8
7
  ],
9
8
  "frontmatter": "name: cheap-gas-nearby\ndescription: Use when the user asks for nearby cheapest gas stations or 근처 가장 싼 주유소. Always ask the user's current location first, then use Kakao Map anchor resolution plus official Opinet fuel-price APIs.\nlicense: MIT\nmetadata:\n category: transport\n locale: ko-KR\n phase: v1"
@@ -2,7 +2,9 @@
2
2
  "name": "corporate-registration-consulting",
3
3
  "description": "법인등기소/인터넷등기소 상업등기 신청을 처음 하는 사용자를 위해 일반 영리 주식회사 발기설립 절차, 정관·첨부서류 실제 HWP 양식 작성, 등록면허세·과밀억제권역 중과 체크, rhwp 기반 순차 검토 흐름을 참고용으로 안내한다. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.",
4
4
  "profiles": [
5
- "hard-boundary"
5
+ "vault",
6
+ "browser",
7
+ "legal"
6
8
  ],
7
9
  "frontmatter": "name: corporate-registration-consulting\ndescription: 법인등기소/인터넷등기소 상업등기 신청을 처음 하는 사용자를 위해 일반 영리 주식회사 발기설립 절차, 정관·첨부서류 실제 HWP 양식 작성, 등록면허세·과밀억제권역 중과 체크, rhwp 기반 순차 검토 흐름을 참고용으로 안내한다. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.\nlicense: MIT\nmetadata:\n category: legal-documents\n locale: ko-KR"
8
10
  }
@@ -85,18 +85,18 @@ local://coupang-mcp
85
85
  래퍼는 기본적으로 `~/.cache/k-skill/coupang_partners`에 upstream 저장소를 clone한다. 이미 clone되어 있으면 그대로 사용하고, 최신화가 필요할 때만 `--update`를 붙인다.
86
86
 
87
87
  ```bash
88
- python3 coupang-product-search/scripts/coupang_partners_mcp.py tools
89
- python3 coupang-product-search/scripts/coupang_partners_mcp.py init
88
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- tools
89
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- init
90
90
  ```
91
91
 
92
92
  기존 checkout을 명시하거나 CI/검증에서 네트워크 clone을 막으려면:
93
93
 
94
94
  ```bash
95
- python3 coupang-product-search/scripts/coupang_partners_mcp.py \
95
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- \
96
96
  --repo-dir /path/to/coupang_partners \
97
97
  --no-clone \
98
98
  tools
99
- python3 coupang-product-search/scripts/coupang_partners_mcp.py \
99
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- \
100
100
  --repo-dir /path/to/coupang_partners \
101
101
  --no-clone \
102
102
  init
@@ -108,19 +108,19 @@ python3 coupang-product-search/scripts/coupang_partners_mcp.py \
108
108
 
109
109
  ```bash
110
110
  # 일반 검색 (키 없이도 hosted fallback으로 작동)
111
- python3 coupang-product-search/scripts/coupang_partners_mcp.py search "32인치 4K 모니터"
111
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- search "32인치 4K 모니터"
112
112
 
113
113
  # 로켓배송 필터
114
- python3 coupang-product-search/scripts/coupang_partners_mcp.py rocket "에어팟"
114
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- rocket "에어팟"
115
115
 
116
116
  # 가격대 검색
117
- python3 coupang-product-search/scripts/coupang_partners_mcp.py budget "키보드" --max-price 100000
117
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- budget "키보드" --max-price 100000
118
118
 
119
119
  # 비교
120
- python3 coupang-product-search/scripts/coupang_partners_mcp.py compare "아이패드 vs 갤럭시탭"
120
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- compare "아이패드 vs 갤럭시탭"
121
121
 
122
122
  # 골드박스 (운영자 키가 필요한 upstream 경로)
123
- python3 coupang-product-search/scripts/coupang_partners_mcp.py goldbox
123
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- goldbox
124
124
  ```
125
125
 
126
126
  ### 4. (optional) hosted fallback 강제
@@ -129,7 +129,7 @@ python3 coupang-product-search/scripts/coupang_partners_mcp.py goldbox
129
129
 
130
130
  ```bash
131
131
  export OPENCLAW_SHOPPING_FORCE_HOSTED=1
132
- python3 coupang-product-search/scripts/coupang_partners_mcp.py search "에어팟"
132
+ npx -y @nomadamas/k-skill@0 exec coupang-product-search scripts/coupang_partners_mcp.py -- search "에어팟"
133
133
  ```
134
134
 
135
135
  ### 5. Continue from discovery to cart and checkout in Dolshoi
@@ -2,8 +2,9 @@
2
2
  "name": "court-auction-notice-search",
3
3
  "description": "Browse 대법원경매정보(courtauction.go.kr) 부동산 매각공고 by 매각기일·법원·기일/기간 입찰, expand each notice into 사건번호·용도·주소·감정평가액·최저매각가, search property items by free conditions(지역·용도·가격·면적·유찰횟수), and look up a case directly by 법원+사건번호. Read-only, slow-by-design (~2s/call) to avoid IP blocks. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.",
4
4
  "profiles": [
5
+ "vault",
5
6
  "browser",
6
- "hard-boundary"
7
+ "legal"
7
8
  ],
8
9
  "frontmatter": "name: court-auction-notice-search\ndescription: Browse 대법원경매정보(courtauction.go.kr) 부동산 매각공고 by 매각기일·법원·기일/기간 입찰, expand each notice into 사건번호·용도·주소·감정평가액·최저매각가, search property items by free conditions(지역·용도·가격·면적·유찰횟수), and look up a case directly by 법원+사건번호. Read-only, slow-by-design (~2s/call) to avoid IP blocks. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.\nlicense: MIT\nmetadata:\n category: real-estate\n locale: ko-KR\n phase: v1"
9
10
  }
@@ -4,7 +4,7 @@
4
4
  "profiles": [
5
5
  "vault",
6
6
  "browser",
7
- "hard-boundary"
7
+ "legal"
8
8
  ],
9
9
  "frontmatter": "name: court-payment-order-assistant\ndescription: 법원 전자소송 지급명령 신청을 위해 채권자·채무자·청구금액·청구원인·증빙 정보를 인터뷰하고, 신청서 초안과 공식 전자소송 브라우저 입력 handoff를 준비한다. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.\nlicense: MIT\nmetadata:\n category: legal\n locale: ko-KR\n phase: v1"
10
10
  }
@@ -3,8 +3,9 @@
3
3
  "description": "국방전자조달시스템(D2B) 공개 입찰공고 검색 화면에서 공고건명·공고구분·공고/개찰일·G2B공고번호·발주기관 조건으로 공고를 조회한다. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.",
4
4
  "profiles": [
5
5
  "proxy",
6
+ "vault",
6
7
  "browser",
7
- "hard-boundary"
8
+ "legal"
8
9
  ],
9
10
  "frontmatter": "name: d2b-notice-search\ndescription: 국방전자조달시스템(D2B) 공개 입찰공고 검색 화면에서 공고건명·공고구분·공고/개찰일·G2B공고번호·발주기관 조건으로 공고를 조회한다. 돌쇠에서는 가능한 가장 가까운 합법적 공식 단계까지 준비한다.\nlicense: MIT\nmetadata:\n category: procurement\n locale: ko-KR\n phase: v1"
10
11
  }
@@ -41,9 +41,9 @@
41
41
  ## Commands
42
42
 
43
43
  ```bash
44
- python3 daangn-cars-search/scripts/daangn_cars.py search "레이" --region "합정동" --limit 5
45
- python3 daangn-cars-search/scripts/daangn_cars.py search --region "합정동" --price-max 10000000 --limit 5
46
- python3 daangn-cars-search/scripts/daangn_cars.py detail "https://www.daangn.com/kr/cars/.../"
44
+ npx -y @nomadamas/k-skill@0 exec daangn-cars-search scripts/daangn_cars.py -- search "레이" --region "합정동" --limit 5
45
+ npx -y @nomadamas/k-skill@0 exec daangn-cars-search scripts/daangn_cars.py -- search --region "합정동" --price-max 10000000 --limit 5
46
+ npx -y @nomadamas/k-skill@0 exec daangn-cars-search scripts/daangn_cars.py -- detail "https://www.daangn.com/kr/cars/.../"
47
47
  ```
48
48
 
49
49
  ## Output fields
File without changes
@@ -41,8 +41,8 @@
41
41
  ## Commands
42
42
 
43
43
  ```bash
44
- python3 daangn-jobs-search/scripts/daangn_jobs.py search "카페" --region "합정동" --limit 5
45
- python3 daangn-jobs-search/scripts/daangn_jobs.py detail "https://www.daangn.com/kr/jobs/.../"
44
+ npx -y @nomadamas/k-skill@0 exec daangn-jobs-search scripts/daangn_jobs.py -- search "카페" --region "합정동" --limit 5
45
+ npx -y @nomadamas/k-skill@0 exec daangn-jobs-search scripts/daangn_jobs.py -- detail "https://www.daangn.com/kr/jobs/.../"
46
46
  ```
47
47
 
48
48
  ## Output fields
File without changes
@@ -3,7 +3,9 @@
3
3
  "description": "당근알바 공개 웹 데이터로 공고를 검색하고, 돌쇠에서는 공식 계정 표면에서 지원서 작성·채팅·승인 기반 전송까지 진행한다.",
4
4
  "profiles": [
5
5
  "proxy",
6
- "action:communication"
6
+ "vault",
7
+ "browser",
8
+ "action:submission"
7
9
  ],
8
10
  "frontmatter": "name: daangn-jobs-search\ndescription: 당근알바 공개 웹 데이터로 공고를 검색하고, 돌쇠에서는 공식 계정 표면에서 지원서 작성·채팅·승인 기반 전송까지 진행한다.\nlicense: MIT\nmetadata:\n category: jobs\n locale: ko-KR\n phase: v1"
9
11
  }
@@ -63,7 +63,7 @@ ArticleFeedConnection.edges → ArticleFeedEdge.node → ArticleFeedCard.article
63
63
 
64
64
  ```bash
65
65
  # 기본 검색 (상위 5개 제목·층수 보강)
66
- python3 daangn-realty-search/scripts/daangn_realty.py search --region "매교동" --limit 20
66
+ npx -y @nomadamas/k-skill@0 exec daangn-realty-search scripts/daangn_realty.py -- search --region "매교동" --limit 20
67
67
 
68
68
  # 거래/용도 필터
69
69
  python3 ... search --region "매교동" --trade-type BUY # 매매만
@@ -41,8 +41,8 @@
41
41
  ## Commands
42
42
 
43
43
  ```bash
44
- python3 daangn-used-goods-search/scripts/daangn_used_goods.py search "맥북" --region "합정동" --limit 5
45
- python3 daangn-used-goods-search/scripts/daangn_used_goods.py detail "https://www.daangn.com/kr/buy-sell/.../"
44
+ npx -y @nomadamas/k-skill@0 exec daangn-used-goods-search scripts/daangn_used_goods.py -- search "맥북" --region "합정동" --limit 5
45
+ npx -y @nomadamas/k-skill@0 exec daangn-used-goods-search scripts/daangn_used_goods.py -- detail "https://www.daangn.com/kr/buy-sell/.../"
46
46
  ```
47
47
 
48
48
  ## Output fields
@@ -3,7 +3,6 @@
3
3
  "description": "대신증권 리포트 GitHub Pages 미러에서 최신 HTML 리포트 목록과 원문/설명 페이지를 조회한다.",
4
4
  "profiles": [
5
5
  "proxy",
6
- "vault",
7
6
  "lookup"
8
7
  ],
9
8
  "frontmatter": "name: daishin-report-search\ndescription: 대신증권 리포트 GitHub Pages 미러에서 최신 HTML 리포트 목록과 원문/설명 페이지를 조회한다.\nlicense: MIT\nmetadata:\n category: finance\n locale: ko-KR\n phase: v1"
@@ -46,9 +46,9 @@ AJAX endpoint는 HTML fragment를 반환한다. helper는 `.diff_item`, 쇼핑
46
46
  스킬 디렉터리에서 실행한다.
47
47
 
48
48
  ```bash
49
- python scripts/danawa_search.py search "에어팟 프로 2세대" --limit 8
50
- python scripts/danawa_search.py offers 28208783 --limit 10
51
- python scripts/danawa_search.py compare "에어팟 프로 2세대" --limit 5 --offers 5
49
+ npx -y @nomadamas/k-skill@0 exec danawa-price-search scripts/danawa_search.py -- search "에어팟 프로 2세대" --limit 8
50
+ npx -y @nomadamas/k-skill@0 exec danawa-price-search scripts/danawa_search.py -- offers 28208783 --limit 10
51
+ npx -y @nomadamas/k-skill@0 exec danawa-price-search scripts/danawa_search.py -- compare "에어팟 프로 2세대" --limit 5 --offers 5
52
52
  ```
53
53
 
54
54
  helper는 JSON만 출력한다. 결과를 확인한 뒤 사용자에게는 한국어 표와 짧은 결론으로 정리한다.
@@ -157,7 +157,7 @@ Discord/Telegram/chat 응답에서는 표 형식을 우선한다.
157
157
  ## Workflow
158
158
 
159
159
  1. 검색어를 확인한다.
160
- 2. `python scripts/danawa_search.py search "<검색어>" --limit 5`로 후보를 확인한다.
160
+ 2. `npx -y @nomadamas/k-skill@0 exec danawa-price-search scripts/danawa_search.py -- search "<검색어>" --limit 5`로 후보를 확인한다.
161
161
  3. 후보가 명확하면 해당 `pcode`로 `offers`를 실행한다.
162
162
  4. 후보가 애매하면 상위 3~5개 상품명/가격/`pcode`를 보여주고 선택을 요청한다.
163
163
  5. 오퍼는 **`total_price` 오름차순 단일 기준으로 정렬한다 (결제조건 분리 그룹화하지 않음).** 결제조건은 표의 "결제조건" 컬럼과 row 단위 플래그로만 표기하고, 1위가 현금/쿠폰가여도 그대로 1위로 노출한다.
@@ -19,9 +19,9 @@
19
19
  설치된 skill 디렉터리에서 실행한다.
20
20
 
21
21
  ```bash
22
- python3 scripts/ev_charger.py info --location '서울 강남구' --num-of-rows 10
23
- python3 scripts/ev_charger.py status --stat-id ME000001 --num-of-rows 10
24
- python3 scripts/ev_charger.py status --zcode 11 --limit-yn Y --period 10 --json
22
+ npx -y @nomadamas/k-skill@0 exec ev-charger-nearby scripts/ev_charger.py -- info --location '서울 강남구' --num-of-rows 10
23
+ npx -y @nomadamas/k-skill@0 exec ev-charger-nearby scripts/ev_charger.py -- status --stat-id ME000001 --num-of-rows 10
24
+ npx -y @nomadamas/k-skill@0 exec ev-charger-nearby scripts/ev_charger.py -- status --zcode 11 --limit-yn Y --period 10 --json
25
25
  ```
26
26
 
27
27
  공통 필터는 `zcode`, `zscode`, `statId`, `chgerId`다. hosted proxy의 `info`는 고유하게 식별되는 `location`을 행정구역 코드로 변환하며, 모호하거나 찾을 수 없는 위치와 충돌하는 명시적 코드는 거부한다. `status`는 `limitYn`과 `period`를 추가로 허용한다. 페이지 기본값은 `pageNo=1`, `numOfRows=10`이며 `numOfRows` 범위는 10~9999다.
@@ -29,8 +29,8 @@ python3 scripts/ev_charger.py status --zcode 11 --limit-yn Y --period 10 --json
29
29
  직접 호출:
30
30
 
31
31
  ```bash
32
- python3 scripts/ev_charger.py info --zcode 11 --zscode 11680 --direct
33
- python3 scripts/ev_charger.py status --stat-id ME000001 --direct --dry-run
32
+ npx -y @nomadamas/k-skill@0 exec ev-charger-nearby scripts/ev_charger.py -- info --zcode 11 --zscode 11680 --direct
33
+ npx -y @nomadamas/k-skill@0 exec ev-charger-nearby scripts/ev_charger.py -- status --stat-id ME000001 --direct --dry-run
34
34
  ```
35
35
 
36
36
  직접 호출은 위치 텍스트를 행정구역 코드로 변환하지 않으므로 `--location` 대신 `--zcode`/`--zscode`를 사용한다. `--dry-run`은 URL을 보여주되 키를 `REDACTED`로 가린다.
@@ -3,8 +3,7 @@
3
3
  "description": "Use when the user asks for Korean EV charging-station locations, charger types, or current charger status by region, station, or location text. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
4
  "profiles": [
5
5
  "proxy",
6
- "vault",
7
- "action:booking"
6
+ "lookup"
8
7
  ],
9
8
  "frontmatter": "name: ev-charger-nearby\ndescription: Use when the user asks for Korean EV charging-station locations, charger types, or current charger status by region, station, or location text. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: transit\n locale: ko-KR\n phase: v1"
10
9
  }
@@ -28,7 +28,7 @@ Do **not** use this for:
28
28
 
29
29
  ## Known HTTP Flow
30
30
 
31
- See `references/kobus-http-flow.md` for session-proven endpoint details and parameter examples.
31
+ See `npx -y @nomadamas/k-skill@0 read express-bus-booking references/kobus-http-flow.md` for session-proven endpoint details and parameter examples.
32
32
 
33
33
  ### 1. Start a Session
34
34
 
@@ -126,7 +126,7 @@ Use the same relevant form fields plus the returned `pcpyNoAll` and `satsNoAll`.
126
126
  Use the bundled helper for KOBUS lookup and optional temporary holds:
127
127
 
128
128
  ```bash
129
- python3 express-bus-booking/scripts/kobus_express_booking.py \
129
+ npx -y @nomadamas/k-skill@0 exec express-bus-booking scripts/kobus_express_booking.py -- \
130
130
  --depart-code 021 \
131
131
  --arrive-code 500 \
132
132
  --date 20260520 \
@@ -2,6 +2,8 @@
2
2
  "name": "express-bus-booking",
3
3
  "description": "Search and assist Korean 고속버스/KOBUS bookings using official HTTP/API-first flows; use for 고속버스 예매, 시간표, 좌석 조회, 임시 선점, and official checkout-entry handoff. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
4
4
  "profiles": [
5
+ "vault",
6
+ "browser",
5
7
  "action:booking"
6
8
  ],
7
9
  "frontmatter": "name: express-bus-booking\ndescription: Search and assist Korean 고속버스/KOBUS bookings using official HTTP/API-first flows; use for 고속버스 예매, 시간표, 좌석 조회, 임시 선점, and official checkout-entry handoff. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: travel\n locale: ko-KR\n phase: v1"
@@ -36,7 +36,7 @@ curl -fsS --get 'https://k-skill-proxy.nomadamas.org/v1/fine-dust/report' \
36
36
  스크립트 helper 도 같은 report endpoint 를 기본 경로로 사용한다.
37
37
 
38
38
  ```bash
39
- python3 scripts/fine_dust.py report --region-hint '서울 강남구' --json
39
+ npx -y @nomadamas/k-skill@0 exec fine-dust-location scripts/fine_dust.py -- report --region-hint '서울 강남구' --json
40
40
  ```
41
41
 
42
42
  ## Ambiguous locations