Sango is intentionally not sandboxed because it must launch the installed
Codex CLI, inspect related processes, and atomically replace the effective
CODEX_HOME/auth.json.
- The active account remains plaintext in
auth.json, with mode0600, as required by Codex's file credential mode. - Inactive opaque credential documents are stored in macOS Keychain under profile UUIDs. Secret payload types are neither logged nor exposed through FFI.
- Temporary Codex homes used for enrollment and inactive polling are owner-only directories and are removed on success, cancellation, timeout, or failure.
- SQLite stores only profile metadata, settings, usage, and secret-free switch journal data.
- Switching is blocked while another Codex CLI, app-server, IDE helper, or Codex desktop process is running. Sango offers graceful termination before a separate, explicit force-quit action.
- Sango changes only
cli_auth_credentials_storeafter explicit consent. It records the prior value and restores it only if the user has not since edited that setting. - Sango has no telemetry and reaches OpenAI only through the installed
codex app-serverprocess.
The app-server protocol is experimental. A compatibility probe is performed at startup, and incompatible builds are rejected before credentials are modified.