AI编码助手、Clude Code 实现 cli
目的:这份规范用于强制统一工程质量与团队产出风格。任何实现/改动都必须能在本规范下被解释、被验收、被回归。
范围:Python 纯 CLI Code Agent(含 LLM、Tooling、Verification、Observability、Docs)。
run_turn)只负责调度,不得堆叠实现细节。Control Protocol(控制协议)、Hybrid Search(混合检索)。中文标题(English Title)。团队统一风格:Python 仅允许“声明前注释块(Declaration-leading Comment)”,并且必须紧贴声明;
禁止在类体/函数体内使用 Docstring(体内第一条三引号字符串)。
class/def 或常量定义上一行(不允许插入无关代码/空行)。@author(作者/责任人,Author)@date(日期,Date)@brief(一句话双语摘要,Brief)/** ... */ 放在声明前;参数 @param、返回 @return、备注 @note。/** ... */ 放在声明前;参数 @param、返回 @returns。#;示例配置必须包含中文注释,说明关键字段与推荐配置方式(敏感信息建议用环境变量)。"""
@author 你的名字(Author Name)
@date YYYY-MM-DD
@brief 中文标题(English Title)
功能说明(What & Why):
- 该类/函数做什么?为什么需要它?
执行流程(Flow):
- 1) ...
- 2) ...
参数(Params):
- xxx:中文解释(English Meaning),范围/默认值/示例
返回(Return):
- 中文解释(Return Meaning)
注意事项(Notes):
- 约束 1(Constraint 1)
- 约束 2(Constraint 2)
示例(Example):
...(可选)
"""
orchestrator / tooling / llm / verification / observability / docs核心原则:所有可配置参数必须集中到
src/clude_code/config/,禁止模块自管配置或硬编码。
| 规范项 | 说明 |
|---|---|
| 配置集中化 | 模块配置定义在 src/clude_code/config/config.py;工具配置统一在 src/clude_code/config/tools_config.py。 |
| 优先级 | 必须实现:环境变量 > 配置文件 > 代码默认值,且只能用 settings_customise_sources 实现,禁止 __init__ 手工合并导致优先级反转。 |
| 嵌套 env | 必须启用 env_nested_delimiter="__",确保 CLUDE_LLM__MAX_TOKENS 等嵌套项可生效。 |
| 敏感信息 | API Key/Token 禁止硬编码;日志必须脱敏(console/file 都不能明文泄露)。 |
| 注入时机 | 配置注入必须在初始化阶段完成(例如 AgentLoop.__init__),禁止运行时到处读 env/file。 |
| 文档化 | 新增配置项必须同步 .clude/.clude.example.yaml 中文注释与示例,并在 docs 说明。 |
| 规范项 | 说明 |
|---|---|
| 格式统一 | 主配置统一使用 YAML;JSON 仅允许历史兼容读取,不允许作为默认输出。 |
| 主配置位置 | 主配置固定:~/.clude/.clude.yaml。 |
| 兼容读取 | 允许兼容读取:./.clude/.clude.yaml、./clude.yaml,但保存/生成必须写入用户目录主配置。 |
| 中文注释保留 | 生成/保存 YAML 必须保留中文注释:以 .clude/.clude.example.yaml 为模板按路径替换值(禁止直接 dump 丢注释)。 |
| 顺序一致 | 顶层 key 顺序必须与 .clude/.clude.example.yaml 一致,便于 diff 与排查。 |
| 默认值来源 | “生成默认配置”必须来自代码默认值(不受 env/file 污染),推荐 model_construct()。 |
| 示例敏感字段 | .clude/.clude.example.yaml 不得提交真实密钥,必须用空字符串/占位符并注明推荐环境变量。 |
| 规范项 | 说明 |
|---|---|
| 工具独立配置 | 每个工具必须有独立配置类(至少 enabled、log_to_file),统一在 tools_config.py。 |
| 新增工具默认配置必备 | 新增工具必须在全局 ToolConfigs 增加默认字段,保证“工具可用即有默认配置”。 |
| 统一注入 | 工具配置只能通过 set_tool_configs(cfg) 注入、get_tool_configs() 读取;禁止工具模块直接读 env/file。 |
| 统一日志 | 工具日志必须走统一 helper(如 tooling/logger_helper.py),并遵循全局日志配置与工具 log_to_file。 |
| 错误反馈 | 工具错误必须提供可操作信息;敏感信息禁止出现在日志明文。 |
核心原则:所有发送给 LLM 的长篇提示词(System Prompt、Planning Prompt、Step Prompt 等)必须外置到
src/clude_code/prompts/目录,严禁在逻辑代码中硬编码长字符串。
| 规范项 | 说明 |
|---|---|
| 目录结构 | 提示词存放于 src/clude_code/prompts/,按功能分子目录(如 agent_loop/、classifier/)。 |
| 加载约定 | 使用 from clude_code.prompts import read_prompt, render_prompt 加载。 |
| 文件格式 | 纯文本使用 .md 或 .txt;带变量模板使用 .j2(即便不依赖 jinja2 也要保持扩展名一致性)。 |
| 禁止硬编码 | 超过 3 行的 LLM 提示词禁止出现在 .py 逻辑文件中。 |
| 解耦 | 逻辑代码只负责准备变量(Vars),不负责提示词的遣词造句。 |
强制要求:每次新增/修改涉及 LLM 交互的代码时,必须检查以下事项:
| 检查项 | 通过标准 |
|---|---|
| 新增提示词是否外置 | 新增的任何 LLM 提示词(包括重试提示、纠错提示、反馈模板等)必须创建对应的 .md 或 .j2 文件到 prompts/ 目录。 |
| 硬编码检查 | 代码中不得出现超过 3 行的字符串字面量用于 LLM 交互(含拼接的多行字符串)。 |
| 变量传递 | 提示词中的动态内容(如 error_message、step_id)必须通过 render_prompt() 的关键字参数传入,不得在 .py 中拼接。 |
| 命名规范 | 提示词文件命名必须体现用途(如 plan_patch_retry.j2、invalid_step_output_retry.md),不得使用 prompt1.md 等无意义命名。 |
| 目录归属 | 提示词文件必须放到对应功能子目录(agent_loop/、classifier/、tools/ 等),不得直接放在 prompts/ 根目录。 |
src/clude_code/prompts/
├── __init__.py # 导出 read_prompt, render_prompt
├── loader.py # 加载逻辑
├── README.md # 目录说明
├── agent_loop/
│ ├── system_base.md # Agent 基础系统提示词
│ ├── local_agent_runtime_system.md # 本地运行时系统提示词
│ ├── planning_prompt.j2 # 规划阶段提示词模板
│ ├── execute_step_prompt.j2 # 步骤执行提示词模板
│ ├── replan_prompt.j2 # 重规划提示词模板
│ ├── plan_patch_retry.j2 # PlanPatch 纠错重试提示词
│ ├── plan_parse_retry.md # Plan 解析重试提示词
│ └── invalid_step_output_retry.md # 无效步骤输出重试提示词
└── classifier/
└── intent_classify_prompt.txt # 意图分类提示词
目标:支持两个“搜索资料来源”(Search Provider),可通过配置选择;默认优先使用 Open-WebSearch MCP,失败自动回退 Serper。
open_websearch_mcp:优先(Preferred),用于接入本地/自建的 Open-WebSearch MCP 服务器serper:备用(Fallback),用于调用 Serper(Google 搜索 API)search.websearch_providers 指定优先级列表(例如 ["open_websearch_mcp", "serper"])open_websearch_mcp > serperCLUDE_SEARCH__SERPER_API_KEY、CLUDE_SEARCH__OPEN_WEBSEARCH_MCP_API_KEYexc_info=True)、原始上下文,支持滚动。pip install -e ".[dev]"ruff format .ruff check .mypy src--yes。allow_network=False 默认关闭网络。feat: / fix: / refactor:。README/docs。核心原则:classic/enhanced/opencode 三种模式展示的核心信息必须语义一致。
| 规范项 | 说明 |
|---|---|
| 输出内容同源 | 系统提示词/用户提示词、LLM 请求/响应、工具调用/结果必须在所有 UI 中可见。 |
| 事件处理对齐 | 新增事件必须同步实现三种 UI 的渲染。 |
| 颜色语义统一 | system/user/assistant/error/warning/success 颜色语义一致。 |