@rch4com/agent-setup 1.10.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bootstrap/manifest.mjs +14 -2
- package/lib/catalog.mjs +77 -14
- package/lib/i18n/catalog/en.mjs +15 -7
- package/lib/i18n/catalog/ko.mjs +15 -7
- package/lib/items/plugin.bkit.mjs +5 -3
- package/lib/items/plugin.ecc.mjs +17 -2
- package/lib/items/plugin.mattpocock-skills.mjs +12 -1
- package/lib/items/plugin.ponytail.mjs +5 -3
- package/lib/items/plugin.superpowers.mjs +9 -5
- package/lib/items/plugin.understand-anything.mjs +13 -2
- package/lib/items/skill.diagram-design.mjs +14 -0
- package/lib/items/skill.gsd.mjs +8 -6
- package/lib/items/skill.mattpocock-skills.mjs +16 -0
- package/lib/items/skill.superpowers.mjs +19 -0
- package/package.json +1 -1
|
@@ -52,8 +52,20 @@ export const MANIFEST = {
|
|
|
52
52
|
{ path: '.vscode/settings.json', key: 'chat.useAgentsMdFile', value: true },
|
|
53
53
|
],
|
|
54
54
|
|
|
55
|
-
// .agents/skills 를 가리키는 도구별
|
|
56
|
-
//
|
|
55
|
+
// .agents/skills 를 가리키는 도구별 어댑터.
|
|
56
|
+
//
|
|
57
|
+
// 여기에 없는 도구는 그 경로를 네이티브로 읽는다 — 2026-08-15에 도구별로
|
|
58
|
+
// 실측했다. Codex는 `codex debug prompt-input`이 프로젝트 SKILL.md 경로를
|
|
59
|
+
// 그대로 찍고, OpenCode·Kilo Code는 `debug skill`이, Copilot CLI는
|
|
60
|
+
// `skill list`가 같은 것을 보여 준다. Kimi Code는 배포본에
|
|
61
|
+
// `PROJECT_GENERIC_DIRS = [".agents/skills"]`가 있고, VS Code Copilot 확장은
|
|
62
|
+
// 프로젝트 경로 표에 `.agents/skills/<name>/`를 싣는다. Antigravity 바이너리도
|
|
63
|
+
// `{workspace}/.agents/skills/{skill_name}/SKILL.md`를 갖고 있다.
|
|
64
|
+
//
|
|
65
|
+
// 네이티브로 읽는 도구에 어댑터를 더하면 같은 스킬이 두 경로에서 잡혀 중복
|
|
66
|
+
// 등록된다 — 목록을 늘리기 전에 반드시 그 도구가 못 읽는 것을 먼저 확인한다.
|
|
67
|
+
// Kiro가 그 증거다: 확장이 `~/.kiro/skills/`와 `<workspace>/.kiro/skills/`만
|
|
68
|
+
// 훑고 `.agents/skills`는 한 번도 참조하지 않아, 이 어댑터가 있어야만 닿는다.
|
|
57
69
|
adapters: [
|
|
58
70
|
{ tool: 'Claude Code', path: '.claude/skills' },
|
|
59
71
|
{ tool: 'Kiro', path: '.kiro/skills' },
|
package/lib/catalog.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync, rmSync, statSync } from 'node:fs'
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs'
|
|
2
2
|
import { join, dirname } from 'node:path'
|
|
3
3
|
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
4
4
|
import { execFile } from 'node:child_process'
|
|
@@ -140,12 +140,12 @@ export function defineMcp({ id, label, server, supports = [...CLI_IDS], unsuppor
|
|
|
140
140
|
// 배선은 Claude 한 곳이라도 미배선 "사유"는 CLI마다 다를 수 있다 — 상류가
|
|
141
141
|
// 자체 경로로 지원하는 CLI에 일괄 "Claude 전용" 사유를 붙이면 거짓 정보가 된다.
|
|
142
142
|
// 항목이 사유를 넘기면 그 CLI만 덮고, 나머지는 기본 사유로 채운다.
|
|
143
|
-
export function definePlugin({ id, label, installId, detectIds, marketplace, note, group = null, unsupported: reasons = {} }) {
|
|
143
|
+
export function definePlugin({ id, label, installId, detectIds, marketplace, note, group = null, exclusive = null, unsupported: reasons = {} }) {
|
|
144
144
|
const unsupported = Object.fromEntries(
|
|
145
145
|
CLI_IDS.filter((c) => c !== 'claude').map((c) => [c, reasons[c] ?? msg('item.unsupported.claudePlugin')]),
|
|
146
146
|
)
|
|
147
147
|
return {
|
|
148
|
-
id, category: 'plugin', label, scope: 'project', supports: ['claude'], unsupported, note, group,
|
|
148
|
+
id, category: 'plugin', label, scope: 'project', supports: ['claude'], unsupported, note, group, exclusive,
|
|
149
149
|
async detect({ root }) {
|
|
150
150
|
return { status: isPluginEnabled(root, detectIds) ? 'installed' : 'absent' }
|
|
151
151
|
},
|
|
@@ -207,28 +207,91 @@ function findSkillDir(root, skill) {
|
|
|
207
207
|
return null
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
+
// 레지스트리가 저장소 루트에 남기는 잠금 파일. 스킬 이름마다 어느 출처에서
|
|
211
|
+
// 왔는지를 적어 두므로, 한 상류가 여러 스킬을 깔았을 때 "우리가 넣은 것"만
|
|
212
|
+
// 골라 지울 수 있는 유일한 근거다.
|
|
213
|
+
const SKILLS_LOCK = 'skills-lock.json'
|
|
214
|
+
|
|
215
|
+
// 잠금 파일의 source는 `owner/repo`로 정규화돼 있고 항목은 URL을 넘긴다.
|
|
216
|
+
function sourceKey(source) {
|
|
217
|
+
return String(source).replace(/^https?:\/\/github\.com\//, '').replace(/\.git$/, '').replace(/\/+$/, '')
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function readLock(root) {
|
|
221
|
+
const file = repoPath(root, SKILLS_LOCK)
|
|
222
|
+
if (!existsSync(file)) return null
|
|
223
|
+
try {
|
|
224
|
+
return JSON.parse(readFileSync(file, 'utf8'))
|
|
225
|
+
} catch {
|
|
226
|
+
// 잠금 파일이 깨졌다고 제거를 막지는 않는다 — 디렉터리 스캔 폴백이 있다.
|
|
227
|
+
return null
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function lockedSkills(root, source) {
|
|
232
|
+
const want = sourceKey(source)
|
|
233
|
+
return Object.entries(readLock(root)?.skills ?? {})
|
|
234
|
+
.filter(([, v]) => sourceKey(v?.source ?? '') === want)
|
|
235
|
+
.map(([name]) => name)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// 레지스트리의 remove는 디렉터리도, 잠금 파일의 항목도 남긴다(실측). 디렉터리는
|
|
239
|
+
// 아래에서 우리가 지우는데 잠금 항목을 그대로 두면 파일이 "설치돼 있다"고
|
|
240
|
+
// 거짓말한다 — 커밋해서 팀과 나누는 파일이라, 동료가 experimental_install로
|
|
241
|
+
// 복원하면 지운 스킬이 되살아난다.
|
|
242
|
+
function pruneLock(root, names) {
|
|
243
|
+
const parsed = readLock(root)
|
|
244
|
+
const skills = parsed?.skills
|
|
245
|
+
if (!skills) return
|
|
246
|
+
const gone = names.filter((n) => Object.hasOwn(skills, n))
|
|
247
|
+
if (gone.length === 0) return
|
|
248
|
+
for (const n of gone) delete skills[n]
|
|
249
|
+
const file = repoPathStrict(root, SKILLS_LOCK)
|
|
250
|
+
// 남은 스킬이 없으면 파일째 지운다. 이 파일은 레지스트리가 만든 산출물이라
|
|
251
|
+
// 빈 껍데기를 남기면 우리가 만든 흔적이 저장소에 계속 남는다.
|
|
252
|
+
if (Object.keys(skills).length === 0) rmSync(file, { force: true })
|
|
253
|
+
else writeFileSync(file, `${JSON.stringify(parsed, null, 2)}\n`)
|
|
254
|
+
}
|
|
255
|
+
|
|
210
256
|
// vercel-labs/skills 레지스트리로 설치하는 스킬. `--agent universal`의 프로젝트
|
|
211
257
|
// 경로가 .agents/skills라, 한 번 설치하면 10개 CLI가 함께 본다 — Claude·Kiro·
|
|
212
|
-
// Grok은 부트스트랩이 만든 Junction으로, 나머지는 그 경로를 네이티브로
|
|
258
|
+
// Grok은 부트스트랩이 만든 Junction으로, 나머지는 그 경로를 네이티브로 읽는다
|
|
259
|
+
// (도구별 실측 근거는 bootstrap/manifest.mjs의 adapters 주석에 있다).
|
|
213
260
|
// `--copy`로 실물을 남긴다: 커밋해서 팀과 나누는 자리라 링크는 클론 뒤 깨진다.
|
|
214
|
-
|
|
261
|
+
//
|
|
262
|
+
// skill에 `*`를 주면 그 상류의 스킬을 전부 넣는다. 그때 detect가 볼 대표
|
|
263
|
+
// 스킬을 anchor로 지정해야 한다 — 디렉터리가 여럿이라 "무엇이 있으면 설치된
|
|
264
|
+
// 것인가"를 이름 하나로 정해 두지 않으면 판정이 흔들린다.
|
|
265
|
+
//
|
|
266
|
+
// exclusive는 같은 상류를 플러그인으로도 넣을 수 있을 때 쓴다. 두 경로가 겹치면
|
|
267
|
+
// 같은 스킬이 두 번 등록되므로 하나만 고르게 막는다.
|
|
268
|
+
export function defineRegistrySkill({ id, label, source, skill, anchor = null, note, group = null, exclusive = null }) {
|
|
269
|
+
const probe = anchor ?? skill
|
|
270
|
+
if (skill === '*' && !anchor) throw new LocalizedError('error.registrySkillAnchor', { id })
|
|
215
271
|
return {
|
|
216
|
-
id, category: 'skill', label, scope: 'project', supports: [...CLI_IDS], unsupported: {}, note, group,
|
|
272
|
+
id, category: 'skill', label, scope: 'project', supports: [...CLI_IDS], unsupported: {}, note, group, exclusive,
|
|
217
273
|
async detect({ root }) {
|
|
218
|
-
return { status: findSkillDir(root,
|
|
274
|
+
return { status: findSkillDir(root, probe) ? 'installed' : 'absent' }
|
|
219
275
|
},
|
|
220
276
|
async install({ root, exec }) {
|
|
221
277
|
const r = await exec('npx', ['-y', 'skills@latest', 'add', source, '--skill', skill, '--agent', 'universal', '--yes', '--copy'], { cwd: root })
|
|
222
278
|
if (!r.ok) throw new LocalizedError('error.registrySkillInstall', { skill, output: r.output })
|
|
223
279
|
},
|
|
224
280
|
async uninstall({ root, dryRun, exec }) {
|
|
225
|
-
//
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
281
|
+
// 지울 이름을 먼저 정한다. 여러 스킬을 깐 항목은 잠금 파일이 알려 주고,
|
|
282
|
+
// 잠금 파일이 없거나 깨졌으면 대표 스킬 하나라도 치운다.
|
|
283
|
+
const names = skill === '*' ? lockedSkills(root, source) : [skill]
|
|
284
|
+
const targets = names.length > 0 ? names : [probe]
|
|
285
|
+
for (const name of targets) {
|
|
286
|
+
// 레지스트리의 remove는 --agent universal에서 "Done!"을 찍고도 디렉터리를
|
|
287
|
+
// 남긴다(실측). 그래서 성공/실패와 무관하게 남은 디렉터리를 우리가 지운다 —
|
|
288
|
+
// 남겨 두면 detect가 계속 installed로 읽어 제거가 안 된 채 성공으로 보인다.
|
|
289
|
+
await exec('npx', ['-y', 'skills@latest', 'remove', name, '--agent', 'universal', '--yes'], { cwd: root })
|
|
290
|
+
if (dryRun) continue
|
|
291
|
+
const dir = findSkillDir(root, name)
|
|
292
|
+
if (dir) rmSync(repoPathStrict(root, `${SHARED_SKILLS}/${dir}`), { recursive: true, force: true })
|
|
293
|
+
}
|
|
294
|
+
if (!dryRun) pruneLock(root, targets)
|
|
232
295
|
},
|
|
233
296
|
}
|
|
234
297
|
}
|
package/lib/i18n/catalog/en.mjs
CHANGED
|
@@ -226,11 +226,15 @@ export default {
|
|
|
226
226
|
// 쪽이 렌더 시점에 t나 toText로 푼다.
|
|
227
227
|
'item.unsupported.claudePlugin': 'Claude Code plugin only',
|
|
228
228
|
'item.unsupported.claudeSkill': 'Claude Code skill install',
|
|
229
|
-
'item.unsupported.ponytailUser': 'upstream installs it per user (codex/copilot plugin, gemini extension)',
|
|
230
|
-
'item.unsupported.ponytailRules': 'no plugin mechanism — copy
|
|
229
|
+
'item.unsupported.ponytailUser': 'upstream installs it per user (codex/copilot/grok plugin, gemini extension)',
|
|
230
|
+
'item.unsupported.ponytailRules': 'no plugin mechanism — copy an upstream rules file by hand (.kiro/steering/ for Kiro, .github/copilot-instructions.md for VS Code Copilot, AGENTS.md otherwise)',
|
|
231
|
+
'item.unsupported.eccCodexHome': 'upstream ships a native Codex plugin, but it installs into the single active CODEX_HOME — there is no project scope',
|
|
232
|
+
'item.unsupported.eccScale': 'upstream also supports OpenCode, Gemini and Kimi project-locally, but its skills/ holds 284 entries that would swamp the shared directory — only the plugin route is wired',
|
|
233
|
+
'item.unsupported.uaUser': 'upstream install.sh clones into ~/.understand-anything and links from the home directory (user scope); the copilot plugin install offers no scope choice either',
|
|
234
|
+
'item.unsupported.mattpocockRegistry': 'upstream also documents npx skills add (the shared .agents/skills), but this item wires the Claude Code plugin only',
|
|
231
235
|
'item.unsupported.upstreamNone': 'no official install path upstream',
|
|
232
236
|
'item.unsupported.superpowersSeparate': 'upstream supports it via a separate per-harness install — this item wires the Claude Code plugin only',
|
|
233
|
-
'item.unsupported.bkitPort': 'upstream ships separate ports (bkit-codex / bkit-gemini) installed apart from this plugin; the Gemini port
|
|
237
|
+
'item.unsupported.bkitPort': 'upstream ships separate ports (bkit-codex / bkit-gemini) installed apart from this plugin; the Gemini port is still a Gemini CLI extension and has had no update since the 2026-06-18 sunset',
|
|
234
238
|
'item.unsupported.impeccableJunction': 'upstream supports it, but npx impeccable install breaks the shared .agents/skills link, so only the plugin route is wired',
|
|
235
239
|
'item.unsupported.gstackHost': 'upstream supports it via ./setup --host — this item installs for Claude Code only',
|
|
236
240
|
'item.unsupported.gsdFlag': 'upstream supports it via a runtime flag — this item installs with --claude only',
|
|
@@ -251,14 +255,17 @@ export default {
|
|
|
251
255
|
'item.mcp.graphify.note': 'needs the graphify-mcp binary on PATH. Install: uv tool install "graphifyy[mcp]". Reads graphify-out/graph.json — build it first with /graphify .',
|
|
252
256
|
'item.mcp.headroom.note': 'needs the headroom binary on PATH. Install: uv tool install --python 3.13 "headroom-ai[proxy,mcp]". The proxy (headroom wrap) is a way of launching, not repo config',
|
|
253
257
|
'item.plugin.superpowers.note': 'official marketplace plugin. Upstream supports 11 harnesses (Codex, Antigravity, …) via per-harness installs',
|
|
254
|
-
'item.plugin.mattpocock-skills.note': '
|
|
258
|
+
'item.plugin.mattpocock-skills.note': '35 engineering and productivity skills (code-review, diagnosing-bugs, domain-modeling, …)',
|
|
255
259
|
'item.plugin.ponytail.note': 'lean-code ruleset. Wires the Claude Code plugin and the OpenCode plugin entry, both repo-scoped',
|
|
256
|
-
'item.plugin.ecc.note': 'skills, instincts, memory and security for agent harnesses. Installed as a plugin — its skills/ holds
|
|
260
|
+
'item.plugin.ecc.note': 'skills, instincts, memory and security for agent harnesses. Installed as a plugin — its skills/ holds 284 entries, too many to copy into the shared skills directory',
|
|
257
261
|
'item.plugin.impeccable.note': 'design language for AI harnesses. Plugin route on purpose: npx impeccable install replaces .claude/skills and breaks the shared .agents/skills link',
|
|
258
262
|
'item.plugin.understand-anything.note': 'turns the codebase into an explorable knowledge graph. The script for other CLIs clones into ~/.understand-anything (user scope), so only the plugin is wired',
|
|
259
263
|
'item.skill.caveman.note': 'cuts output tokens by answering in caveman-speak; code and errors stay byte-exact. Toggle with /caveman',
|
|
260
264
|
'item.skill.taste.note': 'anti-slop frontend skill for landing pages, portfolios and redesigns (skill name: design-taste-frontend)',
|
|
261
265
|
'item.skill.hallmark.note': 'anti-AI-slop design skill with four verbs (build, audit, redesign, study). 21 themes and 57 slop-test gates. Upstream also documents Cursor and Codex paths; the shared skills directory covers all 10 CLIs at once',
|
|
266
|
+
'item.skill.diagram-design.note': 'draws 27 diagram types in HTML/SVG using your brand colors and fonts; also redraws Mermaid and draw.io sources. The default fonts (Instrument Serif, Geist) carry no CJK glyphs — swap them in style-guide.md — and PNG export needs Playwright and Chromium separately. The three upstream slash commands are left out, but the references/ they delegate to come along',
|
|
267
|
+
'item.skill.superpowers.note': 'copies 14 skills into the shared .agents/skills so all 10 CLIs see them. Only one of this and the plugin edition can be chosen — this route has no session-start hook, so nothing is injected at the start of a conversation and skills are invoked on demand',
|
|
268
|
+
'item.skill.mattpocock-skills.note': 'copies 35 skills into the shared .agents/skills so all 10 CLIs see them. Upstream documents this route itself, and with no hooks involved nothing is lost against the plugin edition. Only one of the two can be chosen',
|
|
262
269
|
'item.skill.karpathy.note': 'behavioral guidelines that curb overbuilding and vague success criteria',
|
|
263
270
|
'item.skill.gstack.note': 'repo-local clone + setup (needs bash; Git Bash on Windows). Runtime state (~/.gstack) may be created globally.',
|
|
264
271
|
'item.skill.gsd.note': 'npx @opengsd/gsd-core, installed per project. Upstream supports 18 runtimes (Codex, Antigravity, …); this item wires --claude only',
|
|
@@ -271,13 +278,14 @@ export default {
|
|
|
271
278
|
'log.gitmessage.remove': ' [dry-run] remove {path}',
|
|
272
279
|
'error.gitmessageForeign': '{path} already exists and was not written by this tool. A hand-written template is never overwritten — move or delete it first.',
|
|
273
280
|
'error.gitmessageConfig': 'git config commit.template failed: {output}',
|
|
274
|
-
'error.exclusiveItems': 'These items
|
|
281
|
+
'error.exclusiveItems': 'These items compete for the same slot, so only one can be chosen: {ids}',
|
|
275
282
|
'error.gstackClone': 'gstack clone failed: {output}',
|
|
276
283
|
'error.gstackSetup': 'gstack setup failed: {output}',
|
|
277
284
|
'error.gsdInstall': 'GSD install failed: {output}',
|
|
278
285
|
'error.gsdUninstall': 'GSD uninstall failed: {output}',
|
|
279
286
|
'error.ponytailOpencodePlugin': '{file}: the plugin key is not an array. Leaving it alone — add "@dietrichgebert/ponytail" by hand.',
|
|
280
287
|
'error.registrySkillInstall': 'skill registry install failed ({skill}): {output}',
|
|
288
|
+
'error.registrySkillAnchor': "{id}: when skill is '*', an anchor skill must be named for detect to look at",
|
|
281
289
|
'error.itemFieldMissing': '{file}: {field} missing',
|
|
282
290
|
'error.itemReasonMissing': '{id}: needs a reason for unsupported CLI \'{cli}\' (unsupported.{cli})',
|
|
283
291
|
'error.shellQuote': 'The argument contains a double quote that cannot be passed to the shell: {value}',
|
|
@@ -314,7 +322,7 @@ export default {
|
|
|
314
322
|
'tui.toggledAll': 'Selected every visible item in the {tab} tab.',
|
|
315
323
|
'tui.toggledNone': 'Cleared every visible item in the {tab} tab.',
|
|
316
324
|
// 배타 묶음에서 형제가 함께 꺼졌을 때. 조용히 뒤집히면 오조작으로 읽힌다.
|
|
317
|
-
'tui.exclusiveSwitched': 'Switched to {kept} — they
|
|
325
|
+
'tui.exclusiveSwitched': 'Switched to {kept} — they compete for the same slot, so {dropped} was cleared.',
|
|
318
326
|
'tui.nonInteractive': 'The interactive screen only opens in a terminal. --list and --set work too.',
|
|
319
327
|
'tui.pressAnyKey': 'Press any key to continue…',
|
|
320
328
|
'tui.confirmSuffix': ' [y/N] ',
|
package/lib/i18n/catalog/ko.mjs
CHANGED
|
@@ -219,11 +219,15 @@ export default {
|
|
|
219
219
|
// 항목 카탈로그 — 기존 원문을 그대로 옮긴다. en.mjs 쪽 주석 참고.
|
|
220
220
|
'item.unsupported.claudePlugin': 'Claude Code 전용 플러그인',
|
|
221
221
|
'item.unsupported.claudeSkill': 'Claude Code 스킬 설치본',
|
|
222
|
-
'item.unsupported.ponytailUser': '상류 설치 경로가 사용자 스코프입니다 (codex·copilot 플러그인, gemini 확장)',
|
|
223
|
-
'item.unsupported.ponytailRules': '플러그인 기구가 없습니다 —
|
|
222
|
+
'item.unsupported.ponytailUser': '상류 설치 경로가 사용자 스코프입니다 (codex·copilot·grok 플러그인, gemini 확장)',
|
|
223
|
+
'item.unsupported.ponytailRules': '플러그인 기구가 없습니다 — 상류의 규칙 파일을 손으로 옮겨야 합니다 (kiro는 .kiro/steering/, VS Code Copilot은 .github/copilot-instructions.md, 나머지는 AGENTS.md)',
|
|
224
|
+
'item.unsupported.eccCodexHome': '상류가 Codex 네이티브 플러그인을 지원하지만 활성 CODEX_HOME 하나에만 설치됩니다 — 프로젝트 스코프가 없습니다',
|
|
225
|
+
'item.unsupported.eccScale': '상류는 OpenCode·Gemini·Kimi 등을 프로젝트 로컬로도 지원하지만 skills/에 284개가 들어 있어 공유 디렉터리를 덮습니다 — 플러그인 경로만 배선합니다',
|
|
226
|
+
'item.unsupported.uaUser': '상류 install.sh가 ~/.understand-anything에 클론하고 홈에 링크를 겁니다(사용자 스코프). copilot 플러그인 설치도 스코프 선택이 없습니다',
|
|
227
|
+
'item.unsupported.mattpocockRegistry': '상류가 npx skills add(공유 .agents/skills)도 안내하지만 이 항목은 Claude Code 플러그인만 배선합니다',
|
|
224
228
|
'item.unsupported.upstreamNone': '상류에 공식 설치 경로가 없습니다',
|
|
225
229
|
'item.unsupported.superpowersSeparate': '상류가 하니스별 별도 설치로 지원합니다 — 이 항목은 Claude Code 플러그인만 배선합니다',
|
|
226
|
-
'item.unsupported.bkitPort': '상류가 별도 배포판(bkit-codex·bkit-gemini)으로 지원합니다 — 이 플러그인과 별개
|
|
230
|
+
'item.unsupported.bkitPort': '상류가 별도 배포판(bkit-codex·bkit-gemini)으로 지원합니다 — 이 플러그인과 별개 설치입니다. Gemini판은 Gemini CLI 확장 그대로이고 2026-06-18 종료 이후 갱신이 없습니다',
|
|
227
231
|
'item.unsupported.impeccableJunction': '상류는 지원하지만 npx impeccable install이 공유 .agents/skills 연결을 끊어 플러그인 경로만 배선합니다',
|
|
228
232
|
'item.unsupported.gstackHost': '상류는 ./setup --host로 지원합니다 — 이 항목은 Claude Code에만 설치합니다',
|
|
229
233
|
'item.unsupported.gsdFlag': '상류는 런타임 플래그로 지원합니다 — 이 항목은 --claude로만 설치합니다',
|
|
@@ -244,14 +248,17 @@ export default {
|
|
|
244
248
|
'item.mcp.graphify.note': 'PATH에 graphify-mcp 바이너리 필요. 설치: uv tool install "graphifyy[mcp]". graphify-out/graph.json을 읽으므로 /graphify .로 그래프를 먼저 만드세요',
|
|
245
249
|
'item.mcp.headroom.note': 'PATH에 headroom 바이너리 필요. 설치: uv tool install --python 3.13 "headroom-ai[proxy,mcp]". 프록시(headroom wrap)는 실행 방식이라 저장소 설정 대상이 아닙니다',
|
|
246
250
|
'item.plugin.superpowers.note': '공식 마켓플레이스 플러그인. 상류는 Codex·Antigravity 등 11개 하니스를 하니스별 설치로 지원합니다',
|
|
247
|
-
'item.plugin.mattpocock-skills.note': '엔지니어링·생산성 스킬
|
|
251
|
+
'item.plugin.mattpocock-skills.note': '엔지니어링·생산성 스킬 35종 (code-review, diagnosing-bugs, domain-modeling 등)',
|
|
248
252
|
'item.plugin.ponytail.note': '군더더기 없는 코드 규칙 묶음. Claude Code 플러그인과 OpenCode plugin 항목을 저장소 범위로 배선합니다',
|
|
249
|
-
'item.plugin.ecc.note': '에이전트 하네스용 스킬·본능·메모리·보안 묶음. skills/에
|
|
253
|
+
'item.plugin.ecc.note': '에이전트 하네스용 스킬·본능·메모리·보안 묶음. skills/에 284개가 들어 있어 공유 스킬 디렉터리에 복사하지 않고 플러그인으로 설치합니다',
|
|
250
254
|
'item.plugin.impeccable.note': 'AI 하네스용 디자인 언어. 플러그인 경로를 쓰는 이유는 npx impeccable install이 .claude/skills를 갈아치워 공유 .agents/skills 연결을 끊기 때문입니다',
|
|
251
255
|
'item.plugin.understand-anything.note': '코드베이스를 탐색 가능한 지식 그래프로 만듭니다. 다른 CLI용 스크립트는 ~/.understand-anything에 클론하는 사용자 스코프라 플러그인만 배선합니다',
|
|
252
256
|
'item.skill.caveman.note': '원시인 말투로 답해 출력 토큰을 줄입니다. 코드와 오류는 그대로 둡니다. /caveman으로 켜고 끕니다',
|
|
253
257
|
'item.skill.taste.note': '랜딩 페이지·포트폴리오·리디자인용 안티슬롭 프런트엔드 스킬 (스킬 이름: design-taste-frontend)',
|
|
254
258
|
'item.skill.hallmark.note': '네 가지 동사(신규 제작·audit·redesign·study)를 갖춘 안티 AI슬롭 디자인 스킬. 테마 21종과 슬롭 테스트 57종. 상류는 Cursor·Codex 경로도 안내하지만 공유 스킬 디렉터리 하나로 10개 CLI가 함께 봅니다',
|
|
259
|
+
'item.skill.diagram-design.note': '브랜드 색·폰트로 다이어그램 27종을 그리는 HTML/SVG 스킬. Mermaid·draw.io 원본도 다시 그립니다. 기본 폰트(Instrument Serif·Geist)에 한글 글리프가 없어 style-guide.md에서 바꿔야 하고, PNG 내보내기는 Playwright·Chromium이 따로 필요합니다. 상류 플러그인의 명령 3개는 빠지지만 그 본문인 references/는 그대로 옵니다',
|
|
260
|
+
'item.skill.superpowers.note': '공유 .agents/skills에 스킬 14종을 복사해 10개 CLI가 함께 봅니다. 플러그인 판과 하나만 고를 수 있습니다 — 이쪽은 session-start 훅이 없어 대화 시작 시 자동 주입이 되지 않고, 스킬을 불러서 씁니다',
|
|
261
|
+
'item.skill.mattpocock-skills.note': '공유 .agents/skills에 스킬 35종을 복사해 10개 CLI가 함께 봅니다. 상류가 직접 안내하는 경로이며 훅이 없어 플러그인 판에 견줘 잃는 것이 없습니다. 둘 중 하나만 고를 수 있습니다',
|
|
255
262
|
'item.skill.karpathy.note': '과설계와 모호한 완료 기준을 줄이는 행동 지침',
|
|
256
263
|
'item.skill.gstack.note': '저장소 로컬 clone + setup (bash 필요, Windows는 Git Bash). 런타임 상태(~/.gstack)는 전역에 생길 수 있음.',
|
|
257
264
|
'item.skill.gsd.note': 'npx @opengsd/gsd-core 프로젝트 로컬 설치. 상류는 Codex·Antigravity 등 18개 런타임을 지원합니다(이 항목은 --claude)',
|
|
@@ -263,13 +270,14 @@ export default {
|
|
|
263
270
|
'log.gitmessage.remove': ' [dry-run] {path} 제거',
|
|
264
271
|
'error.gitmessageForeign': '{path}가 이미 있고 이 도구가 쓴 내용이 아닙니다. 손으로 쓴 템플릿은 덮어쓰지 않습니다 — 먼저 옮기거나 지우세요.',
|
|
265
272
|
'error.gitmessageConfig': 'git config commit.template 실패: {output}',
|
|
266
|
-
'error.exclusiveItems': '
|
|
273
|
+
'error.exclusiveItems': '한 자리를 두고 다투는 항목이라 하나만 고를 수 있습니다: {ids}',
|
|
267
274
|
'error.gstackClone': 'gstack clone 실패: {output}',
|
|
268
275
|
'error.gstackSetup': 'gstack setup 실패: {output}',
|
|
269
276
|
'error.gsdInstall': 'GSD 설치 실패: {output}',
|
|
270
277
|
'error.gsdUninstall': 'GSD 제거 실패: {output}',
|
|
271
278
|
'error.ponytailOpencodePlugin': '{file}: plugin 키가 배열이 아닙니다. 덮어쓰지 않고 그대로 둡니다 — "@dietrichgebert/ponytail"을 직접 추가하세요.',
|
|
272
279
|
'error.registrySkillInstall': '스킬 레지스트리 설치 실패 ({skill}): {output}',
|
|
280
|
+
'error.registrySkillAnchor': "{id}: skill이 '*'이면 detect가 볼 대표 스킬을 anchor로 지정해야 합니다",
|
|
273
281
|
'error.itemFieldMissing': '{file}: {field} 누락',
|
|
274
282
|
'error.itemReasonMissing': '{id}: 미지원 CLI \'{cli}\'의 사유(unsupported.{cli})가 필요합니다',
|
|
275
283
|
'error.shellQuote': '셸에 넘길 수 없는 큰따옴표가 인자에 있습니다: {value}',
|
|
@@ -304,7 +312,7 @@ export default {
|
|
|
304
312
|
'tui.toggledAll': '{tab} 탭의 보이는 항목을 모두 선택했습니다.',
|
|
305
313
|
'tui.toggledNone': '{tab} 탭의 보이는 항목을 모두 해제했습니다.',
|
|
306
314
|
// 배타 묶음에서 형제가 함께 꺼졌을 때. en.mjs 쪽 주석 참고.
|
|
307
|
-
'tui.exclusiveSwitched': '{kept}(으)로 바꿨습니다 —
|
|
315
|
+
'tui.exclusiveSwitched': '{kept}(으)로 바꿨습니다 — 한 자리를 두고 다투므로 {dropped}은(는) 해제했습니다.',
|
|
308
316
|
'tui.nonInteractive': '대화형 화면은 터미널에서만 열립니다. --list · --set 으로도 다룰 수 있습니다.',
|
|
309
317
|
'tui.pressAnyKey': '계속하려면 아무 키나 누르세요…',
|
|
310
318
|
'tui.confirmSuffix': ' [y/N] ',
|
|
@@ -4,9 +4,11 @@ import { msg } from '../i18n/index.mjs'
|
|
|
4
4
|
|
|
5
5
|
// 상류의 Codex·Gemini 지원은 이 플러그인이 아니라 별도 리포의 독립 포팅본이다
|
|
6
6
|
// (bkit-codex: install 스크립트+MCP, 기능 241개 중 80개, hooks 없음 /
|
|
7
|
-
// bkit-gemini: Gemini CLI extension). 플러그인 항목을 재사용할 수 없어 사유만
|
|
8
|
-
//
|
|
9
|
-
//
|
|
7
|
+
// bkit-gemini: Gemini CLI extension). 플러그인 항목을 재사용할 수 없어 사유만 남긴다.
|
|
8
|
+
// 예전에 "Gemini판은 Antigravity 승계 추정"이라 적었는데 근거가 없었다 —
|
|
9
|
+
// bkit-gemini는 v2.0.7까지 Gemini CLI 확장 그대로이고 README에 Antigravity가
|
|
10
|
+
// 한 번도 나오지 않는다. 다만 최종 푸시가 2026-05-20이라 Gemini CLI 종료
|
|
11
|
+
// (2026-06-18) 이후로는 갱신이 없다. 추정 대신 그 사실만 적는다(2026-08-15 실측).
|
|
10
12
|
const PORTS = ['codex', 'gemini']
|
|
11
13
|
|
|
12
14
|
export default definePlugin({
|
package/lib/items/plugin.ecc.mjs
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import { definePlugin } from '../catalog.mjs'
|
|
2
|
+
import { CLI_IDS } from '../clis.mjs'
|
|
3
|
+
import { msg } from '../i18n/index.mjs'
|
|
2
4
|
// 레지스트리 경로(`npx skills add`)도 열려 있지만 쓰지 않는다 — ECC의 skills/에는
|
|
3
|
-
//
|
|
4
|
-
// 플러그인은 프로필을 상류가 관리하므로
|
|
5
|
+
// 284개가 들어 있어 `--skill` 없이 넣으면 공유 스킬 디렉터리를 통째로 덮는다
|
|
6
|
+
// (2026-08-15 저장소 트리로 실측). 플러그인은 프로필을 상류가 관리하므로
|
|
7
|
+
// 저장소에 남는 파일이 없다.
|
|
8
|
+
//
|
|
9
|
+
// 미배선 사유는 CLI마다 갈린다. Codex만 상류가 네이티브 플러그인을 주는데,
|
|
10
|
+
// README가 못을 박는다 — "Codex stores one enabled plugin state in the active
|
|
11
|
+
// CODEX_HOME; it does not offer Claude's user, project, and local scopes."
|
|
12
|
+
// 나머지는 ./install.sh --target으로 열려 있고 Gemini(.gemini/)·Kimi(.kimi-code/)는
|
|
13
|
+
// 프로젝트 로컬이기까지 하다. 그쪽을 막는 것은 스코프가 아니라 284개라는 규모다.
|
|
5
14
|
export default definePlugin({
|
|
6
15
|
id: 'plugin.ecc', label: 'ECC', group: '__flow',
|
|
7
16
|
installId: 'ecc@ecc',
|
|
8
17
|
detectIds: ['ecc@ecc'],
|
|
9
18
|
marketplace: { name: 'ecc', repo: 'affaan-m/ECC' },
|
|
10
19
|
note: 'item.plugin.ecc.note',
|
|
20
|
+
unsupported: Object.fromEntries(
|
|
21
|
+
CLI_IDS.filter((c) => c !== 'claude').map((c) => [
|
|
22
|
+
c,
|
|
23
|
+
c === 'codex' ? msg('item.unsupported.eccCodexHome') : msg('item.unsupported.eccScale'),
|
|
24
|
+
]),
|
|
25
|
+
),
|
|
11
26
|
})
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { definePlugin } from '../catalog.mjs'
|
|
2
|
+
import { CLI_IDS } from '../clis.mjs'
|
|
3
|
+
import { msg } from '../i18n/index.mjs'
|
|
4
|
+
// 상류가 "Codex, and other agents" 절에서 `npx skills add mattpocock/skills`를
|
|
5
|
+
// 안내한다 — 이 저장소의 레지스트리 스킬 항목이 쓰는 바로 그 경로다(레지스트리로
|
|
6
|
+
// 35개가 보이는 것을 실측, 2026-08-15). 그러니 미배선 사유는 "상류에 없다"가
|
|
7
|
+
// 아니라 "우리가 플러그인 쪽을 골랐다"이고, 사유가 그렇게 말해야 레지스트리
|
|
8
|
+
// 항목으로 옮길 수 있다는 것도 화면에서 읽힌다.
|
|
2
9
|
export default definePlugin({
|
|
3
|
-
id: 'plugin.mattpocock-skills', label: 'Matt Pocock
|
|
10
|
+
id: 'plugin.mattpocock-skills', label: 'Matt Pocock (plugin)', group: '__flow',
|
|
11
|
+
exclusive: 'mattpocock',
|
|
4
12
|
installId: 'mattpocock-skills@mattpocock',
|
|
5
13
|
detectIds: ['mattpocock-skills@mattpocock'],
|
|
6
14
|
marketplace: { name: 'mattpocock', repo: 'mattpocock/skills' },
|
|
7
15
|
note: 'item.plugin.mattpocock-skills.note',
|
|
16
|
+
unsupported: Object.fromEntries(
|
|
17
|
+
CLI_IDS.filter((c) => c !== 'claude').map((c) => [c, msg('item.unsupported.mattpocockRegistry')]),
|
|
18
|
+
),
|
|
8
19
|
})
|
|
@@ -40,9 +40,11 @@ export default {
|
|
|
40
40
|
unsupported: Object.fromEntries(
|
|
41
41
|
CLI_IDS.filter((c) => !SUPPORTS.includes(c)).map((c) => [
|
|
42
42
|
c,
|
|
43
|
-
// codex·copilot·gemini는 상류에 설치 경로가 있지만 전부 사용자
|
|
44
|
-
//
|
|
45
|
-
|
|
43
|
+
// codex·copilot·grok·gemini는 상류에 설치 경로가 있지만 전부 사용자
|
|
44
|
+
// 스코프다. grok은 `grok plugin install DietrichGebert/ponytail --trust`로
|
|
45
|
+
// 플러그인 기구가 엄연히 있다 — "기구가 없다" 쪽에 두면 거짓이다
|
|
46
|
+
// (2026-08-15 재측정). 나머지는 상류의 규칙 파일을 손으로 옮겨야 한다.
|
|
47
|
+
['codex', 'copilot', 'gemini', 'grok'].includes(c)
|
|
46
48
|
? msg('item.unsupported.ponytailUser')
|
|
47
49
|
: msg('item.unsupported.ponytailRules'),
|
|
48
50
|
]),
|
|
@@ -2,15 +2,19 @@ import { definePlugin } from '../catalog.mjs'
|
|
|
2
2
|
import { CLI_IDS } from '../clis.mjs'
|
|
3
3
|
import { msg } from '../i18n/index.mjs'
|
|
4
4
|
|
|
5
|
-
// 상류(obra/superpowers v6.
|
|
5
|
+
// 상류(obra/superpowers v6.3.0)는 Codex·Antigravity·Copilot CLI 등 14개
|
|
6
6
|
// 하니스를 지원하지만 설치 명령이 하니스마다 전부 달라 공유 경로가 없다
|
|
7
7
|
// (README: "install Superpowers separately for each one"). 이 항목이 배선하는
|
|
8
|
-
// 것은 Claude Code 플러그인 판뿐이다. Kilo·Kiro·
|
|
9
|
-
//
|
|
10
|
-
|
|
8
|
+
// 것은 Claude Code 플러그인 판뿐이다. Kilo·Kiro·VS Code는 상류에 공식 설치
|
|
9
|
+
// 경로가 없다(2026-08-15 재측정).
|
|
10
|
+
// Grok은 6.2.0에는 없다가 6.3.0에서 들어왔다 — `### Grok Build CLI`의
|
|
11
|
+
// `grok plugin install superpowers@xai-official --trust`다. Devin·Hermes도 같이
|
|
12
|
+
// 늘었지만 둘 다 이 저장소가 다루는 CLI가 아니다.
|
|
13
|
+
const SEPARATE = ['codex', 'gemini', 'opencode', 'kimi', 'copilot', 'grok']
|
|
11
14
|
|
|
12
15
|
export default definePlugin({
|
|
13
|
-
id: 'plugin.superpowers', label: 'superpowers', group: '__flow',
|
|
16
|
+
id: 'plugin.superpowers', label: 'superpowers (plugin)', group: '__flow',
|
|
17
|
+
exclusive: 'superpowers',
|
|
14
18
|
installId: 'superpowers@claude-plugins-official',
|
|
15
19
|
detectIds: ['superpowers@claude-plugins-official', 'superpowers@superpowers-marketplace'],
|
|
16
20
|
note: 'item.plugin.superpowers.note',
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { definePlugin } from '../catalog.mjs'
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { CLI_IDS } from '../clis.mjs'
|
|
3
|
+
import { msg } from '../i18n/index.mjs'
|
|
4
|
+
// 상류는 Claude 전용이 아니다 — README의 "Multi-Platform Installation"이
|
|
5
|
+
// codex·opencode·gemini·vscode·kimi·kiro를 install.sh -s <platform>으로 안내한다.
|
|
6
|
+
// 그 경로가 ~/.understand-anything/repo에 클론하고 홈에 심볼릭 링크를 거는
|
|
7
|
+
// 사용자 스코프라 이 저장소의 항목이 될 수 없다.
|
|
8
|
+
// Copilot CLI만 갈래가 다르다 —
|
|
9
|
+
// `copilot plugin install Egonex-AI/Understand-Anything:understand-anything-plugin`
|
|
10
|
+
// 이라는 플러그인 직접 설치인데, `copilot plugin install`에 스코프 플래그가
|
|
11
|
+
// 없어 결국 사용자 스코프다(2026-08-15 재측정).
|
|
4
12
|
export default definePlugin({
|
|
5
13
|
id: 'plugin.understand-anything', label: 'Understand Anything', group: '__context',
|
|
6
14
|
installId: 'understand-anything@understand-anything',
|
|
7
15
|
detectIds: ['understand-anything@understand-anything'],
|
|
8
16
|
marketplace: { name: 'understand-anything', repo: 'Egonex-AI/Understand-Anything' },
|
|
9
17
|
note: 'item.plugin.understand-anything.note',
|
|
18
|
+
unsupported: Object.fromEntries(
|
|
19
|
+
CLI_IDS.filter((c) => c !== 'claude').map((c) => [c, msg('item.unsupported.uaUser')]),
|
|
20
|
+
),
|
|
10
21
|
})
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineRegistrySkill } from '../catalog.mjs'
|
|
2
|
+
// 상류는 .claude-plugin·.codex-plugin 매니페스트를 함께 두지만 알맹이는
|
|
3
|
+
// skills/diagram-design/SKILL.md 배치라, 기존 레지스트리 경로가 그대로 읽는다 —
|
|
4
|
+
// 배선은 한 줄도 새로 만들지 않았다. SKILL.md의 name이 디렉터리 이름과 같아
|
|
5
|
+
// taste가 밟던 frontmatter 폴백도 필요 없다.
|
|
6
|
+
// 플러그인 경로만 주는 것은 commands/ 3개(/export-diagram·/import-drawio·
|
|
7
|
+
// /import-mermaid)인데, 본문을 skills/.../references/에 위임하는 얇은 래퍼라
|
|
8
|
+
// 규칙의 알맹이는 스킬 쪽에 전부 온다.
|
|
9
|
+
export default defineRegistrySkill({
|
|
10
|
+
id: 'skill.diagram-design', label: 'Diagram Design', group: '__style',
|
|
11
|
+
source: 'https://github.com/cathrynlavery/diagram-design',
|
|
12
|
+
skill: 'diagram-design',
|
|
13
|
+
note: 'item.skill.diagram-design.note',
|
|
14
|
+
})
|
package/lib/items/skill.gsd.mjs
CHANGED
|
@@ -8,12 +8,14 @@ function hasGsdFiles(dir) {
|
|
|
8
8
|
return existsSync(dir) && readdirSync(dir).some((f) => f.startsWith('gsd-'))
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
// 상류(v1.
|
|
12
|
-
// 이 항목은 --claude만 배선한다. Gemini CLI는 상류가 명시 제거했다
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
|
|
11
|
+
// 상류(v1.10.0)는 런타임 플래그 19개(--codex·--antigravity 등)를 지원하지만
|
|
12
|
+
// 이 항목은 --claude만 배선한다. Gemini CLI는 상류가 명시 제거했다 —
|
|
13
|
+
// `--gemini --local`이 2026-06-18 종료 안내를 찍고 파일을 하나도 만들지 않는
|
|
14
|
+
// 것을 실측했다(2026-08-15).
|
|
15
|
+
// --kilo가 이 저장소의 Kilo Code와 같은 제품인지는 오래 미확인이었는데,
|
|
16
|
+
// `--kilo --local`이 만든 .kilo/skills/ 71개를 설치된 Kilo Code
|
|
17
|
+
// (@kilocode/cli 7.3.45)가 전부 로드하는 것을 실측해 해소했다(2026-08-15).
|
|
18
|
+
const FLAGS = ['codex', 'opencode', 'copilot', 'kimi', 'kilo']
|
|
17
19
|
|
|
18
20
|
export default defineSkill({
|
|
19
21
|
id: 'skill.gsd', label: 'GSD (Get Shit Done)', group: '__flow', scope: 'project',
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineRegistrySkill } from '../catalog.mjs'
|
|
2
|
+
// 상류가 "Codex, and other agents" 절에서 이 경로를 직접 안내한다 —
|
|
3
|
+
// `npx skills add mattpocock/skills`다. 그러니 이쪽이 곁길이 아니라 상류가
|
|
4
|
+
// 의도한 두 경로 중 하나다. 훅이 없는 스킬 묶음이라 플러그인 판에 견줘 잃는
|
|
5
|
+
// 것도 없다(35개 실측, skills/<분류>/<이름>/SKILL.md 배치).
|
|
6
|
+
//
|
|
7
|
+
// anchor는 setup-matt-pocock-skills다. 상류 README가 "이것만은 반드시 고르라"고
|
|
8
|
+
// 적어 둔 스킬이라 설치 판정의 기준으로도 맞는다.
|
|
9
|
+
export default defineRegistrySkill({
|
|
10
|
+
id: 'skill.mattpocock-skills', label: 'Matt Pocock (skills)', group: '__flow',
|
|
11
|
+
source: 'https://github.com/mattpocock/skills',
|
|
12
|
+
skill: '*',
|
|
13
|
+
anchor: 'setup-matt-pocock-skills',
|
|
14
|
+
exclusive: 'mattpocock',
|
|
15
|
+
note: 'item.skill.mattpocock-skills.note',
|
|
16
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineRegistrySkill } from '../catalog.mjs'
|
|
2
|
+
// 같은 상류를 플러그인(plugin.superpowers)으로도 넣을 수 있다. 그쪽은 Claude
|
|
3
|
+
// 하나만 닿는 대신 session-start 훅으로 알아서 켜지고, 이쪽은 공유
|
|
4
|
+
// .agents/skills라 10개 CLI가 함께 보는 대신 훅이 빠진다 — 스킬은 부르면 되지만
|
|
5
|
+
// "대화 시작 시 using-superpowers 주입"은 오지 않는다.
|
|
6
|
+
// 둘을 함께 켜면 같은 스킬이 플러그인 캐시와 공유 디렉터리 양쪽에서 잡혀 중복
|
|
7
|
+
// 등록되므로 배타로 묶는다.
|
|
8
|
+
//
|
|
9
|
+
// 상류 배치가 skills/<이름>/SKILL.md라 레지스트리가 그대로 읽는다(14개 실측).
|
|
10
|
+
// anchor는 using-superpowers다 — 상류가 "대화 시작 시 반드시 읽으라"고 못 박은
|
|
11
|
+
// 부트스트랩 스킬이라, 이것이 없으면 나머지가 있어도 설치로 볼 수 없다.
|
|
12
|
+
export default defineRegistrySkill({
|
|
13
|
+
id: 'skill.superpowers', label: 'superpowers (skills)', group: '__flow',
|
|
14
|
+
source: 'https://github.com/obra/superpowers',
|
|
15
|
+
skill: '*',
|
|
16
|
+
anchor: 'using-superpowers',
|
|
17
|
+
exclusive: 'superpowers',
|
|
18
|
+
note: 'item.skill.superpowers.note',
|
|
19
|
+
})
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rch4com/agent-setup",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Repository-scoped bootstrap and optional-item installer for using multiple coding-agent CLIs in one repository | 여러 코딩 에이전트 CLI를 한 저장소에서 함께 쓰기 위한 저장소 범위 부트스트랩과 선택 항목 설치기",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agents-md",
|