# claude-code-cc
**Repository Path**: tillmanyang/claude-code-cc
## Basic Information
- **Project Name**: claude-code-cc
- **Description**: AiCode, claude-code c++ version, C++全量重构的 Claude Code
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-04-01
- **Last Updated**: 2026-04-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AiCode
[](https://en.cppreference.com/)
[](LICENSE)
[]()
---
## 🎯 项目概述
AiCode 是一个**基于claude code开源代码的,C++ 开发的智能编码助手 CLI 工具**,采用"思考 - 行动 - 观察"闭环的 Agent 架构,通过 MCP 工具集直接操作终端与文件系统,调用 Claude/Qwen/Ollama API 完成自主代码开发与调试。
### 核心定位
| 特性 | 说明 |
|------|------|
| **本质** | 基于 C++ 开发的命令行智能体(Agentic CLI) |
| **运行环境** | C++ 原生编译,无运行时依赖 |
| **核心能力** | 自主规划、工具调用、环境感知、迭代验证 |
### 架构分层
```
┌─────────────────────────────────────────────────────────────┐
│ CLI 交互层 → 原生终端输入输出、信号处理(Ctrl+C) │
├─────────────────────────────────────────────────────────────┤
│ 意图解析层 → 指令解析、上下文加载(文件/目录/Git) │
├─────────────────────────────────────────────────────────────┤
│ Agent 调度层 → 理解 → 规划 → 工具调用 → 观察 → 验证 → 迭代 │
├─────────────────────────────────────────────────────────────┤
│ 工具执行层 → 文件系统、Shell 命令、网络搜索 (30+ 工具) │
├─────────────────────────────────────────────────────────────┤
│ 环境反馈层 → 捕获命令输出、错误、状态更新 │
├─────────────────────────────────────────────────────────────┤
│ 输出验证层 → 代码校验、测试执行、任务终止 │
└─────────────────────────────────────────────────────────────┘
```
---
## 🆚 相比 Claude Code 的优势
| 特性 | AiCode | Claude Code |
|:-----|:------:|:------------:|
| **多 LLM 支持** | ✅ Anthropic、Qwen、Ollama | ❌ 仅 Claude |
| **本地部署** | ✅ 完全本地运行,数据可控 | ❌ 依赖云端 API |
| **配置文件** | ✅ JSON 配置,灵活定制 | ❌ 配置选项有限 |
| **权限管理** | ✅ 细粒度规则(工具/命令/路径) | ❌ 基础权限控制 |
| **技能系统** | ✅ SKILL.md 可扩展技能 | ❌ 固定功能 |
| **MCP 协议** | ✅ 完整支持 | ✅ 支持 |
| **LSP 集成** | ✅ 多语言服务器支持 | ⚠️ 有限支持 |
| **会话管理** | ✅ 保存/加载/恢复 | ⚠️ 基础支持 |
| **计划模式** | ✅ 结构化任务跟踪 | ⚠️ 基础支持 |
| **上下文压缩** | ✅ 三种策略可选 | ⚠️ 固定策略 |
| **开源许可** | ✅ Apache 2.0 | ❌ 专有许可 |
| **运行时** | ✅ C++ 高性能 | ⚠️ Node.js |
### 核心优势详解
#### 1. 多 LLM 提供者支持 🔄
AiCode 不绑定单一模型,支持:
- **Anthropic (Claude)** - 通过官方 API 或兼容接口
- **Qwen (通义千问)** - 阿里云 DashScope
- **Ollama** - 本地模型部署
- 易于扩展新的提供者(继承 `LLMProvider` 接口即可)
#### 2. 完全本地可控 🔒
- 配置文件存储在 `~/.aicode/config.json`,完全可控
- 支持自定义 API 端点(包括本地代理)
- 可配置路径白名单/黑名单,精细控制文件访问
- 可配置命令白名单/黑名单,精细控制命令执行
#### 3. 灵活的权限系统 ⚖️
```json
{
"permission_rules": [
{
"tool_name": "bash",
"command_pattern": "git *",
"default_level": "allow"
},
{
"tool_name": "read_file",
"path_pattern": "/etc/*",
"default_level": "deny"
}
]
}
```
#### 4. 可扩展技能系统 🧩
通过 `SKILL.md` 文件定义技能,支持:
- 环境门控(二进制、环境变量、OS 限制)
- 自动安装依赖
- 自定义命令注册
#### 5. 高性能 C++ 实现 ⚡
- 原生编译,无 Node.js 运行时依赖
- 更低的内存占用
- 更快的启动速度
#### 6. 完善的 LSP 支持 💻
- 多语言服务器并发管理
- 诊断、跳转定义、查找引用、悬停信息
- 文档符号、工作区符号、格式化
#### 7. 开源许可 📄
- Apache License 2.0 - 可商用、可修改、可分发
- 社区驱动,透明开发
---
## ✨ 核心特性
### 🏃 REACT 范式 - "思考 - 行动 - 观察"闭环
```
理解 → 规划 → 工具调用 → 观察 → 验证 → 迭代/终止
```
AiCode 采用 **REACT(Reason + Act)范式**,自主生成任务序列(如:读文件 → 改代码 → 运行测试 → 修复报错),支持多轮迭代。
### 🛠️ 工具系统 - 30+ 内置工具
| 类别 | 工具 |
|------|------|
| **文件操作** | `read_file`、`write_file`、`edit_file` |
| **Shell 执行** | `exec`、`bash` |
| **搜索** | `glob`、`grep` |
| **Git** | `git_status`、`git_diff`、`git_log`、`git_commit`、`git_add`、`git_branch` |
| **LSP** | `lsp_diagnostics`、`lsp_go_to_definition`、`lsp_find_references`、`lsp_get_hover` |
| **Web** | `web_search`、`web_fetch` |
| **交互** | `ask_user_question`、`todo_write` |
| **MCP** | `mcp_list_tools`、`mcp_call_tool`、`mcp_read_resource` |
| **Agent** | `agent`、`plan_mode` |
### 🧠 技能系统
技能通过 `SKILL.md` 文件定义,支持环境门控和自动安装:
```markdown
---
name: git
description: Git version control operations
required_bins: [git]
required_envs: []
any_bins: []
config_files: []
os_restrict: []
always: false
emoji: 🦆
---
# Git Skill
You are a git expert. Help users with git operations...
```
### 🔐 权限管理
三种权限级别:
- **Allow** - 自动批准
- **Deny** - 自动拒绝
- **Ask** - 需要用户确认
规则匹配支持工具名、命令模式、路径模式,失败回退逻辑(3 次拒绝后自动批准)。
### 💾 上下文压缩
三种压缩策略:
- **Summary** - 生成旧消息的 AI 摘要
- **Truncate** - 仅保留最近 N 条消息
- **Hybrid** - 摘要 + 保留最近消息(默认)
### 🧩 MCP 协议
支持 MCP (Model Context Protocol) 服务器集成:
- stdio 传输
- SSE/WebSocket 传输
- 工具发现和执行
- 资源读取
---
## 🚀 快速开始
### 环境要求
| 组件 | 要求 | 说明 |
|------|------|------|
| 编译器 | C++17 或更高版本 | 支持现代 C++ 特性 |
| CMake | 3.20+ | 构建系统 |
| 依赖 | nlohmann/json、spdlog、libcurl | 自动下载 |
### 构建
```bash
# 克隆仓库
git clone https://github.com/your-repo/aicode.git
cd aicode
# 创建构建目录
mkdir -p build && cd build
# 配置
cmake .. -DCMAKE_BUILD_TYPE=Release
# 编译
make -j8
# 安装
make install
```
### 运行
```bash
# 使用 Makefile
make run
# 或直接运行
./build/install/bin/aicode
```
### 配置
首次运行时,配置文件将生成在 `~/.aicode/config.json`:
```json
{
"log_level": "info",
"default_provider": "anthropic",
"default_agent": "default",
"providers": {
"anthropic": {
"api_key": "YOUR_API_KEY",
"base_url": "https://api.anthropic.com",
"api_type": "anthropic-messages",
"timeout": 30,
"agents": {
"default": {
"model": "claude-sonnet-4-6",
"temperature": 0.7,
"max_tokens": 8192
}
}
},
"qwen": {
"api_key": "YOUR_DASHSCOPE_KEY",
"base_url": "https://dashscope.aliyuncs.com",
"api_type": "openai-completions",
"timeout": 60,
"agents": {
"default": {
"model": "qwen-max",
"temperature": 0.7,
"max_tokens": 8192
}
}
}
},
"security": {
"permission_level": "auto",
"allow_local_execute": true
},
"tools": {
"enabled": true,
"timeout": 60
},
"skills": {
"path": "~/.aicode/skills",
"auto_approve": ["read_file", "grep"]
}
}
```
### 环境变量
可通过以下环境变量覆盖配置:
| 变量 | 说明 |
|------|------|
| `AICODE_CONFIG_PATH` | 自定义配置文件路径 |
| `AICODE_LOG_LEVEL` | 日志级别 |
| `ANTHROPIC_API_KEY` | Anthropic API 密钥 |
| `QWEN_API_KEY` | 通义千问 API 密钥 |
---
## 📋 使用方式
### 基本交互
启动 AiCode 后,可以直接输入自然语言指令:
```
$ aicode
AiCode v1.0.0
> 帮我查看当前目录的文件结构
> 创建一个计算斐波那契数列的函数
> 运行测试并修复失败的用例
```
### 内置命令
| 命令 | 功能 |
|------|------|
| `/help` | 显示帮助信息 |
| `/clear` | 清除对话历史 |
| `/plan` | 进入/退出计划模式 |
| `/compact` | 手动压缩上下文 |
| `/model` | 切换使用的模型 |
| `/provider` | 切换 LLM 提供者 |
| `/session` | 管理会话(保存/加载/列表) |
| `/mcp` | MCP 服务器管理 |
| `/skill` | 技能管理 |
| `/exit` | 退出程序 |
### 会话管理
```bash
# 保存当前会话
/session save my-session
# 列出所有会话
/session list
# 加载会话
/session load my-session
# 删除会话
/session delete my-session
```
---
## 🏗️ 架构设计
### 系统架构图
```
┌─────────────────────────────────────────────────────────┐
│ CLI Layer (cli/) │
│ CommandRegistry │ InputHandler │ UI │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ AgentCommander (core/) │
│ 用户交互、命令处理、Agent 执行编排 │
└─────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ AgentCore │ │ MemoryManager │ │ SkillLoader │
│ 消息处理/工具 │ │ 工作空间文件/ │ │ 技能加载/解析 │
│ 执行/LLM 交互 │ │ 会话管理 │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ToolRegistry │ │ LspManager │ │ McpClient │
│ 工具注册/执行 │ │ LSP 语言服务 │ │ MCP 协议客户端 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ LLM Providers (providers/) │
│ AnthropicProvider │ QwenProvider │ LLMProvider │
└─────────────────────────────────────────────────────────┘
```
### 核心模块
| 模块 | 职责 |
|------|------|
| `AgentCommander` | 系统入口,编排用户交互和 Agent 执行(单例模式) |
| `AgentCore` | 消息处理、工具执行、LLM 交互的核心循环 |
| `MemoryManager` | 工作空间文件管理、每日记忆存储、文件变化监听 |
| `SkillLoader` | SKILL.md 解析、技能门控检查、自动安装依赖 |
| `ToolRegistry` | 工具注册、Schema 生成、执行路由 |
| `LLMProvider` | LLM API 抽象接口(Anthropic/Qwen) |
| `CompactService` | 上下文压缩,管理长对话历史(单例模式) |
| `PermissionManager` | 工具调用授权(allow/deny/ask,单例模式) |
| `PlanModeManager` | 结构化任务规划和跟踪(单例模式) |
| `LspManager` | LSP 语言服务器管理、JSON-RPC 通信(单例模式) |
| `McpClient` | MCP 协议客户端,支持外部工具集成(单例模式) |
| `SessionManager` | 会话创建/保存/加载/恢复 |
### 设计模式
| 模式 | 应用 |
|------|------|
| **单例模式** | `AgentCommander`、`CompactService`、`PermissionManager`、`PlanModeManager`、`LspManager`、`McpClient`、`SessionManager` |
| **策略模式** | `LLMProvider` 接口(`AnthropicProvider`、`QwenProvider`) |
| **工厂模式** | `ToolRegistry` 注册和创建工具执行器、`SkillLoader` 解析和实例化技能 |
| **观察者模式** | `AgentEventCallback`(流式响应事件)、`FileChangeCallback`(文件变化监听) |
---
## 📁 项目结构
```
AiCode/
├── main_src/
│ ├── cli/ # CLI 交互层
│ │ ├── command_registry.* # 命令注册和执行
│ │ └── input_handler.* # 终端输入处理
│ ├── common/ # 通用工具
│ │ ├── config.* # 配置系统
│ │ ├── constants.h # 常量定义
│ │ ├── curl_client.* # HTTP 客户端
│ │ └── log_wrapper.h # 日志封装
│ ├── core/ # 核心业务逻辑
│ │ ├── agent_commander.* # 主入口/编排器
│ │ ├── agent_core.* # Agent 核心循环
│ │ ├── compact_service.* # 上下文压缩
│ │ ├── memory_manager.* # 文件/记忆管理
│ │ ├── permission_manager.*# 权限管理
│ │ ├── plan_mode.* # 计划模式
│ │ ├── skill_loader.* # 技能加载
│ │ ├── system_prompt.* # 系统提示构建
│ │ └── session_manager.* # 会话管理
│ ├── providers/ # LLM 提供者
│ │ ├── llm_provider.* # 抽象接口
│ │ ├── anthropic_provider.*# Anthropic API
│ │ └── qwen_provider.* # Qwen API
│ ├── tools/ # 工具实现
│ │ ├── tool_registry.* # 工具注册表
│ │ ├── glob_tool.*
│ │ ├── grep_tool.*
│ │ ├── lsp_tool.*
│ │ └── ...
│ ├── mcp/ # MCP 协议
│ │ └── mcp_client.* # MCP 客户端
│ ├── managers/ # 管理器
│ │ ├── buddy_manager.* # Buddy 系统
│ │ └── token_tracker.* # Token 追踪
│ └── services/ # 外部服务
│ ├── lsp_manager.* # LSP 管理
│ └── cron_scheduler.* # 定时任务
├── config/ # 配置文件
├── tests/ # 测试代码
├── docs/ # 技术文档
├── CMakeLists.txt # 构建配置
└── Makefile # 快捷构建脚本
```
---
## 📚 配置详解
### 顶层配置
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `log_level` | string | "info" | 日志级别:debug/info/warn/error |
| `default_provider` | string | "anthropic" | 默认 LLM 提供者 |
| `default_agent` | string | "default" | 默认 Agent 配置名 |
### Agent 配置
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `model` | string | "claude-sonnet-4-6" | 使用的模型 |
| `temperature` | float | 0.7 | 温度参数 |
| `max_tokens` | int | 8192 | 最大输出 Token 数 |
| `context_window` | int | 128000 | 上下文窗口大小 |
| `thinking` | string | "off" | Thinking 模式:off/low/medium/high |
| `use_tools` | boolean | true | 是否启用工具 |
| `auto_compact` | boolean | true | 是否自动压缩上下文 |
### Security 配置
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `permission_level` | string | "auto" | 权限模式:auto/default/bypass |
| `allow_local_execute` | boolean | true | 是否允许本地命令执行 |
### Tools 配置
| 字段 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `enabled` | boolean | true | 是否启用工具 |
| `allowed_paths` | array | [] | 允许访问的路径白名单 |
| `denied_paths` | array | [] | 禁止访问的路径黑名单 |
| `allowed_cmds` | array | [] | 允许执行的命令白名单 |
| `denied_cmds` | array | [] | 禁止执行的命令黑名单 |
| `timeout` | int | 60 | 工具执行超时(秒) |
---
## 📖 文档
| 文档 | 描述 |
|------|------|
| [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) | 系统架构设计文档 |
| [docs/FEATURES.md](./docs/FEATURES.md) | 核心功能清单 |
| [docs/CONFIGURATION.md](./docs/CONFIGURATION.md) | 配置指南 |
| [docs/API_REFERENCE.md](./docs/API_REFERENCE.md) | API 接口规范 |
---
## 🔧 故障排查
### 常见问题
**1. API 密钥错误**
- 检查 `api_key` 是否正确
- 确认环境变量优先级
**2. 工具执行失败**
- 检查 `allowed_cmds` 白名单
- 确认路径在 `allowed_paths` 内
**3. 技能未加载**
- 检查 `required_bins` 是否存在
- 确认 `os_restrict` 匹配当前系统
**4. LSP 无法启动**
- 确认语言服务器已安装
- 检查 `command` 路径是否正确
---
## 📄 许可证
Licensed under the Apache License, Version 2.0.
See [LICENSE](./LICENSE) for details.
---
## 🙏 致谢
- **Anthropic** - Claude 大模型的创造者
- **C++ 社区** - 优秀的系统编程语言和工具链
- **所有贡献者** - 感谢每一位为项目做出贡献的开发者
---
**Made with ❤️ and C++ 🦾**
如果这个项目对你有帮助,请给一个 ⭐️ Star 支持一下!