@kaydash9999/banker-plugins 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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.6.0"
9
+ "version": "0.7.1"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "banker",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
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,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.7.1] - 2026-07-16
4
+
5
+ ### Changed
6
+ - README 정비(문서 전용 — 코드·스킬·배포 표면 무변경). 최상단에 총 구성요소 수(스킬 48 + 커맨드 2)를 명시하고, `라이선스 / 서드파티`의 의존 라이브러리·연동 참조 나열을 표(분류·항목·라이선스·사용 스킬)로 재구성했다. 사실은 코드와 대조해 확인했다 — banker 자체는 MIT, 코드로 재배포하는 서드파티는 `humanizer`(MIT © 2025 Siqi Chen) 단독이며 나머지는 런타임 의존·연동일 뿐이다. 도구별 사용 스킬 매핑은 `/banker:setup` 표와 교차검증했고, 원본에 라이선스가 없던 항목은 지어내지 않고 `각 프로젝트`로 표기했다.
7
+ - README 산문 가독성. 여러 문장이 한 줄에 붙던 문단을 Markdown hard break 로 문장마다 개행(뷰어에서 실제 줄바꿈)하고, Codex 설치 안내 문장을 분리했다.
8
+
9
+ ## [0.7.0] - 2026-07-16
10
+
11
+ ### Added
12
+ - **신규 스킬 6종** (전부 `target: both`). 배포용이므로 "이 저장소에서 재보니 무동작"류 판정은 설계 근거로 쓰지 않았다. 각 스킬의 사실 주장은 게시 전 적대적 검증에 걸었고, 거기서 반증된 것(검증되지 않은 표준 번호·법령 API 엔드포인트·트래커 이슈 인용·출처 없는 수치)은 그럴듯해도 넣지 않았다. 검증이 실제로 적출한 것들: `update-banker` 가 sweep 대상을 절반만 적은 것(스킬만 적고 command 프롬프트를 빠뜨림), `refresh-readme` 의 드리프트 예시가 디렉터리 카운트(49)를 스킬 수(48)로 오기한 것, `codex/transform-matrix.md` 가 DISPUTED 항목을 확정으로 서술한 것. 셋 다 게시 전에 고쳤다.
13
+ - `ultra-interview`: 리서치를 선행해 공개 정보(공식 문서·규정·법령·시행세칙·기록)가 답할 수 있는 것은 사람에게 묻지 않고, 모호성 3% 이하까지 인터뷰한다. **모호도를 이산 체크리스트(미해결/전체)로 계측**하는 것이 설계 요점이다. 스칼라 자기채점 위에서는 3%가 표현되지 않는다(자기신뢰도 응답이 라운드넘버 소수에 뭉치고, 가중치 합이 1인 공식에서는 전 축 0.95여도 모호도가 정확히 0.05라 통과하려면 어딘가에 완벽을 선언해야 한다). 이산 계측은 셈이라 부풀릴 수 없다. Evidence/Inference/Preference 3분류로 Preference 만 질문한다. OMC/OMX 네이티브 `deep-interview` 를 번들하거나 대체하지 않으며, **자체 루브릭을 소유**한다(OMC 3차원 대 OMX 5차원이라 네이티브 채점을 물려받으면 같은 임계값이 런타임마다 다른 뜻이 된다).
14
+ - `interval-report`: 장기 수행의 중간 보고를 `docs/intermission.md` 로 갱신한다. 측정 범위는 **마지막 사용자 지시로 시작된 현재 수행분**이고 시작 시각은 그 시점이다. **시작 시각을 파일에 영속하고 절대 재스탬프하지 않는다**. compaction/resume 후 now 로 다시 찍으면 elapsed 가 0으로 붕괴해 리포트가 가장 필요한 순간에 가장 낙관 편향된다. 시각은 `date` 로 실측한다(두 런타임 모두 컨텍스트에 시:분이 없다). ultragoal 이 있으면 읽고 없어도 동작하며 상태를 복제하지 않는다. compaction 트리거는 `smart-compact` 소관으로 남긴다.
15
+ - `summary-wiki`: 위키를 `docs/` 하위 단일 파일로 개조식 요약해 **사용자가 아는 지식과 위키에 쌓인 내용의 차이를 식별**하게 한다(sync 검토). **`wiki_list` 를 쓰지 않고 파일을 직접 열거**하는 것이 핵심이다. `wiki_list` 는 구조적으로 stale 한 인덱스를 읽어 페이지를 조용히 누락하며(실측: 직접 열거 17 대 `wiki_list` 16), 그 누락은 성공을 보고하면서 이 스킬의 목적을 정확히 배반한다. 위키에는 쓰지 않는다(`compact-wiki` 는 제자리 파괴적 변형이라 별개). `개조식` 은 어문규범에 명명된 문체가 아니므로 "관행 준수"로 서술한다.
16
+ - `update-banker`: 설치된 banker 를 최신 배포본으로 갱신한다. **축은 OS 가 아니라 채널**이다(banker 는 dependencies 0 에 복사 설치라 OS 분기가 거의 없고, Claude 플러그인·npm 전역 CLI·Codex 스킬 3채널이 서로 다른 메커니즘으로 독립 드리프트한다). **npm 을 먼저 올리고 검증한 뒤에만 `banker setup --codex`** 를 돌린다. setup 은 복사 전에 모든 `banker-*` 를 쓸어내므로 구버전 CLI 로 실행하면 그 구버전 매니페스트 수만큼만 복원된다. 판정은 exit code 가 아니라 채널별 프로브 재실행으로 한다.
17
+ - `refresh-readme`: 코드가 바뀌어 README 가 작성 시점에 머무는 것을 조치한다. README 산문 주장을 매니페스트·`skills/`·`package.json` 과 대조하는 삼각검증이 신규 능력이다. 펜스·인라인 코드·URL·`--flag` 를 인지한다(POSIX end-of-options ` -- ` 는 산문 이중하이픈과 문자적으로 동일해 일괄 치환은 그 자체로 결함이며, 실제로 문서화된 MCP 설치 명령을 깨뜨린다). AI 문체 마커는 `humanizer` 에 위임하고 재서술하지 않는다.
18
+ - `cleansing-memory`: 메모리 파일을 문서화된 threshold 내로 정리한다(중복 최신본화, 무손실 압축, append 대 replace 판별). **문서화된 하드 게이트는 `MEMORY.md` 의 200줄 OR 25KB 하나뿐이고 `CLAUDE.md` 에는 문서화된 크기 한도가 없다**. 바이트 캡을 제시하는 것은 날조다. Codex 의 `project_doc_max_bytes`(32768) 는 프로젝트 스코프 `AGENTS.md` 에만 걸리고 전역 파일에는 적용되지 않으며, raw 바이트를 자른 뒤 lossy UTF-8 디코드를 하므로 정확히 N바이트로 자르면 한글 경계 문자가 손상된다. auto-memory topic 파일이 시작 시 로드되지 않는다는 문서화된 성질이 append→replace 최적화의 근거다. 코드베이스 유도분 트림은 Claude 의 `/doctor` 에 위임한다.
19
+
20
+ ### Changed
21
+ - Codex 설치 스킬 수 **42 → 48**(+커맨드 2 유지, claude-only=0). `codex/manifest.json`·`README.md`·`codex/transform-matrix.md`·`scripts/smoke-test.js`·`.github/workflows/harness-setup-ci.yml` 을 동기화했다.
22
+ - **`scripts/smoke-test.js` 에 집합 동등성 단언을 추가**했다(실설치 실행 **앞**). `codex/manifest.json` 의 skill 이름 집합과 `skills/` 디스크 집합이 같은지 검사하고 불일치를 `manifest-only` / `disk-only` 로 **이름을 찍어** 보고한다. 기수 단언만으로는 이 결함을 잡을 수 없다. dry-run 카운터는 파일시스템이 아니라 매니페스트를 순회하므로, 디렉터리가 없어도 매니페스트 줄 수만 맞으면 통과하고 실설치는 복사 중 ENOENT 로 죽어 `HARNESS ERROR` 라는 환경 문제처럼 보이는 메시지만 남긴다. 이 단언은 지금까지 아무 장치도 없던 반대 방향(디스크에 있으나 매니페스트에 없어 Claude 에만 실리고 Codex 로는 영영 가지 않는 조용한 claude-only 스킬)도 함께 닫는다. 릴리스마다 하드코딩 이름 배열을 덧붙이던 방식을 이 단언 하나로 대체한다.
23
+
3
24
  ## [0.6.0] - 2026-07-15
4
25
 
5
26
  ### Added
package/README.md CHANGED
@@ -7,7 +7,9 @@
7
7
 
8
8
  [빠른 시작](#빠른-시작) · [구성](#구성) · [설치 상세](#설치-상세-npm--codex) · [요구사항](#요구사항) · [업데이트 / 제거](#업데이트--제거) · [라이선스 / 서드파티](#라이선스--서드파티)
9
9
 
10
- banker는 QA, 보안 감사, 문서, 아키텍처, 위키 작업을 위한 스킬 42개와 의존성·개발환경(OS별) 설치 스킬을 묶은 Claude Code 플러그인입니다. 설치하면 스킬과 커맨드가 `/banker:<이름>` 네임스페이스로 노출됩니다. 이 저장소 자체가 Claude Code 마켓플레이스(`.claude-plugin/marketplace.json`)이자 플러그인(`.claude-plugin/plugin.json`, name `banker`)이며, 도구에 무관한 스킬은 Codex CLI에도 설치됩니다.
10
+ banker는 QA·보안 감사·문서·아키텍처·위키 작업과 의존성·개발환경(OS별) 설치를 아우르는 **스킬 48개 + 커맨드 2개**(총 50개 구성요소)를 묶은 Claude Code 플러그인입니다.\
11
+ 설치하면 스킬과 커맨드가 `/banker:<이름>` 네임스페이스로 노출됩니다.\
12
+ 이 저장소 자체가 Claude Code 마켓플레이스(`.claude-plugin/marketplace.json`)이자 플러그인(`.claude-plugin/plugin.json`, name `banker`)이며, 도구에 무관한 스킬은 Codex CLI에도 설치됩니다.
11
13
 
12
14
  > npm 패키지(`@kaydash9999/banker-plugins`)와 GitHub 저장소(`smallOpenSource/banker_plugins`)는 같은 메인테이너가 관리합니다.
13
15
 
@@ -69,7 +71,9 @@ playwright(브라우저 QA)나 oh-my-claudecode(OMC/OMX)처럼 별도 의존성
69
71
  | `obsidizer` | AI 위키를 의미보존 Obsidian 그래프로 정규화·상호링크·백링크 |
70
72
  | `deep-init` | 코드베이스 전체에 계층형 AGENTS.md 문서 생성/갱신 |
71
73
 
72
- > `obsidizer` 는 banker 최초의 플러그인 선언 hook(`hooks/hooks.json`)을 함께 설치합니다. banker가 활성화되어 있으면 이 hook은 **항상 등록**되어 위키 쓰기(`wiki_ingest`/`wiki_add`)마다 실행되고, `obsidizer --enable` 을 켜지 않은 사용자도 쓰기당 약 30ms의 node 프로세스 기동 비용을 치릅니다(플래그 확인 자체가 그 프로세스 안에서 일어나기 때문). `--enable` 전에는 아무것도 쓰지 않는 순수 no-op입니다.
74
+ > `obsidizer` 는 banker 최초의 플러그인 선언 hook(`hooks/hooks.json`)을 함께 설치합니다.\
75
+ > banker가 활성화되어 있으면 이 hook은 **항상 등록**되어 위키 쓰기(`wiki_ingest`/`wiki_add`)마다 node 프로세스를 띄웁니다(플래그 확인이 그 안에서 일어나므로 `--enable` 전에도 쓰기당 약 30ms).\
76
+ > `--enable` 전에는 아무것도 쓰지 않는 순수 no-op입니다.
73
77
 
74
78
  ### 스킬: 워크플로 · 유틸
75
79
 
@@ -85,10 +89,17 @@ playwright(브라우저 QA)나 oh-my-claudecode(OMC/OMX)처럼 별도 의존성
85
89
  | `ralph-qa` | 작업 결과를 다른 LLM·별도 세션으로 독립 교차검증 반복 |
86
90
  | `smart-compact` | 컨텍스트 임계 초과 시 위키·resume 저장 게이트 자동 무장 |
87
91
  | `deep-research` | 다중 소스 팬아웃 + 적대적 검증 인용 리서치 |
92
+ | `ultra-interview` | 리서치 선행으로 사람 질문 최소화, 모호성 3% 이하까지 인터뷰 |
93
+ | `interval-report` | 장기 수행 중간 보고를 `docs/intermission.md` 로 갱신(경과·잔여·단일 표) |
94
+ | `summary-wiki` | 위키를 `docs/` 단일 파일 개조식으로 요약(지식 동기화 검토용, 읽기 전용) |
95
+ | `update-banker` | 설치된 banker 를 3채널(Claude·npm·Codex) 순서 게이트로 최신화 |
96
+ | `refresh-readme` | 코드와 어긋난 README 를 현재 상태에 맞게 갱신(드리프트 해소) |
97
+ | `cleansing-memory` | 메모리 파일을 문서화된 threshold 내로 정리(중복 최신본화·무손실 압축) |
88
98
 
89
99
  ### 스킬: 개발환경 setup (OS별 · 런타임별)
90
100
 
91
- USER_RESOURCES 가이드의 공통 요소를 OS별·런타임별(Claude Code/Codex)로 구성하는 얇은 실행 유닛. `/banker:setup` 오케스트레이터가 의존 순서(런타임 먼저)로 조합한다.
101
+ USER_RESOURCES 가이드의 공통 요소를 OS별·런타임별(Claude Code/Codex)로 구성하는 얇은 실행 유닛.\
102
+ `/banker:setup` 오케스트레이터가 의존 순서(런타임 먼저)로 조합한다.
92
103
 
93
104
  | 스킬 | 설명 |
94
105
  |---|---|
@@ -115,7 +126,8 @@ USER_RESOURCES 가이드의 공통 요소를 OS별·런타임별(Claude Code/Cod
115
126
 
116
127
  ## 설치 상세 (npm · Codex)
117
128
 
118
- 마켓플레이스 대신 npm으로 전역 설치할 수 있고, Codex CLI에도 스킬을 설치할 수 있습니다. Codex 설치는 npm 전역 설치가 선행되어야 합니다.
129
+ 마켓플레이스 대신 npm으로 전역 설치할 수 있고, Codex CLI에도 스킬을 설치할 수 있습니다.\
130
+ Codex 설치는 npm 전역 설치가 선행되어야 합니다.
119
131
 
120
132
  ```bash
121
133
  npm i -g @kaydash9999/banker-plugins
@@ -128,8 +140,10 @@ banker uninstall # 제거
128
140
 
129
141
  - `--scope project` 로 프로젝트 로컬(`./.codex`)에 설치하고, `--dry-run` 으로 미리 볼 수 있습니다.
130
142
  - non-root 전용입니다(전역 sudo 설치 시 root 소유 파일을 방지). postinstall이 없으므로 `banker setup` 을 직접 실행합니다.
131
- - Codex에는 스킬 42개가 `~/.codex/skills/banker-<name>/` 에, 커맨드 2개가 `~/.codex/prompts/banker-<name>.md` 에 설치됩니다(`codex/manifest.json`). 디렉터리명과 일치하도록 프론트매터 `name:` 이 `banker-<name>` 으로 재작성되어 Codex가 `banker-<name>` 으로 인식합니다.
132
- - OMC/Claude 에 결합됐던 오케스트레이터·설치·유틸 표면(all-in-one·ultra-init·front-qa·setup·setup-omc·setup-omc-hud·setup-stitch·omc-reference·compact-copy)은 본문이 **런타임 인식**이라 Codex에서도 동작합니다 — Codex에선 OMC 대신 **oh-my-codex(OMX)** 의 동명 스킬(ralplan·ralph·ultraqa·hud 등)과 `codex mcp`·내장 `/copy` 를 사용합니다(Codex는 `omx setup` 전제).
143
+ - Codex에는 스킬 48개가 `~/.codex/skills/banker-<name>/` 에, 커맨드 2개가 `~/.codex/prompts/banker-<name>.md` 에 설치됩니다(`codex/manifest.json`). \
144
+ 디렉터리명과 일치하도록 프론트매터 `name:` 이 `banker-<name>` 으로 재작성되어 Codex가 `banker-<name>` 으로 인식합니다.
145
+ - OMC/Claude 에 결합됐던 오케스트레이터·설치·유틸 표면(all-in-one·ultra-init·front-qa·setup·setup-omc·setup-omc-hud·setup-stitch·omc-reference·compact-copy)은 본문이 **런타임 인식**이라 Codex에서도 동작합니다.
146
+ - Codex에선 OMC 대신 **oh-my-codex(OMX)** 의 동명 스킬(ralplan·ralph·ultraqa·hud 등)과 `codex mcp`·내장 `/copy` 를 사용합니다(Codex는 `omx setup` 전제).
133
147
  - `~/.codex/AGENTS.md` 는 건드리지 않습니다(omx가 재생성하므로 `~/.codex/skills/` 자동 검색에 의존).
134
148
 
135
149
  ## 요구사항
@@ -165,19 +179,47 @@ Codex는 재설치할 때마다 기존 `banker-*` 를 먼저 정리하므로 옛
165
179
  banker 자체는 **MIT** ([LICENSE](LICENSE)). Owner: [smallOpenSource](https://github.com/smallOpenSource).
166
180
 
167
181
  **번들된 코드 (이 패키지가 재배포)**
168
- - `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**)에 기반합니다.
182
+ - `skills/humanizer`: [blader/humanizer](https://github.com/blader/humanizer) 기반, **MIT License**(© 2025 Siqi Chen).\
183
+ 원본 라이선스 고지는 `skills/humanizer/LICENSE` 에 포함.\
184
+ 패턴 목록은 Wikipedia [*Signs of AI writing*](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing)(WikiProject AI Cleanup, **CC BY-SA**)에 기반합니다.
169
185
 
170
- 코드로 포함(재배포)하는 서드파티는 `humanizer` 뿐입니다. 아래는 스킬이 **런타임에 의존하거나 연동**하는 외부 요소로, banker 가 재배포하지 않으며 각 라이선스·상표는 소유자에게 있습니다.
186
+ 코드로 포함(재배포)하는 서드파티는 `humanizer` 뿐입니다.\
187
+ 아래는 스킬이 **런타임에 의존하거나 연동**하는 외부 요소로, banker 가 재배포하지 않으며 각 라이선스·상표는 소유자에게 있습니다.
171
188
 
172
189
  **의존 라이브러리·도구 (사용 시 별도 설치, 라이선스는 각 프로젝트 소유)**
173
- - Python: python-pptx(MIT, `arch-diagram`), python-docx(MIT, `rfp-author`), Playwright(Apache-2.0, `audit-web-page`·`play-qa`·`ultra-ui-qa`), detect-secrets(Apache-2.0, `lineage` 시크릿 스캔).
174
- - 브라우저·렌더링: Chromium(BSD-3-Clause), SwiftShader(Apache-2.0), Xvfb·X.Org(MIT). `setup-playwright` 및 브라우저 QA 스킬이 사용.
175
- - 문서·다이어그램: PlantUML(GPL 계열·다중 라이선스, `arch-diagram`), Poppler(GPL, `pdftoppm`), ImageMagick(ImageMagick License, `pdf-vision-extract`).
176
- - 개발환경·LSP: Node.js·nvm(MIT), uv(Apache-2.0/MIT), OpenJDK·Temurin(GPL+CE), jdtls(EPL-2.0), basedpyright(MIT)·vtsls·bash-language-server(MIT)·vscode-langservers-extracted, lsp-mcp([CesarPetrescu/lsp-mcp](https://github.com/CesarPetrescu/lsp-mcp)), tmux(ISC)·psmux, bubblewrap(LGPL-2.0), rustup. `setup-node`·`setup-python`·`setup-java`·`setup-lsp`·`setup-tmux`·`setup-sandbox` 가 설치.
177
-
178
- **연동·참조 (외부 프레임워크·서비스·브랜드)**
179
- - 프레임워크: 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` 가 사용.
180
- - 플러그인: insane-search(**MIT**, © fivetaku, [fivetaku/gptaku_plugins](https://github.com/fivetaku/gptaku_plugins)). `setup-insane-search` 가 설치.
181
- - 팀 아키텍처 팩토리: revfactory/harness(**Apache-2.0**, © Minho Hwang, [revfactory/harness](https://github.com/revfactory/harness))·Codex 포트 SaehwanPark/meta-harness(**Apache-2.0**). `harness-factory` 가 설치(banker 는 재배포하지 않고 설치·구성만 안내).
182
- - 서비스·디자인(독점·상표): Notion(`make-notion-guide`), Google Stitch(`setup-stitch`), Nothing 디자인 언어(`nothing-design`).
183
- - QA 대상 엔진(예시): Godot(MIT), Phaser(MIT) 등(`play-qa`).
190
+
191
+ | 분류 | 도구 | 라이선스 | 사용 스킬 |
192
+ |---|---|---|---|
193
+ | Python | python-pptx | MIT | `arch-diagram` |
194
+ | Python | python-docx | MIT | `rfp-author` |
195
+ | Python | Playwright | Apache-2.0 | `audit-web-page`·`play-qa`·`ultra-ui-qa` |
196
+ | Python | detect-secrets | Apache-2.0 | `lineage`(시크릿 스캔) |
197
+ | 브라우저·렌더링 | Chromium | BSD-3-Clause | `setup-playwright`·브라우저 QA |
198
+ | 브라우저·렌더링 | SwiftShader | Apache-2.0 | `setup-playwright`·브라우저 QA |
199
+ | 브라우저·렌더링 | Xvfb·X.Org | MIT | `setup-playwright`·브라우저 QA |
200
+ | 문서·다이어그램 | PlantUML | GPL 계열·다중 라이선스 | `arch-diagram` |
201
+ | 문서·다이어그램 | Poppler(`pdftoppm`) | GPL | `pdf-vision-extract` |
202
+ | 문서·다이어그램 | ImageMagick | ImageMagick License | `pdf-vision-extract` |
203
+ | 개발환경·LSP | Node.js·nvm | MIT | `setup-node` |
204
+ | 개발환경·LSP | uv | Apache-2.0/MIT | `setup-python` |
205
+ | 개발환경·LSP | OpenJDK·Temurin | GPL+CE | `setup-java` |
206
+ | 개발환경·LSP | jdtls | EPL-2.0 | `setup-lsp` |
207
+ | 개발환경·LSP | basedpyright·bash-language-server | MIT | `setup-lsp` |
208
+ | 개발환경·LSP | vtsls·vscode-langservers-extracted | 각 프로젝트 | `setup-lsp` |
209
+ | 개발환경·LSP | lsp-mcp([CesarPetrescu/lsp-mcp](https://github.com/CesarPetrescu/lsp-mcp)) | 각 프로젝트 | `setup-lsp` |
210
+ | 개발환경·LSP | tmux | ISC | `setup-tmux` |
211
+ | 개발환경·LSP | psmux | 각 프로젝트 | `setup-tmux` |
212
+ | 개발환경·LSP | bubblewrap | LGPL-2.0 | `setup-sandbox` |
213
+ | 개발환경·LSP | rustup | 각 프로젝트 | `setup-sandbox` |
214
+
215
+ **연동·참조 (외부 프레임워크·서비스·브랜드, banker 는 재배포하지 않음)**
216
+
217
+ | 분류 | 항목 | 라이선스 | 사용/설치 스킬 |
218
+ |---|---|---|---|
219
+ | 프레임워크 | 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` |
220
+ | 플러그인 | insane-search (© fivetaku, [fivetaku/gptaku_plugins](https://github.com/fivetaku/gptaku_plugins)) | MIT | `setup-insane-search` |
221
+ | 팀 아키텍처 팩토리 | revfactory/harness (© Minho Hwang, [revfactory/harness](https://github.com/revfactory/harness)) · Codex 포트 SaehwanPark/meta-harness | Apache-2.0 | `harness-factory`(설치·구성만 안내) |
222
+ | 서비스(독점·상표) | Notion | 독점 | `make-notion-guide` |
223
+ | 서비스(독점·상표) | Google Stitch | 독점 | `setup-stitch` |
224
+ | 디자인(상표) | Nothing 디자인 언어 | 상표 | `nothing-design` |
225
+ | QA 엔진(예시) | Godot·Phaser 등 | MIT | `play-qa` |
@@ -50,6 +50,13 @@
50
50
 
51
51
  { "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." },
52
52
 
53
+ { "name": "ultra-interview", "type": "skill", "target": "both", "reason": "research-first interview that resolves what public sources can answer and asks the human only what they alone can decide; discrete checklist gate (unresolved/total) instead of a scalar self-score", "supportingFiles": [], "caveat": "does NOT bundle or replace the OMC/OMX native deep-interview. Owns its own rubric on purpose: OMC scores 3 dimensions and OMX scores 5, so inheriting a native score would make the same threshold mean different things per runtime. Regulatory lookup is a general 'find the jurisdiction's primary source' instruction, not a hardcoded endpoint." },
54
+ { "name": "interval-report", "type": "skill", "target": "both", "reason": "human-facing progress ledger at docs/intermission.md for long runs; thin time layer + renderer over whatever state exists", "supportingFiles": [], "caveat": "start time is persisted in the file and never re-stamped (a compaction/resume re-stamp collapses elapsed to 0 and biases the report optimistic exactly when it matters most). Wall-clock comes from `date` because neither runtime exposes hour:minute in context. Reads ultragoal state when present but never duplicates it; leaves compaction triggering to smart-compact." },
55
+ { "name": "summary-wiki", "type": "skill", "target": "both", "reason": "read-only digest of the wiki into a single docs/ file for a knowledge-sync review (what the user knows vs what the wiki accumulated)", "supportingFiles": [], "caveat": "Claude = wiki_* MCP over .omc/wiki; Codex = `omx wiki` CLI over omx_wiki/ (there is NO wiki_* MCP on Codex; do not copy the append_wiki/compact-wiki caveat wording). Enumerates .omc/wiki/*.md directly and never wiki_list, which reads a structurally stale index and silently omits pages. Read-only toward the wiki; distinct from compact-wiki, which mutates it in place." },
56
+ { "name": "update-banker", "type": "skill", "target": "both", "reason": "updates an installed banker across its three independently-drifting channels (Claude plugin / npm global CLI / Codex skills)", "supportingFiles": [], "caveat": "the axis is channel, not OS: banker has zero dependencies and copy-based install, so OS differences reduce to npm prefix/EACCES footnotes. npm must be updated FIRST and verified before `banker setup --codex`, because setup sweeps every banker-* before copying and a stale CLI restores only its own older manifest. Verdicts come from per-channel probes, never exit codes." },
57
+ { "name": "refresh-readme", "type": "skill", "target": "both", "reason": "brings a README back in line with the code it drifted from, before release; prose claims are cross-checked against the manifest, skills/, and package.json", "supportingFiles": [], "caveat": "README only. Fence/inline-code/URL/--flag aware: POSIX end-of-options ` -- ` is textually identical to prose double-hyphen, so a blanket sed/awk substitution is itself a defect. Delegates AI-writing markers to humanizer rather than restating them." },
58
+ { "name": "cleansing-memory", "type": "skill", "target": "both", "reason": "keeps agent memory files inside their documented thresholds by de-duping to latest, condensing losslessly, and converting append-style records into replace-style", "supportingFiles": [], "caveat": "only MEMORY.md has a documented hard gate (200 lines or 25KB, whichever comes first); CLAUDE.md has NO documented size limit, so asserting a byte cap for it would be fabrication. Codex's 32768-byte project_doc_max_bytes covers project-scope AGENTS.md only, not the global one, and truncates raw bytes before a lossy UTF-8 decode, so cutting to an exact byte count corrupts the boundary character. Codebase-derivable CLAUDE.md trimming is left to Claude's own /doctor." },
59
+
53
60
  { "name": "front-qa", "type": "command", "target": "both", "reason": "ralplan->ralph frontend-QA pipeline; Claude=OMC, Codex=OMX", "supportingFiles": [] },
54
61
  { "name": "setup", "type": "command", "target": "both", "reason": "installer orchestrator; Claude AskUserQuestion multi-select, Codex prompt-based selection", "supportingFiles": [] }
55
62
  ]
@@ -40,3 +40,11 @@ The generator (`banker setup --codex`) applies the rules below for `target: both
40
40
  - `deep-research` — needs web search/fetch (Claude WebSearch/WebFetch or bundled workflow; Codex OMX autoresearch).
41
41
  - `smart-compact` — Claude statusLine exposes context%; Codex signal unconfirmed → heuristic fallback; `/copy`·`/compact`·paste stay user-driven (TUI).
42
42
  - `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.
43
+
44
+ 신규 스킬(0.7.0)도 `both`·런타임 인식:
45
+ - `ultra-interview` → 리서치 선행 질문 최소화 + 모호성 3% 이하 종료. **자체 루브릭 소유**가 설계 요점이다: OMC deep-interview 는 3차원, OMX 는 5차원으로 산식이 달라 네이티브 채점을 물려받으면 같은 임계값이 런타임마다 다른 뜻이 된다. OMC/OMX 네이티브 `deep-interview` 를 번들하거나 대체하지 않는다. 규제 조회는 엔드포인트 하드코딩이 아니라 "해당 관할의 공식 1차 출처를 찾아라"는 일반 지시다.
46
+ - `interval-report` → 런타임 무관(순수 파일+`date`). 두 런타임 모두 컨텍스트에 시:분이 없어 `date` 실측이 필요하다. ultragoal 산출물은 Claude=`.omc/ultragoal/`, Codex=`.omx/ultragoal/` 로 경로만 다르고, 있으면 읽고 없어도 동작한다.
47
+ - `summary-wiki` → **위키 접근이 런타임마다 완전히 다르다.** Claude=`wiki_*` MCP on `.omc/wiki/`, Codex=`omx wiki <tool> --input <json> --json` CLI on **`omx_wiki/`**(repo 레벨). **Codex 에 `wiki_*` MCP 는 없다.** `append_wiki`·`compact-wiki` 의 기존 caveat 문구를 복붙하면 오정보다. OMX 에만 있는 `wiki_refresh` 로 stale-index 를 고칠 수 있다.
48
+ - `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
+ - `refresh-readme` → 런타임 무관(파일 읽기·쓰기뿐, 의존성 0). 안티슬롭 마커는 `humanizer` 에 위임하고 재서술하지 않는다.
50
+ - `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` 에 위임한다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaydash9999/banker-plugins",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
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"
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: cleansing-memory
3
+ description: "(banker) 에이전트 메모리 파일(MEMORY.md·CLAUDE.md·AGENTS.md)을 문서화된 threshold 안으로 정리: 중복 최신본화, 무손실 간결화, append→replace 판별. 'cleansing-memory'/'메모리 정리'/'MEMORY.md 정리'/'CLAUDE.md 압축'/'AGENTS.md 용량' 시 사용."
4
+ ---
5
+
6
+ # cleansing-memory: 메모리 파일 정리 (중복 최신본화·무손실 압축·replace 판별)
7
+
8
+ 에이전트 런타임이 세션 시작마다 읽는 메모리 파일(Claude `MEMORY.md`·`CLAUDE.md`, Codex `AGENTS.md`)은
9
+ 세션을 거듭할수록 **쌓이기만 한다.** 이 스킬은 그 파일들을 **관리 기준 threshold 안으로** 되돌린다:
10
+ (1) 중복을 정리해 **최신본만** 남기고, (2) 과도한 장문을 **내용 유실 없이** 간결화하고,
11
+ (3) **append 가 아니라 replace 로 관리할 정보를 판별**한다.
12
+
13
+ 다루는 수치는 **문서화된 것만**이다. 한도가 문서화되지 않은 파일에는 한도를 지어내지 않는다.
14
+
15
+ **런타임:** 두 런타임의 메모리 모델은 **거의 닮지 않았다.** 한쪽 규칙을 다른 쪽에 옮기면 틀린다.
16
+ Claude = `CLAUDE.md` 한도 없음 + `MEMORY.md` 200줄/25KB + `@path` 4홉 import + AGENTS.md 미지원.
17
+ Codex = `AGENTS.md` 32768 B 프로젝트 예산 + 전역 파일 캡 없음.
18
+ 그래서 이 스킬은 파일마다 **그 파일에 문서화된 한도만** 적용한다. 공통 규칙을 만들지 않는다.
19
+
20
+ ## When to use
21
+ - 메모리 파일이 커져 **시작 컨텍스트**를 잠식할 때.
22
+ - 세션이 쌓여 같은 사실의 **옛 버전과 새 버전이 공존**할 때(상충 지시).
23
+ - Codex 프로젝트 `AGENTS.md` 체인이 **32768 B 에 근접·초과**해 조용히 잘릴 때.
24
+ - Claude auto-memory `MEMORY.md` 가 **200줄 또는 25KB 에 근접**할 때.
25
+ - dual-runtime 저장소에서 Claude 쪽과 Codex 쪽 메모리 파일이 **서로 다른 사실**을 말할 때.
26
+
27
+ ## When NOT to use
28
+ - **아직 안 쓴 지식을 남기려는 것** → OMC `remember`. 경계가 헷갈리기 쉬우니 분명히 한다:
29
+ `remember` 는 **쓰기 측**(무엇을 기억할지 결정해 남긴다), cleansing-memory 는 **GC 측**(이미 쌓인 걸 정리한다).
30
+ `remember` 에는 크기·dedup 메커닉이 **0** 이다. 남길 거면 remember, 남은 걸 줄일 거면 이 스킬.
31
+ - **Claude 에서 코드베이스 유도분 트림** → `/doctor` 가 v2.1.206+ 에서 **이미 제안한다. 그쪽을 쓰라.**
32
+ (디렉터리 구조·의존성 목록·아키텍처 개요처럼 코드베이스에서 유도 가능한 내용.) 여기서 재구현하지 않는다.
33
+ 단 `/doctor` 는 **Claude 전용**이라 Codex 의 `AGENTS.md` 엔 대체재가 없다.
34
+ - **한도에 여유가 큰 파일** → 손대지 마라. 압축은 공짜가 아니라 정보 손실 위험을 감수하는 행위다.
35
+
36
+ ## threshold (검증된 것만)
37
+ 확인 시점: **2026-07-16 / codex-cli 0.142.5 / Claude Code 2.1.211.**
38
+
39
+ | 파일 | 문서화된 한도 |
40
+ |---|---|
41
+ | Claude `MEMORY.md` | **200줄 OR 25KB 중 먼저.** 유일한 문서화된 하드 로드 게이트 |
42
+ | Claude `CLAUDE.md` | **없음.** 문서: "길이와 무관하게 전부 로드". 200줄은 soft target |
43
+ | Codex `AGENTS.md` (프로젝트) | **32768 B (32 KiB)** = `project_doc_max_bytes` 기본값 |
44
+ | Codex `~/.codex/AGENTS.md` (전역) | **캡 없음.** 별도 provider 가 통째로 read |
45
+ | agents.md 스펙 | **없음.** 파일명·중첩·마크다운만 표준화 |
46
+
47
+ - **CLAUDE.md 에 캡을 제시하면 날조다.** 문서화된 바이트 한도가 존재하지 않는다.
48
+ 정직한 진술은 "크면 줄이는 게 낫다"까지고, "N 을 넘으면 잘린다"는 **거짓**이다.
49
+ - **스코프 오류 주의**: 25KB 는 `MEMORY.md` **단독**에 걸린다. auto-memory **디렉터리 합계가 아니다.**
50
+ - **바이트가 맞고 토큰은 틀리다**: 런타임이 강제하는 건 바이트, 그리고 줄-OR-바이트다.
51
+ - **버전 고정 주의**: 32768·25KB/200줄·4홉은 **전부 버전 고정 사실**이다. 커뮤니티 출처는 **이미** 서로
52
+ 불일치한다(import 깊이를 4홉보다 크게 적은 글이 돌아다닌다). 보고할 때 **확인 시점을 같이 적고**,
53
+ 다른 버전에서는 1차 출처로 재확인하라.
54
+
55
+ ## 메커니즘 (모르면 안전하게 못 자른다)
56
+ - **CLAUDE.md 로드 순서**(전부 concat, **override 없음**): managed policy → user `~/.claude/CLAUDE.md`
57
+ → project `./CLAUDE.md` 또는 `./.claude/CLAUDE.md` → local `./CLAUDE.local.md`.
58
+ 뒤가 앞을 덮지 않는다. **더해진다.** "뒤에 쓴 게 이긴다"고 가정하면 상충이 안 지워진다.
59
+ - **`@path` import 재귀 깊이 = 4홉.** 코드 스팬·펜스 안의 `@README` 는 **리터럴**이라 import 되지 않는다.
60
+ - **Claude Code 는 AGENTS.md 를 읽지 않는다.** 문서화된 interop = CLAUDE.md 에 `@AGENTS.md` import 또는
61
+ 심볼릭 링크. dual-runtime 저장소에서 AGENTS.md 만 고치면 **Claude 쪽엔 아무 효과가 없다.**
62
+ - **Codex 프로젝트 discovery**: 루트→cwd 순회, **디렉터리당 첫 매칭 파일명 하나만**. 루트부터 concat.
63
+ - **`project_doc_max_bytes = 0` 이면 AGENTS.md 프로젝트 문서 로딩이 완전히 꺼진다.**
64
+ - **auto-memory 위치**: `~/.claude/projects/<project>/memory/`. git repo 기준이라 worktree 가 공유한다.
65
+ `autoMemoryDirectory` 로 변경, `autoMemoryEnabled:false` 또는 `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` 로 비활성.
66
+ 기본 켜짐·머신 로컬.
67
+
68
+ ## 워크플로
69
+
70
+ ### 1. 인벤토리 (읽기 전용)
71
+ 대상과 **실제 크기**를 먼저 잰다. 추정 금지.
72
+ - Claude: `~/.claude/CLAUDE.md`, `./CLAUDE.md` 또는 `./.claude/CLAUDE.md`, `./CLAUDE.local.md`,
73
+ managed policy, auto-memory `MEMORY.md`.
74
+ - Codex: `~/.codex/AGENTS.md`(캡 없음), 프로젝트 루트→cwd 의 `AGENTS.md` 체인.
75
+
76
+ ```bash
77
+ wc -lc <파일> # 줄 수와 바이트를 같이 본다. 문자 수(-m)가 아니라 바이트다
78
+ ```
79
+ - `@path` import 를 **4홉까지** 따라가 실제 로드 총량을 본다. 코드 스팬·펜스 안의 `@...` 는 세지 마라.
80
+ - **한도에 여유가 크면 여기서 멈춘다.** 보고만 하고 끝낸다.
81
+
82
+ ### 2. 중복 정리 → 최신본만
83
+ 1차 근거: 공식문서가 **"메모리 파일 간 상충하는 지시"** 를 주기적 검토가 필요한 **실패 모드로 명시**한다.
84
+ 커뮤니티 heuristic 이 아니라 문서화된 실패 모드다.
85
+ - 같은 사실의 항목이 여럿이면 **최신본 하나만** 남기고 옛 값은 지운다.
86
+ - 로드 체인은 override 가 없으니, user 와 project 가 상충하면 **둘 다 살아서** 모델에 들어간다.
87
+ 직접 지워야 사라진다.
88
+ - 어느 쪽이 최신인지 **모르면 지우지 말고 물어라.** 모르고 지우는 건 정리가 아니라 도박이다.
89
+
90
+ ### 3. append→replace 판별 (이 스킬의 알맹이)
91
+ - **replace 대상 = 현재 상태를 서술하는 사실**(버전·설치 위치·진행 지점). 새 값이 옛 값을 **무효화**한다
92
+ → 덮어쓴다. 이력을 남기려고 append 하면 파일이 단조 증가하고 모델은 **옛 값도 사실로 읽는다.**
93
+ - **append 대상 = 일어난 사건의 기록**(감사 결과·결정 근거). 나중 사건이 앞 사건을 무효화하지 않는다
94
+ → 쌓되 요약해 topic 파일로 민다.
95
+ - 애매하면 질문 하나로 가른다: **"새 값이 나오면 옛 값은 틀린 것이 되나?"** 그렇다 → replace.
96
+ 둘 다 여전히 참이다 → append.
97
+
98
+ ### 4. 무손실 간결화 + topic 파일 분산
99
+ 살아남은 최적화는 이것이다. **auto-memory topic 파일은 시작 시 로드되지 않는다**(문서화된 메커니즘).
100
+ `MEMORY.md` **만** 로드된다.
101
+ - → `MEMORY.md` 인덱스는 **얇게**, 상세는 **topic 파일로** 민다. 정보는 그대로 두고 **시작 컨텍스트
102
+ 비용만 실제로 제거**한다. 삭제가 아니라 **이동**이라 무손실이다.
103
+ - → 200줄/25KB 게이트도 `MEMORY.md` **단독**에 걸리므로 이동만으로 통과한다.
104
+ - 간결화는 **표현**을 줄이는 것이지 **사실**을 줄이는 게 아니다. 서술을 줄이고 구체값(버전·경로·수치·결정)은
105
+ 남긴다.
106
+ - 이 스킬이 소유하는 연산은 셋뿐이다: **중복 최신본화 + 무손실 압축 + append→replace 판별.**
107
+ Claude 의 코드베이스 유도분 트림은 `/doctor` 몫이다(위 "When NOT to use").
108
+
109
+ ### 5. 안전한 쓰기
110
+ - **문자 경계에서 자르고 한도에 여유를 둔다.** 정확히 N 바이트로 맞추지 마라("함정" 참조).
111
+ - 쓰기 전에 diff 를 보여주거나 원본을 백업한다. 메모리 파일 손실 = **세션 간 지식 손실**이다.
112
+ - `project_doc_max_bytes = 0` 으로 "해결"하지 마라. 로딩이 통째로 꺼진다.
113
+ - AGENTS.md 만 고치고 Claude 도 좋아졌다고 하지 마라. **Claude Code 는 AGENTS.md 를 읽지 않는다.**
114
+
115
+ ### 6. 검증 (보고 의무)
116
+ 쓰고 나서 **다시 재고** 보고한다. 추정 금지.
117
+ - **before/after 바이트·줄 수**를 파일별로. 토큰이 아니라 바이트다.
118
+ - 한도 대비: `MEMORY.md` 200줄 OR 25KB, 프로젝트 `AGENTS.md` 체인 32768 B.
119
+ - **UTF-8 무결성**: 결과 파일에 **U+FFFD** 가 있는지 확인한다. 있으면 절단이 문자를 쪼갠 것이다. 되돌려라.
120
+ - **유실 점검**: replace 로 지운 게 정말 무효화된 옛 값인지, topic 파일로 민 내용이 **실제로 거기 있는지**.
121
+ - **확인 시점 명시**: 기준 수치는 codex-cli 0.142.5 / Claude Code 2.1.211 (2026-07-16).
122
+ - **자가 무효화 위험**을 보고에 적는다("함정" 참조).
123
+
124
+ ## 함정
125
+ - **UTF-8 손상 (Codex)**: Codex 는 **raw 바이트 버퍼를 자르고 나서** `from_utf8_lossy` 를 씌운다.
126
+ 한글은 **3바이트/자**라 경계 문자가 쪼개져 **U+FFFD 로 깨진다.** 절단은 **조용하고 파일 중간**에서
127
+ 일어나며 TUI 에 **경고가 뜨지 않는다.** → "정확히 N 바이트로 자르는" 방식은 **스스로 손상을 만든다.**
128
+ 반드시 **문자 경계에서 자르고 여유를 둬라.**
129
+ - **자가 무효화**: auto-memory 는 Claude 가 쓰고 **세션 중에도 다시 쓴다.** `MEMORY.md` 정리가 같은
130
+ 세션이나 다음 세션에 **조용히 재팽창·되돌려질 수 있다.** 1회성 이벤트로 취급하지 마라. 정리 결과가
131
+ 유지되길 원하면 auto-memory 비활성 스위치가 존재한다는 사실을 사용자에게 알리고, **결정은 사용자에게** 맡겨라.
132
+ - **CLAUDE.md 캡 날조**: 다시 적는다. CLAUDE.md 에 **문서화된 바이트 한도가 없다.** 캡 수치를 제시하는
133
+ 순간 그건 **날조**다. 200줄은 soft target 이지 강제가 아니다.
134
+ - **스코프 오류**: 25KB 를 auto-memory **디렉터리 합계**에 적용하면 **없는 위반을 만들어낸다.**
135
+ topic 파일은 시작 시 로드조차 되지 않는다.
136
+ - **토큰으로 판정**: 게이트는 바이트와 줄-OR-바이트다. 토큰 추정은 게이트와 **무관하다.**
137
+ - **Codex 문서의 오해 유발 프레이밍**: 공식문서가 전역 → 프로젝트 순서 리스트로 서술해 **전역 파일이
138
+ 32 KiB 예산을 쓰는 것처럼 읽힌다.** 전역은 이 예산과 무관하고 캡이 없다. **프로젝트 예산에서 빼지 마라.**
139
+ - **`@` 리터럴 오독**: 코드 스팬·펜스 안의 `@README` 는 import 가 아니다. import 로 착각해 손대지 마라.
140
+
141
+ ## 원칙
142
+ - **날조 금지.** 문서화된 한도가 없으면 "없다"고 말한다. 없는 수치를 만들지 않는다.
143
+ - **재기 전에 자르지 않는다.** 인벤토리 없는 압축은 추측이다.
144
+ - **무손실 우선.** 지우기 전에 옮긴다. 지우는 건 **무효화된 옛 값**뿐이다.
145
+ - **바이트로 말한다.** 토큰으로 말하지 않는다.
146
+ - **런타임을 섞지 않는다.** Claude 규칙을 Codex 에 적용하지 않는다. 반대도 같다.
147
+ - **겹치면 양보한다.** `/doctor` 가 이미 하는 일은 `/doctor` 에 맡긴다.
148
+ - **수치엔 확인 시점을 붙인다.** 버전이 바뀌면 사실도 바뀐다.
149
+
150
+ ARGUMENTS: [--dry-run] [--claude|--codex] [대상 파일/경로] (없으면 현재 프로젝트·전역의 Claude·Codex 메모리 파일 전체를 인벤토리)