codex-gui#
Opensource desktop GUI app for codex. No electron, built with gpui.
The frame rate is actually steady 60fps when using. HUD shows instable frame interval because there were no user interaction at that time, so no new frames were generated.
https://github.com/user-attachments/assets/75e13e95-1d42-4869-a9c0-9a102414f130
Installation#
You can download build artifacts from github action runs.
Run#
nix develop
cargo build --bin codex-code-mode-host
cargo run --bin codex-gui
The current local dependency upgrade uses sibling checkouts at
../Open-Agents-GUI/gpui-kit and ../Open-Agents-GUI/zed. Keep both directories
in place when building with Cargo. The forks are updated locally and have not
been pushed; switch the path dependencies back to published Git revisions
before producing a standalone distribution.
The local code-mode host keeps Codex's upstream transport and session protocol,
but executes JavaScript with the patched QuickJS runtime in
crates/codex-code-mode-runtime-quickjs.
dsh-gui is the same GUI driving a DeepSeek Harness instead of the embedded
Codex runtime. Released packages bundle the harness, so it needs no flags; the
GUI looks for dsh in this order:
--dsh-repo <path>, which runspnpm dshinside a harness source checkout;--dsh-bin <path>;$DSH_GUI_DSH_BIN;- a
dshshipped next to thedsh-guiexecutable; dshonPATH.
cargo run --bin dsh-gui -- \
--dsh-repo /path/to/deepseek-harness \
--profile app-server
The GUI continues to use the pinned Codex protocol types; the dsh process owns
model, permission, session, and configuration compatibility. Harness state stays
in $DSH_HOME (defaulting to ~/.dsh), so a bundled dsh-gui shares its login,
sessions, and settings with any other dsh installation and never copies the
harness into the home directory.
Packaging#
The flake is the canonical package definition for Linux and macOS. It also declares the public GHCR-backed binary cache, so these commands can reuse CI builds:
nix run --accept-flake-config .
nix build --accept-flake-config .#codex-gui
Linux additionally exposes .#deb, .#rpm, and .#appimage. macOS exposes
.#macos-app and .#macos-archive. Every package keeps codex-gui and
codex-code-mode-host in the same executable directory because the host is a
runtime component, not a standalone application.
The dsh-gui outputs use the same packaging pipeline for the DeepSeek Harness
client:
nix build --accept-flake-config .#dsh-gui
nix build --accept-flake-config .#dsh-gui-deb # also -rpm, -appimage
nix build --accept-flake-config .#dsh-gui-macos-archive
dsh-gui carries the harness, its node runtime, and the Codex app-server
adapter, so its artifacts are considerably larger than codex-gui's.
Cached build components#
.#rust-binaries compiles the Rust executables once through Crane.
.#dsh-harness builds the SuperKenVery/deepseek-harness fork from the commit
in flake.lock, including its existing app-server adapter and profile. Both
are independent, cacheable derivations; product assembly and archives consume
them without recompilation. There is no intermediate adapter release.
The harness build uses pinned Node/pnpm, a fixed-output dependency store, and
offline compilation of the shared host/client libraries and native components. Its install
check starts the stdio server with a temporary DSH_HOME, requiring no account.
The pnpm 11 SQLite index is cached as normalized logical records and restored
before offline installation, so Linux and macOS share the same dependency hash.
To update the harness, run nix flake update deepseek-harness, update the
dependency hash in nix/dsh-harness.nix if the lockfile changed, and build
.#dsh-harness before the platform bundles. Keep the pnpm version aligned with
the fork's packageManager. CI builds Linux x86_64/aarch64 and macOS aarch64;
macOS x86_64 is also exposed as a flake output but has no CI runner.
Release artifacts#
The GitHub Actions build publishes x86_64 and aarch64 Linux DEB, RPM, and
AppImage artifacts, an aarch64 macOS app archive, and native x86_64 and
aarch64 Windows ZIP archives, plus the same Linux and macOS artifacts for
dsh-gui.
DSH GUI.app includes its Node runtime and relocated native libraries. macOS
bundles use ad-hoc signatures verified during packaging. Developer ID signing and Apple
notarization are not part of this build; downloaded apps may still trigger
Gatekeeper.