Calm slate. Living color.
Living Code for the Codex CLI: native TextMate syntax themes with coordinated Markdown, selections and added/removed diff backgrounds.
|
Night Dark · full palette
|
Frost Dark · softer chroma
|
|
Paper Light · near-white slate
|
Signal Dark · teal accent
|
Select any preview to view the image at full size.
flavor=night # night, frost, paper, or signal
curl -fsSL --create-dirs -o "${CODEX_HOME:-$HOME/.codex}/themes/living-code-$flavor.tmTheme" "https://raw.githubusercontent.com/living-code-theme/codex/main/themes/living-code-$flavor.tmTheme"
codex -c "tui.theme=\"living-code-$flavor\""You can also choose the downloaded flavor with /theme in the Codex TUI. The picker persists your selection. Existing config.toml settings are preserved.
Expand a flavor for its full-size preview and activation instructions.
To persist a choice manually, merge theme = "living-code-night" into the existing [tui] table of ${CODEX_HOME:-~/.codex}/config.toml. The setting uses the filename stem, not the display name or .tmTheme extension. Each theme specifies both markup.inserted and markup.deleted backgrounds so Codex does not fall back to unrelated diff tints.
Syntax scopes follow the Living Code Neovim role mappings in every flavor, including distinct operators, punctuation, parameters, properties and literal constants. Tests compare the shipped TextMate scopes to a pinned Neovim reference. Syntect’s grammar still determines which tokens it can recognize.
For Codex CLI versions with custom .tmTheme loading and the /theme picker. The theme is for the terminal CLI, not the Codex desktop app or VS Code extension. Codex deliberately preserves the host terminal background for ordinary code spans; pair the port with a matching Living Code terminal theme. Theme parsing and syntax scopes are tested; this does not assert that every Codex UI element is themeable.
Previews are captured programmatically from the actual application in an isolated profile. See capture/app.py for the app-owned recipe and images/capture.json for runtime, palette and image provenance. No mock interface is drawn. The conversation is a labeled, repository-owned local demo, not a private session or a live model response. Recapturing needs no account, subscription or paid API call.
Found a problem? Open an issue with the app version, the flavor and a screenshot. Want Living Code somewhere else? Request a port.
Pull requests are welcome. Keep this README, port.json and images/ in sync, and use real screenshots of the app, never mockups.
🦎 One chameleon, many habitats. Part of Living Code.



