TRENDSHIFT DEEP-DIVE · 2026.05.21 · b-nnett/codex-plusplus

codex-plusplus —
Codex 데스크탑 앱의 BetterDiscord식 tweak 시스템

OpenAI Codex 데스크탑 앱을 — "내가 원하는 대로 뜯어고치는" 비공식 tweak 시스템. Electron app.asar 패치 + Loader/Runtime/Tweak의 3단 분리 + ESM 모듈로 작성된 tweak. 한 줄 설치 curl ... | bash. macOS·Linux·Windows. JavaScript 53% / TypeScript 45%. 3,200+ stars의 레포가 TrendShift 19위에 오른 이유 — 사용자가 직접 IDE를 모드한다는 시대 정신.

0먼저, "왜 이게 만들어졌나"부터

OpenAI Codex 데스크탑 앱이 — 부족한 부분을 사용자가 직접 채운다는 발상.

OpenAI는 2025년 후반 — Codex 데스크탑 앱을 출시했다. ChatGPT의 코딩 모드를 — Electron으로 패키징한 IDE. 강력하지만, 모든 IDE처럼 — 사용자마다 원하는 게 다르다. 어떤 키보드 단축키를 추가하고 싶고, UI 레이아웃을 살짝 바꾸고 싶고, 더 작은 폰트를 쓰고 싶다.

OpenAI에 "기능 추가해주세요" PR하는 것보다 — "내가 그냥 직접 패치한다"가 더 빠른 사람이 있다. 그게 codex-plusplus다. BetterDiscord, Vencord의 — Codex 버전. Discord를 사용자가 직접 모드하는 문화가 — Codex 데스크탑에도 도착.

핵심 기술적 도전: Electron 앱의 코드 사인을 우회하면서 — 자동 업데이트(Sparkle)가 패치를 덮어쓰는 걸 막는다. app.asar 패치, ElectronAsarIntegrity SHA-256 재계산, macOS ad-hoc re-sign, 런치 에이전트로 업데이트 후 자동 재패치. "Electron 앱 내부를 정확히 이해해야 가능한 것"이라 — 기술적 진입장벽이 높다.

용어
Electron app.asar
Electron 앱의 — 핵심 자바스크립트·HTML·CSS를 묶은 단일 아카이브 파일. tar의 일종. 앱 본체가 거의 다 이 안에. asar 파일을 풀고 코드를 수정한 후 다시 묶으면 — 앱을 모드한 것. 단점: 코드사인이 깨진다.
용어
ElectronAsarIntegrity
Electron 최신 버전이 도입한 — asar 무결성 검증. Info.plist(macOS) 또는 metadata에 — asar의 SHA-256 해시가 저장. 앱 시작 시 검증. 해시가 안 맞으면 앱이 안 뜬다. codex-plusplus는 — 패치 후 SHA-256을 다시 계산해 Info.plist에 쓴다.
용어
BetterDiscord / Vencord (참고 케이스)
Discord 데스크탑 앱을 — 비공식 패치해서 테마·플러그인을 깔게 해주는 도구. 2017년~. 디스코드 본사는 "공식 비협조"지만 — 사용자가 너무 많아 묵인. codex-plusplus는 — 같은 패턴을 Codex 앱에 적용한 시도.
용어
ESM (ECMAScript Module)
자바스크립트의 — 표준 모듈 시스템. import/export 키워드. CommonJS(require)의 후속. codex-plusplus의 tweak은 — ESM 모듈로 작성. "브라우저·Node·Electron 어디서나 동일하게 작동".
용어
Code Signing (코드 사인)
앱이 진짜 — 그 회사가 만든 정품인지 인증. macOS는 Apple Developer 서명 필수. codex-plusplus가 asar를 수정하면 — 사인이 깨진다. 그래서 codesign --force --deep --sign -로 ad-hoc 재서명. "인증되지 않은 개발자"로 macOS가 경고하지만 — 첫 실행 시 사용자가 허용하면 된다.

1한 줄 요약

전체 글의 핵심 메시지.

한 줄로 말하면

"OpenAI Codex 데스크탑 앱의 — BetterDiscord 형 비공식 mod 매니저"

핵심은 3단 분리 아키텍처다. ① 앱 안: 최소한의 loader stub만 패치 (한 번). ② 사용자 디렉토리: runtime 본체 (hot-reloadable). ③ tweaks 폴더: 각 tweak 모듈. "앱 본체는 거의 안 건드리고 — runtime/tweaks는 무한히 갈아낄 수 있게". Discord 모드 커뮤니티가 — 10년간 갈고 닦은 모범 답안을 Codex 앱에 직접 적용.

두 번째 매력: 한 줄 설치 — curl ... | bash. 사용자 수동 작업이 거의 없음. 자동 업데이트와도 공존(launch agent가 — 업데이트 후 자동 re-patch).

2왜 트렌딩하는가

37 stars의 신생이 — TrendShift 19위에 올라온 모멘텀 이유.

① "OpenAI Codex 데스크탑 앱의 부족함"이라는 깔린 수요. Cursor·Claude Code 같은 경쟁자에 비해 — Codex 앱은 UI·단축키·확장성에서 아직 약하다. 사용자가 — "내가 직접 고친다"로 향하는 게 자연스럽다. 그 출구가 codex-plusplus.

② "BetterDiscord 패턴의 정통성". Vencord·BetterDiscord가 — 사용자 수십만 명에게 검증된 패턴. "앱을 패치하지만 — 안정성을 유지하는 법"이 그 커뮤니티에 다 정리되어 있다. codex-plusplus는 — 그 패턴을 단순 이식.

③ "한 명의 인디 개발자 vs 거대 회사" 서사. README 위에 — "Status: alpha. PRs welcome.". 한 명(@b-nnett)이 — OpenAI를 상대로 비공식 modding 시스템을 만든다는 — DIY 정신. 모멘텀 폭발의 정확한 형태.

④ "사용자가 직접 IDE를 모드한다는 시대 정신". Cursor·Claude Code는 — 회사가 제공하는 SKILL.md·Plugin 시스템을 따라야. 반대로 — codex-plusplus는 사용자가 직접 — 회사 권한 없이 패치. "AI 코딩 도구의 BetterDiscord화"를 — 좋아하는 사람은 분명히 있다.

3기술 스택

Electron + Node.js + 깊은 OS-specific 마법.

3-1. 코어 기술

Electron asar (앱 패치), node:crypto SHA-256 (무결성 재계산), plist 파싱 (macOS), codesign CLI (macOS ad-hoc 서명), launchd (macOS) / systemd (Linux) / Task Scheduler (Windows) — 자동 재패치용.

3-2. Tweak 모듈 시스템

ESM(ECMAScript Module) 기반. manifest.json(이름·버전·작성자·githubRepo) + index.js(start()/stop() 생명주기). 런타임이 — .ts도 즉석 트랜스파일. "hot-reloadable" — 저장하면 즉시 반영.

3-3. SDK

@codex-plusplus/sdk 패키지가 — tweak 작성용 API 제공. api.settings.registerPage()(설정 패널 등록), api.log.info()(로그), api.commands.add()(명령어 추가) 등. "VSCode 확장 API의 미니어처".

3-4. 자동 업데이트 회피

OpenAI Codex는 — Sparkle(macOS·Linux) 또는 자체 업데이터로 자동 업데이트. 업데이트 시 — codex-plusplus 패치가 덮어쓰여진다. 해결: launch agent(macOS Launch Daemon)가 — 업데이트 감지 후 자동 re-patch. 사용자 개입 0.

4아키텍처 심화 분석 — 3단 분리의 우아함

"건드릴 곳 적게, 갈아낄 곳 많게"의 패턴.

[Codex.app 본체]                              ← 한 번만 패치
  └── Contents/Resources/app.asar
        └── 진입점이 → loader.cjs 로 교체 (한 줄 require)

       ┌──── loader가 부팅 시 작동 ────┐
       │                              │
       ▼                              ▼
[Runtime in user-data-dir]      [Tweaks in user-data-dir]
  ~/Library/Application         ~/Library/Application
  Support/codex-plusplus/       Support/codex-plusplus/
       runtime/                     tweaks/
       ↑                              ↑
       hot-reloadable                hot-reloadable
       (GitHub release로 업데이트)    (사용자가 자유 추가)

  ┌─── 자동 업데이트 ───┐
  │  GitHub Codex++   │     [Update Watcher]  (launch agent)
  │  새 release 감지   │ →   업데이트 시 자동 repair
  │  daily 확인        │     (asar 다시 패치)
  └────────────────────┘

핵심 설계 패턴 4가지

패턴 1
"Minimal Patch — 앱 본체엔 loader stub만"

asar 안에 — "require('/path/to/loader.cjs')" 한 줄만 추가. 다른 모든 로직은 — 사용자 디렉토리의 runtime에. 그래서 — 자동 업데이트가 와도 patch 자체는 — 다시 1줄만 적용. 무결성 SHA 재계산도 빠르다.

패턴 2
"Belt-and-Suspenders — 무결성 우회 2중"

"Info.plist의 SHA-256을 다시 쓰기 + Electron Framework binary의 EnableEmbeddedAsarIntegrityValidation 플립". 한 가지가 실패해도 — 다른 게 막아준다. "공격적 우회 — 그러나 정직"(README가 모든 step을 명시).

패턴 3
"Lifecycle Hooks — start/stop"

각 tweak은 — start(api)로 부팅 시 호출, stop()으로 비활성화 시 정리. 사용자가 설정 패널에서 토글 → 즉시 적용 (재시작 X). "OS의 데몬과 같은 라이프사이클"을 — Electron 안에서 흉내.

패턴 4
"Decentralized Distribution — 각 tweak이 자기 GitHub release로"

각 tweak의 manifest.json에 — githubRepo: "owner/repo". Codex++는 — 매일 GitHub Releases 체크. 새 버전 있으면 — Settings에 "Update Available" 표시. 자동 설치는 안 함. 사용자가 release notes·diff를 보고 — 수동 교체. 보안 의식.

5디렉토리 구조 해부

monorepo + 디스크 위 사용자 디렉토리.

codex-plusplus/  (저장소)
├── docs/
│   ├── ARCHITECTURE.md        ← 시스템 전체 그림
│   ├── WRITING-TWEAKS.md      ← Tweak 작성 API
│   └── ...
├── packages/                  ← monorepo (npm workspaces)
│   ├── installer/             - install.sh가 깐 CLI (uninstall, status, repair, doctor)
│   ├── loader/                - app.asar 안에 들어가는 진입 stub
│   ├── runtime/               - tweak 발견·로드·생명주기 관리
│   ├── sdk/                   - @codex-plusplus/sdk — tweak 작성용 API
│   └── native-host/           - native OS bridge (Objective-C++)
├── tweaks/                    ← tweak 작성 가이드
│   └── AGENTS.md              - tweak 작성 가이드
├── install.sh                 ← 한 줄 설치 스크립트
├── CHANGELOG.md
├── SECURITY.md                ← 보안 모델 + 신고 정책
├── package.json               ← npm workspaces
├── tsconfig.base.json
└── README.md

사용자 디스크 상태 (설치 후):
~/Library/Application Support/codex-plusplus/       (macOS)
├── source/                    ← Codex++ CLI 소스 (repair·uninstall용)
├── runtime/                   ← 부팅 시 로드되는 본체
├── tweaks/                    ← ESM 모듈 + manifest 모음
├── backup/                    ← 패치 전 asar 백업 (uninstall 시 복원용)
└── config.json                ← 사용자 설정

흥미로운 디테일: monorepo로 잘 쪼개져 있다. 5개 패키지 — installer / loader / native-host / runtime / sdk. 각자 독립 build·테스트. "신생 alpha 레포지만 — 아키텍처는 성숙". 메인테이너가 — Discord 모드 커뮤니티 경험자일 가능성 높다.

6학습 포인트 — 이 레포에서 무엇을 가져갈 것인가

Electron 내부 + 사용자 모드 시스템 디자인 양쪽.

6-1. Electron 앱 내부 해부

app.asar 구조, Info.plist의 ElectronAsarIntegrity, codesign 메커니즘. Electron 앱을 — 외부에서 합법적으로 모드하는 법의 교과서. 자기 회사 Electron 앱의 — 디버깅·확장·QA에도 그대로 응용 가능.

6-2. 사용자 모드 시스템 디자인 — Loader/Runtime/Tweak

"앱 본체 거의 안 건드리고 — 무한히 확장 가능한 구조"의 패턴. 자기 앱을 — 이 구조로 설계하면 — 사용자가 자발적으로 확장 생태계를 만들어 준다. VSCode가 — 같은 원리로 확장 1만+ 개를 가졌다. 작은 앱도 같은 패턴 가능.

6-3. SHA-256 무결성 우회의 정직한 구현

"무결성 검증을 우회한다"는 — 보안 관점에선 위험할 수 있다. 그런데 README에 — 모든 step을 명시하고 SECURITY.md를 따로 둔다. "사용자가 알고 동의하는 우회". 자기가 — 보안 민감 도구를 만들 때 — 어떻게 사용자에게 정직할지의 모범.

6-4. macOS·Linux·Windows 자동 워치독 패턴

3개 OS에서 — "백그라운드 워치독으로 자동 작업"을 동일하게 구현. macOS는 LaunchAgent, Linux는 systemd unit, Windows는 Task Scheduler. 크로스 플랫폼 데몬의 모범. 자기 CLI에 — 같은 패턴 적용 가능.

6-5. BetterDiscord/Vencord 케이스 스터디

이 레포의 본질은 — "Discord 모드 커뮤니티의 10년 노하우를 Codex 앱에 단순 이식". 자기가 좋아하는 데스크탑 앱(Slack, Spotify, Notion)의 — 모드 시스템을 디자인할 때 — 같은 패턴을 그대로 쓸 수 있다.

7시스템·하드웨어 요구사항

매우 가볍다.

최소

Codex.app 설치된 OS + Node.js 20

OS: macOS·Linux·Windows 모두. 전제: OpenAI Codex 데스크탑 앱이 깔려 있어야. 설치 시점: Node.js 20+ (한 번만 — 설치 스크립트가 사용). 실행 시점: Node.js 불필요 (loader가 Electron 안에서 동작).

권한

관리자 권한 + Codex.app 쓰기 권한

macOS는 — /Applications/Codex.app 안의 파일을 수정. 권한 요구. macOS Gatekeeper가 — ad-hoc 재서명된 앱을 "신뢰할 수 없음"으로 표시할 수 있다. 첫 실행 시 — System Settings → Privacy & Security에서 "Open Anyway" 클릭.

위험
"앱이 깨질 가능성 — 백업으로 보장"

asar 패치는 — 항상 실패 가능성. codex-plusplus는 — 패치 전 원본을 ~/Library/Application Support/codex-plusplus/backup/에 보관. 문제 발생 시 uninstall 명령으로 즉시 복원. "하지만 이 백업 시스템 자체도 신뢰 필요" — 정식 출시 전 alpha 단계라는 점 기억.

8직접 해볼 수 있는 실습 과제

난이도별 4개.

난이도 ★ (15분)

"한 줄 설치 + 기본 tweak 둘 사용"

OpenAI Codex 앱이 깔린 상태에서 — curl -fsSL https://raw.githubusercontent.com/b-nnett/codex-plusplus/main/install.sh | bash. Codex 재시작 → Settings → Codex Plus Plus에서 — 키보드 단축키·UI 개선 tweak 활성화. 자기 일상 코딩 환경의 차이를 30분 만에 체감.

난이도 ★★ (반나절)

"내 tweak 한 개 직접 작성"

docs/WRITING-TWEAKS.md 정독 → "command palette에 명령어 추가" 같은 간단한 tweak. ~/Library/Application Support/codex-plusplus/tweaks/my-tweak/에 manifest.json + index.js. 저장 후 Codex 재시작. "내 IDE를 내가 진짜로 개조했다"의 첫 경험.

난이도 ★★★ (2~3일)

"GitHub release로 — 자기 tweak 배포"

자기 tweak을 — GitHub 레포로 publish. manifest.jsongithubRepo 명시. v0.1.0 release. 그러면 — codex-plusplus가 자동으로 — "Update Available"을 매일 체크. 다른 사용자가 — manifest 가져다 깔면 — 자기 tweak이 — 분산 배포되는 첫 모드.

난이도 ★★★★ (1~2주)

"Codex-plusplus 자체에 — Linux 지원 PR"

README에 명시: "Status: alpha. 각 플랫폼에서 real-device testing 필요". Linux 환경에서 — install.sh를 손에 들고 1줄씩 정직 테스트. 깨지는 부분을 수정 PR. "신생 alpha 레포에 — 의미 있는 핵심 PR". OSS 이력서의 결정타.

9관련 기술 심화 학습 로드맵

이 레포에서 출발해 — Electron 모드·시스템 디자인으로.

트랙 A — Electron 내부 마스터

asar·codesign·Sparkle·context isolation

이 레포의 코드를 — 한 줄씩 정독. asar 포맷 문서, Apple codesign 매뉴얼, Sparkle 자동 업데이터, Electron context isolation. "Electron 앱을 만든 사람보다 — Electron 앱을 모드하는 사람이 더 잘 안다"의 영역.

트랙 B — BetterDiscord 생태계

Vencord·BetterDiscord 코드 정독

10년 검증된 — 모드 매니저의 정답. plugin loader 패턴, settings UI 주입, hot reload. codex-plusplus와 비교하면서 — "같은 문제를 둘이 어떻게 다르게 풀었나"의 비교 학습.

트랙 C — 자기 앱의 모드 생태계

"내 앱에 — 사용자 mod 시스템을 어떻게 넣을까"

자기가 만드는 데스크탑/모바일 앱에 — Loader/Runtime/Tweak 3단 구조. ESM 모듈 + manifest. VSCode 확장처럼 — 사용자가 자발적으로 생태계를 만들어 준다. "앱의 가치를 — 자기 코드가 아니라 사용자 코드가 만든다".

트랙 D — Cross-platform 데몬

"3 OS에서 같은 백그라운드 워치독"

macOS LaunchAgent / Linux systemd / Windows Task Scheduler. — 같은 작업을 3개 OS에서. 이 패턴이 — 자기 CLI에 백업·동기화·모니터링을 얹을 때 그대로 사용 가능.

10핵심 키워드 사전

레포·생태계 안에서 자주 보는 용어.

용어
Loader / Bootstrap (로더)
앱 시작 시 — "맨 처음 실행되는 작은 스크립트". 본격 코드를 로드하기 전에 — 환경을 준비. codex-plusplus의 loader.cjs는 — 사용자 디렉토리의 runtime을 require할 뿐. 최소 책임 원칙.
용어
Hot Reload
실행 중인 앱을 — 재시작 없이 — 변경된 코드 반영. tweak 파일을 저장하면 — 즉시 적용. webpack·Vite의 HMR과 같은 개념을 — Electron 앱 모드에 적용.
용어
Ad-hoc Code Signing
codesign --force --deep --sign -"개발자 인증서 없이 — 그냥 자기 자신을 서명". Apple Developer 계정 없이도 — macOS에서 앱 실행 가능 (Gatekeeper 경고만). codex-plusplus가 — asar 수정 후 다시 서명할 때 쓰는 방법.
용어
Launch Agent (macOS)
macOS의 — "사용자 로그인 시 자동 실행되는 백그라운드 프로세스". plist 파일 하나로 정의. codex-plusplus는 — 이걸로 "Codex 업데이트 감지 → 자동 re-patch" 데몬을 등록.
용어
Sparkle
macOS 앱의 — "표준 자동 업데이터". 많은 Electron 앱이 채택. codex-plusplus는 — Sparkle이 업데이트할 때 — patch가 덮어쓰여진다는 문제를 — Launch Agent 워치독으로 해결.
용어
ESM Module Federation
여러 ESM 모듈을 — 런타임에 동적으로 로드. tweak 시스템의 본질. codex-plusplus runtime이 — tweaks/ 디렉토리를 스캔, 각 manifest.json을 읽고, index.js를 동적 import. "실행 중 새 코드 흡수".

11참고 링크

레포·관련 자료.

레포 본체: github.com/b-nnett/codex-plusplus

문서: ARCHITECTURE.md · WRITING-TWEAKS.md · SECURITY.md

유사 모드 매니저: Vencord(Discord), BetterDiscord, Spicetify(Spotify).

OpenAI Codex 앱: chatgpt.com/codex

한 줄 핵심

"내가 쓰는 데스크탑 앱이 부족하면 — 회사를 기다리지 말고 BetterDiscord 패턴으로 직접 모드한다"

  1. Alpha라는 점을 명심. 자기 본업 Codex 작업이 망가지면 안 되는 사람은 — 지금 깔지 말 것.
  2. OSS 기여 천국. 14 commits, 1 release, 1명 메인테이너. PR 한 건이 매우 의미 있다.
  3. BetterDiscord 코드와 비교. 같은 문제를 풀지만 — Codex 앱의 특수성이 어디서 다르게 작동하는지 — 직접 비교 학습.
  4. 자기 데스크탑 앱에 — 같은 패턴 도입. Loader/Runtime/Tweak 3단 구조는 — 어떤 Electron 앱에도 그대로 적용 가능.
  5. SECURITY.md를 꼭 읽어라. 무결성 우회의 위험 — 그리고 작성자의 정직한 설명이 어디까지인지를 알 권리.

분석 대상: b-nnett/codex-plusplus · TrendShift 19위(2026.05.21) · 3,200+ stars · MIT License · JavaScript 53% / TypeScript 45% · 작성: 유행레포정리 프로젝트