codex-multi-auth 2.3.1 → 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/.codex-plugin/plugin.json +10 -10
  2. package/README.md +421 -419
  3. package/dist/lib/accounts.d.ts +14 -0
  4. package/dist/lib/accounts.d.ts.map +1 -1
  5. package/dist/lib/accounts.js +59 -4
  6. package/dist/lib/constants.d.ts +7 -0
  7. package/dist/lib/constants.d.ts.map +1 -1
  8. package/dist/lib/constants.js +7 -0
  9. package/dist/lib/forecast.d.ts.map +1 -1
  10. package/dist/lib/forecast.js +15 -6
  11. package/dist/lib/local-client-tokens.d.ts.map +1 -1
  12. package/dist/lib/local-client-tokens.js +11 -4
  13. package/dist/lib/logger.d.ts.map +1 -1
  14. package/dist/lib/logger.js +5 -0
  15. package/dist/lib/preemptive-quota-scheduler.d.ts.map +1 -1
  16. package/dist/lib/preemptive-quota-scheduler.js +29 -3
  17. package/dist/lib/refresh-lease.d.ts +1 -0
  18. package/dist/lib/refresh-lease.d.ts.map +1 -1
  19. package/dist/lib/refresh-lease.js +35 -4
  20. package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
  21. package/dist/lib/request/fetch-helpers.js +3 -2
  22. package/dist/lib/request/rate-limit-decision.d.ts.map +1 -1
  23. package/dist/lib/request/rate-limit-decision.js +7 -2
  24. package/dist/lib/request/response-handler.d.ts.map +1 -1
  25. package/dist/lib/request/response-handler.js +63 -11
  26. package/dist/lib/runtime/app-bind.d.ts +7 -0
  27. package/dist/lib/runtime/app-bind.d.ts.map +1 -1
  28. package/dist/lib/runtime/app-bind.js +46 -5
  29. package/dist/lib/runtime/config-toml.d.ts +18 -0
  30. package/dist/lib/runtime/config-toml.d.ts.map +1 -1
  31. package/dist/lib/runtime/config-toml.js +79 -8
  32. package/dist/lib/schemas.js +2 -2
  33. package/dist/lib/storage.d.ts.map +1 -1
  34. package/dist/lib/storage.js +6 -1
  35. package/node_modules/@codex-ai/plugin/dist/index.d.ts +2 -2
  36. package/node_modules/@codex-ai/plugin/dist/index.js +2 -2
  37. package/node_modules/@codex-ai/plugin/dist/tool.d.ts +42 -42
  38. package/node_modules/@codex-ai/plugin/dist/tool.js +29 -29
  39. package/node_modules/@codex-ai/plugin/package.json +9 -9
  40. package/node_modules/@codex-ai/sdk/dist/index.d.ts +4 -4
  41. package/node_modules/@codex-ai/sdk/dist/index.js +2 -2
  42. package/node_modules/@codex-ai/sdk/package.json +8 -8
  43. package/package.json +196 -196
  44. package/vendor/codex-ai-plugin/dist/index.d.ts +2 -2
  45. package/vendor/codex-ai-plugin/dist/index.js +2 -2
  46. package/vendor/codex-ai-plugin/dist/tool.d.ts +42 -42
  47. package/vendor/codex-ai-plugin/dist/tool.js +29 -29
  48. package/vendor/codex-ai-plugin/package.json +9 -9
  49. package/vendor/codex-ai-sdk/dist/index.d.ts +4 -4
  50. package/vendor/codex-ai-sdk/dist/index.js +2 -2
  51. package/vendor/codex-ai-sdk/package.json +8 -8
  52. package/dist/index.js.map +0 -1
  53. package/dist/lib/account-policy.js.map +0 -1
  54. package/dist/lib/accounts/rate-limits.js.map +0 -1
  55. package/dist/lib/accounts.js.map +0 -1
  56. package/dist/lib/audit.js.map +0 -1
  57. package/dist/lib/auth/auth.js.map +0 -1
  58. package/dist/lib/auth/browser.js.map +0 -1
  59. package/dist/lib/auth/device-auth.js.map +0 -1
  60. package/dist/lib/auth/index.js.map +0 -1
  61. package/dist/lib/auth/org-override.js.map +0 -1
  62. package/dist/lib/auth/server.js.map +0 -1
  63. package/dist/lib/auth/token-utils.js.map +0 -1
  64. package/dist/lib/auth-rate-limit.js.map +0 -1
  65. package/dist/lib/budget-guard.js.map +0 -1
  66. package/dist/lib/capability-policy.js.map +0 -1
  67. package/dist/lib/circuit-breaker.js.map +0 -1
  68. package/dist/lib/cli.js.map +0 -1
  69. package/dist/lib/codex-cli/index.js.map +0 -1
  70. package/dist/lib/codex-cli/observability.js.map +0 -1
  71. package/dist/lib/codex-cli/state.js.map +0 -1
  72. package/dist/lib/codex-cli/sync.js.map +0 -1
  73. package/dist/lib/codex-cli/writer.js.map +0 -1
  74. package/dist/lib/codex-manager/account-manager-commands.js.map +0 -1
  75. package/dist/lib/codex-manager/account-pool-write.js.map +0 -1
  76. package/dist/lib/codex-manager/backend-category-entry.js.map +0 -1
  77. package/dist/lib/codex-manager/backend-category-helpers.js.map +0 -1
  78. package/dist/lib/codex-manager/backend-category-prompt.js.map +0 -1
  79. package/dist/lib/codex-manager/backend-settings-controller.js.map +0 -1
  80. package/dist/lib/codex-manager/backend-settings-entry.js.map +0 -1
  81. package/dist/lib/codex-manager/backend-settings-helpers.js.map +0 -1
  82. package/dist/lib/codex-manager/backend-settings-prompt.js.map +0 -1
  83. package/dist/lib/codex-manager/backend-settings-schema.js.map +0 -1
  84. package/dist/lib/codex-manager/behavior-settings-panel.js.map +0 -1
  85. package/dist/lib/codex-manager/commands/account.js.map +0 -1
  86. package/dist/lib/codex-manager/commands/best.js.map +0 -1
  87. package/dist/lib/codex-manager/commands/bridge.js.map +0 -1
  88. package/dist/lib/codex-manager/commands/budget.js.map +0 -1
  89. package/dist/lib/codex-manager/commands/check.js.map +0 -1
  90. package/dist/lib/codex-manager/commands/config-explain.js.map +0 -1
  91. package/dist/lib/codex-manager/commands/debug-bundle.js.map +0 -1
  92. package/dist/lib/codex-manager/commands/forecast.js.map +0 -1
  93. package/dist/lib/codex-manager/commands/init-config.js.map +0 -1
  94. package/dist/lib/codex-manager/commands/integrations.js.map +0 -1
  95. package/dist/lib/codex-manager/commands/models.js.map +0 -1
  96. package/dist/lib/codex-manager/commands/monitor.js.map +0 -1
  97. package/dist/lib/codex-manager/commands/report.js.map +0 -1
  98. package/dist/lib/codex-manager/commands/rotation.js.map +0 -1
  99. package/dist/lib/codex-manager/commands/status.js.map +0 -1
  100. package/dist/lib/codex-manager/commands/switch.js.map +0 -1
  101. package/dist/lib/codex-manager/commands/uninstall.js.map +0 -1
  102. package/dist/lib/codex-manager/commands/unpin.js.map +0 -1
  103. package/dist/lib/codex-manager/commands/usage.js.map +0 -1
  104. package/dist/lib/codex-manager/commands/verify.js.map +0 -1
  105. package/dist/lib/codex-manager/commands/why-selected.js.map +0 -1
  106. package/dist/lib/codex-manager/commands/workspace.js.map +0 -1
  107. package/dist/lib/codex-manager/dashboard-display-panel.js.map +0 -1
  108. package/dist/lib/codex-manager/dashboard-formatters.js.map +0 -1
  109. package/dist/lib/codex-manager/dashboard-settings-controller.js.map +0 -1
  110. package/dist/lib/codex-manager/dashboard-settings-data.js.map +0 -1
  111. package/dist/lib/codex-manager/dashboard-settings-entry.js.map +0 -1
  112. package/dist/lib/codex-manager/experimental-settings-entry.js.map +0 -1
  113. package/dist/lib/codex-manager/experimental-settings-prompt.js.map +0 -1
  114. package/dist/lib/codex-manager/experimental-settings-schema.js.map +0 -1
  115. package/dist/lib/codex-manager/experimental-sync-target-entry.js.map +0 -1
  116. package/dist/lib/codex-manager/experimental-sync-target.js.map +0 -1
  117. package/dist/lib/codex-manager/forecast-report-commands.d.ts +0 -54
  118. package/dist/lib/codex-manager/forecast-report-commands.d.ts.map +0 -1
  119. package/dist/lib/codex-manager/forecast-report-commands.js +0 -443
  120. package/dist/lib/codex-manager/forecast-report-commands.js.map +0 -1
  121. package/dist/lib/codex-manager/forecast-report-shared.js.map +0 -1
  122. package/dist/lib/codex-manager/help.js.map +0 -1
  123. package/dist/lib/codex-manager/manual-callback.js.map +0 -1
  124. package/dist/lib/codex-manager/rate-limit-markers.js.map +0 -1
  125. package/dist/lib/codex-manager/repair-commands.js.map +0 -1
  126. package/dist/lib/codex-manager/settings-hub/backend.js.map +0 -1
  127. package/dist/lib/codex-manager/settings-hub/dashboard.js.map +0 -1
  128. package/dist/lib/codex-manager/settings-hub/experimental.js.map +0 -1
  129. package/dist/lib/codex-manager/settings-hub/index.js.map +0 -1
  130. package/dist/lib/codex-manager/settings-hub/shared.js.map +0 -1
  131. package/dist/lib/codex-manager/settings-hub-entry.js.map +0 -1
  132. package/dist/lib/codex-manager/settings-hub-menu.js.map +0 -1
  133. package/dist/lib/codex-manager/settings-hub-prompt.js.map +0 -1
  134. package/dist/lib/codex-manager/settings-hub.js.map +0 -1
  135. package/dist/lib/codex-manager/settings-panels.js.map +0 -1
  136. package/dist/lib/codex-manager/settings-persist-utils.js.map +0 -1
  137. package/dist/lib/codex-manager/settings-preview.js.map +0 -1
  138. package/dist/lib/codex-manager/settings-write-queue.js.map +0 -1
  139. package/dist/lib/codex-manager/statusline-order.d.ts +0 -3
  140. package/dist/lib/codex-manager/statusline-order.d.ts.map +0 -1
  141. package/dist/lib/codex-manager/statusline-order.js +0 -16
  142. package/dist/lib/codex-manager/statusline-order.js.map +0 -1
  143. package/dist/lib/codex-manager/statusline-settings-panel.js.map +0 -1
  144. package/dist/lib/codex-manager/theme-settings-panel.js.map +0 -1
  145. package/dist/lib/codex-manager/unified-settings-controller.js.map +0 -1
  146. package/dist/lib/codex-manager/unified-settings-entry.js.map +0 -1
  147. package/dist/lib/codex-manager.js.map +0 -1
  148. package/dist/lib/config.js.map +0 -1
  149. package/dist/lib/constants.js.map +0 -1
  150. package/dist/lib/context-overflow.js.map +0 -1
  151. package/dist/lib/dashboard-settings.js.map +0 -1
  152. package/dist/lib/entitlement-cache.js.map +0 -1
  153. package/dist/lib/env-parsing.js.map +0 -1
  154. package/dist/lib/errors.js.map +0 -1
  155. package/dist/lib/forecast.js.map +0 -1
  156. package/dist/lib/fs-retry.js.map +0 -1
  157. package/dist/lib/health.js.map +0 -1
  158. package/dist/lib/index.js.map +0 -1
  159. package/dist/lib/integration-generators.js.map +0 -1
  160. package/dist/lib/live-account-sync.js.map +0 -1
  161. package/dist/lib/local-bridge.js.map +0 -1
  162. package/dist/lib/local-client-tokens.js.map +0 -1
  163. package/dist/lib/logger.js.map +0 -1
  164. package/dist/lib/model-capability-matrix.js.map +0 -1
  165. package/dist/lib/named-backup-export.js.map +0 -1
  166. package/dist/lib/oc-chatgpt-import-adapter.js.map +0 -1
  167. package/dist/lib/oc-chatgpt-orchestrator.js.map +0 -1
  168. package/dist/lib/oc-chatgpt-target-detection.js.map +0 -1
  169. package/dist/lib/parallel-probe.js.map +0 -1
  170. package/dist/lib/policy/runtime-policy.js.map +0 -1
  171. package/dist/lib/preemptive-quota-scheduler.js.map +0 -1
  172. package/dist/lib/proactive-refresh.js.map +0 -1
  173. package/dist/lib/prompts/codex-host-bridge.js.map +0 -1
  174. package/dist/lib/prompts/codex.js.map +0 -1
  175. package/dist/lib/prompts/fetch-utils.js.map +0 -1
  176. package/dist/lib/prompts/host-codex-prompt.js.map +0 -1
  177. package/dist/lib/quota-cache.js.map +0 -1
  178. package/dist/lib/quota-probe.js.map +0 -1
  179. package/dist/lib/quota-readiness.js.map +0 -1
  180. package/dist/lib/recovery/constants.js.map +0 -1
  181. package/dist/lib/recovery/index.d.ts +0 -12
  182. package/dist/lib/recovery/index.d.ts.map +0 -1
  183. package/dist/lib/recovery/index.js +0 -11
  184. package/dist/lib/recovery/index.js.map +0 -1
  185. package/dist/lib/recovery/storage.js.map +0 -1
  186. package/dist/lib/recovery/types.js.map +0 -1
  187. package/dist/lib/recovery.js.map +0 -1
  188. package/dist/lib/refresh-guardian.js.map +0 -1
  189. package/dist/lib/refresh-lease.js.map +0 -1
  190. package/dist/lib/refresh-queue.js.map +0 -1
  191. package/dist/lib/request/failover-config.js.map +0 -1
  192. package/dist/lib/request/failure-policy.js.map +0 -1
  193. package/dist/lib/request/fetch-helpers.js.map +0 -1
  194. package/dist/lib/request/helpers/input-utils.js.map +0 -1
  195. package/dist/lib/request/helpers/model-map.js.map +0 -1
  196. package/dist/lib/request/helpers/tool-utils.js.map +0 -1
  197. package/dist/lib/request/index.js.map +0 -1
  198. package/dist/lib/request/rate-limit-backoff.js.map +0 -1
  199. package/dist/lib/request/request-attempt-budget.js.map +0 -1
  200. package/dist/lib/request/request-init.js.map +0 -1
  201. package/dist/lib/request/request-resilience.js.map +0 -1
  202. package/dist/lib/request/request-transformer.js.map +0 -1
  203. package/dist/lib/request/response-compaction.js.map +0 -1
  204. package/dist/lib/request/response-handler.js.map +0 -1
  205. package/dist/lib/request/response-metadata.js.map +0 -1
  206. package/dist/lib/request/stream-failover.js.map +0 -1
  207. package/dist/lib/request/wait-utils.js.map +0 -1
  208. package/dist/lib/rotation.js.map +0 -1
  209. package/dist/lib/routing-mutex.js.map +0 -1
  210. package/dist/lib/routing-profiles.js.map +0 -1
  211. package/dist/lib/runtime/account-check-helpers.js.map +0 -1
  212. package/dist/lib/runtime/account-check-types.js.map +0 -1
  213. package/dist/lib/runtime/account-check.js.map +0 -1
  214. package/dist/lib/runtime/account-health-check.d.ts +0 -8
  215. package/dist/lib/runtime/account-health-check.d.ts.map +0 -1
  216. package/dist/lib/runtime/account-health-check.js +0 -29
  217. package/dist/lib/runtime/account-health-check.js.map +0 -1
  218. package/dist/lib/runtime/account-manager-cache-entry.js.map +0 -1
  219. package/dist/lib/runtime/account-manager-cache.js.map +0 -1
  220. package/dist/lib/runtime/account-pool.js.map +0 -1
  221. package/dist/lib/runtime/account-scope.js.map +0 -1
  222. package/dist/lib/runtime/account-select-event.js.map +0 -1
  223. package/dist/lib/runtime/account-selection.js.map +0 -1
  224. package/dist/lib/runtime/account-state.js.map +0 -1
  225. package/dist/lib/runtime/account-status.js.map +0 -1
  226. package/dist/lib/runtime/account-storage-scope-entry.js.map +0 -1
  227. package/dist/lib/runtime/app-bind.js.map +0 -1
  228. package/dist/lib/runtime/auth-facade.js.map +0 -1
  229. package/dist/lib/runtime/browser-oauth-flow.js.map +0 -1
  230. package/dist/lib/runtime/capability-boost.js.map +0 -1
  231. package/dist/lib/runtime/config-toml.js.map +0 -1
  232. package/dist/lib/runtime/event-handler.js.map +0 -1
  233. package/dist/lib/runtime/flagged-verify-types.js.map +0 -1
  234. package/dist/lib/runtime/hydrate-emails.js.map +0 -1
  235. package/dist/lib/runtime/live-sync-entry.js.map +0 -1
  236. package/dist/lib/runtime/live-sync.js.map +0 -1
  237. package/dist/lib/runtime/loader-setup.js.map +0 -1
  238. package/dist/lib/runtime/login-menu-accounts.js.map +0 -1
  239. package/dist/lib/runtime/manual-oauth-flow.js.map +0 -1
  240. package/dist/lib/runtime/oauth-browser-flow.d.ts +0 -9
  241. package/dist/lib/runtime/oauth-browser-flow.d.ts.map +0 -1
  242. package/dist/lib/runtime/oauth-browser-flow.js +0 -33
  243. package/dist/lib/runtime/oauth-browser-flow.js.map +0 -1
  244. package/dist/lib/runtime/preemptive-quota.js.map +0 -1
  245. package/dist/lib/runtime/quota-headers.js.map +0 -1
  246. package/dist/lib/runtime/quota-probe.js.map +0 -1
  247. package/dist/lib/runtime/quota-settings.js.map +0 -1
  248. package/dist/lib/runtime/refresh-guardian-entry.js.map +0 -1
  249. package/dist/lib/runtime/refresh-guardian.js.map +0 -1
  250. package/dist/lib/runtime/request-init.js.map +0 -1
  251. package/dist/lib/runtime/runtime-current-account.js.map +0 -1
  252. package/dist/lib/runtime/runtime-observability.js.map +0 -1
  253. package/dist/lib/runtime/runtime-services.js.map +0 -1
  254. package/dist/lib/runtime/session-affinity-entry.js.map +0 -1
  255. package/dist/lib/runtime/session-affinity.d.ts +0 -13
  256. package/dist/lib/runtime/session-affinity.d.ts.map +0 -1
  257. package/dist/lib/runtime/session-affinity.js +0 -16
  258. package/dist/lib/runtime/session-affinity.js.map +0 -1
  259. package/dist/lib/runtime/session-recovery.js.map +0 -1
  260. package/dist/lib/runtime/status-marker.js.map +0 -1
  261. package/dist/lib/runtime/storage-scope.js.map +0 -1
  262. package/dist/lib/runtime/toast.js.map +0 -1
  263. package/dist/lib/runtime/ui-runtime-entry.js.map +0 -1
  264. package/dist/lib/runtime/ui-runtime.js.map +0 -1
  265. package/dist/lib/runtime/verify-flagged.js.map +0 -1
  266. package/dist/lib/runtime-constants.js.map +0 -1
  267. package/dist/lib/runtime-paths.js.map +0 -1
  268. package/dist/lib/runtime-rotation-proxy.js.map +0 -1
  269. package/dist/lib/schemas.js.map +0 -1
  270. package/dist/lib/session-affinity.js.map +0 -1
  271. package/dist/lib/shutdown.js.map +0 -1
  272. package/dist/lib/storage/account-clear-entry.js.map +0 -1
  273. package/dist/lib/storage/account-clear.js.map +0 -1
  274. package/dist/lib/storage/account-match-utils.js.map +0 -1
  275. package/dist/lib/storage/account-persistence.js.map +0 -1
  276. package/dist/lib/storage/account-port.js.map +0 -1
  277. package/dist/lib/storage/account-save-entry.js.map +0 -1
  278. package/dist/lib/storage/account-save.js.map +0 -1
  279. package/dist/lib/storage/account-snapshot.js.map +0 -1
  280. package/dist/lib/storage/backup-metadata-builder.js.map +0 -1
  281. package/dist/lib/storage/backup-metadata.js.map +0 -1
  282. package/dist/lib/storage/backup-paths.js.map +0 -1
  283. package/dist/lib/storage/backup-restore.js.map +0 -1
  284. package/dist/lib/storage/cache-artifacts.js.map +0 -1
  285. package/dist/lib/storage/error-hints.js.map +0 -1
  286. package/dist/lib/storage/file-paths.js.map +0 -1
  287. package/dist/lib/storage/fixture-guards.js.map +0 -1
  288. package/dist/lib/storage/flagged-entry.js.map +0 -1
  289. package/dist/lib/storage/flagged-load-entry.js.map +0 -1
  290. package/dist/lib/storage/flagged-save-entry.js.map +0 -1
  291. package/dist/lib/storage/flagged-storage-file.js.map +0 -1
  292. package/dist/lib/storage/flagged-storage-io.js.map +0 -1
  293. package/dist/lib/storage/flagged-storage.js.map +0 -1
  294. package/dist/lib/storage/gitignore.js.map +0 -1
  295. package/dist/lib/storage/hash.js.map +0 -1
  296. package/dist/lib/storage/health.js.map +0 -1
  297. package/dist/lib/storage/identity.js.map +0 -1
  298. package/dist/lib/storage/import-export.js.map +0 -1
  299. package/dist/lib/storage/metadata-section.js.map +0 -1
  300. package/dist/lib/storage/migrations.js.map +0 -1
  301. package/dist/lib/storage/named-backup-entry.js.map +0 -1
  302. package/dist/lib/storage/named-backups-entry.js.map +0 -1
  303. package/dist/lib/storage/named-backups.js.map +0 -1
  304. package/dist/lib/storage/path-state.js.map +0 -1
  305. package/dist/lib/storage/paths.js.map +0 -1
  306. package/dist/lib/storage/project-migration.js.map +0 -1
  307. package/dist/lib/storage/record-utils.js.map +0 -1
  308. package/dist/lib/storage/restore-assessment.js.map +0 -1
  309. package/dist/lib/storage/restore-backup-entry.js.map +0 -1
  310. package/dist/lib/storage/restore-metadata.js.map +0 -1
  311. package/dist/lib/storage/restore.d.ts +0 -14
  312. package/dist/lib/storage/restore.d.ts.map +0 -1
  313. package/dist/lib/storage/restore.js +0 -52
  314. package/dist/lib/storage/restore.js.map +0 -1
  315. package/dist/lib/storage/snapshot-inspectors.js.map +0 -1
  316. package/dist/lib/storage/storage-parser.js.map +0 -1
  317. package/dist/lib/storage/transactions.js.map +0 -1
  318. package/dist/lib/storage.js.map +0 -1
  319. package/dist/lib/table-formatter.js.map +0 -1
  320. package/dist/lib/tools/hashline-tools.js.map +0 -1
  321. package/dist/lib/types.js.map +0 -1
  322. package/dist/lib/ui/ansi.js.map +0 -1
  323. package/dist/lib/ui/auth-menu.js.map +0 -1
  324. package/dist/lib/ui/confirm.js.map +0 -1
  325. package/dist/lib/ui/copy.d.ts +0 -159
  326. package/dist/lib/ui/copy.d.ts.map +0 -1
  327. package/dist/lib/ui/copy.js +0 -164
  328. package/dist/lib/ui/copy.js.map +0 -1
  329. package/dist/lib/ui/display-width.js.map +0 -1
  330. package/dist/lib/ui/format.js.map +0 -1
  331. package/dist/lib/ui/runtime.js.map +0 -1
  332. package/dist/lib/ui/select.js.map +0 -1
  333. package/dist/lib/ui/theme.js.map +0 -1
  334. package/dist/lib/unified-settings.js.map +0 -1
  335. package/dist/lib/update-notice.js.map +0 -1
  336. package/dist/lib/usage/index.js.map +0 -1
  337. package/dist/lib/usage/ledger.js.map +0 -1
  338. package/dist/lib/usage/pricing.js.map +0 -1
  339. package/dist/lib/usage/redaction.js.map +0 -1
  340. package/dist/lib/usage/types.js.map +0 -1
  341. package/dist/lib/utils.js.map +0 -1
package/README.md CHANGED
@@ -1,419 +1,421 @@
1
- # codex-multi-auth: multi-account OAuth for the official Codex CLI
2
-
3
- [![npm version](https://img.shields.io/npm/v/codex-multi-auth.svg)](https://www.npmjs.com/package/codex-multi-auth)
4
- [![npm downloads](https://img.shields.io/npm/dw/codex-multi-auth.svg)](https://www.npmjs.com/package/codex-multi-auth)
5
- [![CI](https://github.com/ndycode/codex-multi-auth/actions/workflows/ci.yml/badge.svg)](https://github.com/ndycode/codex-multi-auth/actions/workflows/ci.yml)
6
- [![MIT license](https://img.shields.io/npm/l/codex-multi-auth.svg)](LICENSE)
7
-
8
- `codex-multi-auth` is a multi-account OAuth manager for the official `@openai/codex` CLI. It gives Codex CLI users explicit ChatGPT account login, account switching, health checks, local diagnostics, project-scoped storage, and default-on runtime Responses rotation without taking over the official `codex` binary. Use `codex-multi-auth ...` for account management, or `codex-multi-auth-codex ...` only when you intentionally want the optional forwarding wrapper.
9
-
10
- Use it when you need a local Codex CLI multi-account workflow with visible account state, safer recovery commands, and a loopback-only runtime rotation proxy for request-bearing forwarded Codex sessions.
11
-
12
- <img width="1270" height="729" alt="codex-multi-auth terminal dashboard for Codex CLI multi-account OAuth account status" src="https://github.com/user-attachments/assets/0cecb77e-a6d3-432a-ba48-3577db0c7093" />
13
-
14
-
15
-
16
- > [!NOTE]
17
- > Legacy scoped prerelease package `@ndycode/codex-multi-auth` is migration-only.
18
- > Use `codex-multi-auth` for all new installs.
19
-
20
- ## What You Get
21
-
22
- - Codex CLI multi-account OAuth management with a dedicated `codex-multi-auth ...` command family
23
- - Explicit ChatGPT account login, saved-account listing, account switching, health checks, and diagnostics
24
- - Optional `codex-multi-auth-codex ...` forwarding wrapper for official Codex CLI commands when you choose wrapper-launched sessions
25
- - Health-aware account selection, quota forecasting, automatic failover, and flagged-account recovery
26
- - Project-scoped account storage under `~/.codex/multi-auth/projects/<project-key>/...` for repo-specific workflows
27
- - Interactive terminal dashboard for account actions, settings, search, and hotkeys
28
- - Forecast, report, fix, doctor, verify, monitor, and rotation commands for operational confidence
29
- - Local usage ledger, budget guards, account policy controls, routing profiles, and model/account capability views
30
- - Runtime counters, budget/cooldown state, and multi-auth probe visibility in `codex-multi-auth status` / `codex-multi-auth report`
31
- - Default-on loopback Responses proxy for live account rotation inside forwarded Codex CLI/app sessions
32
- - Optional loopback-only local bridge for `/health`, `/v1/models`, and `/v1/responses`, protected by hashed local client tokens
33
- - Reversible packaged Codex app bind and user-level launcher routing helpers that do not patch official app binaries
34
- - Session affinity, live account sync, proactive refresh, and preemptive quota deferral controls
35
- - Codex-oriented request/prompt compatibility with strict runtime handling and documented error contracts
36
- - Stable docs for install, configuration, troubleshooting, upgrade, public API, storage paths, and release notes
37
-
38
- ---
39
-
40
- ## Why Developers Use It
41
-
42
- `codex-multi-auth` makes local Codex account state visible and recoverable. Instead of one opaque auth file, you get a named account pool, deterministic account switching, health-aware selection, JSON diagnostics for automation, and safe repair commands for stale or damaged local state. The architecture is designed for personal development workflows: credentials stay local, runtime rotation is loopback-only, and official Codex install paths keep owning the `codex` command.
43
-
44
- ---
45
-
46
- ## Current Architecture At A Glance
47
-
48
- `codex-multi-auth` now ships three distinct global binaries:
49
-
50
- | Binary | Purpose |
51
- | --- | --- |
52
- | `codex-multi-auth` | Primary account manager; accepts bare auth subcommands such as `login`, `status`, `switch`, `forecast`, and `rotation status` |
53
- | `codex-multi-auth-codex` | Optional wrapper that handles `auth ...` locally and forwards every other command to the official Codex CLI |
54
- | `codex-multi-auth-app-launcher` | Optional desktop launcher helper for supported user-level shortcuts and wrapper apps |
55
-
56
- The package does not publish a global `codex` binary. Keep `codex` owned by the official OpenAI install path and use `codex-multi-auth-codex ...` only when you intentionally want this package's forwarding wrapper.
57
-
58
- ---
59
-
60
- <details open>
61
- <summary><b>Terms and Usage Notice</b></summary>
62
-
63
- > [!CAUTION]
64
- > This project uses OAuth account credentials and is intended for personal development use.
65
- >
66
- > By using this package, you acknowledge:
67
- > - This is an independent open-source project, not an official OpenAI product
68
- > - You are responsible for your own usage and policy compliance
69
- > - For production/commercial workloads, use the OpenAI Platform API
70
-
71
- </details>
72
-
73
- ---
74
-
75
- ## Installation
76
-
77
- <details open>
78
- <summary><b>For Humans</b></summary>
79
-
80
- ### Option A: Standard install
81
-
82
- ```bash
83
- npm i -g codex-multi-auth
84
- ```
85
-
86
- ### Option B: Migrate from legacy scoped prerelease
87
-
88
- ```bash
89
- npm uninstall -g @ndycode/codex-multi-auth
90
- npm i -g codex-multi-auth
91
- ```
92
-
93
- ### Option C: Verify wiring
94
-
95
- `codex --version` confirms the official Codex CLI is reachable. `codex-multi-auth --version` confirms the installed manager package version. `codex-multi-auth-codex --version` is the optional forwarding wrapper entrypoint.
96
-
97
- ```bash
98
- codex --version
99
- codex-multi-auth --version
100
- codex-multi-auth status
101
- ```
102
-
103
- Any official install path is fine as long as `codex` is on `PATH`: `npm i -g @openai/codex`, `brew install --cask codex`, or an official release binary.
104
-
105
- </details>
106
-
107
- <details>
108
- <summary><b>For LLM Agents</b></summary>
109
-
110
- ### Step-by-step
111
-
112
- 1. Install global package:
113
- - `npm i -g codex-multi-auth`
114
- 2. Run first login flow with `codex-multi-auth login`
115
- 3. Validate state with `codex-multi-auth status` and `codex-multi-auth check`
116
- 4. Confirm routing with `codex-multi-auth forecast --live`
117
-
118
- ### Verification
119
-
120
- ```bash
121
- codex-multi-auth status
122
- codex-multi-auth check
123
- ```
124
-
125
- </details>
126
-
127
- ---
128
-
129
- ## Quick Start
130
-
131
- Install and sign in:
132
-
133
- ```bash
134
- npm i -g @openai/codex
135
- npm i -g codex-multi-auth
136
- codex-multi-auth login
137
- ```
138
-
139
- If you already installed the official native CLI via Homebrew or a release binary, you only need:
140
-
141
- ```bash
142
- npm i -g codex-multi-auth
143
- codex-multi-auth login
144
- ```
145
-
146
- Verify the manager and the new account:
147
-
148
- ```bash
149
- codex-multi-auth status
150
- codex-multi-auth check
151
- ```
152
-
153
- Use these next:
154
-
155
- ```bash
156
- codex-multi-auth list
157
- codex-multi-auth switch 2
158
- codex-multi-auth forecast --live
159
- ```
160
-
161
- If browser launch is blocked, use the alternate login paths in [docs/getting-started.md](docs/getting-started.md#alternate-login-paths).
162
- For remote or headless shells, prefer `codex-multi-auth login --device-auth`.
163
-
164
- ---
165
-
166
- ## Command Toolkit
167
-
168
- ### Start here
169
-
170
- | Command | What it answers |
171
- | --- | --- |
172
- | `codex-multi-auth login` | How do I add or re-open the account menu? |
173
- | `codex-multi-auth status` | Is the wrapper active right now? |
174
- | `codex-multi-auth check` | Do my saved accounts look healthy? |
175
-
176
- ### Daily use
177
-
178
- | Command | What it answers |
179
- | --- | --- |
180
- | `codex-multi-auth list` | Which accounts are saved and which one is active? |
181
- | `codex-multi-auth switch <index>` | How do I move to a different saved account? |
182
- | `codex-multi-auth forecast --live` | Which account looks best for the next session? |
183
-
184
- ### Repair
185
-
186
- | Command | What it answers |
187
- | --- | --- |
188
- | `codex-multi-auth verify-flagged` | Can any previously flagged account be restored? |
189
- | `codex-multi-auth verify --paths` | Do my storage path chain and sandbox probes still pass self-test? |
190
- | `codex-multi-auth fix --dry-run` | What safe storage or account repairs are available? |
191
- | `codex-multi-auth doctor --fix` | Can the CLI diagnose and apply the safest fixes now? |
192
- | `codex-multi-auth uninstall` | Remove residual artifacts (run BEFORE `npm uninstall`; npm@7+ no longer fires `preuninstall`) |
193
-
194
- ### Advanced
195
-
196
- | Command | What it answers |
197
- | --- | --- |
198
- | `codex-multi-auth report --live --json` | How do I get the full machine-readable health report? |
199
- | `codex-multi-auth fix --live --model gpt-5.5` | How do I run live repair probes with a chosen model? |
200
- | `codex-multi-auth why-selected --json` | Which account does the selector pick now, and why? |
201
- | `codex-multi-auth usage --since 24h --by project` | What local usage has been recorded recently? |
202
- | `codex-multi-auth monitor --json` | What is the combined usage, policy, quota, runtime, and project state? |
203
- | `codex-multi-auth bridge token create --label local-client` | How do I create a local bridge bearer token? |
204
- | `codex-multi-auth integrations --kind python` | How do I generate local bridge client snippets? |
205
- | `codex-multi-auth rotation status` | Is live runtime account rotation enabled for forwarded Codex sessions? |
206
-
207
- ### Reliability behavior
208
-
209
- - whole-pool replay is disabled by default when every account is rate-limited
210
- - active requests use a bounded outbound request budget so one prompt cannot walk the full pool indefinitely
211
- - repeated cross-account 5xx bursts trigger a short cooldown instead of continuing aggressive rotation
212
- - proactive refresh is staggered to reduce background refresh bursts
213
- - `codex-multi-auth status` surfaces recent runtime request metrics in text output, and `codex-multi-auth report --json` exposes the machine-readable cooldown/runtime snapshot
214
-
215
- ---
216
-
217
- ## Dashboard Hotkeys
218
-
219
- ### Main dashboard
220
-
221
- | Key | Action |
222
- | --- | --- |
223
- | `Up` / `Down` | Move selection |
224
- | `Enter` | Select/open |
225
- | `1-9` | Quick switch |
226
- | `/` | Search |
227
- | `?` | Toggle help |
228
- | `Q` | Back/cancel |
229
-
230
- ### Account details
231
-
232
- | Key | Action |
233
- | --- | --- |
234
- | `S` | Set current account |
235
- | `R` | Refresh/re-login account |
236
- | `E` | Enable/disable account |
237
- | `D` | Delete account |
238
-
239
- ---
240
-
241
- ## Storage Paths
242
-
243
- | File | Default path |
244
- | --- | --- |
245
- | Settings | `~/.codex/multi-auth/settings.json` |
246
- | Accounts | `~/.codex/multi-auth/openai-codex-accounts.json` |
247
- | Flagged accounts | `~/.codex/multi-auth/openai-codex-flagged-accounts.json` |
248
- | Quota cache | `~/.codex/multi-auth/quota-cache.json` |
249
- | Runtime observability | `~/.codex/multi-auth/runtime-observability.json` |
250
- | Usage ledger | `~/.codex/multi-auth/usage/usage-ledger.jsonl` |
251
- | Account policies | `~/.codex/multi-auth/account-policies.json` |
252
- | Routing profiles | `~/.codex/multi-auth/routing-profiles.json` |
253
- | Budget guards | `~/.codex/multi-auth/budget-guards.json` |
254
- | Local client tokens | `~/.codex/multi-auth/local-client-tokens.json` |
255
- | Runtime app helper status | `~/.codex/multi-auth/runtime-rotation-app-helper.json` |
256
- | Persistent app bind state/logs | `~/.codex/multi-auth/app-bind/` |
257
- | Logs | `~/.codex/multi-auth/logs/codex-plugin/` |
258
- | Per-project accounts | `~/.codex/multi-auth/projects/<project-key>/openai-codex-accounts.json` |
259
-
260
- Override root with `CODEX_MULTI_AUTH_DIR=<path>`.
261
-
262
- ---
263
-
264
- ## Configuration
265
-
266
- Primary config root:
267
- - `~/.codex/multi-auth/settings.json`
268
- - or `CODEX_MULTI_AUTH_DIR/settings.json` when custom root is set
269
-
270
- Selected runtime/environment overrides:
271
-
272
- | Variable | Effect |
273
- | --- | --- |
274
- | `CODEX_MULTI_AUTH_DIR` | Override settings/accounts root |
275
- | `CODEX_MULTI_AUTH_CONFIG_PATH` | Alternate config file path |
276
- | `CODEX_MODE=0/1` | Disable/enable Codex mode |
277
- | `CODEX_MULTI_AUTH_RUNTIME_ROTATION_PROXY=0/1` | Opt out/in of live Responses proxy rotation for forwarded Codex CLI/app sessions |
278
- | `CODEX_MULTI_AUTH_APP_ROTATION_IDLE_MS=<ms>` | Override automatic Codex app helper idle shutdown |
279
- | `CODEX_MULTI_AUTH_APP_BIND_INSTALL=0/1` | Opt out/in of packaged Codex app bind self-heal on first CLI run or rotation enable |
280
- | `CODEX_MULTI_AUTH_APP_LAUNCHER_INSTALL=0/1` | Opt out/in of routing supported app shortcuts on first CLI run or rotation enable |
281
- | `CODEX_TUI_V2=0/1` | Disable/enable TUI v2 |
282
- | `CODEX_TUI_COLOR_PROFILE=truecolor\|ansi256\|ansi16` | TUI color profile |
283
- | `CODEX_TUI_GLYPHS=ascii\|unicode\|auto` | TUI glyph style |
284
- | `CODEX_AUTH_BACKGROUND_RESPONSES=0/1` | Opt in/out of stateful Responses `background: true` compatibility |
285
- | `CODEX_AUTH_FETCH_TIMEOUT_MS=<ms>` | Request timeout override |
286
- | `CODEX_AUTH_STREAM_STALL_TIMEOUT_MS=<ms>` | Stream stall timeout override |
287
-
288
- Validate config after changes:
289
-
290
- ```bash
291
- codex-multi-auth status
292
- codex-multi-auth check
293
- codex-multi-auth forecast --live
294
- ```
295
-
296
- Responses background mode stays opt-in. Enable `backgroundResponses` in settings or `CODEX_AUTH_BACKGROUND_RESPONSES=1` only for callers that intentionally send `background: true`, because those requests switch from stateless `store=false` routing to stateful `store=true`. See [docs/upgrade.md](docs/upgrade.md) for rollout guidance.
297
-
298
- Runtime rotation is enabled by default for request-bearing wrapper-launched Codex sessions. Package install scripts stay side-effect-free: npm postinstall only prints a short notice (and stays silent in CI or non-interactive installs). The first CLI run after an install self-heals supported packaged Codex app binds and user-level launcher routing when possible (recorded once in a `first-run-setup.json` marker under the multi-auth runtime root), while `codex-multi-auth rotation enable` remains the explicit repair command. `codex-multi-auth rotation disable` turns the setting off and removes the persistent app bind. Set `CODEX_MULTI_AUTH_RUNTIME_ROTATION_PROXY=0`, `CODEX_MULTI_AUTH_APP_BIND_INSTALL=0`, or `CODEX_MULTI_AUTH_APP_LAUNCHER_INSTALL=0` to opt out of the matching default behavior.
299
-
300
- Installed wrappers may perform a best-effort daily npm version check during normal forwarded Codex startup. When a newer package is detected, the wrapper only prints a manual notice on an interactive TTY or when `CODEX_MULTI_AUTH_DEBUG=1`: `npm install -g codex-multi-auth@latest`. It never runs npm install or update commands for you.
301
-
302
- ---
303
-
304
- ## Experimental Settings Highlights
305
-
306
- The Settings menu now includes an `Experimental` section for staged features:
307
-
308
- - preview-first sync into `oc-chatgpt-multi-auth`
309
- - named local pool backup export with filename prompt
310
- - refresh guard toggle and interval controls moved out of Backend Controls
311
-
312
- These flows are intentionally non-destructive by default: sync previews before apply, destination-only accounts are preserved, and backup filename collisions fail safely.
313
-
314
- ---
315
-
316
- ## Troubleshooting
317
-
318
- <details open>
319
- <summary><b>60-second recovery</b></summary>
320
-
321
- ```bash
322
- codex-multi-auth doctor --fix
323
- codex-multi-auth check
324
- codex-multi-auth forecast --live
325
- ```
326
-
327
- If still broken:
328
-
329
- ```bash
330
- codex-multi-auth login
331
- ```
332
-
333
- </details>
334
-
335
- <details>
336
- <summary><b>Common symptoms</b></summary>
337
-
338
- - `codex-multi-auth` unrecognized: run `where codex-multi-auth` or `which codex-multi-auth`, then follow `docs/troubleshooting.md` for install checks
339
- - Switch succeeds but wrong account appears active: run `codex-multi-auth switch <index>`, then restart session
340
- - Requests fail fast with a pool cooldown message: wait for the cooldown window or inspect `codex-multi-auth status`
341
- - Requests fail fast after repeated upstream 5xx errors: inspect `codex-multi-auth report --json` for runtime traffic and cooldown details
342
- - Storage cleanup fails with `EBUSY` / `EPERM` (Windows): run `codex-multi-auth doctor --fix` to retry, or manually remove `~/.codex/multi-auth/<project-key>/` and re-login
343
- - OAuth callback on port `1455` fails: free the port and re-run `codex-multi-auth login`
344
- - Browser launch is blocked or you are in a headless shell: prefer `codex-multi-auth login --device-auth`; use `codex-multi-auth login --manual` or `CODEX_AUTH_NO_BROWSER=1` only when you need the callback-paste fallback
345
- - `missing field id_token` / `token_expired` / `refresh_token_reused`: re-login affected account
346
-
347
- </details>
348
-
349
- <details>
350
- <summary><b>Diagnostics pack</b></summary>
351
-
352
- ```bash
353
- codex-multi-auth list
354
- codex-multi-auth status
355
- codex-multi-auth check
356
- codex-multi-auth verify-flagged --json
357
- codex-multi-auth forecast --live
358
- codex-multi-auth fix --dry-run
359
- codex-multi-auth report --live --json
360
- codex-multi-auth doctor --json
361
- ```
362
-
363
- </details>
364
-
365
- ---
366
-
367
- ## Documentation
368
-
369
- - Docs portal: [docs/README.md](docs/README.md)
370
- - Getting started: [docs/getting-started.md](docs/getting-started.md)
371
- - Features: [docs/features.md](docs/features.md)
372
- - Configuration: [docs/configuration.md](docs/configuration.md)
373
- - Troubleshooting: [docs/troubleshooting.md](docs/troubleshooting.md)
374
- - Commands reference: [docs/reference/commands.md](docs/reference/commands.md)
375
- - Public API contract: [docs/reference/public-api.md](docs/reference/public-api.md)
376
- - Error contracts: [docs/reference/error-contracts.md](docs/reference/error-contracts.md)
377
- - Settings reference: [docs/reference/settings.md](docs/reference/settings.md)
378
- - Storage paths: [docs/reference/storage-paths.md](docs/reference/storage-paths.md)
379
- - Upgrade guide: [docs/upgrade.md](docs/upgrade.md)
380
- - Privacy: [docs/privacy.md](docs/privacy.md)
381
-
382
- ---
383
-
384
- ## Release Notes
385
-
386
- - Current stable: [docs/releases/v2.3.1.md](docs/releases/v2.3.1.md) — install via `npm i -g codex-multi-auth`
387
- - Previous stable: [docs/releases/v2.3.0.md](docs/releases/v2.3.0.md)
388
- - Previous stable: [docs/releases/v2.2.2.md](docs/releases/v2.2.2.md)
389
- - Previous stable: [docs/releases/v2.2.1.md](docs/releases/v2.2.1.md)
390
- - Previous stable: [docs/releases/v2.2.0.md](docs/releases/v2.2.0.md)
391
- - Previous stable: [docs/releases/v2.1.12.md](docs/releases/v2.1.12.md)
392
- - Earlier stable: [docs/releases/v2.1.11.md](docs/releases/v2.1.11.md)
393
- - Earlier stable: [docs/releases/v2.1.10.md](docs/releases/v2.1.10.md)
394
- - Earlier stable: [docs/releases/v2.1.8.md](docs/releases/v2.1.8.md)
395
- - Earlier stable: [docs/releases/v2.1.7.md](docs/releases/v2.1.7.md)
396
- - Earlier stable: [docs/releases/v2.1.6.md](docs/releases/v2.1.6.md)
397
- - Earlier stable: [docs/releases/v2.1.5.md](docs/releases/v2.1.5.md)
398
- - Earlier stable: [docs/releases/v2.1.4.md](docs/releases/v2.1.4.md)
399
- - Earlier stable: [docs/releases/v2.1.3.md](docs/releases/v2.1.3.md)
400
- - Earlier stable: [docs/releases/v2.1.2.md](docs/releases/v2.1.2.md)
401
- - Earlier stable: [docs/releases/v2.1.1.md](docs/releases/v2.1.1.md)
402
- - Earlier stable: [docs/releases/v2.1.0.md](docs/releases/v2.1.0.md)
403
- - Earlier stable: [docs/releases/v1.3.2.md](docs/releases/v1.3.2.md)
404
- - Stable archive: [docs/releases/v1.3.1.md](docs/releases/v1.3.1.md)
405
- - Full release archive: [docs/README.md#release-history](docs/README.md#release-history)
406
- - Archived prerelease: [docs/releases/v0.1.0-beta.0.md](docs/releases/v0.1.0-beta.0.md)
407
-
408
- ## License
409
-
410
- MIT License. See [LICENSE](LICENSE).
411
-
412
- <details>
413
- <summary><b>Legal</b></summary>
414
-
415
- - Not affiliated with OpenAI.
416
- - "ChatGPT", "Codex", and "OpenAI" are trademarks of OpenAI.
417
- - You assume responsibility for your own usage and compliance.
418
-
419
- </details>
1
+ # codex-multi-auth: multi-account OAuth for the official Codex CLI
2
+
3
+ [![npm version](https://img.shields.io/npm/v/codex-multi-auth.svg)](https://www.npmjs.com/package/codex-multi-auth)
4
+ [![npm downloads](https://img.shields.io/npm/dw/codex-multi-auth.svg)](https://www.npmjs.com/package/codex-multi-auth)
5
+ [![CI](https://github.com/ndycode/codex-multi-auth/actions/workflows/ci.yml/badge.svg)](https://github.com/ndycode/codex-multi-auth/actions/workflows/ci.yml)
6
+ [![MIT license](https://img.shields.io/npm/l/codex-multi-auth.svg)](LICENSE)
7
+
8
+ `codex-multi-auth` is a multi-account OAuth manager for the official `@openai/codex` CLI. It gives Codex CLI users explicit ChatGPT account login, account switching, health checks, local diagnostics, project-scoped storage, and default-on runtime Responses rotation without taking over the official `codex` binary. Use `codex-multi-auth ...` for account management, or `codex-multi-auth-codex ...` only when you intentionally want the optional forwarding wrapper.
9
+
10
+ Use it when you need a local Codex CLI multi-account workflow with visible account state, safer recovery commands, and a loopback-only runtime rotation proxy for request-bearing forwarded Codex sessions.
11
+
12
+ <img width="1270" height="729" alt="codex-multi-auth terminal dashboard for Codex CLI multi-account OAuth account status" src="https://github.com/user-attachments/assets/0cecb77e-a6d3-432a-ba48-3577db0c7093" />
13
+
14
+
15
+
16
+ > [!NOTE]
17
+ > Legacy scoped prerelease package `@ndycode/codex-multi-auth` is migration-only.
18
+ > Use `codex-multi-auth` for all new installs.
19
+
20
+ ## What You Get
21
+
22
+ - Codex CLI multi-account OAuth management with a dedicated `codex-multi-auth ...` command family
23
+ - Explicit ChatGPT account login, saved-account listing, account switching, health checks, and diagnostics
24
+ - Optional `codex-multi-auth-codex ...` forwarding wrapper for official Codex CLI commands when you choose wrapper-launched sessions
25
+ - Health-aware account selection, quota forecasting, automatic failover, and flagged-account recovery
26
+ - Project-scoped account storage under `~/.codex/multi-auth/projects/<project-key>/...` for repo-specific workflows
27
+ - Interactive terminal dashboard for account actions, settings, search, and hotkeys
28
+ - Forecast, report, fix, doctor, verify, monitor, and rotation commands for operational confidence
29
+ - Local usage ledger, budget guards, account policy controls, routing profiles, and model/account capability views
30
+ - Runtime counters, budget/cooldown state, and multi-auth probe visibility in `codex-multi-auth status` / `codex-multi-auth report`
31
+ - Default-on loopback Responses proxy for live account rotation inside forwarded Codex CLI/app sessions
32
+ - Optional loopback-only local bridge for `/health`, `/v1/models`, and `/v1/responses`, protected by hashed local client tokens
33
+ - Reversible packaged Codex app bind and user-level launcher routing helpers that do not patch official app binaries
34
+ - Session affinity, live account sync, proactive refresh, and preemptive quota deferral controls
35
+ - Codex-oriented request/prompt compatibility with strict runtime handling and documented error contracts
36
+ - Stable docs for install, configuration, troubleshooting, upgrade, public API, storage paths, and release notes
37
+
38
+ ---
39
+
40
+ ## Why Developers Use It
41
+
42
+ `codex-multi-auth` makes local Codex account state visible and recoverable. Instead of one opaque auth file, you get a named account pool, deterministic account switching, health-aware selection, JSON diagnostics for automation, and safe repair commands for stale or damaged local state. The architecture is designed for personal development workflows: credentials stay local, runtime rotation is loopback-only, and official Codex install paths keep owning the `codex` command.
43
+
44
+ ---
45
+
46
+ ## Current Architecture At A Glance
47
+
48
+ `codex-multi-auth` now ships three distinct global binaries:
49
+
50
+ | Binary | Purpose |
51
+ | --- | --- |
52
+ | `codex-multi-auth` | Primary account manager; accepts bare auth subcommands such as `login`, `status`, `switch`, `forecast`, and `rotation status` |
53
+ | `codex-multi-auth-codex` | Optional wrapper that handles `auth ...` locally and forwards every other command to the official Codex CLI |
54
+ | `codex-multi-auth-app-launcher` | Optional desktop launcher helper for supported user-level shortcuts and wrapper apps |
55
+
56
+ The package does not publish a global `codex` binary. Keep `codex` owned by the official OpenAI install path and use `codex-multi-auth-codex ...` only when you intentionally want this package's forwarding wrapper.
57
+
58
+ ---
59
+
60
+ <details open>
61
+ <summary><b>Terms and Usage Notice</b></summary>
62
+
63
+ > [!CAUTION]
64
+ > This project uses OAuth account credentials and is intended for personal development use.
65
+ >
66
+ > By using this package, you acknowledge:
67
+ > - This is an independent open-source project, not an official OpenAI product
68
+ > - You are responsible for your own usage and policy compliance
69
+ > - For production/commercial workloads, use the OpenAI Platform API
70
+
71
+ </details>
72
+
73
+ ---
74
+
75
+ ## Installation
76
+
77
+ <details open>
78
+ <summary><b>For Humans</b></summary>
79
+
80
+ ### Option A: Standard install
81
+
82
+ ```bash
83
+ npm i -g codex-multi-auth
84
+ ```
85
+
86
+ ### Option B: Migrate from legacy scoped prerelease
87
+
88
+ ```bash
89
+ npm uninstall -g @ndycode/codex-multi-auth
90
+ npm i -g codex-multi-auth
91
+ ```
92
+
93
+ ### Option C: Verify wiring
94
+
95
+ `codex --version` confirms the official Codex CLI is reachable. `codex-multi-auth --version` confirms the installed manager package version. `codex-multi-auth-codex --version` is the optional forwarding wrapper entrypoint.
96
+
97
+ ```bash
98
+ codex --version
99
+ codex-multi-auth --version
100
+ codex-multi-auth status
101
+ ```
102
+
103
+ Any official install path is fine as long as `codex` is on `PATH`: `npm i -g @openai/codex`, `brew install --cask codex`, or an official release binary.
104
+
105
+ </details>
106
+
107
+ <details>
108
+ <summary><b>For LLM Agents</b></summary>
109
+
110
+ ### Step-by-step
111
+
112
+ 1. Install global package:
113
+ - `npm i -g codex-multi-auth`
114
+ 2. Run first login flow with `codex-multi-auth login`
115
+ 3. Validate state with `codex-multi-auth status` and `codex-multi-auth check`
116
+ 4. Confirm routing with `codex-multi-auth forecast --live`
117
+
118
+ ### Verification
119
+
120
+ ```bash
121
+ codex-multi-auth status
122
+ codex-multi-auth check
123
+ ```
124
+
125
+ </details>
126
+
127
+ ---
128
+
129
+ ## Quick Start
130
+
131
+ Install and sign in:
132
+
133
+ ```bash
134
+ npm i -g @openai/codex
135
+ npm i -g codex-multi-auth
136
+ codex-multi-auth login
137
+ ```
138
+
139
+ If you already installed the official native CLI via Homebrew or a release binary, you only need:
140
+
141
+ ```bash
142
+ npm i -g codex-multi-auth
143
+ codex-multi-auth login
144
+ ```
145
+
146
+ Verify the manager and the new account:
147
+
148
+ ```bash
149
+ codex-multi-auth status
150
+ codex-multi-auth check
151
+ ```
152
+
153
+ Use these next:
154
+
155
+ ```bash
156
+ codex-multi-auth list
157
+ codex-multi-auth switch 2
158
+ codex-multi-auth forecast --live
159
+ ```
160
+
161
+ If browser launch is blocked, use the alternate login paths in [docs/getting-started.md](docs/getting-started.md#alternate-login-paths).
162
+ For remote or headless shells, prefer `codex-multi-auth login --device-auth`.
163
+
164
+ ---
165
+
166
+ ## Command Toolkit
167
+
168
+ ### Start here
169
+
170
+ | Command | What it answers |
171
+ | --- | --- |
172
+ | `codex-multi-auth login` | How do I add or re-open the account menu? |
173
+ | `codex-multi-auth status` | Is the wrapper active right now? |
174
+ | `codex-multi-auth check` | Do my saved accounts look healthy? |
175
+
176
+ ### Daily use
177
+
178
+ | Command | What it answers |
179
+ | --- | --- |
180
+ | `codex-multi-auth list` | Which accounts are saved and which one is active? |
181
+ | `codex-multi-auth switch <index>` | How do I move to a different saved account? |
182
+ | `codex-multi-auth forecast --live` | Which account looks best for the next session? |
183
+
184
+ ### Repair
185
+
186
+ | Command | What it answers |
187
+ | --- | --- |
188
+ | `codex-multi-auth verify-flagged` | Can any previously flagged account be restored? |
189
+ | `codex-multi-auth verify --paths` | Do my storage path chain and sandbox probes still pass self-test? |
190
+ | `codex-multi-auth fix --dry-run` | What safe storage or account repairs are available? |
191
+ | `codex-multi-auth doctor --fix` | Can the CLI diagnose and apply the safest fixes now? |
192
+ | `codex-multi-auth uninstall` | Remove residual artifacts (run BEFORE `npm uninstall`; npm@7+ no longer fires `preuninstall`) |
193
+
194
+ ### Advanced
195
+
196
+ | Command | What it answers |
197
+ | --- | --- |
198
+ | `codex-multi-auth report --live --json` | How do I get the full machine-readable health report? |
199
+ | `codex-multi-auth fix --live --model gpt-5.5` | How do I run live repair probes with a chosen model? |
200
+ | `codex-multi-auth why-selected --json` | Which account does the selector pick now, and why? |
201
+ | `codex-multi-auth usage --since 24h --by project` | What local usage has been recorded recently? |
202
+ | `codex-multi-auth monitor --json` | What is the combined usage, policy, quota, runtime, and project state? |
203
+ | `codex-multi-auth bridge token create --label local-client` | How do I create a local bridge bearer token? |
204
+ | `codex-multi-auth integrations --kind python` | How do I generate local bridge client snippets? |
205
+ | `codex-multi-auth rotation status` | Is live runtime account rotation enabled for forwarded Codex sessions? |
206
+
207
+ ### Reliability behavior
208
+
209
+ - whole-pool replay is disabled by default when every account is rate-limited
210
+ - active requests use a bounded outbound request budget so one prompt cannot walk the full pool indefinitely
211
+ - repeated cross-account 5xx bursts trigger a short cooldown instead of continuing aggressive rotation
212
+ - proactive refresh is staggered to reduce background refresh bursts
213
+ - `codex-multi-auth status` surfaces recent runtime request metrics in text output, and `codex-multi-auth report --json` exposes the machine-readable cooldown/runtime snapshot
214
+
215
+ ---
216
+
217
+ ## Dashboard Hotkeys
218
+
219
+ ### Main dashboard
220
+
221
+ | Key | Action |
222
+ | --- | --- |
223
+ | `Up` / `Down` | Move selection |
224
+ | `Enter` | Select/open |
225
+ | `1-9` | Quick switch |
226
+ | `/` | Search |
227
+ | `?` | Toggle help |
228
+ | `Q` | Back/cancel |
229
+
230
+ ### Account details
231
+
232
+ | Key | Action |
233
+ | --- | --- |
234
+ | `S` | Set current account |
235
+ | `R` | Refresh/re-login account |
236
+ | `E` | Enable/disable account |
237
+ | `D` | Delete account |
238
+
239
+ ---
240
+
241
+ ## Storage Paths
242
+
243
+ | File | Default path |
244
+ | --- | --- |
245
+ | Settings | `~/.codex/multi-auth/settings.json` |
246
+ | Accounts | `~/.codex/multi-auth/openai-codex-accounts.json` |
247
+ | Flagged accounts | `~/.codex/multi-auth/openai-codex-flagged-accounts.json` |
248
+ | Quota cache | `~/.codex/multi-auth/quota-cache.json` |
249
+ | Runtime observability | `~/.codex/multi-auth/runtime-observability.json` |
250
+ | Usage ledger | `~/.codex/multi-auth/usage/usage-ledger.jsonl` |
251
+ | Account policies | `~/.codex/multi-auth/account-policies.json` |
252
+ | Routing profiles | `~/.codex/multi-auth/routing-profiles.json` |
253
+ | Budget guards | `~/.codex/multi-auth/budget-guards.json` |
254
+ | Local client tokens | `~/.codex/multi-auth/local-client-tokens.json` |
255
+ | Runtime app helper status | `~/.codex/multi-auth/runtime-rotation-app-helper.json` |
256
+ | Persistent app bind state/logs | `~/.codex/multi-auth/app-bind/` |
257
+ | Logs | `~/.codex/multi-auth/logs/codex-plugin/` |
258
+ | Per-project accounts | `~/.codex/multi-auth/projects/<project-key>/openai-codex-accounts.json` |
259
+
260
+ Override root with `CODEX_MULTI_AUTH_DIR=<path>`.
261
+
262
+ ---
263
+
264
+ ## Configuration
265
+
266
+ Primary config root:
267
+ - `~/.codex/multi-auth/settings.json`
268
+ - or `CODEX_MULTI_AUTH_DIR/settings.json` when custom root is set
269
+
270
+ Selected runtime/environment overrides:
271
+
272
+ | Variable | Effect |
273
+ | --- | --- |
274
+ | `CODEX_MULTI_AUTH_DIR` | Override settings/accounts root |
275
+ | `CODEX_MULTI_AUTH_CONFIG_PATH` | Alternate config file path |
276
+ | `CODEX_MODE=0/1` | Disable/enable Codex mode |
277
+ | `CODEX_MULTI_AUTH_RUNTIME_ROTATION_PROXY=0/1` | Opt out/in of live Responses proxy rotation for forwarded Codex CLI/app sessions |
278
+ | `CODEX_MULTI_AUTH_APP_ROTATION_IDLE_MS=<ms>` | Override automatic Codex app helper idle shutdown |
279
+ | `CODEX_MULTI_AUTH_APP_BIND_INSTALL=0/1` | Opt out/in of packaged Codex app bind self-heal on first CLI run or rotation enable |
280
+ | `CODEX_MULTI_AUTH_APP_LAUNCHER_INSTALL=0/1` | Opt out/in of routing supported app shortcuts on first CLI run or rotation enable |
281
+ | `CODEX_TUI_V2=0/1` | Disable/enable TUI v2 |
282
+ | `CODEX_TUI_COLOR_PROFILE=truecolor\|ansi256\|ansi16` | TUI color profile |
283
+ | `CODEX_TUI_GLYPHS=ascii\|unicode\|auto` | TUI glyph style |
284
+ | `CODEX_AUTH_BACKGROUND_RESPONSES=0/1` | Opt in/out of stateful Responses `background: true` compatibility |
285
+ | `CODEX_AUTH_FETCH_TIMEOUT_MS=<ms>` | Request timeout override |
286
+ | `CODEX_AUTH_STREAM_STALL_TIMEOUT_MS=<ms>` | Stream stall timeout override |
287
+
288
+ Validate config after changes:
289
+
290
+ ```bash
291
+ codex-multi-auth status
292
+ codex-multi-auth check
293
+ codex-multi-auth forecast --live
294
+ ```
295
+
296
+ Responses background mode stays opt-in. Enable `backgroundResponses` in settings or `CODEX_AUTH_BACKGROUND_RESPONSES=1` only for callers that intentionally send `background: true`, because those requests switch from stateless `store=false` routing to stateful `store=true`. See [docs/upgrade.md](docs/upgrade.md) for rollout guidance.
297
+
298
+ Runtime rotation is enabled by default for request-bearing wrapper-launched Codex sessions. Package install scripts stay side-effect-free: npm postinstall only prints a short notice (and stays silent in CI or non-interactive installs). The first CLI run after an install self-heals supported packaged Codex app binds and user-level launcher routing when possible (recorded once in a `first-run-setup.json` marker under the multi-auth runtime root), while `codex-multi-auth rotation enable` remains the explicit repair command. `codex-multi-auth rotation disable` turns the setting off and removes the persistent app bind. Set `CODEX_MULTI_AUTH_RUNTIME_ROTATION_PROXY=0`, `CODEX_MULTI_AUTH_APP_BIND_INSTALL=0`, or `CODEX_MULTI_AUTH_APP_LAUNCHER_INSTALL=0` to opt out of the matching default behavior.
299
+
300
+ Installed wrappers may perform a best-effort daily npm version check during normal forwarded Codex startup. When a newer package is detected, the wrapper only prints a manual notice on an interactive TTY or when `CODEX_MULTI_AUTH_DEBUG=1`: `npm install -g codex-multi-auth@latest`. It never runs npm install or update commands for you.
301
+
302
+ ---
303
+
304
+ ## Experimental Settings Highlights
305
+
306
+ The Settings menu now includes an `Experimental` section for staged features:
307
+
308
+ - preview-first sync into `oc-chatgpt-multi-auth`
309
+ - named local pool backup export with filename prompt
310
+ - refresh guard toggle and interval controls moved out of Backend Controls
311
+
312
+ These flows are intentionally non-destructive by default: sync previews before apply, destination-only accounts are preserved, and backup filename collisions fail safely.
313
+
314
+ ---
315
+
316
+ ## Troubleshooting
317
+
318
+ <details open>
319
+ <summary><b>60-second recovery</b></summary>
320
+
321
+ ```bash
322
+ codex-multi-auth doctor --fix
323
+ codex-multi-auth check
324
+ codex-multi-auth forecast --live
325
+ ```
326
+
327
+ If still broken:
328
+
329
+ ```bash
330
+ codex-multi-auth login
331
+ ```
332
+
333
+ </details>
334
+
335
+ <details>
336
+ <summary><b>Common symptoms</b></summary>
337
+
338
+ - `codex-multi-auth` unrecognized: run `where codex-multi-auth` or `which codex-multi-auth`, then follow `docs/troubleshooting.md` for install checks
339
+ - Switch succeeds but wrong account appears active: run `codex-multi-auth switch <index>`, then restart session
340
+ - Requests fail fast with a pool cooldown message: wait for the cooldown window or inspect `codex-multi-auth status`
341
+ - Requests fail fast after repeated upstream 5xx errors: inspect `codex-multi-auth report --json` for runtime traffic and cooldown details
342
+ - Storage cleanup fails with `EBUSY` / `EPERM` (Windows): run `codex-multi-auth doctor --fix` to retry, or manually remove `~/.codex/multi-auth/<project-key>/` and re-login
343
+ - OAuth callback on port `1455` fails: free the port and re-run `codex-multi-auth login`
344
+ - Browser launch is blocked or you are in a headless shell: prefer `codex-multi-auth login --device-auth`; use `codex-multi-auth login --manual` or `CODEX_AUTH_NO_BROWSER=1` only when you need the callback-paste fallback
345
+ - `missing field id_token` / `token_expired` / `refresh_token_reused`: re-login affected account
346
+
347
+ </details>
348
+
349
+ <details>
350
+ <summary><b>Diagnostics pack</b></summary>
351
+
352
+ ```bash
353
+ codex-multi-auth list
354
+ codex-multi-auth status
355
+ codex-multi-auth check
356
+ codex-multi-auth verify-flagged --json
357
+ codex-multi-auth forecast --live
358
+ codex-multi-auth fix --dry-run
359
+ codex-multi-auth report --live --json
360
+ codex-multi-auth doctor --json
361
+ ```
362
+
363
+ </details>
364
+
365
+ ---
366
+
367
+ ## Documentation
368
+
369
+ - Docs portal: [docs/README.md](docs/README.md)
370
+ - Getting started: [docs/getting-started.md](docs/getting-started.md)
371
+ - Features: [docs/features.md](docs/features.md)
372
+ - Configuration: [docs/configuration.md](docs/configuration.md)
373
+ - Troubleshooting: [docs/troubleshooting.md](docs/troubleshooting.md)
374
+ - Commands reference: [docs/reference/commands.md](docs/reference/commands.md)
375
+ - Public API contract: [docs/reference/public-api.md](docs/reference/public-api.md)
376
+ - Error contracts: [docs/reference/error-contracts.md](docs/reference/error-contracts.md)
377
+ - Settings reference: [docs/reference/settings.md](docs/reference/settings.md)
378
+ - Storage paths: [docs/reference/storage-paths.md](docs/reference/storage-paths.md)
379
+ - Upgrade guide: [docs/upgrade.md](docs/upgrade.md)
380
+ - Privacy: [docs/privacy.md](docs/privacy.md)
381
+
382
+ ---
383
+
384
+ ## Release Notes
385
+
386
+ - Current stable: [docs/releases/v2.3.3.md](docs/releases/v2.3.3.md) — install via `npm i -g codex-multi-auth`
387
+ - Previous stable: [docs/releases/v2.3.2.md](docs/releases/v2.3.2.md)
388
+ - Previous stable: [docs/releases/v2.3.1.md](docs/releases/v2.3.1.md)
389
+ - Previous stable: [docs/releases/v2.3.0.md](docs/releases/v2.3.0.md)
390
+ - Previous stable: [docs/releases/v2.2.2.md](docs/releases/v2.2.2.md)
391
+ - Previous stable: [docs/releases/v2.2.1.md](docs/releases/v2.2.1.md)
392
+ - Previous stable: [docs/releases/v2.2.0.md](docs/releases/v2.2.0.md)
393
+ - Previous stable: [docs/releases/v2.1.12.md](docs/releases/v2.1.12.md)
394
+ - Earlier stable: [docs/releases/v2.1.11.md](docs/releases/v2.1.11.md)
395
+ - Earlier stable: [docs/releases/v2.1.10.md](docs/releases/v2.1.10.md)
396
+ - Earlier stable: [docs/releases/v2.1.8.md](docs/releases/v2.1.8.md)
397
+ - Earlier stable: [docs/releases/v2.1.7.md](docs/releases/v2.1.7.md)
398
+ - Earlier stable: [docs/releases/v2.1.6.md](docs/releases/v2.1.6.md)
399
+ - Earlier stable: [docs/releases/v2.1.5.md](docs/releases/v2.1.5.md)
400
+ - Earlier stable: [docs/releases/v2.1.4.md](docs/releases/v2.1.4.md)
401
+ - Earlier stable: [docs/releases/v2.1.3.md](docs/releases/v2.1.3.md)
402
+ - Earlier stable: [docs/releases/v2.1.2.md](docs/releases/v2.1.2.md)
403
+ - Earlier stable: [docs/releases/v2.1.1.md](docs/releases/v2.1.1.md)
404
+ - Earlier stable: [docs/releases/v2.1.0.md](docs/releases/v2.1.0.md)
405
+ - Earlier stable: [docs/releases/v1.3.2.md](docs/releases/v1.3.2.md)
406
+ - Stable archive: [docs/releases/v1.3.1.md](docs/releases/v1.3.1.md)
407
+ - Full release archive: [docs/README.md#release-history](docs/README.md#release-history)
408
+ - Archived prerelease: [docs/releases/v0.1.0-beta.0.md](docs/releases/v0.1.0-beta.0.md)
409
+
410
+ ## License
411
+
412
+ MIT License. See [LICENSE](LICENSE).
413
+
414
+ <details>
415
+ <summary><b>Legal</b></summary>
416
+
417
+ - Not affiliated with OpenAI.
418
+ - "ChatGPT", "Codex", and "OpenAI" are trademarks of OpenAI.
419
+ - You assume responsibility for your own usage and compliance.
420
+
421
+ </details>