TRENDSHIFT #15 · 2026.05.24 · BIGPIZZAV3

CodexPlusPlus — Codex 데스크탑 앱을
건드리지 않고 향상시키는
CDP 인젝터

19k+ 스타. OpenAI Codex 앱의 회의 삭제 버튼·플러그인 잠금 해제 같은 불편을 외부 launcher 한 개로 해결한다. app.asar를 패치하지 않는다. Chromium DevTools Protocol(원격 디버깅 포트 9229)로 렌더러 프로세스에 스크립트를 주입하는 방식 — Codex 앱은 자신이 변형됐다는 사실조차 모른다. 초기 Python 묘수에서 Rust + Tauri로 전면 재작성된 데스크탑 도구.

19k+ ★
GitHub stars · 1.2k forks · 트렌딩 급상승
Rust 66%
Rust + TypeScript 11% + JS 18% (Cargo workspace)
Tauri 2
tokio · reqwest · rusqlite · serde (Cargo.toml)
v1.2.9
GitHub Releases — Windows exe / macOS DMG

0먼저, "Codex 앱"이 뭔가

CLI 도구가 아니라 OpenAI가 만든 데스크탑 GUI 앱이다.

흔히 말하는 Codex는 두 가지다 — 하나는 터미널에서 쓰는 codex CLI(VS Code Copilot CLI 같은 것), 다른 하나는 OpenAI가 2025년 후반부터 배포한 Codex 데스크탑 GUI 앱이다. CodexPlusPlus가 향상하려는 대상은 후자, 즉 데스크탑 GUI 앱이다.

용어
Electron 앱
Chrome 브라우저 엔진(Chromium)에 Node.js를 박아 넣어 "데스크탑 앱"이라고 부르는 것. 본질은 브라우저 안에서 도는 웹페이지에 가깝다. VS Code·Discord·Slack·Notion·OpenAI ChatGPT 데스크탑 앱이 다 같은 구조. Codex 앱도 Electron 위에 만들어졌다.

Electron 앱은 메인 프로세스(Node.js)와 렌더러 프로세스(Chromium)로 나뉜다. 렌더러는 사실상 우리가 매일 보는 브라우저 탭이다 — DOM이 있고, JavaScript가 돌고, CSS로 스타일링된다. 즉 웹페이지를 향상시키는 방법(자바스크립트 주입, DOM 조작)이 그대로 통한다. 이게 CodexPlusPlus가 가능한 이유다.

1한 줄 요약

"외부에서 Codex를 살짝 들춰서 화면만 살짝 고친다."

한 줄 정의

Codex App의 BetterDiscord — 단, 원본 파일은 절대 만지지 않는다

Codex 앱의 회의 목록에 삭제 버튼이 없고, API Key 사용자에게는 플러그인 입구가 잠겨 있는 두 가지 불편을 해결한다. 핵심 트릭 — Codex를 평소처럼 실행하지 않고 --remote-debugging-port=9229 옵션을 붙여 실행한 뒤, 그 포트로 들어가서 렌더러 화면에 renderer-inject.js를 슬쩍 주입한다.

설치 디렉토리에 DLL을 던지지도, app.asar를 패치하지도 않는다. Codex 자체는 "원본 그대로". 그래서 Codex가 자동 업데이트돼도 깨지지 않을 가능성이 크다.

2왜 지금 주목받는가

실용적 불편함의 해결 + 우아한 비침습 설계 + 중국 커뮤니티 영향력의 3박자.

2026년 5월 기준 TrendShift 15위까지 오른 이유는 단순한 기능 그 이상이다. 비슷한 시기에 또 다른 codex-plusplus(b-nnett 작품, TrendShift 19위에서 별도 분석됨)가 있는데, 그 쪽은 app.asar를 직접 패치하고 SHA-256 무결성을 우회하는 더 공격적인 접근이다. CodexPlusPlus(BigPizzaV3)는 같은 문제에 정반대 답을 낸다.

차별점 1 / 4

app.asar를 만지지 않는다 = 자동 업데이트가 안 깨진다

Electron 앱의 코드는 보통 app.asar라는 가상 아카이브에 묶여 있다. b-nnett 식 접근은 그 아카이브를 풀어서 코드를 바꾸고 다시 묶는다. CodexPlusPlus는 아카이브를 절대 만지지 않는다. 외부 launcher가 Codex를 디버그 모드로 실행하고, 살아있는 렌더러에 스크립트만 주입한다. Codex가 업데이트돼도 launcher는 영향 없다.

차별점 2 / 4

API Key 사용자의 잠긴 플러그인 입구

Codex 데스크탑의 플러그인 입구는 ChatGPT 로그인이 필요하다고 안내한다. API Key만으로 쓰는 개발자(즉, 자기 OpenAI 계정에서 사용량을 따로 결제하는 사람)는 플러그인을 못 쓴다. CodexPlusPlus는 그 입구를 강제로 활성화해 API Key 모드에서도 플러그인을 쓸 수 있게 한다.

차별점 3 / 4

회의 목록의 진짜 "삭제" 버튼

네이티브 Codex 앱은 "보관(Archive)"만 있고 삭제 옵션이 없다. CodexPlusPlus는 회의 목록의 항목에 hover 시 삭제 버튼을 노출하고, 클릭하면 (1) 서버사이드 삭제를 먼저 시도, (2) 안 되면 로컬 SQLite(~/.codex/state_5.sqlite)에서 직접 레코드를 삭제, (3) 삭제 전 백업해서 실행 취소까지 지원한다.

차별점 4 / 4

Codex++ 메뉴와 토글 UI

상단 메뉴 바에 Codex++ 항목이 추가되고, 클릭하면 설정 패널이 뜬다. 3가지 토글 — ① 플러그인 옵션 잠금 해제, ② 특수 플러그인 강제 설치, ③ 회의 삭제 — 을 켜고 끄며 사용한다. Windows 단축키 설치/제거, macOS 앱 번들(/Applications/Codex++.app) 자동 생성도 지원.

비유

본인의 게임 콘솔을 해킹하지 않고, 화면 위에 투명 오버레이를 띄워 게임에 없는 정보를 보여주는 외부 도구를 생각해 보자. 게임 ROM은 원본 그대로다. ROM이 업데이트돼도 오버레이만 다시 맞추면 된다. CodexPlusPlus의 철학이 정확히 그것이다 — Codex의 ROM(app.asar)은 절대 안 만지고, 화면 위에 추가 UI만 띄운다.

3기술 스택 전체 지도

Rust Cargo workspace + TypeScript/React(Tauri 관리 도구) + JavaScript(renderer-inject.js) + Chromium DevTools Protocol.

초기 Python 구현에서 Rust 기반으로 전면 재작성됐다. Cargo.toml(workspace root)의 주요 크레이트는 다음과 같다.

[workspace] members = [ "crates/codex-plus-core", # CDP 클라이언트·런처·브릿지·SQLite (Rust) "crates/codex-plus-data", # 백업·스토리지 어댑터 (Rust) "apps/codex-plus-launcher", # CLI 진입점 (Rust binary) "apps/codex-plus-manager", # Tauri 2 + React 19 + TypeScript GUI 관리 도구 ] # 주요 의존성 (Cargo.toml) tokio = { features = ["full"] } # 비동기 런타임 reqwest = { features = ["json"] } # HTTP 클라이언트 tokio-tungstenite # WebSocket (CDP 연결) rusqlite = { features = ["bundled"] } # SQLite 직접 조작 serde / serde_json # 직렬화 uuid # 백업 ID 생성

관리 도구(Codex++ Manager)apps/codex-plus-manager에 있으며, Tauri 2 + React 19 + TypeScript로 구현된 GUI 앱이다. 설치·제거·업데이트·설정·로그·진단 기능을 제공하는 독립 애플리케이션으로, macOS에서는 런처 앱(Codex++.app)과 관리 도구(Codex++ 관리 도구.app) 두 개가 별도로 설치된다.

핵심 기술 1: Chromium DevTools Protocol (CDP)

용어
CDP (Chrome DevTools Protocol)
크롬 브라우저에 F12를 누르면 뜨는 개발자 도구가 사실은 별도 프로세스다. 브라우저 본체와 개발자 도구는 WebSocket 기반 JSON-RPC 프로토콜로 대화한다. Chrome을 --remote-debugging-port=9229로 띄우면 그 대화가 외부에 노출된다. Puppeteer·Playwright·Selenium 같은 자동화 도구가 다 이 위에서 돌아간다.

Codex 앱은 Electron(=Chromium 임베드) 위에 만들어졌으니까, Codex 본체에 디버그 포트만 열면 외부에서 CDP로 들어가서 "이 페이지에 이 JavaScript를 실행해 줘" 같은 명령을 던질 수 있다. Runtime.evaluate, Page.addScriptToEvaluateOnNewDocument 같은 CDP 메서드들이 그 일을 해준다.

핵심 기술 2: 로컬 helper 서버 + CSP 우회

주입한 스크립트가 곧바로 fetch('http://localhost:57321/...')를 부르면 Codex 페이지의 Content-Security-Policy(CSP)가 막을 가능성이 크다. CodexPlusPlus는 이를 우회하기 위해 CDP bridge 패턴을 쓴다.

렌더러 안 JS Rust launcher 로컬 bridge │ │ │ │ console.log('CALL:...') │ │ ├─────────CDP──────────────►│ │ │ │ reqwest::post('localhost') │ │ ├───────────────────────────►│ │ │ │ │ │ JSON 응답 │ │ │◄───────────────────────────│ │ Runtime.evaluate │ │ │◄─────────CDP─────────────│ │ │ │ │

렌더러 JS는 네트워크 요청을 직접 하지 않는다. 대신 특별한 형식의 로그를 찍거나 전역 변수를 쓰고, Rust launcher가 CDP로 그것을 읽어서 실제 HTTP 요청을 대신 보낸다(tokio 비동기 런타임 기반). 응답이 오면 Runtime.evaluate로 결과를 다시 렌더러에 주입한다. 네트워크는 launcher 프로세스가 책임지고, 렌더러는 함수 호출처럼 보이는 인터페이스만 본다.

핵심 기술 3: Codex의 로컬 SQLite 직접 조작

서버사이드 삭제 API가 (1) 없거나 (2) API Key 모드에서 막혀 있으면, CodexPlusPlus는 Codex의 로컬 데이터베이스를 직접 건드린다.

위치역할
~/.codex/state_5.sqliteCodex가 회의 목록·상태·이력을 저장하는 SQLite DB
~/.codex-session-delete/backups/삭제 전 백업 — 실행 취소가 가능한 이유
~/.codex-session-delete/launcher.log숨겨진 시작 실패 로그
주의
데이터베이스 직접 조작의 리스크

Codex 앱이 실행 중일 때 SQLite를 동시에 쓰면 락(lock) 충돌이 날 수 있다. CodexPlusPlus는 crates/codex-plus-data/src/storage.rs에서 rusqlite 기반 트랜잭션/락 처리를 하지만, Codex 앱 측이 스키마를 바꾸면(state_5state_6이 되거나) 이 코드가 깨진다. 그래서 "Codex 자체가 업데이트되면 storage 크레이트도 같이 손봐야 한다"는 한계가 있다.

핵심 기술 4: GitHub Releases 바이너리 배포 + 설치 스크립트

사용자가 별도 런타임(Python 등)을 설치하지 않아도 된다. GitHub Releases에서 플랫폼별 설치 파일을 내려받아 실행하면 끝이다.

4아키텍처 심화 분석

Rust launcher → CDP → 렌더러 → CDP bridge → Rust bridge → Tauri Manager의 협업.

이 프로젝트는 핵심 컴포넌트가 정확히 어떻게 협력하는지가 전부다. 그림으로 보자.

┌─────────────────────────────────────────────────────────┐ │ 사용자가 Codex++.exe (Windows) / Codex++.app 실행 │ └────────────────────────┬───────────────────────────────┘ ▼ ┌─────────────────────────────────────────┐ │ apps/codex-plus-launcher/src/main.rs │ │ → launcher.rs 호출 (tokio async) │ └─────────────────────┬───────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ crates/codex-plus-core/src/launcher.rs │ │ ① 빈 9229 포트 확인 │ │ ② bridge.rs 백그라운드 실행 │ │ ③ Codex 실행: │ │ codex.exe --remote-debugging-port= │ │ 9229 --remote-allow-origins=... │ │ ④ CDP 연결 대기 (tokio-tungstenite) │ └─────────────────────┬───────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ crates/codex-plus-core/src/cdp.rs │ │ • Target.attachToTarget │ │ • Page.addScriptToEvaluateOnNewDoc... │ │ • Runtime.enable + console 가로채기 │ │ • Page.reload (인젝션 적용) │ └──────┬────────────────────────┬─────────┘ │ │ 주입 ▼ ▲ console.log 이벤트 ┌──────────────────┐ ┌──────┴──────────┐ │ assets/inject/ │ │ 요청 가로채기 │ │ renderer- │ │ → bridge에 위임 │ │ inject.js │ └──────┬──────────┘ │ │ │ │ • DOM 감시 │ ▼ │ • 메뉴/버튼 추가 │ ┌──────────────────────┐ │ • console.log │ │ bridge.rs │ │ ('CALL:delete')│ │ (Rust 내장 HTTP) │ └──────────────────┘ │ + storage.rs │ │ • DELETE /session/X │ │ → SQLite or HTTP │ │ • POST /undo/X │ │ → 백업에서 복구 │ └──────────────────────┘ ┌─────────────────────────────────────────┐ │ apps/codex-plus-manager (별도 앱) │ │ Tauri 2 + React 19 + TypeScript │ │ • 설치/제거/업데이트/설정/로그/진단 │ └─────────────────────────────────────────┘

핵심 설계 패턴 1: "비침습"의 일관성

설계 패턴
Non-Invasive Overlay (비침습 오버레이)

Codex 설치 디렉토리에 단 한 바이트도 쓰지 않는다. Rust launcher 바이너리와 inject 스크립트는 모두 ~/.codex-session-delete/와 사용자 홈 디렉토리에만 산다. Codex가 자동 업데이트돼도 launcher는 다음 실행 시 새 Codex.exe를 그대로 인자만 붙여서 띄울 뿐이다. 결합도가 "프로세스 인자 + 페이지 DOM 셀렉터" 두 곳으로 좁아져서 깨지는 표면적이 작다.

핵심 설계 패턴 2: CDP bridge로 CSP 무력화

일반적인 자바스크립트 주입은 페이지의 CSP에 막힌다. 즉, Content-Security-Policy: connect-src 'self'면 외부 localhost로 fetch가 안 된다. CodexPlusPlus는 "네트워크 호출을 console.log로 둔갑시켜서 Rust launcher가 대신 한다"는 우회로 이 문제를 푼다. 페이지 측에서는 그저 콘솔에 로그를 찍을 뿐이고, 어떤 외부 출처도 호출하지 않으니 CSP는 발동하지 않는다.

비유

학교에서 "수업 중 휴대폰 사용 금지"라는 규칙이 있을 때, 학생이 직접 통화하면 걸리지만 옆자리 친구한테 종이쪽지로 부탁하면 안 걸린다. 친구는 쉬는 시간에 대신 전화를 걸어 준다. CDP bridge가 그 쪽지 시스템이다 — 렌더러(학생)는 규칙을 어기지 않고, 외부 프로세스(친구)가 대신 행동한다.

핵심 설계 패턴 3: 백업-우선 삭제

SQLite 레코드를 지우기 전에 항상 백업한다(crates/codex-plus-data/src/backup.rs). ~/.codex-session-delete/backups/<timestamp>_<session-id>.json 형식으로 원본 행 전체를 JSON으로 떠 놓는다. UI에서 "삭제 직후 5초간 실행 취소" 토스트가 뜨는 것은 이 백업 덕분이다.

5디렉토리 구조 해부

Rust Cargo workspace — 2개 crate + 2개 앱 + JS 인젝션 스크립트.

CodexPlusPlus/ ├── Cargo.toml workspace root ├── crates/ │ ├── codex-plus-core/src/ │ │ ├── cdp.rs CDP JSON-RPC 클라이언트(tokio-tungstenite) │ │ ├── launcher.rs Codex 프로세스 spawn + CDP 연결 오케스트레이션 │ │ ├── bridge.rs Rust 내장 HTTP bridge (CSP 우회) │ │ └── storage_adapter.rs Codex SQLite 직접 조작(rusqlite) │ └── codex-plus-data/src/ │ ├── backup.rs 삭제 전 JSON 백업 생성·복구 │ └── storage.rs 트랜잭션·동시성 처리 ├── apps/ │ ├── codex-plus-launcher/src/main.rs CLI 진입점 (Rust binary) │ └── codex-plus-manager/ Tauri 2 + React 19 + TypeScript GUI 관리 도구 │ ├── src/ React 컴포넌트·상태관리 │ └── src-tauri/ Tauri 백엔드(Rust) ├── assets/inject/ │ └── renderer-inject.js 주입되는 렌더러 측 JS(메뉴/버튼/이벤트) ├── scripts/installer/ │ ├── windows/ NSIS 인스톨러 빌드 스크립트 │ └── macos/ macOS DMG 패키징 스크립트 ├── docs/ └── README.md / README_EN.md 중국어 + 영어 문서

요소별 역할

파일 / 모듈책임
apps/codex-plus-launcher/src/main.rsCLI 진입점. launch 명령 처리 — launcher.rs를 호출해 Codex를 디버그 모드로 실행.
crates/codex-plus-core/src/launcher.rs모든 컴포넌트를 한 자리에 모은다. 포트 확인, bridge 시동, Codex 프로세스 spawn, CDP 연결 대기, 인젝션 트리거.
crates/codex-plus-core/src/cdp.rstokio-tungstenite로 CDP 엔드포인트와 대화. Runtime.evaluate, Page.addScriptToEvaluateOnNewDocument, Console.messageAdded 등 핵심 메서드 래핑.
crates/codex-plus-core/src/bridge.rsRust 내장 HTTP bridge. 127.0.0.1 바인딩. 회의 삭제·실행 취소 요청을 렌더러 대신 처리(CSP 우회).
crates/codex-plus-core/src/storage_adapter.rsCodex의 SQLite 파일을 안전하게 열고 닫는다. rusqlite 기반 트랜잭션·동시성 처리.
crates/codex-plus-data/src/backup.rs삭제 전 원본 행 전체를 JSON으로 백업. 실행 취소 시 복구 경로 제공.
assets/inject/renderer-inject.jsDOM 감시 → 회의 목록에 hover 시 삭제 버튼 추가 → 상단 메뉴 바에 Codex++ 항목 추가 → 플러그인 잠금 해제. 이 한 파일이 사용자 눈에 보이는 모든 변화의 출처.
apps/codex-plus-manager/Tauri 2 + React 19 GUI 관리 도구. 설치·제거·업데이트·설정·로그·진단 기능. macOS에서는 별도 앱으로 설치.

6학습 포인트 (기술별)

데스크탑 자동화·CDP·CSP 우회·SQLite 조작·OS별 설치자.

① Chromium DevTools Protocol

이 프로젝트의 핵심 학습 자산이다. Puppeteer/Playwright 같은 라이브러리 없이 tokio-tungstenite만으로 CDP를 직접 다루는 Rust 코드가 300줄 내외다. CDP 공식 문서(chromedevtools.github.io/devtools-protocol/)와 crates/codex-plus-core/src/cdp.rs를 나란히 놓고 읽으면 자동화 도구들의 내부가 보인다.

실습 아이디어: cdp.rs의 WebSocket 연결 부분을 참고해 다른 Electron 앱(Discord, Slack)에 같은 방식으로 디버그 포트를 열고 DOM에 빨간 테두리를 그리는 Rust 미니 프로그램을 만들어 보자.

② Content-Security-Policy 우회 패턴

주입한 스크립트가 CSP에 막힐 때 console.log를 통신 채널로 둔갑시키는 패턴은 그대로 다른 곳에도 쓰인다. 예를 들어 회사 보안이 강한 SaaS의 페이지에 외부 데이터를 끌어오고 싶을 때, 같은 트릭이 활용된다(허가된 범위 안에서).

③ 백업-우선 파일 조작

crates/codex-plus-data/src/backup.rs의 "삭제 전 무조건 백업, 실행 취소 시 백업으로 복구" 패턴은 어떤 종류의 위험한 작업에도 일반화 가능한 안전망이다. Git의 --soft reset, macOS의 휴지통도 같은 원리.

④ Tauri 2 + Rust 데스크탑 앱 구조

apps/codex-plus-manager는 Tauri 2 + React 19 + TypeScript의 실전 예제다. Rust 백엔드와 React 프론트엔드가 Tauri IPC로 통신하는 패턴, NSIS(Windows) / DMG(macOS) 인스톨러 빌드 파이프라인을 직접 참고할 수 있다. Electron 대비 바이너리 크기와 메모리 사용량을 비교해 보는 것도 좋은 학습이다.

⑤ "패치 vs 오버레이" 의사결정 사례

같은 문제(Codex 향상)에 두 방향의 답이 있다. b-nnett는 ROM 패치, BigPizzaV3는 외부 오버레이. 업데이트 안정성·재배포 난이도·기능 완전성의 트레이드오프를 코드 두 개를 비교하면서 배우는 것은 흔치 않은 기회다.

7시스템 요구사항

Codex 앱이 깔린 Windows 또는 macOS. 별도 런타임 불필요 — GitHub Releases 바이너리 설치.

항목요구
OSWindows 10/11 또는 macOS Intel/ARM (Linux 미지원 — Codex 데스크탑 자체가 미배포)
설치 방법GitHub Releases에서 플랫폼별 설치 파일 다운로드 후 실행. Windows: CodexPlusPlus-*-windows-x64-setup.exe / macOS: CodexPlusPlus-*-macos-*.dmg. 별도 런타임(Python·Node 등) 불필요.
Codex App설치돼 있어야 함. 자동 탐색 경로: /Applications/Codex.app, /Applications/OpenAI Codex.app(macOS), C:\Program Files\WindowsApps\OpenAI.Codex_xxx\app(Windows)
포트9229(디버그) + bridge 포트 기본값 — 충돌 시 설정에서 변경 가능
저장 공간설치 파일 포함 수십 MB (Rust 바이너리 + Tauri Manager)

8직접 해볼 실습 과제

난이도별로 정리.

난이도 ★ — 따라하기

  1. 바이너리로 설치해 보기. GitHub Releases에서 플랫폼에 맞는 설치 파일(CodexPlusPlus-*-windows-x64-setup.exe 또는 macOS DMG)을 내려받아 실행. Codex 앱에 Codex++ 메뉴가 뜨는지 확인.
  2. 디버그 모드 직접 열어 보기. Codex를 --remote-debugging-port=9229로 직접 실행하고, 브라우저에서 http://localhost:9229에 접속해서 어떤 페이지가 보이는지 관찰.

난이도 ★★ — 비틀어 보기

  1. renderer-inject.js 한 줄 추가. 회의 제목 옆에 작은 별 모양 아이콘을 표시해서 "즐겨찾기" 표시를 흉내내는 DOM 조작 코드를 더해 보자. SQLite 저장은 bridge.rs에 새 엔드포인트를 추가한다.
  2. 소스 직접 빌드해 보기. git clonecargo build --release로 빌드. Rust 컴파일 경고와 크레이트 의존성 해소 과정을 살펴본다. apps/codex-plus-managernpm install && npm run tauri build로 별도 빌드.

난이도 ★★★ — 응용

  1. Slack 데스크탑 앱에 같은 패턴 적용. Slack의 메시지 작성 영역에 "한자/한글 변환" 같은 사용자 정의 버튼을 외부 launcher로 주입한다. CSP가 더 까다로워서 CDP bridge 패턴이 빛난다.
  2. 크로스플랫폼 통합 설치자 추가. Linux용 .desktop 파일 생성 + AppImage 패키징을 직접 짜 보자(Codex가 Linux를 지원하지 않으니 같은 패턴을 다른 Electron 앱에 응용).
  3. 자동 업데이트 추적기. Codex 앱이 새 버전으로 업데이트되면 renderer-inject.js의 DOM 셀렉터가 깨질 수 있다. GitHub Actions로 Codex 최신 버전의 DOM 구조를 매주 자동 점검하는 회귀 테스트를 짜 보자.

9심화 학습 로드맵

3주 코스로 정리.

1주차 — Electron + CDP 기초

2주차 — CodexPlusPlus 코드 정독

3주차 — 자기 프로젝트로 응용

10핵심 키워드 사전

이 프로젝트를 이해하는 데 필요한 용어들.

용어
CDP (Chrome DevTools Protocol)
Chromium 기반 앱과 외부 도구가 WebSocket+JSON-RPC로 대화하는 프로토콜. --remote-debugging-port=N 옵션으로 N 포트에 노출시킨다. Puppeteer·Playwright의 기반.
용어
Electron
Chromium 렌더링 엔진 + Node.js 런타임을 묶어 "데스크탑 앱"을 만드는 프레임워크. VS Code·Discord·Slack·Notion·Codex가 다 Electron 위에 있다.
용어
app.asar
Electron 앱의 코드(자바스크립트·HTML·CSS·리소스)를 묶은 단일 아카이브 파일. tar와 비슷하지만 헤더가 다르다. Electron이 실행 시 가상으로 마운트해서 그 안의 파일을 읽는다.
용어
CSP (Content Security Policy)
웹 페이지가 "어디서 스크립트를 받고, 어디로 요청을 보낼 수 있는가"를 선언적으로 제한하는 HTTP 헤더. XSS 방어 표준. 외부 스크립트 주입 시 가장 큰 장벽이 된다.
용어
렌더러 프로세스 (Renderer Process)
Electron에서 사용자가 보는 UI를 그리는 프로세스. 본질적으로 Chromium 탭. 메인 프로세스(Node.js)와는 IPC로 통신.
용어
SQLite
서버 없는 임베디드 관계형 데이터베이스. 단일 파일(.sqlite)에 데이터를 저장한다. Electron 앱들이 로컬 데이터(설정·캐시·세션)를 저장할 때 자주 쓴다.
용어
LINUX DO
중국어권 개발자 커뮤니티(linux.do). Discourse 기반 포럼. CodexPlusPlus 같은 작은 도구들이 이 커뮤니티에서 종종 시작되어 GitHub 트렌딩으로 떠오른다.
지금 바로 시도해 보기

5분 안에 자기 컴퓨터에서 CodexPlusPlus 동작 확인하기

  1. Codex 데스크탑 앱 설치 확인. macOS는 /Applications/Codex.app 또는 OpenAI Codex.app가 있는지, Windows는 시작 메뉴에서 검색.
  2. 설치 파일 다운로드. GitHub Releases 최신 릴리스에서 플랫폼에 맞는 파일 내려받기 — Windows: CodexPlusPlus-*-windows-x64-setup.exe / macOS: CodexPlusPlus-*-macos-*.dmg.
  3. 설치 실행. Windows는 exe를 실행, macOS는 DMG를 열어 /Applications/에 드래그. Codex++ 런처와 관리 도구(Manager)가 함께 설치된다.
  4. 실행. Codex++ 런처를 실행. Codex 앱이 평소처럼 뜨는데, 상단 메뉴에 Codex++ 항목이 추가돼 있어야 한다.
  5. 회의 삭제 테스트. 회의 목록에서 아무 항목 위에 마우스를 올리면 삭제 버튼이 보인다. 클릭 → 확인 → 5초 안에 "실행 취소" 시도.
원문 · BigPizzaV3/CodexPlusPlus (main branch) — 2026-05-24 · github.com/BigPizzaV3/CodexPlusPlus