在本地运行 AI 编码代理时,有两件事非常关键:对代理行为的可见性(我能看到它在做什么?)和可控性(我能在必要时纠偏或终止它吗?)。MyClaude(https://github.com/007350/myclaude)通过一个“Sidecar 伴生协同终端”把这两点做到了产品级:在主 Agent 旁开一个并排窗口,实时观测、解读并能即时介入——这对在真实仓库中让 AI 进行改动、跑测试、修复 bug 的场景至关重要。本文面向 CSDN 读者,重点解读 Sidecar 的设计、使用和扩展方法。
一、Sidecar 到底是什么?为什么重要
- 什么是 Sidecar:sidecar.py 提供了一个并行的终端窗口(“副驾驶”),通过本地 HTTP IPC 与主 Agent 通信,实时读取主 Agent 的“执行黑板”(/api/status),显示当前目标、正在运行的工具、耗时、最近日志等,并允许用户发起三类操作:查看状态、注入纠偏指令(/steer)、强制中断当前工具(/interrupt)。
- 为什么重要:主 Agent 会在真实文件上执行写入、运行测试等危险或耗时操作。Sidecar 提供“实时可视化 + 干预入口”,能把“黑盒自动化”变成“可控协同”——降低风险并提升效率。
二、关键实现要点(基于 sidecar.py)
- 发现主 Agent:Sidecar 通过工作目录下的 .myclaude_port 文件读取端口(get_ipc_port()),默认端口 9876;这样无需复杂配置就能自动连接本地 Agent。
- 轮询状态与日志:fetch_status(port) 会请求 /api/status,返回结构化 JSON(包含 status, goal, step, active_tool, recent_logs 等)。Sidecar 将这些信息格式化为状态卡(print_status_card)与日志卡(print_logs_card)。
- 注入纠偏(steering):send_steer(port, message) POST 到 /api/steer;Sidecar 里既支持明确的 /steer <text>,也会将自然语言中像“告诉他…/指示他…”这类短句自动识别为纠偏并发送。
- 紧急中断:send_interrupt(port) 调用 /api/interrupt,主 Agent 会尝试杀掉卡住的子进程(例如长时间的 run_command)。这是保障实验安全的“核按钮”。
- 伴生 AI(战况解读):ask_companion_ai() 使用配置的模型(myclaude.config.Config)对最近日志和黑板做微总结,并生成“战况解说”,帮助用户快速判断是否需要干预。
三、Sidecar 的使用场景(实操示例)
1) 并排观测长跑任务
- 在主窗口触发“修复 failing test”后,右侧 Sidecar 输入 /status 查看:如果 active_tool_elapsed > 120s 且 recent_logs 出现重复输出,表示可能进入死循环,可选择 /interrupt 终止并查看日志。
2) 动态纠偏避免大动作
- 主 Agent 正在跑全量测试但你觉得不必要:在 Sidecar 中运行 /steer 不要跑全量测试,只跑有失败的测试用例。主 Agent 会把该 steering 注入下一轮决策。
3) 战况解读提高可读性
- 当你不确定 Agent 的下一步意图,直接在 Sidecar 输入自然语言问题(例如“现在进到哪一步了?有没有报错?”),伴生 AI(ask_companion_ai)会基于 /api/status 与 recent_logs 给出简练建议。
四、如何启动与快速上手
- 克隆并安装依赖:
git clone https://github.com/007350/myclaude.git
cd myclaude
pip install -r requirements.txt
- 启动主 Agent(主窗口):
python main.py
- 在并排窗口启动 Sidecar:
python sidecar.py
- 常用命令(Sidecar 内):
/status 查看实时状态卡片
/logs 拉取最近 30 行日志
/steer <文本> 注入纠偏策略
/interrupt 强制中断当前活跃工具
五、Sidecar 与主 Agent 的协同接口(供二次开发参考)
- IPC 端点(主 Agent 需要实现):
- GET /api/status 返回 JSON(status, goal, step, max_steps, active_tool, active_tool_elapsed, active_tool_args, recent_logs, steering_count 等)
- POST /api/steer 接受 { "message": "..." },将其放入主 Agent 的 steering 队列
- POST /api/interrupt 接受 {},触发主 Agent 中断活跃子进程
- Sidecar 侧核心函数(位于 sidecar.py):
- get_ipc_port():读取 .myclaude_port 或返回默认 9876
- fetch_status(port) / send_steer(port, message) / send_interrupt(port)
- ask_companion_ai(config, user_query, status_data):把实时黑板与日志交给 LLM 做战况解读(注意:需要在 config 中配置模型 API)
六、扩展建议(如何把 Sidecar 用到更高级的协作)
- 可视化增强:把 Sidecar 的日志卡升级为搜索/过滤界面,或把重要异常高亮并提供“回滚”快捷按钮(回滚由主 Agent 的 snapshot 模块实现 — myclaude/core/snapshot.py)。
- 多人协作:把 /api/steer 的消息持久化为审计记录,允许多人通过 Sidecar 合议后一次性注入(避免频繁 conflicting 指令)。
- Web UI / Browser Sidecar:除了终端,Sidecar 的 HTTP API 易于被 Web 前端或 VSCode 扩展调用,做成侧边栏面板也是自然演进路径。
- 安全策略:Sidecar 增强权限鉴别(例如仅允许本机某些用户执行 /interrupt 或 /yolo),结合 myclaude/security 的权限层级。
七、实战建议与注意事项
- 在生产仓库使用之前:在分支或临时仓库多练习 snapshot 与 /undo 流程,确保自动写入不会破坏主分支。
- 审计与日志:Sidecar 虽然能快速中断,但在中断前尽量保存最近日志(Sidecar 已提供 recent_logs),以便调查。
- MCP 与自动生成服务:主 Agent 能根据需要生成并热加载 FastMCP 服务(README 中提到 create_python_mcp_server),Sidecar 对此类动态能力做可视化能大幅降低认知成本。
- 模型调用成本:ask_companion_ai 会调用模型,请注意 API key、请求频率与费用预算。
结语
Sidecar 是 MyClaude 的一个决策性设计:把“自动化代理”从黑盒变成“协同工具”。对于希望在本地把 LLM 代理安全、可控地嵌入开发流程的工程师,Sidecar 将大幅提升透明度与干预效率。想要把 AI 用到工程化工作流里,不妨先从这个“并排观战并介入”的模式开始。
如果你愿意,我可以:
- 把上面文章格式化成 CSDN 编辑器推荐的 Markdown/HTML(包含首图、标签、摘要与分节锚点);
- 或者把其中“扩展建议”部分改成具体的实现 PR 模板(包含需要修改的主 Agent HTTP 路由示例代码片段),帮你直接发起贡献草案。你希望我接着做哪一项?