@kaydash9999/banker-plugins 0.13.0 → 0.15.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 (82) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +82 -0
  4. package/README.md +50 -17
  5. package/codex/manifest.json +11 -8
  6. package/codex/transform-matrix.md +16 -4
  7. package/commands/front-qa.md +8 -5
  8. package/commands/setup.md +13 -4
  9. package/hooks/graceful-pause.mjs +222 -0
  10. package/hooks/hooks.json +2 -1
  11. package/hooks/register.mjs +12 -0
  12. package/package.json +4 -1
  13. package/skills/3d-intro-build/SKILL.md +1 -1
  14. package/skills/3d-intro-setup/SKILL.md +1 -1
  15. package/skills/all-in-one/SKILL.md +160 -55
  16. package/skills/append_wiki/SKILL.md +1 -1
  17. package/skills/arch-diagram/SKILL.md +1 -1
  18. package/skills/audit-mock/SKILL.md +1 -1
  19. package/skills/audit-security/SKILL.md +1 -1
  20. package/skills/audit-web-page/SKILL.md +1 -1
  21. package/skills/cleansing-memory/SKILL.md +1 -1
  22. package/skills/compact-copy/SKILL.md +14 -13
  23. package/skills/compact-wiki/SKILL.md +1 -1
  24. package/skills/curation/SKILL.md +36 -3
  25. package/skills/deep-init/SKILL.md +1 -1
  26. package/skills/deep-research/SKILL.md +1 -1
  27. package/skills/docs-setup/SKILL.md +1 -1
  28. package/skills/humanizer/SKILL.md +1 -1
  29. package/skills/interval-report/SKILL.md +1 -1
  30. package/skills/lineage/SKILL.md +146 -16
  31. package/skills/lineage/lineage.py +1091 -107
  32. package/skills/make-notion-guide/SKILL.md +1 -1
  33. package/skills/motion-graphic-make/SKILL.md +1 -1
  34. package/skills/motion-graphic-setup/SKILL.md +1 -1
  35. package/skills/nothing-design/SKILL.md +1 -1
  36. package/skills/obsidizer/SKILL.md +1 -1
  37. package/skills/omc-reference/SKILL.md +68 -33
  38. package/skills/payload-mon/SKILL.md +66 -0
  39. package/skills/payload-mon/scripts/payload-mon.mjs +377 -0
  40. package/skills/payload-mon/scripts/payload-size.mjs +238 -0
  41. package/skills/pdf-vision-extract/SKILL.md +1 -1
  42. package/skills/play-qa/SKILL.md +1 -1
  43. package/skills/ralph-qa/SKILL.md +263 -112
  44. package/skills/ralph-qa/references/gemini-read-only.toml +9 -0
  45. package/skills/ralph-qa/references/gemini-seat.mjs +175 -0
  46. package/skills/ralph-qa/references/payload-scan.mjs +130 -0
  47. package/skills/ralph-qa/references/verifier-probe.mjs +872 -780
  48. package/skills/ready-compact/SKILL.md +114 -67
  49. package/skills/refresh-git-ignore/SKILL.md +1 -1
  50. package/skills/refresh-readme/SKILL.md +3 -3
  51. package/skills/rfp-author/SKILL.md +3 -3
  52. package/skills/setup-bypass-permissions/SKILL.md +123 -0
  53. package/skills/setup-bypass-permissions/agents/openai.yaml +4 -0
  54. package/skills/setup-bypass-permissions/scripts/bypass-permissions.mjs +381 -0
  55. package/skills/setup-bypass-permissions/scripts/fallback/bypass-permissions.ps1 +247 -0
  56. package/skills/setup-bypass-permissions/scripts/fallback/bypass-permissions.py +241 -0
  57. package/skills/{harness-factory → setup-harness-factory}/SKILL.md +3 -3
  58. package/skills/setup-insane-search/SKILL.md +1 -1
  59. package/skills/setup-java/SKILL.md +1 -1
  60. package/skills/setup-lsp/SKILL.md +1 -1
  61. package/skills/setup-mcp/SKILL.md +1 -1
  62. package/skills/setup-node/SKILL.md +1 -1
  63. package/skills/setup-omc/SKILL.md +11 -4
  64. package/skills/setup-omc-hud/SKILL.md +26 -1
  65. package/skills/setup-omc-hud/scripts/claude-update-last.mjs +247 -0
  66. package/skills/setup-playwright/SKILL.md +1 -1
  67. package/skills/setup-pwsh/SKILL.md +1 -1
  68. package/skills/setup-python/SKILL.md +1 -1
  69. package/skills/setup-sandbox/SKILL.md +1 -1
  70. package/skills/setup-stitch/SKILL.md +1 -1
  71. package/skills/setup-tmux/SKILL.md +1 -1
  72. package/skills/smart-compact/SKILL.md +10 -9
  73. package/skills/summary-wiki/SKILL.md +1 -1
  74. package/skills/tone-compact/SKILL.md +203 -0
  75. package/skills/tone-compact/scripts/tone-compact.mjs +499 -0
  76. package/skills/ultra-init/SKILL.md +53 -42
  77. package/skills/ultra-interview/SKILL.md +1 -1
  78. package/skills/ultra-ui-qa/SKILL.md +1 -1
  79. package/skills/update-banker/SKILL.md +1 -1
  80. package/skills/vertical-pptx/SKILL.md +1 -1
  81. package/skills/vertical-pptx-setup/SKILL.md +1 -1
  82. package/skills/visual-ralph/SKILL.md +1 -1
@@ -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.13.0"
9
+ "version": "0.15.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "banker",
3
- "version": "0.13.0",
3
+ "version": "0.15.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,87 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.15.0] - 2026-10-06
4
+
5
+ ### Added
6
+ - **`/graceful-pause` 명령을 추가했다.** Claude Code 2.1.289 이상에서 function hooks(`hooks/register.mjs`)로 등록하는 즉시 명령이라, 작업 중에 입력해도 턴이 끝나기를 기다리지 않고 바로 실행된다. 그보다 오래된 엔진에서는 등록하지 않고 한 줄로 알린다.\
7
+ 실행되면 사용자에게 보이지 않는 사용자 메시지 1개를 대화에 추가하고(`$.session.append`), 진행 중인 작업은 실행 중인 도구 호출이 끝난 뒤 다음 모델 요청에서 그 메시지를 읽는다. 메시지에는 정지 절차가 들어 있다: 지금 단계만 마무리, 다음 단계 시작 금지, 정지 보고, `AskUserQuestion` 으로 지시 대기.\
8
+ 마지막 답변 도중에 입력해 메모가 읽히지 않은 채 턴이 끝나면 무효 메모를 덧붙여 다음 지시를 가로채지 않게 한다. 쉬는 중이면 진행 중인 작업이 없다고 답한다. 백그라운드 작업이나 예약 실행(`/loop`, ScheduleWakeup)이 남아 있으면, 그 결과가 다음 단계를 시작하지 않도록 메모를 사용자 메시지로 따로 보내 정지 보고를 받는다. 같은 턴에 다시 입력해도 메모는 한 번만 들어간다. `/clear` 하면 진행 중이던 턴의 기록을 비운다.\
9
+ 실행 중인 도구 호출을 끊지는 않으며, 바로 끊으려면 지금처럼 Esc 를 쓴다.
10
+
11
+ - **`setup-bypass-permissions` 스킬을 추가했다.** Claude Code 전역 `settings.json` 의 `permissions.defaultMode` 를 `bypassPermissions` 로 바꿔, 모든 세션에서 도구 실행 확인을 끈다.\
12
+ 모델은 이 스킬을 부를 수 없다(Claude Code 는 `disable-model-invocation`, Codex 는 `agents/openai.yaml` 의 `allow_implicit_invocation: false`). 사용자가 직접 입력해야 실행되고, 켜기 전에 위험 경고를 보여 준 뒤 명시적인 확인을 받는다. 무응답, 시간 초과, 다른 에이전트나 도구가 전한 동의는 확인으로 보지 않는다.\
13
+ `off` 는 켜기 전 값으로 되돌리고, 켜기 전에 없던 `skipDangerousModePermissionPrompt` 도 지운다. `status` 는 현재 값과 켜기를 막는 요인을 보여 준다.\
14
+ 적용은 노드 스크립트(`scripts/bypass-permissions.mjs`)가 한다. 다른 키와 BOM, 파일 모드, 링크를 그대로 둔 채 파일을 통째로 교체하고, 켜기 전 내용을 이 계정만 읽는 `.bypass-permissions.bak` 에 남긴다. `node` 를 쓸 수 없으면 OS 별 폴백(`scripts/fallback/` 의 python3, PowerShell 스크립트)을 쓴다. 이 계정이 파일에 쓸 수 없거나 도구 실행이 막히면, 사용자가 Claude Code 밖에서 실행할 명령을 준다. 도구 실행이 막혔을 때는 다른 도구나 경로로 다시 시도하지 않는다.\
15
+ 관리 정책(`managed-settings.json` 과 `managed-settings.d`)이 막거나 이 계정이 그 정책을 읽을 수 없을 때, 설정 파일 자체의 `disableBypassPermissionsMode`, root 계정(`IS_SANDBOX=1` 도, 참 값의 `CLAUDE_CODE_BUBBLEWRAP` 도 없을 때. Claude Code 2.1.289 와 같은 조건), Claude Code 설정 폴더가 없는 머신에서는 켜지 않는다.\
16
+ `/banker:setup` 목록에서는 따로 묻는 주의 항목이고 기본으로 선택되지 않는다. 고르면 사용자에게 명령을 직접 입력하라고 안내한다. 폴백 스크립트는 테스트가 직접 실행한다(python 3.6, pwsh 7. Windows PowerShell 5.1 은 CI 의 windows 잡에서만 확인).
17
+
18
+ ### Removed
19
+ - **`graceful_pause` 스킬을 뺐다.** 스킬과 플러그인 명령은 작업 중에 입력하면 턴이 끝날 때까지 대기열에 머물러, 정작 필요한 순간에 동작하지 않았다. 같은 이름의 스킬이 있으면 엔진이 즉시 명령 등록을 거부하므로 새 명령 이름은 `/graceful-pause`(하이픈)다.\
20
+ 플러그인을 업데이트하면 옛 스킬이 사라지고, Codex 는 `banker setup --codex` 때 `banker-graceful_pause` 가 정리된다. Codex 에는 즉시 명령 장치가 없어 대응 기능이 없다.
21
+ - **`ralph-qa` 의 GPT, Gemini API 크리덴셜 좌석과 `--external`, `--model` 을 뺐다.** 외부 모델은 좌석 플래그 값(`--codex=<model>` 등)으로 준다.
22
+
23
+ ### Fixed
24
+ - **스킬과 명령 설명 앞의 `(banker)` 를 뺐다.** Claude Code 자동완성은 플러그인 스킬 설명 앞에 플러그인 이름을 스스로 붙여서, `/banker:curation (banker) (banker) 의사결정을...` 처럼 두 번 보였다. Codex 사본은 이름이 `banker-<이름>` 이라 표시가 따로 필요 없다. smoke 가 설명이 `(banker)` 로 시작하지 않는지 확인한다.
25
+
26
+ ### Changed
27
+ - **스킬과 명령 설명을 tone-compact 문체 규칙에 맞췄다.** 설명 60개(스킬 57, 명령 2, `/graceful-pause`) 가운데 규칙을 어긴 설명만 고쳤다.\
28
+ 가운뎃점, 화살표, em dash 같은 장식 기호는 쉼표나 조사로 바꾸고, 명사 4개 이상 연속과 `A=B`, `+` 같은 약식 표기를 풀어 썼다. 영어 일반 단어는 한글로, 파일 이름과 플래그와 명령은 코드 표기로 바꿨다.\
29
+ 트리거 문구, 조건과 한정어, 같은 파일 본문의 용어(드리프트, 노이즈, resume 프롬프트 등)는 그대로 두었고, 가운뎃점으로 묶인 트리거는 빠짐없이 나눴다. 이미 규칙을 지키던 설명과 줄 끝 문자는 바꾸지 않았다.\
30
+ smoke 가 설명마다 장식 기호와 유사 기호, 그림 문자, 느낌표, 번역투(활용형 포함), 25단어 넘는 문장, 여러 줄 YAML 을 검사한다. 코드 구간은 원문이라 기호와 번역투 검사에서 뺀다(25단어 검사는 코드 구간의 단어도 센다).
31
+ - **`ralph-qa` 검증자 구성을 바꿨다.** 세션 모델로 띄운 독립 검토 에이전트 3개 이상이 조건 없이 합의 루프를 돈다(`--agents=N`, 3 미만은 3으로 올림). Claude Code 는 `Plan` 을 `model` 없이 띄우고, Codex 는 `spawn_agent` 를 역할 없이, 저자 대화를 넘기지 않고 띄운다. `Explore` 는 정의가 코드 리뷰 용도를 금하고 세션 모델이 Opus 보다 위면 Opus 로 돌아 쓰지 않는다. 검토자는 파일을 고치지 않고, 게이트(테스트, smoke)는 저자가 돌려 원문 출력을 넘긴다.\
32
+ 외부 좌석은 `--codex`, `--gemini`, `--opencode` 를 줄 때만 앉고, 그 CLI 에서 쓸 수 있는 가장 뛰어난 모델을 쓴다(codex 는 내장 카탈로그 1위, gemini 는 `pro` 별칭). 모델은 로컬 설정과 CLI 내장 목록으로 정하며, 프로브는 HTTP 요청과 프롬프트를 보내지 않는다. 무엇이 가장 뛰어난지 알 수 없거나 후보가 여럿이면 선택지로 묻고(opencode 는 순위가 없어, 설정 모델 말고는 돌릴 모델이 없을 때만 채택한다), 물을 수 없는 실행이면 CLI 설정의 기본 모델로 앉힌 뒤 그 사실과 다른 후보를 보고한다.\
33
+ 저자 계열 모델은 이름 어디에 계열 표시가 있든 외부 좌석에 앉지 않는다(Codex 런타임의 `--codex` 는 자기 자신). 런타임을 모르면 claude 와 gpt 를 모두 빼고, 이름으로 계열을 읽지 못한 모델은 스스로 고르지 않는다.\
34
+ 외부 좌석에는 페이로드를 명령줄 대신 파일로 넘기고(원문 부분은 재지정으로 붙인다. diff 는 임시 인덱스로 만들어 추적하지 않는 새 파일도 담는다), 보내기 전에 `references/payload-scan.mjs` 로 비밀처럼 보이는 문자열을 찾아 가린다. 좌석마다 이 계정만 쓰는 폴더 아래 페이로드 사본 하나만 든 폴더에서 띄우고, 답은 다른 폴더로 받는다.\
35
+ codex 는 읽기 전용 샌드박스에 더해 셸 도구(샌드박스는 셸의 읽기를 막지 않는다)와 그 밖에서 도는 사용자 실행 정책 규칙, MCP 서버, 하위 에이전트, 훅, 알림 프로그램(`notify`), 웹 검색, 사용량 지표 전송, OpenTelemetry 내보내기를 끄고 띄운다. 끌 수 없는 MCP 서버가 있거나, 관리 설정(`/etc/codex/managed_config.toml`)이 그 키를 정하거나, 요구 파일(`/etc/codex/requirements.toml`)이 좌석 값을 허용하지 않으면 좌석을 세우지 않는다.\
36
+ gemini 는 모든 도구를 막는 관리자 정책(`references/gemini-read-only.toml`)으로, MCP 서버와 확장, 텔레메트리의 프롬프트 기록 없이 띄운다. 새 `references/gemini-seat.mjs` 가 보내기 전에 정책 파일과 홈 밖 상위 폴더의 `.env` 를 확인하고, 끝나면 gemini 가 홈 폴더에 남긴 좌석 기록(페이로드 전문)을 지운다. 앞서 끊긴 실행의 기록도 지운다. API 오류 보고(요청 전문)는 `TMPDIR` 을 답 폴더로 두어 그 폴더에 남긴다. 작업 공간을 넓히는 gemini 설정(`context.includeDirectories`, IDE 모드)이 있으면 좌석을 세우지 않는다. opencode 는 실행마다 이름이 다른 전용 검토 에이전트로 모든 도구를 막고 자동 압축을 끈 채, 페이로드를 표준 입력으로 받는다(첨부는 50 KB 에서 잘린다). 셸 문법이 될 수 있는 문자가 든 모델 이름은 버린다.
37
+ - **`lineage` 의 기본 흐름을 세션 모델 검토로 바꿨다(스킬 3.0.0).** 규칙 요약은 긴 답변의 앞뒤 문장을 이어 붙여, 결론 대신 도입이나 맺음말을 고르곤 했다.\
38
+ 이제 스크립트가 규칙으로 1차 정리한 턴을 검토 묶음으로 내보내고(`--emit-review`), 40턴 이하로 고르게 나눈 파트마다 세션이 검토 에이전트를 띄워 턴마다 남길지와 1줄 요약을 정한다. `--apply-review` 가 그 결정으로 HTML 을 만든다.\
39
+ 검토자는 세션 모델로 돈다. Claude Code 는 `Plan` 을 `model` 없이 띄우고(`Explore` 는 검토 용도가 금지되고 세션 모델보다 낮게 돌 수 있어 쓰지 않는다), Codex 는 `spawn_agent` 를 역할 없이 띄운다. 파트가 6개를 넘으면 진행 전에 묻는다. 파트 하나에 검토 에이전트 1개가 돈다(이 저장소 실측: 40턴 파트에 약 11만 토큰, 7분). Codex 검토자에게는 파일 읽기 도구가 없어, 파트 파일을 읽는 셸 명령만 쓰게 한다.\
40
+ 규칙이 확실한 노이즈는 묶음 전에 빠지고, 규칙이 판단한 것(에코 교환, 도구만 쓴 턴)은 표시만 해 검토자가 확정하거나 되살린다. 범위 인자(`--last`, `--turns`)는 규칙이 남기는 턴으로 세어 `--rulebase` 와 같은 턴을 고른다.\
41
+ 묶음과 파트 파일에는 redact 된 본문만 들어가고 0600 으로 쓴다. 검토자가 읽는 파트 파일은 `--redact-mode mask` 여도 값의 일부를 남기지 않고, 페이지에는 없는 키 패턴(URL 자격 증명, Bearer 토큰, 따옴표 친 꼴을 포함한 Basic 인증 헤더, 붙여 쓴 꼴을 포함한 curl `-u`)도 키를 통째로 가린다. 파트의 규칙 요약은 가린 본문에서 만든다. `--redact-extra` 키워드 목록은 파일에 쓰지 않고, 파트 파일에서는 도구 이름의 키워드까지 가린다. 검토자 요약은 캐시를 거쳐 다음 검토자에게 다시 가므로, `--redact-mode` 와 관계없이 키를 통째로 가린 뒤 120자로 자른다. 렌더가 성공하면 묶음, 파트, 결정 파일을 지운다.\
42
+ 품질 게이트 인자(`--skip-reviewer`, `--reviewer-output`, `--reviewer-timeout`)는 `--emit-review` 에 준 값이 `--apply-review` 까지 간다. 기본 흐름의 게이트는 `--reviewer-output` 을 줄 때만 돌고, `--apply-review` 를 전경으로 두 번 실행한다(첫 실행이 샘플을 쓰고 멈추면 critic 판정을 쓴 뒤 다시 실행). 샘플은 같은 턴이면 같은 턴을 뽑고 파트 파일 기준으로 가리며(요약도 가린 본문에서 만든다), 샘플마다 턴 id 와 내용 지문(`key`)이 붙는다. 판정은 샘플마다 하나씩, 그 샘플의 id 와 key 를 담아야 통과한다. 그래서 결정을 고치기 전 샘플에 대한 늦은 판정은 통과하지 못한다. 읽은 판정 파일은 `.used` 로 옮겨 다시 실행할 때 새 판정을 기다리고, 샘플이 바뀌면 그 전에 있던 판정 파일은 읽지 않는다. 판정 경로에 판정 목록이 아닌 것(사용자 파일, 폴더)이 있으면 샘플을 쓰기 전에 멈추고 그 파일을 건드리지 않는다. critic 은 검토자와 같은 세션 모델 하위 에이전트이고, 샘플을 프롬프트 본문으로 받아 도구를 쓰지 않는다. 띄울 수 없으면 세션이 스스로 판정하지 않는다. FAIL 과 판정 범위 오류가 합쳐 두 번 이어지면 세션이 멈추고 사용자에게 묻는다. `--keep-trivia`, `--keep-tool-only` 는 검토자의 `keep: false` 보다 앞선다. 검토자 결정은 캐시되어, 다음 실행에서는 본문, 규칙 결정, keep 플래그가 바뀐 턴만 다시 검토한다(캐시 폴더에 쓸 수 없으면 WARN).\
43
+ 2.x 의 한 번 실행(규칙만, 모델 호출 없음)은 `/lineage --rulebase` 다. 스크립트를 리뷰 인자 없이 부르면 출력(HTML, stdout, stderr)이 예전과 같고, 2.0.0 출력과 바이트 단위로 같은지 테스트가 고정한다. 출력 밖의 차이는 셋이다: 게이트 샘플 파일을 0600 으로 쓰고, 캐시 폴더에 쓸 수 없으면 traceback 대신 WARN 을 내고 계속한다. 기록의 턴 id 와 세션 이름으로 캐시 파일 이름을 만들 때 영숫자, `_`, `.`, `-` 밖의 글자는 `_` 로 바꾼다. 조작한 id 로 캐시 밖에 파일을 쓰지 못하고, 그런 이름의 기록은 캐시를 한 번 다시 만든다.
44
+ - **`harness-factory` 스킬 이름을 `setup-harness-factory` 로 바꿨다.** 다른 설치 스킬(`setup-*`)과 이름을 맞췄다. 호출은 `/banker:setup-harness-factory`, Codex 는 `banker-setup-harness-factory` 다.\
45
+ 플러그인을 업데이트하면 옛 이름은 사라진다. Codex 는 `banker setup --codex` 때 `banker-harness-factory` 를 정리하고 새 이름으로 설치한다. `/banker:setup` 목록의 항목 이름도 바뀌었다.
46
+ - **`setup-omc-hud` 가 Claude Code 갱신 안내를 상태표시줄 맨 끝으로 옮긴다.** 새 Claude Code 가 나오면 OMC 5.6.1 HUD 는 `[Claude#2.1.288] -> 2.1.289 claude update` 를 띄우는데, omc_hud 래퍼는 이 안내를 구판에서는 버리고 최신판에서는 경로 앞 줄 중간에 흐리게 둔다.\
47
+ 적용 단계 끝에 `scripts/claude-update-last.mjs on` 을 실행해, 래퍼가 세그먼트를 합치기 직전 줄(`let result = colored.join(SEP);`) 앞에 블록 1개를 넣는다. 블록은 안내를 원래 자리에서 빼 OMC 표시 뒤 맨 끝에 흐리게 붙이고, 안내가 없으면 아무것도 하지 않는다. OMC 가 2번째 줄에 따로 띄우는 `[!] claude <버전> - paste: ! claude update` 는 그대로 남는다. OMC `safeMode` 를 꺼 공백이 U+00A0 으로 바뀐 안내도 찾는다.\
48
+ payload-mon 과 같은 규칙을 따른다. 바꾸기 전 내용은 `.claude-update-last.bak` 에 남기고, `node --check` 를 통과하지 못하는 결과는 쓰지 않으며, 개수나 순서가 맞지 않는 표시와 낯선 래퍼는 거부하고, `off` 는 블록만 빼서 바이트 그대로 되돌린다. payload-mon 블록과는 서로 건드리지 않는다.
49
+
50
+ ## [0.14.0] - 2026-10-04
51
+
52
+ ### Added
53
+ - **`tone-compact` 스킬을 추가했다.** 답변과 새 문서를 ASD-STE100 기반의 간결한 한글 개조식으로 쓰게 하는 문체 규칙을 켜고 끈다(인자가 없으면 `on`).\
54
+ 규칙은 단어 중심 개조식, 줄글 대신 표, 문장 속 나열 대신 세로 목록, em dash 대신 하이픈, 직접 만든 약어·이모지·장식 기호·감탄사 금지, 어색한 번역어 대신 원어의 한글 발음 표기다. 줄여 쓰더라도 부정어는 지우지 않고, 보안 경고·되돌리기 어려운 동작의 확인·순서가 중요한 절차는 완전한 문장으로 쓴다.\
55
+ 켜짐 상태는 `off` 할 때까지 모든 세션에 남는다. Claude Code 는 `<설정 폴더>/rules/banker-tone-compact.md`(세션 시작과 compaction 뒤 자동 로드), Codex 는 전역 지침 파일(`AGENTS.override.md` 에 블록 말고도 내용이 있으면 그쪽, 없으면 `AGENTS.md`) 끝의 블록 1개다. 이 블록은 `USER:OMX:POLICY` 표시로 감싸 `omx setup --merge-agents` 와 기본 `omx setup` 이 파일을 다시 써도 남는다(`--force`, 덮어쓰기 확인, team 모드를 끈 `omx setup` 은 파일을 새로 만들므로 그 뒤 `on` 을 다시 실행). `off` 는 켜기 전 바이트 그대로 되돌린다.\
56
+ 표시는 한 줄 전체로 시작과 끝이 차례로 와야만 블록으로 인정한다. 문장 속에 인용된 표시가 있으면 `on`·`off` 모두 거부해, 사용자의 다른 지침을 잘라 내지 않는다. UTF-8 이 아닌 지침 파일(CP949, UTF-16)도 손대지 않고 거부한다. 글자로 읽어 다시 쓰면 원래 바이트를 잃기 때문이다.
57
+ - **`graceful_pause` 스킬을 추가했다.** 진행 중인 작업을 지금 단계까지만 마무리하고 멈춘 뒤, 상태를 보고하고 중간 지시를 기다린다.\
58
+ `cancel` 과 달리 켜져 있는 모드(ralph·autopilot·ultragoal·team)와 계획을 그대로 두어, 지시를 받은 뒤 같은 흐름으로 이어 간다. 작업 중에 대기 입력으로 넣어 두면 그 입력이 읽히는 시점에 동작하며, 즉시 끊지는 않는다.\
59
+ Claude Code 는 `AskUserQuestion` 으로 묻고, 질문이 열려 있는 동안은 지속 모드가 끼어들지 않는다. Codex 에서 질문 도구 없이 지속 모드가 켜져 있으면 OMX Stop 훅 때문에 응답을 끝내도 멈출 수 없으므로, 그 사실을 알리고 계속할지 `cancel` 할지 묻는다.
60
+ - **`payload-mon` 스킬을 추가했다.** OMC HUD 상태표시줄의 ctx 옆에 현재 세션의 API 요청 payload 추정치(32MB 한도 대비, 8MB부터)를 켜고 끈다.\
61
+ 블록은 래퍼의 ctx 줄 뒤 하나라 구판과 최신 omc_hud 래퍼 모두에 들어가고, 추정 모듈은 래퍼 옆 사본을 불러와 플러그인 업데이트로 옛 버전 경로가 정리돼도 표시가 유지된다. 추정치 캐시는 계정별 폴더에 소유를 확인한 뒤에만 쓴다. `setup-omc-hud` 는 HUD 를 다시 깔 때 켜져 있던 payload-mon 을 다시 켠다.
62
+ - **`curation --deep` 을 추가했다.** `--perf` 처럼 품질을 우선하되, 확신 0.80 이하인 결정은 조사(코드·문서·웹·안전한 실측)와 검토(가장 강한 반대안, 가능하면 독립 검토자)를 더 해 0.80 초과로 올린 뒤 제시한다.\
63
+ 결정마다 최대 3회차이고 새 증거가 없으면 멈춘다. 그래도 미달이면 확신을 부풀리지 않고, 판단을 막는 변수를 사용자 질문으로 바꿔 내놓는다. 결과에는 결정별 조사 이력이 붙는다.
64
+
65
+ ### Fixed
66
+ - **OMC 5 에서 `all-in-one` 이 멈추던 문제를 고쳤다.** 원인은 두 가지였다.\
67
+ 첫째, 3단계가 부르던 `ultraqa` 가 OMC 5.0.0 에서 대체 이름 없이 삭제됐다. 공식 대체인 `verify` 는 증거만 모으고 고치지는 않으므로, 3단계를 독립 verifier → architect 진단 → executor 수정의 순환(최대 5회, 같은 실패 3회면 중단)으로 직접 돌린다. 변경 전부터 있던 실패(`ralph` 가 기록한 기준선)는 보고만 하고 게이트에서 막지 않는다. Codex 는 OMX 가 아직 제공하는 `ultraqa` 를 그대로 쓴다.\
68
+ 둘째, OMC 5 의 `ralph` 는 첫 반복에 `omc ralph verify` 를 실행하고 없으면 멈추는데, 플러그인보다 낡은 전역 `omc` CLI(4.x)에는 이 명령이 없다. 4.x 는 모르는 명령에도 도움말을 찍고 종료 코드 0 을 내므로, 사전 점검을 종료 코드가 아니라 출력 문구로 판정하게 바꿨다.
69
+ - **`ralph` 인계에 OMC 5.6.1 의 함정 두 가지를 반영했다(`all-in-one`·`ultra-init`).**\
70
+ `omc ralph verify` 는 피드백 명령 출력의 모든 줄을 서명으로 남기고 `<숫자><단위>` 꼴 시간만 지운다. 그래서 node:test 기본 출력의 `ℹ duration_ms 151.4` 와 `ℹ tests 8` 줄 때문에 코드를 바꾸지 않아도 매번 새 실패가 된다. 기준선을 기록하기 전에 실패만 출력하는 명령(node:test 는 `FORCE_COLOR=0 NODE_NO_WARNINGS=1` 과 `--test-reporter=dot`, 점 줄 필터)을 PRD `feedbackCommands` 로 정하게 했다. 색상이 켜진 환경에서는 점 줄에 색상 코드가 섞여 필터를 지나가므로 두 변수가 필요하다. 또 `ralph` 가 작업 설명에 `repoQualityClass` 가 없으면 사용자에게 묻기 때문에, 저장소 신호로 추론해 넘기게 했다.\
71
+ QA 게이트에 들어가기 전에 QA 명령을 변경 전 트리에서 한 번 실행해 사전 실패를 기록한다(Codex 의 OMX `ralph` 에는 기준선이 없어 이것이 유일한 기준선이다). 사전 실패는 이 기록이나 `ralph` 기준선(같은 세션의 `omc ralph verify --json`, `baselinePresent: true` 확인)에 있는 것뿐이고, 나머지는 모두 새 실패다. 변경 전 상태를 만들려고 `git stash`·`git reset` 을 쓰지 않는다.
72
+ - **`ultra-init` 에서 ultragoal 원장 단계를 뺐다.** OMC 5.6.1 의 `omc ultragoal checkpoint` 는 `complete-goals` 로 시작한 목표에만, 그 목표가 켜는 Claude Code `/goal` 의 스냅샷과 함께 기록된다. `/goal` 을 켜면 ralph 옆에 Stop 훅 루프가 하나 더 생기므로, 마지막 기록 단계가 반드시 실패하던 구성을 계획 파일과 ralph PRD 로 이어 가는 구성으로 바꿨다. `--plan-id` 는 함께 없어졌다.
73
+ - **같은 원인이 있던 곳도 고쳤다.** `ultra-init`(`ultraqa`·`ultrawork` 참조와 CLI 점검), `/banker:front-qa`(CLI 점검), `setup-omc`(의존 설명과 CLI 만 따로 올리는 방법), `omc-reference`(OMC 5.6.1 기준 스킬·에이전트·키워드·삭제 목록, plan/review 의 플러그인 이름, Team 도구 변화, OMX 0.20.2 목록), `rfp-author`(삭제된 `deep-dive` → `research`). CLI 점검은 Claude Code 에만 걸고, Codex 는 `omx --version` 으로 확인한다.
74
+
75
+ ### Changed
76
+ - **`ready-compact` 가 resume 프롬프트만 출력한다.** 최종 메시지가 펜스도 앞뒤 설명도 없는 프롬프트 본문뿐이라, `/copy` 한 번이면 프롬프트만 복사된다(이전에는 설명이 섞여 `compact-copy` 를 거쳐야 했다). 메시지에 코드 블록이 있으면 `/copy` 가 선택 창을 띄우므로 프롬프트 안에도 펜스를 쓰지 않는다. 저장에 실패하면 별도 보고 대신 프롬프트 둘째 줄에 경고가 붙는다.\
77
+ 지속 모드(ralph 등)의 Stop 훅이 프롬프트 뒤에 계속하라는 메시지를 넣으면, 작업을 다시 시작하지 않고 같은 프롬프트를 다시 낸다. 그래야 마지막 메시지가 프롬프트로 남는다.
78
+ - **`ready-compact --hand-off` 를 추가했다.** 같은 세션의 `/compact` 가 아니라 새 세션에서 처음부터 이어 가도록 준비한다.\
79
+ 새 세션에는 이번 대화가 없으므로, 노트에 작업 위치(절대경로·브랜치·마지막 커밋), 대화에서 정한 결정과 이유, 켜져 있는 모드와 상태 파일, 그 모드를 새 세션에서 다시 켜는 방법, 실행 중인 백그라운드 작업까지 옮기고, `[HANDOFF]` 프롬프트가 그 노트를 먼저 읽게 한다. 지속 모드가 켜져 있으면 유지할지 cancel 할지 먼저 묻는다. 노트는 Claude Code 에선 자동 메모리 폴더(꺼져 있으면 `.omc/handoffs/`), Codex 에선 작업 폴더의 `.omx/handoffs/` 에 둔다. 같은 머신의 새 세션이 대상이며, 다른 머신으로 넘길 때는 결정과 이유를 프롬프트에 직접 넣는다.
80
+ - `compact-copy` 는 이제 설명과 코드펜스가 섞인 이전 형식의 출력에서 프롬프트를 뽑을 때만 필요하다. `[HANDOFF]` 프롬프트도 인식한다.
81
+ - `graceful_pause` 는 세션을 끝내려는 사용자에게 `ready-compact --hand-off` 를 안내한다.
82
+ - `smart-compact` 는 `compact-copy` 를 더 거치지 않는다. TUI 3단(`/copy` → `/compact` → 붙여넣기) 안내를 `ready-compact` 앞에 한 줄로 하고, 마지막 메시지를 프롬프트로 끝낸다.
83
+ - `refresh-readme` 의 개수 점검 예시를 특정 숫자에 묶지 않게 바꿨다.
84
+
3
85
  ## [0.13.0] - 2026-08-12
4
86
 
5
87
  ### Changed
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  [빠른 시작](#빠른-시작) · [워크플로 예시](#워크플로-사용-예시) · [구성](#구성) · [설치 상세](#설치-상세-npm--codex) · [설정 변경 지점](#설정-변경-지점-claude-code--codex) · [요구사항](#요구사항) · [업데이트 / 제거](#업데이트--제거) · [업데이트 확인](#업데이트-확인-및-사용량-카운팅) · [라이선스 / 서드파티](#라이선스--서드파티)
10
10
 
11
- banker는 QA·보안 감사·문서·아키텍처·위키·미디어 작업과 의존성·개발환경(OS별) 설치를 아우르는 **스킬 54개 + 커맨드 2개**(총 56개 구성요소)를 묶은 Claude Code 플러그인입니다.\
11
+ banker는 QA·보안 감사·문서·아키텍처·위키·미디어 작업과 의존성·개발환경(OS별) 설치를 아우르는 **스킬 57개 + 커맨드 2개**(총 59개 구성요소)와 Claude Code 즉시 명령 `/graceful-pause` 를 묶은 Claude Code 플러그인입니다.\
12
12
  설치하면 스킬과 커맨드가 `/banker:<이름>` 네임스페이스로 노출됩니다.\
13
13
  이 저장소 자체가 Claude Code 마켓플레이스(`.claude-plugin/marketplace.json`)이자 플러그인(`.claude-plugin/plugin.json`, name `banker`)이며, 도구에 무관한 스킬은 Codex CLI에도 설치됩니다.
14
14
 
@@ -50,14 +50,16 @@ Claude Code는 `/banker:<이름>`, Codex는 `banker-<이름>` 으로 호출합
50
50
  |---|---|---|
51
51
  | `ultra-interview` | 처음 프로젝트 아이디어를 구체화할 때 | 최신 정보를 반영한 소크라테스식 인터뷰 |
52
52
  | `ultra-init` | 프로젝트 기획이 충분히 구체적일 때 | 데모를 구현 |
53
- | `curation` | 질문에 답하기 어렵거나 의사결정이 어려울 때 | 합리적 선택지 제공 (`--perf` 옵션 = 품질 우선) |
53
+ | `curation` | 질문에 답하기 어렵거나 의사결정이 어려울 때 | 합리적 선택지 제공 (`--perf` = 품질 우선, `--deep` = 확신 0.80 초과까지 추가 조사) |
54
54
  | `all-in-one` | 요건이 명확한 단계에서 | 계획 → 구현 → 검증 |
55
- | `ralph-qa` | 검증이 충분하지 않을 때 | 다중 Agent 백본 + 유효한 외부 LLM 좌석 |
55
+ | `ralph-qa` | 검증이 충분하지 않을 때 | 세션 모델로 띄운 독립 검토 에이전트 3개 이상의 합의 루프 (+ 플래그로 고른 CLI 좌석) |
56
56
  | `smart-compact` | 컨텍스트 임계 초과로 맥락 단절이 걱정될 때 | 맥락을 더 잘 이어서 진행 |
57
57
  | `refresh-readme` | 프로젝트 배포 전 | README 최신화 |
58
58
  | `summary-wiki` | Agent가 아는 정보를 확인하고 싶을 때 | 요약 리포트 |
59
59
  | `cleansing-memory` | 프로젝트가 장기화될 때 | 메모리 최적화 |
60
- | `ready-compact` | 컨텍스트를 compact 하거나 새 세션을 대비할 때 | 이어갈 프롬프트를 준비 |
60
+ | `ready-compact` | 컨텍스트를 compact 하거나 새 세션을 대비할 때 | 이어갈 프롬프트만 출력(`/copy` 한 번이면 복사), `--hand-off` = 새 세션에서 이어가기 |
61
+ | `/graceful-pause` | 작업 도중 방향을 바꾸거나 끼어들고 싶을 때 | 작업 중에 입력해도 바로 전달. 실행 중인 도구 호출이 끝나면 그 단계까지만 마무리하고 멈춘 뒤 지시를 기다림 (Claude Code) |
62
+ | `tone-compact` | 답변을 짧은 한글 개조식으로 받고 싶을 때 | 문체 규칙을 켜 두면 끌 때까지 모든 세션에 적용 |
61
63
 
62
64
  ## 구성
63
65
 
@@ -67,6 +69,9 @@ Claude Code는 `/banker:<이름>`, Codex는 `banker-<이름>` 으로 호출합
67
69
  |---|---|
68
70
  | `/banker:front-qa` | 스펙(note) 기반 프론트엔드 구현 + parity QA |
69
71
  | `/banker:setup` | 구성요소·의존성 설치 오케스트레이터 (multi-select) |
72
+ | `/graceful-pause` | 작업 중에도 바로 실행되는 정지 요청. 지금 단계만 끝내고 멈춘 뒤 보고하고 지시를 기다림 (Claude Code 2.1.289 이상, function hooks. Codex 미지원) |
73
+
74
+ `/graceful-pause` 는 `commands/` 가 아니라 function hooks(`hooks/register.mjs`)로 등록되는 명령이라 구성요소 수에 넣지 않습니다.
70
75
 
71
76
  ### 스킬: QA · 감사
72
77
 
@@ -90,7 +95,7 @@ Claude Code는 `/banker:<이름>`, Codex는 `banker-<이름>` 으로 호출합
90
95
  | `nothing-design` | Nothing 스타일 UI 디자인 적용 |
91
96
  | `rfp-author` | 외주 제안요청서(RFP) 저작 (범용 프레임워크) |
92
97
  | `humanizer` | AI 글 흔적 제거(자연스러운 문체로 윤문) |
93
- | `lineage` | 세션 대화를 카카오톡 스타일 단일 HTML로 export (마크다운 렌더·하네스 노이즈 필터·다중 세션 병합) |
98
+ | `lineage` | 세션 대화를 카카오톡 스타일 단일 HTML로 export. 세션 모델이 턴마다 1줄 요약을 쓰고 남길 턴을 고름(`--rulebase` 는 규칙만), 마크다운 렌더, 다중 세션 병합 |
94
99
  | `append_wiki` | 프로젝트 위키 문서 추가/보강 |
95
100
  | `compact-wiki` | 위키 중복 제거·supersede·병합 (무손실) |
96
101
  | `obsidizer` | AI 위키를 의미보존 Obsidian 그래프로 정규화·상호링크·백링크 |
@@ -106,12 +111,12 @@ Claude Code는 `/banker:<이름>`, Codex는 `banker-<이름>` 으로 호출합
106
111
  |---|---|
107
112
  | `all-in-one` | 계획→구현→검증 end-to-end 오케스트레이터 |
108
113
  | `ultra-init` | 아이디어→빌드→테스트 원샷 자동 실행 |
109
- | `ready-compact` | 컨텍스트 compaction 직전 상태 저장/이어가기 |
110
- | `compact-copy` | resume 프롬프트만 추출해 클립보드/파일로(compaction 이어가기) |
114
+ | `ready-compact` | 이어가기 상태 저장 + resume 프롬프트만 출력(`--hand-off` = 새 세션용 자급식 노트·프롬프트) |
115
+ | `compact-copy` | 설명·코드펜스가 섞인 resume 프롬프트 출력에서 본문만 추출(지금의 ready-compact 는 처음부터 프롬프트만 출력) |
111
116
  | `refresh-git-ignore` | `.gitignore` 비파괴·반복가능 갱신 |
112
117
  | `omc-reference` | OMC/OMX 에이전트·툴·스킬 레퍼런스(양 런타임 병기) |
113
- | `curation` | 의사결정을 선택지·권고·확신수준으로 큐레이션(--perf=품질 우선) |
114
- | `ralph-qa` | 다중 Agent 백본이 항상 돌고, 실제로 유효한 외부 LLM 만 좌석으로 합류해 독립 검증 반복 |
118
+ | `curation` | 의사결정을 선택지·권고·확신수준으로 큐레이션(--perf=품질 우선, --deep=확신 0.80 이하는 추가 조사·검토 후 제시) |
119
+ | `ralph-qa` | 세션 모델로 띄운 독립 검토 에이전트 3개 이상이 합의할 때까지 검증 반복. `--codex`·`--gemini`·`--opencode` 를 주면 그 CLI 에서 가장 뛰어난 모델이 좌석으로 합류 |
115
120
  | `smart-compact` | 컨텍스트 임계 초과 시 위키·resume 저장 게이트 자동 무장 |
116
121
  | `deep-research` | 다중 소스 팬아웃 + 적대적 검증 인용 리서치 |
117
122
  | `ultra-interview` | 리서치 선행으로 사람 질문 최소화, 모호성 3% 이하까지 인터뷰 |
@@ -120,6 +125,8 @@ Claude Code는 `/banker:<이름>`, Codex는 `banker-<이름>` 으로 호출합
120
125
  | `update-banker` | 설치된 banker 를 3채널(Claude·npm·Codex) 순서 게이트로 최신화 |
121
126
  | `refresh-readme` | 코드와 어긋난 README 를 현재 상태에 맞게 갱신(드리프트 해소) |
122
127
  | `cleansing-memory` | 메모리 파일을 문서화된 threshold 내로 정리(중복 최신본화·무손실 압축) |
128
+ | `payload-mon` | 상태표시줄 ctx 옆에 요청 payload 추정치(32MB 한도 대비, 8MB부터) 표시 켜기·끄기 |
129
+ | `tone-compact` | 답변과 새 문서를 ASD-STE100 기반 한글 개조식(표·목록·원어 발음 표기·장식 기호 금지)으로 쓰는 문체 규칙 켜기·끄기(on 기본, 끌 때까지 유지) |
123
130
 
124
131
  ### 스킬: 미디어 (모션 그래픽 · 3D 인트로)
125
132
 
@@ -149,15 +156,16 @@ USER_RESOURCES 가이드의 공통 요소를 OS별·런타임별(Claude Code/Cod
149
156
  | 스킬 | 설명 |
150
157
  |---|---|
151
158
  | `setup-omc` | oh-my-claudecode(OMC) 설치·갱신 (Codex는 OMX) |
152
- | `harness-factory` | revfactory/harness 팀 아키텍처 팩토리 설치·구성·사용안내 (Codex=meta-harness) |
159
+ | `setup-harness-factory` | revfactory/harness 팀 아키텍처 팩토리 설치·구성·사용안내 (Codex=meta-harness) |
153
160
  | `setup-playwright` | Playwright + headless 브라우저 (RHEL8/Rocky8·non-root·no-conda 폴백) |
154
- | `setup-omc-hud` | omc_hud 상태표시줄 (OS별) |
161
+ | `setup-omc-hud` | omc_hud 상태표시줄 (OS별). Claude 갱신 안내는 줄 맨 끝 |
155
162
  | `setup-insane-search` | insane-search 플러그인 설치 (Claude·Codex) |
156
163
  | `setup-stitch` | Stitch 디자인 MCP 프록시 등록(RockyLinux8 proxy) |
157
164
  | `docs-setup` | arch-diagram·pdf-vision-extract 의존성(pptx·pymupdf·plantuml) 설치 |
158
165
  | `vertical-pptx-setup` | vertical-pptx 의존성(pptxgenjs·python-pptx) + 시각 검증용 LibreOffice (OS·권한 적응형) |
159
166
  | `motion-graphic-setup` | hyperframes(무료 모션 그래픽 CLI) 전제조건 설치 (Node≥22 + ffmpeg) |
160
167
  | `3d-intro-setup` | 3D 인트로용 Azure 크레덴셜·의존성 설치 + 무과금 프리플라이트 (Node/ffmpeg) |
168
+ | `setup-bypass-permissions` | Claude Code 기본 권한 모드를 `bypassPermissions` 로 바꿔 모든 세션에서 도구 실행 확인을 끔. 사용자가 직접 입력해야 실행(모델은 호출 불가), 위험 경고와 확인 뒤 적용, `off` 로 원복. `/banker:setup` 에서는 기본 미선택 |
161
169
 
162
170
  ## 설치 상세 (npm · Codex)
163
171
 
@@ -175,11 +183,16 @@ banker uninstall # 제거
175
183
 
176
184
  - `--scope project` 로 프로젝트 로컬(`./.codex`)에 설치하고, `--dry-run` 으로 미리 볼 수 있습니다.
177
185
  - non-root 전용입니다(전역 sudo 설치 시 root 소유 파일을 방지). postinstall이 없으므로 `banker setup` 을 직접 실행합니다.
178
- - Codex에는 스킬 54개가 `~/.codex/skills/banker-<name>/` 에, 커맨드 2개가 `~/.codex/prompts/banker-<name>.md` 에 설치됩니다(`codex/manifest.json`). \
186
+ - Codex에는 스킬 57개가 `~/.codex/skills/banker-<name>/` 에, 커맨드 2개가 `~/.codex/prompts/banker-<name>.md` 에 설치됩니다(`codex/manifest.json`). \
179
187
  디렉터리명과 일치하도록 프론트매터 `name:` 이 `banker-<name>` 으로 재작성되어 Codex가 `banker-<name>` 으로 인식합니다.
180
188
  - OMC/Claude 에 결합됐던 오케스트레이터·설치·유틸 표면(all-in-one·ultra-init·front-qa·setup·setup-omc·setup-omc-hud·setup-stitch·omc-reference·compact-copy)은 본문이 **런타임 인식**이라 Codex에서도 동작합니다.
189
+ - `payload-mon` 은 Codex에서 실행해도 같은 머신의 Claude Code HUD 래퍼만 켜고 끕니다. \
190
+ 32MB 요청 한도는 Claude Code 의 것이라 Codex 자신의 요청 크기는 재지 않습니다.
181
191
  - Codex에선 OMC 대신 **oh-my-codex(OMX)** 의 동명 스킬(ralplan·ralph·ultraqa·hud 등)과 `codex mcp`·내장 `/copy` 를 사용합니다(Codex는 `omx setup` 전제).
182
- - `~/.codex/AGENTS.md` 는 건드리지 않습니다(omx가 재생성하므로 `~/.codex/skills/` 자동 검색에 의존).
192
+ - OMC 5 는 `ultraqa` 를 삭제했습니다. 그래서 Claude Code 의 `all-in-one`·`ultra-init` QA 게이트는 `verify` 순환으로 돌고, Codex 는 OMX `ultraqa` 를 그대로 씁니다.
193
+ - 설치기는 `~/.codex/AGENTS.md` 를 건드리지 않습니다(omx가 재생성하므로 `~/.codex/skills/` 자동 검색에 의존). \
194
+ 예외는 사용자가 켠 `tone-compact` 하나입니다. 그 파일 끝에 `USER:OMX:POLICY` 로 감싼 블록 1개를 넣고, `off` 로 뺍니다. \
195
+ `omx setup --merge-agents` 와 기본 `omx setup` 은 이 블록을 남깁니다. `--force` 나 team 모드를 끈 `omx setup` 처럼 AGENTS.md 를 새로 만들면 사라지므로, 그 뒤 `on` 을 다시 실행합니다.
183
196
 
184
197
  ## 설정 변경 지점 (Claude Code · Codex)
185
198
 
@@ -211,12 +224,15 @@ banker uninstall # 제거
211
224
  | `setup-mcp` | `claude mcp add` (context7·seq-thinking·filesystem·git·fetch) | `[mcp_servers.*]` |
212
225
  | `setup-lsp` | LSP MCP 등록 | `[mcp_servers.lsp_bridge]` |
213
226
  | `setup-stitch` | `claude mcp add stitch` | `codex mcp add stitch` |
214
- | `setup-omc-hud` | `statusLine` | — (Codex는 OMX `hud`) |
227
+ | `setup-omc-hud` | `statusLine` + `hud/omc-hud-custom.mjs` 에 Claude 갱신 안내를 줄 맨 끝으로 옮기는 블록 1개(`.claude-update-last.bak` 백업·멱등·`node --check` 검증, `off` 로 원복) | — (Codex는 OMX `hud`) |
215
228
  | `setup-pwsh` | `env.CLAUDE_CODE_GIT_BASH_PATH` (병합) | — (네이티브 셸, 배선 불필요) |
216
- | `harness-factory` | `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` (env 영속) | — |
229
+ | `setup-harness-factory` | `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` (env 영속) | — |
217
230
  | `smart-compact` | `statusLine.command` 래핑 + `UserPromptSubmit` 훅 추가 (백업·멱등) | `~/.codex/` 대응 |
231
+ | `payload-mon` | `hud/omc-hud-custom.mjs` 에 표시 블록 1개 삽입(`.payload-mon.bak` 백업·멱등·`node --check` 검증) + 래퍼 옆 `hud/payload-mon/` 에 모듈 사본 (`off` 로 원복) | — (Codex에서 실행해도 Claude Code HUD 만 다룸) |
232
+ | `tone-compact` | `rules/banker-tone-compact.md` 생성 (`off` 로 삭제) | `AGENTS.md`(내용이 있는 `AGENTS.override.md` 우선) 끝에 `USER:OMX:POLICY` 로 감싼 블록 1개(`.tone-compact.bak` 백업·멱등, `off` 로 원복) |
218
233
  | `motion-graphic-setup` | 설정 파일 미패치 (Node/ffmpeg 확보 + `npx hyperframes` 설치만) | 동일 (`config.toml` 미변경) |
219
234
  | `3d-intro-setup` | `settings.json` 미패치 — 크레덴셜을 untracked env 파일에 기록(`.env.3d-intro.local` 또는 `~/.config/banker/3d-intro/env`) | 동일 (`config.toml` 미변경) |
235
+ | `setup-bypass-permissions` | `permissions.defaultMode` = `bypassPermissions` (켜기 전 내용은 `settings.json.bypass-permissions.bak`, 되돌리기 기록은 `settings.json.bypass-permissions.json`, `off` 로 원복. 관리 정책, 설정 파일의 금지 키, root 계정이면 거부) | Codex 에서 실행해도 같은 머신의 Claude Code 설정을 바꿈 (Codex 승인 정책은 미변경) |
220
236
 
221
237
  `obsidizer` 는 `settings.json` 대신 `<위키디렉터리>/.obsidizer` 플래그 파일로만 켜고 끕니다.
222
238
 
@@ -225,8 +241,10 @@ banker uninstall # 제거
225
241
  - Claude Code (마켓플레이스 경로): 스킬이 `/banker:*` 로 동작.
226
242
  - 또는 Node.js ≥ 16.7 (npm 전역 설치 경로): `banker` CLI 제공.
227
243
  - 일부 스킬은 별도 의존성이 필요하며 `/banker:setup` 으로 설치합니다. 의존성이 없으면 각 스킬이 실행 전에 설치부터 안내합니다.
228
- - `all-in-one`, `ultra-init`, `/banker:front-qa`: oh-my-claudecode(OMC). Codex에서는 OMX.
244
+ - `all-in-one`, `ultra-init`, `/banker:front-qa`: oh-my-claudecode(OMC) 5 와 같은 버전대의 `omc` CLI(`ralph` 가 `omc ralph verify` 를 부르므로 4.x CLI 로는 멈춤). Codex에서는 OMX.
229
245
  - `audit-web-page`, `play-qa`, `ultra-ui-qa`: playwright.
246
+ - `payload-mon`: OMC 커스텀 HUD 래퍼(`setup-omc-hud` 로 설치).
247
+ - `/graceful-pause`: Claude Code 2.1.289 이상(function hooks). 그보다 오래된 Claude Code 는 명령을 등록하지 않고 한 줄로 알리며, Codex 에는 이 명령이 없습니다.
230
248
  - `lineage`: Python 3.7+ (표준 라이브러리만 사용). RHEL8/Rocky8은 기본 `python3` 가 3.6이라 `setup-python` 등으로 3.11을 설치해 지정해야 합니다.
231
249
 
232
250
  ## 업데이트 / 제거
@@ -249,6 +267,21 @@ banker uninstall # 제거
249
267
 
250
268
  Codex는 재설치할 때마다 기존 `banker-*` 를 먼저 정리하므로 옛 버전이 중복으로 남지 않습니다.
251
269
 
270
+ > `payload-mon` 을 켰다면 제거 전에 `/banker:payload-mon off`(Codex는 `banker-payload-mon` 에 `off`)를 실행하세요.\
271
+ > 표시 블록과 모듈 사본은 플러그인 밖(`~/.claude/hud/`)에 있어서, 플러그인을 지워도 남아 계속 표시됩니다.\
272
+ > 이미 지웠다면 HUD를 재설치하거나, `omc-hud-custom.mjs` 에서 `// >>> payload-mon >>>` 부터 `// <<< payload-mon <<<` 까지 지우면 됩니다.
273
+
274
+ > `setup-omc-hud` 가 넣은 Claude 갱신 안내 블록도 플러그인 밖(`~/.claude/hud/omc-hud-custom.mjs`)에 남습니다. 원래 순서로 되돌리려면 제거 전에 `/banker:setup-omc-hud off` 를 실행하세요.\
275
+ > 이미 지웠다면 HUD를 재설치하거나, `// >>> claude-update-last >>>` 부터 `// <<< claude-update-last <<<` 까지 지우면 됩니다. 블록을 남겨 두어도 상태표시줄은 깨지지 않습니다.
276
+
277
+ > `setup-bypass-permissions` 로 바꾼 권한 모드는 `settings.json` 에 남아, 플러그인을 지워도 모든 세션에서 확인 없이 도구가 실행됩니다. 제거 전에 `/banker:setup-bypass-permissions off` 를 실행하세요.\
278
+ > 이미 지웠다면 설정 폴더(`$CLAUDE_CONFIG_DIR`, 없으면 `~/.claude`)의 `settings.json` 에서 `permissions.defaultMode` 를 지우거나 원래 값으로 되돌리면 됩니다. 옆의 `settings.json.bypass-permissions.bak` 과 `settings.json.bypass-permissions.json` 도 지우세요. 백업에는 설정의 비밀 값이 들어 있을 수 있습니다.\
279
+ > root 계정에서 이 모드 때문에 Claude Code 가 시작되지 않으면 `claude --permission-mode default` 로 시작한 뒤 `off` 를 실행하세요.
280
+
281
+ > `tone-compact` 를 켰다면 제거 전에 런타임마다 `off` 를 실행하세요(Claude Code `/banker:tone-compact off`, Codex `banker-tone-compact` 에 `off`).\
282
+ > 규칙 파일과 블록은 플러그인 밖(`~/.claude/rules/`, `~/.codex/AGENTS.md`)에 있어서, 플러그인을 지워도 남아 계속 적용됩니다.\
283
+ > 이미 지웠다면 `~/.claude/rules/banker-tone-compact.md` 를 지우고, AGENTS.md 에서 `<!-- banker:tone-compact:start -->` 부터 `<!-- banker:tone-compact:end -->` 까지와 그 바깥의 `USER:OMX:POLICY` 표시 두 줄을 지우면 됩니다.
284
+
252
285
  ## 업데이트 확인 및 사용량 카운팅
253
286
 
254
287
  banker는 기본값(default-on)으로 두 가지를 합니다.\
@@ -332,7 +365,7 @@ banker 자체는 **MIT** ([LICENSE](LICENSE)). Owner: [smallOpenSource](https://
332
365
  |---|---|---|---|
333
366
  | 프레임워크 | oh-my-claudecode(OMC)·oh-my-codex(OMX), by [Yeachan-Heo](https://github.com/Yeachan-Heo) | MIT | `all-in-one`·`ultra-init`·`/banker:front-qa`·`setup-omc` |
334
367
  | 플러그인 | insane-search (© fivetaku, [fivetaku/gptaku_plugins](https://github.com/fivetaku/gptaku_plugins)) | MIT | `setup-insane-search` |
335
- | 팀 아키텍처 팩토리 | revfactory/harness (© Minho Hwang, [revfactory/harness](https://github.com/revfactory/harness)) · Codex 포트 SaehwanPark/meta-harness | Apache-2.0 | `harness-factory`(설치·구성만 안내) |
368
+ | 팀 아키텍처 팩토리 | revfactory/harness (© Minho Hwang, [revfactory/harness](https://github.com/revfactory/harness)) · Codex 포트 SaehwanPark/meta-harness | Apache-2.0 | `setup-harness-factory`(설치·구성만 안내) |
336
369
  | 서비스(독점·상표) | Notion | 독점 | `make-notion-guide` |
337
370
  | 서비스(독점·상표) | Google Stitch | 독점 | `setup-stitch` |
338
371
  | 디자인(상표) | Nothing 디자인 언어 | 상표 | `nothing-design` |
@@ -12,23 +12,23 @@
12
12
  { "name": "compact-wiki", "type": "skill", "target": "both", "reason": "wiki dedup/merge; tool-agnostic workflow", "supportingFiles": [], "caveat": "uses wiki_* MCP at runtime" },
13
13
  { "name": "play-qa", "type": "skill", "target": "both", "reason": "Godot HTML5 in-browser QA; tool-agnostic", "supportingFiles": [], "caveat": "needs playwright (setup-playwright)" },
14
14
  { "name": "humanizer", "type": "skill", "target": "both", "reason": "AI-writing cleanup; tool-agnostic (vendored MIT)", "supportingFiles": ["LICENSE", "README.md", "AGENTS.md"] },
15
- { "name": "lineage", "type": "skill", "target": "both", "reason": "session->HTML export; tool-agnostic", "supportingFiles": ["lineage.py"] },
15
+ { "name": "lineage", "type": "skill", "target": "both", "reason": "session->HTML export; the default flow has session-model reviewers (Claude=Plan without a model, Codex=spawn_agent without a role) judge noise and write one-line summaries from a redacted review pack; --rulebase is the rules-only one-pass run; reads Claude Code transcripts only", "supportingFiles": ["lineage.py"] },
16
16
  { "name": "make-notion-guide", "type": "skill", "target": "both", "reason": "API guide authoring; tool-agnostic", "supportingFiles": [] },
17
17
  { "name": "nothing-design", "type": "skill", "target": "both", "reason": "UI design system; tool-agnostic", "supportingFiles": ["references/components.md", "references/platform-mapping.md", "references/tokens.md"] },
18
18
  { "name": "pdf-vision-extract", "type": "skill", "target": "both", "reason": "PDF->PNG for vision; tool-agnostic", "supportingFiles": [] },
19
- { "name": "ready-compact", "type": "skill", "target": "both", "reason": "pre-compaction state save; tool-agnostic", "supportingFiles": [] },
19
+ { "name": "ready-compact", "type": "skill", "target": "both", "reason": "state save + prompt-only resume output (compact in the same session, or --hand-off to a new one); Claude=auto-memory dir, Codex=.omx/handoffs/", "supportingFiles": [] },
20
20
  { "name": "refresh-git-ignore", "type": "skill", "target": "both", "reason": ".gitignore refresh; tool-agnostic", "supportingFiles": [] },
21
21
  { "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"] },
22
22
  { "name": "setup-playwright", "type": "skill", "target": "both", "reason": "playwright/browser install; tool-agnostic (genericize /banker:setup trigger ref for Codex)", "supportingFiles": [] },
23
23
  { "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": [] },
24
24
  { "name": "ultra-ui-qa", "type": "skill", "target": "both", "reason": "UI vs SoT QA; tool-agnostic", "supportingFiles": [], "caveat": "needs playwright (setup-playwright)" },
25
25
 
26
- { "name": "all-in-one", "type": "skill", "target": "both", "reason": "orchestrates ralplan->ralph->ultraqa; Claude=OMC, Codex=OMX (same-named skills); body runtime-aware", "supportingFiles": [] },
27
- { "name": "compact-copy", "type": "skill", "target": "both", "reason": "shapes final message for /copy (built into BOTH Claude Code and Codex); response path is per-runtime; ready-compact(both) seeds the prompt", "supportingFiles": [] },
28
- { "name": "ultra-init", "type": "skill", "target": "both", "reason": "orchestrates ralplan/ultragoal/ralph/ultraqa; Claude=OMC, Codex=OMX; body runtime-aware", "supportingFiles": [] },
26
+ { "name": "all-in-one", "type": "skill", "target": "both", "reason": "orchestrates ralplan->ralph->QA gate; Claude=OMC 5 (verify cycle in place of the removed ultraqa; needs the omc CLI with `omc ralph verify`), Codex=OMX (same-named skills, OMX ultraqa); body runtime-aware", "supportingFiles": [] },
27
+ { "name": "compact-copy", "type": "skill", "target": "both", "reason": "shapes final message for /copy (built into BOTH Claude Code and Codex) from a fenced resume prompt; response path is per-runtime; ready-compact now outputs the prompt alone, so this is for older or mixed outputs", "supportingFiles": [] },
28
+ { "name": "ultra-init", "type": "skill", "target": "both", "reason": "orchestrates ralplan->ralph->QA gate (no ultragoal ledger: OMC 5.6.1 checkpoints need a /goal snapshot that would compete with ralph); Claude=OMC 5 (verify cycle in place of the removed ultraqa; needs the omc CLI with `omc ralph verify`), Codex=OMX (OMX ultraqa); body runtime-aware", "supportingFiles": [] },
29
29
  { "name": "omc-reference", "type": "skill", "target": "both", "reason": "OMC/OMX agent/tool/skill registry reference; runtime-aware (Codex counterpart is OMX)", "supportingFiles": [] },
30
30
  { "name": "setup-omc", "type": "skill", "target": "both", "reason": "installs OMC (Claude) or OMX (Codex `omx setup`); body already dual-runtime", "supportingFiles": [] },
31
- { "name": "setup-omc-hud", "type": "skill", "target": "both", "reason": "installs omc_hud (Claude statusLine); Codex uses OMX `hud`; runtime-aware", "supportingFiles": [] },
31
+ { "name": "setup-omc-hud", "type": "skill", "target": "both", "reason": "installs omc_hud (Claude statusLine) and moves OMC's Claude Code update notice to the end of the line; Codex uses OMX `hud`; runtime-aware", "supportingFiles": ["scripts/claude-update-last.mjs"] },
32
32
  { "name": "setup-stitch", "type": "skill", "target": "both", "reason": "registers the Stitch MCP proxy (RockyLinux8 ~/bin/stitch-proxy.sh); Claude `claude mcp add`, Codex `codex mcp add`", "supportingFiles": [] },
33
33
 
34
34
  { "name": "docs-setup", "type": "skill", "target": "both", "reason": "installs arch-diagram/pdf-vision-extract deps (python-pptx, pymupdf, plantuml); python-env detect/select; runtime-agnostic installer", "supportingFiles": [] },
@@ -36,7 +36,7 @@
36
36
  { "name": "curation", "type": "skill", "target": "both", "reason": "decision-framing behavior (options/rec/confidence + --perf); no runtime deps; identical in both", "supportingFiles": [] },
37
37
  { "name": "deep-init", "type": "skill", "target": "both", "reason": "hierarchical AGENTS.md generation (port of OMC deepinit); runtime-agnostic fs+doc; subagents Claude=OMC/Codex=OMX", "supportingFiles": [] },
38
38
  { "name": "deep-research", "type": "skill", "target": "both", "reason": "fan-out + adversarial-verify web research (re-authored from bundled workflow); Claude WebSearch/Workflow, Codex OMX autoresearch; runtime-aware", "supportingFiles": [] },
39
- { "name": "ralph-qa", "type": "skill", "target": "both", "reason": "independent verify loop (ralplan+critic logic): multi-agent backbone always runs; externally-validated LLMs join as extra seats. Seat-lifecycle monotone gate (INCONCLUSIVE on seat loss) so adding or losing a seat can never widen it; runtime-aware", "supportingFiles": ["references/verifier-probe.mjs"] },
39
+ { "name": "ralph-qa", "type": "skill", "target": "both", "reason": "independent verify loop (ralplan+critic logic): a backbone of 3+ reviewer agents on the session model always runs (Claude=Plan without a model, Codex=spawn_agent without a role or forked context; read-only by instruction); --codex/--gemini/--opencode seat that CLI's best model (asks when ambiguous, configured default when nobody can be asked), the payload (a diff that carries new files, made through a temporary index) sent from a file after a secret scan, each seat run from its own copy in a private folder with answers kept elsewhere (codex read-only with its shell tool, exec-policy rules, MCP servers, sub-agents, hooks, notify, web search, metrics and OpenTelemetry off, not seated when a managed config or a requirements file overrides those; gemini under a deny-all admin policy that a helper checks first, with no MCP servers, extensions or prompt telemetry, its error reports kept in the answer folder, and its session records removed after, those of runs cut short too; opencode as a per-run deny-all agent reading the payload on stdin, auto-compaction off). Seat-lifecycle monotone gate (INCONCLUSIVE on seat loss); runtime-aware", "supportingFiles": ["references/verifier-probe.mjs", "references/payload-scan.mjs", "references/gemini-read-only.toml", "references/gemini-seat.mjs"] },
40
40
  { "name": "smart-compact", "type": "skill", "target": "both", "reason": "context-threshold compaction-hygiene gate (statusLine detect + hook bridge + assistant chain + TUI handoff); runtime-aware", "supportingFiles": [] },
41
41
  { "name": "visual-ralph", "type": "skill", "target": "both", "reason": "measured visual build loop (port of OMX visual-ralph); Claude ralph+visual-verdict+Stitch imagegen, Codex $ralph+$imagegen; runtime-aware", "supportingFiles": [] },
42
42
 
@@ -47,8 +47,9 @@
47
47
  { "name": "setup-tmux", "type": "skill", "target": "both", "reason": "installs tmux per-OS (Rocky8 3.6a source-build, apt/brew, Windows psmux); OMC team/worktree + OMX $team/HUD require it", "supportingFiles": [] },
48
48
  { "name": "setup-pwsh", "type": "skill", "target": "both", "reason": "Windows PowerShell 7 env (Terminal/Git/$PROFILE UTF-8); Claude CLAUDE_CODE_GIT_BASH_PATH, Codex native shell; no-op off-Windows", "supportingFiles": [] },
49
49
  { "name": "setup-mcp", "type": "skill", "target": "both", "reason": "installs common standalone MCP servers (context7/seq-thinking/filesystem/git/fetch); Claude `claude mcp add`, Codex config.toml [mcp_servers.*]; needs setup-node/python", "supportingFiles": [] },
50
+ { "name": "setup-bypass-permissions", "type": "skill", "target": "both", "reason": "opt-in, typed by the person only (disable-model-invocation; Codex agents/openai.yaml allow_implicit_invocation: false): sets Claude Code permissions.defaultMode to bypassPermissions after a risk warning and an explicit confirmation; node script first, python3/PowerShell fallback when node cannot run, a command the person runs when the account may not write; off restores; Codex leaves its own approval policy alone", "supportingFiles": ["scripts/bypass-permissions.mjs", "scripts/fallback/bypass-permissions.py", "scripts/fallback/bypass-permissions.ps1", "agents/openai.yaml"] },
50
51
  { "name": "setup-sandbox", "type": "skill", "target": "both", "reason": "agent sandbox per-OS (bubblewrap+userns / AppContainer / Seatbelt) + rust/cargo + git safe.directory; Codex sandbox_mode", "supportingFiles": [] },
51
- { "name": "harness-factory", "type": "skill", "target": "both", "reason": "installs+configures+guides the revfactory/harness team-architecture factory plugin (Claude harness@harness-marketplace, Codex SaehwanPark/meta-harness); Apache-2.0 referenced not redistributed", "supportingFiles": [] },
52
+ { "name": "setup-harness-factory","type": "skill", "target": "both", "reason": "installs+configures+guides the revfactory/harness team-architecture factory plugin (Claude harness@harness-marketplace, Codex SaehwanPark/meta-harness); Apache-2.0 referenced not redistributed", "supportingFiles": [] },
52
53
 
53
54
  { "name": "obsidizer", "type": "skill", "target": "both", "reason": "AI-wiki -> Obsidian graph normalize/interlink; LLM semantic edits + zero-input deterministic canonicalizer, runtime-agnostic; in-place durable", "supportingFiles": ["obsidize.mjs"], "caveat": "OMC-managed trees: 9-field frontmatter envelope + reserved files + no-rename + bare [[slug]] links only (extractWikiLinks slugifies piped/heading forms -> broken-ref); aliases written in generic vaults only; Canvas sidecars and body-inline :: are durable in-place; uses wiki_lint read-only. --enable is Claude-only (Codex has no MCP tool hooks) and is an honest no-op on Codex." },
54
55
 
@@ -63,6 +64,8 @@
63
64
  { "name": "motion-graphic-make", "type": "skill", "target": "both", "reason": "thin wrapper delegating to hyperframes /motion-graphics (free form categories); owns no render pipeline; runtime-agnostic", "supportingFiles": [], "caveat": "needs hyperframes via motion-graphic-setup (npx, Apache-2.0)" },
64
65
  { "name": "3d-intro-setup", "type": "skill", "target": "both", "reason": "collects Azure creds (direct or console-sample parse) to untracked env + FREE preflight; installs Node/ffmpeg; runtime-agnostic", "supportingFiles": ["references/azure-adapter.mjs"] },
65
66
  { "name": "3d-intro-build", "type": "skill", "target": "both", "reason": "scroll-scrub 3D intro via Azure Sora-2 forward-chaining + gpt-image-2 stills; vendored scroll-world engine (MIT); cross-platform Node", "supportingFiles": ["references/azure-adapter.mjs", "references/scrub-engine.js", "references/index-template.html", "references/prompts.md", "references/LICENSE", "references/NOTICE.md", "references/serve.mjs", "references/assemble.mjs", "references/curate.mjs"] },
67
+ { "name": "payload-mon", "type": "skill", "target": "both", "reason": "toggles an estimated API request payload segment (bytes against Claude Code's 32MB request limit) in the OMC custom HUD statusline, beside ctx; pure Node, no deps", "supportingFiles": ["scripts/payload-mon.mjs", "scripts/payload-size.mjs"], "caveat": "measures Claude Code sessions only (the 32MB limit and the transcript format are Claude Code's); run from Codex it still manages the same machine's Claude Code HUD wrapper but never measures Codex's own requests. Needs the OMC custom HUD wrapper (setup-omc-hud); the wrapper imports a module copy kept beside it because plugin install paths are versioned and retired on update" },
68
+ { "name": "tone-compact", "type": "skill", "target": "both", "reason": "turns compact Korean writing rules (ASD-STE100 based: lists and tables, transliterated terms, no decorative symbols) on or off across sessions; pure Node, no deps", "supportingFiles": ["scripts/tone-compact.mjs"], "caveat": "per runtime: Claude Code gets <config>/rules/banker-tone-compact.md; Codex gets one marked block at the end of $CODEX_HOME/AGENTS.override.md (when it has content of its own) or AGENTS.md, wrapped in USER:OMX:POLICY so omx setup --merge-agents and a plain omx setup with team mode on keep it (--force, a confirmed overwrite or a plain omx setup with team mode off replace the file; run on again). Turning it on in one runtime leaves the other as it is" },
66
69
 
67
70
  { "name": "front-qa", "type": "command", "target": "both", "reason": "ralplan->ralph frontend-QA pipeline; Claude=OMC, Codex=OMX", "supportingFiles": [] },
68
71
  { "name": "setup", "type": "command", "target": "both", "reason": "installer orchestrator; Claude AskUserQuestion multi-select, Codex prompt-based selection", "supportingFiles": [] }
@@ -7,7 +7,7 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
7
7
  |---|---|---|
8
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
- | (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. |
10
+ | (none) | `~/.codex/AGENTS.md` | **NOT TOUCHED by setup.** omx regenerates it (clobber risk, `:7`/`:253`); `omx setup --merge-agents` keeps only `<!-- USER:OMX:POLICY:START -->`…`END` blocks on a rewrite; `--force`, a confirmed overwrite, and a plain `omx setup` with team mode off replace the file whole; a plain `omx setup` with team mode on only refreshes the model table. Rely on `~/.codex/skills/` auto-discovery. The one runtime writer is the `tone-compact` skill, at the user's request, inside such a block. |
11
11
 
12
12
  ## Naming
13
13
  - Codex skill dir **and** frontmatter `name:`: `banker-<name>` (avoids collision with omx/system skills; kept in sync so Codex discovers it).
@@ -18,7 +18,7 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
18
18
 
19
19
  ## Runtime-aware surfaces (both) — Codex uses OMX / Codex equivalents
20
20
  현재 `claude-only` 표면은 **없다**(전부 `both`). OMC/Claude 에 결합됐던 표면은 본문이 런타임 인식으로 작성돼 Codex에서도 동작한다 — Codex에선 OMC 대신 oh-my-codex(OMX)의 동명 스킬을 쓴다:
21
- - 오케스트레이터 `all-in-one`·`ultra-init`·커맨드 `front-qa` → OMX `ralplan`/`ralph`/`ultraqa`/`ultragoal`.
21
+ - 오케스트레이터 `all-in-one`·`ultra-init`·커맨드 `front-qa` → OMX `ralplan`/`ralph`/`ultraqa`. `ultra-init` 은 0.14.0 부터 ultragoal 원장을 쓰지 않는다(OMC 5.6.1 checkpoint 가 `/goal` 스냅샷을 요구해 ralph 와 Stop 훅 루프가 겹친다). Claude 쪽은 OMC 5 기준: `ultraqa` 가 5.0.0 에서 삭제돼 QA 게이트를 `verify` 순환(독립 verifier → architect 진단 → executor 수정, 최대 5회)으로 직접 돌리고, `ralph` 가 부르는 `omc ralph verify` 때문에 전역 `omc` CLI 가 플러그인과 같은 5.x 여야 한다(사전 점검은 종료 코드가 아니라 출력 문구로).
22
22
  - `setup-omc` → `omx setup`(본문에 이미 존재). `setup-omc-hud` → OMX `hud`. `setup-stitch` → `codex mcp add`.
23
23
  - `compact-copy` → Codex 내장 `/copy`(경로는 Codex 규약). `omc-reference` → Codex는 OMX 카탈로그 기준. `setup` 커맨드 → Codex는 프롬프트 선택 UX.
24
24
  `setup-insane-search` 도 `both`: Codex에선 `codex plugin add insane-research-codex@gptaku-codex`.
@@ -27,7 +27,8 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
27
27
  - `visual-ralph` → OMX `$ralph`·`$imagegen`(+`omx imagegen continuation`)·Visual Verdict; Claude은 `ralph`+`visual-verdict`+Stitch/ccg imagegen.
28
28
  - `deep-init` → 서브에이전트 Claude=OMC explore/architect/writer, Codex=OMX worker/explore(부재 시 직접 수행). 순수 fs+doc.
29
29
  - `deep-research` → Claude 번들 워크플로/`WebSearch`, Codex OMX `autoresearch`/`best-practice-research`.
30
- - `ralph-qa` → 백본은 런타임 서브에이전트(Claude=Agent/Task `model: opus`, Codex=OMX 서브에이전트)로 양쪽 동일. 외부 좌석만 런타임별로 갈린다: Claude=`codex exec`/`omc ask codex`, Codex=`omx $ask claude`(Codex 런타임에서 `codex exec` 는 자기 자신이라 부적격).
30
+ - `ralph-qa` → 백본은 세션 모델로 띄운 검토 에이전트 3개 이상이다(Claude=Agent 의 `Plan` 을 `model` 없이, Codex=`spawn_agent` 를 역할 없이, 저자 대화를 넘기지 않고). 두 런타임 모두 Bash 가 있어 읽기 전용은 지시로 선다. 외부 좌석은 `--codex`·`--gemini`·`--opencode` 를 줄 때만 앉고, 저자 계열은 앉지 않는다(Codex 런타임의 `--codex` 는 자기 자신이라 부적격). Codex 의 `workspace-write` 샌드박스는 HOME 쓰기를 막아 gemini, opencode 가 시작부터 실패하고, Linux 에서는 페이로드 기준 폴더(`$XDG_RUNTIME_DIR`, `~/.cache`)도 막는다. 그래서 외부 좌석 전송의 명령 전부(폴더, 페이로드, 사본, 좌석, 정리)를 승인을 받아 샌드박스 밖에서 실행한다.
31
+ - `lineage` → 기본 흐름의 검토자는 세션 모델이다(Claude=Agent 의 `Plan` 을 `model` 없이, Codex=`spawn_agent` 를 역할 없이, 저자 대화를 넘기지 않고). 띄울 수 없으면 세션이 파트를 직접 검토한다. Codex 검토자에게는 파일 읽기 도구가 없어 파트 파일을 읽는 셸 명령만 쓰게 한다. `workspace-write` 샌드박스에서는 `~/.cache` 에 쓸 수 없어 이번 실행의 검토 결정을 캐시에 쓰지 못한다(WARN). 앞선 실행이 남긴 결정은 읽는다. 읽는 기록은 Claude Code 형식뿐이라 Codex 에서는 Claude Code 기록을 내보낼 때만 쓴다. `--rulebase` 는 모델 호출 없이 양쪽 같다.
31
32
  - `smart-compact` → Claude statusLine `context_window.used_percentage`+hook; Codex 신호 미확인 시 휴리스틱 폴백. TUI 3단(`/copy`·`/compact`·paste)은 유저.
32
33
  - `curation` → 런타임 무관(외부 의존 0, 양쪽 동일).
33
34
 
@@ -36,10 +37,13 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
36
37
  - `audit-web-page`, `play-qa`, `ultra-ui-qa` — need playwright (install via `setup-playwright`).
37
38
  - `setup-playwright` — genericize the `/banker:setup` trigger phrasing for the Codex copy.
38
39
  - `visual-ralph` — needs an imagegen path (Stitch via `setup-stitch`, or `/ccg`/Gemini) + a frontend repo; static/live-URL reference works without imagegen.
39
- - `ralph-qa` — runs with no external dependency: the multi-agent backbone always runs, and external LLM seats join only when a 0-token probe observes them valid. Their absence is a coverage fact (model axis uncovered), not a degraded mode. A same-runtime `critic` is never substituted for an external seat — on Codex that would be GPT approving GPT, i.e. self-approval.
40
+ - `ralph-qa` — runs with no external dependency: the backbone of 3+ session-model reviewer agents always runs, and an external CLI seat joins only on its flag (`--codex`, `--gemini`, `--opencode`), on that CLI's best model as the probe reads it from local config and the CLI's bundled list (the probe sends no HTTP request and no prompt; opencode is started with its model-list refresh off). Its absence is a coverage fact (model axis uncovered), not a degraded mode. A same-runtime `critic` is never substituted for an external seat — on Codex that would be GPT approving GPT, i.e. self-approval.
40
41
  - `deep-research` — needs web search/fetch (Claude WebSearch/WebFetch or bundled workflow; Codex OMX autoresearch).
41
42
  - `smart-compact` — Claude statusLine exposes context%; Codex signal unconfirmed → heuristic fallback; `/copy`·`/compact`·paste stay user-driven (TUI).
42
43
  - `obsidizer` — OMC-managed trees respect the 9-field frontmatter whitelist + reserved files + no-rename + bare `[[slug]]` links only; `aliases` are written in generic vaults only; Canvas sidecars and body-inline `::` are durable in-place; no `wiki_*` write dependency, `wiki_lint` read-only for verification. `--enable` is Claude-only (plugin-declared PostToolUse hook); Codex has no MCP tool hooks → honest no-op.
44
+ - `payload-mon` — needs the OMC custom HUD wrapper (`setup-omc-hud`). It measures Claude Code sessions only; from Codex it manages the same machine's Claude Code HUD wrapper and never measures Codex's own requests.
45
+ - `tone-compact` — per runtime: Claude Code loads `<config>/rules/banker-tone-compact.md`; Codex reads one marked block at the end of `$CODEX_HOME/AGENTS.override.md` (when it has content of its own) or `AGENTS.md`, wrapped in `USER:OMX:POLICY` so `omx setup --merge-agents` keeps it (`--force` or team mode off replaces the file; run `on` again). Turning it on in one runtime leaves the other as it is.
46
+ - `/graceful-pause` (not a manifest surface) — a Claude Code function-hooks command (`hooks/register.mjs`, 2.1.289+) registered `immediate`, so it runs mid-turn; it appends one hidden user row the running turn reads at its next model request. Codex has no equivalent (no function hooks), and the earlier `graceful_pause` skill was removed because a typed skill waits until the turn ends.
43
47
 
44
48
  신규 스킬(0.7.0)도 `both`·런타임 인식:
45
49
  - `ultra-interview` → 리서치 선행 질문 최소화 + 모호성 3% 이하 종료. **자체 루브릭 소유**가 설계 요점이다: OMC deep-interview 는 3차원, OMX 는 5차원으로 산식이 달라 네이티브 채점을 물려받으면 같은 임계값이 런타임마다 다른 뜻이 된다. OMC/OMX 네이티브 `deep-interview` 를 번들하거나 대체하지 않는다. 규제 조회는 엔드포인트 하드코딩이 아니라 "해당 관할의 공식 1차 출처를 찾아라"는 일반 지시다.
@@ -48,3 +52,11 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
48
52
  - `update-banker` → 축이 OS 가 아니라 **채널**이다. Claude 런타임 = `claude plugin update` 후 프로브로 전진 확인, 안 움직이면 `claude plugin marketplace update` 를 더한다("항상 2단계"인지는 **DISPUTED** 이므로 확정으로 쓰지 않는다). Codex 런타임 = claude 분기 스킵, npm 갱신 후 `banker setup --codex`. 공통 = npm-first 순서 게이트(구버전 CLI 로 setup 하면 sweep 후 그 구버전 매니페스트 수만큼만 복원된다)와 채널별 독립 프로브 검증. 채널 부재는 에러가 아니라 스킵이다.
49
53
  - `refresh-readme` → 런타임 무관(파일 읽기·쓰기뿐, 의존성 0). 안티슬롭 마커는 `humanizer` 에 위임하고 재서술하지 않는다.
50
54
  - `cleansing-memory` → **두 런타임의 메모리 모델이 거의 안 닮았다.** Claude = `CLAUDE.md`(문서화된 한도 없음) + `MEMORY.md`(200줄 OR 25KB 하드 게이트) + `@path` 4홉 import + AGENTS.md 미지원. Codex = `AGENTS.md` 프로젝트 스코프 32768B(`project_doc_max_bytes`) + 전역 `~/.codex/AGENTS.md` 무제한. Codex 는 raw 바이트를 자른 뒤 lossy UTF-8 디코드를 하므로 한글 경계 문자가 깨진다. Claude 의 코드베이스 유도분 트림은 `/doctor` 에 위임한다.
55
+
56
+ 추가 스킬 `payload-mon` 도 `both`·런타임 인식:
57
+ - `payload-mon` → 다루는 신호가 Claude Code 의 것이다. 32MB 요청 한도와 세션 파일 형식이 Claude Code 기준이라 **Codex 자신의 요청 크기는 재지 않는다.** Codex 에서 실행하면 같은 머신의 Claude Code HUD 래퍼(`omc-hud-custom.mjs`)를 켜고 끄는 것만 하고, `status` 의 현재 세션 추정치는 Claude Code 세션에서만 나온다. OMX `hud` 는 건드리지 않는다.
58
+ - HUD 래퍼가 불러오는 추정 모듈은 스킬 폴더가 아니라 래퍼 옆에 둔 사본이다. Claude Code 플러그인 설치 경로(`plugins/cache/<마켓>/<플러그인>/<버전>/`)는 업데이트 때 옛 버전 폴더가 정리되므로, 그 경로를 래퍼에 박으면 다음 업데이트 뒤 표시가 소리 없이 사라진다. Codex 설치 경로에는 버전이 없지만 같은 사본 방식을 쓴다.
59
+
60
+ 추가 스킬 `tone-compact` 도 `both`·런타임 인식:
61
+ - `tone-compact` → 켜짐 상태를 두는 곳이 런타임마다 다르다. Claude Code 는 사용자 규칙 폴더(`<설정 폴더>/rules/`)의 banker 전용 파일 하나를 쓰고 지운다. 세션 시작과 compaction 뒤에 다시 읽히는 곳이다. Codex 는 전역 지침 파일 끝에 블록 하나를 넣고 뺀다. 파일은 `AGENTS.override.md` 에 내용이 있으면 그쪽, 없으면 `AGENTS.md` 다. `omx setup --merge-agents` 가 생성형 AGENTS.md 를 다시 쓸 때 `USER:OMX:POLICY` 블록만 남기므로 그 표시로 감싼다(`--force` 나 team 모드를 끈 `omx setup` 은 파일을 통째로 바꾸므로 그 뒤 `on` 을 다시 실행). 전역 파일은 32KiB 한도에 잘리지 않는다(35.6KB 로 실측).
62
+ - `ready-compact` → 노트 위치만 런타임마다 다르다. Claude Code 는 자동 메모리 폴더(`MEMORY.md` 포인터가 새 세션에도 로드됨), Codex 는 자동 메모리가 없어 작업 폴더의 `.omx/handoffs/`(OMX 의 handoff 관례). 출력은 양쪽 모두 프롬프트 본문만이라 내장 `/copy` 한 번으로 복사된다. `--hand-off` 는 새 세션에 이 대화가 없다는 전제로 결정과 이유, 작업 위치, 진행 중인 모드와 백그라운드 작업까지 노트에 옮긴다.
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: "(banker) 스펙(note 파일) 기반 프론트엔드 구현 + 레퍼런스 대비 엄격 parity QA 워크플로(ralplan→ralph→loop)."
3
- argument-hint: "[스펙/note 파일 경로 — 생략 시 docs/note.txt]"
2
+ description: "스펙 파일(기본 `docs/note.txt`)을 바탕으로 프론트엔드를 구현하고, 레퍼런스 구현과 같은지 엄격하게 QA 하는 워크플로(`ralplan`, `ralph`, `/loop`)."
3
+ argument-hint: "[스펙 파일 경로. 생략하면 docs/note.txt]"
4
4
  ---
5
5
 
6
6
  # /front-qa — 스펙 기반 프론트엔드 구현 + 엄격 QA
@@ -10,9 +10,12 @@ argument-hint: "[스펙/note 파일 경로 — 생략 시 docs/note.txt]"
10
10
 
11
11
  ## 0. 전제조건: OMC (없으면 설치부터)
12
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`)로 먼저 구성한 뒤 이어서 진행.
13
+ 이 커맨드는 `/ralplan`·`/ralph` 등 oh-my-claudecode(OMC)에 의존한다. **진행 전 먼저 확인**하고, 없거나 낡았으면 **설치·갱신부터 안내**한다:
14
+ - 확인(Claude Code): `/oh-my-claudecode:*` 사용 가능 여부 + `omc` CLI 가 `ralph verify` 를 갖췄는지. OMC 5 의 `ralph` 는 첫 반복에 `omc ralph verify` 를 실행하고 없으면 멈춘다. 플러그인보다 낡은 4.x CLI 는 이 명령이 없는데도 `--help` 를 주면 전체 도움말을 찍고 종료 코드 0 을 내므로 **출력 문구로 판정**한다(`--help` 없이 부르면 Claude 실행으로 넘어가니 반드시 붙인다). Codex 는 `omx --version` 으로 OMX 를 확인한다:
15
+ ```bash
16
+ omc ralph verify --help 2>&1 | grep -q 'Usage: omc ralph verify' && echo "omc ok" || echo "omc CLI 없음 또는 낡음"
17
+ ```
18
+ - 실패하면 `/banker:setup` → oh-my-claudecode(또는 `setup-omc` 스킬 / `npm install -g oh-my-claude-sisyphus@latest`)로 먼저 구성한 뒤 이어서 진행. 점검을 통과하기 전에는 절차 1을 시작하지 않는다.
16
19
  - **런타임 매핑:** 아래 절차의 `/ralplan`·`/ralph`는 Claude Code에선 OMC 스킬, **Codex에선 oh-my-codex(OMX)의 동명 스킬**이다(Codex는 OMC 대신 OMX 전제). 각 런타임에서 사용 가능한 형태로 호출한다.
17
20
 
18
21
  ## 절차 (CLAUDE.md: 계획 없는 즉시실행 금지)
package/commands/setup.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
- description: "(banker) 구성요소·의존성을 multi-select로 골라 설치하는 오케스트레이터(런타임 node·python·java, LSP, tmux, MCP, sandbox, OMC, harness-factory, playwright 등)."
3
- argument-hint: "[설치할 컴포넌트명 — 비우면 multi-select 표시]"
2
+ description: "구성요소와 의존성을 여러 개 골라 설치하는 오케스트레이터. 런타임(Node, Python, Java), LSP, tmux, MCP, 샌드박스, OMC, Playwright 등. 권한 확인 끄기는 따로 묻고 기본으로 고르지 않으며, 골라도 실행하지 않고 직접 입력할 명령만 안내."
3
+ argument-hint: "[설치할 구성요소 이름. 비우면 여러 개 고르는 목록 표시]"
4
4
  ---
5
5
 
6
6
  # /banker:setup — 구성요소 설치 오케스트레이터
@@ -12,6 +12,8 @@ banker 플러그인이 제공하는 설치 스킬들을 **multi-select**로 골
12
12
 
13
13
  1. **선택 받기**: `$ARGUMENTS` 에 컴포넌트명이 명시돼 있으면 그것만 실행(질문 생략).
14
14
  비어 있으면 아래를 `AskUserQuestion`(**multiSelect: true**)으로 제시한다(**Codex 런타임엔 AskUserQuestion 이 없으므로 목록을 제시하고 설치할 항목을 사용자에게 물어 받는다**). 항목은 **계층/의존 순서**로 묶여 있으니, 뒤 계층을 고르면 앞 계층 전제를 먼저 채운다:
15
+ - 질문 하나에 선택지는 4개까지다. 5개 이상인 묶음은 두 질문으로 나눈다.
16
+ - 맨 아래 **권한** 항목은 이 다중 선택에 넣지 않고, 그 항목의 규칙대로 따로 묻는다.
15
17
 
16
18
  **런타임 (기반 — 먼저)**
17
19
  - **setup-node** — nvm + Node 22(winget/nvm-windows). npx 기반 MCP·CLI 전제.
@@ -27,7 +29,7 @@ banker 플러그인이 제공하는 설치 스킬들을 **multi-select**로 골
27
29
 
28
30
  **프레임워크·플러그인**
29
31
  - **setup-omc** — oh-my-claudecode(OMC) 설치/갱신(Codex는 OMX). `all-in-one`·`ultra-init`·`/banker:front-qa` 의존성.
30
- - **harness-factory** — revfactory/harness(팀 아키텍처 팩토리) 설치+구성+안내(Codex=meta-harness).
32
+ - **setup-harness-factory** — revfactory/harness(팀 아키텍처 팩토리) 설치+구성+안내(Codex=meta-harness).
31
33
  - **setup-insane-search** — insane-search 플러그인(차단 사이트 우회, Claude/Codex 양쪽).
32
34
  - **setup-omc-hud** — omc_hud 상태표시줄(OS별).
33
35
  - **setup-stitch** — Stitch(디자인 생성) MCP 프록시 등록(RockyLinux8 proxy-script, API key 필요).
@@ -38,7 +40,14 @@ banker 플러그인이 제공하는 설치 스킬들을 **multi-select**로 골
38
40
  - **motion-graphic-setup** — hyperframes(무료 모션 그래픽 CLI) 전제조건(Node≥22 + ffmpeg → `npx hyperframes`). (`motion-graphic-make` 의존성)
39
41
  - **3d-intro-setup** — Azure Sora-2/gpt-image-2 3D 인트로용 크레덴셜·의존성(Node/ffmpeg) + 무과금 프리플라이트. (`3d-intro-build` 의존성)
40
42
 
41
- 2. **실행**: 선택된 각 항목을 호출한다(미선택은 건드리지 않음). Claude Code는 `Skill("banker:<name>")`, **Codex 런타임에선 설치된 `banker-<name>` 스킬을 적용**한다(예: `Skill("banker:setup-node")`).
43
+ **권한 (주의, 기본 미선택)**
44
+ - **setup-bypass-permissions** — Claude Code 의 기본 권한 모드를 `bypassPermissions` 로 바꿔 모든 세션에서 도구 실행 확인을 끔.
45
+ - 위 묶음과 섞지 않고 단일 선택 질문 하나로 따로 묻는다(`multiSelect: false`). 선택지는 `넣지 않음 (권장)`, `넣기 (위험)` 순서다.
46
+ - 사용자가 이 항목을 직접 고를 때만 넣는다. "전부" 같은 묶음 선택이나 번호 범위에는 들어가지 않는다.
47
+ - 이 스킬은 모델이 호출할 수 없다(`disable-model-invocation`). `넣기` 를 고르면 실행하지 말고, 사용자에게 `/banker:setup-bypass-permissions on` 을 직접 입력하라고 안내한다. Codex 는 `$banker-setup-bypass-permissions` 를 직접 부르라고 안내한다.
48
+ - 입력하면 그 스킬이 위험 경고를 보여 주고 한 번 더 확인받는다. 되돌리기는 `off`.
49
+
50
+ 2. **실행**: 선택된 각 항목을 호출한다(미선택은 건드리지 않음). 단 `setup-bypass-permissions` 는 호출하지 않는다(위 권한 항목의 안내만). Claude Code는 `Skill("banker:<name>")`, **Codex 런타임에선 설치된 `banker-<name>` 스킬을 적용**한다(예: `Skill("banker:setup-node")`).
42
51
  - **의존 순서 강제**: 뒤 계층을 고르면 전제 스킬을 먼저 실행한다 — `setup-lsp` 전에 setup-node·setup-python·setup-java; `setup-mcp` 전에 setup-node·setup-python; `docs-setup` 전에 setup-python. 이미 설치돼 있으면 각 스킬이 감지해 skip(멱등).
43
52
  - 각 스킬이 OS를 감지해 알맞은 절차로 설치하고 끝에 검증한다. 한 항목이 실패해도 정직히 보고하고 다음 항목 진행.
44
53