AutoCodex 是一个“外层 Python 编排器 + 内层 Codex CLI 会话”的多智能体自动开发工具。
它不是通过 Python SDK 直接调用模型,而是由 Python 脚本启动多个 codex exec --json --full-auto 会话,并让一个“调度器”智能体协调四个功能型智能体,按固定流程完成:
- 需求分析与详细设计
- 任务拆分
- 代码开发、审核与测试
当前默认配置已经改成了测试/演示场景:
B00_agent_config.py负责运行参数B04_human_prompts.py负责人工维护的项目输入,包括working_path、产物文件名、各智能体模型配置和 prompt- 默认
working_path指向当前仓库自身,便于直接做演示验证
也就是说,这个仓库本质上是一个“自动化开发编排器”,不是一个开箱即用的通用框架模板。你如果要用于别的项目,第一步不是直接运行,而是先改配置和 prompt。
这个仓库本身不承载业务代码,它只负责“调度”。
真正被分析、被改造、被测试的代码库,是 B04_human_prompts.py 里的 HUMAN_WORKING_PATH 指向的目标项目目录。当前默认值是:
working_path = PROJECT_ROOT因此可以把整个系统分成两层:
- 外层控制层:当前这个
AutoCodex仓库,负责启停工作流、拼接 prompt、维护会话、写日志、做恢复。 - 内层执行层:
working_path指向的目标仓库,Codex 智能体会在那个目录里阅读代码、写设计文档、拆任务、改代码、跑测试。
这也是这个项目最容易误解的点:
- 运行脚本是在
AutoCodex仓库里执行。 - 生成的文档、日志、状态文件默认都写进
working_path指向的目标仓库里。 codex exec --cd <working_path>会让目标仓库自己的AGENTS.md、代码结构、测试工具、虚拟环境成为智能体的真实上下文。- 默认的人工可编辑 prompt 和项目变量已经从
B00_agent_config.py拆到了B04_human_prompts.py。
整个系统分为 3 个主阶段,对应 3 个主脚本:
| 脚本 | 阶段 | 作用 |
|---|---|---|
A01_requiment_analysis_workflow.py |
需求分析与详细设计 | 需求澄清、写详细设计、组织多角色评审 |
A02_task_workflow.py |
任务拆分 | 基于详细设计产出任务单并组织评审 |
A03_coding_agent_workflow.py |
代码开发 | 按任务单逐项开发、审核、测试 |
总入口是:
| 脚本 | 作用 |
|---|---|
A00_main.py |
按顺序依次执行 A01 -> A02 -> A03 |
系统固定使用 5 个智能体角色:
- 调度器
- 需求分析师
- 审核员
- 测试工程师
- 开发工程师
其中:
- 调度器只负责“决定下一步该让谁做什么”,并且要求返回严格 JSON。
- 其他四个是功能型智能体,分别负责分析、评审、测试、开发。
每个功能型智能体都对应一个独立的 Codex 会话线程。
运行过程大致是:
- Python 先初始化多个功能型智能体会话。
- Python 再初始化一个调度器会话。
- 调度器返回一段 JSON,例如:
{"需求分析师": "请先补全详细设计文档"}或者:
{"审核员": "请审核任务单", "测试工程师": "请审核任务单", "开发工程师": "请审核任务单"}- Python 并发调用这些被调度到的智能体。
- Python 收集各智能体回复,拼成新的 prompt 再喂回调度器。
- 循环直到调度器返回:
{"success": "详细设计完成"}或:
{"success": "任务拆分完成"}或:
{"success": "所有任务开发完成"}| 文件 | 作用 |
|---|---|
A00_main.py |
顺序执行三个主阶段 |
A01_requiment_analysis_workflow.py |
需求分析、详细设计、人类澄清闭环 |
A02_task_workflow.py |
任务拆解与多角色评审 |
A03_coding_agent_workflow.py |
开发、审核、测试的迭代闭环 |
B00_agent_config.py |
全局配置中心,最重要的文件 |
B04_human_prompts.py |
人工维护的项目输入配置,默认提供测试/演示变量与 prompt |
B01_codex_utils.py |
封装 codex exec、解析 JSON 事件流、初始化/恢复会话 |
B02_log_tools.py |
彩色打印与日志落盘 |
B03_init_function_agents.py |
初始化功能型智能体、个性化初始化、解析调度器 JSON |
C01_recover_requirement_workflow.py |
恢复 A01 阶段 |
C02_recover_task_workflow.py |
恢复 A02 阶段 |
C03_recover_coding_workflow.py |
恢复 A03 阶段 |
这个仓库没有 requirements.txt、pyproject.toml 或第三方 Python 依赖声明。就当前代码看,Python 层只使用标准库。
真正的运行依赖主要有 4 类:
- 建议 Python 3.10+
- 默认测试 prompt 会建议智能体优先使用
python3
注意:
- 这个约束来自
B04_human_prompts.py中的人工 prompt。 - 如果你的目标项目必须使用虚拟环境解释器,请修改
B04_human_prompts.py,而不是去改工作流逻辑。
本项目的核心依赖是 codex 命令行工具。
脚本内部实际调用的是:
codex exec --model <model> --config model_reasoning_effort=<effort> --json --full-auto --cd <working_path> <prompt>因此你必须满足:
- 本机已安装
codex codex已经能正常执行- 当前用户已经完成 Codex CLI 所需登录或鉴权
可以先手动验证:
codex --versionworking_path 指向的目标仓库必须真实存在,并且是 Codex 可以读写的目录。
当前默认路径是当前仓库根目录:
PROJECT_ROOT
如果你想分析别的项目,必须先改 B04_human_prompts.py 里的 HUMAN_WORKING_PATH。
prompt 中写入了技能标签,例如:
$Product Manager$Scrum Master$System Architect$Business Analyst$Developer
这些标签不是 Python 代码依赖,但它们会影响 Codex 在目标仓库中的行为质量。若你的 Codex 环境没有这些技能,可以:
- 保留标签,观察 Codex 是否能兼容处理。
- 替换成你环境里已有的技能名。
- 直接删除这些技能前缀。
现在配置被拆成两层:
B00_agent_config.py- 放运行逻辑、模型配置、会话重试参数、prompt 拼装逻辑
B04_human_prompts.py- 放人工需要按项目背景改写的项目变量、各智能体模型配置和 prompt
如果你只想改“工作目录、产物文件名、项目背景、代码理解范围、原始需求”,优先改 B04_human_prompts.py。
| 配置项 | 当前含义 | 是否通常需要修改 |
|---|---|---|
HUMAN_WORKING_PATH |
B04_human_prompts.py 中的目标项目目录,也是文档/日志/状态文件落盘目录 |
是 |
HUMAN_DESIGN_MD |
B04_human_prompts.py 中的详细设计文档名 |
是 |
HUMAN_TASK_MD |
B04_human_prompts.py 中的任务拆分文档名 |
是 |
HUMAN_TEST_PLAN_MD |
B04_human_prompts.py 中的测试计划文档名 |
是 |
HUMAN_AGENT_MODEL_EFFORT_CONFIG |
B04_human_prompts.py 中每个智能体的模型和推理强度 |
是 |
HUMAN_COMMON_INIT_PROMPT_1 |
B04_human_prompts.py 中的通用人工约束 |
是 |
HUMAN_COMMON_INIT_PROMPT_2 |
B04_human_prompts.py 中的代码理解范围说明 |
是 |
HUMAN_REQUIREMENT_PROMPT |
B04_human_prompts.py 中的原始需求 prompt |
是 |
HUMAN_AGENT_MODEL_EFFORT_CONFIG 必须覆盖运行时会用到的全部智能体名称。当前默认需要至少包含:调度器、需求分析师、审核员、测试工程师、开发工程师。如果缺项,运行时会在 prepare_agent_prompt() 中直接报错并停止。
| 配置项 | 作用 |
|---|---|
REQUIREMENT_CLARIFICATION_MD |
需求澄清记录文档名 |
working_timeout |
单次 codex exec 超时时间 |
resume_retry_max |
初始化/恢复失败后的最大重试次数 |
resume_retry_interval |
重试间隔秒数 |
当前默认配置已经切成“运行参数”和“人工 prompt”两块,所以你要迁移到新项目时,推荐至少改成下面这种形态:
# B04_human_prompts.py
HUMAN_WORKING_PATH = "/absolute/path/to/your-project"
HUMAN_DESIGN_MD = "详细设计.md"
HUMAN_TASK_MD = "任务拆分.md"
HUMAN_TEST_PLAN_MD = "测试计划.md"
HUMAN_AGENT_MODEL_EFFORT_CONFIG = {
"调度器": {"model_name": "gpt-5.2", "reasoning_effort": "medium"},
"开发工程师": {"model_name": "gpt-5.3-codex", "reasoning_effort": "xhigh"},
}# B04_human_prompts.py
HUMAN_COMMON_INIT_PROMPT_1 = """记住:
1) 使用中文进行对话和文档编写;
2) 使用 "/absolute/path/to/venv/bin/python" 命令来执行 Python 代码
"""
HUMAN_COMMON_INIT_PROMPT_2 = """了解当前项目架构, 主要是:
1) 从主入口文件理解系统全链路
2) 从核心流程与测试入口理解关键执行路径
"""
HUMAN_REQUIREMENT_PROMPT = """
这里改成你的真实需求说明。
"""推荐顺序如下:
- 打开
B00_agent_config.py - 只检查模型、超时、重试参数是否符合预期
- 打开
B04_human_prompts.py - 修改
HUMAN_WORKING_PATH - 修改
HUMAN_DESIGN_MD/HUMAN_TASK_MD/HUMAN_TEST_PLAN_MD - 修改
HUMAN_AGENT_MODEL_EFFORT_CONFIG - 修改
HUMAN_COMMON_INIT_PROMPT_1 - 修改
HUMAN_COMMON_INIT_PROMPT_2 - 修改
HUMAN_REQUIREMENT_PROMPT - 确认目标仓库可读写
- 确认
codex --version能执行
建议再做一次快速检查:
python3 -m py_compile *.py第一次使用时,建议不要直接跑 A00_main.py,而是分阶段执行,更容易观察中间产物。
python3 A01_requiment_analysis_workflow.py这一阶段会:
- 初始化四个功能型智能体会话
- 先让需求分析师进入“需求理解与需求澄清”
- 如果需求分析师需要人类补充信息,会通过
[[ASK_HUMAN]]触发人工输入 - 产出详细设计文档
- 让审核员、测试工程师、开发工程师循环评审,直到通过
python3 A02_task_workflow.py这一阶段会:
- 读取上一步的详细设计文档
- 让需求分析师生成任务单
- 让多个角色循环评审任务单,直到通过
python3 A03_coding_agent_workflow.py这一阶段会:
- 先让测试工程师根据设计文档和任务单写测试计划
- 调度器从
task_md中找下一个任务 - 让开发工程师逐项开发
- 开发完成后让需求分析师、审核员、测试工程师并发审核
- 如有问题,回到开发工程师修复
- 直到任务全部完成
python3 A00_main.py它会顺序执行:
A01_requiment_analysis_workflow.pyA02_task_workflow.pyA03_coding_agent_workflow.py
注意:
- 这不是“带事务控制”的总控脚本。
- 它只是顺序调用三个
main()。 - 如果 A01 的产物不符合预期,A02/A03 仍然可能继续执行。
- 因此第一次接入新项目时,更推荐按阶段单独运行。
只有 A01_requiment_analysis_workflow.py 内的“需求分析师”允许向人类提问。
规则是:
- 提问必须带触发词:
[[ASK_HUMAN]] - 一次只问一个关键问题
- Python 外层会在终端里打印问题并阻塞等待你的输入
- 你的回答会被写入
需求澄清记录.md - 随后系统会继续推进需求分析流程
如果其他智能体错误地使用了 [[ASK_HUMAN]],系统会把它视为违规回复,并要求调度器改成由需求分析师处理。
所有产物默认都写入 working_path 指向的目标仓库,而不是当前 AutoCodex 仓库。
| 文件 | 说明 |
|---|---|
<working_path>/<design_md> |
详细设计文档 |
<working_path>/<task_md> |
任务拆分文档 |
<working_path>/<test_plan_md> |
测试计划 |
<working_path>/<REQUIREMENT_CLARIFICATION_MD> |
人类问答澄清记录 |
当前默认文件名分别是:
示例详细设计.md示例任务拆分.md示例测试计划.md需求澄清记录.md
每个智能体每天一个日志文件,命名规则:
agent_<智能体名称>_<YYYYMMDD>.log
例如:
agent_调度器_20260311.logagent_需求分析师_20260311.logagent_审核员_20260311.logagent_测试工程师_20260311.logagent_开发工程师_20260311.log
这些日志非常重要,因为恢复脚本要靠它们反推出:
- session_id
- 最近一次调度器 JSON 输出
- 某个 agent 的 prompt 和 response 是否已经执行过
状态文件只在恢复脚本执行时使用和写入。
| 文件 | 对应阶段 |
|---|---|
requirement_workflow_state.json |
A01 恢复状态 |
task_workflow_state.json |
A02 恢复状态 |
workflow_state.json |
A03 恢复状态 |
恢复逻辑的核心思想是:
- 优先读取状态文件
- 如果没有状态文件,就从日志反推当前阶段
- 补齐各个 agent 的 session_id
- 从未完成的 agent 或调度器轮次继续跑
先看状态但不执行:
python3 C01_recover_requirement_workflow.py --dry-run正式恢复:
python3 C01_recover_requirement_workflow.py常用参数:
python3 C01_recover_requirement_workflow.py \
--max-log-days 7 \
--allow-reinit-on-missing-session可用参数包括:
--state-path--log-dir--max-log-days--no-prefer-checkpoint--strict-json--allow-reinit-on-missing-session--dry-run
先 dry run:
python3 C02_recover_task_workflow.py --dry-run正式恢复:
python3 C02_recover_task_workflow.py可用参数与 A01 基本一致:
--state-path--log-dir--max-log-days--no-prefer-checkpoint--strict-json--allow-reinit-on-missing-session--dry-run
这个脚本的 CLI 能力和前两个不对称。
直接从命令行可用的只有:
python3 C03_recover_coding_workflow.py --dry-run
python3 C03_recover_coding_workflow.py原因是它没有用 argparse 暴露完整参数,而是在 __main__ 中只判断了是否包含 --dry-run。
如果你要给 A03 恢复流程传自定义参数,建议这样调用:
python3 - <<'PY'
from C03_recover_coding_workflow import recover_workflow
result = recover_workflow(
log_dir="/absolute/path/to/your-project",
max_log_days=7,
strict_json=True,
allow_reinit_on_missing_session=False,
dry_run=True,
)
print(result)
PY- 恢复强依赖日志格式,不要手工破坏日志内容。
--allow-reinit-on-missing-session会在 session 丢失时新建会话,但这意味着该 agent 的上下文记忆会被重建。- A01 恢复脚本额外处理了“需求分析师向人类提问”的闭环。
- A02/A03 没有 A01 那种终端问答闭环。
这个项目不是把所有 agent 行为写成类,而是大量通过 prompt 驱动。
每个 agent 初始化时会做两步:
- 通用初始化 1:使用中文;指定 Python 解释器路径
- 通用初始化 2:告诉 agent 目标项目代码应该从哪些入口理解
不同阶段会给 agent 注入不同角色 prompt,例如:
- A01 需求分析师负责详细设计
- A02 需求分析师负责任务拆分
- A03 测试工程师先生成测试计划
- A03 开发工程师按任务单逐项开发
每个阶段还会通过 agent_skills_dict 给 agent 的 prompt 前面拼接技能标签。
例如:
- A01 / A03 中需求分析师使用
$Product Manager - A02 中需求分析师使用
$Scrum Master - 审核员通常使用
$System Architect - 测试工程师通常使用
$Business Analyst - 开发工程师通常使用
$Developer
如果你迁移到别的 Codex 环境,这部分可以按你自己的技能体系替换。
如果你想把它迁移到自己的项目,推荐按下面步骤做:
- 先改
B04_human_prompts.py里的HUMAN_WORKING_PATH - 再改
HUMAN_DESIGN_MD/HUMAN_TASK_MD/HUMAN_TEST_PLAN_MD - 再改三段人工 prompt
- 把代码理解范围改成你的目标仓库入口说明
- 把原始需求改成你的真实需求
- 先单独跑 A01,确认能稳定产出详细设计
- 再跑 A02,确认任务单结构符合你的开发节奏
- 最后再跑 A03,让开发闭环落地
- 等流程稳定后,再考虑用
A00_main.py一键串起来
因为默认所有产物都写到 working_path,不是写到 AutoCodex 当前目录。
因为 codex exec 使用了 --cd <working_path>。对内层 Codex 来说,目标仓库才是当前工作目录。
通常是你在 B04_human_prompts.py 里没有把 HUMAN_COMMON_INIT_PROMPT_1 改成目标项目真正需要的解释器约束。
因为调度器输出必须是合法 JSON。若日志里的调度器输出被污染,恢复脚本可能无法重建状态。
适合:
- 中大型改造任务
- 需要先做设计、再拆任务、再分阶段开发的任务
- 需要中断恢复能力的长流程任务
不太适合:
- 一两个文件的小改动
- 不需要评审与测试闭环的简单脚本任务
假设你已经改好了 B00_agent_config.py,最小启动顺序如下:
cd /Users/chenjunming/Desktop/KevinGit/AutoCodex
python3 A01_requiment_analysis_workflow.py
python3 A02_task_workflow.py
python3 A03_coding_agent_workflow.py如果你确认流程已经稳定,也可以改成:
cd /Users/chenjunming/Desktop/KevinGit/AutoCodex
python3 A00_main.py- 这个仓库当前没有 Python 三方依赖清单
- 当前默认目标项目是当前仓库自身,用于测试/演示
- 当前默认需求是“拆分人工 prompt 与运行参数”的测试场景
- 当前恢复能力最完整的是 A01 和 A02
- A03 恢复脚本可用,但 CLI 参数暴露较少
如果你把上面这些都理解清楚,再去改配置和运行,基本就不会把它当成“普通脚手架”误用了。