Skip to content

Repository files navigation

Codex Profiles app icon

Codex Profiles

A native macOS menu bar app for your Codex profiles.
Open separate ChatGPT windows, check Codex quota and get back to your projects.

Build the macOS app » · App guide · CLI

CI macOS 13 or newer MIT licence

Codex Profiles menu with default, personal and work profiles, each in its own colour and symbol and showing its remaining Codex quota beside a ring, and project shortcuts nested under their profiles.
Actual AppKit view with sample quota values. Light and dark appearance follow macOS.

Table of contents

About the project

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.

Built with

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.

Getting started

The app is built on your Mac, in one command. There is no signed download yet. codex-profile menu install builds the app from its release source and installs it, with no clone needed. macOS does not quarantine an app built on the same Mac, so Gatekeeper lets it open. Prefer the terminal? Install the CLI with brew install Ducksss/tap/codex-profile or npm install -g codex-profile and follow its quick start on macOS or Linux.

Prerequisites

  • macOS 13+, on Apple silicon or Intel.
  • Xcode Command Line Tools with Swift. Install with xcode-select --install. Xcode itself is not needed.
  • The official ChatGPT desktop app for ChatGPT windows. Terminal launches and quota readings need the official Codex CLI, installed separately or available inside ChatGPT.

Installation

brew install Ducksss/tap/codex-profile
codex-profile menu install

Without Homebrew, run npx -y codex-profile@latest menu install, or install the CLI another way first.

The build takes a few minutes. It installs Codex Profiles.app in Applications, or in ~/Applications if you cannot write to Applications, and replaces an earlier copy where it is. Open it from Spotlight or Applications. The app bundles the same codex-profile version, so it needs no separate CLI. After upgrading the CLI, run codex-profile menu install again to rebuild the app at the new version.

Build from a source checkout instead
git clone https://github.com/Ducksss/codex-profiles.git
cd codex-profiles
make menu-app
open build/macos

Drag Codex Profiles.app to Applications, then open it.

Local builds are unsigned and meant only for the Mac that built them. For a DMG, signing and notarisation, see the macOS build guide.

Usage

Open your first profile

  1. Click the menu bar icon. Existing profiles appear automatically.
  2. Choose New profile… in the gear menu, or Create profile… if the list is empty. Give it a name such as personal or work.
  3. Click the profile to open it in ChatGPT and sign in inside that window when prompted. ⌘-click it, or press ⌘Return, to start Codex CLI in Terminal 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.

Check quota before opening a profile

Each profile shows the remaining CLI quota of its tightest window beside a ring. Low readings turn orange or red and show their reset time, and the profile's ⋯ menu lists every window. Hover for details or press ⌘R to refresh.

The menu bar icon gains a badge when a profile runs low. Turn on Quota in menu bar in the gear menu to see the lowest remaining percentage beside the icon, or Low-quota alerts for a notification when a profile crosses into low or critical. Both are off by default, and the app never switches profiles for you.

Give each profile its own colour and symbol with Appearance… in its ⋯ menu, or codex-profile appearance work --color teal, so work and personal are easy to tell apart. The shell prompt, Raycast and new launchers use the same colour. To delete a profile you no longer need, use Remove profile… in its ⋯ menu, or codex-profile remove <profile>.

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.

Open a project with its profile

Choose +, select a folder and assign a profile. The project appears under its profile; pin the ones you use often, then search and click one, or press Return, to open it. The row's ⋯ menu, or a right-click, 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
⌘Return or ⌘-click Open in the other destination: Terminal, unless the gear menu's Return opens in chooses it for Return
⌘1–9 Open the corresponding visible row
⌘K Focus search
⌘R Refresh profiles, projects and quota
Escape Clear search, then close the menu
⌃⌥⌘P Open the menu from any app, once Keyboard shortcut is on in the gear 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.

Raycast

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

How separation works

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.

Command-line usage

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.

Quick start

npm install -g codex-profile
codex-profile setup work
codex-profile cli work

setup guides you through profile creation and offers sign-in, project binding, a macOS launcher and shell integration. Sign-in defaults to yes and the others to no; 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.

Install

Homebrew, source, standalone and Nix
brew install Ducksss/tap/codex-profile

From a source checkout, run make install.

The standalone and Nix commands below are pinned to the v1.4.0 release.

curl -fsSL https://raw.githubusercontent.com/Ducksss/codex-profiles/v1.4.0/install.sh \
  | CODEX_PROFILE_VERSION=v1.4.0 sh
nix run github:Ducksss/codex-profiles/v1.4.0
nix profile install github:Ducksss/codex-profiles/v1.4.0

Check your installation with codex-profile doctor.

Everyday workflows

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 --app

Run 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.

Command reference

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.

Platform support

CLI commands work on macOS and Linux. app, launcher create and menu install require macOS. Shell integration supports Bash, Zsh and Fish. NO_COLOR=1 disables terminal colours, and piped help is plain text.

Roadmap

  • Native menu bar app with profile, quota and project controls.
  • Universal app and DMG builds with signing and notarisation support.
  • One-command local build and install with codex-profile menu install.
  • Published signed and notarised macOS app download.

See the changelog and open issues.

Contributing

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.

License

MIT.

Contact

Report a bug · Request a feature · Discuss a workflow · Project site

For security reports, follow SECURITY.md.

Acknowledgements

Best-README-Template for the structure, and contributors for improving the app and CLI.

Back to top ↑

Releases

Packages

Contributors

Languages