单 agent 的结构性弱点
cc-agents 是一个封装在终端用户界面(TUI)中的异步、对抗性多智能体
三个角色:The Oblivious Proposer;The Static Critic;The Non-aligned Arbitrator
Engineer 边写代码,Genius 边读代码。验证和写入并行运行——不是等写入完成才开始。这是三角色架构才能解锁的能力,单 agent 永远做不到。
并行观察 — Engineer 在左侧写代码,Genius 在中间已读完所有已写内容并列出技术债清单。验证者边写边读,不是事后诸葛亮。
执行期质量检测 — 工程师每改一行,Genius 都扫一遍。as any、缺失的边界条件、未捕获的 promise rejection——实时标记,不留到终态。
手机发消息给 @CCAgentsBot,你电脑上的 cc-agents 自动拉取并执行。Engineer / Genius / Judge 三角色全部就位——Telegram 只是消息中转,LLM 调用从不离开你的机器。
手机端发送消息,cc-agents 本地执行三角色验证,流式返回结果。
/autogenius 实时监控 ·
/goal 辩论循环 ·
/hide 面板折叠 ·
剪贴板图片粘贴 · Token Tracker UI
/goal
→
设定目标 → AI 自动拆解子任务 → Engineer 和 Genius 围绕每个子任务展开辩论。协作式验证框架下质疑与验证,直到收敛或达到轮次上限。
三种记忆类型自动沉淀:用户偏好(跨项目复用)、项目规范(当前仓库特有)、agent 通病(同模型常犯错误)。
会话中自动筛选有价值的信息。用户 A / B / C 三选一确认才落盘——绝不自动写盘。记忆满了拒绝写入,让你手动清理,不静默淘汰。
记忆候选卡片 — 出现在会话流中,不打断工作节奏
三个独立模块,按需启用,服务不可用时自动降级到本地模式。
本地 JSON → PostgreSQL + pgvector 语义检索。跨设备共享记忆,全文搜索历史记录,自动去重合并。换电脑记忆不丢。
React 可视化面板:7 天成本趋势、模型用量分布、TTFT p50/p95/p99 延迟、缓存命中率。按项目按日期任意筛选。
tree-sitter AST 解析 → pgvector 向量化。Agent 启动时语义搜索最相关代码片段,替代全量目录树注入。上下文更精准。
启用方式:在 ~/.cc-agents/settings.json 中配置 serverUrl,连接云端服务。
Engineer 在左侧调用工具分析代码——它不知道 Genius 在中间面板读取同样的内容,准备从用户视角提出质疑。
LLM 进入陌生项目先花 3-5 个 round-trip 探索——grep 找函数、read_file 看导出。Symbol map 在首次注入时直接给出每个文件的导出符号表,把探索 round-trip 清零。LLM 进项目第一眼就知道"哪个文件导出了什么"。
| 注入内容 | 省掉的 round-trip |
|---|---|
| 目录树 | list_dir 逐层探索 |
| 关键文件预览(package.json、tsconfig 摘要) | read_file 读配置 |
| Symbol map(每个文件的导出符号) | grep 找函数/类 + read_file 确认 |
三者合在一起,首次探索从 5-8 个 tool call 降到 0-1 个——直接进入干活状态。
LLM grep 没命中就认为"代码库里没有"——但可能是拼写偏差或搜索范围不对。Symbol map 是代码库的权威目录,消除这种误判。
mtime 比对,项目没改就 10ms 加载。不改动时不消耗任何启动时间。
当 LLM 看到一个 parseGeniusJSON 出现在上下文里,不用 grep——它已经知道这个函数在 src/parsers.ts 第 42 行。这就是 symbol map 做的事。
/hide others 一键折叠其他面板,/show all 全部恢复——想专注哪个角色就只看哪个。
按 ? 弹出帮助面板 — 所有 slash 命令、快捷键一目了然。
不是聊天,是真正的 critical thinking 工作流。
next.question 自动预填到输入框。按 Tab 一键填入——AI 帮你决定接下来该质疑什么、追问谁。DROP TABLE、rm -rf、git push --force——命中即刻冻结,叫醒 Genius 打断。/resume 一键恢复,不丢进行中的对话。SKILL.md。按角色隔离权限——Engineer 能写,Genius 只读。@文件名 引用附件目录。Windows / Linux 暂不支持剪贴板图片(可用 @文件名 替代)。/hide others 一键折叠其他面板。/hide genius 隐藏指定面板,/show all 全部恢复。不想看的角色随时收起来,需要时再展开。完全不知道 Genius 和 Judge 的存在。正常回答、调用工具、读代码写方案——它给出的答案是最诚实的,因为不知道有人在看。
明确知道自己是验证者。读实际代码后从用户视角质疑方案缺陷,给出更巧妙的替代思路。形式上以「追问用户」的方式呈现——Engineer 不会察觉异常。
站在第三方视角观察双方交锋,判断谁在回避核心问题。输出结构化 JSON:下一步该追问谁、问什么——直接预填到你的输入框。不管对话进行多久都保持同样轻快。
能用命令解决的,就不用 UI。
Why: 命令(/hide、/show all、/judge 等)在任何终端都能用、可脚本化、可复现。UI 快捷键依赖终端协议(Kitty、Warp Option 模式、xterm modifyOtherKeys 等),跨终端脆弱——同样的「Alt+1」在 iTerm2、Warp、Terminal.app 上行为不一致。
新功能优先暴露 slash 命令,快捷键是锦上添花。设计交互时先问:这个动作如果只能从命令行触发,用户能完成吗?
任何优化都不能以拖慢 agent 首字响应(TTFT)为代价。
Why: 成本、缓存命中率、上下文保真度都可以慢慢调,唯独「卡」是用户立刻能感知、且最劝退的回归。缓存优化的收益是省钱,代价往往是冷启动 prompt 变大——当两者冲突时,砍 prompt 大小保延迟,不为缓存稳定堆全文。
上下文保真度同理:宁可截断压缩得更狠,也不要让每次请求拖着一大段全文走。
cc-agents 有三个角色,但不等于三倍开销。Engineer 正常执行,Genius 按需启动,Judge 始终保持轻量——不因为架构变复杂就让每次响应变慢。
Why: 三个角色并行不意味着三倍 token。Genius 做静态文本分析,Judge 只看要点,只有 Engineer 走完整工具链路。并行架构的核心是共享上下文——Engineer 写的内容 Genius 直接用,不复制。加角色不加成本,才是真轻量。
每个功能都是一次税:context window 税、学习成本税、bug 税。cc-agents 选择不征不必要的税。
cc-agents 不做 plan mode(对话就是计划)、不做 MCP(CLI 工具 + README 够用)、不做后台 bash(tmux 做了 30 年)、不做权限弹窗(YOLO 默认)。
Why: 每个"不存在的功能"就是零上下文开销、零学习成本、零维护负担。需要的时候再装,不需要的时候没有债。AutoGenius 实时验证、Telegram 接入、记忆系统——这些是"现在就要"的功能,不是"以后可能会用到"的功能。
所有"以后可能会用到"的功能,到"以后"都还没用到。
Engineer 的 system prompt 只定义角色、工具和基本约束。不写"不要用 emoji"、不写"用 FileReadTool 而不是 cat"、不写 OWASP 安全指导、不写 git commit 步骤。
Why: 模型选工具的能力是它的本职。注入防护是基础能力。commit 步骤模型见惯了。每行系统提示都是从用户任务里借来的 token。10K tokens 的系统提示 ≈ 你在跟模型说"我不信任你"。cc-agents 说"你行"。
Genius 和 Judge 同样精简——只加角色所需的最小约束。Genius 知道自己是验证者,但不知道 Engineer 是谁;Judge 全局观察但不干预执行。每个角色的提示都只够它完成本职,给模型让出思考空间。
cc-agents 默认不弹任何权限确认框。不问你"确定要 rm -rf?"不问你"允许读取 ~/.ssh?"
Why: 安全弹窗是安全剧场——一旦 agent 能写代码和执行代码,就无法阻止数据泄露。弹窗训练用户机械点确认。真正在乎安全的人跑容器隔离,而不是依赖弹窗。
cc-agents 的安全来自架构分隔:Engineer 有读写权限但不知情,Genius 只有只读权限无法写。信息不对称是安全设计,不是 bug。要用额外权限门控的人写一个 hook,50 行代码搞定。
需要 Node.js ≥ 22.19。
首次运行自动生成 ~/.cc-agents/settings.json,支持 env:YOUR_KEY 环境变量引用。
自动读取项目的 AGENTS.md、package.json、代码树作为 agent 上下文。
以下差异取决于你使用的平台和模型配置——选什么,就有什么。
@文件名 引用附件。
推荐配置:~/.cc-agents/settings.json 中 Engineer 配 Anthropic,Genius 和 Judge 可自由选择。