{"repo": "1207575273/ccode", "files": {"cCli/README.md": {"77b80f9a4d92437741efa6136b6478bf10199ef5": {"t": 1785674071.5648134, "n": 10219, "h": "cffd49522ded29b9", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型,内置 Web Dashboard 与 **A2A 分布式 Agent 协作**。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.yml`(YAML 格式,支持注释),填入 API Key 即可使用:\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nproviders:\n glm:\n apiKey: your-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n```\n\n> 本项目全程在智谱 GLM 模型下开发与测试。只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n> **从旧版升级**:早期版本用 `~/.ccode/config.json`。首次启动会**自动迁移**到 `config.yml`(写回校验无损后才切换),原文件备份为 `config.json.bak`,无需手动处理。\n>\n> **自定义配置根目录**:设置环境变量 `CCODE_HOME` 可把 `~/.ccode` 整体重定向到别处(用于多环境隔离 / 测试)。\n\n### config.yml 完整字段说明\n\n```yaml\n# ────── 全局设置 ──────\ndefaultProvider: glm # 默认使用的 Provider 名称(必须是下面 providers 的某个 key)\ndefaultModel: glm-5 # 默认模型(必须在对应 provider.models 列表中)\nsubAgentModel: glm-4.7 # [可选] 子 Agent 默认模型,可跨 Provider;留空则继承主 Agent\nstatusBar: true # [可选] 是否显示底部状态栏(token 消耗、模型名、A2A 状态等)\n\n# ────── Provider 配置 ──────\nproviders:\n : # 自定义名称,如 glm / anthropic / my-proxy\n apiKey: sk-xxx # [必填] API 密钥\n baseURL: https://... # [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n protocol: openai # [可选] 协议类型:openai(默认) | anthropic\n models: # [必填] 该 provider 可用的模型列表\n - model-a\n - model-b\n visionModels: # [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n - model-a\n\n# ────── 记忆系统(可选,RAG 向量检索)──────\nmemory:\n enabled: true\n embedding:\n apiKey: your-embedding-api-key\n baseURL: https://your-embedding-api-base-url/v4\n model: embedding-3\n dimension: 2048 # 向量维度,需与 embedding 模型匹配\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `subAgentModel` | string | 否 | 子 Agent 默认模型,可跨 Provider;留空继承主 Agent |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `openai`(默认)或 `anthropic`。仅 Anthropic 官方需设为 `anthropic` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空 |\n| `memory.enabled` | boolean | 否 | 是否开启 RAG 记忆系统 |\n| `memory.embedding.*` | object | 否 | embedding 向量服务配置(apiKey / baseURL / model / dimension) |\n\n
\n多 Provider 配置示例\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nproviders:\n glm:\n apiKey: your-zhipu-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n anthropic:\n apiKey: sk-ant-xxx\n protocol: anthropic\n models:\n - claude-sonnet-4-20250514\n visionModels:\n - claude-sonnet-4-20250514\n deepseek:\n apiKey: sk-xxx\n baseURL: https://api.deepseek.com/v1\n models:\n - deepseek-chat\n - deepseek-reasoner\n openai:\n apiKey: sk-xxx\n models:\n - gpt-4o\n - gpt-4o-mini\n visionModels:\n - gpt-4o\n ollama:\n apiKey: ollama\n baseURL: http://localhost:11434/v1\n models:\n - qwen2.5:7b\n - deepseek-r1:14b\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web\n```\n\n浏览器打开 `http://localhost:9800`,获得 6 大管理页面:\n\n#### 1. 总览大盘(Overview)\n\n- 6 大核心指标卡片:调用次数、输入/输出/缓存 Token、总费用\n- 趋势图表(Token + 费用曲线)、Provider / 模型分布饼图\n- 时间范围:当日 / 本周 / 本月 / 自定义日期\n\n#### 2. 实时对话(Chat)\n\n- Web 端直接聊天,Markdown + 代码高亮\n- CLI ↔ Web 双向实时同步\n- 工具调用可视化(名称、参数、结果、耗时)\n- 危险工具权限确认弹窗、用户问卷表单\n- 流式输出 + 思考中状态提示\n\n#### 3. 对话历史(Conversations)\n\n- 全量会话列表、消息回放、子 Agent 快照\n- 一键恢复对话、搜索过滤\n\n#### 4. Agent 网格(Agents)— A2A 协作视图\n\n- 本机活跃会话 + 远程已信任 Agent 的列表与拓扑图\n- 每个会话节点的**标准 A2A 端点浮层**(地址可复制、可打开真实 AgentCard)\n- **被调活动聚合**:谁正在/曾被谁调用,跨进程全景可见\n\n#### 5. 设置管理(Settings)\n\n- Provider 在线配置(apiKey / baseURL / 模型 / Vision 标记)\n- 模型拖拽排序、一键连通性测试\n- 保存后自动广播到所有 CLI 实例,无需重启\n- 计价规则 CRUD(四维价格 + 多币种)\n- 插件 & MCP Server 状态管理\n\n#### 6. 系统日志(Logs)\n\n- Agent 运行诊断、系统事件追踪\n\n**架构**:多 CLI 平等连接 → Bridge Server(纯路由器)→ Web SPA,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n### Agent 引擎\n\n- **多轮自动循环** — LLM → 工具执行 → 下一轮,AsyncGenerator 事件驱动\n- **内置工具集** — 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、远程 Agent 委托、任务管理\n- **并行工具执行** — 多个 tool_calls 自动并行,安全/危险分类策略\n- **子 Agent (SubAgent)** — general / explore / plan 三种类型,`Ctrl+B` 实时查看执行面板\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n\n### A2A 分布式 Agent 协作(1.0 新增)\n\n让多个 CCode 会话 / 外部 Agent 互相寻址、互相委托任务,并在界面上**双向可观测**——协作的两端都看得见。\n\n- **委托其他 Agent** — `dispatch_remote_agent` 工具把任务委托给本机其他会话或远程 A2A Agent,结果流式返回\n- **本机会话网格** — 每个会话自动起独立 A2A 节点(动态端口),基于 `~/.ccode/instances/` lockfile 自动发现,零配置;`/a2a list` 查看本机活跃会话\n- **标准 A2A Server** — 暴露符合 A2A 0.3.x 规范的端点,可被任意标准 A2A 客户端发现并调用:\n - `GET /.well-known/agent-card.json`(AgentCard,`preferredTransport: JSONRPC`)\n - `POST /` — JSON-RPC `message/send`、`message/stream`(SSE)\n - 任务生命周期 `tasks/get`、`tasks/cancel`、`tasks/resubscribe`\n- **双向可观测** — 调用方与被调方都以 SubAgent 卡片展示执行过程(CLI 状态卡 + Web 完整时间轴),状态栏轻量提示\"被调用\",且**不打断主对话**\n- **信任白名单** — 远程 Agent 需 `/a2a add ` 显式信任后才能调用(安全底线);本机会话同机受信,无需配置\n\n> 本机互调统一走 `127.0.0.1`。跨机器协作(局域网 IP + 鉴权)规划在后续版本。\n\n### 多模型运行时切换\n\n运行时 `/model` 一键切换,不重启、不丢上下文:\n\n| Provider | 协议 | 模型示例 |\n|----------|------|---------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash |\n| Ollama | OpenAI 兼容 | 任意本地模型 |\n| **任意服务** | OpenAI 兼容 | 配置 `baseURL` 即可接入 |\n\n### 对话持久化与恢复\n\n- **自动持久化** — 每次对话写入 JSONL 事件链\n- **会话恢复** — `ccode --resume` 或 `/resume` 面板恢复历史会话\n- **对话分支** — `/fork` 从任意节点创建新分支\n- **Web 恢复** — 历史页面一键恢复对话\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n### Token 计量与计费\n\n- 四维统计:input / output / cache_read / cache_write\n- 多币种(USD / CNY),按 provider + model 匹配计价规则\n- `/usage` 查看会话/今日/本月统计\n- Web Dashboard 趋势图表\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/.mcp.json(也会读取 ~/.claude.json、~/.mcp.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移方式:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/.mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/a2a` | — | A2A 远程 Agent 白名单(list / add / remove)+ 本机会话 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.yml` | Provider / Model / 记忆(旧 config.json 自动迁移) |\n| MCP | `~/.ccode/.mcp.json` | MCP Server 连接 |\n| A2A 白名单 | `~/.ccode/a2a-trusted.json` | 已信任的远程 A2A Agent |\n| A2A 节点发现 | `~/.ccode/instances/` | 本机会话 lockfile(自动写入/清理) |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n> 全部位于 `~/.ccode/`(可用 `CCODE_HOME` 环境变量重定向整个目录)。\n\n## 文档\n\n详细架构与能力文档见 [GitHub docs/](https://github.com/1207575273/CCode/tree/main/docs)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "e7a00a03a9e65cfdfeccbd383ca1836112f68b6b": {"t": 1785764470.496073, "n": 10219, "h": "cffd49522ded29b9", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型,内置 Web Dashboard 与 **A2A 分布式 Agent 协作**。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.yml`(YAML 格式,支持注释),填入 API Key 即可使用:\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nproviders:\n glm:\n apiKey: your-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n```\n\n> 本项目全程在智谱 GLM 模型下开发与测试。只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n> **从旧版升级**:早期版本用 `~/.ccode/config.json`。首次启动会**自动迁移**到 `config.yml`(写回校验无损后才切换),原文件备份为 `config.json.bak`,无需手动处理。\n>\n> **自定义配置根目录**:设置环境变量 `CCODE_HOME` 可把 `~/.ccode` 整体重定向到别处(用于多环境隔离 / 测试)。\n\n### config.yml 完整字段说明\n\n```yaml\n# ────── 全局设置 ──────\ndefaultProvider: glm # 默认使用的 Provider 名称(必须是下面 providers 的某个 key)\ndefaultModel: glm-5 # 默认模型(必须在对应 provider.models 列表中)\nsubAgentModel: glm-4.7 # [可选] 子 Agent 默认模型,可跨 Provider;留空则继承主 Agent\nstatusBar: true # [可选] 是否显示底部状态栏(token 消耗、模型名、A2A 状态等)\n\n# ────── Provider 配置 ──────\nproviders:\n : # 自定义名称,如 glm / anthropic / my-proxy\n apiKey: sk-xxx # [必填] API 密钥\n baseURL: https://... # [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n protocol: openai # [可选] 协议类型:openai(默认) | anthropic\n models: # [必填] 该 provider 可用的模型列表\n - model-a\n - model-b\n visionModels: # [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n - model-a\n\n# ────── 记忆系统(可选,RAG 向量检索)──────\nmemory:\n enabled: true\n embedding:\n apiKey: your-embedding-api-key\n baseURL: https://your-embedding-api-base-url/v4\n model: embedding-3\n dimension: 2048 # 向量维度,需与 embedding 模型匹配\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `subAgentModel` | string | 否 | 子 Agent 默认模型,可跨 Provider;留空继承主 Agent |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `openai`(默认)或 `anthropic`。仅 Anthropic 官方需设为 `anthropic` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空 |\n| `memory.enabled` | boolean | 否 | 是否开启 RAG 记忆系统 |\n| `memory.embedding.*` | object | 否 | embedding 向量服务配置(apiKey / baseURL / model / dimension) |\n\n
\n多 Provider 配置示例\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nproviders:\n glm:\n apiKey: your-zhipu-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n anthropic:\n apiKey: sk-ant-xxx\n protocol: anthropic\n models:\n - claude-sonnet-4-20250514\n visionModels:\n - claude-sonnet-4-20250514\n deepseek:\n apiKey: sk-xxx\n baseURL: https://api.deepseek.com/v1\n models:\n - deepseek-chat\n - deepseek-reasoner\n openai:\n apiKey: sk-xxx\n models:\n - gpt-4o\n - gpt-4o-mini\n visionModels:\n - gpt-4o\n ollama:\n apiKey: ollama\n baseURL: http://localhost:11434/v1\n models:\n - qwen2.5:7b\n - deepseek-r1:14b\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web\n```\n\n浏览器打开 `http://localhost:9800`,获得 6 大管理页面:\n\n#### 1. 总览大盘(Overview)\n\n- 6 大核心指标卡片:调用次数、输入/输出/缓存 Token、总费用\n- 趋势图表(Token + 费用曲线)、Provider / 模型分布饼图\n- 时间范围:当日 / 本周 / 本月 / 自定义日期\n\n#### 2. 实时对话(Chat)\n\n- Web 端直接聊天,Markdown + 代码高亮\n- CLI ↔ Web 双向实时同步\n- 工具调用可视化(名称、参数、结果、耗时)\n- 危险工具权限确认弹窗、用户问卷表单\n- 流式输出 + 思考中状态提示\n\n#### 3. 对话历史(Conversations)\n\n- 全量会话列表、消息回放、子 Agent 快照\n- 一键恢复对话、搜索过滤\n\n#### 4. Agent 网格(Agents)— A2A 协作视图\n\n- 本机活跃会话 + 远程已信任 Agent 的列表与拓扑图\n- 每个会话节点的**标准 A2A 端点浮层**(地址可复制、可打开真实 AgentCard)\n- **被调活动聚合**:谁正在/曾被谁调用,跨进程全景可见\n\n#### 5. 设置管理(Settings)\n\n- Provider 在线配置(apiKey / baseURL / 模型 / Vision 标记)\n- 模型拖拽排序、一键连通性测试\n- 保存后自动广播到所有 CLI 实例,无需重启\n- 计价规则 CRUD(四维价格 + 多币种)\n- 插件 & MCP Server 状态管理\n\n#### 6. 系统日志(Logs)\n\n- Agent 运行诊断、系统事件追踪\n\n**架构**:多 CLI 平等连接 → Bridge Server(纯路由器)→ Web SPA,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n### Agent 引擎\n\n- **多轮自动循环** — LLM → 工具执行 → 下一轮,AsyncGenerator 事件驱动\n- **内置工具集** — 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、远程 Agent 委托、任务管理\n- **并行工具执行** — 多个 tool_calls 自动并行,安全/危险分类策略\n- **子 Agent (SubAgent)** — general / explore / plan 三种类型,`Ctrl+B` 实时查看执行面板\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n\n### A2A 分布式 Agent 协作(1.0 新增)\n\n让多个 CCode 会话 / 外部 Agent 互相寻址、互相委托任务,并在界面上**双向可观测**——协作的两端都看得见。\n\n- **委托其他 Agent** — `dispatch_remote_agent` 工具把任务委托给本机其他会话或远程 A2A Agent,结果流式返回\n- **本机会话网格** — 每个会话自动起独立 A2A 节点(动态端口),基于 `~/.ccode/instances/` lockfile 自动发现,零配置;`/a2a list` 查看本机活跃会话\n- **标准 A2A Server** — 暴露符合 A2A 0.3.x 规范的端点,可被任意标准 A2A 客户端发现并调用:\n - `GET /.well-known/agent-card.json`(AgentCard,`preferredTransport: JSONRPC`)\n - `POST /` — JSON-RPC `message/send`、`message/stream`(SSE)\n - 任务生命周期 `tasks/get`、`tasks/cancel`、`tasks/resubscribe`\n- **双向可观测** — 调用方与被调方都以 SubAgent 卡片展示执行过程(CLI 状态卡 + Web 完整时间轴),状态栏轻量提示\"被调用\",且**不打断主对话**\n- **信任白名单** — 远程 Agent 需 `/a2a add ` 显式信任后才能调用(安全底线);本机会话同机受信,无需配置\n\n> 本机互调统一走 `127.0.0.1`。跨机器协作(局域网 IP + 鉴权)规划在后续版本。\n\n### 多模型运行时切换\n\n运行时 `/model` 一键切换,不重启、不丢上下文:\n\n| Provider | 协议 | 模型示例 |\n|----------|------|---------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash |\n| Ollama | OpenAI 兼容 | 任意本地模型 |\n| **任意服务** | OpenAI 兼容 | 配置 `baseURL` 即可接入 |\n\n### 对话持久化与恢复\n\n- **自动持久化** — 每次对话写入 JSONL 事件链\n- **会话恢复** — `ccode --resume` 或 `/resume` 面板恢复历史会话\n- **对话分支** — `/fork` 从任意节点创建新分支\n- **Web 恢复** — 历史页面一键恢复对话\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n### Token 计量与计费\n\n- 四维统计:input / output / cache_read / cache_write\n- 多币种(USD / CNY),按 provider + model 匹配计价规则\n- `/usage` 查看会话/今日/本月统计\n- Web Dashboard 趋势图表\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/.mcp.json(也会读取 ~/.claude.json、~/.mcp.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移方式:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/.mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/a2a` | — | A2A 远程 Agent 白名单(list / add / remove)+ 本机会话 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.yml` | Provider / Model / 记忆(旧 config.json 自动迁移) |\n| MCP | `~/.ccode/.mcp.json` | MCP Server 连接 |\n| A2A 白名单 | `~/.ccode/a2a-trusted.json` | 已信任的远程 A2A Agent |\n| A2A 节点发现 | `~/.ccode/instances/` | 本机会话 lockfile(自动写入/清理) |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n> 全部位于 `~/.ccode/`(可用 `CCODE_HOME` 环境变量重定向整个目录)。\n\n## 文档\n\n详细架构与能力文档见 [GitHub docs/](https://github.com/1207575273/CCode/tree/main/docs)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "6aae8b0170a90928fad3b72ce582f17a07877041": {"t": 1785764471.7821429, "n": 8499, "h": "8a1d33c2ee5cf779", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`,填入 API Key 即可使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n> 本项目全程在智谱 GLM 模型下开发与测试。只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web\n```\n\n浏览器打开 `http://localhost:9800`,获得 5 大管理页面:\n\n#### 1. 总览大盘(Overview)\n\n- 6 大核心指标卡片:调用次数、输入/输出/缓存 Token、总费用\n- 趋势图表(Token + 费用曲线)、Provider / 模型分布饼图\n- 时间范围:当日 / 本周 / 本月 / 自定义日期\n\n#### 2. 实时对话(Chat)\n\n- Web 端直接聊天,Markdown + 代码高亮\n- CLI ↔ Web 双向实时同步\n- 工具调用可视化(名称、参数、结果、耗时)\n- 危险工具权限确认弹窗、用户问卷表单\n- 流式输出 + 思考中状态提示\n\n#### 3. 对话历史(Conversations)\n\n- 全量会话列表、消息回放、子 Agent 快照\n- 一键恢复对话、搜索过滤\n\n#### 4. 设置管理(Settings)\n\n- Provider 在线配置(apiKey / baseURL / 模型 / Vision 标记)\n- 模型拖拽排序、一键连通性测试\n- 保存后自动广播到所有 CLI 实例,无需重启\n- 计价规则 CRUD(四维价格 + 多币种)\n- 插件 & MCP Server 状态管理\n\n#### 5. 系统日志(Logs)\n\n- Agent 运行诊断、系统事件追踪\n\n**架构**:多 CLI 平等连接 → Bridge Server(纯路由器)→ Web SPA,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n### Agent 引擎\n\n- **多轮自动循环** — LLM → 工具执行 → 下一轮,AsyncGenerator 事件驱动\n- **16 个内置工具** — 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理\n- **并行工具执行** — 多个 tool_calls 自动并行,安全/危险分类策略\n- **子 Agent (SubAgent)** — general / explore / plan 三种类型,`Ctrl+B` 实时查看执行面板\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n\n### 多模型运行时切换\n\n运行时 `/model` 一键切换,不重启、不丢上下文:\n\n| Provider | 协议 | 模型示例 |\n|----------|------|---------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash |\n| Ollama | OpenAI 兼容 | 任意本地模型 |\n| **任意服务** | OpenAI 兼容 | 配置 `baseURL` 即可接入 |\n\n### 对话持久化与恢复\n\n- **自动持久化** — 每次对话写入 JSONL 事件链\n- **会话恢复** — `ccode --resume` 或 `/resume` 面板恢复历史会话\n- **对话分支** — `/fork` 从任意节点创建新分支\n- **Web 恢复** — 历史页面一键恢复对话\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n### Token 计量与计费\n\n- 四维统计:input / output / cache_read / cache_write\n- 多币种(USD / CNY),按 provider + model 匹配计价规则\n- `/usage` 查看会话/今日/本月统计\n- Web Dashboard 趋势图表\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移方式:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [GitHub docs/](https://github.com/1207575273/CCode/tree/main/docs)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "e4d375d0e15969d11015435fe5107560ff1504b9": {"t": 1785764473.0799265, "n": 8074, "h": "e9ce8cb4f2db7388", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`,填入 API Key 即可使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n> 本项目全程在智谱 GLM 模型下开发与测试。只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web UI\n```\n\n浏览器打开 `http://localhost:9800`,提供:\n\n- **总览大盘** — Token 消耗/费用统计、趋势图表、模型分布\n- **实时对话** — Web 端聊天,消息/工具/权限双向实时同步\n- **对话历史** — 会话列表、消息回放、一键恢复对话\n- **设置管理** — Provider 配置、模型管理、计价规则、MCP 管理\n- **系统日志** — 诊断与调试\n\n多个 CLI 实例可同时连接同一个 Bridge Server,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n### Agent 引擎\n\n- **多轮自动循环** — LLM → 工具执行 → 下一轮,AsyncGenerator 事件驱动\n- **16 个内置工具** — 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理\n- **并行工具执行** — 多个 tool_calls 自动并行,安全/危险分类策略\n- **子 Agent (SubAgent)** — general / explore / plan 三种类型,`Ctrl+B` 实时查看执行面板\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n\n### 多模型运行时切换\n\n运行时 `/model` 一键切换,不重启、不丢上下文:\n\n| Provider | 协议 | 模型示例 |\n|----------|------|---------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash |\n| Ollama | OpenAI 兼容 | 任意本地模型 |\n| **任意服务** | OpenAI 兼容 | 配置 `baseURL` 即可接入 |\n\n### 对话持久化与恢复\n\n- **自动持久化** — 每次对话写入 JSONL 事件链\n- **会话恢复** — `ccode --resume` 或 `/resume` 面板恢复历史会话\n- **对话分支** — `/fork` 从任意节点创建新分支\n- **Web 恢复** — 历史页面一键恢复对话\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n### Token 计量与计费\n\n- 四维统计:input / output / cache_read / cache_write\n- 多币种(USD / CNY),按 provider + model 匹配计价规则\n- `/usage` 查看会话/今日/本月统计\n- Web Dashboard 趋势图表\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移方式:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [GitHub docs/](https://github.com/1207575273/CCode/tree/main/docs)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "d72b88e08955726da36208adf604c7a3fce9c4c1": {"t": 1785764474.3580463, "n": 6432, "h": "86af9f17ff101913", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`,填入 API Key 即可使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n> 本项目全程在智谱 GLM 模型下开发与测试。只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n
\n更多 Provider 配置示例\n\n```jsonc\n{\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web UI\n```\n\n浏览器打开 `http://localhost:9800`,提供:\n\n- **总览大盘** — Token 消耗/费用统计、趋势图表、模型分布\n- **实时对话** — Web 端聊天,消息/工具/权限双向实时同步\n- **对话历史** — 会话列表、消息回放、一键恢复对话\n- **设置管理** — Provider 配置、模型管理、计价规则、MCP 管理\n- **系统日志** — 诊断与调试\n\n多个 CLI 实例可同时连接同一个 Bridge Server,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n### Agent 引擎\n\n- **多轮自动循环** — LLM → 工具执行 → 下一轮,AsyncGenerator 事件驱动\n- **16 个内置工具** — 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理\n- **并行工具执行** — 多个 tool_calls 自动并行,安全/危险分类策略\n- **子 Agent (SubAgent)** — general / explore / plan 三种类型,`Ctrl+B` 实时查看执行面板\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n\n### 多模型运行时切换\n\n运行时 `/model` 一键切换,不重启、不丢上下文:\n\n| Provider | 协议 | 模型示例 |\n|----------|------|---------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash |\n| Ollama | OpenAI 兼容 | 任意本地模型 |\n| **任意服务** | OpenAI 兼容 | 配置 `baseURL` 即可接入 |\n\n### 对话持久化与恢复\n\n- **自动持久化** — 每次对话写入 JSONL 事件链\n- **会话恢复** — `ccode --resume` 或 `/resume` 面板恢复历史会话\n- **对话分支** — `/fork` 从任意节点创建新分支\n- **Web 恢复** — 历史页面一键恢复对话\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n### Token 计量与计费\n\n- 四维统计:input / output / cache_read / cache_write\n- 多币种(USD / CNY),按 provider + model 匹配计价规则\n- `/usage` 查看会话/今日/本月统计\n- Web Dashboard 趋势图表\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移方式:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [GitHub docs/](https://github.com/1207575273/CCode/tree/main/docs)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "9b6c53f0c35ac21cf777cee5e0fa712d5ddcdb04": {"t": 1785764475.883356, "n": 2102, "h": "348e5c6f3e618931", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n安装后执行 `ccode` 进入交互式对话。\n\n```bash\n# 或 npx 直接运行(不安装)\nnpx ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`,填入你的 API Key 即可使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n支持任意 OpenAI 兼容协议的模型(GLM、DeepSeek、Ollama 等),也支持 Anthropic 原生协议(Claude)。\n\n## 核心能力\n\n- **多模型切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **16 个内置工具** — 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划\n- **MCP 协议** — 动态注册外部工具(stdio / SSE / streamable-http)\n- **Skills 生态** — 对接 [skills.sh](https://skills.sh/) 275+ 开放 skill\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n- **对话持久化** — `--resume` 恢复历史会话 + `/fork` 分支\n- **SubAgent** — 后台并行运行,`Ctrl+B` 实时查看\n- **Claude Code 兼容** — CLAUDE.md、.mcp.json、插件目录零迁移\n\n## 快捷键\n\n| 操作 | 按键 | 备用按键 |\n|------|------|----------|\n| 提交输入 | Enter | — |\n| 换行(多行输入) | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到当前行首 | Home | Ctrl+A |\n| 跳到当前行尾 | End | Ctrl+E |\n| 查看 SubAgent 面板 | Ctrl+B | — |\n\n## 常用指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 切换模型 |\n| `/compact` | 压缩上下文 |\n| `/context` | 查看上下文使用率 |\n| `/resume` | 恢复历史会话 |\n| `/usage` | Token 用量统计 |\n| `/help` | 查看所有指令 |\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n\n## 文档\n\n详细文档见 [GitHub](https://github.com/1207575273/CCode)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "7d27938d6e485118ce0fe0eecbec8969fcb6d9f0": {"t": 1785764477.0669188, "n": 1875, "h": "e38c63bbb636cd2b", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n[![GitHub](https://img.shields.io/github/stars/1207575273/CCode)](https://github.com/1207575273/CCode)\n\n## 安装\n\n```bash\nnpm install -g ccode-cli\n```\n\n安装后执行 `ccode` 进入交互式对话。\n\n```bash\n# 或 npx 直接运行(不安装)\nnpx ccode-cli\n```\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`,填入你的 API Key 即可使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n支持任意 OpenAI 兼容协议的模型(GLM、DeepSeek、Ollama 等),也支持 Anthropic 原生协议(Claude)。\n\n## 核心能力\n\n- **多模型切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **16 个内置工具** — 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划\n- **MCP 协议** — 动态注册外部工具(stdio / SSE / streamable-http)\n- **Skills 生态** — 对接 [skills.sh](https://skills.sh/) 275+ 开放 skill\n- **上下文管理** — `/compact` 三种压缩策略 + auto-compact\n- **对话持久化** — `--resume` 恢复历史会话 + `/fork` 分支\n- **SubAgent** — 后台并行运行,`Ctrl+B` 实时查看\n- **Claude Code 兼容** — CLAUDE.md、.mcp.json、插件目录零迁移\n\n## 常用指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 切换模型 |\n| `/compact` | 压缩上下文 |\n| `/context` | 查看上下文使用率 |\n| `/resume` | 恢复历史会话 |\n| `/usage` | Token 用量统计 |\n| `/help` | 查看所有指令 |\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n\n## 文档\n\n详细文档见 [GitHub](https://github.com/1207575273/CCode)\n\n## License\n\n[BSL 1.1](https://github.com/1207575273/CCode/blob/main/LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}}, "README.md": {"77b80f9a4d92437741efa6136b6478bf10199ef5": {"t": 1785674072.0335696, "n": 14119, "h": "1115ee761a996928", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\n> 不是 demo 级别的玩具,是真正在**生产环境**跑出结果的工具。\n\nCCode 已在**多家企业**内部由一线工程师实际使用,独立完成真实业务需求开发:\n\n| 企业 | 行业 | 验证场景 | 模型 |\n|------|------|---------|------|\n| **某互联网大厂** | 在线教育 / 数字出版 | 企业级后台管理系统全链路需求开发 | GLM-5 |\n| **某 A 股上市公司** | 科技 | 前端 + 后端 + 复杂业务需求 | GLM-5 |\n| **CCode 自身** | 开源工具 | 用 CCode 开发 CCode(自举) | GLM-5 / GLM-4.7 |\n\n### 大厂实战案例:企业级后台系统需求交付\n\n以下截图来自**某互联网大厂**内部后台管理系统。工程师使用 CCode + GLM-5 独立完成了一个横跨多模块的\"资源语言\"特性开发 — 从列表筛选、详情展示、表单新增、批量操作到需求管理全链路,**一个人 + CCode 完成了原本需要多人协作的需求**:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

列表页:新增资源语言筛选项 + 批量设置入口

详情展开:教材语言字段展示 + 批量导出/Json导入

新增表单:资源语言字段联动 + 提交确认逻辑

需求管理:创建需求弹窗 + 多语言选项

多步骤流程表单:需求提报编辑 + 语言联动

需求列表:1646条数据 + 语言筛选 + 分页
\n\n### 自举案例:用 CCode 开发 CCode\n\nCCode 的 SubAgent 子 Agent 系统、Web Dashboard、记忆系统等核心模块,均由 CCode 自身驱动开发完成。以下是通过 Web Dashboard 会话回放功能录制的真实开发过程:\n\n\n\nCCode 在 Web Dashboard 中回放自举开发 SubAgent 的完整会话过程 — 从分析需求、阅读代码、到实现功能全部由 Agent 自主完成\n\n**覆盖能力**:\n\n- **前端** — React / Vue 组件开发、复杂表单联动、列表筛选、弹窗交互、多步骤流程\n- **后端** — Java Spring Boot 服务、API 接口设计、数据库字段变更与迁移\n- **全链路** — 从数据库 → API → 前端页面的完整功能闭环,跨模块一致性保障\n\n> 完整案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.yml`(YAML 格式,支持注释)。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nsubAgentModel: glm-4.7 # [可选] 子 Agent 使用的模型,不配则继承主 Agent\nproviders:\n glm:\n apiKey: your-zhipu-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.yml`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n> **从旧版升级**:早期版本用 `~/.ccode/config.json`,首次启动会**自动迁移**到 `config.yml`(写回校验无损后才切换),原文件备份为 `config.json.bak`。设置环境变量 `CCODE_HOME` 可把整个 `~/.ccode` 目录重定向到别处。\n\n### config.yml 完整字段说明\n\n```yaml\n# ────── 全局设置 ──────\ndefaultProvider: glm # 默认使用的 Provider 名称\ndefaultModel: glm-5 # 默认模型(必须在对应 provider.models 列表中)\nsubAgentModel: glm-4.7 # [可选] 子 Agent 独立模型,不配则继承主 Agent 当前模型\nstatusBar: true # 是否显示底部状态栏(token 消耗、模型名、A2A 状态等)\n\n# ────── Provider 配置 ──────\nproviders:\n : # 自定义名称,如 glm / anthropic / my-proxy\n apiKey: sk-xxx # [必填] API 密钥\n baseURL: https://... # [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n protocol: openai # [可选] 协议类型:openai(默认) | anthropic\n models: # [必填] 该 provider 可用的模型列表\n - model-a\n - model-b\n visionModels: # [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n - model-a\n\n# ────── 记忆系统(可选,RAG 向量检索)──────\nmemory:\n enabled: true\n embedding:\n apiKey: your-embedding-api-key\n baseURL: https://your-embedding-api-base-url/v4\n model: embedding-3\n dimension: 2048 # 向量维度,需与 embedding 模型匹配\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `subAgentModel` | string | 否 | 子 Agent 独立模型,不配则继承主 Agent 当前模型。模型优先级:LLM 显式指定 > `subAgentModel` > 继承父 Agent。必须在同 Provider 的 `models` 列表中 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nsubAgentModel: glm-4.7 # 子 Agent 用轻量模型,降低成本\nproviders:\n glm:\n apiKey: your-zhipu-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n anthropic:\n apiKey: sk-ant-xxx\n protocol: anthropic\n models:\n - claude-sonnet-4-20250514\n visionModels:\n - claude-sonnet-4-20250514\n deepseek:\n apiKey: sk-xxx\n baseURL: https://api.deepseek.com/v1\n models:\n - deepseek-chat\n - deepseek-reasoner\n openai:\n apiKey: sk-xxx\n models:\n - gpt-4o\n - gpt-4o-mini\n visionModels:\n - gpt-4o\n ollama:\n apiKey: ollama\n baseURL: http://localhost:11434/v1\n models:\n - qwen2.5:7b\n - deepseek-r1:14b\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> 这是 CCode 与 Claude Code CLI 拉开差距的核心能力。Claude Code 是纯终端工具,没有可视化管理界面;CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web Dashboard\n```\n\n浏览器打开 `http://localhost:9800`,获得 6 大管理页面:\n\n\n\n#### 1. 总览大盘(Overview)\n\n- **6 大核心指标卡片**:调用次数、输入/输出/缓存 Token、总费用\n- **趋势图表**:Token 消耗曲线 + 费用曲线,时间粒度自适应(当日按小时,周/月按天)\n- **分布分析**:Provider 分布饼图 + 模型分布饼图\n- **时间范围**:当日 / 本周 / 本月 / 自定义日期区间\n- **最近会话列表**:快速跳转到对话详情\n\n#### 2. 实时对话(Chat)\n\n- **Web 端直接聊天**:与 CLI 终端体验一致,支持 Markdown 渲染 + 代码高亮\n- **双向实时同步**:CLI 端输入 → Web 实时看到,Web 端输入 → CLI 实时响应\n- **工具执行可视化**:工具调用名称、参数、执行结果、耗时全部可视化展示\n- **权限确认弹窗**:危险工具(写文件、执行命令)在 Web 端弹窗确认,不用切回终端\n- **用户问卷表单**:Agent 发起的 ask_user_question 在 Web 端渲染为原生表单(单选/多选/文本)\n- **流式输出**:思考中状态提示 + 逐字流式渲染\n\n#### 3. 对话历史(Conversations)\n\n- **全量会话列表**:按时间倒序,展示 Provider、模型、Token 消耗、时长\n- **消息回放**:完整还原每轮对话,包括用户输入、助手回复、工具调用链\n- **子 Agent 快照**:展开查看子 Agent 的独立执行日志\n- **一键恢复对话**:点击 [恢复] 按钮,在当前 CLI 实例上继续历史会话\n- **搜索过滤**:按关键词搜索历史会话\n\n#### 4. Agent 网格(Agents)— A2A 协作视图\n\n- **本机活跃会话 + 远程已信任 Agent** 的列表与拓扑图\n- **标准 A2A 端点浮层**:点击会话节点查看它暴露的标准 A2A 端点(地址可复制、可打开真实 AgentCard)\n- **被调活动聚合**:谁正在/曾被谁调用,跨进程全景可见\n\n#### 5. 设置管理(Settings)\n\n- **Provider 配置 Tab**\n - 在线编辑 apiKey、baseURL、模型列表\n - 模型标签点击选中(指定测试模型)\n - 拖拽调整模型顺序\n - Vision 多模态标记(👁 标识支持图片理解的模型)\n - 一键连通性测试:选中模型 → 发送测试消息 → 15s 超时 → 返回成功/失败\n - **保存后实时广播**:所有连接的 CLI 实例自动热更新配置,无需重启\n\n- **计价规则 Tab**\n - CRUD 管理:provider + model_pattern 匹配规则\n - 四维价格:input / output / cache_read / cache_write\n - 多币种:USD / CNY\n - 优先级排序:精确匹配优先于通配符\n\n- **插件 & MCP Tab**\n - 查看已加载的 Runtime Plugin 列表、注册的工具和命令\n - MCP Server 连接状态、工具列表、错误信息\n\n#### 6. 系统日志(Logs)\n\n- Agent 运行诊断日志\n- 系统事件追踪\n\n#### 架构特点\n\n```\nBrowser (React SPA)\n ↕ WebSocket(实时双向)\nBridge Server (port 9800) — 纯消息路由器,不持有业务状态\n ↕ WebSocket ↕ WebSocket\nCLI-1 (session-aaa) CLI-2 (session-bbb)\n```\n\n- **多 CLI 平等连接**:多个终端实例同时连接同一个 Bridge Server\n- **Session 隔离**:每个 CLI 的 sessionId 独立,Web 端按需切换查看\n- **CLI 断连感知**:CLI 退出时 Web 端实时提示断开状态\n- **自动端口管理**:默认 9800,冲突自动递增(9801 → 9802),最多重试 3 次\n- **零配置启动**:`--web` 一个参数搞定,自动启动 HTTP Server + WebSocket + Vite HMR\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **17 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、git 深度集成、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板,支持独立模型配置 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n| **A2A 分布式 Agent 协作** | 多会话/Agent 互相委托任务 + 标准 A2A Server 端点 + 双向可观测(详见下文) |\n\n### A2A 分布式 Agent 协作(1.0 新增)\n\n让多个 CCode 会话 / 外部 Agent 互相寻址、互相委托任务,并在界面上**双向可观测**——协作的两端都看得见。\n\n- **委托其他 Agent** — `dispatch_remote_agent` 工具把任务委托给本机其他会话或远程 A2A Agent,结果流式返回\n- **本机会话网格** — 每个会话自动起独立 A2A 节点(动态端口),基于 `~/.ccode/instances/` lockfile 自动发现,零配置;`/a2a list` 查看本机活跃会话\n- **标准 A2A Server** — 暴露符合 A2A 0.3.x 规范的端点,可被任意标准 A2A 客户端发现并调用:\n - `GET /.well-known/agent-card.json`(AgentCard,`preferredTransport: JSONRPC`)\n - `POST /` — JSON-RPC `message/send`、`message/stream`(SSE)\n - 任务生命周期 `tasks/get`、`tasks/cancel`、`tasks/resubscribe`\n- **双向可观测** — 调用方与被调方都以 SubAgent 卡片展示执行过程(CLI 状态卡 + Web 完整时间轴),状态栏轻量提示\"被调用\",且**不打断主对话**\n- **信任白名单** — 远程 Agent 需 `/a2a add ` 显式信任后才能调用(安全底线);本机会话同机受信,无需配置\n\n> 本机互调统一走 `127.0.0.1`。跨机器协作(局域网 IP + 鉴权)规划在后续版本。\n\n### 父子模型能力联动\n\n子 Agent 的模型选择支持三级优先级:\n\n1. **LLM 显式指定** — 派发时 `model` 参数指定具体模型\n2. **全局配置** — `config.yml` 中的 `subAgentModel` 字段\n3. **继承父 Agent** — 不配置时自动使用主 Agent 当前模型\n\n典型用法:主 Agent 用强模型(如 GLM-5)做决策和编排,子 Agent 用轻量模型(如 GLM-4.7)做搜索和文件操作,**同 Provider 内灵活切换、成本可控**。\n\n```yaml\ndefaultModel: glm-5 # 主 Agent:强模型,负责决策编排\nsubAgentModel: glm-4.7 # 子 Agent:轻量模型,负责执行任务\n```\n\n### Git 深度集成\n\n- **专用 Git 工具** — 13 个子命令(status / log / diff / branch / checkout / commit / merge / rebase / cherry_pick / stash / tag / reset / show),无需通过 bash 调用 git\n- **启动上下文注入** — 冷启动自动收集 Git 状态(当前分支、最近提交、工作区变更)注入 System Prompt\n- **安全防护** — 敏感文件自动拦截(.env / credentials.json / .pem / .key 等)、commit 消息 shell 注入防护\n- **非 Git 仓库感知** — 非 Git 目录启动时给出明确提示,而非静默忽略\n- **Bash 兜底** — 超出 git 工具覆盖范围的操作(如 push、interactive rebase)仍可通过 bash 工具完成\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/.mcp.json(也会读取 ~/.claude.json、~/.mcp.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/.mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/a2a` | — | A2A 远程 Agent 白名单(list / add / remove)+ 本机会话 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.yml` | Provider / Model / 记忆(旧 config.json 自动迁移) |\n| MCP | `~/.ccode/.mcp.json` | MCP Server 连接 |\n| A2A 白名单 | `~/.ccode/a2a-trusted.json` | 已信任的远程 A2A Agent |\n| A2A 节点发现 | `~/.ccode/instances/` | 本机会话 lockfile(自动写入/清理) |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "c40fa306d59f3988c65ecbb8c2256d4215648748": {"t": 1785764472.2557964, "n": 14119, "h": "1115ee761a996928", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\n> 不是 demo 级别的玩具,是真正在**生产环境**跑出结果的工具。\n\nCCode 已在**多家企业**内部由一线工程师实际使用,独立完成真实业务需求开发:\n\n| 企业 | 行业 | 验证场景 | 模型 |\n|------|------|---------|------|\n| **某互联网大厂** | 在线教育 / 数字出版 | 企业级后台管理系统全链路需求开发 | GLM-5 |\n| **某 A 股上市公司** | 科技 | 前端 + 后端 + 复杂业务需求 | GLM-5 |\n| **CCode 自身** | 开源工具 | 用 CCode 开发 CCode(自举) | GLM-5 / GLM-4.7 |\n\n### 大厂实战案例:企业级后台系统需求交付\n\n以下截图来自**某互联网大厂**内部后台管理系统。工程师使用 CCode + GLM-5 独立完成了一个横跨多模块的\"资源语言\"特性开发 — 从列表筛选、详情展示、表单新增、批量操作到需求管理全链路,**一个人 + CCode 完成了原本需要多人协作的需求**:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

列表页:新增资源语言筛选项 + 批量设置入口

详情展开:教材语言字段展示 + 批量导出/Json导入

新增表单:资源语言字段联动 + 提交确认逻辑

需求管理:创建需求弹窗 + 多语言选项

多步骤流程表单:需求提报编辑 + 语言联动

需求列表:1646条数据 + 语言筛选 + 分页
\n\n### 自举案例:用 CCode 开发 CCode\n\nCCode 的 SubAgent 子 Agent 系统、Web Dashboard、记忆系统等核心模块,均由 CCode 自身驱动开发完成。以下是通过 Web Dashboard 会话回放功能录制的真实开发过程:\n\n\n\nCCode 在 Web Dashboard 中回放自举开发 SubAgent 的完整会话过程 — 从分析需求、阅读代码、到实现功能全部由 Agent 自主完成\n\n**覆盖能力**:\n\n- **前端** — React / Vue 组件开发、复杂表单联动、列表筛选、弹窗交互、多步骤流程\n- **后端** — Java Spring Boot 服务、API 接口设计、数据库字段变更与迁移\n- **全链路** — 从数据库 → API → 前端页面的完整功能闭环,跨模块一致性保障\n\n> 完整案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.yml`(YAML 格式,支持注释)。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nsubAgentModel: glm-4.7 # [可选] 子 Agent 使用的模型,不配则继承主 Agent\nproviders:\n glm:\n apiKey: your-zhipu-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.yml`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n> **从旧版升级**:早期版本用 `~/.ccode/config.json`,首次启动会**自动迁移**到 `config.yml`(写回校验无损后才切换),原文件备份为 `config.json.bak`。设置环境变量 `CCODE_HOME` 可把整个 `~/.ccode` 目录重定向到别处。\n\n### config.yml 完整字段说明\n\n```yaml\n# ────── 全局设置 ──────\ndefaultProvider: glm # 默认使用的 Provider 名称\ndefaultModel: glm-5 # 默认模型(必须在对应 provider.models 列表中)\nsubAgentModel: glm-4.7 # [可选] 子 Agent 独立模型,不配则继承主 Agent 当前模型\nstatusBar: true # 是否显示底部状态栏(token 消耗、模型名、A2A 状态等)\n\n# ────── Provider 配置 ──────\nproviders:\n : # 自定义名称,如 glm / anthropic / my-proxy\n apiKey: sk-xxx # [必填] API 密钥\n baseURL: https://... # [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n protocol: openai # [可选] 协议类型:openai(默认) | anthropic\n models: # [必填] 该 provider 可用的模型列表\n - model-a\n - model-b\n visionModels: # [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n - model-a\n\n# ────── 记忆系统(可选,RAG 向量检索)──────\nmemory:\n enabled: true\n embedding:\n apiKey: your-embedding-api-key\n baseURL: https://your-embedding-api-base-url/v4\n model: embedding-3\n dimension: 2048 # 向量维度,需与 embedding 模型匹配\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `subAgentModel` | string | 否 | 子 Agent 独立模型,不配则继承主 Agent 当前模型。模型优先级:LLM 显式指定 > `subAgentModel` > 继承父 Agent。必须在同 Provider 的 `models` 列表中 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```yaml\ndefaultProvider: glm\ndefaultModel: glm-5\nsubAgentModel: glm-4.7 # 子 Agent 用轻量模型,降低成本\nproviders:\n glm:\n apiKey: your-zhipu-api-key\n baseURL: https://open.bigmodel.cn/api/coding/paas/v4\n models:\n - glm-5\n - glm-4.7\n anthropic:\n apiKey: sk-ant-xxx\n protocol: anthropic\n models:\n - claude-sonnet-4-20250514\n visionModels:\n - claude-sonnet-4-20250514\n deepseek:\n apiKey: sk-xxx\n baseURL: https://api.deepseek.com/v1\n models:\n - deepseek-chat\n - deepseek-reasoner\n openai:\n apiKey: sk-xxx\n models:\n - gpt-4o\n - gpt-4o-mini\n visionModels:\n - gpt-4o\n ollama:\n apiKey: ollama\n baseURL: http://localhost:11434/v1\n models:\n - qwen2.5:7b\n - deepseek-r1:14b\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> 这是 CCode 与 Claude Code CLI 拉开差距的核心能力。Claude Code 是纯终端工具,没有可视化管理界面;CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web Dashboard\n```\n\n浏览器打开 `http://localhost:9800`,获得 6 大管理页面:\n\n\n\n#### 1. 总览大盘(Overview)\n\n- **6 大核心指标卡片**:调用次数、输入/输出/缓存 Token、总费用\n- **趋势图表**:Token 消耗曲线 + 费用曲线,时间粒度自适应(当日按小时,周/月按天)\n- **分布分析**:Provider 分布饼图 + 模型分布饼图\n- **时间范围**:当日 / 本周 / 本月 / 自定义日期区间\n- **最近会话列表**:快速跳转到对话详情\n\n#### 2. 实时对话(Chat)\n\n- **Web 端直接聊天**:与 CLI 终端体验一致,支持 Markdown 渲染 + 代码高亮\n- **双向实时同步**:CLI 端输入 → Web 实时看到,Web 端输入 → CLI 实时响应\n- **工具执行可视化**:工具调用名称、参数、执行结果、耗时全部可视化展示\n- **权限确认弹窗**:危险工具(写文件、执行命令)在 Web 端弹窗确认,不用切回终端\n- **用户问卷表单**:Agent 发起的 ask_user_question 在 Web 端渲染为原生表单(单选/多选/文本)\n- **流式输出**:思考中状态提示 + 逐字流式渲染\n\n#### 3. 对话历史(Conversations)\n\n- **全量会话列表**:按时间倒序,展示 Provider、模型、Token 消耗、时长\n- **消息回放**:完整还原每轮对话,包括用户输入、助手回复、工具调用链\n- **子 Agent 快照**:展开查看子 Agent 的独立执行日志\n- **一键恢复对话**:点击 [恢复] 按钮,在当前 CLI 实例上继续历史会话\n- **搜索过滤**:按关键词搜索历史会话\n\n#### 4. Agent 网格(Agents)— A2A 协作视图\n\n- **本机活跃会话 + 远程已信任 Agent** 的列表与拓扑图\n- **标准 A2A 端点浮层**:点击会话节点查看它暴露的标准 A2A 端点(地址可复制、可打开真实 AgentCard)\n- **被调活动聚合**:谁正在/曾被谁调用,跨进程全景可见\n\n#### 5. 设置管理(Settings)\n\n- **Provider 配置 Tab**\n - 在线编辑 apiKey、baseURL、模型列表\n - 模型标签点击选中(指定测试模型)\n - 拖拽调整模型顺序\n - Vision 多模态标记(👁 标识支持图片理解的模型)\n - 一键连通性测试:选中模型 → 发送测试消息 → 15s 超时 → 返回成功/失败\n - **保存后实时广播**:所有连接的 CLI 实例自动热更新配置,无需重启\n\n- **计价规则 Tab**\n - CRUD 管理:provider + model_pattern 匹配规则\n - 四维价格:input / output / cache_read / cache_write\n - 多币种:USD / CNY\n - 优先级排序:精确匹配优先于通配符\n\n- **插件 & MCP Tab**\n - 查看已加载的 Runtime Plugin 列表、注册的工具和命令\n - MCP Server 连接状态、工具列表、错误信息\n\n#### 6. 系统日志(Logs)\n\n- Agent 运行诊断日志\n- 系统事件追踪\n\n#### 架构特点\n\n```\nBrowser (React SPA)\n ↕ WebSocket(实时双向)\nBridge Server (port 9800) — 纯消息路由器,不持有业务状态\n ↕ WebSocket ↕ WebSocket\nCLI-1 (session-aaa) CLI-2 (session-bbb)\n```\n\n- **多 CLI 平等连接**:多个终端实例同时连接同一个 Bridge Server\n- **Session 隔离**:每个 CLI 的 sessionId 独立,Web 端按需切换查看\n- **CLI 断连感知**:CLI 退出时 Web 端实时提示断开状态\n- **自动端口管理**:默认 9800,冲突自动递增(9801 → 9802),最多重试 3 次\n- **零配置启动**:`--web` 一个参数搞定,自动启动 HTTP Server + WebSocket + Vite HMR\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **17 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、git 深度集成、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板,支持独立模型配置 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n| **A2A 分布式 Agent 协作** | 多会话/Agent 互相委托任务 + 标准 A2A Server 端点 + 双向可观测(详见下文) |\n\n### A2A 分布式 Agent 协作(1.0 新增)\n\n让多个 CCode 会话 / 外部 Agent 互相寻址、互相委托任务,并在界面上**双向可观测**——协作的两端都看得见。\n\n- **委托其他 Agent** — `dispatch_remote_agent` 工具把任务委托给本机其他会话或远程 A2A Agent,结果流式返回\n- **本机会话网格** — 每个会话自动起独立 A2A 节点(动态端口),基于 `~/.ccode/instances/` lockfile 自动发现,零配置;`/a2a list` 查看本机活跃会话\n- **标准 A2A Server** — 暴露符合 A2A 0.3.x 规范的端点,可被任意标准 A2A 客户端发现并调用:\n - `GET /.well-known/agent-card.json`(AgentCard,`preferredTransport: JSONRPC`)\n - `POST /` — JSON-RPC `message/send`、`message/stream`(SSE)\n - 任务生命周期 `tasks/get`、`tasks/cancel`、`tasks/resubscribe`\n- **双向可观测** — 调用方与被调方都以 SubAgent 卡片展示执行过程(CLI 状态卡 + Web 完整时间轴),状态栏轻量提示\"被调用\",且**不打断主对话**\n- **信任白名单** — 远程 Agent 需 `/a2a add ` 显式信任后才能调用(安全底线);本机会话同机受信,无需配置\n\n> 本机互调统一走 `127.0.0.1`。跨机器协作(局域网 IP + 鉴权)规划在后续版本。\n\n### 父子模型能力联动\n\n子 Agent 的模型选择支持三级优先级:\n\n1. **LLM 显式指定** — 派发时 `model` 参数指定具体模型\n2. **全局配置** — `config.yml` 中的 `subAgentModel` 字段\n3. **继承父 Agent** — 不配置时自动使用主 Agent 当前模型\n\n典型用法:主 Agent 用强模型(如 GLM-5)做决策和编排,子 Agent 用轻量模型(如 GLM-4.7)做搜索和文件操作,**同 Provider 内灵活切换、成本可控**。\n\n```yaml\ndefaultModel: glm-5 # 主 Agent:强模型,负责决策编排\nsubAgentModel: glm-4.7 # 子 Agent:轻量模型,负责执行任务\n```\n\n### Git 深度集成\n\n- **专用 Git 工具** — 13 个子命令(status / log / diff / branch / checkout / commit / merge / rebase / cherry_pick / stash / tag / reset / show),无需通过 bash 调用 git\n- **启动上下文注入** — 冷启动自动收集 Git 状态(当前分支、最近提交、工作区变更)注入 System Prompt\n- **安全防护** — 敏感文件自动拦截(.env / credentials.json / .pem / .key 等)、commit 消息 shell 注入防护\n- **非 Git 仓库感知** — 非 Git 目录启动时给出明确提示,而非静默忽略\n- **Bash 兜底** — 超出 git 工具覆盖范围的操作(如 push、interactive rebase)仍可通过 bash 工具完成\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/.mcp.json(也会读取 ~/.claude.json、~/.mcp.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/.mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/a2a` | — | A2A 远程 Agent 白名单(list / add / remove)+ 本机会话 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.yml` | Provider / Model / 记忆(旧 config.json 自动迁移) |\n| MCP | `~/.ccode/.mcp.json` | MCP Server 连接 |\n| A2A 白名单 | `~/.ccode/a2a-trusted.json` | 已信任的远程 A2A Agent |\n| A2A 节点发现 | `~/.ccode/instances/` | 本机会话 lockfile(自动写入/清理) |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "f3bd48d81e720f16085a939303af243be9c026e0": {"t": 1785764473.9642358, "n": 12801, "h": "7e93cbcbed662d7c", "c": "# CCode\n1\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\n> 不是 demo 级别的玩具,是真正在**生产环境**跑出结果的工具。\n\nCCode 已在**多家企业**内部由一线工程师实际使用,独立完成真实业务需求开发:\n\n| 企业 | 行业 | 验证场景 | 模型 |\n|------|------|---------|------|\n| **某互联网大厂** | 在线教育 / 数字出版 | 企业级后台管理系统全链路需求开发 | GLM-5 |\n| **某 A 股上市公司** | 科技 | 前端 + 后端 + 复杂业务需求 | GLM-5 |\n| **CCode 自身** | 开源工具 | 用 CCode 开发 CCode(自举) | GLM-5 / GLM-4.7 |\n\n### 大厂实战案例:企业级后台系统需求交付\n\n以下截图来自**某互联网大厂**内部后台管理系统。工程师使用 CCode + GLM-5 独立完成了一个横跨多模块的\"资源语言\"特性开发 — 从列表筛选、详情展示、表单新增、批量操作到需求管理全链路,**一个人 + CCode 完成了原本需要多人协作的需求**:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

列表页:新增资源语言筛选项 + 批量设置入口

详情展开:教材语言字段展示 + 批量导出/Json导入

新增表单:资源语言字段联动 + 提交确认逻辑

需求管理:创建需求弹窗 + 多语言选项

多步骤流程表单:需求提报编辑 + 语言联动

需求列表:1646条数据 + 语言筛选 + 分页
\n\n### 自举案例:用 CCode 开发 CCode\n\nCCode 的 SubAgent 子 Agent 系统、Web Dashboard、记忆系统等核心模块,均由 CCode 自身驱动开发完成。以下是通过 Web Dashboard 会话回放功能录制的真实开发过程:\n\n\n\nCCode 在 Web Dashboard 中回放自举开发 SubAgent 的完整会话过程 — 从分析需求、阅读代码、到实现功能全部由 Agent 自主完成\n\n**覆盖能力**:\n\n- **前端** — React / Vue 组件开发、复杂表单联动、列表筛选、弹窗交互、多步骤流程\n- **后端** — Java Spring Boot 服务、API 接口设计、数据库字段变更与迁移\n- **全链路** — 从数据库 → API → 前端页面的完整功能闭环,跨模块一致性保障\n\n> 完整案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"subAgentModel\": \"glm-4.7\", // [可选] 子 Agent 使用的模型,不配则继承主 Agent\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"subAgentModel\": \"glm-4.7\", // [可选] 子 Agent 独立模型,不配则继承主 Agent 当前模型\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `subAgentModel` | string | 否 | 子 Agent 独立模型,不配则继承主 Agent 当前模型。模型优先级:LLM 显式指定 > `subAgentModel` > 继承父 Agent。必须在同 Provider 的 `models` 列表中 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"subAgentModel\": \"glm-4.7\", // 子 Agent 用轻量模型,降低成本\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> 这是 CCode 与 Claude Code CLI 拉开差距的核心能力。Claude Code 是纯终端工具,没有可视化管理界面;CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web Dashboard\n```\n\n浏览器打开 `http://localhost:9800`,获得 5 大管理页面:\n\n\n\n#### 1. 总览大盘(Overview)\n\n- **6 大核心指标卡片**:调用次数、输入/输出/缓存 Token、总费用\n- **趋势图表**:Token 消耗曲线 + 费用曲线,时间粒度自适应(当日按小时,周/月按天)\n- **分布分析**:Provider 分布饼图 + 模型分布饼图\n- **时间范围**:当日 / 本周 / 本月 / 自定义日期区间\n- **最近会话列表**:快速跳转到对话详情\n\n#### 2. 实时对话(Chat)\n\n- **Web 端直接聊天**:与 CLI 终端体验一致,支持 Markdown 渲染 + 代码高亮\n- **双向实时同步**:CLI 端输入 → Web 实时看到,Web 端输入 → CLI 实时响应\n- **工具执行可视化**:工具调用名称、参数、执行结果、耗时全部可视化展示\n- **权限确认弹窗**:危险工具(写文件、执行命令)在 Web 端弹窗确认,不用切回终端\n- **用户问卷表单**:Agent 发起的 ask_user_question 在 Web 端渲染为原生表单(单选/多选/文本)\n- **流式输出**:思考中状态提示 + 逐字流式渲染\n\n#### 3. 对话历史(Conversations)\n\n- **全量会话列表**:按时间倒序,展示 Provider、模型、Token 消耗、时长\n- **消息回放**:完整还原每轮对话,包括用户输入、助手回复、工具调用链\n- **子 Agent 快照**:展开查看子 Agent 的独立执行日志\n- **一键恢复对话**:点击 [恢复] 按钮,在当前 CLI 实例上继续历史会话\n- **搜索过滤**:按关键词搜索历史会话\n\n#### 4. 设置管理(Settings)\n\n- **Provider 配置 Tab**\n - 在线编辑 apiKey、baseURL、模型列表\n - 模型标签点击选中(指定测试模型)\n - 拖拽调整模型顺序\n - Vision 多模态标记(👁 标识支持图片理解的模型)\n - 一键连通性测试:选中模型 → 发送测试消息 → 15s 超时 → 返回成功/失败\n - **保存后实时广播**:所有连接的 CLI 实例自动热更新配置,无需重启\n\n- **计价规则 Tab**\n - CRUD 管理:provider + model_pattern 匹配规则\n - 四维价格:input / output / cache_read / cache_write\n - 多币种:USD / CNY\n - 优先级排序:精确匹配优先于通配符\n\n- **插件 & MCP Tab**\n - 查看已加载的 Runtime Plugin 列表、注册的工具和命令\n - MCP Server 连接状态、工具列表、错误信息\n\n#### 5. 系统日志(Logs)\n\n- Agent 运行诊断日志\n- 系统事件追踪\n\n#### 架构特点\n\n```\nBrowser (React SPA)\n ↕ WebSocket(实时双向)\nBridge Server (port 9800) — 纯消息路由器,不持有业务状态\n ↕ WebSocket ↕ WebSocket\nCLI-1 (session-aaa) CLI-2 (session-bbb)\n```\n\n- **多 CLI 平等连接**:多个终端实例同时连接同一个 Bridge Server\n- **Session 隔离**:每个 CLI 的 sessionId 独立,Web 端按需切换查看\n- **CLI 断连感知**:CLI 退出时 Web 端实时提示断开状态\n- **自动端口管理**:默认 9800,冲突自动递增(9801 → 9802),最多重试 3 次\n- **零配置启动**:`--web` 一个参数搞定,自动启动 HTTP Server + WebSocket + Vite HMR\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **17 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、git 深度集成、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板,支持独立模型配置 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n\n### 父子模型能力联动\n\n子 Agent 的模型选择支持三级优先级:\n\n1. **LLM 显式指定** — 派发时 `model` 参数指定具体模型\n2. **全局配置** — `config.json` 中的 `subAgentModel` 字段\n3. **继承父 Agent** — 不配置时自动使用主 Agent 当前模型\n\n典型用法:主 Agent 用强模型(如 GLM-5)做决策和编排,子 Agent 用轻量模型(如 GLM-4.7)做搜索和文件操作,**同 Provider 内灵活切换、成本可控**。\n\n```jsonc\n{\n \"defaultModel\": \"glm-5\", // 主 Agent:强模型,负责决策编排\n \"subAgentModel\": \"glm-4.7\" // 子 Agent:轻量模型,负责执行任务\n}\n```\n\n### Git 深度集成\n\n- **专用 Git 工具** — 13 个子命令(status / log / diff / branch / checkout / commit / merge / rebase / cherry_pick / stash / tag / reset / show),无需通过 bash 调用 git\n- **启动上下文注入** — 冷启动自动收集 Git 状态(当前分支、最近提交、工作区变更)注入 System Prompt\n- **安全防护** — 敏感文件自动拦截(.env / credentials.json / .pem / .key 等)、commit 消息 shell 注入防护\n- **非 Git 仓库感知** — 非 Git 目录启动时给出明确提示,而非静默忽略\n- **Bash 兜底** — 超出 git 工具覆盖范围的操作(如 push、interactive rebase)仍可通过 bash 工具完成\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json(兼容 ~/.claude.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "bbdfb21e1f8af1539e78f764adc922bd387dcbb6": {"t": 1785764475.2467551, "n": 12800, "h": "b9067136b2704b94", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\n> 不是 demo 级别的玩具,是真正在**生产环境**跑出结果的工具。\n\nCCode 已在**多家企业**内部由一线工程师实际使用,独立完成真实业务需求开发:\n\n| 企业 | 行业 | 验证场景 | 模型 |\n|------|------|---------|------|\n| **某互联网大厂** | 在线教育 / 数字出版 | 企业级后台管理系统全链路需求开发 | GLM-5 |\n| **某 A 股上市公司** | 科技 | 前端 + 后端 + 复杂业务需求 | GLM-5 |\n| **CCode 自身** | 开源工具 | 用 CCode 开发 CCode(自举) | GLM-5 / GLM-4.7 |\n\n### 大厂实战案例:企业级后台系统需求交付\n\n以下截图来自**某互联网大厂**内部后台管理系统。工程师使用 CCode + GLM-5 独立完成了一个横跨多模块的\"资源语言\"特性开发 — 从列表筛选、详情展示、表单新增、批量操作到需求管理全链路,**一个人 + CCode 完成了原本需要多人协作的需求**:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

列表页:新增资源语言筛选项 + 批量设置入口

详情展开:教材语言字段展示 + 批量导出/Json导入

新增表单:资源语言字段联动 + 提交确认逻辑

需求管理:创建需求弹窗 + 多语言选项

多步骤流程表单:需求提报编辑 + 语言联动

需求列表:1646条数据 + 语言筛选 + 分页
\n\n### 自举案例:用 CCode 开发 CCode\n\nCCode 的 SubAgent 子 Agent 系统、Web Dashboard、记忆系统等核心模块,均由 CCode 自身驱动开发完成。以下是通过 Web Dashboard 会话回放功能录制的真实开发过程:\n\n\n\nCCode 在 Web Dashboard 中回放自举开发 SubAgent 的完整会话过程 — 从分析需求、阅读代码、到实现功能全部由 Agent 自主完成\n\n**覆盖能力**:\n\n- **前端** — React / Vue 组件开发、复杂表单联动、列表筛选、弹窗交互、多步骤流程\n- **后端** — Java Spring Boot 服务、API 接口设计、数据库字段变更与迁移\n- **全链路** — 从数据库 → API → 前端页面的完整功能闭环,跨模块一致性保障\n\n> 完整案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"subAgentModel\": \"glm-4.7\", // [可选] 子 Agent 使用的模型,不配则继承主 Agent\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"subAgentModel\": \"glm-4.7\", // [可选] 子 Agent 独立模型,不配则继承主 Agent 当前模型\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `subAgentModel` | string | 否 | 子 Agent 独立模型,不配则继承主 Agent 当前模型。模型优先级:LLM 显式指定 > `subAgentModel` > 继承父 Agent。必须在同 Provider 的 `models` 列表中 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"subAgentModel\": \"glm-4.7\", // 子 Agent 用轻量模型,降低成本\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> 这是 CCode 与 Claude Code CLI 拉开差距的核心能力。Claude Code 是纯终端工具,没有可视化管理界面;CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web Dashboard\n```\n\n浏览器打开 `http://localhost:9800`,获得 5 大管理页面:\n\n\n\n#### 1. 总览大盘(Overview)\n\n- **6 大核心指标卡片**:调用次数、输入/输出/缓存 Token、总费用\n- **趋势图表**:Token 消耗曲线 + 费用曲线,时间粒度自适应(当日按小时,周/月按天)\n- **分布分析**:Provider 分布饼图 + 模型分布饼图\n- **时间范围**:当日 / 本周 / 本月 / 自定义日期区间\n- **最近会话列表**:快速跳转到对话详情\n\n#### 2. 实时对话(Chat)\n\n- **Web 端直接聊天**:与 CLI 终端体验一致,支持 Markdown 渲染 + 代码高亮\n- **双向实时同步**:CLI 端输入 → Web 实时看到,Web 端输入 → CLI 实时响应\n- **工具执行可视化**:工具调用名称、参数、执行结果、耗时全部可视化展示\n- **权限确认弹窗**:危险工具(写文件、执行命令)在 Web 端弹窗确认,不用切回终端\n- **用户问卷表单**:Agent 发起的 ask_user_question 在 Web 端渲染为原生表单(单选/多选/文本)\n- **流式输出**:思考中状态提示 + 逐字流式渲染\n\n#### 3. 对话历史(Conversations)\n\n- **全量会话列表**:按时间倒序,展示 Provider、模型、Token 消耗、时长\n- **消息回放**:完整还原每轮对话,包括用户输入、助手回复、工具调用链\n- **子 Agent 快照**:展开查看子 Agent 的独立执行日志\n- **一键恢复对话**:点击 [恢复] 按钮,在当前 CLI 实例上继续历史会话\n- **搜索过滤**:按关键词搜索历史会话\n\n#### 4. 设置管理(Settings)\n\n- **Provider 配置 Tab**\n - 在线编辑 apiKey、baseURL、模型列表\n - 模型标签点击选中(指定测试模型)\n - 拖拽调整模型顺序\n - Vision 多模态标记(👁 标识支持图片理解的模型)\n - 一键连通性测试:选中模型 → 发送测试消息 → 15s 超时 → 返回成功/失败\n - **保存后实时广播**:所有连接的 CLI 实例自动热更新配置,无需重启\n\n- **计价规则 Tab**\n - CRUD 管理:provider + model_pattern 匹配规则\n - 四维价格:input / output / cache_read / cache_write\n - 多币种:USD / CNY\n - 优先级排序:精确匹配优先于通配符\n\n- **插件 & MCP Tab**\n - 查看已加载的 Runtime Plugin 列表、注册的工具和命令\n - MCP Server 连接状态、工具列表、错误信息\n\n#### 5. 系统日志(Logs)\n\n- Agent 运行诊断日志\n- 系统事件追踪\n\n#### 架构特点\n\n```\nBrowser (React SPA)\n ↕ WebSocket(实时双向)\nBridge Server (port 9800) — 纯消息路由器,不持有业务状态\n ↕ WebSocket ↕ WebSocket\nCLI-1 (session-aaa) CLI-2 (session-bbb)\n```\n\n- **多 CLI 平等连接**:多个终端实例同时连接同一个 Bridge Server\n- **Session 隔离**:每个 CLI 的 sessionId 独立,Web 端按需切换查看\n- **CLI 断连感知**:CLI 退出时 Web 端实时提示断开状态\n- **自动端口管理**:默认 9800,冲突自动递增(9801 → 9802),最多重试 3 次\n- **零配置启动**:`--web` 一个参数搞定,自动启动 HTTP Server + WebSocket + Vite HMR\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **17 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、git 深度集成、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板,支持独立模型配置 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n\n### 父子模型能力联动\n\n子 Agent 的模型选择支持三级优先级:\n\n1. **LLM 显式指定** — 派发时 `model` 参数指定具体模型\n2. **全局配置** — `config.json` 中的 `subAgentModel` 字段\n3. **继承父 Agent** — 不配置时自动使用主 Agent 当前模型\n\n典型用法:主 Agent 用强模型(如 GLM-5)做决策和编排,子 Agent 用轻量模型(如 GLM-4.7)做搜索和文件操作,**同 Provider 内灵活切换、成本可控**。\n\n```jsonc\n{\n \"defaultModel\": \"glm-5\", // 主 Agent:强模型,负责决策编排\n \"subAgentModel\": \"glm-4.7\" // 子 Agent:轻量模型,负责执行任务\n}\n```\n\n### Git 深度集成\n\n- **专用 Git 工具** — 13 个子命令(status / log / diff / branch / checkout / commit / merge / rebase / cherry_pick / stash / tag / reset / show),无需通过 bash 调用 git\n- **启动上下文注入** — 冷启动自动收集 Git 状态(当前分支、最近提交、工作区变更)注入 System Prompt\n- **安全防护** — 敏感文件自动拦截(.env / credentials.json / .pem / .key 等)、commit 消息 shell 注入防护\n- **非 Git 仓库感知** — 非 Git 目录启动时给出明确提示,而非静默忽略\n- **Bash 兜底** — 超出 git 工具覆盖范围的操作(如 push、interactive rebase)仍可通过 bash 工具完成\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json(兼容 ~/.claude.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "5b2a59b1ae876795882955b741a3528dda1d362b": {"t": 1785764476.9930763, "n": 11608, "h": "e58c8a2c251498d6", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\n> 不是 demo 级别的玩具,是真正在**生产环境**跑出结果的工具。\n\nCCode 已在**多家企业**内部由一线工程师实际使用,独立完成真实业务需求开发:\n\n| 企业 | 行业 | 验证场景 | 模型 |\n|------|------|---------|------|\n| **某互联网大厂** | 在线教育 / 数字出版 | 企业级后台管理系统全链路需求开发 | GLM-5 |\n| **某 A 股上市公司** | 科技 | 前端 + 后端 + 复杂业务需求 | GLM-5 |\n| **CCode 自身** | 开源工具 | 用 CCode 开发 CCode(自举) | GLM-5 / GLM-4.7 |\n\n### 大厂实战案例:企业级后台系统需求交付\n\n以下截图来自**某互联网大厂**内部后台管理系统。工程师使用 CCode + GLM-5 独立完成了一个横跨多模块的\"资源语言\"特性开发 — 从列表筛选、详情展示、表单新增、批量操作到需求管理全链路,**一个人 + CCode 完成了原本需要多人协作的需求**:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

列表页:新增资源语言筛选项 + 批量设置入口

详情展开:教材语言字段展示 + 批量导出/Json导入

新增表单:资源语言字段联动 + 提交确认逻辑

需求管理:创建需求弹窗 + 多语言选项

多步骤流程表单:需求提报编辑 + 语言联动

需求列表:1646条数据 + 语言筛选 + 分页
\n\n### 自举案例:用 CCode 开发 CCode\n\nCCode 的 SubAgent 子 Agent 系统、Web Dashboard、记忆系统等核心模块,均由 CCode 自身驱动开发完成。以下是通过 Web Dashboard 会话回放功能录制的真实开发过程:\n\n\n\nCCode 在 Web Dashboard 中回放自举开发 SubAgent 的完整会话过程 — 从分析需求、阅读代码、到实现功能全部由 Agent 自主完成\n\n**覆盖能力**:\n\n- **前端** — React / Vue 组件开发、复杂表单联动、列表筛选、弹窗交互、多步骤流程\n- **后端** — Java Spring Boot 服务、API 接口设计、数据库字段变更与迁移\n- **全链路** — 从数据库 → API → 前端页面的完整功能闭环,跨模块一致性保障\n\n> 完整案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> 这是 CCode 与 Claude Code CLI 拉开差距的核心能力。Claude Code 是纯终端工具,没有可视化管理界面;CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web Dashboard\n```\n\n浏览器打开 `http://localhost:9800`,获得 5 大管理页面:\n\n\n\n#### 1. 总览大盘(Overview)\n\n- **6 大核心指标卡片**:调用次数、输入/输出/缓存 Token、总费用\n- **趋势图表**:Token 消耗曲线 + 费用曲线,时间粒度自适应(当日按小时,周/月按天)\n- **分布分析**:Provider 分布饼图 + 模型分布饼图\n- **时间范围**:当日 / 本周 / 本月 / 自定义日期区间\n- **最近会话列表**:快速跳转到对话详情\n\n#### 2. 实时对话(Chat)\n\n- **Web 端直接聊天**:与 CLI 终端体验一致,支持 Markdown 渲染 + 代码高亮\n- **双向实时同步**:CLI 端输入 → Web 实时看到,Web 端输入 → CLI 实时响应\n- **工具执行可视化**:工具调用名称、参数、执行结果、耗时全部可视化展示\n- **权限确认弹窗**:危险工具(写文件、执行命令)在 Web 端弹窗确认,不用切回终端\n- **用户问卷表单**:Agent 发起的 ask_user_question 在 Web 端渲染为原生表单(单选/多选/文本)\n- **流式输出**:思考中状态提示 + 逐字流式渲染\n\n#### 3. 对话历史(Conversations)\n\n- **全量会话列表**:按时间倒序,展示 Provider、模型、Token 消耗、时长\n- **消息回放**:完整还原每轮对话,包括用户输入、助手回复、工具调用链\n- **子 Agent 快照**:展开查看子 Agent 的独立执行日志\n- **一键恢复对话**:点击 [恢复] 按钮,在当前 CLI 实例上继续历史会话\n- **搜索过滤**:按关键词搜索历史会话\n\n#### 4. 设置管理(Settings)\n\n- **Provider 配置 Tab**\n - 在线编辑 apiKey、baseURL、模型列表\n - 模型标签点击选中(指定测试模型)\n - 拖拽调整模型顺序\n - Vision 多模态标记(👁 标识支持图片理解的模型)\n - 一键连通性测试:选中模型 → 发送测试消息 → 15s 超时 → 返回成功/失败\n - **保存后实时广播**:所有连接的 CLI 实例自动热更新配置,无需重启\n\n- **计价规则 Tab**\n - CRUD 管理:provider + model_pattern 匹配规则\n - 四维价格:input / output / cache_read / cache_write\n - 多币种:USD / CNY\n - 优先级排序:精确匹配优先于通配符\n\n- **插件 & MCP Tab**\n - 查看已加载的 Runtime Plugin 列表、注册的工具和命令\n - MCP Server 连接状态、工具列表、错误信息\n\n#### 5. 系统日志(Logs)\n\n- Agent 运行诊断日志\n- 系统事件追踪\n\n#### 架构特点\n\n```\nBrowser (React SPA)\n ↕ WebSocket(实时双向)\nBridge Server (port 9800) — 纯消息路由器,不持有业务状态\n ↕ WebSocket ↕ WebSocket\nCLI-1 (session-aaa) CLI-2 (session-bbb)\n```\n\n- **多 CLI 平等连接**:多个终端实例同时连接同一个 Bridge Server\n- **Session 隔离**:每个 CLI 的 sessionId 独立,Web 端按需切换查看\n- **CLI 断连感知**:CLI 退出时 Web 端实时提示断开状态\n- **自动端口管理**:默认 9800,冲突自动递增(9801 → 9802),最多重试 3 次\n- **零配置启动**:`--web` 一个参数搞定,自动启动 HTTP Server + WebSocket + Vite HMR\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json(兼容 ~/.claude.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "6aae8b0170a90928fad3b72ce582f17a07877041": {"t": 1785764478.7588577, "n": 10216, "h": "d55c37e3286b52df", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\nCCode 已在**某互联网大厂**和**某 A 股上市公司**内部由一线工程师实际测试验证,覆盖以下场景并均可独立完成需求开发:\n\n- **前端项目** — React / Vue 组件开发、页面搭建、状态管理重构\n- **后端项目** — Java Spring Boot / Node.js 服务开发、API 设计、数据库变更\n- **复杂项目需求** — 跨模块联调、多服务协作、全栈功能交付\n\n> 真实案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式(Claude Code 没有的能力)\n\n> 这是 CCode 与 Claude Code CLI 拉开差距的核心能力。Claude Code 是纯终端工具,没有可视化管理界面;CCode 自带完整的 Web Dashboard,让 AI Agent 的工作过程可观测、可管理、可协作。\n\n```bash\nccode --web # 启动 CLI + Bridge Server + Web Dashboard\n```\n\n浏览器打开 `http://localhost:9800`,获得 5 大管理页面:\n\n\n\n#### 1. 总览大盘(Overview)\n\n- **6 大核心指标卡片**:调用次数、输入/输出/缓存 Token、总费用\n- **趋势图表**:Token 消耗曲线 + 费用曲线,时间粒度自适应(当日按小时,周/月按天)\n- **分布分析**:Provider 分布饼图 + 模型分布饼图\n- **时间范围**:当日 / 本周 / 本月 / 自定义日期区间\n- **最近会话列表**:快速跳转到对话详情\n\n#### 2. 实时对话(Chat)\n\n- **Web 端直接聊天**:与 CLI 终端体验一致,支持 Markdown 渲染 + 代码高亮\n- **双向实时同步**:CLI 端输入 → Web 实时看到,Web 端输入 → CLI 实时响应\n- **工具执行可视化**:工具调用名称、参数、执行结果、耗时全部可视化展示\n- **权限确认弹窗**:危险工具(写文件、执行命令)在 Web 端弹窗确认,不用切回终端\n- **用户问卷表单**:Agent 发起的 ask_user_question 在 Web 端渲染为原生表单(单选/多选/文本)\n- **流式输出**:思考中状态提示 + 逐字流式渲染\n\n#### 3. 对话历史(Conversations)\n\n- **全量会话列表**:按时间倒序,展示 Provider、模型、Token 消耗、时长\n- **消息回放**:完整还原每轮对话,包括用户输入、助手回复、工具调用链\n- **子 Agent 快照**:展开查看子 Agent 的独立执行日志\n- **一键恢复对话**:点击 [恢复] 按钮,在当前 CLI 实例上继续历史会话\n- **搜索过滤**:按关键词搜索历史会话\n\n#### 4. 设置管理(Settings)\n\n- **Provider 配置 Tab**\n - 在线编辑 apiKey、baseURL、模型列表\n - 模型标签点击选中(指定测试模型)\n - 拖拽调整模型顺序\n - Vision 多模态标记(👁 标识支持图片理解的模型)\n - 一键连通性测试:选中模型 → 发送测试消息 → 15s 超时 → 返回成功/失败\n - **保存后实时广播**:所有连接的 CLI 实例自动热更新配置,无需重启\n\n- **计价规则 Tab**\n - CRUD 管理:provider + model_pattern 匹配规则\n - 四维价格:input / output / cache_read / cache_write\n - 多币种:USD / CNY\n - 优先级排序:精确匹配优先于通配符\n\n- **插件 & MCP Tab**\n - 查看已加载的 Runtime Plugin 列表、注册的工具和命令\n - MCP Server 连接状态、工具列表、错误信息\n\n#### 5. 系统日志(Logs)\n\n- Agent 运行诊断日志\n- 系统事件追踪\n\n#### 架构特点\n\n```\nBrowser (React SPA)\n ↕ WebSocket(实时双向)\nBridge Server (port 9800) — 纯消息路由器,不持有业务状态\n ↕ WebSocket ↕ WebSocket\nCLI-1 (session-aaa) CLI-2 (session-bbb)\n```\n\n- **多 CLI 平等连接**:多个终端实例同时连接同一个 Bridge Server\n- **Session 隔离**:每个 CLI 的 sessionId 独立,Web 端按需切换查看\n- **CLI 断连感知**:CLI 退出时 Web 端实时提示断开状态\n- **自动端口管理**:默认 9800,冲突自动递增(9801 → 9802),最多重试 3 次\n- **零配置启动**:`--web` 一个参数搞定,自动启动 HTTP Server + WebSocket + Vite HMR\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json(兼容 ~/.claude.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "e4d375d0e15969d11015435fe5107560ff1504b9": {"t": 1785764480.1996212, "n": 8482, "h": "9c7bbe29f9a91759", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\nCCode 已在**某互联网大厂**和**某 A 股上市公司**内部由一线工程师实际测试验证,覆盖以下场景并均可独立完成需求开发:\n\n- **前端项目** — React / Vue 组件开发、页面搭建、状态管理重构\n- **后端项目** — Java Spring Boot / Node.js 服务开发、API 设计、数据库变更\n- **复杂项目需求** — 跨模块联调、多服务协作、全栈功能交付\n\n> 真实案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n### config.json 完整字段说明\n\n```jsonc\n{\n // ────── 全局设置 ──────\n \"defaultProvider\": \"glm\", // 默认使用的 Provider 名称\n \"defaultModel\": \"glm-5\", // 默认模型(必须在对应 provider.models 列表中)\n \"statusBar\": true, // 是否显示底部状态栏(token 消耗、模型名等)\n\n // ────── Provider 配置 ──────\n \"providers\": {\n \"\": { // 自定义名称,如 \"glm\"、\"anthropic\"、\"my-proxy\"\n \"apiKey\": \"sk-xxx\", // [必填] API 密钥\n \"baseURL\": \"https://...\", // [可选] 自定义 API 端点(OpenAI 兼容协议必填)\n \"protocol\": \"openai\", // [可选] 协议类型:\"openai\"(默认) | \"anthropic\"\n \"models\": [\"model-a\", \"model-b\"], // [必填] 该 provider 可用的模型列表\n \"visionModels\": [\"model-a\"] // [可选] 支持图片理解的模型子集(默认空 = 全不支持)\n }\n }\n}\n```\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| `defaultProvider` | string | 是 | 启动时默认使用的 Provider |\n| `defaultModel` | string | 是 | 启动时默认使用的模型 |\n| `statusBar` | boolean | 否 | 底部状态栏开关,默认 `true` |\n| `providers..apiKey` | string | 是 | API 密钥 |\n| `providers..baseURL` | string | 否 | 自定义端点。Anthropic 可省略,OpenAI 兼容协议必填 |\n| `providers..protocol` | string | 否 | `\"openai\"`(默认)或 `\"anthropic\"`。仅 Anthropic 官方需设为 `\"anthropic\"` |\n| `providers..models` | string[] | 是 | 可用模型列表,`/model` 切换时从此列表选择 |\n| `providers..visionModels` | string[] | 否 | 支持多模态图片理解的模型子集(必须是 `models` 的子集),默认空数组 |\n\n
\n多 Provider 配置示例\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"],\n \"visionModels\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"],\n \"visionModels\": [\"gpt-4o\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式\n\n```bash\nccode --web\n```\n\n浏览器打开 `http://localhost:9800`,提供:\n\n- **总览大盘** — Token 消耗/费用统计、趋势图表、模型分布\n- **实时对话** — Web 端聊天,消息/工具/权限双向实时同步\n- **对话历史** — 会话列表、消息回放、一键恢复对话\n- **设置管理** — Provider 配置、模型管理、计价规则、MCP 管理\n- **系统日志** — 诊断与调试\n\n多个 CLI 实例可同时连接同一个 Bridge Server,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json(兼容 ~/.claude.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "d72b88e08955726da36208adf604c7a3fce9c4c1": {"t": 1785764481.5463972, "n": 6840, "h": "b6a5c59219c44905", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 GLM / Claude / DeepSeek / GPT / Gemini / Ollama 及任意 OpenAI 兼容模型\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n## 已验证的生产力\n\nCCode 已在**某互联网大厂**和**某 A 股上市公司**内部由一线工程师实际测试验证,覆盖以下场景并均可独立完成需求开发:\n\n- **前端项目** — React / Vue 组件开发、页面搭建、状态管理重构\n- **后端项目** — Java Spring Boot / Node.js 服务开发、API 设计、数据库变更\n- **复杂项目需求** — 跨模块联调、多服务协作、全栈功能交付\n\n> 真实案例见 [cases/](./cases/) 目录\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\nnpm install -g ccode-cli\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 快速配置\n\n首次启动自动创建 `~/.ccode/config.json`。本项目全程在 **智谱 GLM** 下开发测试,最小配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 `ccode`,即可使用\n\n> 只要模型服务支持 **OpenAI Chat Completion** 或 **Anthropic Messages** 协议,配置 `baseURL` + `apiKey` 即可接入,无需任何代码改动。\n\n
\n更多 Provider 配置示例\n\n```jsonc\n{\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxx\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-20250514\"]\n },\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n },\n \"ollama\": {\n \"apiKey\": \"ollama\",\n \"baseURL\": \"http://localhost:11434/v1\",\n \"models\": [\"qwen2.5:7b\", \"deepseek-r1:14b\"]\n }\n }\n}\n```\n\n
\n\n---\n\n## 三种运行模式\n\n### 交互模式(默认)\n\n```bash\nccode # 进入交互式终端对话\nccode --web # 交互模式 + Web Dashboard\nccode --resume # 恢复上一次会话\n```\n\n### 管道模式(非交互,适用于脚本 / CI)\n\n```bash\nccode \"这段代码有什么问题\" # 单次问答\ncat error.log | ccode \"分析这个错误日志\" # stdin 管道输入\nccode -p \"生成 API 文档\" --json # JSON 结构化输出\nccode \"跑测试并修复\" --yes # 自动批准工具(CI 场景)\nccode \"解释这个函数\" --no-tools # 纯对话,不调用工具\n```\n\n| 参数 | 说明 |\n|------|------|\n| `-p / --prompt` | 指定问题 |\n| `-m / --model` | 指定模型 |\n| `--provider` | 指定供应商 |\n| `--yes / -y` | 自动批准所有工具调用 |\n| `--no-tools` | 禁用工具,纯对话 |\n| `--json` | 结构化输出(response + usage + cost) |\n| `--verbose / -v` | stderr 输出工具执行进度 |\n\n### Web Dashboard 模式\n\n```bash\nccode --web\n```\n\n浏览器打开 `http://localhost:9800`,提供:\n\n- **总览大盘** — Token 消耗/费用统计、趋势图表、模型分布\n- **实时对话** — Web 端聊天,消息/工具/权限双向实时同步\n- **对话历史** — 会话列表、消息回放、一键恢复对话\n- **设置管理** — Provider 配置、模型管理、计价规则、MCP 管理\n- **系统日志** — 诊断与调试\n\n多个 CLI 实例可同时连接同一个 Bridge Server,按 sessionId 隔离。\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型运行时切换** | `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写/编辑、glob/grep 搜索、bash 执行、子 Agent 派发、任务管理 |\n| **子 Agent (SubAgent)** | general / explore / plan 三种类型,后台并行运行,`Ctrl+B` 实时面板 |\n| **并行工具执行** | 多个 tool_calls 自动并行,安全/危险分类策略 |\n| **上下文管理** | `/compact` 三种压缩策略 + auto-compact + `/context` 查看使用率 |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 + Web 端一键恢复 |\n| **Token 计量** | 四维统计(input/output/cache_read/cache_write)+ 多币种计价 + `/usage` |\n\n### Memory / RAG 记忆系统\n\n- **混合检索** — BM25 关键词 + 向量相似度,中文 jieba 分词\n- **双层存储** — `~/.ccode/memory/`(全局)+ `<项目>/.ccode/memory/`(项目级)\n- **LLM 工具** — `memory_write` / `memory_search` / `memory_delete`,Agent 自动读写\n- **命令管理** — `/remember` 查看、搜索、删除、重建索引\n- **System Prompt 注入** — 冷启动自动检索相关记忆注入上下文\n\n---\n\n## 支持的模型\n\n| Provider | 协议 | 模型示例 | 备注 |\n|----------|------|---------|------|\n| 智谱 GLM | OpenAI 兼容 | GLM-5 / GLM-4.7 | **项目主力测试模型** |\n| Anthropic | Anthropic 原生 | Claude Opus / Sonnet / Haiku 4.x | 官方 SDK 直连 |\n| DeepSeek | OpenAI 兼容 | deepseek-chat / deepseek-reasoner | |\n| OpenAI | OpenAI 兼容 | GPT-4o / GPT-4o-mini | |\n| Google Gemini | OpenAI 兼容 | gemini-2.5-pro / gemini-2.5-flash | |\n| Ollama | OpenAI 兼容 | 任意本地模型 | 本地部署 |\n| **任意服务** | OpenAI 兼容 | — | 配置 `baseURL` 即可接入 |\n\n---\n\n## 扩展生态\n\n### MCP 协议\n\n动态注册外部工具,支持 4 种传输:stdio / SSE / streamable-http / http\n\n```jsonc\n// ~/.ccode/mcp.json(兼容 ~/.claude.json)\n{\n \"mcpServers\": {\n \"my-server\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"my-mcp-server\"],\n \"transport\": \"stdio\"\n }\n }\n}\n```\n\n### Skills 系统(兼容 Claude Code Skill 生态)\n\n- 四源发现:内置 → 插件 → 用户级(`~/.ccode/skills/`) → 项目级(`/.ccode/skills/`)\n- **SKILL.md 格式与 Claude Code 完全兼容**,社区 Skill(如 [skills.sh](https://skills.sh/) 275+ Skill)可直接使用\n- LLM 自动触发或 `/skills ` 手动调用\n\n> 迁移:将 Claude Code 的 `~/.claude/skills/` 复制到 `~/.ccode/skills/` 即可\n\n### Runtime Plugin\n\n```\n~/.ccode/plugins//runtime/index.js # 用户级\n/.ccode/plugins//runtime/index.js # 项目级\n```\n\n扩展点:注册命令、工具、UI 按钮、状态栏、事件监听、持久化存储。\n\n### Hooks 事件钩子\n\n三层配置(项目 > 用户 > 插件),三类事件:\n\n| 事件 | 时机 | 用途 |\n|------|------|------|\n| SessionStart | 会话启动 | 注入上下文 |\n| PreToolUse | 工具调用前 | 权限控制、参数修改 |\n| PostToolUse | 工具执行后 | 日志、后处理 |\n\n---\n\n## Claude Code 兼容性\n\n| 特性 | CCode | Claude Code | 兼容 |\n|------|-------|------------|------|\n| 指令文件 | CCODE.md | CLAUDE.md | 两者均识别 |\n| MCP 配置 | ~/.ccode/mcp.json | ~/.claude.json | 均可读取 |\n| SKILL.md 格式 | 相同 | 相同 | 直接使用 |\n| 项目设置 | .ccode/settings.local.json | .claude/settings.local.json | 格式兼容 |\n\n---\n\n## 全部指令\n\n| 指令 | 别名 | 说明 |\n|------|------|------|\n| `/help` | — | 显示所有命令 |\n| `/model` | `/m` | 切换模型 |\n| `/clear` | — | 清空对话 |\n| `/compact` | — | 压缩上下文 |\n| `/context` | — | 上下文使用率 |\n| `/resume` | — | 恢复历史会话 |\n| `/fork` | — | 对话分支 |\n| `/usage` | `/cost` | Token 用量统计 |\n| `/gc` | `/cleanup` | 清理过期数据 |\n| `/skills` | `/skill` | Skills 管理 |\n| `/remember` | `/mem` | 记忆管理 |\n| `/mcp` | — | MCP 状态 |\n| `/bridge` | — | Bridge 管理 |\n| `/plugins` | — | 插件列表 |\n| `/exit` | `/quit` | 强制退出 |\n\n## 快捷键\n\n| 操作 | 按键 | 备用 |\n|------|------|------|\n| 提交输入 | Enter | — |\n| 换行 | Alt+Enter | Shift+Alt+Enter |\n| 光标移动 | ↑ ↓ ← → | — |\n| 跳到行首/行尾 | Home / End | Ctrl+A / Ctrl+E |\n| 中断流式 | Escape | Ctrl+C |\n| 强制退出 | Ctrl+C × 2 | /exit |\n| SubAgent 面板 | Ctrl+B | — |\n\n---\n\n## 配置文件一览\n\n| 文件 | 路径 | 用途 |\n|------|------|------|\n| 主配置 | `~/.ccode/config.json` | Provider / Model / Shell |\n| MCP | `~/.ccode/mcp.json` | MCP Server 连接 |\n| 指令文件 | CCODE.md / CLAUDE.md(多层级) | System Prompt 注入 |\n| 项目权限 | `/.ccode/settings.local.json` | 工具白名单 |\n| Hooks | `hooks.json`(项目/用户/插件) | 事件钩子 |\n| 记忆 | `~/.ccode/memory/` + `/.ccode/memory/` | RAG 记忆存储 |\n| 调试日志 | `/.ccode/debug.log` | Debug 日志 |\n\n## 文档\n\n详细架构与能力文档见 [docs/](./docs/)\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。历史配置文档见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "e5d572eb4f927c77a55e51537d3ea3c4c64d12e1": {"t": 1785764482.9571803, "n": 3452, "h": "29e530bdb50bb45f", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama,一个终端搞定所有模型。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\n# 全局安装\nnpm install -g ccode-cli\n\n# 启动\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n### 使用示例\n\n```bash\n# 交互式对话\nccode\n\n# 单次提问(Pipe 模式)\nccode \"帮我看看这个项目的目录结构\"\n\n# 恢复上次会话\nccode --resume\n\n# 指定模型\nccode -m glm-5\n```\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型切换** | 运行时 `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划 |\n| **MCP 协议** | stdio / SSE / streamable-http,动态注册外部工具 |\n| **Skills 生态** | 内置 + 项目级 + [skills.sh](https://skills.sh/) 市场一键安装 |\n| **上下文管理** | 实时使用率追踪 + `/compact` 三种压缩策略 + auto-compact |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 |\n| **SubAgent** | 后台并行运行 + CLI 悬浮面板(Ctrl+B)实时查看 |\n| **Token 计量** | 四维 token 统计 + 多币种计价 + `/usage` |\n| **Claude Code 兼容** | CLAUDE.md、.mcp.json、插件目录结构零迁移 |\n\n---\n\n## 配置\n\n首次启动自动创建 `~/.ccode/config.json`:\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\"]\n },\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 作为基准测试模型。最小化配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 CCode(`pnpm dev` 或 `ccode`),即可使用 GLM-5 进行对话和工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需声明 `protocol` 字段。运行时输入 `/model glm-4.7` 可切换模型。\n\n> 更多配置说明(MCP、指令文件、插件、Hooks、权限)见 [HISTORY_README.md](./HISTORY_README.md)\n\n---\n\n## 指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 交互式切换模型 |\n| `/compact` | 压缩上下文(支持 `--strategy` 选择策略) |\n| `/context` | 查看上下文窗口使用率 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/clear` | 清空当前对话 |\n| `/help` | 查看所有指令 |\n\n---\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n| MiniMax | MiniMax-M2.5 | Anthropic 兼容 |\n\n---\n\n## 技术栈\n\n- **CLI**: TypeScript + Ink 5 + React 18\n- **Web**: Vite + Tailwind + React Router\n- **Agent**: 自研 AgentLoop(AsyncGenerator 事件流)\n- **持久化**: JSONL + libsql (SQLite)\n- **构建**: tsup (CLI) + Vite (Web)\n- **测试**: Vitest · 59 文件 · 453 用例\n\n---\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。完整的配置文档、插件系统、Hook 机制、权限管理等详细说明见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "374c8ce20d534e889f3b3ada88cde6639af6a83d": {"t": 1785764484.1599982, "n": 3501, "h": "a93959a78fa70a36", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama,一个终端搞定所有模型。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n```bash\nnpm install -g ccode-cli\n```\n\n---\n\n## 安装与使用\n\n### npm 安装(推荐)\n\n```bash\n# 全局安装\nnpm install -g ccode-cli\n\n# 启动\nccode\n```\n\n### npx 临时运行\n\n```bash\nnpx ccode-cli\n```\n\n### 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n### 使用示例\n\n```bash\n# 交互式对话\nccode\n\n# 单次提问(Pipe 模式)\nccode \"帮我看看这个项目的目录结构\"\n\n# 恢复上次会话\nccode --resume\n\n# 指定模型\nccode -m glm-5\n```\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型切换** | 运行时 `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划 |\n| **MCP 协议** | stdio / SSE / streamable-http,动态注册外部工具 |\n| **Skills 生态** | 内置 + 项目级 + [skills.sh](https://skills.sh/) 市场一键安装 |\n| **上下文管理** | 实时使用率追踪 + `/compact` 三种压缩策略 + auto-compact |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 |\n| **SubAgent** | 后台并行运行 + CLI 悬浮面板(Ctrl+B)实时查看 |\n| **Web Dashboard** | `--web` 唤醒,对话/回放/设置/插件管理 |\n| **Token 计量** | 四维 token 统计 + 多币种计价 + `/usage` |\n| **Claude Code 兼容** | CLAUDE.md、.mcp.json、插件目录结构零迁移 |\n\n---\n\n## 配置\n\n首次启动自动创建 `~/.ccode/config.json`:\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\"]\n },\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 作为基准测试模型。最小化配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 CCode(`pnpm dev` 或 `ccode`),即可使用 GLM-5 进行对话和工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需声明 `protocol` 字段。运行时输入 `/model glm-4.7` 可切换模型。\n\n> 更多配置说明(MCP、指令文件、插件、Hooks、权限)见 [HISTORY_README.md](./HISTORY_README.md)\n\n---\n\n## 指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 交互式切换模型 |\n| `/compact` | 压缩上下文(支持 `--strategy` 选择策略) |\n| `/context` | 查看上下文窗口使用率 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/clear` | 清空当前对话 |\n| `/help` | 查看所有指令 |\n\n---\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n| MiniMax | MiniMax-M2.5 | Anthropic 兼容 |\n\n---\n\n## 技术栈\n\n- **CLI**: TypeScript + Ink 5 + React 18\n- **Web**: Vite + Tailwind + React Router\n- **Agent**: 自研 AgentLoop(AsyncGenerator 事件流)\n- **持久化**: JSONL + libsql (SQLite)\n- **构建**: tsup (CLI) + Vite (Web)\n- **测试**: Vitest · 59 文件 · 453 用例\n\n---\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。完整的配置文档、插件系统、Hook 机制、权限管理等详细说明见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "94ee7a04372ee1ff64b4ad59caeb3ff17ba58138": {"t": 1785764485.6970854, "n": 3322, "h": "4d6ac14e9dddb304", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama,一个终端搞定所有模型。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n---\n\n## 安装\n\n```bash\n# npm 全局安装\nnpm install -g ccode-cli\n\n# 或 npx 直接运行\nnpx ccode-cli\n```\n\n安装后执行 `ccode` 进入交互式对话。\n\n## 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型切换** | 运行时 `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划 |\n| **MCP 协议** | stdio / SSE / streamable-http,动态注册外部工具 |\n| **Skills 生态** | 内置 + 项目级 + [skills.sh](https://skills.sh/) 市场一键安装 |\n| **上下文管理** | 实时使用率追踪 + `/compact` 三种压缩策略 + auto-compact |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 |\n| **SubAgent** | 后台并行运行 + CLI 悬浮面板(Ctrl+B)实时查看 |\n| **Web Dashboard** | `--web` 唤醒,对话/回放/设置/插件管理 |\n| **Token 计量** | 四维 token 统计 + 多币种计价 + `/usage` |\n| **Claude Code 兼容** | CLAUDE.md、.mcp.json、插件目录结构零迁移 |\n\n---\n\n## 配置\n\n首次启动自动创建 `~/.ccode/config.json`:\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\"]\n },\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 作为基准测试模型。最小化配置:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key`\n3. 启动 CCode(`pnpm dev` 或 `ccode`),即可使用 GLM-5 进行对话和工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需声明 `protocol` 字段。运行时输入 `/model glm-4.7` 可切换模型。\n\n> 更多配置说明(MCP、指令文件、插件、Hooks、权限)见 [HISTORY_README.md](./HISTORY_README.md)\n\n---\n\n## 指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 交互式切换模型 |\n| `/compact` | 压缩上下文(支持 `--strategy` 选择策略) |\n| `/context` | 查看上下文窗口使用率 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/clear` | 清空当前对话 |\n| `/help` | 查看所有指令 |\n\n---\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n| MiniMax | MiniMax-M2.5 | Anthropic 兼容 |\n\n---\n\n## 技术栈\n\n- **CLI**: TypeScript + Ink 5 + React 18\n- **Web**: Vite + Tailwind + React Router\n- **Agent**: 自研 AgentLoop(AsyncGenerator 事件流)\n- **持久化**: JSONL + libsql (SQLite)\n- **构建**: tsup (CLI) + Vite (Web)\n- **测试**: Vitest · 59 文件 · 453 用例\n\n---\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。完整的配置文档、插件系统、Hook 机制、权限管理等详细说明见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "a86576b567514c809f0e37139384d5893eb84444": {"t": 1785764487.2709215, "n": 2767, "h": "01f308b54b364d8d", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama,一个终端搞定所有模型。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n---\n\n## 安装\n\n```bash\n# npm 全局安装\nnpm install -g ccode-cli\n\n# 或 npx 直接运行\nnpx ccode-cli\n```\n\n安装后执行 `ccode` 进入交互式对话。\n\n## 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型切换** | 运行时 `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划 |\n| **MCP 协议** | stdio / SSE / streamable-http,动态注册外部工具 |\n| **Skills 生态** | 内置 + 项目级 + [skills.sh](https://skills.sh/) 市场一键安装 |\n| **上下文管理** | 实时使用率追踪 + `/compact` 三种压缩策略 + auto-compact |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 |\n| **SubAgent** | 后台并行运行 + CLI 悬浮面板(Ctrl+B)实时查看 |\n| **Web Dashboard** | `--web` 唤醒,对话/回放/设置/插件管理 |\n| **Token 计量** | 四维 token 统计 + 多币种计价 + `/usage` |\n| **Claude Code 兼容** | CLAUDE.md、.mcp.json、插件目录结构零迁移 |\n\n---\n\n## 配置\n\n首次启动自动创建 `~/.ccode/config.json`:\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\"]\n },\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n> 更多配置说明(MCP、指令文件、插件、Hooks、权限)见 [HISTORY_README.md](./HISTORY_README.md)\n\n---\n\n## 指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 交互式切换模型 |\n| `/compact` | 压缩上下文(支持 `--strategy` 选择策略) |\n| `/context` | 查看上下文窗口使用率 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/clear` | 清空当前对话 |\n| `/help` | 查看所有指令 |\n\n---\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n| MiniMax | MiniMax-M2.5 | Anthropic 兼容 |\n\n---\n\n## 技术栈\n\n- **CLI**: TypeScript + Ink 5 + React 18\n- **Web**: Vite + Tailwind + React Router\n- **Agent**: 自研 AgentLoop(AsyncGenerator 事件流)\n- **持久化**: JSONL + libsql (SQLite)\n- **构建**: tsup (CLI) + Vite (Web)\n- **测试**: Vitest · 59 文件 · 453 用例\n\n---\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n\n---\n\n> 本项目原名 ZCli / ZCode,2026-03-20 更名为 CCode。完整的配置文档、插件系统、Hook 机制、权限管理等详细说明见 [HISTORY_README.md](./HISTORY_README.md)。\n"}, "367872fe582b5eb07cc73783ccb4f01d274d160d": {"t": 1785764489.6316466, "n": 2645, "h": "031fbc5976047f89", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 支持 Claude / OpenAI / GLM / DeepSeek / Ollama,一个终端搞定所有模型。\n\n> **C** = **C**odeYang(作者)· **C**hina(中国开发者出品)· **C**ode Agent\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n---\n\n## 安装\n\n```bash\n# npm 全局安装\nnpm install -g ccode-cli\n\n# 或 npx 直接运行\nnpx ccode-cli\n```\n\n安装后执行 `ccode` 进入交互式对话。\n\n## 从源码运行\n\n```bash\ncd cCli\npnpm install\npnpm dev\n```\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **多模型切换** | 运行时 `/model` 一键切换,不重启、不丢上下文 |\n| **16 个内置工具** | 文件读写、Shell 执行、代码搜索、子 Agent 派发、任务规划 |\n| **MCP 协议** | stdio / SSE / streamable-http,动态注册外部工具 |\n| **Skills 生态** | 内置 + 项目级 + [skills.sh](https://skills.sh/) 市场一键安装 |\n| **上下文管理** | 实时使用率追踪 + `/compact` 三种压缩策略 + auto-compact |\n| **对话持久化** | JSONL 会话 + `--resume` 恢复 + `/fork` 分支 |\n| **SubAgent** | 后台并行运行 + CLI 悬浮面板(Ctrl+B)实时查看 |\n| **Web Dashboard** | `--web` 唤醒,对话/回放/设置/插件管理 |\n| **Token 计量** | 四维 token 统计 + 多币种计价 + `/usage` |\n| **Claude Code 兼容** | CLAUDE.md、.mcp.json、插件目录结构零迁移 |\n\n---\n\n## 配置\n\n首次启动自动创建 `~/.ccode/config.json`:\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\"]\n },\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n> 更多配置说明(MCP、指令文件、插件、Hooks、权限)见 [HISTORY_README.md](./HISTORY_README.md)\n\n---\n\n## 指令\n\n| 指令 | 说明 |\n|------|------|\n| `/model` | 交互式切换模型 |\n| `/compact` | 压缩上下文(支持 `--strategy` 选择策略) |\n| `/context` | 查看上下文窗口使用率 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/clear` | 清空当前对话 |\n| `/help` | 查看所有指令 |\n\n---\n\n## 支持的模型\n\n| Provider | 模型 | 协议 |\n|----------|------|------|\n| Anthropic | Claude Opus/Sonnet/Haiku 4.x | Anthropic 原生 |\n| OpenAI | GPT-4o / GPT-4o-mini | OpenAI 兼容 |\n| 智谱 GLM | GLM-5 / GLM-4.7 | OpenAI 兼容 |\n| DeepSeek | deepseek-chat / deepseek-reasoner | OpenAI 兼容 |\n| Ollama | 任意本地模型 | OpenAI 兼容 |\n| MiniMax | MiniMax-M2.5 | Anthropic 兼容 |\n\n---\n\n## 技术栈\n\n- **CLI**: TypeScript + Ink 5 + React 18\n- **Web**: Vite + Tailwind + React Router\n- **Agent**: 自研 AgentLoop(AsyncGenerator 事件流)\n- **持久化**: JSONL + libsql (SQLite)\n- **构建**: tsup (CLI) + Vite (Web)\n- **测试**: Vitest · 59 文件 · 453 用例\n\n---\n\n## License\n\n[BSL 1.1](./LICENSE) — 个人和非商业使用自由,商业使用需授权。\n"}, "5b10d1f20245ad21119b4dc1a004556212ad9b7a": {"t": 1785764491.3690584, "n": 12907, "h": "a0d307a432aa0c1e", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,不绑定单一 LLM 提供商。\n\n> **C** = **C**odeYang(作者)、**C**hina(中国开发者出品)、**C**ode(编程助手)\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n---\n\n## 项目背景\n\n### 改名说明\n\n本项目原名 **ZCli / ZCode**,于 2026 年 3 月更名为 **CCode**。\n\n更名原因:\n- 原名 ZCode 与多个已有项目重名,npm 上 `zcli` 也已被占用\n- **CCode** 的 **C** 寓意 **C**odeYang(作者英文名)、**C**hina(中国开发者出品)、**C**ode Agent\n- npm 包名:`ccode-cli`,安装后命令:`ccode`\n- 配置目录从 `~/.zcli/` 迁移至 `~/.ccode/`,指令文件从 `ZCLI.md` 改为 `CCODE.md`\n\n> 如果你之前使用过旧版,只需将 `~/.zcli/` 重命名为 `~/.ccode/` 即可平滑迁移。\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nCCode 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nCCode 处于活跃开发阶段(v0.0.1),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| 指令文件 | CCODE.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n cCli/ # 项目代码\n src/ # 核心源码(Agent Loop / Tools / Providers / UI)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd cCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/ccode.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `Escape` | 中断当前回复 |\n| `Ctrl+C` | 双击退出 |\n\n### 斜杠指令\n\n| 指令 | 说明 |\n|------|------|\n| `/help` | 查看所有指令 |\n| `/model` | 交互式切换模型 |\n| `/model ` | 直接切换到指定模型 |\n| `/clear` | 清空当前对话 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | 查看 MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/gc` | 清理过期会话和用量记录 |\n| `/gc --days 0` | 清理全部会话(保留 0 天) |\n| `/gc --dry-run` | 预览将清理的数据量 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nCCode 的配置文件位于 `~/.ccode/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.ccode/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 CCode(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nCCode 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nCCode 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.ccode/.mcp.json` | CCode 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.ccode/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(CCODE.md / CLAUDE.md)\n\nCCode 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `CCODE.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.ccode/CCODE.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/CCODE.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.ccode/CCODE.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/CCODE.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,CCode 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 CCode 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 CCode 定制不同于 Claude Code 的指令时,在同层级放一个 `CCODE.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.ccode/CCODE.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/CCODE.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`ccode \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nCCode 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.ccode/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.ccode/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.ccode/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.ccode/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.ccode/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.ccode/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.ccode/plugins/superpowers\n\n# 2. 启动 CCode,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nCCode 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.ccode/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.ccode/hooks.json` |\n| 用户级 | `~/.ccode/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nCCode 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.ccode/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.ccode/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "38a4a742b99b9849a26c8234980e0ba8cc4a39af": {"t": 1785764493.0277786, "n": 12907, "h": "3425c8c53a63315e", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,不绑定单一 LLM 提供商。\n\n> **C** = **C**odeYang(作者)、**C**hina(中国开发者出品)、**C**ode(编程助手)\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n---\n\n## 项目背景\n\n### 改名说明\n\n本项目原名 **ZCli / ZCode**,于 2026 年 3 月更名为 **CCode**。\n\n更名原因:\n- 原名 ZCode 与多个已有项目重名,npm 上 `zcli` 也已被占用\n- **CCode** 的 **C** 寓意 **C**odeYang(作者英文名)、**C**hina(中国开发者出品)、**C**ode Agent\n- npm 包名:`ccode-cli`,安装后命令:`ccode`\n- 配置目录从 `~/.zcli/` 迁移至 `~/.ccode/`,指令文件从 `ZCLI.md` 改为 `CCODE.md`\n\n> 如果你之前使用过旧版,只需将 `~/.zcli/` 重命名为 `~/.ccode/` 即可平滑迁移。\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nCCode 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nCCode 处于活跃开发阶段(v0.0.1),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| 指令文件 | CCODE.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n src/ # 核心源码(Agent Loop / Tools / Providers / UI)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/ccode.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `Escape` | 中断当前回复 |\n| `Ctrl+C` | 双击退出 |\n\n### 斜杠指令\n\n| 指令 | 说明 |\n|------|------|\n| `/help` | 查看所有指令 |\n| `/model` | 交互式切换模型 |\n| `/model ` | 直接切换到指定模型 |\n| `/clear` | 清空当前对话 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | 查看 MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/gc` | 清理过期会话和用量记录 |\n| `/gc --days 0` | 清理全部会话(保留 0 天) |\n| `/gc --dry-run` | 预览将清理的数据量 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nCCode 的配置文件位于 `~/.ccode/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.ccode/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 CCode(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nCCode 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nCCode 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.ccode/.mcp.json` | CCode 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.ccode/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(CCODE.md / CLAUDE.md)\n\nCCode 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `CCODE.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.ccode/CCODE.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/CCODE.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.ccode/CCODE.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/CCODE.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,CCode 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 CCode 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 CCode 定制不同于 Claude Code 的指令时,在同层级放一个 `CCODE.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.ccode/CCODE.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/CCODE.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`ccode \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nCCode 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.ccode/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.ccode/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.ccode/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.ccode/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.ccode/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.ccode/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.ccode/plugins/superpowers\n\n# 2. 启动 CCode,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nCCode 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.ccode/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.ccode/hooks.json` |\n| 用户级 | `~/.ccode/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nCCode 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.ccode/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.ccode/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "dee0ba08aec8344ece02346a52c329c3ab8f485a": {"t": 1785764494.6912215, "n": 12364, "h": "b935fe2380b08bbf", "c": "# ZCli\n\n**多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,但不绑定单一 LLM 提供商。\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n\n---\n\n## 项目背景\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nZCli 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nZCli 处于活跃开发阶段(v0.1.0),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| 指令文件 | ZCLI.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n src/ # 核心源码(Agent Loop / Tools / Providers / UI)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `Escape` | 中断当前回复 |\n| `Ctrl+C` | 双击退出 |\n\n### 斜杠指令\n\n| 指令 | 说明 |\n|------|------|\n| `/help` | 查看所有指令 |\n| `/model` | 交互式切换模型 |\n| `/model ` | 直接切换到指定模型 |\n| `/clear` | 清空当前对话 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | 查看 MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/gc` | 清理过期会话和用量记录 |\n| `/gc --days 0` | 清理全部会话(保留 0 天) |\n| `/gc --dry-run` | 预览将清理的数据量 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.zcli/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 ZCli(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nZCli 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.zcli/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.zcli/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.zcli/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.zcli/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.zcli/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 2. 启动 ZCli,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nZCli 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.zcli/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.zcli/hooks.json` |\n| 用户级 | `~/.zcli/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "ff97e63849eb14793e48c93cbb2c29a4e8f591ff": {"t": 1785764496.1244006, "n": 12006, "h": "3e6f6ce83700eb41", "c": "# ZCli\n\n**多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,但不绑定单一 LLM 提供商。\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n\n---\n\n## 项目背景\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nZCli 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nZCli 处于活跃开发阶段(v0.1.0),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| 指令文件 | ZCLI.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n src/ # 核心源码(Agent Loop / Tools / Providers / UI)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.zcli/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 ZCli(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nZCli 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.zcli/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.zcli/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.zcli/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.zcli/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.zcli/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 2. 启动 ZCli,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nZCli 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.zcli/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.zcli/hooks.json` |\n| 用户级 | `~/.zcli/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "dc272f1c3f9cec28054958296ecf7fada54c6a45": {"t": 1785764497.704598, "n": 11915, "h": "e95c9d69500536d2", "c": "# ZCli\n\n**多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,但不绑定单一 LLM 提供商。\n\n---\n\n## 项目背景\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nZCli 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nZCli 处于活跃开发阶段(v0.1.0),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| 指令文件 | ZCLI.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n src/ # 核心源码(Agent Loop / Tools / Providers / UI)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.zcli/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 ZCli(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nZCli 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.zcli/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.zcli/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.zcli/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.zcli/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.zcli/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 2. 启动 ZCli,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nZCli 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.zcli/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.zcli/hooks.json` |\n| 用户级 | `~/.zcli/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "e6601eea64e5de537afb88d8db054fa1158d9ecd": {"t": 1785764499.0617087, "n": 12464, "h": "935839cf205610a5", "c": "# ZCli\n\n**多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,但不绑定单一 LLM 提供商。\n\n---\n\n## 项目背景\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nZCli 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nZCli 处于活跃开发阶段(v0.1.0),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| Web UI | Bridge Server 双向同步,CLI 和浏览器共享同一对话 |\n| 非交互模式 | `zcli \"问题\"` 单次执行 + stdin 管道输入,适用于脚本/CI |\n| 指令文件 | ZCLI.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n| 并行工具 | 多工具调用自动并行执行,大幅缩短响应时间 |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n src/ # CLI 核心源码(Agent Loop / Tools / Providers / UI)\n src/bridge/ # Bridge Server(CLI ↔ Web 桥接层)\n web/ # Web 前端(React SPA,独立 Vite 项目)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 开发模式启动(含 Web UI)\n\n```bash\ncd zCli/web && pnpm install # 首次需要安装前端依赖\ncd .. && pnpm dev:web\n```\n\nCLI + Bridge Server + Web UI 同时启动,浏览器打开终端显示的地址即可双向同步对话。\n\n### 4. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.zcli/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 ZCli(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nZCli 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.zcli/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.zcli/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.zcli/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.zcli/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.zcli/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 2. 启动 ZCli,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nZCli 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.zcli/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.zcli/hooks.json` |\n| 用户级 | `~/.zcli/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式),规划中迁移 Bun.js\n- **终端 UI**:Ink 5 + React 18\n- **Web UI**:React 18 + Vite + Tailwind CSS\n- **Bridge Server**:Hono(HTTP + WebSocket 纯消息路由器)\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite,兼容 Node/Bun/Deno)\n- **包管理**:pnpm\n- **构建**:tsup(CLI)+ Vite(Web)\n- **测试**:Vitest\n"}, "bd5536e287b17266e78e8f44a8174b5470673b6e": {"t": 1785764500.4467764, "n": 10706, "h": "be5ff3d8a42532cf", "c": "# ZCli\n\n多模型 AI 编程 CLI 助手,支持 Claude、OpenAI、Gemini 等任意 OpenAI 兼容协议的模型。\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.zcli/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 ZCli(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nZCli 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.zcli/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.zcli/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.zcli/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.zcli/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.zcli/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.zcli\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.zcli/plugins/superpowers\n\n# 2. 启动 ZCli,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nZCli 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.zcli/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.zcli/hooks.json` |\n| 用户级 | `~/.zcli/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "6e36e77667a5e212d02abe2ddc34b550bf3933ed": {"t": 1785764501.78224, "n": 7572, "h": "b66d52af059b02ef", "c": "# ZCli\n\n多模型 AI 编程 CLI 助手,支持 Claude、OpenAI、Gemini 等任意 OpenAI 兼容协议的模型。\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.zcli/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 ZCli(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "a76b070bf153d91850502855ae303123637fc3f7": {"t": 1785764503.3744748, "n": 6956, "h": "85e798865b62c643", "c": "# ZCli\n\n多模型 AI 编程 CLI 助手,支持 Claude、OpenAI、Gemini 等任意 OpenAI 兼容协议的模型。\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(ZCLI.md / CLAUDE.md)\n\nZCli 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `ZCLI.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.zcli/ZCLI.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/ZCLI.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.zcli/ZCLI.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/ZCLI.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,ZCli 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 ZCli 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 ZCli 定制不同于 Claude Code 的指令时,在同层级放一个 `ZCLI.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.zcli/ZCLI.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/ZCLI.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`zcli \"问题\"`)均会加载指令文件\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "dee94e8a96fdcf4d3481a741c865bad9dde88e5b": {"t": 1785764504.8237731, "n": 5591, "h": "9274ed138175c3db", "c": "# ZCli\n\n多模型 AI 编程 CLI 助手,支持 Claude、OpenAI、Gemini 等任意 OpenAI 兼容协议的模型。\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nZCli 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 项目级权限配置\n\nZCli 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.zcli/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.zcli/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "af2f531e69297f3e42d64e207d8430669ec6fa49": {"t": 1785764506.2221413, "n": 3683, "h": "22e57f2afff725cd", "c": "# ZCli\n\n多模型 AI 编程 CLI 助手,支持 Claude、OpenAI、Gemini 等任意 OpenAI 兼容协议的模型。\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nZCli 的配置文件位于 `~/.zcli/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.zcli/config.json`\n\n```jsonc\n{\n // 默认使用的 Provider\n \"defaultProvider\": \"anthropic\",\n // 默认使用的模型\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n },\n // 任意 OpenAI 兼容 Provider,通过 baseURL 指定\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-4-flash\", \"glm-4-air\", \"glm-4\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点(OpenAI 兼容协议) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### .mcp.json — MCP Server 配置\n\nZCli 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.zcli/.mcp.json` | ZCli 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.zcli/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:LangChain(`@langchain/openai` / `@langchain/anthropic` / `@langchain/google-genai`)\n- **Agent Loop**:完全自研(不使用 LangGraph)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}, "4c02952a30990fdad8c0442dd493762fc9b7ba93": {"t": 1785764507.6885545, "n": 1029, "h": "d3dc307176c48d72", "c": "# ZCli\n\n多模型 AI 编程 CLI 助手,支持 Claude、OpenAI、Gemini 等任意 OpenAI 兼容协议的模型。\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n zCli/ # 项目代码\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd zCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/zcli.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `/exit` 或 `/quit` | 退出程序 |\n| `Ctrl+C` | 强制退出 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:LangChain(`@langchain/openai` / `@langchain/anthropic` / `@langchain/google-genai`)\n- **Agent Loop**:完全自研(不使用 LangGraph)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}}, "HISTORY_README.md": {"77b80f9a4d92437741efa6136b6478bf10199ef5": {"t": 1785674144.2461865, "n": 12907, "h": "a0d307a432aa0c1e", "c": "# CCode\n\n**开源多模型 AI 编程 CLI 助手** — 对标 Claude Code 的交互体验,不绑定单一 LLM 提供商。\n\n> **C** = **C**odeYang(作者)、**C**hina(中国开发者出品)、**C**ode(编程助手)\n\n[![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](./LICENSE)\n[![npm](https://img.shields.io/npm/v/ccode-cli)](https://www.npmjs.com/package/ccode-cli)\n\n---\n\n## 项目背景\n\n### 改名说明\n\n本项目原名 **ZCli / ZCode**,于 2026 年 3 月更名为 **CCode**。\n\n更名原因:\n- 原名 ZCode 与多个已有项目重名,npm 上 `zcli` 也已被占用\n- **CCode** 的 **C** 寓意 **C**odeYang(作者英文名)、**C**hina(中国开发者出品)、**C**ode Agent\n- npm 包名:`ccode-cli`,安装后命令:`ccode`\n- 配置目录从 `~/.zcli/` 迁移至 `~/.ccode/`,指令文件从 `ZCLI.md` 改为 `CCODE.md`\n\n> 如果你之前使用过旧版,只需将 `~/.zcli/` 重命名为 `~/.ccode/` 即可平滑迁移。\n\n### 为什么做这个\n\nClaude Code 是目前最好的 AI 编程 CLI 工具,但它有一个硬约束:**只能用 Claude 模型**。对于需要在不同场景下切换模型的开发者来说,这意味着要在多个工具之间反复切换,丢失上下文和工作流的连贯性。\n\nCCode 的目标是:**让开发者在终端中自由选择 Claude / GPT / Gemini / GLM / DeepSeek / 本地 Ollama 等任意模型,获得一致的 AI 辅助编码体验。** 同时完全兼容 Claude Code 的生态(CLAUDE.md 指令文件、MCP 协议、插件系统)。\n\n### 核心理念\n\n- **多模型自由切换** — 运行时 `/model` 一键切换,不重启、不丢上下文\n- **Claude Code 生态兼容** — CLAUDE.md、.mcp.json、插件目录结构完全兼容,已有配置零迁移\n- **Agent 能力完整** — 工具调用、并行执行、子 Agent 派发、权限管控、会话持久化\n- **可观测** — Token 计量计费、结构化日志、Session JSONL 全量审计\n- **Web 能力** — CLI 和浏览器双向实时同步,同一对话两端共享\n\n### 当前状态\n\nCCode 处于活跃开发阶段(v0.0.1),核心 Agent 能力已稳定,日常用于驱动自身的开发(self-hosting)。\n\n### 主要特性\n\n| 特性 | 说明 |\n|------|------|\n| 多模型支持 | Claude / OpenAI / Gemini / GLM / DeepSeek / Ollama,运行时切换 |\n| 内置工具集 | read / write / edit / glob / grep / bash + 子 Agent 派发 |\n| MCP 支持 | stdio / SSE / streamable-http,动态注册外部工具 |\n| Skills 系统 | 自研 Skill 体系 + 兼容 Claude Code 插件生态(superpowers 等) |\n| 对话持久化 | JSONL 会话文件 + --resume 恢复 + /fork 分支 |\n| Token 计量 | 四维 token 记录 + 多币种计价 + /usage 实时统计 |\n| 指令文件 | CCODE.md / CLAUDE.md 多层级注入,完全兼容 Claude Code |\n\n---\n\n## 目录结构\n\n```\nclaude_cli_z01/\n docs/ # 需求与设计文档\n cCli/ # 项目代码\n src/ # 核心源码(Agent Loop / Tools / Providers / UI)\n tests/ # 测试\n```\n\n---\n\n## 环境要求\n\n| 工具 | 版本 |\n|------|------|\n| Node.js | >= 20 |\n| pnpm | >= 9 |\n\n> 推荐使用 nvm 管理 Node.js 版本:\n> ```bash\n> nvm install 20\n> nvm use 20\n> ```\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n\n```bash\ncd cCli\npnpm install\n```\n\n### 2. 开发模式启动(推荐)\n\n```bash\npnpm dev\n```\n\n直接运行 TypeScript 源码,无需构建,修改代码后重启即可生效。\n\n### 3. 构建后运行\n\n```bash\npnpm build\nnode dist/bin/ccode.js\n```\n\n---\n\n## 界面操作\n\n| 操作 | 说明 |\n|------|------|\n| 直接打字 | 在底部输入框输入消息 |\n| `Enter` | 发送消息 |\n| `Escape` | 中断当前回复 |\n| `Ctrl+C` | 双击退出 |\n\n### 斜杠指令\n\n| 指令 | 说明 |\n|------|------|\n| `/help` | 查看所有指令 |\n| `/model` | 交互式切换模型 |\n| `/model ` | 直接切换到指定模型 |\n| `/clear` | 清空当前对话 |\n| `/resume` | 恢复历史会话 |\n| `/fork` | 从某条消息分支对话 |\n| `/usage` | 查看 Token 用量和费用 |\n| `/mcp` | 查看 MCP Server 连接状态 |\n| `/skills` | 列出可用 Skill |\n| `/gc` | 清理过期会话和用量记录 |\n| `/gc --days 0` | 清理全部会话(保留 0 天) |\n| `/gc --dry-run` | 预览将清理的数据量 |\n\n---\n\n## 其他命令\n\n```bash\n# 运行测试\npnpm test\n\n# 监听模式测试(开发时)\npnpm test:watch\n\n# TypeScript 类型检查\npnpm typecheck\n\n# 构建\npnpm build\n```\n\n---\n\n## 配置\n\nCCode 的配置文件位于 `~/.ccode/` 目录下,首次启动时自动创建。\n\n### config.json — 主配置\n\n路径:`~/.ccode/config.json`\n\n```jsonc\n{\n \"defaultProvider\": \"anthropic\",\n \"defaultModel\": \"claude-sonnet-4-6\",\n \"providers\": {\n // Anthropic 官方\n \"anthropic\": {\n \"apiKey\": \"sk-ant-xxxxx\",\n \"models\": [\"claude-opus-4-6\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"]\n },\n // OpenAI 兼容协议(GLM、DeepSeek、Ollama 等)\n \"glm\": {\n \"apiKey\": \"your-api-key\",\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n },\n \"openai\": {\n \"apiKey\": \"sk-xxxxx\",\n \"models\": [\"gpt-4o\", \"gpt-4o-mini\"]\n }\n }\n}\n```\n\n**字段说明:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `defaultProvider` | `string` | 启动时默认使用的 Provider 名称 |\n| `defaultModel` | `string` | 启动时默认使用的模型名称 |\n| `providers..apiKey` | `string` | Provider 的 API Key |\n| `providers..baseURL` | `string?` | 自定义 API 端点 |\n| `providers..protocol` | `'anthropic' \\| 'openai'?` | 协议类型(见下方说明) |\n| `providers..models` | `string[]` | 该 Provider 可用的模型列表 |\n\n> 运行时可通过 `/model` 指令或 `/model <模型名>` 快速切换模型。\n\n### 快速上手:以 GLM 为例\n\n本项目日常开发使用 **智谱 GLM-5** 驱动。以下是一个最小化的 GLM 配置示例,可直接复制使用:\n\n```jsonc\n{\n \"defaultProvider\": \"glm\",\n \"defaultModel\": \"glm-5\",\n \"providers\": {\n \"glm\": {\n \"apiKey\": \"your-zhipu-api-key\", // 智谱开放平台 API Key\n \"baseURL\": \"https://open.bigmodel.cn/api/coding/paas/v4\",\n \"models\": [\"glm-5\", \"glm-4.7\"]\n }\n }\n}\n```\n\n**步骤:**\n\n1. 前往 [智谱开放平台](https://open.bigmodel.cn/) 注册并获取 API Key\n2. 将上述配置写入 `~/.ccode/config.json`,替换 `your-zhipu-api-key` 为你的真实 Key\n3. 启动 CCode(`pnpm dev`),即可使用 GLM-5 进行对话和 Agent 工具调用\n\n> GLM 走 **OpenAI 兼容协议**,无需额外声明 `protocol` 字段。如需切换模型,在对话中输入 `/model glm-4.7` 即可。\n\n### 接入 Anthropic 兼容协议的第三方 Provider\n\nCCode 支持两种 LLM 协议:**Anthropic 原生协议**和 **OpenAI 兼容协议**。\n\n- 名为 `anthropic` 的 provider 自动走 Anthropic 原生协议\n- 其他 provider 默认走 OpenAI 兼容协议\n- 通过 `protocol` 字段可以显式指定协议类型\n\n如果你使用的第三方 API 兼容 Anthropic Messages API(如 MiniMax),需要声明 `\"protocol\": \"anthropic\"`:\n\n```jsonc\n{\n \"defaultProvider\": \"minimax\",\n \"defaultModel\": \"MiniMax-M2.5\",\n \"providers\": {\n \"minimax\": {\n \"apiKey\": \"your-minimax-api-key\",\n \"baseURL\": \"https://api.minimaxi.com/anthropic\",\n \"protocol\": \"anthropic\",\n \"models\": [\"MiniMax-M2.5\", \"MiniMax-M2.5-highspeed\"]\n }\n }\n}\n```\n\n更多示例:\n\n```jsonc\n{\n \"providers\": {\n // DeepSeek — OpenAI 兼容,不需要写 protocol\n \"deepseek\": {\n \"apiKey\": \"sk-xxx\",\n \"baseURL\": \"https://api.deepseek.com/v1\",\n \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"]\n },\n // 某个兼容 Anthropic API 的代理\n \"my-proxy\": {\n \"apiKey\": \"proxy-key\",\n \"baseURL\": \"https://my-proxy.example.com/anthropic/v1\",\n \"protocol\": \"anthropic\",\n \"models\": [\"claude-sonnet-4-6\"]\n }\n }\n}\n```\n\n### .mcp.json — MCP Server 配置\n\nCCode 支持 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 协议,可连接外部工具服务器扩展 Agent 能力。\n\n**配置文件搜索路径(按优先级从高到低):**\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1(最高) | `~/.ccode/.mcp.json` | CCode 专属配置 |\n| 2 | `~/.claude.json` | Claude Code 用户配置(兼容) |\n| 3 | `~/.mcp.json` | 通用 MCP 全局配置 |\n\n同名 Server 出现在多个文件时,高优先级覆盖低优先级。\n\n路径:`~/.ccode/.mcp.json`\n\n```jsonc\n{\n \"mcpServers\": {\n // Stdio 模式:启动本地子进程\n \"filesystem\": {\n \"command\": \"npx\",\n \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed/dir\"],\n \"env\": {\n \"NODE_ENV\": \"production\"\n }\n },\n // Streamable HTTP 模式:连接远程服务\n \"deepwiki\": {\n \"type\": \"streamable-http\",\n \"url\": \"https://mcp.deepwiki.com/mcp\"\n },\n // SSE 模式\n \"my-sse-server\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:3001/sse\"\n },\n // HTTP 模式(兼容 .claude.json 格式,含自定义请求头)\n \"remote-api\": {\n \"type\": \"http\",\n \"url\": \"https://example.com/mcp\",\n \"headers\": {\n \"Authorization\": \"Bearer your-token\"\n }\n }\n }\n}\n```\n\n**Server 配置字段:**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `command` | `string?` | Stdio 模式:要执行的命令 |\n| `args` | `string[]?` | Stdio 模式:命令参数 |\n| `env` | `Record?` | Stdio 模式:附加环境变量 |\n| `type` | `'stdio' \\| 'sse' \\| 'streamable-http' \\| 'http'?` | 传输类型(有 `command` 时默认 stdio,有 `url` 时默认 streamable-http) |\n| `url` | `string?` | 远程模式:服务端 URL |\n| `headers` | `Record?` | HTTP/Streamable HTTP 模式:自定义请求头 |\n\n> 运行时可通过 `/mcp` 指令查看所有 Server 的连接状态和工具列表。\n\n---\n\n## 指令文件(CCODE.md / CLAUDE.md)\n\nCCode 支持通过指令文件向 LLM 注入自定义规范和偏好,**完全兼容 Claude Code 的 CLAUDE.md 生态**。\n\n### 工作原理\n\n启动时自动扫描以下位置的指令文件,内容注入 system prompt,LLM 在每次对话中自动遵循。\n\n**每个层级优先查找 `CCODE.md`,没有则 fallback 到 `CLAUDE.md`**(同层只取一个)。\n\n### 查找顺序\n\n| 优先级 | 路径 | 说明 |\n|--------|------|------|\n| 1 | `~/.ccode/CCODE.md` → `~/.claude/CLAUDE.md` | 全局用户级 — 你的通用编码习惯和偏好 |\n| 2 | `/CCODE.md` → `/CLAUDE.md` | 项目根 — 团队共享的项目规范 |\n| 3 | `/.ccode/CCODE.md` → `/.claude/CLAUDE.md` | 项目配置目录 |\n| 4 | `/CCODE.md` → `/CLAUDE.md` | 当前工作目录(仅当 cwd ≠ git-root 时) |\n\n所有找到的文件内容会按层级顺序拼接,一起注入 system prompt。\n\n### 兼容 Claude Code\n\n如果你已经在使用 Claude Code 并配置了 `CLAUDE.md`,**无需任何改动**,CCode 会自动加载:\n\n- `~/.claude/CLAUDE.md` — 你的全局 Claude Code 指令会被 CCode 直接复用\n- `<项目>/CLAUDE.md` — 项目级 Claude Code 指令同样生效\n\n当你想为 CCode 定制不同于 Claude Code 的指令时,在同层级放一个 `CCODE.md` 即可覆盖 `CLAUDE.md`。\n\n### 示例\n\n**全局指令**(`~/.ccode/CCODE.md` 或 `~/.claude/CLAUDE.md`):\n\n```markdown\n# 编码规范\n\n- 永远使用中文与我对话\n- Git 提交信息遵循 Conventional Commits 格式\n- 优先使用 TypeScript,strict 模式\n- 异常处理:禁止空 catch 块\n```\n\n**项目级指令**(`<项目根>/CCODE.md` 或 `<项目根>/CLAUDE.md`):\n\n```markdown\n# 项目约定\n\n- 这是一个 React + Vite 项目\n- 组件放在 src/components/,hooks 放在 src/hooks/\n- 使用 Tailwind CSS,不写内联样式\n- 测试框架:Vitest + Testing Library\n```\n\n### 注意事项\n\n- 指令文件在会话启动时加载,**会话期间修改不会自动生效**,需重启对话\n- 空文件或读取失败的文件会被静默跳过,不影响启动\n- REPL 模式和 Pipe 模式(`ccode \"问题\"`)均会加载指令文件\n\n---\n\n## 插件系统\n\nCCode 支持通过插件包扩展 Skill 能力,兼容 Claude Code 的插件生态(如 [superpowers](https://github.com/obra/superpowers))。\n\n### 安装插件\n\n将插件目录复制到 `~/.ccode/plugins/` 下即可(目录名即为插件名):\n\n```bash\n# 方式一:从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.ccode/plugins/superpowers\n\n# 方式二:直接复制已有目录\n# Linux / macOS\ncp -r /path/to/superpowers ~/.ccode/plugins/superpowers\n\n# Windows\nxcopy /E /I \"D:\\path\\to\\superpowers\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n```\n\n> 如果你已安装了 Claude Code 的 superpowers 插件,可以直接从缓存复制:\n> ```bash\n> # Windows\n> xcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n>\n> # Linux / macOS\n> cp -r ~/.claude/plugins/cache/claude-plugins-official/superpowers/5.0.2 ~/.ccode/plugins/superpowers\n> ```\n\n项目级插件放在 `<项目根>/.ccode/plugins/` 下。\n\n### 插件目录结构\n\n```\n~/.ccode/plugins/\n └── superpowers/ ← 插件包名\n ├── skills/ ← skills 目录(必需)\n │ ├── brainstorming/\n │ │ ├── SKILL.md\n │ │ └── visual-companion.md ← 支撑文件\n │ ├── writing-plans/\n │ │ └── SKILL.md\n │ └── ...\n ├── hooks/ ← hooks 目录(可选)\n │ └── hooks.json\n └── plugin.json ← 插件清单(可选)\n```\n\n### 命名空间\n\n插件内的 Skill 自动添加 `<插件名>:` 前缀,避免与内置 Skill 冲突:\n\n| 来源 | 注册名示例 |\n|------|-----------|\n| 内置 Skill | `commit` |\n| 用户自定义 Skill | `my-tool` |\n| 插件 Skill | `superpowers:brainstorming` |\n\n**优先级**:项目级 > 用户级 > 插件 > 内置\n\n### 以 superpowers 为例\n\n```bash\n# 1. 安装:从 Claude Code 缓存复制(如果已安装 Claude Code superpowers 插件)\n# Windows\nxcopy /E /I \"%USERPROFILE%\\.claude\\plugins\\cache\\claude-plugins-official\\superpowers\\5.0.2\" \"%USERPROFILE%\\.ccode\\plugins\\superpowers\"\n\n# 或者从 Git 克隆\ngit clone https://github.com/obra/superpowers.git ~/.ccode/plugins/superpowers\n\n# 2. 启动 CCode,自动发现插件中的所有 Skills\npnpm dev\n```\n\n启动后 system prompt 中会包含 `superpowers:brainstorming`、`superpowers:writing-plans` 等 Skill 列表,LLM 会自动按需调用。\n\n---\n\n## Hook 系统\n\nCCode 支持事件钩子,可在会话启动、工具执行前后注入自定义逻辑。\n\n### 事件类型\n\n| 事件 | 触发时机 | 典型用途 |\n|------|----------|----------|\n| `SessionStart` | 会话启动 | 插件启动注入、环境检查 |\n| `PreToolUse` | 工具执行前 | 权限拦截、参数校验 |\n| `PostToolUse` | 工具执行后 | 结果审计、通知 |\n\n### 配置文件\n\nHook 配置来自三层来源(叠加执行,不覆盖):\n\n| 来源 | 路径 |\n|------|------|\n| 插件包 | `~/.ccode/plugins//hooks/hooks.json` |\n| 项目级 | `<项目根>/.ccode/hooks.json` |\n| 用户级 | `~/.ccode/hooks.json` |\n\n### hooks.json 格式\n\n```jsonc\n{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"matcher\": \"startup|resume\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"additionalContext\\\": \\\"hello from hook\\\"}'\",\n \"timeout\": 10000\n }\n ]\n }\n ],\n \"PreToolUse\": [\n {\n \"matcher\": \"bash\",\n \"hooks\": [\n {\n \"type\": \"command\",\n \"command\": \"echo '{\\\"decision\\\": \\\"allow\\\"}'\",\n \"timeout\": 5000\n }\n ]\n }\n ]\n }\n}\n```\n\n- `matcher`:正则表达式,匹配触发条件(SessionStart 匹配子类型,PreToolUse/PostToolUse 匹配工具名)\n- `timeout`:超时毫秒数,默认 10000\n- Hook 通过 stdout 输出 JSON 返回结果,超时或失败静默跳过\n\n> 插件包自带的 `hooks/hooks.json`(如 superpowers 的 SessionStart hook)会被自动发现和执行,无需手动配置。\n\n---\n\n## 项目级权限配置\n\nCCode 支持项目级工具权限白名单,白名单内的工具执行时无需确认,不在白名单内的仍遵循原有的询问确认机制。\n\n### 配置文件\n\n路径:`<项目根目录>/.ccode/settings.local.json`(首次启动时自动创建空模板)\n\n```jsonc\n{\n \"permissions\": {\n \"allow\": [\n \"Bash(*)\", // bash 命令免确认\n \"Read(*)\", // 读文件免确认\n \"Write(*)\", // 写文件免确认\n \"Edit(*)\", // 编辑文件免确认\n \"Glob(*)\", // 文件搜索免确认\n \"Grep(*)\", // 内容搜索免确认\n \"mcp__*\" // 所有 MCP 工具免确认\n ]\n }\n}\n```\n\n### 规则格式\n\n| 格式 | 示例 | 说明 |\n|------|------|------|\n| `FriendlyName(*)` | `Bash(*)`, `Read(*)` | 友好名匹配,自动解析为实际工具名 |\n| `前缀通配符` | `mcp__*` | 匹配所有以该前缀开头的工具 |\n| `精确工具名` | `mcp__context7__query-docs` | 精确匹配特定工具 |\n| `内部工具名` | `bash`, `read_file` | 直接使用内部注册的工具名 |\n\n> 默认模板为 `\"allow\": []`(空),即所有危险工具仍需确认。按需添加规则即可。\n\n> 建议将 `.ccode/settings.local.json` 加入 `.gitignore`,避免团队成员间权限配置冲突。\n\n---\n\n## 技术栈\n\n- **运行时**:Node.js 20 + TypeScript 5(strict 模式)\n- **终端 UI**:Ink 5 + React 18\n- **LLM 调用层**:`@anthropic-ai/sdk`(Anthropic 原生协议)+ `@langchain/openai`(OpenAI 兼容协议)\n- **Agent Loop**:完全自研(不使用 LangGraph),AsyncGenerator 事件流架构\n- **持久化**:JSONL 会话文件 + libsql(SQLite)\n- **包管理**:pnpm\n- **构建**:tsup\n- **测试**:Vitest\n"}}}}