@kaydash9999/banker-plugins 0.1.3 → 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.
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Claude Code skills + commands — QA, audit, docs, architecture, dependency setup, and wiki; the banker plugin marketplace.",
9
- "version": "0.1.3"
9
+ "version": "0.2.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "banker",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Claude Code plugin: QA/audit/docs/architecture skills + commands, a /banker:setup installer for OS dependencies (playwright, etc.), and wiki compaction.",
5
5
  "author": {
6
6
  "name": "smallOpenSource",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.0] - 2026-07-01
4
+
5
+ ### Fixed
6
+ - **Codex 스킬 미표시(#5)**: `banker setup --codex` 가 스킬을 `~/.codex/skills/banker-<name>/` 로 복사할 때 SKILL.md 프론트매터 `name:` 을 `banker-<name>` 로 재작성한다. Codex는 스킬 디렉터리명과 `name:` 일치를 요구하는데, 기존에는 `name: <name>` 그대로라 Codex가 스킬을 인식하지 못했다. `banker doctor` 에 dir==name 검증·경고와 "codex 있는데 banker 스킬 0개" 경고 추가.
7
+
8
+ ### Changed
9
+ - **업데이트 시 중복 제거(#6)**: `banker setup --codex` 가 설치 전 기존 `banker-*` 스킬·프롬프트를 먼저 정리(sweep)한 뒤 클린 재설치한다. 매니페스트에서 제거·개명된 스킬의 옛 버전이 잔존하지 않는다.
10
+ - **의존성 사전 안내(#2·#4)**: `all-in-one`·`ultra-init`·`front-qa` 에 OMC(Claude)/OMX(Codex) 전제조건 프리플라이트, 브라우저 스킬(`audit-web-page`·`game-qa`·`ultra-ui-qa`)에 playwright 전제조건 프리플라이트를 추가했다. 의존성이 없으면 "설치부터" 안내한 뒤 진행한다.
11
+ - **README 재작성(#1)**: 과장·AI 흔적 표현을 덜어내고(과장 태그라인·불필요한 em dash 정리) 간결하고 정중한 문체로 정리했다. 빠른 시작에 Claude Code·Codex 양쪽 설치 경로를 명시하고, 라이선스/서드파티 섹션을 번들 코드(humanizer)·의존 라이브러리·연동 대상 3범주로 확장했다.
12
+ - `sync-version` 이 `.claude-plugin/marketplace.json` 의 `metadata.version` 까지 동기화한다(과거 수동 갱신 제거).
13
+
14
+ ### Added
15
+ - **`setup-omc` 스킬**: `all-in-one`·`ultra-init`·`front-qa` 가 의존하는 oh-my-claudecode(OMC)를 설치·갱신한다(Codex는 OMX `omx setup`). `/banker:setup` 멀티셀렉트에 옵션으로 추가.
16
+ - **`setup-insane-search` Codex 지원(#7)**: `target: both` 로 승격했다. Claude는 `insane-search@gptaku-plugins`, Codex는 `codex plugin add insane-research-codex@gptaku-codex` 경로를 도구 자동 감지로 안내한다.
17
+ - `scripts/smoke-test.js` 에 실제 설치 기반 회귀 단언 추가: 스킬 18개, `banker-*` dir==frontmatter `name`, 재설치 시 stale sweep.
18
+
3
19
  ## [0.1.3] - 2026-06-29
4
20
 
5
21
  ### Security
package/README.md CHANGED
@@ -1,37 +1,37 @@
1
1
  # banker-plugins
2
2
 
3
- > *Claude Code에 QA·감사·문서·아키텍처 초능력을 한 벌로.*
3
+ > Claude Code와 Codex CLI를 위한 QA·감사·문서·아키텍처·위키 스킬 모음.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@kaydash9999/banker-plugins)](https://www.npmjs.com/package/@kaydash9999/banker-plugins)
6
6
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
7
7
 
8
- **[빠른 시작](#빠른-시작)** · [왜 banker인가](#왜-banker인가) · [구성](#구성) · [설치 상세](#설치-상세-npm--codex) · [요구사항](#요구사항) · [라이선스](#라이선스--서드파티)
8
+ [빠른 시작](#빠른-시작) · [구성](#구성) · [설치 상세](#설치-상세-npm--codex) · [요구사항](#요구사항) · [업데이트 / 제거](#업데이트--제거) · [라이선스 / 서드파티](#라이선스--서드파티)
9
9
 
10
- banker는 QA·보안 감사·문서·아키텍처·위키 작업을 위한 **스킬 24개**와 OS 의존성 설치기를 묶은 Claude Code 플러그인입니다. 설치하면 모든 스킬·커맨드가 **`/banker:<이름>`** 네임스페이스로 노출됩니다. 이 repo 자체가 **Claude Code 마켓플레이스**(`.claude-plugin/marketplace.json`)이자 **플러그인**(`.claude-plugin/plugin.json`, name `banker`)입니다.
10
+ banker는 QA, 보안 감사, 문서, 아키텍처, 위키 작업을 위한 스킬 25개와 의존성 설치 스킬을 묶은 Claude Code 플러그인입니다. 설치하면 스킬과 커맨드가 `/banker:<이름>` 네임스페이스로 노출됩니다. 이 저장소 자체가 Claude Code 마켓플레이스(`.claude-plugin/marketplace.json`)이자 플러그인(`.claude-plugin/plugin.json`, name `banker`)이며, 도구에 무관한 스킬은 Codex CLI에도 설치됩니다.
11
11
 
12
- > npm 패키지(`@kaydash9999/banker-plugins`)와 GitHub repo(`smallOpenSource/banker_plugins`)는 같은 메인테이너가 관리합니다.
12
+ > npm 패키지(`@kaydash9999/banker-plugins`)와 GitHub 저장소(`smallOpenSource/banker_plugins`)는 같은 메인테이너가 관리합니다.
13
13
 
14
14
  ## 빠른 시작
15
15
 
16
+ **Claude Code:** 마켓플레이스로 설치
17
+
16
18
  ```bash
17
- # 1) 마켓플레이스 추가 + 플러그인 설치
18
19
  claude plugin marketplace add smallOpenSource/banker_plugins
19
20
  claude plugin install banker@banker-plugins
20
21
  ```
21
22
 
22
- ```text
23
- # 2) 첫 사용 — 예: 보안 취약점 진단
24
- /banker:audit-security
25
- ```
23
+ 스킬과 커맨드를 `/banker:audit-security` 처럼 `/banker:` 로 호출합니다.
26
24
 
27
- 설치 후 스킬·커맨드는 `/banker:rfp-author`, `/banker:arch-diagram` 처럼 `/banker:` 로 호출합니다. playwright(브라우저 QA) 같은 OS 의존성이 필요한 항목은 **`/banker:setup`** 으로 골라 설치합니다.
25
+ **Codex CLI:** npm 전역 설치 후 `banker setup`
26
+
27
+ ```bash
28
+ npm i -g @kaydash9999/banker-plugins
29
+ banker setup --codex
30
+ ```
28
31
 
29
- ## 왜 banker인가?
32
+ 스킬을 `banker-audit-security` 처럼 `banker-<name>` 으로 호출합니다.
30
33
 
31
- - **스킬 24개를 한 벌로** — QA·감사·문서·아키텍처·위키를 매번 새로 만들지 않고 바로 씁니다.
32
- - **설치 즉시 `/banker:*`** — 마켓플레이스 한 줄, 또는 npm 전역 설치 한 줄.
33
- - **Claude Code + Codex 양립** — 도구-무관 스킬 17개는 Codex CLI에도 그대로 설치됩니다.
34
- - **OS 의존성까지** — `/banker:setup` 이 playwright·omc_hud 등을 OS에 맞춰 설치·폴백합니다.
34
+ playwright(브라우저 QA)나 oh-my-claudecode(OMC/OMX)처럼 별도 의존성이 필요한 스킬은 실행 전에 설치부터 안내합니다(Claude Code는 `/banker:setup`).
35
35
 
36
36
  ## 구성
37
37
 
@@ -39,10 +39,10 @@ claude plugin install banker@banker-plugins
39
39
 
40
40
  | 커맨드 | 설명 |
41
41
  |---|---|
42
- | `/banker:front-qa` | 스펙(note) 기반 프론트엔드 구현 + 엄격 parity QA |
43
- | `/banker:setup` | 구성요소·OS 의존성 multi-select 설치 오케스트레이터 |
42
+ | `/banker:front-qa` | 스펙(note) 기반 프론트엔드 구현 + parity QA |
43
+ | `/banker:setup` | 구성요소·의존성 설치 오케스트레이터 (multi-select) |
44
44
 
45
- ### 스킬 — QA · 감사
45
+ ### 스킬: QA · 감사
46
46
 
47
47
  | 스킬 | 설명 |
48
48
  |---|---|
@@ -52,7 +52,7 @@ claude plugin install banker@banker-plugins
52
52
  | `game-qa` | 웹 게임(Godot HTML5) 직접 플레이 QA |
53
53
  | `ultra-ui-qa` | UI를 기준(디자인 PDF/스펙)과 1:1 대조 QA |
54
54
 
55
- ### 스킬 — 문서 · 디자인 · 위키
55
+ ### 스킬: 문서 · 디자인 · 위키
56
56
 
57
57
  | 스킬 | 설명 |
58
58
  |---|---|
@@ -66,59 +66,90 @@ claude plugin install banker@banker-plugins
66
66
  | `append_wiki` | 프로젝트 위키 문서 추가/보강 |
67
67
  | `compact-wiki` | 위키 중복 제거·supersede·병합 (무손실) |
68
68
 
69
- ### 스킬 — 워크플로 · 유틸
69
+ ### 스킬: 워크플로 · 유틸
70
70
 
71
71
  | 스킬 | 설명 |
72
72
  |---|---|
73
73
  | `all-in-one` | 계획→구현→검증 end-to-end 오케스트레이터 |
74
74
  | `ultra-init` | 아이디어→빌드→테스트 원샷 자동 실행 |
75
75
  | `ready-compact` | 컨텍스트 compaction 직전 상태 저장/이어가기 |
76
- | `compact-copy` | resume 프롬프트만 추출 → 클립보드/파일(compaction 이어가기) |
76
+ | `compact-copy` | resume 프롬프트만 추출해 클립보드/파일로(compaction 이어가기) |
77
77
  | `refresh-git-ignore` | `.gitignore` 비파괴·반복가능 갱신 |
78
78
  | `omc-reference` | OMC 에이전트/툴/스킬 레퍼런스 |
79
79
 
80
- ### 스킬 — 설치 (`/banker:setup` 가 호출)
80
+ ### 스킬: 설치 (`/banker:setup` 가 호출)
81
81
 
82
82
  | 스킬 | 설명 |
83
83
  |---|---|
84
+ | `setup-omc` | oh-my-claudecode(OMC) 설치·갱신 (Codex는 OMX) |
84
85
  | `setup-playwright` | Playwright + headless 브라우저 (RHEL8/Rocky8·non-root·no-conda 폴백) |
85
86
  | `setup-omc-hud` | omc_hud 상태표시줄 (OS별) |
86
- | `setup-insane-search` | insane-search 플러그인 설치 |
87
+ | `setup-insane-search` | insane-search 플러그인 설치 (Claude·Codex) |
87
88
  | `setup-stitch-proxy` | Stitch 디자인 MCP 프록시 등록 |
88
89
 
89
- ## 설치 상세 (npm + Codex)
90
+ ## 설치 상세 (npm · Codex)
90
91
 
91
- 마켓플레이스 대신 **npm**으로 전역 설치할 수 있고, **Codex CLI**에도 스킬을 설치할 수 있습니다.
92
+ 마켓플레이스 대신 npm으로 전역 설치할 수 있고, Codex CLI에도 스킬을 설치할 수 있습니다. Codex 설치는 npm 전역 설치가 선행되어야 합니다.
92
93
 
93
94
  ```bash
94
95
  npm i -g @kaydash9999/banker-plugins
95
- banker setup # Claude Code + Codex 둘 다 (대상 플래그 없으면 둘 다)
96
- banker setup --claude # Claude Code만 (마켓플레이스 등록 → /banker:*)
96
+ banker setup # 대상 플래그가 없으면 Claude Code와 Codex 둘 다
97
+ banker setup --claude # Claude Code만 (마켓플레이스 등록 후 /banker:*)
97
98
  banker setup --codex # Codex CLI만 (~/.codex/skills/banker-*)
98
99
  banker doctor # 설치 상태 점검
99
100
  banker uninstall # 제거
100
101
  ```
101
102
 
102
- - `--scope project` 로 프로젝트-로컬(`./.codex`)에 설치, `--dry-run` 으로 미리보기.
103
- - **non-root 전용**(전역 sudo 설치 시 root 소유 파일 방지). **postinstall 없음** — `banker setup` 을 직접 실행합니다.
104
- - Codex에는 **도구-무관 스킬 17개만** 설치됩니다(`codex/manifest.json`). OMC/`claude`-결합 스킬(all-in-one·ultra-init·omc-reference·setup-omc-hud/insane-search/stitch-proxy·`/banker:front-qa`)과 Claude Code 내장 `/copy` 에 의존하는 `compact-copy` 는 Claude Code 전용입니다.
105
- - Codex 스킬 → `~/.codex/skills/banker-<name>/` (17개). 현재 커맨드(`front-qa`·`setup`)는 둘 다 Claude 전용이라 Codex prompts는 0개입니다 — 향후 도구-무관 커맨드가 생기면 `~/.codex/prompts/banker-<name>.md`(`/banker-<name>`)로 설치됩니다. `~/.codex/AGENTS.md`는 건드리지 않습니다(omx가 재생성하므로).
103
+ - `--scope project` 로 프로젝트 로컬(`./.codex`)에 설치하고, `--dry-run` 으로 미리 볼 수 있습니다.
104
+ - non-root 전용입니다(전역 sudo 설치 시 root 소유 파일을 방지). postinstall이 없으므로 `banker setup` 을 직접 실행합니다.
105
+ - Codex에는 도구에 무관한 스킬 18개가 설치됩니다(`codex/manifest.json`). 스킬은 `~/.codex/skills/banker-<name>/` 에 놓이고, 디렉터리명과 일치하도록 프론트매터 `name:` 이 `banker-<name>` 으로 재작성되어 Codex가 `banker-<name>` 으로 인식합니다.
106
+ - OMC나 `claude` 에 결합된 스킬(all-in-one, ultra-init, omc-reference, setup-omc, setup-omc-hud, setup-stitch-proxy)과 Claude Code 내장 `/copy` 에 의존하는 compact-copy, 그리고 `/banker:front-qa`·`/banker:setup` 커맨드는 Claude Code 전용입니다.
107
+ - `~/.codex/AGENTS.md` 는 건드리지 않습니다(omx가 재생성하므로 `~/.codex/skills/` 자동 검색에 의존).
106
108
 
107
109
  ## 요구사항
108
110
 
109
- - **Claude Code** (마켓플레이스 설치 경로) — 스킬은 `/banker:*` 로 동작.
110
- - 또는 **Node.js ≥ 16.7** (npm 전역 설치 경로) — `banker` CLI 제공.
111
- - 일부 스킬은 OS 의존성이 필요합니다(`/banker:setup` 으로 설치): playwright(브라우저 QA)·omc_hud 등.
111
+ - Claude Code (마켓플레이스 경로): 스킬이 `/banker:*` 로 동작.
112
+ - 또는 Node.js ≥ 16.7 (npm 전역 설치 경로): `banker` CLI 제공.
113
+ - 일부 스킬은 별도 의존성이 필요하며 `/banker:setup` 으로 설치합니다. 의존성이 없으면 각 스킬이 실행 전에 설치부터 안내합니다.
114
+ - `all-in-one`, `ultra-init`, `/banker:front-qa`: oh-my-claudecode(OMC). Codex에서는 OMX.
115
+ - `audit-web-page`, `game-qa`, `ultra-ui-qa`: playwright.
112
116
 
113
117
  ## 업데이트 / 제거
114
118
 
119
+ **Claude Code:**
120
+
115
121
  ```bash
116
122
  claude plugin update banker # 플러그인 최신화 (재시작 후 적용)
117
123
  claude plugin marketplace update banker-plugins # 마켓플레이스 메타 갱신
118
124
  claude plugin uninstall banker # 제거
119
125
  ```
120
126
 
127
+ **npm · Codex:**
128
+
129
+ ```bash
130
+ npm i -g @kaydash9999/banker-plugins # 최신 버전 설치
131
+ banker setup # 재설치 (기존 banker-* 정리 후 클린 설치)
132
+ banker uninstall # 제거
133
+ ```
134
+
135
+ Codex는 재설치할 때마다 기존 `banker-*` 를 먼저 정리하므로 옛 버전이 중복으로 남지 않습니다.
136
+
121
137
  ## 라이선스 / 서드파티
122
138
 
123
- - **MIT** ([LICENSE](LICENSE)). Owner: [smallOpenSource](https://github.com/smallOpenSource).
124
- - `skills/humanizer` — [blader/humanizer](https://github.com/blader/humanizer) 기반, **MIT License** (© 2025 Siqi Chen). 원본 라이선스 고지는 `skills/humanizer/LICENSE`에 포함되어 있습니다.
139
+ banker 자체는 **MIT** ([LICENSE](LICENSE)). Owner: [smallOpenSource](https://github.com/smallOpenSource).
140
+
141
+ **번들된 코드 (이 패키지가 재배포)**
142
+ - `skills/humanizer`: [blader/humanizer](https://github.com/blader/humanizer) 기반, **MIT License**(© 2025 Siqi Chen). 원본 라이선스 고지는 `skills/humanizer/LICENSE` 에 포함. 패턴 목록은 Wikipedia [*Signs of AI writing*](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)(WikiProject AI Cleanup, **CC BY-SA**)에 기반합니다.
143
+
144
+ 코드로 포함(재배포)하는 서드파티는 `humanizer` 뿐입니다. 아래는 스킬이 **런타임에 의존하거나 연동**하는 외부 요소로, banker 가 재배포하지 않으며 각 라이선스·상표는 소유자에게 있습니다.
145
+
146
+ **의존 라이브러리·도구 (사용 시 별도 설치, 라이선스는 각 프로젝트 소유)**
147
+ - Python: python-pptx(MIT, `arch-diagram`), python-docx(MIT, `rfp-author`), Playwright(Apache-2.0, `audit-web-page`·`game-qa`·`ultra-ui-qa`), detect-secrets(Apache-2.0, `lineage` 시크릿 스캔).
148
+ - 브라우저·렌더링: Chromium(BSD-3-Clause), SwiftShader(Apache-2.0), Xvfb·X.Org(MIT). `setup-playwright` 및 브라우저 QA 스킬이 사용.
149
+ - 문서·다이어그램: PlantUML(GPL 계열·다중 라이선스, `arch-diagram`), Poppler(GPL, `pdftoppm`), ImageMagick(ImageMagick License, `pdf-vision-extract`).
150
+
151
+ **연동·참조 (외부 프레임워크·서비스·브랜드)**
152
+ - 프레임워크: oh-my-claudecode(OMC, **MIT**)·oh-my-codex(OMX, **MIT**), by [Yeachan-Heo](https://github.com/Yeachan-Heo). `all-in-one`·`ultra-init`·`/banker:front-qa`·`setup-omc` 가 사용.
153
+ - 플러그인: insane-search(**MIT**, © fivetaku, [fivetaku/gptaku_plugins](https://github.com/fivetaku/gptaku_plugins)). `setup-insane-search` 가 설치.
154
+ - 서비스·디자인(독점·상표): Notion(`make-notion-guide`), Google Stitch(`setup-stitch-proxy`), Nothing 디자인 언어(`nothing-design`).
155
+ - QA 대상 엔진(예시): Godot(MIT), Phaser(MIT) 등(`game-qa`).
package/bin/banker.js CHANGED
@@ -81,6 +81,48 @@ function copyFile(src, dest, dryRun) {
81
81
  fs.copyFileSync(src, dest);
82
82
  }
83
83
 
84
+ // Remove every prior `banker-*` skill dir and prompt file so a re-run is a clean
85
+ // reinstall — a skill dropped from the manifest (or renamed) never lingers as a stale duplicate.
86
+ function sweepCodexArtifacts(base, dryRun) {
87
+ let removed = 0;
88
+ for (const sub of ['skills', 'prompts']) {
89
+ const dir = path.join(base, sub);
90
+ let entries = [];
91
+ try { entries = fs.readdirSync(dir).filter(d => d.startsWith('banker-')); } catch { /* dir absent */ }
92
+ for (const e of entries) {
93
+ const p = path.join(dir, e);
94
+ if (dryRun) { log(` [dry-run] sweep ${p}`); continue; }
95
+ fs.rmSync(p, { recursive: true, force: true });
96
+ removed++;
97
+ }
98
+ }
99
+ return removed;
100
+ }
101
+
102
+ // Read a SKILL.md frontmatter `name:` (used by doctor to verify the Codex dir==name rule).
103
+ function readSkillName(skillMd) {
104
+ let src;
105
+ try { src = fs.readFileSync(skillMd, 'utf8'); } catch { return null; }
106
+ const fm = src.match(/^---\r?\n([\s\S]*?)\r?\n---/);
107
+ if (!fm) return null;
108
+ const m = fm[1].match(/^name:\s*["']?([^"'\n]+?)["']?\s*$/m);
109
+ return m ? m[1] : null;
110
+ }
111
+
112
+ // Codex discovers skills by directory and expects the SKILL.md frontmatter `name:` to equal the
113
+ // directory name. Our Codex dir is `banker-<name>` (prefixed to avoid colliding with omx/system
114
+ // skills), so rewrite ONLY the first `name:` line inside the YAML frontmatter to match.
115
+ function setCodexSkillName(skillMd, newName, dryRun) {
116
+ if (dryRun) { log(` [dry-run] set frontmatter name: ${newName}`); return; }
117
+ let src;
118
+ try { src = fs.readFileSync(skillMd, 'utf8'); } catch { return; }
119
+ const fm = src.match(/^---\r?\n([\s\S]*?)\r?\n---/);
120
+ if (!fm) return; // no frontmatter — leave untouched
121
+ let block = fm[1];
122
+ block = /^name:.*$/m.test(block) ? block.replace(/^name:.*$/m, `name: ${newName}`) : `name: ${newName}\n${block}`;
123
+ fs.writeFileSync(skillMd, src.slice(0, fm.index) + `---\n${block}\n---` + src.slice(fm.index + fm[0].length));
124
+ }
125
+
84
126
  /* ---------- Claude Code target ---------- */
85
127
  function setupClaude(dryRun) {
86
128
  log('• Claude Code:');
@@ -95,6 +137,7 @@ function setupClaude(dryRun) {
95
137
  catch (e) { warn(` step failed (may already be applied): ${bin} ${args.join(' ')}`); }
96
138
  }
97
139
  log(' → skills/commands available as /banker:* (reload-plugins or restart to apply).');
140
+ log(' → for all-in-one / ultra-init / front-qa, install OMC too: run /banker:setup and pick oh-my-claudecode (or `omc update`).');
98
141
  return true;
99
142
  }
100
143
 
@@ -105,10 +148,15 @@ function setupCodex(dryRun, scope) {
105
148
  const base = codexBase(scope);
106
149
  const skillsDir = path.join(base, 'skills');
107
150
  const promptsDir = path.join(base, 'prompts');
151
+ // Clean reinstall: remove any prior banker-* first so an update never leaves a stale duplicate.
152
+ const swept = sweepCodexArtifacts(base, dryRun);
153
+ if (swept) log(` swept ${swept} prior banker-* artifact(s) before reinstall.`);
108
154
  let nSkill = 0, nCmd = 0;
109
155
  for (const s of eligible(m)) {
110
156
  if (s.type === 'skill') {
111
- copyDir(path.join(PKG_ROOT, 'skills', s.name), path.join(skillsDir, `banker-${s.name}`), dryRun);
157
+ const dest = path.join(skillsDir, `banker-${s.name}`);
158
+ copyDir(path.join(PKG_ROOT, 'skills', s.name), dest, dryRun);
159
+ setCodexSkillName(path.join(dest, 'SKILL.md'), `banker-${s.name}`, dryRun); // dir==name (Codex discovery)
112
160
  nSkill++;
113
161
  } else if (s.type === 'command') {
114
162
  copyFile(path.join(PKG_ROOT, 'commands', `${s.name}.md`), path.join(promptsDir, `banker-${s.name}.md`), dryRun);
@@ -116,6 +164,7 @@ function setupCodex(dryRun, scope) {
116
164
  }
117
165
  }
118
166
  log(` → ${nSkill} skills -> ${path.join(base, 'skills', 'banker-*')}, ${nCmd} prompts -> ${path.join(base, 'prompts', 'banker-*.md')}`);
167
+ log(' → skills are invoked as `banker-<name>` (frontmatter name rewritten to match the dir).');
119
168
  log(' → ~/.codex/AGENTS.md is NOT modified (omx regenerates it); skills auto-discovered from ~/.codex/skills/.');
120
169
  return true;
121
170
  }
@@ -133,8 +182,20 @@ function doctor() {
133
182
  try { installed = fs.readdirSync(sdir).filter(d => d.startsWith('banker-')); } catch {}
134
183
  log(` codex CLI: ${have('codex') ? 'found' : 'NOT found'}`);
135
184
  log(` installed banker skills in ~/.codex/skills: ${installed.length}`);
185
+ // Codex only discovers a skill when its dir name equals the SKILL.md `name:` — flag any mismatch.
186
+ const mismatched = installed
187
+ .map(d => ({ d, name: readSkillName(path.join(sdir, d, 'SKILL.md')) }))
188
+ .filter(x => x.name && x.name !== x.d);
189
+ if (mismatched.length) {
190
+ log(` ⚠ dir/name mismatch (Codex will NOT list these) — reinstall with this version:`);
191
+ for (const x of mismatched) log(` ${x.d}/ has name: ${x.name}`);
192
+ }
193
+ if (have('codex') && installed.length === 0) log(' ⚠ codex found but 0 banker skills installed — run: banker setup --codex');
136
194
  const m = readManifest();
137
- log(` manifest: ${eligible(m).length} codex-eligible surfaces (of ${m.surfaces.length}).`);
195
+ const nSkills = eligible(m).filter(s => s.type === 'skill').length;
196
+ log(` manifest: ${eligible(m).length} codex-eligible surfaces (${nSkills} skills) of ${m.surfaces.length}.`);
197
+ log('Dependencies: all-in-one / ultra-init / front-qa need OMC (Claude) or OMX (Codex); browser skills need playwright.');
198
+ log(' → install via /banker:setup (Claude) or the setup-* skills; skills also guide you if a dependency is missing.');
138
199
  }
139
200
 
140
201
  /* ---------- uninstall ---------- */
@@ -18,14 +18,15 @@
18
18
  { "name": "refresh-git-ignore", "type": "skill", "target": "both", "reason": ".gitignore refresh; tool-agnostic", "supportingFiles": [] },
19
19
  { "name": "rfp-author", "type": "skill", "target": "both", "reason": "RFP authoring framework; tool-agnostic", "supportingFiles": ["references/compliance-and-ai-llm.md", "references/korean-rfp-framework.md", "references/research-provenance.md", "references/this-project-scope.md", "references/vendor-rfp-structure.md", "templates/rfp-skeleton.md", "scripts/md2docx.py"] },
20
20
  { "name": "setup-playwright", "type": "skill", "target": "both", "reason": "playwright/browser install; tool-agnostic (genericize /banker:setup trigger ref for Codex)", "supportingFiles": [] },
21
+ { "name": "setup-insane-search", "type": "skill", "target": "both", "reason": "installs the insane-search plugin; Claude via `claude plugin`, Codex via `codex plugin add insane-research-codex@gptaku-codex`", "supportingFiles": [] },
21
22
  { "name": "ultra-ui-qa", "type": "skill", "target": "both", "reason": "UI vs SoT QA; tool-agnostic", "supportingFiles": [], "caveat": "needs playwright (setup-playwright)" },
22
23
 
23
24
  { "name": "all-in-one", "type": "skill", "target": "claude-only", "reason": "orchestrates OMC ralplan->ralph->ultraqa (Claude/OMC-specific)", "supportingFiles": [] },
24
25
  { "name": "compact-copy", "type": "skill", "target": "claude-only", "reason": "manipulates Claude Code /copy + response.md artifact (Claude-specific)", "caveat": "depends on Claude Code /copy builtin + /tmp/claude-<uid>/response.md internal path; may change across Claude Code versions", "supportingFiles": [] },
25
26
  { "name": "ultra-init", "type": "skill", "target": "claude-only", "reason": "orchestrates OMC ralplan/ultragoal/ralph/ultraqa (Claude/OMC-specific)", "supportingFiles": [] },
26
27
  { "name": "omc-reference", "type": "skill", "target": "claude-only", "reason": "OMC-internal agent/tool/skill registry reference", "supportingFiles": [] },
28
+ { "name": "setup-omc", "type": "skill", "target": "claude-only", "reason": "installs/refreshes oh-my-claudecode (OMC) that all-in-one/ultra-init/front-qa depend on; Codex users run `omx setup`", "supportingFiles": [] },
27
29
  { "name": "setup-omc-hud", "type": "skill", "target": "claude-only", "reason": "installs omc_hud (Claude Code statusline)", "supportingFiles": [] },
28
- { "name": "setup-insane-search", "type": "skill", "target": "claude-only", "reason": "shells `claude plugin` to install a Claude Code plugin", "supportingFiles": [] },
29
30
  { "name": "setup-stitch-proxy", "type": "skill", "target": "claude-only", "reason": "shells `claude mcp add` (Claude Code MCP registration)", "supportingFiles": [] },
30
31
 
31
32
  { "name": "front-qa", "type": "command", "target": "claude-only", "reason": "ralplan->ralph->loop OMC pipeline command", "supportingFiles": [] },
@@ -5,20 +5,21 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
5
5
 
6
6
  | Source (Claude) | Codex destination | Transform |
7
7
  |---|---|---|
8
- | `skills/<name>/SKILL.md` (+ subtree) | `~/.codex/skills/banker-<name>/` (whole dir) | **COPY subtree** (Windows: no symlink). SKILL.md frontmatter (name+description) is identical → no body transform. Optionally strip Claude-only `/banker:`-style trigger phrases from `description`. |
8
+ | `skills/<name>/SKILL.md` (+ subtree) | `~/.codex/skills/banker-<name>/` (whole dir) | **COPY subtree** (Windows: no symlink), then **rewrite the frontmatter `name:` to `banker-<name>`**. Codex discovers skills by directory and requires `name:` == directory name, so the prefix must be applied to both (leaving `name: <name>` while the dir is `banker-<name>` makes Codex skip the skill). `description` is left as-is. |
9
9
  | `commands/<name>.md` | `~/.codex/prompts/banker-<name>.md` | Near-identical (frontmatter `description`+`argument-hint`). Codex prompts are flat → the `banker-` prefix lives in the filename; invoked as `/banker-<name>`. |
10
10
  | (none) | `~/.codex/AGENTS.md` | **NOT TOUCHED.** omx regenerates it (clobber risk, `:7`/`:253`). Rely on `~/.codex/skills/` auto-discovery; if a listing is wanted, write ONLY inside the sanctioned `<!-- user-custom -->` region, idempotently. |
11
11
 
12
12
  ## Naming
13
- - Codex skill dir: `banker-<name>` (avoids collision with omx/system skills).
13
+ - Codex skill dir **and** frontmatter `name:`: `banker-<name>` (avoids collision with omx/system skills; kept in sync so Codex discovers it).
14
14
  - Codex prompt file: `banker-<name>.md` → invoked `/banker-<name>`.
15
15
 
16
16
  ## Scope
17
17
  - `--scope user` (default) → `~/.codex/…`. `--scope project` → `./.codex/…`.
18
18
 
19
19
  ## Excluded (claude-only) — never generated for Codex
20
- Skills: all-in-one, compact-copy, ultra-init, omc-reference, setup-omc-hud, setup-insane-search, setup-stitch-proxy.
20
+ Skills: all-in-one, compact-copy, ultra-init, omc-reference, setup-omc, setup-omc-hud, setup-stitch-proxy.
21
21
  Commands: front-qa, setup. (Reasons in `manifest.json`.)
22
+ `setup-insane-search` is `both`: on Codex it drives `codex plugin add insane-research-codex@gptaku-codex`.
22
23
 
23
24
  ## Caveats (documented; not blockers)
24
25
  - `append_wiki`, `compact-wiki` — use `wiki_*` MCP at runtime → copy fine, need a wiki MCP available in Codex.
@@ -8,6 +8,12 @@ argument-hint: "[스펙/note 파일 경로 — 생략 시 docs/note.txt]"
8
8
  `$1`(없으면 `docs/note.txt`)의 요구사항을 React 프론트엔드(`$FRONTEND_DIR`, 예: `apps/web`)에 구현하고,
9
9
  **레퍼런스 구현(reference implementation — 예: 이전 Streamlit/타 빌드)과 엄격 비교 + 스펙 지시 정확 준수**를 검증한다. 모든 항목 해결까지 진행.
10
10
 
11
+ ## 0. 전제조건: OMC (없으면 설치부터)
12
+
13
+ 이 커맨드는 `/ralplan`·`/ralph` 등 oh-my-claudecode(OMC)에 의존한다. **진행 전 먼저 확인**하고, 없으면 **설치부터 안내**한다:
14
+ - 확인: `command -v omc` + `/oh-my-claudecode:*` 사용 가능 여부.
15
+ - 미설치면 `/banker:setup` → oh-my-claudecode(또는 `setup-omc` 스킬 / `omc update`)로 먼저 구성한 뒤 이어서 진행.
16
+
11
17
  ## 절차 (CLAUDE.md: 계획 없는 즉시실행 금지)
12
18
 
13
19
  1. **스펙 정독**: 대상 파일을 읽어 요구사항을 항목화. 코드베이스 정찰(병렬 explore/general-purpose 에이전트로
package/commands/setup.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "banker 플러그인 구성요소·OS 의존성을 multi-select로 골라 설치하는 오케스트레이터(playwright·omc-hud·insane-search·stitch-proxy)."
2
+ description: "banker 플러그인 구성요소·의존성을 multi-select로 골라 설치하는 오케스트레이터(oh-my-claudecode·playwright·omc-hud·insane-search·stitch-proxy)."
3
3
  argument-hint: "[설치할 컴포넌트명 — 비우면 multi-select 표시]"
4
4
  ---
5
5
 
@@ -11,13 +11,15 @@ banker 플러그인이 제공하는 설치 스킬들을 **multi-select**로 골
11
11
  ## 절차
12
12
 
13
13
  1. **선택 받기**: `$ARGUMENTS` 에 컴포넌트명이 명시돼 있으면 그것만 실행(질문 생략).
14
- 비어 있으면 아래 4개를 `AskUserQuestion`(**multiSelect: true**)으로 제시한다:
14
+ 비어 있으면 아래 5개를 `AskUserQuestion`(**multiSelect: true**)으로 제시한다:
15
+ - **setup-omc** — oh-my-claudecode(OMC) 설치/갱신. `all-in-one`·`ultra-init`·`/banker:front-qa` 의존성(Codex는 OMX).
15
16
  - **setup-playwright** — Playwright + 브라우저 + headless 디스플레이(Xvfb). RHEL8/Rocky8 등 비공식 지원·non-root·no-conda 폴백 포함. (`ultra-ui-qa`·`audit-web-page`·`game-qa` 의존성)
16
17
  - **setup-omc-hud** — omc_hud 상태표시줄 설치(OS별).
17
- - **setup-insane-search** — insane-search 플러그인(차단 사이트 우회) 설치.
18
+ - **setup-insane-search** — insane-search 플러그인(차단 사이트 우회) 설치(Claude/Codex 양쪽 경로).
18
19
  - **setup-stitch-proxy** — Stitch(디자인 생성) MCP 프록시 등록(API key 필요).
19
20
 
20
21
  2. **실행**: 선택된 각 항목의 스킬을 `Skill` 도구로 호출한다(미선택은 건드리지 않음):
22
+ - setup-omc → `Skill("banker:setup-omc")`
21
23
  - setup-playwright → `Skill("banker:setup-playwright")`
22
24
  - setup-omc-hud → `Skill("banker:setup-omc-hud")`
23
25
  - setup-insane-search → `Skill("banker:setup-insane-search")`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaydash9999/banker-plugins",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "banker — Claude Code + Codex CLI plugin (QA, audit, docs, architecture, wiki skills). Install via Claude Code marketplace, or `npm i -g @kaydash9999/banker-plugins` then `banker setup`.",
5
5
  "bin": {
6
6
  "banker": "bin/banker.js"
@@ -20,6 +20,12 @@ level: 4
20
20
 
21
21
  [ALL-IN-ONE ACTIVATED — SEQUENTIAL 3-STAGE PIPELINE]
22
22
 
23
+ ## 0. Prerequisite: OMC (install first if missing)
24
+
25
+ This skill orchestrates OMC's `ralplan` → `ralph` → `ultraqa`. **Check the dependency before running**; if it is missing, **guide installation first** rather than failing mid-pipeline:
26
+ - Check: `command -v omc` and whether `/oh-my-claudecode:*` skills are available.
27
+ - If missing: install via `/banker:setup` → oh-my-claudecode (or the `setup-omc` skill / `omc update`), then resume. On Codex the equivalent is OMX (`omx setup`).
28
+
23
29
  ## Purpose
24
30
 
25
31
  Run one substantial coding task through three independent quality gates in a
@@ -10,6 +10,12 @@ description: "가동 중 웹페이지를 playwright로 라이브 점검(버튼·
10
10
  스크린샷으로 캡처해 **직접 Read로 육안 판정**한다. unit/build 게이트로 대체 불가능한
11
11
  "진짜 화면이 동작/렌더하는가"를 확증하는 마지막 검증 레인.
12
12
 
13
+ ## 0. 전제조건: playwright (없으면 설치부터)
14
+
15
+ 이 스킬은 playwright 브라우저가 있어야 동작한다. **진행 전 설치 여부를 먼저 확인**하고, 없으면 **설치부터 안내**한다(추정·임의 재설치 금지):
16
+ - 확인: `ls "${PLAYWRIGHT_BROWSERS_PATH:-$HOME/.cache/ms-playwright}" 2>/dev/null | grep -qi chromium && echo ok`
17
+ - 미설치면 먼저 `setup-playwright` 스킬로 설치(Claude Code: `/banker:setup` → setup-playwright / Codex: `banker-setup-playwright`). 설치·검증 후 이 스킬을 이어서 진행한다.
18
+
13
19
  ## 언제
14
20
 
15
21
  - 사용자가 `audit-web-page` 또는 "라이브로 점검/검증", "playwright로 화면 확인" 요청.
@@ -7,6 +7,11 @@ description: "Godot HTML5 웹게임을 실제 브라우저에서 직접 플레
7
7
 
8
8
  헤드리스 CI(GREEN)와 "CLICK to start" 라벨이 **구조적으로 못 잡는** 결함 — 입력 손맛이 아니라 *렌더·HUD·입력 반영·시작·소프트락* — 을 **에이전트가 실제 브라우저에서 게임을 직접 플레이**하며 객관적으로 잡는다. (실증: 이 스킬이 '탭/클릭으로 8게임 중 7개가 시작조차 안 되는' 터치기기 쇼스토퍼를 잡았다. 헤드리스는 못 봤다.)
9
9
 
10
+ ## 0. 전제조건: playwright (없으면 설치부터)
11
+ 이 스킬은 playwright 브라우저가 있어야 동작한다. **진행 전 설치 여부를 먼저 확인**하고, 없으면 **설치부터 안내**한다(추정·임의 재설치 금지):
12
+ - 확인: `ls "${PLAYWRIGHT_BROWSERS_PATH:-$HOME/.cache/ms-playwright}" 2>/dev/null | grep -qi chromium && echo ok`
13
+ - 미설치면 먼저 `setup-playwright` 스킬로 설치(Claude Code: `/banker:setup` → setup-playwright / Codex: `banker-setup-playwright`). 설치·검증 후 이 스킬을 이어서 진행한다.
14
+
10
15
  ## 언제
11
16
  - 오너가 "네가 직접 플레이/qa해봐", "게임 테스트해봐" 류로 위임.
12
17
  - **실기기 손맛 플레이테스트 직전** 객관 점검(시작조차 안 되는 결함부터 거른다).
@@ -1,32 +1,43 @@
1
1
  ---
2
2
  name: setup-insane-search
3
- description: "insane-search(차단·봇방어 사이트 우회 검색·페치) 플러그인을 fivetaku/gptaku_plugins 마켓플레이스에서 설치(OS 무관). 'setup-insane-search'/'insane-search 설치' 또는 /banker:setup 시 사용."
3
+ description: "insane-search(차단·봇방어 사이트 우회 검색·페치) 플러그인 설치. Claude Code=gptaku_plugins 마켓플레이스, Codex=gptaku-codex 마켓플레이스. 'setup-insane-search'/'insane-search 설치' 또는 /banker:setup 시 사용."
4
4
  ---
5
5
 
6
- # setup-insane-search — insane-search 플러그인 설치
6
+ # setup-insane-search: insane-search 플러그인 설치
7
7
 
8
- 차단 사이트 우회(WAF/봇방어, X·Reddit·YouTube·GitHub 등) 검색·페치를 제공하는 `insane-search` 를
9
- `fivetaku/gptaku_plugins` 마켓플레이스에서 설치한다. OS 무관(Claude Code 플러그인). 답변은 한글.
8
+ 차단 사이트 우회(WAF·봇방어; X·Reddit·YouTube·GitHub 등) 검색·페치를 제공하는 `insane-search` 플러그인을
9
+ 설치한다. 현재 도구(Claude Code / Codex)를 감지해 알맞은 경로로 진행하고, 이미 설치돼 있으면 skip(멱등). 답변은 한글.
10
10
 
11
- ## 설치 — Claude Code 세션 안 (슬래시 커맨드)
11
+ ## Claude Code · 세션 안 (슬래시 커맨드)
12
12
  ```
13
13
  /plugin marketplace add https://github.com/fivetaku/gptaku_plugins.git
14
14
  /plugin install insane-search@gptaku-plugins
15
15
  /reload-plugins
16
16
  ```
17
-
18
- ## 또는 CLI (비대화형)
17
+ CLI(비대화형):
19
18
  ```bash
20
19
  claude plugin marketplace add https://github.com/fivetaku/gptaku_plugins.git
21
20
  claude plugin install insane-search@gptaku-plugins
22
- # 적용엔 /reload-plugins 또는 재시작 필요
21
+ # 반영엔 /reload-plugins 또는 재시작 필요
22
+ ```
23
+
24
+ ## Codex CLI
25
+ Codex는 마켓플레이스명(`gptaku-codex`)과 플러그인명(`insane-research-codex`)이 Claude와 다르다.
26
+ ```bash
27
+ codex plugin marketplace list # gptaku-codex 가 이미 있으면 다음 add 는 skip
28
+ codex plugin marketplace add https://github.com/fivetaku/insane-search.git
29
+ codex plugin add insane-research-codex@gptaku-codex
30
+ codex plugin list # STATUS=installed 확인
23
31
  ```
32
+ - `gptaku-codex` 마켓플레이스가 `marketplace list` 에 없을 때만 add 한다.
33
+ - add 후 등록된 마켓플레이스명을 `marketplace list` 로 확인한다. 이름이 `gptaku-codex` 가 아니면 `codex plugin add insane-research-codex@<실제이름>` 으로 맞춘다.
24
34
 
25
35
  ## 검증·보고
26
- - `claude plugin list` 에 `insane-search` 가 보이는지.
27
- - **반영엔 `/reload-plugins` 또는 재시작 필요**(설치 직후 미반영은 정상).
28
- - 이미 설치돼 있으면 skip.
36
+ - Claude: `claude plugin list` 에 `insane-search` 표시(반영엔 `/reload-plugins`·재시작).
37
+ - Codex: `codex plugin list` 에서 `insane-research-codex` 가 `STATUS=installed`.
38
+ - 이미 설치면 skip. 실패는 정직 보고(가짜 성공 금지).
29
39
 
30
40
  ## 함정
31
- - 마켓플레이스명은 추가 후 `claude plugin marketplace list` 로 확인(`gptaku-plugins`). 설치는 `<plugin>@<marketplace>` 형식.
32
- - 깃/네트워크 접근 필요(사설망이면 프록시 확인).
41
+ - 도구별 이름이 다르다: Claude=`insane-search@gptaku-plugins`, Codex=`insane-research-codex@gptaku-codex`.
42
+ - 설치는 `<plugin>@<marketplace>` 형식. 마켓플레이스명은 add 후 `marketplace list` 로 확인.
43
+ - 깃·네트워크 접근 필요(사설망이면 프록시 확인).
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: setup-omc
3
+ description: "all-in-one·ultra-init·front-qa 가 의존하는 oh-my-claudecode(OMC)를 설치/갱신. Codex는 oh-my-codex(OMX). 'setup-omc'/'OMC 설치'/'oh-my-claudecode 설치' 또는 /banker:setup 시 사용."
4
+ ---
5
+
6
+ # setup-omc: oh-my-claudecode(OMC) 설치/갱신
7
+
8
+ banker의 오케스트레이터(`all-in-one`·`ultra-init`)와 `/banker:front-qa` 커맨드는 OMC의
9
+ `ralplan`·`ralph`·`ultraqa` 등에 의존한다. 이 스킬은 OMC를 설치하거나 최신화한다(이미 있으면 갱신만; 멱등). 답변은 한글.
10
+
11
+ ## 0. 감지 (먼저, 추정 금지)
12
+ ```bash
13
+ command -v omc >/dev/null && omc --version || echo "omc: 미설치"
14
+ command -v claude >/dev/null || echo "claude: 미설치"
15
+ ```
16
+
17
+ ## Claude Code · OMC
18
+ - **이미 설치(`omc` 존재)** 면 최신화만 한다:
19
+ ```bash
20
+ omc update # 플러그인·npm 패키지·CLAUDE.md 동기화
21
+ ```
22
+ - **미설치** 면 공식 배포처 절차를 따른다(일반적으로 npm 전역 설치 후 `omc setup`). 정확한 설치 명령이 불명확하면 추정하지 말고 사용자에게 확인한다.
23
+ - 확인: `omc --version` + Claude 재시작·`/reload-plugins` 후 `/oh-my-claudecode:*` 노출.
24
+
25
+ ## Codex CLI · OMX (oh-my-codex)
26
+ Codex에서의 대응 프레임워크는 OMX다.
27
+ ```bash
28
+ command -v omx >/dev/null && omx setup # 유저/프로젝트 레벨 OMX 구성(멱등)
29
+ ```
30
+ - 미설치면 OMX 배포처 안내대로 설치 후 `omx setup`.
31
+
32
+ ## 검증·보고
33
+ - OMC: `omc --version` / OMX: `omx --version`. 반영엔 재시작·`/reload-plugins`(Claude)가 필요할 수 있다.
34
+ - 실패·불명확은 정직 보고(가짜 성공 금지).
35
+
36
+ ## 함정
37
+ - OMC/OMX는 banker와 별개 프로젝트다. banker가 대신 버전을 고정하지 않고 공식 경로만 쓴다.
38
+ - 설치 직후 미반영은 정상(재시작·reload 후 반영).
@@ -44,7 +44,7 @@ Several bundled skills are loop/persistence engines. To prevent competing loops,
44
44
  ### Phase 0 — Preflight (준비)
45
45
  - Resolve the brief from the skill arguments. If it is empty, ask once for the brief, then proceed.
46
46
  - Parse flags: planning depth (`--deliberate` = default, `--short` = lighter ralplan), `--gated`, `--qa <dims>`, `--critic=...`, `--plan-id <id>`.
47
- - Confirm the `omc` CLI is available (needed for ultragoal). If it is missing, run ultragoal in **degraded mode**: skip the durable ledger and instead write the approved plan to `plan.md` + rely on ralph's session-scoped `prd.json`. Say so explicitly when degrading.
47
+ - **OMC prerequisite**: this skill orchestrates OMC's `ralplan`/`ralph`/`ultraqa`, so it needs the `omc` CLI. Check `command -v omc`; if missing, **guide installation first** via `/banker:setup` → oh-my-claudecode (or the `setup-omc` skill / `omc update`), then resume once it is available. Only if the user declines to install, run ultragoal in **degraded mode**: skip the durable ledger, write the approved plan to `plan.md`, and rely on ralph's session-scoped `prd.json` (say so explicitly).
48
48
 
49
49
  ### Phase 1 — PLAN: ralplan --deliberate (합의 계획)
50
50
  - Invoke `Skill("oh-my-claudecode:ralplan")` with `--deliberate <brief>` in **non-interactive** mode (so it produces the consensus-approved plan, marks it `pending approval`, and **stops without launching team/ralph itself** — ultra-init controls the hand-off).
@@ -8,6 +8,11 @@ description: "웹 UI를 playwright로 실제 렌더해 디자인 SoT(PDF/스펙)
8
8
  웹 앱 프론트엔드를 **실제 브라우저로 렌더링**(playwright)해 디자인 SoT(PDF/스펙)와 1:1 대조하고,
9
9
  사용자/임원이 볼 필요 없는 **내부개념 텍스트 누출**을 잡아 debug 토글로 게이트하는 UI QA 워크플로우.
10
10
 
11
+ ## 0. 전제조건: playwright (없으면 설치부터)
12
+ 이 스킬은 playwright 브라우저가 있어야 동작한다. **진행 전 설치 여부를 먼저 확인**하고, 없으면 **설치부터 안내**한다(추정·임의 재설치 금지):
13
+ - 확인: `ls "${PLAYWRIGHT_BROWSERS_PATH:-$HOME/.cache/ms-playwright}" 2>/dev/null | grep -qi chromium && echo ok`
14
+ - 미설치면 먼저 `setup-playwright` 스킬로 설치(Claude Code: `/banker:setup` → setup-playwright / Codex: `banker-setup-playwright`). 설치·검증 후 이 스킬을 이어서 진행한다.
15
+
11
16
  ## When to use
12
17
  - "ultra ui qa", "UI 대조", "디자인 PDF와 대조", "내부개념/어색한 내용 점검", "표 title·차트 크기 비교"
13
18
  - 화면/버튼/기능이 SoT(PDF + spec)대로 구현됐는지 **렌더만이 아니라 데이터·소스까지** 엄격 검사할 때