简体中文 | English
为 Codex 工作流设计的本地优先入口层:统一多账号、不中断切换、少折腾配置。
AI Gate 不是另一个 AI 模型,也不是云端代理平台。它是在 AI 之上加的一层轻量级本地网关和桌面壳,解决真实使用里最烦的几件事:多个官方账户和第三方账户怎么统一管理,额度耗尽时怎么不中断切换,代理、Skill、MCP、统计和备份怎么收敛到一个入口,而且账号信息和 Key 仍然留在本机。
很多人开始高频使用 Codex 之后,真正卡住的已经不是模型本身,而是工作流:
- 一个官方账户不够用,多号切换很烦
- 第三方 API 能补额度,但和官方混用时配置容易乱
- 正在对话中途,当前账户额度耗尽或临时异常,流程直接断掉
- Skill、MCP、统计、代理开关、备份恢复散落在不同位置,维护成本高
- 想省事,但又不想把账号和 Key 交给远端服务
AI Gate 的目标很简单:把这些问题收成一个本地优先、边界清晰、足够稳定的入口层。
- 同时管理多个官方账户和第三方账户
- 保留一个稳定的本地入口,不用反复修改客户端配置
- 桌面端直接导入、切换、查看状态,降低日常运维成本
- 当前账户额度耗尽、异常或暂时不可用时,自动切到下一个可用账户
- 切换尽量发生在对话内部,不要求用户手动重开一轮流程
- 更适合长任务、连续调试和高频编码场景
- 后端只监听 loopback,桌面端只拉起本地 sidecar
- 账户信息、Key、配置补丁、备份快照都保留在本机
- 开源可审查,不需要把信任建立在黑盒服务上
- 在桌面端统一管理 Skill 和 MCP 相关配置
- 更容易把本地工具链、知识库和工作流接到 Codex 上
- 适合把 Obsidian、脚本工具和自定义能力纳入同一个入口
- 提供代理、统计、备份恢复和菜单栏控制
- 既保留工程可控性,也尽量降低普通用户的使用门槛
- 目标不是“功能越多越好”,而是“每天能稳定用下去”
- 有多个官方账户,想统一管理的人
- 官方账户和第三方 API 混着用的人
- 不希望频繁手改
~/.codex/config.toml的人 - 想把 Skill、MCP、统计和代理入口收进一个桌面端的人
- 重视本地安全边界,不想把账号信息交给远端中转的人
- 从 最新版本 下载桌面客户端
- 导入当前官方账户,或添加第三方 API 账户
- 打开代理,开始在 Codex 里使用
- 如果当前账户用量耗尽,AI Gate 会尽量自动切到下一个可用账户
cp .env.example .env
make backend
make frontend
npm --prefix desktop install
npm --prefix desktop run dev前端开发服务器会将本地 API 请求代理到 http://127.0.0.1:6789。
flowchart LR
A["Codex CLI"] --> C["AI Gate Router<br/>Go 后端"]
B["AI Gate Desktop<br/>Tauri 桌面壳"] --> C
C --> E["官方 Codex 上游<br/>chatgpt.com/backend-api/codex"]
C --> F["兼容提供方<br/>原生 /responses"]
C --> G["路由数据库<br/>审计与监控"]
sequenceDiagram
participant Client as Codex 客户端
participant Desktop as AI Gate 桌面端
participant Router as 本地路由
participant Config as 本地配置
participant Upstream as 官方或兼容上游
Desktop->>Config: 读取当前激活账号与代理状态
Client->>Router: POST /ai-router/api/v1/responses
Router->>Config: 解析当前启用的 provider
alt 官方账号
Router->>Upstream: 透传原生 /responses 请求
else 第三方 API
Router->>Upstream: 透传原生 /responses 请求
end
Upstream-->>Router: 返回 SSE 或 JSON
Router-->>Client: 按原样流式转发响应
Router->>Desktop: 暴露本地状态、审计和监控信息
- 仅本地运行:后端只监听回环地址,桌面应用只启动本地 sidecar
- 薄网关优先:
response_id、previous_response_id、状态码和 SSE 生命周期全部以上游为准 - 不做伪实现:做不到就显式删除,不用“看起来像支持”来掩盖语义缺失
- 本地优先:桌面端管理的状态和备份快照位于
~/.aigate/data - 配置补丁可恢复:只有在开启代理、关闭代理或执行恢复时,AI Gate 才会修改
~/.codex/config.toml和~/.codex/auth.json
更完整的边界说明见 thin-gateway-mode.md。
推荐本地配置如下:
model_provider = "router"
[model_providers.router]
name = "router"
base_url = "http://127.0.0.1:6789/ai-router/api"
wire_api = "responses"
requires_openai_auth = true当前网关协议面:
POST /ai-router/api/v1/responsesGET /ai-router/api/v1/models
- AI Gate 不替代 Skill,而是给 Skill 提供一个更稳定的本地入口
- 可以继续使用仓库内 Skill 或自定义 Skill,把会话迁移、本地脚本、知识整理等能力接入 Codex
- 会话迁移 Skill 见 skills/migrating-codex-history/SKILL.md
- MCP 配置可以和账户、代理一起放在桌面端统一管理
- 更适合需要接本地知识库、脚本服务或工具服务的工作流
- 对于频繁使用 MCP 的用户,统一入口比手工维护多个配置更稳
- 通过本地网关暴露
POST /responses与GET /models - 支持官方账号认证与 token 刷新
- 支持原生实现
/responses的第三方提供方 - 提供 React 前端与 Tauri 桌面外壳
- 保留本地审计数据与运行观测数据
- 提供 Skill、MCP、统计、代理和备份恢复入口
- 从
/responses回退到/chat/completions - 在本地生成
response_id - 用本地历史重建
previous_response_id - 模拟响应检索类接口
- 作为公网托管网关或 SaaS 服务直接部署
cp .env.example .env修改 .env,至少替换 CODEX_ROUTER_ENCRYPTION_KEY,不要继续使用示例值。
默认本地配置如下:
CODEX_ROUTER_LISTEN_ADDR=127.0.0.1:6789
CODEX_ROUTER_DATABASE_PATH=data/codex-router.sqlite
CODEX_ROUTER_SCHEDULER_INTERVAL=5m
CODEX_ROUTER_ENCRYPTION_KEY=change-this-to-a-random-32-plus-char-secretmake backend
make frontend
make test当前会执行:
cd backend && go test ./...npm --prefix frontend run test
THIRD_PARTY_BASE_URL=https://code.ppchat.vip/v1 \
THIRD_PARTY_API_KEY=sk-... \
make smoke-third-party这个测试只适用于原生支持 /responses 的上游。
本地 macOS 打包流程:
npm --prefix frontend ci
npm --prefix desktop install
bash scripts/desktop/build_sidecar_macos.sh
npm --prefix desktop run tauri build -- --target universal-apple-darwin
bash scripts/desktop/notarize_macos.sh
bash scripts/desktop/collect_release_assets.sh产物会出现在 release-assets/:
aigate-<tag>-macOS.dmgaigate-<tag>-macOS.zipaigate-<tag>-darwin-universal.app.tar.gz





