A native macOS menu bar app for your Codex profiles.
Open separate ChatGPT windows, check Codex quota and get back to your projects.
Actual AppKit view with sample quota values. Light and dark appearance follow macOS.
Table of contents
Keep personal, work and client profiles within reach. Codex Profiles.app lets you open ChatGPT windows side by side or launch Codex in Terminal, with a profile's quota and project shortcuts in the same menu.
| In the menu | What you can do |
|---|---|
| Profiles | Create a profile and open it in ChatGPT or Terminal, with no project folder required. |
| Codex quota | See remaining CLI limits, low-quota warnings and reset times for each profile. |
| Projects | Bind folders to profiles, pin favourites and find them with search or keyboard shortcuts. |
The app bundles the codex-profile CLI engine. Both use the same profiles
and project bindings. This is a community project, unaffiliated with OpenAI.
Swift and AppKit for the native macOS interface, Bash and standard system tools for profile operations. The app follows macOS appearance, accent colours and accessibility preferences.
Build from source for now. A signed app download is planned. npm and Homebrew install the CLI only.
- macOS 13+, on Apple silicon or Intel.
- Xcode Command Line Tools with Swift. Install with
xcode-select --install. - The official ChatGPT desktop app for ChatGPT windows. Terminal launches and quota readings need the official Codex CLI, installed separately or available inside ChatGPT.
git clone https://github.com/Ducksss/codex-profiles.git
cd codex-profiles
make menu-app
open build/macosDrag Codex Profiles.app to Applications, then open it. The app includes this project's CLI, so no separate npm or Homebrew installation is needed.
Local builds are unsigned development builds. For a DMG, signing and notarisation, see the macOS build guide.
- Click the menu bar icon. Existing profiles appear automatically.
- Choose New profile… in the gear menu, or Create profile… if the list
is empty. Give it a name such as
personalorwork. - Select ChatGPT, click Open beside the profile and sign in inside that window when prompted. Choose Terminal to start Codex CLI instead.
Different names can stay open side by side. Reopening a name keeps its local
data, and default opens your normal ChatGPT session. Enable Open at Login
in the gear menu to keep the app available after you log in.
Codex left shows remaining CLI quota. Low readings turn orange or red and show their reset time. Hover for details or press ⌘R to refresh.
The menu bar icon gains a badge when a profile runs low. Turn on Low-quota alerts in the gear menu for a notification when a profile crosses into low or critical. Alerts are off by default, and the app never switches profiles for you.
For an unavailable reading, use Sign in to Codex CLI… in that profile's actions menu, then refresh. Quota follows the profile's CLI sign-in. ChatGPT can use a different account, and the app does not compare accounts. A missing reading never prevents you from opening a profile. See the quota guide for supported accounts and troubleshooting.
Choose Add workspace…, select a folder and assign a profile. Pin the projects you use often, then search and click Open to return to them. The row's actions menu lets you change the profile, repair a moved folder or remove the shortcut. Bindings are local metadata and do not change project files.
Keyboard shortcuts and macOS controls
| Shortcut | Action |
|---|---|
| ↑ / ↓, then Return | Select and open a profile or project |
| ⌘1–9 | Open the corresponding visible row |
| ⌘K | Focus search |
| ⌘R | Refresh profiles, projects and quota |
| Escape | Clear search, then close the menu |
Opening the app again from Finder or Spotlight shows the menu. Terminal actions may request macOS Automation permission on first use. The app guide covers all controls and accessibility details.
The Raycast extension opens profiles and bound
projects in ChatGPT or Terminal and shows each profile's remaining Codex quota.
Like the menu bar app, it runs every action through codex-profile, using a
standalone install or the copy inside the menu bar app. It isn't in the
Raycast Store yet, so build it from a source checkout with Node.js. See the
extension guide.
cd raycast && npm install && npm run dev| Profile | Codex home | ChatGPT window |
|---|---|---|
default |
~/.codex |
Your normal Desktop session |
work |
~/.codex-work |
Separate local state, including electron-user-data/ in that home |
| Any other name | ~/.codex-<name> |
Its own local state, kept when reopened |
A named window's state covers Chat, Work and Codex. CLI commands such as
cli, login, env and use select Codex state only and do not switch an
open ChatGPT window. Profiles do not inherit from default.
The tool opens the original signed ChatGPT app and does not read or copy
authentication file contents or ChatGPT cookies. Desktop launch refuses a
non-empty CODEX_ACCESS_TOKEN override. Local-state separation is not an
account, OS or server-side security boundary. Use separate OS users for a
stronger boundary. Read the security model and
configuration-sharing guide.
The same profiles work from the terminal on macOS and Linux. You need
Bash and the official Codex CLI, on PATH or discoverable inside ChatGPT.
npm install -g codex-profile
codex-profile setup work
codex-profile cli worksetup guides you through profile creation and offers sign-in, project
binding and shell integration. Optional extras default to no, and shell
startup changes are shown for approval first. For scripts, use init,
login and cli separately.
Install codex-profile (singular). It provides both codex-profile and
codex-profiles commands. The plural npm package is another project.
Homebrew, source, standalone and Nix
brew install Ducksss/tap/codex-profileFrom a source checkout, run make install.
The pinned standalone and Nix commands below require the v1.3.0 release
tag, which has not been published yet. Use npm, Homebrew or source until then.
curl -fsSL https://raw.githubusercontent.com/Ducksss/codex-profiles/v1.3.0/install.sh \
| CODEX_PROFILE_VERSION=v1.3.0 shnix run github:Ducksss/codex-profiles/v1.3.0
nix profile install github:Ducksss/codex-profiles/v1.3.0Check your installation with codex-profile doctor.
Launch profiles and projects from the terminal
codex-profile cli work exec "review this repo"
codex-profile app work
codex-profile workspace bind . work
codex-profile run
codex-profile run --appRun codex-profile cli without a name for the profile picker. app work
opens a named ChatGPT window on macOS. run uses the nearest project binding.
Run codex-profile help for all commands or codex-profile help app for
one command. codex-profile status reports Codex-local status only, and
codex-profile usage shows each profile's remaining Codex quota.
Full manual and FAQ · Shell integration · Completions · Environment overrides
For agent-led setup, use agent.md or the machine-readable guide.
CLI commands work on macOS and Linux. app and launcher create require
macOS. Shell integration supports Bash, Zsh and Fish. NO_COLOR=1 disables
terminal colours, and piped help is plain text.
- Native menu bar app with profile, quota and project controls.
- Universal app and DMG builds with signing and notarisation support.
- Published signed and notarised macOS app download.
See the changelog and open issues.
Start with the contributor guide
and coding-agent instructions.
Before opening a pull request, run make check for syntax, behaviour,
packaging, native macOS tests and ShellCheck. Native builds are skipped
on hosts without macOS and Swift.
MIT.
Report a bug · Request a feature · Discuss a workflow · Project site
For security reports, follow SECURITY.md.
Best-README-Template for the structure, and contributors for improving the app and CLI.