Coskey is a standalone desktop app. It does not modify or repackage ChatGPT.app — it simply points the app’s Code sessions at whichever OpenAI-compatible provider you choose.
1. Before you start
| Requirement | Notes |
|---|---|
| System | macOS 13+ or Windows 10+ |
| ChatGPT.app | Installed (on macOS Coskey looks in /Applications/ChatGPT.app and ~/Applications; on Windows it is an MSIX package) |
| Provider | An OpenAI-compatible endpoint (https://…/v1) and an API key |
The endpoint requirement is modest: if it supports /v1/responses natively, requests pass
straight through; if it only speaks /v1/chat/completions, Coskey’s local translation layer
converts between the two.
2. Download and install
Installers are on the product page, released for both platforms in step:
| Platform | Artifact |
|---|---|
| macOS (Apple Silicon) | Coskey_<version>_aarch64.dmg |
| macOS (Intel) | Coskey_<version>_x64.dmg |
| Windows (x64) | Coskey_<version>_x64-setup.exe |
macOS: open the DMG, drag Coskey.app into Applications, and launch it (the build is signed and notarised). If macOS still warns about an unidentified developer — for example after you replaced the binary by hand — right-click the app and choose Open once.
Windows: run the -setup.exe. The installer is per-user (it lives in your user
directory and does not trigger UAC). The first release is not Authenticode-signed yet, so
SmartScreen shows a warning the first time: choose “More info → Run anyway”. In-app updates
are signed separately with minisign and are unaffected.
3. First launch: install the wrapper
The first launch has a single step:

“Install the wrapper and login configuration” puts the wrapper at ~/.coskey/bin/codex and
arranges for CODEX_CLI_PATH to be injected at login (effective in the current session, no
logout needed). The top of the guide shows whether ChatGPT.app was detected.
What this step does: the Code features in ChatGPT.app are driven by the codex kernel
bundled inside it, and the app lets you override the kernel path with CODEX_CLI_PATH.
Coskey points that path at its own wrapper, which in turn starts the real kernel — giving it
one place to decide which provider and model each request should use.
The first install also seeds the user catalog: the first time the wrapper is installed, Coskey generates one same-named user catalog entry per built-in catalog template, so the Model catalogue page starts with a usable list. If a user catalog already exists it only fills the gaps: existing rows are kept as they are, missing same-named entries are appended, and later reinstalls leave the catalog alone.
You land in the main window with an empty Providers page:

4. When changes take effect
| Action | When it applies |
|---|---|
| Installing the wrapper or injecting the environment variable | Reopen ChatGPT.app once after the first install |
| Adding or changing providers, upstream models or mappings (including enabling/disabling) | Immediately: the running wrapper hot-reloads its configuration and the next request uses it; the ChatGPT.app picker list refreshes within about 5 minutes, or at once after a restart |
| User catalog / system catalog entries (including shown/enabled) and the catalog cache | Quit and reopen ChatGPT.app (the kernel reads ~/.coskey/models/cache.json once, at startup) |
| Switching the default model in Settings | Immediately: unpinned sessions follow it on their next turn |
| The global switch in Settings | Immediately: turning it off makes the wrapper a plain passthrough |
5. Upgrading
Two routes: “Check for updates → Update now” in Settings, or downloading a new installer and
installing over the old one. Update packages carry a minisign signature. Providers, mappings and
keys live in ~/.coskey and the system keychain, so upgrading neither breaks nor migrates them.
The wrapper syncs with the app automatically: after an in-app update restarts the app, the
new version aligns ~/.coskey/bin/codex with the wrapper shipped inside it and shows a light
notice — no manual reinstall. If it fails, the reason is logged and shown in a banner, and the
next launch retries. “Settings → Maintenance → Sync now” is the manual entry for the same
idempotent operation and leaves your configuration alone.