· llms.txt · Changelog · Issues · License: Apache-2.0
关键词:AI 代码代理并行执行 · Claude Code 并行执行 · Codex CLI 并行任务 · 多代理对比 AI 编程 · AI 编程 PR 自动化 · Docker 隔离 AI 编程 · 自托管 AI 编码平台
Keywords: parallel AI coding agents · run Claude and Codex side by side · AI coding agent comparison UI · self-hosted AI coding platform · Docker isolated AI coding agent · alternative to Devin self-hosted · alternative to Cognition self-hosted
一个用于「并行跑代码代理」的自托管平台:通过 Web UI 同时运行 Claude Code 与 Codex CLI(或其它代理),统一收集执行日志与代码变更,并支持一键创建 Pull Request。核心价值是「并行 + 对比」:同一个任务用不同代理跑,看 diff 选赢家,比串行试错快几倍。
| 说明 | |
|---|---|
| 是什么 | 自托管的多 AI 编码代理并行执行与对比平台(Docker 隔离 + Web UI + 可选 PR) |
| 适合谁 | 想并行试 Claude / Codex 等代理、对比 patch 再开 PR 的开发者与小团队 |
| 限制 | 需要 Docker;默认非 SaaS;GitHub Token 仅 sessionStorage;不自动 merge PR |
本仓库是 ObservedObserver/async-code(Apache-2.0)的衍生作品(derivative work),并非原创项目。原始的并行代理执行架构、Next.js 前端与 Flask 后端骨架均来自上游作者,版权归其所有。本仓库在其基础上做了修改,详见上游与改动。
This repository is a derivative work of ObservedObserver/async-code (Apache-2.0), not an original project. The parallel agent-execution architecture and the Next.js / Flask skeleton originate upstream and remain the copyright of their author. Modifications made here are listed under Upstream & Changes.
下方两张界面截图同样来自上游项目。/ The two UI screenshots below also come from the upstream project.
- 让多个代理并行修改同一个仓库,然后在 UI 里对比差异
- 将代理输出转换成可审查的 git patch/diff,再创建 PR
- 在隔离容器里执行(便于控制依赖、减少环境污染)
- 多代理并行:Claude Code + Codex CLI(可扩展)
- Codex 风格 UI:任务列表、状态轮询、日志查看
- 变更对比:展示 git diff + 文件级 before/after
- PR 创建:基于保存的 patch 克隆仓库、应用补丁并推送分支,再创建 PR
- 两种存储模式:
- Supabase(多用户、持久化、鉴权)
- 本地 JSON(单机快速体验)
- 前端:Next.js + TypeScript
- 后端:Flask API
- 执行:Docker 容器(每个任务一个隔离环境)
- 准备环境文件
cp server/.env.example server/.env- 启动
docker compose up --build- 打开
- Web UI:
http://localhost:3000 - API:
http://localhost:5000
- 前端通过 Supabase 登录获取
access_token - 前端调用后端 API 时会自动带
Authorization: Bearer <token>
前端需要:
# async-code-web 环境变量(例如通过容器/部署平台注入)
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...后端需要:
# server/.env
SUPABASE_URL=...
SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=...- 不使用 Supabase
- 前端会使用本地用户(
X-User-ID)调用后端 - 任务/项目存储在
server/local_db.json(该文件不应提交到仓库)
可通过以下环境变量禁用 Supabase:
SUPABASE_DISABLED=true
NEXT_PUBLIC_SUPABASE_DISABLED=true- 需要在
server/.env提供ANTHROPIC_API_KEY
- Codex 任务会在独立容器里运行,需要提供 OpenAI Key 等环境变量(在 Web「设置」页里配置)
- 如需让容器读取你本机的
~/.codex(例如auth.json、config.toml),设置:
HOST_CODEX_DIR=/path/to/your/.codex安全提示:Codex 兼容性“特权模式”默认关闭。如确有需要再显式开启:
CODEX_PRIVILEGED=true- Web「设置」页用于配置 GitHub Token(用于 clone/push/创建 PR)
- GitHub Token 仅保存在当前会话(
sessionStorage),不会持久化到localStorage - 本地模式导出的数据不会包含 GitHub Token 或其他凭据字段
async-code/ # 仓库根目录(历史亦称 async-code-main)
async-code-web/ # Next.js 前端
server/ # Flask 后端
db/ # Supabase 初始化 SQL
docker-compose.yml # 一键启动
# Frontend
cd async-code-web
npm ci
npm run dev
# Backend
cd ../server
python3 main.pyQ:必须用 Supabase 吗?
不必。SUPABASE_DISABLED=true + NEXT_PUBLIC_SUPABASE_DISABLED=true 切到本地模式,写 server/local_db.json,用 X-User-ID 头做用户隔离。
Q:GitHub Token 会不会泄漏?
不会持久化。只在 sessionStorage 里;关浏览器就没了;本地模式导出也不包含 token。
Q:能加新代理吗(Aider / Cline / 自研)?
能。agent-runner 抽象是有意做成插件式的,看 server/ 里的代理接入层。
Q:为什么每个任务都开 Docker 容器? 强隔离。坏的代理跑出来的副作用不会污染下次。
Q:同一个任务跑两个代理会冲突吗? 不会。每个跑在独立容器 + 独立 repo clone 里,各自出 patch,你在 UI 里选哪个 PR。
Q:CODEX_PRIVILEGED=true 是什么?要不要开? Codex 兼容性"特权模式"开关,默认关。除非你的代理需要更高权限,否则别开。
见 CONTRIBUTING.md。
- 上游项目 / Upstream:ObservedObserver/async-code
- 上游许可证 / Upstream license:Apache License 2.0
- 本仓库关系 / Relationship:衍生作品(derivative work),在上游代码基础上修改而来
按 Apache-2.0 第 4(b) 条,以下为本仓库相对上游的主要改动(截至 v0.1.0):
| 改动 | 位置 |
|---|---|
新增本地 JSON 存储模式,可完全不依赖 Supabase 运行(SUPABASE_DISABLED=true,以 X-User-ID 头做用户隔离) |
server/database.py、server/auth.py(新增)、server/local_db.sample.json(新增)、async-code-web/lib/local-auth.ts(新增) |
| 修复 PR 流程中 GitHub token 出现在 git remote URL 的问题,改为凭证隔离传递 | server/git_operations.py、server/github_integration.py |
GitHub 仓库地址规范化,支持 SSH 形式(git@github.com:owner/repo)输入 |
server/utils/github.py(新增)、async-code-web/lib/utils.ts |
| 新增分支选择器、任务阶段(task stages)与本地数据库调试工具 | server/tasks.py、server/projects.py、async-code-web/lib/api-service.ts |
| 后端时间戳统一为 timezone-aware,并兼容历史遗留时间格式 | server/utils/、server/tasks.py |
| 统一 API 错误返回结构 | server/main.py、server/utils/http.py(新增) |
| 新增后端 pytest 与前端 vitest 测试 | server/tests/(新增)、async-code-web/lib/api-service.test.ts、vitest.config.ts(新增) |
README 重写为中文并补充部署/FAQ、新增 llms.txt、CHANGELOG.md、CONTRIBUTING.md、SECURITY.md 等仓库文档 |
仓库根目录 |
完整差异可用以下命令查看 / Full diff:
git remote add upstream https://github.com/ObservedObserver/async-code.git
git fetch upstream main
git diff upstream/main HEAD本项目沿用上游的 Apache License 2.0,详见 LICENSE 与 NOTICE。
原始代码版权归 ObservedObserver/async-code 作者所有;本仓库的修改部分版权归 tytsxai 所有,同样以 Apache-2.0 发布。使用、再分发本项目时请保留 LICENSE 与 NOTICE 文件中的署名信息。
Licensed under the Apache License 2.0, inherited from upstream. Original code © the authors of ObservedObserver/async-code; modifications © tytsxai, also released under Apache-2.0. Retain LICENSE and NOTICE when redistributing.

