-
Notifications
You must be signed in to change notification settings - Fork 1.1k
docs: add a platform-support reference page #3440
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,81 @@ | ||||||
| --- | ||||||
| title: Platform support | ||||||
| description: What OpenCodex can do on macOS, Windows and Linux, and why a few capabilities stay platform-specific. | ||||||
| --- | ||||||
|
|
||||||
| OpenCodex runs on macOS, Windows and Linux. Most of it behaves identically on all | ||||||
| three; a few capabilities depend on something the operating system provides, and | ||||||
| this page says which, and why. | ||||||
|
|
||||||
| ## Everywhere | ||||||
|
|
||||||
| | Capability | Notes | | ||||||
| | --- | --- | | ||||||
| | Proxy, routing, provider adapters | The core runtime is platform-neutral. | | ||||||
| | Background service | Three native backends: launchd on macOS, Task Scheduler **or** WinSW on Windows, a systemd user unit on Linux. | | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Correct the backend count. The row names four concrete implementations: Proposed wording-| Background service | Three native backends: launchd on macOS, Task Scheduler **or** WinSW on Windows, a systemd user unit on Linux. |
+| Background service | Four native backends across three platforms: launchd on macOS, Task Scheduler **or** WinSW on Windows, and a systemd user unit on Linux. |📝 Committable suggestion
Suggested change
🤖 Prompt for AI AgentsSource: Path instructions |
||||||
| | Browser login | Opens through the platform's own handler. | | ||||||
| | Client detection | Cursor, Claude Desktop, Kiro and Codex installs are located per platform. | | ||||||
|
|
||||||
| ### Provider keys in the OS credential store | ||||||
|
|
||||||
| Supported on all three platforms, **when an unlocked OS credential service is | ||||||
| available**: Keychain on macOS, Credential Manager on Windows, libsecret on | ||||||
| Linux. A locked keyring or a headless session has no unlocked service, so the | ||||||
| store is unavailable and OpenCodex says so rather than silently falling back. | ||||||
| See [Providers](/reference/configuration/providers/) for the storage rules. | ||||||
|
|
||||||
| ## macOS only | ||||||
|
|
||||||
| ### Claude Code auto-connect | ||||||
|
|
||||||
| Injecting `ANTHROPIC_BASE_URL` and the Claude Code levers into your session | ||||||
| happens through the launchd user domain, which has no single equivalent | ||||||
| elsewhere. | ||||||
|
|
||||||
| On Linux the three plausible mechanisms each reach a different set of processes: | ||||||
| `systemctl --user set-environment` reaches only systemd-spawned units, | ||||||
| `~/.profile` only login shells, and `~/.bashrc` only interactive non-login | ||||||
| shells. There is no one place that covers a user's whole session. | ||||||
|
|
||||||
| On Windows the equivalent is `HKCU\Environment`, which is genuinely persistent | ||||||
| rather than per-boot. That is the problem: it would move a bearer token from a | ||||||
| domain that empties at reboot into a registry hive that does not, which is a | ||||||
| change in how long the credential sits on disk and who can read it. That | ||||||
| decision needs a security review rather than a port. | ||||||
|
|
||||||
| Everything else Claude Code needs works on all platforms. You can set the same | ||||||
| variables yourself, or run `ocx claude`, which passes them to the child process | ||||||
| directly. | ||||||
|
|
||||||
| ## Import versus paste | ||||||
|
|
||||||
| ### Meta Muse Code | ||||||
|
|
||||||
| On macOS, OpenCodex imports the API key the Muse Code CLI already stored after | ||||||
| `muse login`, so you are not asked to provision a second one. | ||||||
|
Comment on lines
+54
to
+55
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When a user discovers AGENTS.md reference: docs-site/AGENTS.md:L17-L17 Useful? React with 👍 / 👎. |
||||||
|
|
||||||
| Elsewhere it asks you to paste the key instead. Meta ships no native Windows | ||||||
| CLI, and on Linux the CLI exists but where it keeps its credential has not been | ||||||
| verified, so OpenCodex declines to guess at a credential store. The same key is | ||||||
| visible in [Meta's developer console](https://dev.meta.ai), and a pasted key | ||||||
| faces the same format check and the same live validation against the Model API | ||||||
| as an imported one. | ||||||
|
|
||||||
| ## Windows notes | ||||||
|
|
||||||
| The Windows service can run under Task Scheduler or as a native WinSW service, | ||||||
| and those are mutually exclusive. `ocx service repair` refuses to proceed when | ||||||
| it finds state for both, because guessing which one you meant is how a machine | ||||||
| ends up with two proxies fighting over a port. | ||||||
|
|
||||||
| Console output on a non-English Windows install arrives in the system code page | ||||||
| rather than UTF-8. OpenCodex decodes it accordingly, so an account name with | ||||||
| non-ASCII characters resolves correctly. | ||||||
|
Comment on lines
+71
to
+73
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
For non-English Windows locales outside the implemented Korean, Japanese, Chinese, and Windows-1252 groups, this guarantee is false: AGENTS.md reference: docs-site/AGENTS.md:L7-L10 Useful? React with 👍 / 👎. |
||||||
|
|
||||||
| ## When something is unavailable | ||||||
|
|
||||||
| OpenCodex states the actual reason rather than disabling a control silently. If | ||||||
| a capability is unavailable on your platform, the error or the dashboard says | ||||||
| which mechanism is missing and what the supported alternative is. If you hit one | ||||||
| that does not, that is a bug worth reporting. | ||||||
|
|
||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On Linux without a systemd user instance, and in every Docker environment,
diagnoseService()explicitly reports the background service as unsupported (src/service.ts:4185-4187), but this row lists it under “Everywhere” without that prerequisite. Add the systemd/non-Docker qualification and the supported process-supervisor alternative; otherwise users on Alpine, non-systemd distributions, or containers are told a capability exists thatocx servicerefuses.AGENTS.md reference: docs-site/AGENTS.md:L7-L10
Useful? React with 👍 / 👎.