目标:把现有方案从“概念完整”推进到“可稳定上线、可持续演进”。 方法:保留两层架构(Brain/Hands),先补可靠性与安全红线,再扩展分布式与自动发现。
当前方案方向正确,核心设计(两层分工 + 事件驱动 AI 决策点)成立,具备很高的工程价值。
但要进入长期生产运行,必须先补三条硬约束:
- 控制面容灾(避免 Dispatcher 单点)
- 执行链路幂等 + 租约(避免重复执行与僵尸任务)
- 安全边界与审计(避免高权限 agent 失控)
P0必须先做:容灾、租约、审计、最小权限、任务幂等P1第二阶段:跨机调度、AI 评审分级、自动恢复策略P2第三阶段:自动发现、语义去重、策略学习闭环
- 支持多任务并行,自动从任务到 PR
- 让 Brain 只做“理解与决策”,让 Agent 只做“实现与修复”
- 任务全生命周期可追踪、可回放、可恢复
- 面向多机器扩展,但先保证单机稳定
- 不做 Kubernetes 化
- 不做复杂向量检索系统(先用关键词 + 结构化历史)
- 不做全自动无人工门控合并(保留 Wayne 最终裁决)
Brain Thinks, Hands Code:上下文严格分层AI at Decision Points:AI 只在决策节点被调用Deterministic Control Plane:状态机与调度必须可预测Idempotent by Default:所有入口和执行命令都可重复安全执行Security Before Autonomy:自动化优先级低于安全边界
输入:
- 任务描述
- 业务上下文(客户、会议、历史决策)
- 仓库高层说明(CLAUDE.md)
- 历史 prompt 成败样本
输出:
refined_intentexecution_promptrouting_plan(agent/model/priority)risk_level(low/medium/high)
输入:
- Brain 生成的精确 prompt
- 仓库上下文与相关文件
- 执行约束(测试、提交规范、PR 规范)
输出:
- 代码变更
- 测试结果
- PR 与元信息
关键边界:
- Agent 不直接读取业务私密上下文
- Brain 不直接做代码编辑
Ingress (Telegram/CLI/Cron/Webhook)
-> Dispatcher API
-> Task Store (SQLite)
-> Brain Engine (short LLM calls)
-> Scheduler (routing + lease)
-> Worker RPC (gRPC over Tailscale)
-> Lifecycle Manager
-> Notification Hub
Workers (Mini/Pro/EC2)
-> Worktree Manager
-> Agent Runtime (tmux + executor)
-> Progress Reporter
控制面与数据面分离:
- 控制面:Dispatcher + DB + 生命周期
- 数据面:Worker 执行实例
新增 dispatcher_lease:
- 任意时刻只允许一个 active dispatcher
- lease TTL(如 15s)+ 心跳续约
- standby 节点可抢占过期 lease
新增 startup_recovery:
- 启动时扫描
running/assigned任务 - 与 worker 对账(session 存在/不存在)
- 自动转为
retry_pending或failed_recoverable
入口统一计算 idempotency_key:
- Telegram:
chat_id + message_id + repo - Webhook:
event_id - Cron:
source + fingerprint + window
数据库强约束:
UNIQUE(idempotency_key)- 重复请求直接返回已有任务 ID
新增 task_leases:
- dispatcher 分配任务时写 lease
- worker 必须定期续约
- lease 过期后任务可回收重派
避免:
- worker 崩溃导致任务永久卡死
- 网络抖动导致双重执行
- Worker 按 repo 配置权限 profile:
read-only/dev-write/dangerous - 默认禁用危险模式;仅对 allowlist 仓库开启
- 所有外部命令记录
command_audit(who/when/task/command/exit_code) - 日志脱敏(token, key, cookie)
不再只依赖 tmux 文本匹配,改为多信号:
- 进程退出码
- git 工作区状态
- PR API 回执
- CI API 状态
状态机只接受“可信事件”驱动迁移。
按 risk_level 触发 reviewer:
low: 1 reviewer(codex 或 claude)medium: 2 reviewershigh: 2 reviewers + 必须人工确认
目的:降低时延和成本,不牺牲高风险任务质量。
CREATE TABLE tasks (
id TEXT PRIMARY KEY,
idempotency_key TEXT NOT NULL UNIQUE,
source TEXT NOT NULL,
repo TEXT NOT NULL,
description TEXT NOT NULL,
refined_intent TEXT,
prompt TEXT,
priority INTEGER DEFAULT 0,
risk_level TEXT DEFAULT 'medium',
status TEXT NOT NULL DEFAULT 'queued',
retry_count INTEGER DEFAULT 0,
max_retries INTEGER DEFAULT 3,
assigned_worker TEXT,
worktree_path TEXT,
branch TEXT,
pr_number INTEGER,
pr_url TEXT,
ci_status TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE task_attempts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT NOT NULL,
attempt_no INTEGER NOT NULL,
agent_type TEXT NOT NULL,
model TEXT NOT NULL,
prompt TEXT NOT NULL,
started_at DATETIME,
ended_at DATETIME,
outcome TEXT,
error_summary TEXT,
FOREIGN KEY(task_id) REFERENCES tasks(id)
);
CREATE TABLE task_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT NOT NULL,
event_type TEXT NOT NULL,
payload_json TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(task_id) REFERENCES tasks(id)
);
CREATE TABLE task_leases (
task_id TEXT PRIMARY KEY,
worker_id TEXT NOT NULL,
lease_expires_at DATETIME NOT NULL,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(task_id) REFERENCES tasks(id)
);
CREATE TABLE brain_calls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT,
call_type TEXT NOT NULL,
model_used TEXT NOT NULL,
tokens_in INTEGER,
tokens_out INTEGER,
latency_ms INTEGER,
input_digest TEXT,
output_json TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE command_audit (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT,
worker_id TEXT,
command TEXT NOT NULL,
exit_code INTEGER,
started_at DATETIME,
ended_at DATETIME
);queued
-> brain_intake
-> ready_to_schedule
-> leased
-> running
-> pr_opened
-> ci_running
-> review_running
-> ready_for_human
-> done
失败/恢复分支:
running -> retry_pending -> brain_retry -> ready_to_schedule
running -> failed_recoverable
running -> failed_terminal
终态必须显式:
donefailed_terminalcancelled
状态迁移原则:
- 仅生命周期管理器可写状态
- 其他模块只能发事件
保留 5 个决策点,但增加“可验证输出”:
intake: 任务澄清 + 风险分级 + 初始执行计划retry_analysis: 失败归因(代码/提示/环境)+ 新策略discovery: 信号转任务 + 去噪 + 去重建议review_triage: 评论分级 + 是否自动修复daily_debrief: 模式总结(仅建议,不自动改系统提示词)
所有输出必须 JSON Schema 校验:
- 校验失败最多重试 1 次
- 继续失败走确定性 fallback
service WorkerService {
rpc SpawnAgent(SpawnRequest) returns (SpawnResponse);
rpc CheckAgent(CheckRequest) returns (AgentStatus);
rpc KillAgent(KillRequest) returns (KillResponse);
rpc SendInput(SendInputRequest) returns (SendInputResponse);
rpc RenewLease(RenewLeaseRequest) returns (RenewLeaseResponse);
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
}- 预检仓库与分支基线
- 创建 worktree
- 生成 attempt 记录
- 启动 agent runtime
- 成功后写入 lease + 状态迁移
任一步失败都必须回滚并写事件。
仅推送“需要人动作”的事件:
PR ready for human reviewtask failed terminaltask stuck and needs interventiondaily summary
额外要求:
- 每条告警带
task_id、attempt_no、recommended action - 支持一键操作:
retry/kill/open_pr
configs/repos.yaml
- repo 路径
- install/test 命令
- 安全 profile
- review policy
configs/workers.yaml
- worker 地址
- capability
- max concurrency
- drain 模式(维护时不接新任务)
configs/brain.yaml
- 主模型/回退模型
- token 预算
- schema 校验策略
- fallback 策略
- Task Store + Event Log + Idempotency
- Brain Intake + Retry(最小可用)
- 单机 Worker 执行闭环
- Lease + Recovery + Audit
退出标准:
- 单机连续运行 7 天,无僵尸任务
- 重复提交不产生重复执行
- 任意进程重启后 2 分钟内恢复调度
- gRPC 跨机 worker
- 分级评审策略
- 多信号完成判定
- Telegram 全量命令
退出标准:
- 3 台机器稳定分发
- 中断恢复成功率 > 99%
- Sentry/GitHub/Cron ingress
- 语义去重
- 日报与策略建议闭环
退出标准:
- 自动发现任务误报率可控(< 20%)
task_success_rate(24h)median_time_to_prstuck_task_countretry_ratebrain_schema_error_ratehuman_intervention_ratecost_per_merged_pr
阈值建议:
- schema 错误率 < 1%
- stuck 任务 < 2%
- 人工干预率随版本逐步下降
- Token 只存系统密钥管理,不落库明文
- 审计日志保留 90 天
- Telegram 命令强制 allowlist
- 高风险命令二次确认(例如
kill+merge)
- Dispatcher standby 节点部署在 Pro 还是 EC2?
- 高风险任务是否必须人工批准 Brain prompt?
- 是否引入“多仓任务编排”还是继续单仓任务模型?
- 是否保留 ai-collab 模式作为
high-risk执行策略?
先把 Ultraswarm 做成“稳定调度系统”,再做“全自动发现与优化系统”。
顺序不要反:
- 先把 P0 做硬
- 再把 P1 做快
- 最后把 P2 做聪明
这是从可演示到可运营的最短路径。