Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Async Code Agent · 自托管 AI 代码代理并行执行平台

Release · 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

📌 上游项目署名 / Attribution

本仓库是 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.

async-code-ui

async-code-review

你会用它做什么

  • 让多个代理并行修改同一个仓库,然后在 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 容器(每个任务一个隔离环境)

快速开始(推荐:Docker)

  1. 准备环境文件
cp server/.env.example server/.env
  1. 启动
docker compose up --build
  1. 打开
  • Web UI:http://localhost:3000
  • API:http://localhost:5000

运行模式与鉴权

Supabase 模式(推荐)

  • 前端通过 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

Codex / Claude 的执行配置

Claude Code

  • 需要在 server/.env 提供 ANTHROPIC_API_KEY

Codex CLI

  • Codex 任务会在独立容器里运行,需要提供 OpenAI Key 等环境变量(在 Web「设置」页里配置)
  • 如需让容器读取你本机的 ~/.codex(例如 auth.jsonconfig.toml),设置:
HOST_CODEX_DIR=/path/to/your/.codex

安全提示:Codex 兼容性“特权模式”默认关闭。如确有需要再显式开启:

CODEX_PRIVILEGED=true

GitHub Token

  • 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        # 一键启动

开发(不使用 Docker)

# Frontend
cd async-code-web
npm ci
npm run dev

# Backend
cd ../server
python3 main.py

❓ FAQ

Q:必须用 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 & Changes

  • 上游项目 / 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.pyserver/auth.py(新增)、server/local_db.sample.json(新增)、async-code-web/lib/local-auth.ts(新增)
修复 PR 流程中 GitHub token 出现在 git remote URL 的问题,改为凭证隔离传递 server/git_operations.pyserver/github_integration.py
GitHub 仓库地址规范化,支持 SSH 形式(git@github.com:owner/repo)输入 server/utils/github.py(新增)、async-code-web/lib/utils.ts
新增分支选择器、任务阶段(task stages)与本地数据库调试工具 server/tasks.pyserver/projects.pyasync-code-web/lib/api-service.ts
后端时间戳统一为 timezone-aware,并兼容历史遗留时间格式 server/utils/server/tasks.py
统一 API 错误返回结构 server/main.pyserver/utils/http.py(新增)
新增后端 pytest 与前端 vitest 测试 server/tests/(新增)、async-code-web/lib/api-service.test.tsvitest.config.ts(新增)
README 重写为中文并补充部署/FAQ、新增 llms.txtCHANGELOG.mdCONTRIBUTING.mdSECURITY.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,详见 LICENSENOTICE

原始代码版权归 ObservedObserver/async-code 作者所有;本仓库的修改部分版权归 tytsxai 所有,同样以 Apache-2.0 发布。使用、再分发本项目时请保留 LICENSENOTICE 文件中的署名信息。

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.

Star History

Star History Chart

About

Self-hosted parallel AI coding agents (Claude Code + Codex CLI): compare runs and open PRs. 自托管并行 AI 编码代理平台。

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages