codex-profiles
codex-profiles is a dependency-free Bash wrapper that lets you run Codex CLI and ChatGPT desktop app with separate named profiles, each with its own local state (CODEX_HOME and Electron user data) without copying tokens. It solves the problem of managing multiple accounts (personal, work, client, etc.) on the same machine by isolating local state per profile. It is for developers who use Codex or ChatGPT with multiple accounts and need to keep their sessions, configs, and data separate.
✨ Key features
- Named Codex CLI profiles with separate CODEX_HOME
- Named ChatGPT desktop windows with separate Electron data on macOS
- Share configuration files between profiles without sharing auth or sessions
- Bind projects to profiles for automatic profile selection
- Create color-coded macOS launcher apps for profiles
- Diagnostics and status checks for local state
🎯 Use cases
- Run Codex CLI with separate personal and work accounts
- Open separate ChatGPT windows for different clients or projects on macOS
- Bind a project directory to a specific profile for automatic selection
- Share config.toml or AGENTS.md across profiles while keeping auth separate
- Create distinct launcher icons for each profile in Finder or Dock
📦 Installation
🧰 Requirements: Requires Bash and Codex CLI; macOS for desktop app features. No API keys or accounts needed beyond those for Codex/ChatGPT.
Install
With npm:
npm install -g codex-profile
The npm package is singular. It installs both codex-profile and codex-profiles; the plural npm package belongs to another project.
With Homebrew:
brew install Ducksss/tap/codex-profile
With the standalone installer:
curl -fsSL https://raw.githubusercontent.com/Ducksss/codex-profiles/v0.10.0/install.sh \
| CODEX_PROFILE_VERSION=v0.10.0 sh
With Nix:
nix run github:Ducksss/codex-profiles/v0.10.0
nix profile install github:Ducksss/codex-profiles/v0.10.0
From source:
git clone https://github.com/Ducksss/codex-profiles.git
cd codex-profiles
make install
Then verify the installation:
codex-profile doctor
🚀 Usage
Quick start
Create two Codex homes and authenticate their CLI sessions:
codex-profile init personal
codex-profile init work
codex-profile login personal
codex-profile login work
Run the upstream Codex CLI with either home:
codex-profile cli personal
codex-profile cli work exec "run tests and summarize failures"
On macOS, open the stock ChatGPT session or a named window with separate local state:
codex-profile init default
codex-profile app default ~/Dev/main-project
codex-profile app personal ~/Dev/personal-project
codex-profile app work ~/Dev/work-project
⚠️ Good to know
Local-state separation is not an account, OS, or server-side boundary; account equality is deliberately unverified, and the tool does not inspect tokens or account identifiers.
❓ FAQ
How do I create a new profile?
Use codex-profile init <name> to create a new profile. Only init creates profiles; other commands fail on uninitialized names.
Can I share configuration between profiles without sharing auth?
Yes, use codex-profile init <new> --share-with <existing> to symlink only allowlisted config files like config.toml and AGENTS.md, but never auth.json or sessions.
Does codex-profiles copy or parse auth.json?
No, it does not copy, parse, print, or migrate auth.json. It only sets separate CODEX_HOME directories.
How do I bind a project to a profile?
Use codex-profile workspace bind <path> <profile> to bind a directory. Then from that directory, codex-profile run uses the bound profile automatically.
📊 Repository
🤖 Overview, features, install steps and FAQ were generated from the project's README on Sep 4, 2026. Always check the original source before running commands.