@nomadamas/k-skill 0.1.0 → 0.2.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 (134) 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/flight-ticket-search/instruction.md +7 -7
  36. package/skills/foresttrip-vacancy/instruction.md +7 -7
  37. package/skills/foresttrip-vacancy/scripts/run_foresttrip_vacancy.py +0 -0
  38. package/skills/fsc-corporate-info/instruction.md +1 -1
  39. package/skills/fsc-corporate-info/skill.json +0 -1
  40. package/skills/g2b-order-plan-search/instruction.md +2 -2
  41. package/skills/g2b-order-plan-search/skill.json +2 -1
  42. package/skills/g2b-sanctioned-supplier/instruction.md +1 -1
  43. package/skills/g2b-sanctioned-supplier/skill.json +0 -1
  44. package/skills/geeknews-search/instruction.md +3 -3
  45. package/skills/geeknews-search/scripts/geeknews_search.py +0 -0
  46. package/skills/gov-overseas-trip-report/instruction.md +12 -12
  47. package/skills/gov-overseas-trip-report/scripts/gov_overseas_trip_report.py +0 -0
  48. package/skills/han-river-water-level/skill.json +0 -1
  49. package/skills/highway-traffic-status/instruction.md +2 -2
  50. package/skills/highway-traffic-status/skill.json +0 -1
  51. package/skills/household-waste-info/skill.json +0 -1
  52. package/skills/intercity-bus-booking/instruction.md +3 -3
  53. package/skills/intercity-bus-booking/scripts/intercity_bus_search.py +0 -0
  54. package/skills/intercity-bus-booking/skill.json +2 -0
  55. package/skills/iros-registry-automation/instruction.md +2 -2
  56. package/skills/iros-registry-automation/skill.json +2 -1
  57. package/skills/job-posting-match/instruction.md +2 -2
  58. package/skills/job-posting-match/skill.json +1 -1
  59. package/skills/jobkorea-talent-search/instruction.md +1 -1
  60. package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search.py +0 -0
  61. package/skills/jobkorea-talent-search/skill.json +2 -1
  62. package/skills/joseon-sillok-search/instruction.md +6 -6
  63. package/skills/k-skill-cleaner/instruction.md +2 -2
  64. package/skills/k-skill-cleaner/scripts/k_skill_cleaner.py +0 -0
  65. package/skills/k-skill-setup/skill.json +1 -1
  66. package/skills/kakaotalk-mac/skill.json +1 -1
  67. package/skills/keris-academic-search/instruction.md +4 -4
  68. package/skills/korea-weather/skill.json +0 -1
  69. package/skills/korean-character-count/instruction.md +8 -8
  70. package/skills/korean-heritage-search/instruction.md +5 -5
  71. package/skills/korean-humanizer/instruction.md +1 -1
  72. package/skills/korean-jangbu-for/instruction.md +3 -3
  73. package/skills/korean-jangbu-for/scripts/install.sh +0 -0
  74. package/skills/korean-middle-korean/instruction.md +6 -6
  75. package/skills/korean-middle-korean/scripts/korean_middle_korean.js +0 -0
  76. package/skills/korean-patent-search/instruction.md +4 -4
  77. package/skills/korean-privacy-terms/instruction.md +4 -4
  78. package/skills/korean-privacy-terms/scripts/install.sh +0 -0
  79. package/skills/korean-scholarship-search/instruction.md +10 -10
  80. package/skills/korean-slang-writing/instruction.md +8 -8
  81. package/skills/korean-spell-check/instruction.md +3 -3
  82. package/skills/korean-spell-check/skill.json +0 -1
  83. package/skills/korean-stock-search/skill.json +0 -1
  84. package/skills/korean-transit-route/skill.json +0 -1
  85. package/skills/kosis-stats/instruction.md +13 -26
  86. package/skills/kr-whois-lookup/skill.json +1 -2
  87. package/skills/kstartup-search/instruction.md +8 -8
  88. package/skills/lck-analytics/instruction.md +4 -4
  89. package/skills/lck-analytics/scripts/_lib.js +0 -0
  90. package/skills/lck-analytics/scripts/analyze-live-game.js +0 -0
  91. package/skills/lck-analytics/scripts/build-match-report.js +0 -0
  92. package/skills/lck-analytics/scripts/sync-oracle.js +0 -0
  93. package/skills/localdata-business-status/instruction.md +2 -2
  94. package/skills/mfds-drug-safety/instruction.md +3 -3
  95. package/skills/mfds-drug-safety/skill.json +0 -1
  96. package/skills/mfds-food-safety/instruction.md +6 -6
  97. package/skills/mfds-food-safety/skill.json +0 -1
  98. package/skills/myrealtrip-search/instruction.md +11 -11
  99. package/skills/myrealtrip-search/scripts/myrealtrip_mcp.py +0 -0
  100. package/skills/national-pension-workplace/instruction.md +1 -1
  101. package/skills/national-pension-workplace/skill.json +0 -1
  102. package/skills/naver-ad-performance/instruction.md +7 -7
  103. package/skills/naver-blog-research/instruction.md +4 -4
  104. package/skills/naver-news-search/skill.json +0 -1
  105. package/skills/nhis-care-checkup-search/skill.json +1 -2
  106. package/skills/nts-business-registration/instruction.md +3 -3
  107. package/skills/nts-tax-delinquency/instruction.md +1 -1
  108. package/skills/ohou-today-deal/instruction.md +4 -4
  109. package/skills/ohou-today-deal/scripts/ohou_today_deal.py +0 -0
  110. package/skills/popbill/instruction.md +9 -9
  111. package/skills/real-estate-search/skill.json +0 -1
  112. package/skills/s2b-notice-search/skill.json +2 -1
  113. package/skills/saramin-talent-search/skill.json +2 -1
  114. package/skills/seoul-bike/instruction.md +3 -3
  115. package/skills/seoul-bike/scripts/seoul_bike.py +0 -0
  116. package/skills/seoul-bike/skill.json +0 -1
  117. package/skills/seoul-density/instruction.md +4 -4
  118. package/skills/seoul-density/skill.json +0 -1
  119. package/skills/srt-booking/instruction.md +4 -4
  120. package/skills/subway-lost-property/instruction.md +2 -2
  121. package/skills/subway-lost-property/scripts/subway_lost_property.py +0 -0
  122. package/skills/subway-lost-property/skill.json +1 -1
  123. package/skills/ticket-availability/instruction.md +3 -3
  124. package/skills/ticket-availability/skill.json +2 -1
  125. package/skills/yebigun-training/skill.json +2 -1
  126. package/skills/zipcode-search/instruction.md +2 -2
  127. package/skills/zipcode-search/scripts/zipcode_search.py +0 -0
  128. package/src/assemble.js +147 -4
  129. package/src/execute.js +81 -0
  130. package/templates/action-recruiting.md +5 -0
  131. package/templates/legal.md +6 -0
  132. package/templates/operations.md +3 -0
  133. package/templates/action-communication.md +0 -5
  134. 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.0",
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"
@@ -57,7 +57,7 @@
57
57
  이 skill은 저장소 내 helper를 직접 실행한다.
58
58
 
59
59
  ```bash
60
- python3 flight-ticket-search/scripts/flight_ticket_search.py --help
60
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- --help
61
61
  ```
62
62
 
63
63
  최초 실행 시 `~/.cache/k-skill/flight-ticket-search/venv`에 `fast-flights==2.2`를 설치하고 그 venv로 재실행한다. 저장소에는 의존성 vendoring이나 API key를 넣지 않는다.
@@ -67,7 +67,7 @@ python3 flight-ticket-search/scripts/flight_ticket_search.py --help
67
67
  편도:
68
68
 
69
69
  ```bash
70
- python3 flight-ticket-search/scripts/flight_ticket_search.py search \
70
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- search \
71
71
  --from ICN \
72
72
  --to NRT \
73
73
  --date 2026-06-01 \
@@ -80,7 +80,7 @@ python3 flight-ticket-search/scripts/flight_ticket_search.py search \
80
80
  왕복:
81
81
 
82
82
  ```bash
83
- python3 flight-ticket-search/scripts/flight_ticket_search.py search \
83
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- search \
84
84
  --from ICN \
85
85
  --to NRT \
86
86
  --date 2026-06-01 \
@@ -105,7 +105,7 @@ python3 flight-ticket-search/scripts/flight_ticket_search.py search \
105
105
  빠른 기본값은 주 1회 샘플링이다.
106
106
 
107
107
  ```bash
108
- python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
108
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- compare-month \
109
109
  --from ICN \
110
110
  --to NRT \
111
111
  --month 2026-06 \
@@ -116,7 +116,7 @@ python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
116
116
  일별 전체 조회가 필요하면 `--sample daily`를 쓴다. 다만 28~31회 요청이 발생하므로 rate limit을 위해 `--sleep`을 1.5초 이상 유지한다.
117
117
 
118
118
  ```bash
119
- python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
119
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- compare-month \
120
120
  --from ICN \
121
121
  --to NRT \
122
122
  --month 2026-06 \
@@ -138,7 +138,7 @@ python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
138
138
  사용자가 "다음주부터 2주간", "6월 1일부터 20일까지"처럼 범위를 주면 날짜 범위 비교를 사용한다.
139
139
 
140
140
  ```bash
141
- python3 flight-ticket-search/scripts/flight_ticket_search.py compare-range \
141
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- compare-range \
142
142
  --from ICN \
143
143
  --to BKK \
144
144
  --start-date 2026-06-01 \
@@ -154,7 +154,7 @@ python3 flight-ticket-search/scripts/flight_ticket_search.py compare-range \
154
154
  연도 비교는 같은 월일을 여러 연도에 대해 조회한다.
155
155
 
156
156
  ```bash
157
- python3 flight-ticket-search/scripts/flight_ticket_search.py compare-years \
157
+ npx -y @nomadamas/k-skill@0 exec flight-ticket-search scripts/flight_ticket_search.py -- compare-years \
158
158
  --from ICN \
159
159
  --to NRT \
160
160
  --years 2026,2027 \
@@ -28,7 +28,7 @@ generic runtime에서 helper는 조회 전용이다. 돌쇠에서는 조회 결
28
28
  ```bash
29
29
  python3 -m pip install playwright
30
30
  python3 -m playwright install chromium
31
- python3 scripts/run_foresttrip_vacancy.py --check-deps
31
+ npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --check-deps
32
32
  ```
33
33
 
34
34
  ## Required environment variables
@@ -91,25 +91,25 @@ API는 `srchDate` 단일 일자만 요청해도 응답에 5일 윈도우를 포
91
91
  전체 자연휴양림에서 특정 날짜 조회:
92
92
 
93
93
  ```bash
94
- python3 scripts/run_foresttrip_vacancy.py --all --text --dates 20260504
94
+ npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --all --text --dates 20260504
95
95
  ```
96
96
 
97
97
  JSON 출력:
98
98
 
99
99
  ```bash
100
- python3 scripts/run_foresttrip_vacancy.py --all --json --dates 20260504
100
+ npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --all --json --dates 20260504
101
101
  ```
102
102
 
103
103
  캠핑/야영만 조회:
104
104
 
105
105
  ```bash
106
- python3 scripts/run_foresttrip_vacancy.py --all --text --dates 20260504 --categories 02
106
+ npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --all --text --dates 20260504 --categories 02
107
107
  ```
108
108
 
109
109
  특정 휴양림명으로 조회:
110
110
 
111
111
  ```bash
112
- python3 scripts/run_foresttrip_vacancy.py --forest-name 유명산 --text --dates 20260504
112
+ npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --forest-name 유명산 --text --dates 20260504
113
113
  ```
114
114
 
115
115
  ### 4. Summarize results conservatively
@@ -154,8 +154,8 @@ python3 scripts/run_foresttrip_vacancy.py --forest-name 유명산 --text --dates
154
154
 
155
155
  - `./scripts/validate-skills.sh`
156
156
  - `python3 -m py_compile foresttrip-vacancy/scripts/run_foresttrip_vacancy.py`
157
- - `python3 foresttrip-vacancy/scripts/run_foresttrip_vacancy.py --help`
158
- - `python3 foresttrip-vacancy/scripts/run_foresttrip_vacancy.py --check-deps`
157
+ - `npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --help`
158
+ - `npx -y @nomadamas/k-skill@0 exec foresttrip-vacancy scripts/run_foresttrip_vacancy.py -- --check-deps`
159
159
  - `npm run ci`
160
160
 
161
161
  실제 live smoke는 기여자 또는 이미 숲나들e 계정을 가진 사용자가 선택적으로 수행한다. PR에는 `forests_scanned`, `fetch_failures`, `filter_hits` 같은 비민감 요약만 남기고 계정 정보, 세션 쿠키, 개인 조회 세부 내역은 공유하지 않는다.