单 agent 的结构性弱点

Deception by Alignment.
Cure by Separation.

cc-agents 是一个封装在终端用户界面(TUI)中的异步、对抗性多智能体
三个角色:The Oblivious Proposer;The Static Critic;The Non-aligned Arbitrator

$ npm install -g cc-agents

cc-agents 初始界面:三面板 TUI,左侧 engineer,中间 Genius Challenger,右侧 judge,右边栏显示模型和 token 用量 cc-agents 初始界面:三面板 TUI,左侧 engineer,中间 Genius Challenger,右侧 judge,右边栏显示模型和 token 用量
01
实时并行

验证不是事后。
是并行。

Engineer 边写代码,Genius 边读代码。验证和写入并行运行——不是等写入完成才开始。这是三角色架构才能解锁的能力,单 agent 永远做不到。

并行观察:Engineer 在左侧编写 Telegram bot 时,Genius Challenger 在中间面板已读取实际代码并准备从用户视角质疑

并行观察 — Engineer 在左侧写代码,Genius 在中间已读完所有已写内容并列出技术债清单。验证者边写边读,不是事后诸葛亮。

执行期质量检测:Genius 在 Engineer 执行过程中实时监测代码质量,标注错误模式和风险点

执行期质量检测 — 工程师每改一行,Genius 都扫一遍。as any、缺失的边界条件、未捕获的 promise rejection——实时标记,不留到终态。

02
Telegram 接入
📱 Telegram 接入

通勤地铁里也能验证方案。
所有推理仍在本地跑。

手机发消息给 @CCAgentsBot,你电脑上的 cc-agents 自动拉取并执行。Engineer / Genius / Judge 三角色全部就位——Telegram 只是消息中转,LLM 调用从不离开你的机器。

Telegram 接入:手机端 @CCAgentsBot 对话界面,发送消息后 cc-agents 在本地执行三角色验证并以流式方式编辑消息返回结果

手机端发送消息,cc-agents 本地执行三角色验证,流式返回结果。

零配置
只需 bot token
无需公网 URL
三角色
engineer /
genius / judge
流式
editMessageText
渐进编辑
多 chat
每个对话
独立 session
命令映射
直接发文本 → engineer
/genius [追问] → genius 验证
/judge → judge 分析
@skill → 激活 skill 前缀
/clear · /summarize · /memory
最小配置(轮询模式,零外部依赖)
{ "telegram": { "enabled": true, "botToken": "env:TELEGRAM_BOT_TOKEN" } }
终端专属功能(Telegram 无)
/autogenius 实时监控 · /goal 辩论循环 · /hide 面板折叠 · 剪贴板图片粘贴 · Token Tracker UI
03
辩论模式
/goal
辩论模式:设定目标后 AI 自动拆解为子任务并追踪进度 辩论模式第二步:子任务追踪与进度管理
辩论模式第三步:在协作式验证工作流中验证每个子任务

设定目标 → AI 自动拆解子任务 → Engineer 和 Genius 围绕每个子任务展开辩论。协作式验证框架下质疑与验证,直到收敛或达到轮次上限。

04
记忆系统
跨会话沉淀

记住重要的事。
忘掉不重要的事。

三种记忆类型自动沉淀:用户偏好(跨项目复用)、项目规范(当前仓库特有)、agent 通病(同模型常犯错误)。

会话中自动筛选有价值的信息。用户 A / B / C 三选一确认才落盘——绝不自动写盘。记忆满了拒绝写入,让你手动清理,不静默淘汰。

用户偏好记忆 — 跨项目永久有效
项目记忆 — 绑定当前仓库
Agent 通病记忆 — 按模型分类
记忆候选卡片:显示记忆内容预览和 A 写入 / B 不写 / C 写其他的 三选一确认界面 Agent 记忆:展示 agent 通病记忆的分类和存储

记忆候选卡片 — 出现在会话流中,不打断工作节奏

05
扩展服务

云端能力。
可选的增强模块。

三个独立模块,按需启用,服务不可用时自动降级到本地模式。

✨ 智能记忆后端

本地 JSON → PostgreSQL + pgvector 语义检索。跨设备共享记忆,全文搜索历史记录,自动去重合并。换电脑记忆不丢。

pgvector · pg_trgm · embedding
✨ 会话分析仪表盘

React 可视化面板:7 天成本趋势、模型用量分布、TTFT p50/p95/p99 延迟、缓存命中率。按项目按日期任意筛选。

React · Recharts · PostgreSQL
✨ 代码库智能索引

tree-sitter AST 解析 → pgvector 向量化。Agent 启动时语义搜索最相关代码片段,替代全量目录树注入。上下文更精准。

tree-sitter · pgvector · embedding

启用方式:在 ~/.cc-agents/settings.json 中配置 serverUrl,连接云端服务。

06
工作进行中
工作过程截图:左侧 engineer 面板显示工具调用和分析结果,右侧 Genius Challenger 面板提出质疑和追问

Engineer 在左侧调用工具分析代码——它不知道 Genius 在中间面板读取同样的内容,准备从用户视角提出质疑。

⚡ buildProjectContext

让 LLM 不搜就知道代码库里有什么。

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 做的事。

07
面板控制
面板控制:/hide 命令折叠指定面板,/show all 全部恢复,展示隐藏和显示两种状态下终端布局对比

/hide others 一键折叠其他面板,/show all 全部恢复——想专注哪个角色就只看哪个。

08
内置帮助
内置帮助弹窗:显示所有可用命令、快捷键和角色切换说明

? 弹出帮助面板 — 所有 slash 命令、快捷键一目了然。

09
功能全览

终端里的
审慎思考系统。

不是聊天,是真正的 critical thinking 工作流。

UX 核心
杀手级体验
智能追问预填
Judge 输出 JSON 后,next.question 自动预填到输入框。按 Tab 一键填入——AI 帮你决定接下来该质疑什么、追问谁。
安全防护
AutoGenius 实时验证
Engineer 执行操作时实时检测风险——DROP TABLErm -rfgit push --force——命中即刻冻结,叫醒 Genius 打断。
调试工具
Token 追踪 + Payload 调试
内置 Web Dashboard。实时查看每轮 token 消耗、延迟、分角色用量。侧边栏上下文压力一目了然。
可靠性
有损压缩 + 断点续会
对话过长时自动压缩老内容。每次响应后自动存盘,crash 后 /resume 一键恢复,不丢进行中的对话。
扩展性
Skills 可扩展
内置 TDD、诊断、原型开发等 skill,支持自定义 SKILL.md。按角色隔离权限——Engineer 能写,Genius 只读。
多模型
按角色独立配置模型
三角色各自独立配置 model / apiKey / baseUrl。Anthropic、OpenAI、MiniMax 任意组合。Engineer 用便宜的快速响应,Genius/Judge 用 Opus 深度验证。注意:OpenAI 当前仅纯文本对话,工具调用(代码读写/命令执行)仅 Anthropic 可用。
输入
图片粘贴直接发 Agent
macOS 终端粘贴截图直接发送给 Agent。也能用 @文件名 引用附件目录。Windows / Linux 暂不支持剪贴板图片(可用 @文件名 替代)。
交互
面板可见性控制
想专注 Engineer?/hide others 一键折叠其他面板。/hide genius 隐藏指定面板,/show all 全部恢复。不想看的角色随时收起来,需要时再展开。
交互
鼠标框选复制
每个面板支持鼠标拖拽选择,Enter 复制到系统剪贴板。不依赖终端本地选择模式,跨终端一致。
10
和直接聊天的差距
Codex CLI / Claude Code
单 agent 天然迎合提问者
你说「用 Redis 吧」,它写完整实现——不提你数据量只需要 50MB 内存。没有第二个声音质疑。
出方案的和验证的是同一个人
换个问法,你还是在自己的认知盲区里转圈。
上下文线性膨胀
对话越长上下文越臃肿,token 成本涨到心疼,速度随之下降。
每次从头交代偏好
换了项目,你的 pnpm 习惯、测试约定——全部重新说一遍。
cc-agents 协作式验证工作流
Engineer 不知道自己在被验证
给出的答案最接近真实思考,不会为了讨好验证者而调整方案。
Genius + Judge 替你发现盲区
挑刺和复盘由另两个 agent 完成。你只需做最终决策。
Judge 成本固定不变
始终只看核心要点,context 永远精简,聊再久也不臃肿。
记忆系统跨项目沉淀
偏好、项目规范、模型通病——自动存、自动读,换项目不丢。
11
三角色
信息不对称是设计核心,不是 bug

不是辩论。是协作式验证。

A
Engineer
不知情 · 读写权限 · 调用工具

完全不知道 Genius 和 Judge 的存在。正常回答、调用工具、读代码写方案——它给出的答案是最诚实的,因为不知道有人在看。

读写文件 执行命令 代码搜索 Web 搜索
B
Genius Challenger
知情 · 只读权限 · 形式上是追问

明确知道自己是验证者。读实际代码后从用户视角质疑方案缺陷,给出更巧妙的替代思路。形式上以「追问用户」的方式呈现——Engineer 不会察觉异常。

只读权限 读代码质疑 预填追问 AutoGenius 实时验证
C
Judge
知情 · 全局视角 · 不站队

站在第三方视角观察双方交锋,判断谁在回避核心问题。输出结构化 JSON:下一步该追问谁、问什么——直接预填到你的输入框。不管对话进行多久都保持同样轻快。

全局视角 结构化 JSON 固定成本 预填下一问
12
设计哲学

产品的第一性。
不可妥协。

产品的第一性 — 核心思路
01 — 原则

命令优先于 UI

能用命令解决的,就不用 UI。

Why: 命令(/hide/show all/judge 等)在任何终端都能用、可脚本化、可复现。UI 快捷键依赖终端协议(Kitty、Warp Option 模式、xterm modifyOtherKeys 等),跨终端脆弱——同样的「Alt+1」在 iTerm2、Warp、Terminal.app 上行为不一致。

新功能优先暴露 slash 命令,快捷键是锦上添花。设计交互时先问:这个动作如果只能从命令行触发,用户能完成吗?

02 — 原则

永远不牺牲 agent 的返回速度

任何优化都不能以拖慢 agent 首字响应(TTFT)为代价。

Why: 成本、缓存命中率、上下文保真度都可以慢慢调,唯独「卡」是用户立刻能感知、且最劝退的回归。缓存优化的收益是省钱,代价往往是冷启动 prompt 变大——当两者冲突时,砍 prompt 大小保延迟,不为缓存稳定堆全文。

上下文保真度同理:宁可截断压缩得更狠,也不要让每次请求拖着一大段全文走。

03 — 原则

轻量,不是功能少,是负担轻

cc-agents 有三个角色,但不等于三倍开销。Engineer 正常执行,Genius 按需启动,Judge 始终保持轻量——不因为架构变复杂就让每次响应变慢。

Why: 三个角色并行不意味着三倍 token。Genius 做静态文本分析,Judge 只看要点,只有 Engineer 走完整工具链路。并行架构的核心是共享上下文——Engineer 写的内容 Genius 直接用,不复制。加角色不加成本,才是真轻量。

每个功能都是一次税:context window 税、学习成本税、bug 税。cc-agents 选择不征不必要的税。

04 — 原则

YAGNI:不存在的功能 = 0 bug

cc-agents 不做 plan mode(对话就是计划)、不做 MCP(CLI 工具 + README 够用)、不做后台 bash(tmux 做了 30 年)、不做权限弹窗(YOLO 默认)。

Why: 每个"不存在的功能"就是零上下文开销、零学习成本、零维护负担。需要的时候再装,不需要的时候没有债。AutoGenius 实时验证、Telegram 接入、记忆系统——这些是"现在就要"的功能,不是"以后可能会用到"的功能。

所有"以后可能会用到"的功能,到"以后"都还没用到。

05 — 原则

最少系统提示 — 信任模型,不驯服模型

Engineer 的 system prompt 只定义角色、工具和基本约束。不写"不要用 emoji"、不写"用 FileReadTool 而不是 cat"、不写 OWASP 安全指导、不写 git commit 步骤。

Why: 模型选工具的能力是它的本职。注入防护是基础能力。commit 步骤模型见惯了。每行系统提示都是从用户任务里借来的 token。10K tokens 的系统提示 ≈ 你在跟模型说"我不信任你"。cc-agents 说"你行"。

Genius 和 Judge 同样精简——只加角色所需的最小约束。Genius 知道自己是验证者,但不知道 Engineer 是谁;Judge 全局观察但不干预执行。每个角色的提示都只够它完成本职,给模型让出思考空间。

06 — 原则

YOLO 模式 — 默认信任,安全从架构解决

cc-agents 默认不弹任何权限确认框。不问你"确定要 rm -rf?"不问你"允许读取 ~/.ssh?"

Why: 安全弹窗是安全剧场——一旦 agent 能写代码和执行代码,就无法阻止数据泄露。弹窗训练用户机械点确认。真正在乎安全的人跑容器隔离,而不是依赖弹窗。

cc-agents 的安全来自架构分隔:Engineer 有读写权限但不知情,Genius 只有只读权限无法写。信息不对称是安全设计,不是 bug。要用额外权限门控的人写一个 hook,50 行代码搞定。

13
开始使用

两分钟。
从安装到首轮协作式验证。

需要 Node.js ≥ 22.19。

01 — 安装

全局安装

$ npm install -g cc-agents
02 — 配置

填入 API Key

首次运行自动生成 ~/.cc-agents/settings.json,支持 env:YOUR_KEY 环境变量引用。

"engineer": { "model": "claude-sonnet-4-6" }, "genius": { "model": "claude-opus-4-8" }, "judge": { "model": "claude-opus-4-8" }
03 — 启动

在项目目录下运行

自动读取项目的 AGENTS.md、package.json、代码树作为 agent 上下文。

$ cd your-project && cc-agents
14
平台与模型支持

两个实际差距。
源于你的个人配置选择,非工具限制。

以下差异取决于你使用的平台和模型配置——选什么,就有什么。

macOS
剪贴板图片粘贴 ✓
系统级剪贴板接口直接读取图片,随请求发送。
Windows / Linux
剪贴板图片粘贴 ✗
当前版本未实现剪贴板图片读取。替代方案:@文件名 引用附件。
Anthropic
工具调用 ✓
Engineer 可执行 bash、读写文件、搜索代码。Genius 可用只读工具验证实际代码。
Prompt Caching ✓
长对话中自动缓存固定内容,成本显著降低。
OpenAI
工具调用 ✗
当前未支持工具调用(代码读写、命令执行等),Engineer 退化为纯文本对话。
Prompt Caching ✗
不支持提示缓存,长对话成本线性增长。

推荐配置~/.cc-agents/settings.json 中 Engineer 配 Anthropic,Genius 和 Judge 可自由选择。