{"id":47259052,"url":"https://github.com/gcssloop/ai-gate","last_synced_at":"2026-04-18T22:12:29.023Z","repository":{"id":343464712,"uuid":"1177735665","full_name":"GcsSloop/ai-gate","owner":"GcsSloop","description":"Codex 专用 AI 代理工具，支持官方和第三方账户混搭切换","archived":false,"fork":false,"pushed_at":"2026-03-24T06:06:52.000Z","size":21182,"stargazers_count":21,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-25T03:49:17.689Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GcsSloop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-10T10:15:26.000Z","updated_at":"2026-03-24T12:46:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GcsSloop/ai-gate","commit_stats":null,"previous_names":["gcssloop/ai-gate"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/GcsSloop/ai-gate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GcsSloop%2Fai-gate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GcsSloop%2Fai-gate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GcsSloop%2Fai-gate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GcsSloop%2Fai-gate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GcsSloop","download_url":"https://codeload.github.com/GcsSloop/ai-gate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GcsSloop%2Fai-gate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-14T22:25:20.958Z","updated_at":"2026-04-11T15:03:41.122Z","avatar_url":"https://github.com/GcsSloop.png","language":"Go","readme":"# AI Gate\n\n简体中文 | [English](docs/README.en.md)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/aigate_1024_1024.png\" alt=\"AI Gate icon\" width=\"128\" height=\"128\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e为 Codex 工作流设计的本地优先入口层：统一多账号、不中断切换、少折腾配置。\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/GcsSloop/ai-gate?style=flat-square\u0026label=stars\"\u003e\n  \u003cimg alt=\"Forks\" src=\"https://img.shields.io/github/forks/GcsSloop/ai-gate?style=flat-square\u0026label=forks\"\u003e\n  \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/GcsSloop/ai-gate?style=flat-square\"\u003e\n  \u003cimg alt=\"Release\" src=\"https://img.shields.io/github/v/release/GcsSloop/ai-gate?style=flat-square\u0026label=release\"\u003e\n  \u003cimg alt=\"Platform\" src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Windows-111827?style=flat-square\"\u003e\n  \u003cimg alt=\"Status\" src=\"https://img.shields.io/github/actions/workflow/status/GcsSloop/ai-gate/release.yml?branch=main\u0026style=flat-square\u0026label=status\"\u003e\n\u003c/p\u003e\n\nAI Gate 不是另一个 AI 模型，也不是云端代理平台。它是在 AI 之上加的一层轻量级本地网关和桌面壳，解决真实使用里最烦的几件事：多个官方账户和第三方账户怎么统一管理，额度耗尽时怎么不中断切换，代理、Skill、MCP、统计和备份怎么收敛到一个入口，而且账号信息和 Key 仍然留在本机。\n\n## 为什么是 AI Gate\n\n很多人开始高频使用 Codex 之后，真正卡住的已经不是模型本身，而是工作流：\n\n- 一个官方账户不够用，多号切换很烦\n- 第三方 API 能补额度，但和官方混用时配置容易乱\n- 正在对话中途，当前账户额度耗尽或临时异常，流程直接断掉\n- Skill、MCP、统计、代理开关、备份恢复散落在不同位置，维护成本高\n- 想省事，但又不想把账号和 Key 交给远端服务\n\nAI Gate 的目标很简单：把这些问题收成一个本地优先、边界清晰、足够稳定的入口层。\n\n## 核心亮点\n\n### 1. 多账号统一接入\n\n- 同时管理多个官方账户和第三方账户\n- 保留一个稳定的本地入口，不用反复修改客户端配置\n- 桌面端直接导入、切换、查看状态，降低日常运维成本\n\n### 2. 对话不中断切换\n\n- 当前账户额度耗尽、异常或暂时不可用时，自动切到下一个可用账户\n- 切换尽量发生在对话内部，不要求用户手动重开一轮流程\n- 更适合长任务、连续调试和高频编码场景\n\n### 3. 本地优先更安心\n\n- 后端只监听 loopback，桌面端只拉起本地 sidecar\n- 账户信息、Key、配置补丁、备份快照都保留在本机\n- 开源可审查，不需要把信任建立在黑盒服务上\n\n### 4. Skill 与 MCP 管理\n\n- 在桌面端统一管理 Skill 和 MCP 相关配置\n- 更容易把本地工具链、知识库和工作流接到 Codex 上\n- 适合把 Obsidian、脚本工具和自定义能力纳入同一个入口\n\n### 5. 可观测与低折腾\n\n- 提供代理、统计、备份恢复和菜单栏控制\n- 既保留工程可控性，也尽量降低普通用户的使用门槛\n- 目标不是“功能越多越好”，而是“每天能稳定用下去”\n\n## 适合谁用\n\n- 有多个官方账户，想统一管理的人\n- 官方账户和第三方 API 混着用的人\n- 不希望频繁手改 `~/.codex/config.toml` 的人\n- 想把 Skill、MCP、统计和代理入口收进一个桌面端的人\n- 重视本地安全边界，不想把账号信息交给远端中转的人\n\n## 产品巡览\n\n### 首页总览\n\n![AI Gate 首页](assets/screenshot-main.png)\n\n### 代理配置\n\n![AI Gate 代理配置页](assets/screenshot-proxy.png)\n\n### 统计页\n\n![AI Gate 统计页](assets/screenshot-statistics.png)\n\n### MCP 管理\n\n![AI Gate MCP 管理](assets/screenshot-mcp.png)\n\n### Skill 管理\n\n![AI Gate Skill 管理](assets/screenshot-skill.png)\n\n## 3 分钟上手\n\n### 普通用户\n\n1. 从 [最新版本](https://github.com/GcsSloop/ai-gate/releases/latest) 下载桌面客户端\n2. 导入当前官方账户，或添加第三方 API 账户\n3. 打开代理，开始在 Codex 里使用\n4. 如果当前账户用量耗尽，AI Gate 会尽量自动切到下一个可用账户\n\n### 开发者\n\n```bash\ncp .env.example .env\nmake backend\nmake frontend\nnpm --prefix desktop install\nnpm --prefix desktop run dev\n```\n\n前端开发服务器会将本地 API 请求代理到 `http://127.0.0.1:6789`。\n\n## 架构与安全边界\n\n```mermaid\nflowchart LR\n    A[\"Codex CLI\"] --\u003e C[\"AI Gate Router\u003cbr/\u003eGo 后端\"]\n    B[\"AI Gate Desktop\u003cbr/\u003eTauri 桌面壳\"] --\u003e C\n    C --\u003e E[\"官方 Codex 上游\u003cbr/\u003echatgpt.com/backend-api/codex\"]\n    C --\u003e F[\"兼容提供方\u003cbr/\u003e原生 /responses\"]\n    C --\u003e G[\"路由数据库\u003cbr/\u003e审计与监控\"]\n```\n\n### 请求流转\n\n```mermaid\nsequenceDiagram\n    participant Client as Codex 客户端\n    participant Desktop as AI Gate 桌面端\n    participant Router as 本地路由\n    participant Config as 本地配置\n    participant Upstream as 官方或兼容上游\n\n    Desktop-\u003e\u003eConfig: 读取当前激活账号与代理状态\n    Client-\u003e\u003eRouter: POST /ai-router/api/v1/responses\n    Router-\u003e\u003eConfig: 解析当前启用的 provider\n    alt 官方账号\n        Router-\u003e\u003eUpstream: 透传原生 /responses 请求\n    else 第三方 API\n        Router-\u003e\u003eUpstream: 透传原生 /responses 请求\n    end\n    Upstream--\u003e\u003eRouter: 返回 SSE 或 JSON\n    Router--\u003e\u003eClient: 按原样流式转发响应\n    Router-\u003e\u003eDesktop: 暴露本地状态、审计和监控信息\n```\n\n### 边界说明\n\n- **仅本地运行**：后端只监听回环地址，桌面应用只启动本地 sidecar\n- **薄网关优先**：`response_id`、`previous_response_id`、状态码和 SSE 生命周期全部以上游为准\n- **不做伪实现**：做不到就显式删除，不用“看起来像支持”来掩盖语义缺失\n- **本地优先**：桌面端管理的状态和备份快照位于 `~/.aigate/data`\n- **配置补丁可恢复**：只有在开启代理、关闭代理或执行恢复时，AI Gate 才会修改 `~/.codex/config.toml` 和 `~/.codex/auth.json`\n\n更完整的边界说明见 [thin-gateway-mode.md](docs/thin-gateway-mode.md)。\n\n## Codex、Skill 与 MCP 如何协作\n\n### Codex CLI\n\n推荐本地配置如下：\n\n```toml\nmodel_provider = \"router\"\n\n[model_providers.router]\nname = \"router\"\nbase_url = \"http://127.0.0.1:6789/ai-router/api\"\nwire_api = \"responses\"\nrequires_openai_auth = true\n```\n\n当前网关协议面：\n\n- `POST /ai-router/api/v1/responses`\n- `GET /ai-router/api/v1/models`\n\n### Skill 工作流\n\n- AI Gate 不替代 Skill，而是给 Skill 提供一个更稳定的本地入口\n- 可以继续使用仓库内 Skill 或自定义 Skill，把会话迁移、本地脚本、知识整理等能力接入 Codex\n- 会话迁移 Skill 见 [skills/migrating-codex-history/SKILL.md](skills/migrating-codex-history/SKILL.md)\n\n### MCP 工作流\n\n- MCP 配置可以和账户、代理一起放在桌面端统一管理\n- 更适合需要接本地知识库、脚本服务或工具服务的工作流\n- 对于频繁使用 MCP 的用户，统一入口比手工维护多个配置更稳\n\n## 当前能力\n\n- 通过本地网关暴露 `POST /responses` 与 `GET /models`\n- 支持官方账号认证与 token 刷新\n- 支持原生实现 `/responses` 的第三方提供方\n- 提供 React 前端与 Tauri 桌面外壳\n- 保留本地审计数据与运行观测数据\n- 提供 Skill、MCP、统计、代理和备份恢复入口\n\n## 明确不支持的能力\n\n- 从 `/responses` 回退到 `/chat/completions`\n- 在本地生成 `response_id`\n- 用本地历史重建 `previous_response_id`\n- 模拟响应检索类接口\n- 作为公网托管网关或 SaaS 服务直接部署\n\n## 本地开发\n\n### 准备环境变量\n\n```bash\ncp .env.example .env\n```\n\n修改 `.env`，至少替换 `CODEX_ROUTER_ENCRYPTION_KEY`，不要继续使用示例值。\n\n默认本地配置如下：\n\n```env\nCODEX_ROUTER_LISTEN_ADDR=127.0.0.1:6789\nCODEX_ROUTER_DATABASE_PATH=data/codex-router.sqlite\nCODEX_ROUTER_SCHEDULER_INTERVAL=5m\nCODEX_ROUTER_ENCRYPTION_KEY=change-this-to-a-random-32-plus-char-secret\n```\n\n### 常用命令\n\n```bash\nmake backend\nmake frontend\nmake test\n```\n\n当前会执行：\n\n- `cd backend \u0026\u0026 go test ./...`\n- `npm --prefix frontend run test`\n\n### 可选第三方冒烟测试\n\n```bash\nTHIRD_PARTY_BASE_URL=https://code.ppchat.vip/v1 \\\nTHIRD_PARTY_API_KEY=sk-... \\\nmake smoke-third-party\n```\n\n这个测试只适用于原生支持 `/responses` 的上游。\n\n## 桌面打包\n\n本地 macOS 打包流程：\n\n```bash\nnpm --prefix frontend ci\nnpm --prefix desktop install\nbash scripts/desktop/build_sidecar_macos.sh\nnpm --prefix desktop run tauri build -- --target universal-apple-darwin\nbash scripts/desktop/notarize_macos.sh\nbash scripts/desktop/collect_release_assets.sh\n```\n\n产物会出现在 `release-assets/`：\n\n- `aigate-\u003ctag\u003e-macOS.dmg`\n- `aigate-\u003ctag\u003e-macOS.zip`\n- `aigate-\u003ctag\u003e-darwin-universal.app.tar.gz`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgcssloop%2Fai-gate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgcssloop%2Fai-gate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgcssloop%2Fai-gate/lists"}