Skip to content

代理模式 (agent)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 🤖 Claude Code 风格: 代理式 AI 会话,自主完成任务
  • 🔧 25 个内置工具: 读写/编辑文件、执行命令(含后台)、搜索代码库与会话、代码执行、联网搜索/抓取、Jupyter 编辑、子代理、技能调用、LSP 代码智能、通知/定时意图、交付物发布、浏览器状态观察等
  • 🎯 146 个技能: 集成全部内置技能
  • 📋 Plan Mode: AI 制定计划,用户审批后执行
  • 💾 会话持久化: 自动保存,支持 --session 断点恢复
  • 🧠 Context Engineering: 6 维上下文注入(Instinct / Memory / BM25 Notes / Task / Permanent Memory / Compaction Summary)
  • 🗜️ 智能压缩: 基于重要性评分的对话压缩(替代硬编码截断)
  • 🔗 Hook 管道: PreToolUse/PostToolUse/ToolError 钩子集成
  • 🤖 自主模式: /auto 命令提交目标,AI 自动分解执行
  • ⚠️ DAG 执行 + 风险评估: /plan execute 按依赖拓扑排序执行,/plan risk 显示风险评分
  • 🎯 SlotFiller 意图检测: 自动检测用户消息中的缺失参数,交互式补全后再调用 LLM
  • 🎭 Persona 系统: 项目级 AI 角色配置,自动替换默认编码助手,支持工具权限控制
  • 🎨 输出风格: 命名人格叠加系统提示(--output-style),保留编码能力改行为/语气,详见 输出风格

系统架构

agent 命令 → agent.js (Commander) → agent-repl.js

     ┌──────────┬──────────┬─────────────┼──────────────┬─────────────┬──────────┐
     ▼          ▼          ▼             ▼              ▼             ▼          ▼
  工具系统   Plan Mode  Hook管道   Context Engine    会话管理    Autonomous  Bootstrap
 (19 tools) (plan-mode) (hook-     (cli-context-    (session-    Agent     (bootstrap.js)
                        manager)    engineering.js)  manager)   (ReAct)        │
     │          │          │             │              │          │      7-stage init
     ▼          ▼          ▼             ▼              ▼          ▼        (DB/Config)
 read/write  只读→计划→  PreToolUse   6维注入:        自动保存   /auto
 edit/shell  审批→执行   PostToolUse  Instinct        到SQLite   目标分解
 search/code DAG执行     ToolError    Memory          断点恢复   ReAct循环
 skill/list  风险评估                 BM25 Notes               自动纠错
                                      Task重述
                                      Permanent Memory
                                      Compaction Summary
                          Multi-Provider (10 LLM)
                          Task Model Selector

概述

启动 Claude Code 风格的代理式 AI 会话。AI 可读写文件、执行命令、搜索代码库、运行代码脚本(Python/Node.js/Bash)、调用 146 个内置技能。 支持 8 个 LLM 提供商(ollama/anthropic/openai/deepseek/dashscope/mistral/gemini/volcengine)和自主模式(/auto)。Agent 模式下自动根据任务类型智能选择最佳模型。 通过 6 维 Context Engineering 自动注入用户偏好(Instinct)、相关记忆(Hierarchical Memory)、相关笔记(BM25 搜索)、任务目标提醒、跨会话持久记忆(Permanent Memory)和压缩摘要(Compaction Summary),使 AI 保持上下文聚焦。

Persona 支持: 当项目配置了 Persona(通过 init --template medical-triagepersona set),Agent 自动使用自定义角色替代默认编码助手,并按 toolsDisabled 过滤可用工具。详见 Persona 命令

命令参考

bash
chainlesschain agent                    # 默认读 ~/.chainlesschain/config.json 的 llm 配置;无配置时 Ollama qwen2.5:7b
chainlesschain a --model llama3         # 短别名
chainlesschain agent --provider openai --api-key sk-...
chainlesschain agent --session <id>     # 恢复历史会话

agent 命令的短别名为 a,两者完全等价。

配置默认(v0.162.43+):不带 --provider/--model 的裸 cc agent 会读取 config.jsonllm 段作为默认(provider/model/apiKey/baseUrl),与 cc chat/桌面端一致;显式 flag 仍然优先。

命令选项

选项说明默认值
--model <model>LLM 模型名称qwen2.5:7b
--provider <provider>LLM 提供商(ollama/anthropic/openai/deepseek/dashscope/mistral/gemini/volcengine)ollama
--base-url <url>API 基础 URLhttp://localhost:11434
--api-key <key>API 密钥
--session <id>恢复历史会话
--add-dir <dir>额外工作根(可重复)
--mcp-config <file>临时挂载 MCP server,工具 → mcp__<server>__<tool>
--no-mcp不自动连 cc mcp add --auto-connect 的服务(默认连)
--settings <file>一次性 .claude/settings.json:权限规则 + model/env 覆盖
--output-style <name>套用命名人格(内置 explanatory/learning.claude/output-styles/<name>.md),详见 输出风格

Headless 模式 (agent -p) 与 Claude Code 平价旗标

cc agent -p单轮非交互执行(claude -p 对标),进 CI / 管道 / 脚本;prompt 来自 -p 值 / 位置参数 / stdin。完整旗标 + 输出格式 + 权限档表见 CLI_COMMANDS_REFERENCE → managed-agents

bash
chainlesschain agent -p "fix the bug in x.js"                     # 单轮执行后退出
chainlesschain agent -p "..." --output-format json|stream-json    # 机器可读 / 逐事件 NDJSON
chainlesschain agent -p "..." --max-turns 5                       # 限制循环迭代上限
chainlesschain agent -p "..." --allowed-tools / --disallowed-tools "read_file,git"
chainlesschain agent -p "..." --permission-mode bypassPermissions # default|plan|acceptEdits|bypassPermissions
chainlesschain agent -p "..." --resume <id> | --continue          # 会话恢复 + 自动压缩
chainlesschain agent -p "..." --resume <id> --fork-session        # 恢复时分叉到新会话 id,原会话不动(claude --fork-session 平价)
chainlesschain agent -p "..." --output-format stream-json --include-partial-messages  # 逐 token 增量
chainlesschain agent -p "..." --input-format stream-json          # 持续从 stdin 喂多轮 NDJSON 用户事件
chainlesschain agent -p "..." --mcp-config ./mcp.json             # 临时 MCP({"mcpServers":{...}})
chainlesschain agent -p "..." --mcp-config m.json --permission-prompt-tool mcp__auth__approve  # 审批交 MCP 工具
chainlesschain agent -p "..." --settings ./run.json               # 一次性 model/env + 权限覆盖
chainlesschain agent -p "..." --think | --ultrathink              # Anthropic 扩展思考(其它 provider 自动忽略)
chainlesschain agent -p "..." --think --thinking-budget 8000      # legacy Claude 的思考 token 预算
chainlesschain agent --image shot.png -p "图里是什么?"             # 多模态图像输入(可重复 --image)
chainlesschain agent -p "..." --json-schema schema.json           # 结构化输出:最终回答必须通过 JSON Schema 校验
chainlesschain agent -p --input-format stream-json --interactive-approvals  # 危险操作改结构化审批往返(见下)
chainlesschain agent -p "..." --safe-mode                         # 裸跑:禁项目记忆/settings hooks/记忆召回/IDE 上下文/状态行(权限规则仍生效)
chainlesschain agent -p "..." --bare                              # --safe-mode 之上再禁 skills/插件/MCP·IDE 自动连接——脚本化调用的最小最快面(显式 --mcp-config 仍加载)
chainlesschain agent --disable-slash-commands                     # 交互 REPL:'/' 开头输入原样给模型不当斜杠命令(/exit /quit 仍可用)
chainlesschain agent --ax-screen-reader                           # 读屏友好输出:无 ANSI 颜色、无原地状态行重绘(也可 CC_SCREEN_READER=1)

交互式审批--interactive-approvals,v0.162.45+,仅 stream-json 双工模式):confirm 级决策(危险 shell + settings/hook ask)从 headless 一律拒绝(fail-closed)变为结构化往返 —— emit approval_request(id/tool/command/risk/rule/reason),阻塞该工具等 stdin 的 {type:"approval",id,approve}(裁决走中断同款并发泵,mid-turn 即时生效);超时(CC_APPROVAL_TIMEOUT_MS 默认 120s)与 stdin 关闭一律 fail-closed 并 emit approval_resolved。不加 flag 的 CI/管道行为字节不变。VS Code Chat 面板基于此渲染内联 Approve/Deny 审批卡。

逐回合 LLM 覆盖--input-format stream-json,v0.162.96+):stream-json 的用户事件可携带可选 llm 字段,只对这一回合切换模型而无需重启会话:

json
{
  "type": "user",
  "text": "...",
  "llm": {
    "provider": "ollama",
    "model": "qwen2:7b",
    "baseUrl": "...",
    "apiKey": "..."
  }
}

只覆盖给出的字段(provider / model 至少给一个,空白忽略),其余沿用会话默认——例如把某一回合从云端模型路由到你自己 PC 上的 Ollama 以提升隐私。图像回合的视觉模型切换优先级更高(图片必须用视觉模型)。IDE 聊天面板与 PDH 个人助手据此做逐回合模型路由。

结构化输出--json-schema <file>):最终回答必须是通过该 JSON Schema(子集: type/properties/required/items/enum/const/additionalProperties)校验的 JSON——回复自动提取 (裸 / 围栏 / 嵌入三形态),校验失败带错误清单纠错重跑(共 3 次),stdout 只打印校验通过的 JSON,耗尽返回退出码 1。与 --output-format stream-json 互斥。脚本消费 agent 输出不再 parse 自由文本。

逐 token 增量--include-partial-messages,仅 --output-format stream-json)额外 emit stream_event/content_block_delta;真增量覆盖 ollama + anthropic + OpenAI 兼容 (openai/deepseek/dashscope/mistral/gemini/volcengine),含流式 tool-call 重组。

扩展思考--think / --ultrathink / --thinking-budget):Anthropic extended thinking 的 opt-in 开关。--think 默认强度、--think hard|ultra 指定强度、--ultrathink = --think ultra。 自适应思考模型(Opus 4.6/4.7/4.8、Sonnet 4.6)走 output_config.effort;legacy 模型(Sonnet 4.5、 Opus 4.0–4.5)走 enabled + budget_tokens,由 --thinking-budget 设预算(自适应模型忽略它)。

多模态 / 图像输入--image <path>,可重复,仅 headless):附图给视觉模型。支持 png/jpg/jpeg/gif/webp(坏扩展名立刻报错)。内部统一成 OpenAI 形状的 image_url,再按 provider 转换—— OpenAI 兼容(volcengine/doubao 等)原样透传、ollama 转 {content, images:[base64]}、anthropic 转 image content block;纯文本运行请求形状不变。

OpenTelemetry 遥测--otlp <file>,Phase 7):把本次 agent 运行的真实 span 以 OTLP/JSON 落盘,供真 collector 摄入——零新增依赖(不引 @opentelemetry/*)。覆盖:每次模型调用 agent.model span(provider/model + input/output/cache-read/cache-write token + has_tool_calls)、每次工具调用 agent.tool span(tool.name + is_error)、provider fallback 记 agent.model.fallback counter(按 reason)。无 --otlp 时零成本(_withSpan 短路),写文件 best-effort 不改退出码。

bash
chainlesschain agent -p "重构 auth 模块" --otlp run-spans.json
# → run-spans.json:resourceSpans(typed attr string/double/bool),可喂给 Jaeger/Tempo/collector

失败自动重驱动--auto-rewake / --max-rewakes <n>,Phase 6):当一个 asyncRewake:true 的异步 hook(如后台测试套件)在回合结束时失败,把结构化失败报告作为新一轮 user 输入追加,自动重新驱动 agent 去修--max-rewakes 设每轮上限(默认 1,给出正值即隐含开启 --auto-rewake)。opt-in:默认关闭时一次性 cc agent -p 行为逐字节不变(CI/脚本不会被静默重跑);重驱动共享迭代预算防失控。

bash
# 后台测试失败即自动修一轮(最多重驱 2 次)
chainlesschain agent -p "实现 X 并让测试通过" --auto-rewake --max-rewakes 2

详见异步 Hooks(async:true / asyncRewake:true)与 SessionResume/SessionPause 事件:Hooks 系统

MCP — 把工具喂给 agent 循环

两条路(headless + 交互都支持,合并进同一 client,同名 ad-hoc 优先):--mcp-config 临时挂载, 或 cc mcp add --auto-connect 注册后每次自动连(--no-mcp 跳过)。工具名 mcp__<server>__<tool>

Subagents — cc agents 子代理

.chainlesschain/agents/*.md(原生优先)或 .claude/agents/*.md(Claude Code 可移植)定义命名子代理: 正文 = system prompt,frontmatter tools(白名单)/ model

bash
chainlesschain agents list | show <name> | run <name> "<task>" | new <name> [--tools ...] [--claude]

cc agents run 把子代理映射到 headless 运行;主 agent 经 spawn_sub_agent({ agent: "review:security" }) 委派——加载该子代理的 system prompt + 工具白名单 + model:(继承父 provider/key,只覆盖 model)。

Context — cc context 上下文窗口占用

bash
chainlesschain context [<sessionId>] [--json] [--model <m>]   # 按角色拆 token + 占比 + 余量(/context 对标)

IDE 桥接 — 自动连接编辑器 + 实时感知

在 VS Code / JetBrains 集成终端里跑 cc agent自动连接编辑器的桥接 MCP server(保留名 ide--ide 强制 / --no-ide 禁用),并获得两个自动行为:

  • 提交时共享选区/打开文件:每条 prompt 自动附带 <ide-context> 块(活跃文件、打开 tab、选中代码),模型即时知道"你正看着什么";只进在途消息,不写会话持久化。
  • 编辑后诊断回喂:agent 改完文件,编辑器的 error/warning 自动回流到工具结果,同一循环内自修。

CC_IDE_CONTEXT=0 关闭自动感知(4 个 mcp__ide__* 工具仍可显式调用)。完整安装/协议/排错见 IDE 桥接

PDH 桥接 — 自动连接安卓 App 的设备数据采集

IDE 桥接的姊妹能力,把同样的"App-as-MCP-server"反转模式搬到手机:安卓 App 在本机跑一个"设备能力 MCP server",cc agent 在 App 内置终端里自动连接(保留名 pdh--pdh 强制 / --no-pdh 禁用),从而能主动指挥设备采集自己的数据

  • 6 个设备工具mcp__pdh__*):collect_system_data(L2 联系人+应用,免 root/登录)、collect_app_data(L3,7 源:微博/B站/12306/抖音/小红书/头条/快手)、salvage_app_data(L4 root 内存打捞)、collect_files(L1 本地文件)、list_collectorspdh_ping
  • 引导式协同:采集前置缺失(未登录/cookie 未暖)时工具返回 assist_required,agent 引导你在对应 App 内完成一步再重试(server 标 longRunning,免单次调用超时)。
bash
cc pdh list / status / doctor    # 检视 PDH 发现状态(token 脱敏)

完整安装/协议/排错见 PDH Bridge 个人数据 IDE 桥接

内置工具

代理模式提供 25 个内置工具(cli ≥ 0.162.158):

工具说明
read_file读取文件内容(支持 hashed: true 返回带哈希锚点的内容)
write_file写入文件
edit_file编辑文件(查找替换)
edit_file_hashed基于内容哈希锚点的行编辑(抗空白/行号漂移)
run_shell执行 Shell 命令(超时 60s,输出截断 30KB;run_in_background: true 返回 task_id)
check_shell轮询/终止后台 run_shell 任务(增量读取 + kill,详见后台 Shell
gitGit 操作封装(status / diff / log / commit 等)
search_files搜索文件内容
search_sessions跨历史会话语义搜索
list_dir列出目录内容
run_skill运行内置技能
list_skills列出可用技能
run_code编写并执行代码(Python/Node.js/Bash),超时 1-300s,输出截断 50KB
spawn_sub_agent分派独立上下文的子代理(支持 profile: explorer/executor/design
web_fetch抓取 URL 内容(默认拒绝私网 / SSRF 防护)
web_search联网搜索(7 个可插拔搜索源,auto 按密钥择优,详见联网搜索
notebook_edit编辑 Jupyter .ipynb 单元格:按 cell_id(优先)或 cell_index 定位,edit_mode = replace(默认)/ insert / delete
todo_write会话级待办清单(open-agents 对标)
ask_user_question主动向用户提问并阻塞等待回答
code_intelligenceLSP 语义代码智能:定义 / 引用 / 诊断 / 重命名(详见 code-intel
slash_command在会话内执行 REPL 斜杠命令
notify落一条通知意图到 ~/.chainlesschain/agent-schedule/,由 cc agenda 消费触发
schedule落一条定时任务意图(同上,agenda 调度执行)
publish_artifact把完工交付物发布进个人交付物库,只回传元数据(详见 Artifacts
browser_state观察用户 Chrome 当前状态(CDP,需先 cc browse chrome launch):URL/标题/标签页 + 观察窗口 console/失败网络请求 + DOM 快照(40k cap)+ 可选截图;只读不操控,仅 loopback

run_code 工具详情

run_code 是 v0.40.3 新增的代码执行工具,让 AI 能主动编写脚本解决用户问题。

参数

参数类型必填说明
languagestring编程语言:pythonnodebash
codestring要执行的代码
timeoutnumber超时时间(秒),默认 60,最大 300

执行流程

  1. 代码写入临时文件(os.tmpdir() + 时间戳)
  2. 根据语言选择解释器(python3/pythonnodebash
  3. 执行并捕获输出(最大 50KB)
  4. 返回 { success, output, language, duration } 或错误信息
  5. 清理临时文件

语言选择建议

  • Python: 数据处理、数学计算、Web 抓取、文件批量操作
  • Node.js: JSON 处理、API 调用、npm 生态相关
  • Bash: 系统管理、文件操作、管道命令

使用示例

> 帮我统计当前目录下每种文件类型的数量

🤖 好的,我来写个脚本统计:
[run_code: node (156 chars)]
  .js: 42
  .json: 8
  .md: 15
  .test.js: 23
共 88 个文件

notebook_edit 工具详情

notebook_edit 补齐了 cc 此前缺失的最后一个 Claude Code 代理工具(NotebookEdit),用于编辑 Jupyter .ipynb 笔记本的单元格。纯函数 editNotebookCell() 实现:解析 → 变更 → 以 nbformat 规范(1 空格缩进 + 末尾换行)重新序列化。

参数

参数类型必填说明
notebook_pathstring.ipynb 文件路径
cell_idstring否*目标单元格 id(优先
cell_indexnumber否*0 基单元格下标(无 cell_id 时用)
edit_modestringreplace(默认)/ insert / delete
new_sourcestringreplace/insert 必填新单元格源码

*replace / delete 须给 cell_idcell_index 之一定位目标。

语义:源码以行数组存储并保留末尾 \nreplace 一个代码单元会清空其 outputs 与 execution_countinsert生成新的 cell id(插在目标之后,或无定位时插到顶部)。完善的错误路径:坏 JSON / 无 cells[] / 缺定位符 / 目标不存在 / 缺参数。

沙箱网络隔离与出口过滤代理 (Phase 1)

run_shell沙箱模式下执行(Docker 或 bubblewrap 后端)时,其网络出口由一套策略判定 + 强制过滤的两层机制守卫——把「agent 跑的 shell 命令能访问哪些域名」从提示词约束升级为环境强制

策略判定(sandbox-network-policy.js

纯共享逻辑、独立可测,决定一个目标是否放行:

  • extractHost: 从 URL / host:port / IPv6 提取主机,归一化方括号(修 new URL()[::1] 漏括号的 SSRF 坑)。
  • matchesDomain: 支持 *(全放行公网)/ *.example.com(含 apex)/ 精确匹配,防后缀欺骗。
  • isPrivateHost: 识别 loopback / 10. / 172.16-31 / 192.168 / 169.254 / ::1 / fc00:: / fe80:: / 云 metadata / IPv4-mapped。
  • evaluateNetworkAccess: 优先级 deny > 具体 allow > 私网守卫 > "*" allow > 默认拒。裸 * 放行公网但不含内网/metadata;显式白名单可覆盖私网守卫(供 dev)。

出口过滤代理(sandbox-egress-proxy.js

把「判定」变「强制」:一个本地转发代理,对每个 HTTP 请求 + HTTPS CONNECT 隧道调 evaluateNetworkAccess,拒绝的 host 直接 403 / 关隧道(上游零接触),私网/metadata 即使 * allow 也拦(SSRF 防护)。沙箱进程的 HTTP(S)_PROXY 指向它,其 curl / npm / pip / git / wget / fetch 出口即被过滤。

  • Docker 后端: 注入 --add-host host.docker.internal:host-gateway + HTTP(S)_PROXY
  • bubblewrap 后端: --share-net + HTTP(S)_PROXY 指向 127.0.0.1
  • 无网络: 不启用网络时 Docker 加 --network none
  • fail-closed: 配了域名限制但代理起不来 → 拒绝无限制网络访问(绝不静默放行)。

配置

jsonc
{
  "sandbox": {
    "network": true, // 启用网络(false → --network none 完全断网)
    "network.allowedDomains": ["registry.npmjs.org", "*.github.com"],
    "network.deniedDomains": ["evil.example.com"],
  },
}

配了 allowedDomains/deniedDomainsnetwork:true 时,run_shell 自动起代理 → 跑命令 → 拆代理。

诚实标注(跨平台但非内核级): 这是代理层控制,Windows 可验、免 root、跨平台。忽略 HTTP(S)_PROXY 的工具(或直接 syscall 建连的程序)仍需 OS 级 netns 隔离(Linux bwrap netns / macOS Seatbelt / Windows AppContainer)才能真正封死——那部分属平台相关的内核硬隔离。

Auto Pip-Install (自动安装 Python 包)

v0.40.3+ 新增

run_code 工具执行 Python 代码遇到 ModuleNotFoundError 时,会自动尝试 pip install 安装缺失的包,然后重新执行脚本。

工作流程

  1. 执行 Python 脚本 → 捕获 ModuleNotFoundError: No module named 'pandas'
  2. 从错误消息中提取包名(取顶层名称:foo.barfoo
  3. 通过 isValidPackageName() 验证包名安全性(拒绝 Shell 元字符)
  4. 执行 python3 -m pip install pandas(超时 120s)
  5. 重新执行脚本,返回结果

返回示例

json
{
  "success": true,
  "output": "DataFrame shape: (100, 5)\n...",
  "language": "python",
  "duration": "1523ms",
  "autoInstalled": ["pandas"],
  "scriptPath": ".chainlesschain/agent-scripts/2026-03-15-10-30-45-python.py"
}

安全防护

isValidPackageName() 使用正则 /^[a-zA-Z0-9_][a-zA-Z0-9._-]*$/ 验证包名:

  • ✅ 合法:pandas, scikit-learn, python_dotenv, Flask
  • ❌ 拒绝:foo; rm -rf /, $(whoami), foo|bar, 空字符串, 超过 100 字符

Script Persistence (脚本持久化)

v0.40.3+ 新增

run_code 工具默认将脚本保存到项目目录下,方便后续查看和复用。

持久化模式(默认)

.chainlesschain/agent-scripts/
├── 2026-03-15-10-30-45-python.py
├── 2026-03-15-10-31-02-node.js
└── 2026-03-15-10-32-18-bash.sh
  • 文件名格式:YYYY-MM-DD-HH-MM-SS-{language}.{ext}
  • 自动创建 .chainlesschain/agent-scripts/ 目录
  • 返回结果中 scriptPath 字段指向保存路径

临时模式(persist: false

  • 脚本写入 os.tmpdir()
  • 执行完毕后自动清理(finally 块中 unlinkSync
  • 返回结果中 scriptPathundefined

Error Classification (错误分类)

v0.40.3+ 新增

run_code 执行失败时,classifyError() 函数将错误分为 5 种类型,每种附带 hint 字段提供可操作的修复建议。

errorType匹配模式hint 示例
import_errorModuleNotFoundError, ImportErrorMissing Python module "pandas". Will attempt auto-install.
syntax_errorSyntaxError, IndentationErrorSyntax error on line 15. Check for typos.
timeoutETIMEDOUT, timed out, exitCode=nullScript timed out. Consider increasing timeout.
permission_errorEACCES, Permission deniedPermission denied. Try a different directory.
runtime_error其他所有错误Runtime error near line 42. Check traceback.

返回示例(错误)

json
{
  "error": "ModuleNotFoundError: No module named 'pandas'",
  "stderr": "...",
  "exitCode": 1,
  "language": "python",
  "errorType": "import_error",
  "hint": "Missing Python module \"pandas\". Will attempt auto-install.",
  "scriptPath": ".chainlesschain/agent-scripts/2026-03-15-10-30-45-python.py"
}

Environment Detection (环境检测)

v0.40.3+ 新增

getEnvironmentInfo() 在进程启动时检测运行环境信息,缓存后注入到 System Prompt 中,帮助 LLM 感知宿主环境。

检测项

字段说明示例
os操作系统win32, linux, darwin
arch架构x64, arm64
pythonPython 解释器python3 (3.11.0)null
pippip 是否可用true / false
nodeNode.js 版本v22.12.0
gitGit 是否可用true / false

System Prompt 注入

## Environment
OS: win32 (x64)
Python: python3 (3.11.0) + pip
Node.js: v22.12.0
Git: available

架构图

agent-core.js (中心模块)

    ├── AGENT_TOOLS (19 工具定义)
    ├── getBaseSystemPrompt() ← getEnvironmentInfo()
    ├── executeTool() → executeToolInner() → _executeRunCode()
    │                                           ├── classifyError()
    │                                           ├── isValidPackageName()
    │                                           └── getCachedPython()
    ├── chatWithTools() → 10 LLM providers
    ├── agentLoop() → 异步生成器 (slot-filling + tool loop)
    └── formatToolArgs()

Context Engineering

代理模式集成了轻量级 Context Engineering 适配器(cli-context-engineering.js),在每次 LLM 调用前自动构建优化的上下文消息。

6 维上下文注入

注入器数据源说明
Instinctinstinct-manager.js从学习到的用户偏好生成提示(编码风格、工具偏好等)
Memoryhierarchical-memory.js召回与当前查询相关的四层记忆(working→core)
BM25 Notesbm25-search.js + notes搜索笔记库中的相关内容(topK: 3, threshold: 0.5)
Task Reminder内置重述当前任务目标和进度,保持 AI 聚焦
Permanent Memorypermanent-memory.js跨会话持久记忆 + Daily Notes + MEMORY.md
Compaction Summary内置被压缩消息的单行摘要,支持上下文恢复

稳定前缀缓存 (Stable Prefix Cache)

Context Engineering 按固定顺序排列注入内容(System Prompt → Instinct → Memory → Notes → Task → Permanent Memory),确保 LLM 的 KV-Cache 前缀尽量稳定。当上下文内容不变时,LLM 可复用已缓存的计算结果,显著降低推理延迟。

System Prompt 优化

  • 清理时间戳 → [DATE]、UUID → [UUID]、session ID → [SESSION]
  • 提升 KV-Cache 命中率,减少重复计算

错误学习

  • 自动记录最近 10 条错误及解决方案
  • 注入到上下文中,避免 AI 重复犯错

智能压缩 (/compact)

基于重要性评分的对话压缩(替代简单的 "保留最后 4 条"):

  • 始终保留 System Prompt
  • 评分维度:时间近、含 tool_calls、关联任务目标
  • 默认保留得分最高的 6 对消息

优雅降级

  • 无 DB 时自动跳过所有注入,使用静态 System Prompt
  • 每个注入步骤独立 try/catch,单个失败不影响其他

斜杠命令

@ 路径补全(v0.162.38+):交互 REPL 中输入 @ 后按 TAB 补全文件/目录路径(目录带尾斜杠可继续下钻,自动排除 node_modules/.git,大小写不敏感);IDE 桥接已连接时,编辑器打开的标签页混入候选并排最前(workspace 内转相对路径)。IDE 列表 5s TTL 后台刷新,补全本身同步零延迟。

输入排队(v0.162.40+):agent 回合进行中继续打字不再触发并发回合 —— 多余输入按 FIFO 排队(灰色 queued (N) 提示),当前回合结束后自动依次执行。

Esc 打断(v0.162.40+):回合进行中按 Esc 立即中止当前回合(黄色 "turn interrupted" 提示,非报错)——已产出的部分对话保留,排队中的输入照常继续执行。

会话回退 /rewind(v0.162.40+,steering 三件套收口)/rewind 列出历史用户轮次(新→旧编号 + 预览),/rewind <n> 把对话截回该轮之前并把原文预填到输入行(改完重发);空闲时双击 Esc 调出同一选择器。注意这只回退对话,文件状态回退用 cc checkpoint restore

恢复摘要(v0.162.40+)--resume 重建对话后,REPL 自动打印一段离线提取式回顾(轮次统计 + 最后提问/回复预览,零 LLM 调用)—— 秒级回想"刚才聊到哪了"。

! bash 直通(v0.162.41+)! <cmd> 直接跑 shell(不经 LLM),输出回灌对话上下文(<bash-input>/<bash-output> 块),模型下一轮可见;Windows 走 chcp 65001 防乱码,120s 超时 / 30K 输出截断。

# 快捷记忆(v0.162.41+)# <备注> 一键追加到 git 根的 cc.md## Notes 段、最新在上),本会话立即生效、之后的会话经项目记忆自动加载。

/ 命令补全(v0.162.41+):行首输入 /he<TAB> 补全 REPL 命令(命令 token 输入期间生效,空格后不打扰参数)。

基础命令

命令说明
/exit退出代理
/help显示所有命令帮助
/model <name>切换/查看模型
/provider <p>切换/查看提供商,支持 8 个提供商 (ollama/anthropic/openai/deepseek/dashscope/mistral/gemini/volcengine)
/clear清空对话历史
/compact智能压缩对话(基于重要性评分)
/rewind [n]列出/回退到历史用户轮次(双击 Esc 同效;文件回退用 cc checkpoint
! <cmd>bash 直通:直接跑 shell,输出进对话上下文
# <note>快捷记忆:追加到项目 cc.md## Notes
/output-style [name]列出 / 切换 输出风格 人格;none 清除

Context Engineering 命令

命令说明
/task <objective>设置当前任务目标
/task clear清除任务
/session显示当前 Session ID 和消息数
/session resume <id>加载历史会话消息
/reindex重新索引笔记到 BM25
/stats显示 Context Engine 统计信息

Plan Mode 命令

命令说明
/plan进入规划模式
/plan show查看当前计划
/plan approve批准计划并开始执行
/plan reject拒绝计划,重新规划
/plan exit退出规划模式
/plan execute按 DAG 依赖顺序执行计划
/plan risk显示风险评估报告

Cowork 命令

命令说明
/cowork debate <file>多视角代码评审
/cowork compare <prompt>A/B 方案对比
/cowork graphASCII 代码知识图谱
/cowork decision决策追踪知识库

自主模式命令

命令说明
/auto <goal>提交目标,AI 自主分解执行
/auto status查看当前自主目标进度
/auto pause暂停自主执行
/auto resume恢复自主执行
/auto cancel取消当前目标
/auto list列出所有目标(含历史)

Plan Mode

代理模式内置 Plan Mode(规划模式),让 AI 在执行复杂任务前先制定计划并获得用户审批。

规划模式工作流

  1. 用户输入 /plan 或 AI 自动判断需要规划
  2. AI 进入只读模式(仅允许 read_filesearch_fileslist_dir
  3. AI 生成结构化计划,包含步骤、依赖和风险评估
  4. 用户审批(/plan approve)后 AI 开始执行
  5. 用户可随时拒绝(/plan reject)要求重新规划

使用示例

> /plan

📋 已进入规划模式。请描述您的任务。

> 重构认证模块,从 session 迁移到 JWT

🤖 正在分析代码库...
[只读: read_file auth/session.js]
[只读: search_files "authentication"]

📋 计划:
1. 创建 JWT 工具模块
2. 修改登录接口返回 JWT token
3. 添加 JWT 验证中间件
4. 更新受保护路径
5. 移除 session 依赖
6. 添加单元测试

> /plan approve
✅ 开始执行计划...

自主模式 (Autonomous Agent)

代理模式内置自主模式,用户只需提交高层目标,AI 自动分解为子任务并循环执行,无需手动逐步指令。

ReAct 循环

自主模式采用 ReAct(Reason → Act → Observe)循环:

  1. Reason: AI 分析当前目标和已完成的子任务,决定下一步行动
  2. Act: 调用工具(读写文件、执行命令、搜索等)执行子任务
  3. Observe: 观察工具输出,评估结果是否符合预期
  4. 重复: 回到 Reason,直到目标完成或达到 Token 预算上限

核心特性

  • 目标分解: 自动将高层目标拆分为可执行的子任务序列
  • 自我纠错: 工具调用失败时自动分析原因并尝试替代方案
  • Token 预算: 可配置的 Token 消耗上限,防止无限循环
  • 进度追踪: /auto status 实时查看已完成/剩余子任务
  • 暂停/恢复: /auto pause/auto resume 控制执行节奏

使用示例

> /auto 为项目添加完整的 CI/CD 配置(GitHub Actions + Docker)

🤖 目标已接收,正在分解...
  子任务 1: 分析项目结构和依赖
  子任务 2: 创建 .github/workflows/ci.yml
  子任务 3: 创建 Dockerfile
  子任务 4: 创建 docker-compose.yml
  子任务 5: 添加测试和构建步骤
  子任务 6: 验证配置正确性

[Reason] 开始分析项目结构...
[Act] read_file: package.json
[Observe] Node.js 项目,使用 Vitest 测试...
[Reason] 需要创建 CI 工作流...
[Act] write_file: .github/workflows/ci.yml
...

✅ 目标完成!已创建 4 个文件,所有配置已验证。

> /auto status
目标: 为项目添加完整的 CI/CD 配置
状态: ✅ 已完成 (6/6 子任务)
Token 消耗: 12,450 / 50,000

SlotFiller 意图检测

v0.41.1 新增

Agent 模式集成了 SlotFiller 参数槽填充引擎,在调用 LLM 之前自动检测用户消息中的已知意图,补全缺失的必需参数。

支持的意图类型

意图类型触发关键词必需参数
create_filecreate a file, new file, scaffoldfileType, path
deploydeploy, ship it, push to prodplatform
refactorrefactor, restructuretarget
testwrite tests, add test, unit testtarget
analyzeanalyze, audit, review code
searchsearch for, find all, grepquery
installinstall, add packagepackage
generategenerate, create component
edit_fileedit file, modify filetarget

工作流程

  1. 用户输入消息(如 "deploy this")
  2. CLISlotFiller.detectIntent() 检测到 deploy 意图
  3. 检查必需参数 platform 缺失
  4. 通过 InteractionAdapter 向用户提问 "Which platform?"
  5. 用户回答 "docker"
  6. 补全结果注入到用户消息末尾:[Context — user provided: platform: docker]
  7. 带有完整上下文的消息发送给 LLM

使用示例

> deploy this

? Which platform do you want to deploy to?
  > docker
  > vercel
  > aws
  > heroku

[SlotFiller] platform = "docker"

🤖 好的,我来帮你部署到 Docker...
[run_shell: docker build -t myapp .]

未识别的意图(如 "help me understand this code")不会触发 SlotFiller,直接传给 LLM 处理。

使用示例

基础使用

> 帮我重构 src/utils/helper.js,提取公共方法

🤖 我来分析这个文件...
[调用 read_file: src/utils/helper.js]
[调用 edit_file: 提取公共方法到 src/utils/common.js]
[调用 run_skill: code-review 检查重构质量]

已完成重构,提取了 3 个公共方法到 common.js。

使用火山引擎(豆包)Agent 模式

bash
# 设置环境变量
export VOLCENGINE_API_KEY=ark-xxxxxxxxxxxx

# 启动 Agent(默认旗舰模型 doubao-seed-1-6-251015)
chainlesschain agent --provider volcengine

# 指定代码模型
chainlesschain agent --provider volcengine --model doubao-seed-1-6-251015

Agent 模式下会自动根据任务类型智能选择最佳模型:

you> 写一个 Python 快速排序函数
[auto] 代码任务 → doubao-seed-1-6-251015
ai>  def quicksort(arr): ...

you> 分析 TCP 三次握手的过程
[auto] 复杂推理 → doubao-seed-1-6-251015
ai>  TCP三次握手过程如下:...

you> 今天天气怎么样?
ai>  (使用默认模型,快速响应)

使用 OpenAI / DeepSeek Agent 模式

bash
# OpenAI
export OPENAI_API_KEY=sk-xxxxxxxxxxxx
chainlesschain agent --provider openai --model gpt-4o

# DeepSeek
export DEEPSEEK_API_KEY=sk-xxxxxxxxxxxx
chainlesschain agent --provider deepseek --model deepseek-chat

通过中转站使用 Agent 模式(无需科学上网)

bash
# 通过 API2D 中转站使用 GPT-4o
chainlesschain agent \
  --provider openai \
  --base-url https://oa.api2d.net/v1 \
  --api-key fk-xxxxxx \
  --model gpt-4o

# 通过 One-API 网关
chainlesschain agent \
  --provider openai \
  --base-url http://localhost:3000/v1 \
  --api-key sk-oneapi-xxxxxx \
  --model gpt-4o

# 火山引擎通过代理
chainlesschain agent \
  --provider volcengine \
  --base-url https://your-proxy.com/volcengine/v3 \
  --model doubao-seed-1-6-251015

# 企业 Nginx 反向代理
chainlesschain agent \
  --provider openai \
  --base-url https://ai-gateway.company.com/v1 \
  --model gpt-4o

提示: --base-url 覆盖提供商默认地址,但保留 OpenAI 兼容的 API 格式。所有支持 /chat/completions 接口的中转站和代理均可使用。

Context Engineering 使用

> /task 重构认证模块

✓ Task set: 重构认证模块

> 查看当前进度

🤖 当前任务: 重构认证模块
[Context Engine 自动注入任务提醒 + 相关记忆 + 用户偏好]
...

> /stats

DB connected: true
Notes indexed: 42
Error history: 0
Active task: true

会话恢复

bash
# 第一次会话
chainlesschain agent
> 帮我写一个 API 服务
> /exit

# 恢复上次会话
chainlesschain agent --session session-17...
Resumed session session-17... (8 messages)
> 继续上次的工作

关键文件

  • packages/cli/src/commands/agent.js — 命令入口(含 --session 选项)
  • packages/cli/src/repl/agent-repl.js — 代理 REPL(9 工具 + 146 技能 + Plan Mode + Context Engineering)
  • packages/cli/src/lib/cli-context-engineering.js — Context Engineering 适配器(6 维注入 + 智能压缩)
  • packages/cli/src/lib/plan-mode.js — Plan Mode 实现
  • packages/cli/src/lib/instinct-manager.js — Instinct 学习引擎
  • packages/cli/src/lib/hierarchical-memory.js — 四层记忆系统
  • packages/cli/src/lib/bm25-search.js — BM25 搜索引擎
  • packages/cli/src/lib/session-manager.js — 会话持久化
  • packages/cli/src/lib/permanent-memory.js — 跨会话持久记忆(Daily Notes + MEMORY.md + BM25 混合搜索)
  • packages/cli/src/lib/autonomous-agent.js — ReAct 自主任务循环
  • packages/cli/src/lib/content-recommender.js — TF-IDF 工具相似度 + 工具链推荐
  • packages/cli/src/lib/hook-manager.js — Hook 管道(PreToolUse/PostToolUse/ToolError)
  • packages/cli/src/lib/slot-filler.js — SlotFiller 参数槽填充(意图检测 + 交互式补全)
  • packages/cli/src/lib/agent-core.js — Agent 核心业务逻辑(agentLoop 异步生成器)
  • packages/cli/src/runtime/bootstrap.js — 7 阶段无头启动

安全考虑

  • run_shell 工具可执行任意 Shell 命令,请在可信环境中使用
  • run_code 工具可执行 Python/Node.js/Bash 脚本,代码在临时文件中执行并自动清理
  • write_file / edit_file 可修改文件系统,建议在 Git 仓库中使用以便回滚
  • Plan Mode 默认只读,需用户审批后才执行写操作
  • API Key 仅存储在本地,不会通过工具调用泄露
  • Context Engineering 注入的记忆/笔记仅在本地处理,不泄露到外部

配置参考

Agent REPL 选项

javascript
// packages/cli/src/repl/agent-repl.js
{
  provider: "ollama",              // ollama | anthropic | openai | deepseek |
                                   // dashscope | mistral | gemini | volcengine
  model: "qwen2.5:7b",            // 模型名称
  baseUrl: "http://localhost:11434", // API 基础 URL
  apiKey: null,                    // API 密钥(云端提供商必填)
  sessionId: null,                 // 恢复指定会话 ID
  noRecallMemory: false,           // 禁用启动时记忆召回
  recallLimit: 5,                  // 启动时注入的记忆条数上限
  noStream: false,                 // 禁用流式输出渲染
  noParkOnExit: false,             // 退出时关闭而非 park 会话
  agentId: null,                   // 限定记忆召回范围的 agent ID
}

Context Engineering 选项

javascript
// packages/cli/src/lib/cli-context-engineering.js
{
  enableInstinct: true,            // 注入用户偏好(Instinct)
  enableMemory: true,              // 注入层次化记忆(top-5 相关记忆)
  enableBm25Notes: true,           // 注入 BM25 笔记搜索结果
  bm25TopK: 3,                     // BM25 返回结果数
  bm25Threshold: 0.5,              // BM25 相关性阈值
  enableTaskReminder: true,        // 注入任务目标提醒
  enablePermanentMemory: true,     // 注入跨会话持久记忆
  enableCompactionSummary: true,   // 注入压缩摘要
  compactKeepCount: 6,             // 智能压缩保留的消息对数
}

Hook 管道选项

javascript
// packages/cli/src/lib/hook-manager.js
// 通过 chainlesschain hook add 注册
{
  event: "PreToolUse",             // PreToolUse | PostToolUse | ToolError |
                                   // SessionStart | UserPromptSubmit | SessionEnd
  command: "node my-hook.js",      // 钩子命令
  priority: 0,                     // 执行优先级(数值越小越先执行)
  timeout: 5000,                   // 超时时间(ms)
}

Plan Mode 选项

javascript
// packages/cli/src/lib/plan-mode.js
{
  autoEnter: false,                // 是否在复杂任务时自动进入规划模式
  readOnlyTools: [                 // 规划阶段允许使用的只读工具
    "read_file", "search_files", "list_dir"
  ],
  requireApproval: true,           // 执行前必须用户审批
  enableDagExecution: true,        // 按 DAG 依赖拓扑顺序执行步骤
  enableRiskAssessment: true,      // 执行前显示风险评估报告
}

自主模式选项

javascript
// packages/cli/src/lib/autonomous-agent.js
{
  tokenBudget: 50000,              // 单目标最大 token 消耗
  maxSubtasks: 20,                 // 子任务数量上限
  autoRetry: true,                 // 工具失败时自动重试
  retryLimit: 3,                   // 单工具最大重试次数
}

性能指标

启动与初始化

指标数值说明
7 阶段无头启动(bootstrap.js~200msDB 初始化 + 配置加载 + 技能注册
Context Engineering 首次初始化~50msBM25 索引加载 + 记忆模型预热
环境检测(getEnvironmentInfo~30ms检测 Python/Node/Git,结果缓存
138 个技能元数据加载(stub)~15ms仅加载 YAML frontmatter,body 按需读取

工具执行性能

工具典型延迟备注
read_file< 5ms本地文件读取
write_file / edit_file< 10ms含 fsync
edit_file_hashed< 5ms哈希锚定,无需全文扫描
search_files10–200ms取决于代码库大小
run_shell视命令而定超时 60s,输出截断 30KB
run_code (Python/Node)500ms–5s含解释器启动开销
run_code + auto pip-install+5–15spip install 耗时
web_fetch500ms–3s含 DNS + TCP + 页面抓取
spawn_sub_agent200ms+独立上下文初始化

Context Engineering 注入开销

注入器典型延迟说明
Instinct< 2ms内存读取,已缓存
Memory(层次化记忆)5–20msBM25 + 向量相关性搜索
BM25 Notes10–30mstopK=3,threshold=0.5
Task Reminder< 1ms内存字段拼接
Permanent Memory5–15msMEMORY.md + Daily Notes 读取
Compaction Summary< 1ms内存字段拼接
6 维合计20–70msKV-Cache 稳定前缀可复用

智能压缩效果

指标数值
压缩率0.76–0.93
节省 token7–24%
压缩触发阈值消息数 ≥ 12
保留消息对数(默认)6 对

测试覆盖率

单元测试

✅ agent-core.test.js               - 66 测试  (agentLoop / executeTool / chatWithTools)
✅ hashline.test.js                  - 29 测试  (hashLine / annotateLines / findByHash / replaceByHash)
✅ agent-core-edit-hashed.test.js    - 12 测试  (edit_file_hashed handler)
✅ slot-filler.test.js               - 18 测试  (intent detection / slot filling / interaction)
✅ plan-mode.test.js                 - 22 测试  (DAG 执行 / 风险评估 / 审批流)
✅ autonomous-agent.test.js          - 20 测试  (ReAct 循环 / 目标分解 / 自动重试)
✅ context-engineering.test.js       - 24 测试  (6 维注入 / 智能压缩 / 优雅降级)
✅ session-hooks.test.js             - 15 测试  (SessionStart / UserPromptSubmit / SessionEnd)
✅ skill-mcp.test.js                 - 26 测试  (SKILL.md inline MCP / mount / unmount)

集成测试

✅ agent-repl-integration.test.js    - 18 测试  (完整 REPL 生命周期 + 会话恢复)
✅ run-code-integration.test.js      - 16 测试  (Python / Node / Bash 执行 + auto pip-install)
✅ context-engineering-e2e.test.js   - 12 测试  (6 维注入 × 有 DB / 无 DB 场景)

验证结果(v5.0.2.10)

验证项结果
agent-core 定向单测✅ 66/66
hashline 单测✅ 29/29
edit_file_hashed 单测✅ 12/12
slot-filler 单测✅ 18/18
plan-mode 单测✅ 22/22
session-hooks 单测✅ 15/15
skill-mcp 单测✅ 26/26
Agent REPL 集成✅ 18/18
run-code 集成✅ 16/16
CLI 本轮定向合计✅ 222/222

故障排查

问题解决方案
工具调用失败检查当前目录的文件权限
Plan Mode 不生效输入 /plan 手动进入规划模式
代理响应过慢切换到更快的模型(如 qwen2.5:7b)或使用云端 API
run_shell 权限不足检查当前用户的 Shell 执行权限
Context 注入无效果检查 DB 是否初始化(chainlesschain db init
--session 恢复失败确认 Session ID 存在(chainlesschain session list
记忆/笔记未注入使用 /stats 检查 DB 连接和索引状态
/auto 无响应检查 LLM 连接和 Token 预算
Hook 执行失败使用 chainlesschain hook stats 检查钩子状态

相关文档

基于 MIT 许可发布