| 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 Agent": 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




