Lazy loaded image
Symphony + Codex:手机上创建任务,AI 自动编码并提交 PR
字数 1971阅读时长 5 分钟
2026-3-16
2026-3-16
type
Post
status
Published
date
Mar 16, 2026
slug
symphony-codex-auto-coding
summary
基于 OpenAI Symphony 编排框架和 Codex Agent,实现从任务创建到代码部署的全自动开发流程。在手机上创建一个任务,AI 自动完成编码、提交 PR,你只需审核合并——全程无需打开电脑。
tags
Agent
工具
category
AIGC
icon
password
Language
💡
在手机上的 Linear App 创建一个任务,AI 编码代理自动完成开发并提交 PR,你在手机上审核通过即可合并——全程无需打开电脑。
Symphony 是 OpenAI 开源的编排框架,能将项目管理中的 issue 自动分配给 AI 编码代理(Codex)执行,实现 issue → 编码 → PR → 合并 的全自动开发流程。本文记录了在本地开发机上部署 Symphony,监听 Linear 项目任务,配合 OpenAI Codex Agent 实现端到端自动化编码的完整实践。

整体架构

整个系统由四个核心组件组成:
  • Linear(任务管理) —— 创建和追踪开发任务,状态自动流转
  • Symphony(编排服务) —— 每 5 秒轮询 Linear,检测新任务并启动 Agent
  • Codex(AI Agent) —— 自主完成编码、测试、提交、推送、创建 PR
  • GitHub + CI/CD —— 代码托管、自动检查、合并后自动部署

工作流程详解

第一步:创建任务

在 Linear 的指定项目中创建一个 issue,状态设为 Todo。比如标题「在 README 中添加项目简介」,描述清楚需求即可。issue 描述越清晰,Agent 执行效果越好。

第二步:Symphony 自动拾取

Symphony 服务每 5 秒轮询一次 Linear,检测到 Todo 状态的 issue 后,会自动创建隔离工作区,克隆目标仓库的指定分支,然后启动 Codex Agent 开始执行。每个任务都有独立的工作目录,互不干扰。

第三步:Codex Agent 自主开发

Agent 拿到任务后会自主完成以下全部流程:
  1. 将 issue 状态从 Todo 流转为 In Progress
  1. 在 issue 评论中创建 Codex Workpad(进度追踪面板)
  1. 制定执行计划,列出 checklist
  1. 从目标分支创建功能分支,编写代码并运行验证
  1. 提交 commit、push 到 GitHub,创建 Pull Request
  1. 将 issue 状态移至 Human Review,等待人工审核
整个过程完全自主,无需人工干预。

第四步:CI 自动检查

PR 创建后,GitHub Actions 自动运行 CI 流水线,包括代码检查、单元测试、构建验证等。CI 结果直接显示在 PR 页面上。如果 CI 失败,可以将 issue 移至 Rework 状态让 Agent 自动修复。

第五步:人工审核(手机即可完成)

收到通知后,在手机上打开 GitHub PR 页面,查看代码变更和 CI 状态。确认代码和 CI 均通过后点击 Merge 即可。也可以在 Linear 中查看 Codex Workpad 了解 Agent 的执行详情。

第六步:自动部署

PR 合并后,部署平台自动检测到分支变更,等待 CI 结束后自动触发部署。服务自动更新到最新版本,无需手动操作,issue 状态自动移至 Done。
🎯
从创建任务到代码部署上线,人工只需要两个动作:创建 issue点击 Merge

状态流转

Todo → In Progress → Human Review → Merging → Done
其中 Human Review 阶段如果审核不通过,可以将状态移至 Rework,Agent 会自动重新开始开发流程。
状态
含义
谁操作
Todo
等待 Agent 拾取
人工创建
In Progress
Agent 正在开发
Agent 自动
Human Review
PR 已提交,等待审核
Agent 自动流转
Merging
审核通过,执行合并
人工触发
Rework
审核不通过,需要返工
人工触发
Done
完成
自动/人工

实际部署配置

环境要求

  • macOS(已在 Darwin 25.3.0 上验证)
  • mise 版本管理器
  • Erlang 28 + Elixir 1.19.5(通过 mise 安装)
  • Linear 账号 + Personal API Key
  • GitHub 仓库访问权限

安装步骤

WORKFLOW.md 核心配置

Symphony 的核心配置文件是 WORKFLOW.md,包含 YAML 配置和 Markdown Prompt 两部分。以下是一个示例配置:

关键配置说明

配置项
说明
project_slug
Linear 项目 URL 最后一段,决定监听哪个项目
hooks.after_create
工作区创建后执行的脚本,用于 clone 目标仓库
approval_policy: never
Agent 全自动执行,不需要人工审批每个操作
thread_sandbox
设为 danger-full-access 允许 Agent 完全访问文件系统(含 .git)
max_concurrent_agents
并发数限制,防止资源耗尽

启动服务

启动后可以通过两种方式监控:
  • 终端面板:实时显示 Agent 数量、token 消耗和运行时间
  • Web Dashboard:访问 http://127.0.0.1:4000/ 查看详细状态

Prompt 模板

WORKFLOW.md 中 YAML 配置之后的 Markdown 内容是每个 Agent 启动时收到的系统指令,定义了:
  • 状态路由 —— 根据 issue 当前状态执行对应流程
  • Workpad 机制 —— 在 issue 评论中维护进度追踪面板
  • 分支策略 —— 从目标分支创建功能分支,PR 目标也指向目标分支
  • 执行流程 —— 规划 → 复现 → 实现 → 验证 → 提 PR
  • 返工流程 —— 收到修改请求后关闭旧 PR,重新开始
  • 防护规则 —— 只在工作区内操作、不改 issue body、遇阻记录原因

踩坑记录

1. sandbox 权限导致 git 操作失败

问题:workspace-write 沙箱模式不允许写 .git 目录,导致 Agent 无法 commit/push/创建 PR。
解决:thread_sandbox 改为 danger-full-accessturn_sandbox_policy.type 改为 dangerFullAccess。注意两个字段格式不同:前者用 kebab-case,后者用 camelCase。

2. 监听到了别人的任务

问题:Symphony 监听整个项目下所有 active 状态的 issue,不区分负责人。
解决:创建一个独立的 Linear 项目专门用于自动编码,与团队日常项目隔离。

3. PR 目标分支问题

问题:默认 clone 的是 main 分支,PR 也会提到 main。
解决:在 after_create hook 中指定 --branch 参数,并在 Prompt 中添加分支策略说明,要求 Agent 使用 gh pr create --base <target-branch>

4. LINEAR_API_KEY 未设置

问题:启动后 Symphony 无法拉取 issue,但不会报明显错误。
解决:在启动 Symphony 的终端中先 export LINEAR_API_KEY=lin_api_xxx

亮点与价值

  1. 手机即可驱动开发 —— 在地铁上创建任务,到公司时 PR 已经准备好了
  1. 完全隔离 —— 每个任务独立工作区,互不干扰,不影响本地开发环境
  1. 全程可观测 —— Linear Workpad 实时记录 Agent 执行计划和进度
  1. 自动重试 —— 失败自动指数退避重试,无需人工干预
  1. 可并发 —— 最多 10 个 Agent 同时工作,批量处理任务
  1. 质量把关 —— Agent 自行验证后才提 PR,人工只需最终审核

后续优化方向

  • 支持多仓库(通过 issue label 区分目标仓库)
  • 接入 CI/CD 检查结果,Agent 根据 CI 失败自动修复
  • 探索更细粒度的沙箱策略,在安全性和功能性之间取得平衡
上一篇
Payload CMS使用定时任务和电子邮件
下一篇
Cluade Code 使用指南

评论
Loading...