| English | 简体中文 |
|---|
The unified workspace built for Codex CLI: organize and switch sessions by project, browse history elegantly, enrich prompts with pasted images / dragged files / @project files, and relaunch past conversations in one click for a smoother Codex experience.
- Platform recommendation: Windows 11 + WSL (default distro Ubuntu‑24.04). The best experience appears when Codex runs inside WSL. PowerShell mode is experimental (usable but not suggested as default).
- Project architecture: UI host with a minimal terminal bridge (Electron + React + Vite + node‑pty + xterm).
- Key Features
- Interface Overview
- Quick Start
- Tips
- Development & Build
- Internationalization (i18n)
- Directory Overview
- Runtime Notes & Indexes
- Verification Checklist
- Security & Paths
- Remote About/Donate/Announcement/Update Config
- Diagnostics & Logs
- Community & Contributions
- License
- Resources & Conventions
-
Automatic history ingestion & grouping (WSL / PowerShell) Read-only index of
~/.codex/sessions/**.jsonl, grouped by project directories with zero-intrusion management. -
Project tabs with one-click creation Create tabs like a browser; hit + to open a fresh Codex session and rename tabs as you wish.
-
Rich graphical input panel The input accepts pasted images, @project files, and dragged files for efficient prompt assembly.
-
History preview, filtering, and copy Search and filter any conversation, then copy the raw content instantly.
-
Resume past conversations Continue both new and legacy Codex CLI sessions even if the official CLI dropped historical resume support.
-
Parallel projects Display active sessions per project to keep multi-tasking organized.
| Scenario | Screenshot |
|---|---|
| Project overview (tabs + history panel) | ![]() |
| History search & preview | ![]() |
| Rich input (paste images / drag files / @file) | ![]() |
| Pasted image inline preview | ![]() |
| Resume historical sessions | ![]() |
- Windows 11 with WSL installed (default distro
Ubuntu-24.04, configurable; the app falls back to the system default if the preferred distro is unavailable). - Codex CLI must be runnable inside WSL (e.g.,
codex/codex .) with successful conversation tests. - Choose WSL terminal mode for the first run; PowerShell mode is experimental.
- When releases are available, download the latest installer from Releases.
- If no release is published yet, follow “Development & Build” to package it locally.
- Open Settings (gear icon) and configure the execution environment: choose WSL or PowerShell, pick the correct WSL distro, then save.
- Select (or add) a project directory and click + to create a session.
- In the Codex terminal, sign in or use your API credentials, type
/, and complete the initial model and approval policy setup as needed. - Paste images, @project files, or drag files into the input box and start collaborating.
- Resume history: Pick any conversation from the list and hit “Continue” to extend the context.
- Filter & copy: Filter the timeline and copy the content you need.
- Input booster: Pasted images appear inline as previews; referenced files stay discoverable.
- Multi-project switching: The sidebar shows active session counts per project to keep workloads balanced.
- Node.js ≥ 18
- WSL installed with an available distro (default
Ubuntu-24.04)
# Install dependencies (compiles Electron main process and rebuilds native modules)
npm i
# Launch Vite (web) and Electron (main process) together
npm run dev
# During development the main process loads from DEV_SERVER_URL=http://localhost:5173# Equivalent to: npm run build:web && electron-builder
npm run build- Before packaging,
postinstallcompiles the main process todist/electronand rebuilds native modules (e.g.,node-pty). - On Windows you can run
build-release.bat(skip-installskips reinstalling dependencies). - If source files under
/electron/*change, rerunnpm iornpx tsc -p tsconfig.jsonto refreshdist/electron. For ABI mismatches (e.g.,node-pty), runnpm run postinstall.
npm run test # Run unit tests with Vitest
npm run i18n:report # Diff localized keys against the English baseline
npm run i18n:check # Strict key checking used in CI- Stack: i18next + react-i18next + ICU. Namespaces are separated by module:
common,settings,projects,terminal,history,at. - Sample usage inside components:
import { useTranslation } from 'react-i18next';
const { t } = useTranslation('settings');
t('settings:language.label');- Resource directory:
web/src/locales/<lng>/<namespace>.json - Switch language: In the settings page or via DevTools
await window.host.i18n.setLocale('zh')
# Report key differences against the English baseline
npm run i18n:report
# Strict missing-key check (used in CI)
npm run i18n:check- Use
BASE_LNG=xxto set the reference language (defaults toen). - Missing keys fall back to
en. Rendering never returns null or empty strings (returnNull/returnEmptyString=false).
- Windows:
%APPDATA%/codexflow/locales/<lng>/<namespace>.json
Example:C:\Users\you\AppData\Roaming\codexflow\locales\ja\common.json - WSL:
/mnt/c/Users/you/AppData/Roaming/codexflow/locales/ja/common.json
The language dropdown merges built-in locales with user-provided ones; user files take precedence for local overrides.
/electron/main.ts
/electron/preload.ts
/electron/pty.ts
/electron/wsl.ts # Windows/WSL path & distro utilities
/electron/i18n.ts # Main-process locale state and IPC bridge
/electron/history.ts # History reader (JSONL)
/electron/indexer.ts # Incremental indexer with caching & watchers
/electron/fileIndex.ts # File/directory indexer (ripgrep + chokidar)
/electron/projects/
index.ts # Unified entry point (defaults to fast implementation)
/web/
index.html
src/
App.tsx
main.tsx
index.css
i18n/setup.ts
adapters/TerminalAdapter.tsx
components/ui/*
lib/*
types/host.d.ts
vite.config.ts
/tailwind.config.js
/postcss.config.js
/package.json
/tsconfig.json
/.gitignore
/docs/
i18n.md
diagnostics.md
-
Default distro:
distro = 'Ubuntu-24.04' -
Terminal modes:
terminal = 'wsl' | 'windows'(PowerShell) -
Launch command: stores base
codexCmd = 'codex'; no tmux wrapping in the current implementation -
WSL:
bash -lc "<codexCmd>" -
Windows: executed directly inside PowerShell
-
Example project path:
wslPath = '/mnt/c/Users/you/code/demo' -
History indexing:
electron/indexer.tsindexes~/.codex/sessions/**.jsonlincrementally and writes a local cache; the renderer consumes it via IPC. -
File indexing:
electron/fileIndex.tsruns ripgrep for the initial scan and chokidar for updates (place ripgrep atvendor/bin/rg.exewhen running on Windows). -
Projects module: unified entry
electron/projects/index.ts, default implementationprojects.fast.ts. The chosen implementation is logged toperf.log.
- Launch the app and click “New Console”: the WSL prompt/command output should appear.
- Type
uname -aandpwdin the input box and press Enter: expect echoed results. - Resize the window: the terminal content should auto-fit (FitAddon active).
- Optional: start
vim, ensure it works, and exit cleanly. - Optional: if
codexis installed, runcodex .to confirm it launches and streams logs.
- Renderer hardening:
contextIsolation: true,nodeIntegration: false. All capabilities are exposed via the minimal API inelectron/preload.ts(types inweb/src/types/host.d.ts). - Windows/WSL path conversion: see
electron/wsl.ts, supporting both drive letters and\\wsl.localhost\Distro\...↔ WSL paths.
- Deploy
docs/about-remote.jsonto a fixed endpoint; by default the app readsDEFAULT_REMOTE_URLdefined inweb/src/lib/about.ts(replace as needed). - Responses are cached and refreshed opportunistically when the network is available.
-
Refer to
docs/diagnostics.mdfor detailed guidance. -
Main process: set
CODEX_DIAG_LOG=1to write%APPDATA%/codexflow/perf.log -
Renderer: run
localStorage.setItem('CF_DIAG_LOG','1')
- 💬 Q&A / Discussions: GitHub Discussions
- 🐞 Bugs / Feature requests: GitHub Issues (include system info, reproduction steps, and use the templates)
- 🤲 Contribution guide: see
CONTRIBUTING.mdorCONTRIBUTING.zh-CN.md - 🔐 Security issues: follow
SECURITY.md(avoid disclosing in public issues) - 🔏 Privacy policy: see
PRIVACY.md
Star ⭐ the project, send PRs, and help localize new languages!
Released under Apache License 2.0. See LICENSE in the repository root. Retain additional notices listed in NOTICE when redistributing.
- Application screenshots:
assets/screenshots/<lng>/<name>.png(lngacceptsenorzh). - Branding: always refer to the app as CodexFlow without abbreviations.
- Reference links:
- Repository: https://github.com/lulu-sk/CodexFlow
- Releases: https://github.com/lulu-sk/CodexFlow/releases




