伯索云学堂
224.22MB · 2026-02-15
这句预测正加速成为现实。随着大模型能力的跃升,“氛围编程(Vibe-Driven Development)”或“意图驱动编程”不再是遥远的概念。我们越来越多地将模糊的想法(Vibe)交给 AI Agent,让它在命令行(CLI)中长时间运行,自主探索、实现、迭代。一个人同时“监工”多个并行的 AI Agent,已是许多开发者的日常。
但这种新的工作流也带来了新的“甜蜜烦恼”。
当我们习惯了把一个个长程任务(Long-running Task)——比如“帮我重构这个旧模块并补全测试”或“调研下 X 技术的最新进展并写个报告”——抛给 Claude Code、Aider、Cursor 或自定义的 GPT 脚本后,很快会发现自己的工作台陷入了一种新的混乱:
我们需要一个“工头”,一个统一的管理面板,它能轻量、无侵入地接入我们现有的 CLI Agent 工作流,将这些并行的、长程的任务状态汇聚一处,并在关键节点主动提醒我们。
这,就是 CLI-Agent-Manager(我们称之为 AgentBoard)诞生的初衷。
AgentBoard 的核心定位非常明确:一个轻量级、旁路聚合、面向多 Agent 协作的桌面端仪表盘与提醒中心。
它的设计哲学是“集中,但非侵入”。
claude-code、aider 等工具的任何习惯。AgentBoard 通过在 CLI 工具的关键生命周期节点(如任务开始、结束、用户输入、请求权限)旁路(Sidecar) 挂载一个轻量级的 Hook 脚本,将事件上报给本地运行的 AgentBoard 服务。你的终端依然是你的主战场,AgentBoard 则像一个尽职的助理,默默记录和呈现。它不是要取代你心爱的 CLI 工具,而是要成为它们的“僚机”,让“氛围编程”变得更从容、更高效。
为了实现“非侵入”的设计目标,AgentBoard 的架构选择了一条优雅而高效的路径:事件驱动、旁路聚合。整个系统分为终端、Hook 层、AgentBoard 应用(主进程与渲染进程)三大块,数据流清晰而解耦。
上图是由 Mermaid 生成的架构图,它清晰地展示了从用户在终端与 CLI Agent 交互,到事件通过 Hook 上报,最终在 AgentBoard UI 中呈现的完整数据流。
终端(保持原样) :开发者像往常一样在终端中与 claude-code 等 CLI Agent 交互。无论是启动一个新项目,还是在现有项目中继续对话,一切操作都保持不变。
Hook 层(最小接入点) :这是 AgentBoard 实现魔法的关键。
agent-board-hook.sh 脚本。agent-board-report.sh 脚本。SessionStart, UserPromptSubmit)和上下文信息(如 Session ID, 当前工作目录, CLI 类型)打包成一个 JSON HookPayload,通过 HTTP POST 请求发送给本地的 AgentBoard 服务。AgentBoard 主进程(后台中枢) :这是一个常驻后台的 Electron 主进程,负责处理所有核心逻辑。
27420 端口,是所有 Hook 上报的唯一入口。PendingApproval),它会调用系统通知,确保你不会错过关键信息。AgentBoard 渲染进程(可视化前端) :你所看到的仪表盘界面,由 React 和 Tailwind 构建。
SessionCard)呈现在 SessionGrid 中。这种架构的最大优势在于解耦。CLI Agent 本身完全不知道 AgentBoard 的存在,它只是在执行自己的逻辑。Hook 的引入如同一位旁观的“shu记员”,只记录不干预,确保了 AgentBoard 的接入成本极低,且不会对现有工作流产生任何副作用。
为了精确追踪每个并行任务的进展,AgentBoard 为每个会话(Session)都内置了一个健壮的状态机。这个状态机定义了从一个任务诞生到最终归档的完整生命周期。
上图是会话生命周期的状态机图。它详细描述了
Idle、PendingApproval、Running、Completed、Closed、Error 等核心状态,以及触发它们之间转换的关键事件。
我们来解读一下几个核心状态和转换逻辑:
UserPromptSubmit)时,它会立刻“苏醒”,切换到 Running 状态。PermissionRequest 事件。此时,会话状态切换为 PendingApproval,AgentBoard 会立刻弹出系统通知,提醒你进行决策。你不再需要时刻紧盯终端,等待那稍纵即逝的 [y/N] 提示。/done 命令),会话会进入此状态。这标志着一个工作单元的成功闭环。Closed,如果后续同一个 Session ID 又上报了新事件,它会自动“复活”,回到 Running 状态,确保了对话历史的连续性。这个精巧的状态机,结合心跳检测机制(自动识别并“冷却”僵尸会话)与智能会话管理(在同一项目下开启新任务时,自动关闭旧的活跃任务),构成了 AgentBoard 可靠、智能的追踪能力。
理论说了很多,让我们通过几张 UI 截图,直观感受 AgentBoard 如何将复杂的状态管理变得简单优雅。
这是 AgentBoard 的 Config 页面。左侧是主导航,中间是所有可识别的 CLI 工具列表,清晰地标注了“已接入”或“未接入”。右侧则展示了当前选中工具(这里是 Claude Code)的详细信息,包括:
这是你每天打交道最多的地方——Sessions 仪表盘。
全局统计:顶部是你所有会话的概览,例如“全部 17,活跃 1,已完成 16”,让你对当前的工作负载有一个宏观认知。
状态卡片:每个卡片都代表一个独立的会话。你可以清晰地看到:
agent-board),由哪个 CLI (claude-code) 驱动,以及它的唯一 Session ID。这张“卡片墙”就像一个作战指挥室的态势图,所有 Agent 的动态尽在掌握。
当一个任务进入 PendingApproval 状态时,你会在系统通知中心看到类似这样的提醒。点击它可以唤出这个上下文菜单,提供快捷操作:
[需审批] Claude-code:明确告诉你哪个任务需要你。打开主面板:一键跳转到 AgentBoard 的详细界面,查看完整上下文并作出决策。退出:如果这是一个误报或不重要的请求,可以快速忽略。这个小小的菜单,打通了从“被动等待”到“主动决策”的最后一公里。
AgentBoard 的魅力在于其极低的接入成本。无论你的 CLI 工具是否原生支持 Hook,总有办法为它“穿上”一件上报数据的“背心”。
HookPayload所有上报都遵循一个统一的 JSON 格式——HookPayload。它就像一张标准化的“事件报告单”。
{
"hook_event_name": "UserPromptSubmit",
"session_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"cwd": "/Users/zhifeng.wei/projects/my-awesome-app",
"cli_type": "claude-code",
"task_description": "Refactor the authentication module to use JWT.",
"git_branch": "feature/auth-refactor",
"git_repo_url": "git@github.com:EricOo0/my-awesome-app.git"
}
hook_event_name: 事件名称,对应状态机中的转换触发器(SessionStart, Stop, PermissionRequest 等)。session_id: 任务的唯一标识符,需要你在多次上报中保持一致。cwd, cli_type, task_description: 提供了丰富的上下文信息,用于在 UI 上展示和归类。假设你有一个自定义的 Python 脚本 my_agent.py,它本身不支持 Hook。我们可以用一个简单的 Shell 函数来包装它,实现自动上报。
将以下代码添加到你的 .zshrc 或 .bash_profile 文件中:
# 包装你的自定义 Agent
run_my_agent() {
# 1. 优先使用已有的 Session ID,否则创建一个新的
SESSION_ID=${AGENT_SESSION_ID:-$(uuidgen)}
export AGENT_SESSION_ID=$SESSION_ID
# 2. 上报任务开始事件
agent-board-report.sh SessionStart $SESSION_ID $(pwd) "my-agent" "$*"
# 3. 执行原始命令
python my_agent.py "$@"
# 4. 上报任务结束事件
agent-board-report.sh Stop $SESSION_ID $(pwd) "my-agent"
}
# 你甚至可以创建一个别名来覆盖原命令
# alias my_agent.py='run_my_agent'
在这个例子中:
uuidgen 生成一个唯一的 SESSION_ID 并导出为环境变量,以便多次调用时复用。my_agent.py 之前和之后,我们分别调用了 agent-board-report.sh 来上报 SessionStart 和 Stop 事件。"$*" 会将所有传递给 run_my_agent 的参数原封不动地传给 my_agent.py,保证了原有功能的完整性。通过这种方式,只需几行 Shell 代码,任何 CLI 工具都可以轻松接入 AgentBoard 的坚控体系,而无需修改其源代码。这就是“最小侵入”原则的实践。
AgentBoard 是一个开源项目,目前只完成初步功能,欢迎每一位对“人机协同”新范式充满热情的开发者帮忙完善这个工具以及提出宝贵意见。
我们建议你从接入一个你最常用的 CLI 工具开始,例如 Claude Code,它拥有良好的 Hook 支持,可以让你在几分钟内就体验到 AgentBoard 带来的效率提升。然后,再逐步将你工作流中的其他 CLI 工具也纳入进来。
告别那个在终端窗口间手忙脚乱的自己吧。让 AgentBoard 成为你的“数字工头”,让你重新专注于创造性的工作,真正享受“氛围编程”带来的心流与乐趣。