@bhoon716/skill-forge 1.0.0 → 1.0.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.
package/README.ko.md CHANGED
@@ -9,6 +9,9 @@
9
9
  <p align="center">
10
10
  <a href="./README.md">English</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.zh.md">简体中文</a>
11
11
  </p>
12
+ <p align="center">
13
+ 📦 <a href="https://www.npmjs.com/package/@bhoon716/skill-forge">NPM Package</a>
14
+ </p>
12
15
  ---
13
16
 
14
17
  **정성껏 깎아낸 AI 에이전트 스킬(Agent Skill)들을 한데 모으고 스마트하게 배포하는 작업공간입니다.**
@@ -71,19 +74,19 @@ skill-forge/
71
74
  ### 💡 명령어 실물 예시
72
75
  ```bash
73
76
  # 1. 특정 스킬을 한국어로 Codex/Gemini 프로젝트 로컬에 설치 (기본값)
74
- $ skill-forge add ultra-grill-me --lang ko
77
+ $ skill-forge install ultra-grill-me --lang ko
75
78
 
76
79
  # 2. 특정 스킬을 한국어로 Claude Code 로컬 경로에 설치
77
- $ skill-forge add ultra-grill-me --lang ko --agent claude
80
+ $ skill-forge install ultra-grill-me --lang ko --agent claude
78
81
 
79
82
  # 3. 특정 스킬을 영어로 Cursor 프로젝트 로컬 경로에 설치
80
- $ skill-forge add ultra-grill-me --lang en --agent cursor
83
+ $ skill-forge install ultra-grill-me --lang en --agent cursor
81
84
 
82
85
  # 4. 글로벌 환경에 한국어 스킬로 전역 설치 (모든 워크스페이스 공유)
83
- $ skill-forge add ultra-grill-me --lang ko --agent global
86
+ $ skill-forge install ultra-grill-me --lang ko --agent global
84
87
 
85
88
  # 5. 전체 스킬을 한국어 버전으로 한 번에 로컬 설치
86
- $ skill-forge install-all --lang ko --agent codex
89
+ $ skill-forge install all --lang ko --agent codex
87
90
  ```
88
91
 
89
92
  ### ⚙️ 옵션 요약
package/README.md CHANGED
@@ -9,6 +9,9 @@
9
9
  <p align="center">
10
10
  <a href="./README.md">English</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.zh.md">简体中文</a>
11
11
  </p>
12
+ <p align="center">
13
+ 📦 <a href="https://www.npmjs.com/package/@bhoon716/skill-forge">NPM Package</a>
14
+ </p>
12
15
  ---
13
16
 
14
17
  **A dedicated, professional workspace to craft, test, and distribute sharp, reusable AI Agent Skills.**
@@ -71,19 +74,19 @@ A built-in installer tool that automatically maps localized skill source files a
71
74
  ### 💡 CLI Usage Examples
72
75
  ```bash
73
76
  # 1. Install Korean version locally to Codex/Gemini directory (Default)
74
- $ skill-forge add ultra-grill-me --lang ko
77
+ $ skill-forge install ultra-grill-me --lang ko
75
78
 
76
79
  # 2. Install Korean version locally to Claude Code directory
77
- $ skill-forge add ultra-grill-me --lang ko --agent claude
80
+ $ skill-forge install ultra-grill-me --lang ko --agent claude
78
81
 
79
82
  # 3. Install English version locally to Cursor directory
80
- $ skill-forge add ultra-grill-me --lang en --agent cursor
83
+ $ skill-forge install ultra-grill-me --lang en --agent cursor
81
84
 
82
85
  # 4. Install globally for all workspaces (English default)
83
- $ skill-forge add ultra-grill-me --lang en --agent global
86
+ $ skill-forge install ultra-grill-me --lang en --agent global
84
87
 
85
88
  # 5. Install all skills in the forge workspace at once in Korean
86
- $ skill-forge install-all --lang ko --agent codex
89
+ $ skill-forge install all --lang ko --agent codex
87
90
  ```
88
91
 
89
92
  ### ⚙️ Options List
package/README.zh.md CHANGED
@@ -9,6 +9,9 @@
9
9
  <p align="center">
10
10
  <a href="./README.md">English</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.zh.md">简体中文</a>
11
11
  </p>
12
+ <p align="center">
13
+ 📦 <a href="https://www.npmjs.com/package/@bhoon716/skill-forge">NPM Package</a>
14
+ </p>
12
15
  ---
13
16
 
14
17
  **精心打磨的 AI Agent Skill 设计与智能分发工作空间。**
@@ -56,37 +59,37 @@ skill-forge/
56
59
 
57
60
  ---
58
61
 
59
- ## 🚀 3. CLI 快速部署工具 (`skf` 或 `npx @bhoon716/skill-forge`)
62
+ ## 🚀 3. CLI 快速部署工具 (`skill-forge` 或 `npx @bhoon716/skill-forge`)
60
63
 
61
64
  通过轻量化 CLI 可以自动根据语言选项映射,并将 Skill 复制部署到对应的 Agent 本地或全局配置路径中。
62
65
 
63
66
  > [!TIP]
64
- > **只需 3 个字符即可轻松运行 (`skf`)**:
65
- > 您可以全局安装此工具,以便使用快捷命令 `skf` 立即启动交互式安装模式。
67
+ > **全局命令更轻松运行 (`skill-forge`)**:
68
+ > 您可以全局安装此工具,以便直接运行 `skill-forge` 启动交互式安装模式。
66
69
  > ```bash
67
70
  > # 1. 全局安装 (仅需一次)
68
71
  > $ npm install -g @bhoon716/skill-forge
69
72
  >
70
73
  > # 2. 快捷运行交互式安装模式
71
- > $ skf
74
+ > $ skill-forge
72
75
  > ```
73
76
 
74
77
  ### 💡 命令行实例
75
78
  ```bash
76
79
  # 1. 以中文版部署到本地默认项目路径 (Codex/Gemini)
77
- $ skf add ultra-grill-me --lang zh
80
+ $ skill-forge install ultra-grill-me --lang zh
78
81
 
79
82
  # 2. 以中文版部署到本地 Claude Code 路径
80
- $ skf add ultra-grill-me --lang zh --agent claude
83
+ $ skill-forge install ultra-grill-me --lang zh --agent claude
81
84
 
82
85
  # 3. 以英文版部署到本地 Cursor 路径
83
- $ skf add ultra-grill-me --lang en --agent cursor
86
+ $ skill-forge install ultra-grill-me --lang en --agent cursor
84
87
 
85
88
  # 4. 以中文版全局部署到用户主目录 (全局生效)
86
- $ skf add ultra-grill-me --lang zh --agent global
89
+ $ skill-forge install ultra-grill-me --lang zh --agent global
87
90
 
88
91
  # 5. 一键中文部署工作空间内的所有 Skill
89
- $ skf install-all --lang zh --agent codex
92
+ $ skill-forge install all --lang zh --agent codex
90
93
  ```
91
94
 
92
95
  ### ⚙️ 选项说明
package/bin/cli.js CHANGED
@@ -11,13 +11,14 @@ const sourceSkillsDir = path.join(__dirname, '..', 'skills');
11
11
  const def_usage = () => {
12
12
  console.log(`
13
13
  Usage: npx @bhoon716/skill-forge [command] [options]
14
+ (or use "skill-forge" globally after npm install -g)
14
15
 
15
16
  If run without arguments, launches Interactive Setup Mode.
16
17
 
17
18
  Commands:
18
19
  list List all available skills and their descriptions.
19
- add <skill-name> Install a specific skill from the forge workspace.
20
- install-all Install all available skills from the forge workspace.
20
+ install <name> Install a specific skill from the forge workspace.
21
+ Use "install all" to install all available skills.
21
22
 
22
23
  Options:
23
24
  -l, --lang <lang> Specify localization language (e.g., en, ko, zh). (Default: en)
@@ -27,9 +28,9 @@ Options:
27
28
  -h, --help Display help message.
28
29
 
29
30
  Examples:
30
- npx @bhoon716/skill-forge list --lang ko
31
- npx @bhoon716/skill-forge add ultra-grill-me --lang ko
32
- npx @bhoon716/skill-forge add ultra-grill-me --lang zh --agent claude
31
+ skill-forge list --lang ko
32
+ skill-forge install ultra-grill-me --lang ko
33
+ skill-forge install all --lang zh --agent claude
33
34
  `);
34
35
  };
35
36
 
@@ -65,17 +66,14 @@ const listSkillsLogic = (selectedLang = 'en') => {
65
66
  }
66
67
 
67
68
  skills.forEach(skill => {
68
- // Try to find localized SKILL file
69
69
  let skillFile = path.join(sourceSkillsDir, skill, `SKILL.${selectedLang}.md`);
70
70
  if (!fs.existsSync(skillFile)) {
71
- skillFile = path.join(sourceSkillsDir, skill, 'SKILL.md'); // Fallback to default
71
+ skillFile = path.join(sourceSkillsDir, skill, 'SKILL.md');
72
72
  }
73
73
 
74
74
  let description = 'No description provided.';
75
75
  if (fs.existsSync(skillFile)) {
76
76
  const content = fs.readFileSync(skillFile, 'utf8');
77
-
78
- // Parse description from frontmatter
79
77
  const descMatch = content.match(/description:\s*(.*)/);
80
78
  if (descMatch && descMatch[1]) {
81
79
  description = descMatch[1].trim();
@@ -84,7 +82,7 @@ const listSkillsLogic = (selectedLang = 'en') => {
84
82
 
85
83
  console.log(`* ${skill.padEnd(20)} - ${description}`);
86
84
  });
87
- console.log('\nUse "skill-forge add <skill-name>" to install a specific skill.\n');
85
+ console.log('\nUse "skill-forge install <skill-name>" to install a specific skill.\n');
88
86
  };
89
87
 
90
88
  // Interactive Mode Prompt
@@ -115,36 +113,51 @@ const runInteractiveMode = async () => {
115
113
  const question = (query) => new Promise((resolve) => rl.question(query, resolve));
116
114
 
117
115
  try {
118
- // 1. Select Skill
119
- console.log('Available Skills in Forge:');
120
- skills.forEach((s, idx) => console.log(` [${idx + 1}] ${s}`));
121
- console.log(` [${skills.length + 1}] (Install All Available Skills)`);
122
-
123
- let skillChoiceIdx = -1;
124
- while (true) {
125
- const ans = await question(`\nSelect a skill to install [1-${skills.length + 1}]: `);
126
- const val = parseInt(ans.trim());
127
- if (val >= 1 && val <= skills.length + 1) {
128
- skillChoiceIdx = val - 1;
129
- break;
116
+ let selectedSkill = null;
117
+ let installAll = false;
118
+
119
+ // 1. Select Skill (Skip if only 1 skill exists)
120
+ if (skills.length === 1) {
121
+ selectedSkill = skills[0];
122
+ console.log(`[Auto-selected Skill] Only 1 skill found: "${selectedSkill}"`);
123
+ } else {
124
+ console.log('Available Skills in Forge:');
125
+ skills.forEach((s, idx) => console.log(` [${idx + 1}] ${s}`));
126
+ console.log(` [${skills.length + 1}] (Install All Available Skills)`);
127
+
128
+ while (true) {
129
+ const ans = await question(`\nSelect a skill to install [1-${skills.length + 1}]: `);
130
+ const val = parseInt(ans.trim());
131
+ if (val >= 1 && val <= skills.length + 1) {
132
+ if (val === skills.length + 1) {
133
+ installAll = true;
134
+ } else {
135
+ selectedSkill = skills[val - 1];
136
+ }
137
+ break;
138
+ }
139
+ console.log('Invalid choice. Please select a valid option number.');
130
140
  }
131
- console.log('Invalid choice. Please select a valid option number.');
132
141
  }
133
142
 
134
- const installAll = skillChoiceIdx === skills.length;
135
- const selectedSkill = installAll ? null : skills[skillChoiceIdx];
143
+ // 2. Select Language (Detect OS language environment)
144
+ const envLang = process.env.LANG || '';
145
+ const isKoreanEnv = envLang.toLowerCase().includes('ko') || envLang.toLowerCase().includes('korean');
146
+ const defaultLangCode = isKoreanEnv ? 'ko' : 'en';
136
147
 
137
- // 2. Select Language
138
148
  console.log('\nSelect localization language:');
139
- console.log(' [1] English (en) - Default');
140
- console.log(' [2] 한국어 (ko)');
149
+ console.log(` [1] English (en) ${!isKoreanEnv ? '- Default' : ''}`);
150
+ console.log(` [2] 한국어 (ko) ${isKoreanEnv ? '- Default' : ''}`);
141
151
  console.log(' [3] 简体中文 (zh)');
142
152
 
143
- let selectedLang = 'en';
153
+ let selectedLang = defaultLangCode;
144
154
  while (true) {
145
- const ans = await question('\nSelect language option [1-3, Default 1]: ');
155
+ const ans = await question(`\nSelect language option [1-3, Default ${isKoreanEnv ? '2' : '1'}]: `);
146
156
  const val = ans.trim();
147
- if (val === '' || val === '1') {
157
+ if (val === '') {
158
+ selectedLang = defaultLangCode;
159
+ break;
160
+ } else if (val === '1') {
148
161
  selectedLang = 'en';
149
162
  break;
150
163
  } else if (val === '2') {
@@ -157,7 +170,7 @@ const runInteractiveMode = async () => {
157
170
  console.log('Invalid choice. Please select 1, 2, or 3.');
158
171
  }
159
172
 
160
- // 3. Select Agent Target
173
+ // 3. Select Agent Target (Smart default if detected)
161
174
  const detected = detectAgents();
162
175
  console.log('\nSelect target AI Agent environment:');
163
176
 
@@ -169,18 +182,22 @@ const runInteractiveMode = async () => {
169
182
  { name: 'Global User Setting (~/.gemini/config/)', value: 'global' }
170
183
  ];
171
184
 
185
+ let defaultAgentIdx = 1;
172
186
  agentsList.forEach((ag, idx) => {
173
187
  const isDetected = detected.some(d => d.value === ag.value);
188
+ if (isDetected && detected.length === 1) {
189
+ defaultAgentIdx = idx + 1;
190
+ }
174
191
  const label = isDetected ? '⭐ (Detected in Project)' : '';
175
192
  console.log(` [${idx + 1}] ${ag.name} ${label}`);
176
193
  });
177
194
 
178
- let selectedAgent = 'codex';
195
+ let selectedAgent = agentsList[defaultAgentIdx - 1].value;
179
196
  while (true) {
180
- const ans = await question('\nSelect agent option [1-5, Default 1]: ');
197
+ const ans = await question(`\nSelect agent option [1-5, Default ${defaultAgentIdx}]: `);
181
198
  const val = ans.trim();
182
199
  if (val === '') {
183
- selectedAgent = 'codex';
200
+ selectedAgent = agentsList[defaultAgentIdx - 1].value;
184
201
  break;
185
202
  }
186
203
  const idx = parseInt(val);
@@ -201,7 +218,6 @@ const runInteractiveMode = async () => {
201
218
  console.log(` - Target Agent: ${selectedAgent}`);
202
219
  console.log('---------------------------------------------------\n');
203
220
 
204
- // Run installation logic
205
221
  const targetBaseDir = getTargetBaseDir(selectedAgent);
206
222
  if (installAll) {
207
223
  console.log(`Installing all ${skills.length} skills to target path: ${targetBaseDir}...\n`);
@@ -245,14 +261,19 @@ if (args.includes('-h') || args.includes('--help')) {
245
261
  process.exit(0);
246
262
  }
247
263
 
248
- // If no arguments, launch Interactive Mode
249
264
  if (args.length === 0) {
250
265
  runInteractiveMode();
251
266
  } else {
252
267
  // Command line parameters parsing mode
253
- const command = args[0];
254
- if (command !== 'add' && command !== 'install-all' && command !== 'list') {
255
- console.error(`Error: Unknown command "${command}"`);
268
+ const rawCommand = args[0];
269
+
270
+ // Normalize command for backward compatibility
271
+ let command = rawCommand;
272
+ if (rawCommand === 'add') command = 'install';
273
+ if (rawCommand === 'install-all') command = 'install-all';
274
+
275
+ if (command !== 'install' && command !== 'install-all' && command !== 'list') {
276
+ console.error(`Error: Unknown command "${rawCommand}"`);
256
277
  def_usage();
257
278
  process.exit(1);
258
279
  }
@@ -261,17 +282,21 @@ if (args.length === 0) {
261
282
  let lang = 'en';
262
283
  let agent = 'codex';
263
284
  let dryRun = false;
285
+ let isAllTarget = false;
264
286
 
265
- if (command === 'add') {
287
+ if (command === 'install') {
266
288
  targetSkill = args[1];
267
289
  if (!targetSkill || targetSkill.startsWith('-')) {
268
- console.error('Error: Please specify a skill name to add.');
290
+ console.error('Error: Please specify a skill name to install (e.g. skill-forge install ultra-grill-me).');
269
291
  process.exit(1);
270
292
  }
293
+ // "install all" format compatibility
294
+ if (targetSkill.toLowerCase() === 'all') {
295
+ isAllTarget = true;
296
+ }
271
297
  }
272
298
 
273
- // Parse command flags
274
- const parseStartIdx = command === 'add' ? 2 : 1;
299
+ const parseStartIdx = command === 'install' ? 2 : 1;
275
300
  for (let i = parseStartIdx; i < args.length; i++) {
276
301
  const arg = args[i];
277
302
  if (arg === '-l' || arg === '--lang') {
@@ -288,9 +313,7 @@ if (args.length === 0) {
288
313
  } else {
289
314
  const targetBaseDir = getTargetBaseDir(agent);
290
315
 
291
- if (command === 'add') {
292
- installSkillLogic(targetSkill, lang, agent, targetBaseDir, dryRun);
293
- } else if (command === 'install-all') {
316
+ if (isAllTarget || command === 'install-all') {
294
317
  if (!fs.existsSync(sourceSkillsDir)) {
295
318
  console.error(`Error: Skills source directory not found at ${sourceSkillsDir}`);
296
319
  process.exit(1);
@@ -299,6 +322,8 @@ if (args.length === 0) {
299
322
  return fs.statSync(path.join(sourceSkillsDir, file)).isDirectory();
300
323
  });
301
324
  skills.forEach(s => installSkillLogic(s, lang, agent, targetBaseDir, dryRun));
325
+ } else {
326
+ installSkillLogic(targetSkill, lang, agent, targetBaseDir, dryRun);
302
327
  }
303
328
  }
304
329
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bhoon716/skill-forge",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Agent Skill Authoring & Distribution CLI Workspace",
5
5
  "main": "bin/cli.js",
6
6
  "bin": {
@@ -79,7 +79,7 @@ graph TD
79
79
 
80
80
  ---
81
81
 
82
- ## 4. `npx @bhoon716/skill-forge` CLI 설치 가이드
82
+ ## 4. `skill-forge` CLI 설치 가이드
83
83
 
84
84
  저장소 공통 CLI 도구를 사용하여 원하는 에이전트 도구 환경에 지정된 언어 버전으로 즉시 이식합니다.
85
85
 
@@ -88,16 +88,16 @@ graph TD
88
88
 
89
89
  ```bash
90
90
  # 1. Codex/Gemini에 한국어 버전으로 로컬 설치 (기본값)
91
- npx @bhoon716/skill-forge add ultra-grill-me --lang ko
91
+ skill-forge install ultra-grill-me --lang ko
92
92
 
93
93
  # 2. Claude Code에 한국어 버전으로 로컬 설치
94
- npx @bhoon716/skill-forge add ultra-grill-me --lang ko --agent claude
94
+ skill-forge install ultra-grill-me --lang ko --agent claude
95
95
 
96
96
  # 3. Cursor 프로젝트 로컬에 영어 버전으로 설치
97
- npx @bhoon716/skill-forge add ultra-grill-me --lang en --agent cursor
97
+ skill-forge install ultra-grill-me --lang en --agent cursor
98
98
 
99
99
  # 4. 글로벌 스킬 디렉토리에 한국어 버전 전역 설치 (모든 워크스페이스 공유)
100
- npx @bhoon716/skill-forge add ultra-grill-me --lang ko --agent global
100
+ skill-forge install ultra-grill-me --lang ko --agent global
101
101
  ```
102
102
 
103
103
  ---
@@ -79,7 +79,7 @@ Please select a number, ask for more options, or answer directly.
79
79
 
80
80
  ---
81
81
 
82
- ## 4. `npx @bhoon716/skill-forge` CLI Installer
82
+ ## 4. `skill-forge` CLI Installer
83
83
 
84
84
  Use the workspace CLI to deploy the skill to your target agent directory.
85
85
 
@@ -88,16 +88,16 @@ Use the workspace CLI to deploy the skill to your target agent directory.
88
88
 
89
89
  ```bash
90
90
  # 1. Install Korean translation locally to Codex/Gemini (Default)
91
- npx @bhoon716/skill-forge add ultra-grill-me --lang ko
91
+ skill-forge install ultra-grill-me --lang ko
92
92
 
93
93
  # 2. Install English version locally to Claude Code
94
- npx @bhoon716/skill-forge add ultra-grill-me --lang en --agent claude
94
+ skill-forge install ultra-grill-me --lang en --agent claude
95
95
 
96
96
  # 3. Install English version locally to Cursor
97
- npx @bhoon716/skill-forge add ultra-grill-me --lang en --agent cursor
97
+ skill-forge install ultra-grill-me --lang en --agent cursor
98
98
 
99
99
  # 4. Install globally for all workspaces (English default)
100
- npx @bhoon716/skill-forge add ultra-grill-me --lang en --agent global
100
+ skill-forge install ultra-grill-me --lang en --agent global
101
101
  ```
102
102
 
103
103
  ---
@@ -79,7 +79,7 @@ graph TD
79
79
 
80
80
  ---
81
81
 
82
- ## 4. `npx @bhoon716/skill-forge` CLI 部署工具
82
+ ## 4. `skill-forge` CLI 部署工具
83
83
 
84
84
  使用内置 CLI 将本地化翻译自动部署到对应的本地或全局 Agent 配置路径。
85
85
 
@@ -88,16 +88,16 @@ graph TD
88
88
 
89
89
  ```bash
90
90
  # 1. 部署中文版到本地默认项目路径 (Codex/Gemini)
91
- $ npx @bhoon716/skill-forge add ultra-grill-me --lang zh
91
+ $ skill-forge install ultra-grill-me --lang zh
92
92
 
93
93
  # 2. 部署中文版到 Claude Code 路径
94
- $ npx @bhoon716/skill-forge add ultra-grill-me --lang zh --agent claude
94
+ $ skill-forge install ultra-grill-me --lang zh --agent claude
95
95
 
96
96
  # 3. 部署英文版到 Cursor 路径
97
- $ npx @bhoon716/skill-forge add ultra-grill-me --lang en --agent cursor
97
+ $ skill-forge install ultra-grill-me --lang en --agent cursor
98
98
 
99
99
  # 4. 全局部署中文版至用户根路径
100
- $ npx @bhoon716/skill-forge add ultra-grill-me --lang zh --agent global
100
+ $ skill-forge install ultra-grill-me --lang zh --agent global
101
101
  ```
102
102
 
103
103
  ---