Crush 项目概览

项目背景与设计目标

Crush 是由 Charm Bracelet 开发的终端 AI 编程助手,旨在将大型语言模型(LLM)的能力无缝集成到开发者的终端工作流中。项目的核心设计哲学是:

“Your tools, your code, and your workflows, wired into your LLM of choice.” (你的工具、代码和工作流,无缝接入你选择的 LLM)

核心设计目标

  1. 终端原生体验: 基于 TUI(Text User Interface)提供沉浸式终端体验,无需离开终端即可与 AI 协作
  2. 多模型支持: 不绑定单一 LLM 提供商,支持 Anthropic、OpenAI、Gemini、Bedrock 等主流提供商
  3. 会话管理: 基于 SQLite 的持久化会话系统,支持多项目、多会话并行工作
  4. 工具扩展: 内置丰富的代码操作工具 + MCP(Model Context Protocol)扩展机制
  5. 代码智能: LSP(Language Server Protocol)集成,提供代码补全、定义跳转等智能功能

核心功能与技术特点

1. 多 LLM 提供商支持

提供商特点配置方式
AnthropicClaude 系列模型,支持推理和工具调用API Key
OpenAIGPT 系列,函数调用能力强API Key
GeminiGoogle 多模态模型API Key
BedrockAWS 托管的 Claude 模型AWS Credentials
VertexAIGoogle Cloud 平台GCP 认证
Ollama/LM Studio本地模型支持OpenAI-compatible API

技术实现: 通过 charm.land/fantasy 库抽象不同提供商的 API 差异,统一接口调用。

2. 会话管理系统

  • 基于 SQLite 的持久化: 会话历史、消息记录、文件追踪全部本地存储
  • 自动命名: 首次对话自动生成会话标题(基于 LLM 内容分析)
  • 消息队列: 支持消息排队,当 Agent 忙碌时自动缓存后续提示
  • 自动摘要: 长会话自动触发上下文压缩,保持上下文窗口高效利用

3. 工具系统(Tools)

内置 15+ 代码操作工具,覆盖开发全流程:

文件操作: view, write, edit, glob, ls
代码搜索: grep, rg, references
命令执行: bash, shell
开发工具: fetch, download, job_output
其他: safe, todos

工具调用流程:

  1. Agent 根据用户提示决定调用哪些工具
  2. 工具执行前检查权限(permission.Service)
  3. 工具执行并返回结果
  4. 结果自动添加到对话上下文
  5. Agent 基于结果继续推理或回复用户

4. MCP(Model Context Protocol)扩展

支持三种传输类型的 MCP 服务器:

  • stdio: 命令行工具(如文件系统 MCP)
  • http: HTTP 端点(如 GitHub Copilot MCP)
  • sse: Server-Sent Events 流式接口

MCP 让 Crush 可以动态加载外部工具和能力,无需修改核心代码。

5. LSP 集成

  • 自动发现: 基于项目类型自动检测可用的 LSP 服务器
  • 按需启动: 用户首次需要时才启动 LSP,节省资源
  • 智能提示: LSP 提供符号定义、引用、错误等额外上下文给 LLM

6. TUI 界面

基于 charm.land/bubbletea/v2 构建,特点:

  • 响应式设计: 适配不同终端尺寸
  • 实时流式输出: LLM 回复逐字显示,低延迟体验
  • 富文本渲染: 代码高亮、Markdown 渲染、图片显示
  • 对话模式: 类 ChatGPT 的对话界面,支持附件上传

架构图(文字描述)

┌─────────────────────────────────────────────────────────────────┐
│                          CLI Layer                               │
│                    (cobra commands)                              │
│         crush run / crush login / crush sessions                │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      App Initialization                          │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │
│  │   Config    │ │  SQLite DB  │ │   LSP Mgr   │ │  MCP Mgr  │ │
│  │  (crush.json)│ │  (sessions) │ │(lang servers)│ │(extensions)│
│  └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘ │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                        Coordinator                               │
│              (协调多个 SessionAgent 的生命周期)                   │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                    SessionAgent                          │   │
│  │  ┌─────────────┐ ┌─────────────┐ ┌───────────────────┐  │   │
│  │  │   Large     │ │   Small     │ │   System Prompt   │  │   │
│  │  │   Model     │ │   Model     │ │   (Go Template)   │  │   │
│  │  └─────────────┘ └─────────────┘ └───────────────────┘  │   │
│  │                                                         │   │
│  │  ┌─────────────────────────────────────────────────────┐│   │
│  │  │              Message Queue & State                   ││   │
│  │  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐   ││   │
│  │  │  │ Active  │ │ Queued  │ │ Messages│ │ Session │   ││   │
│  │  │  │Requests │ │ Prompts │ │  (DB)   │ │  (DB)   │   ││   │
│  │  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘   ││   │
│  │  └─────────────────────────────────────────────────────┘│   │
│  └─────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                        Tool System                               │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │
│  │ Built-in    │ │    MCP      │ │   LSP       │ │  Permission│ │
│  │ Tools       │ │   Tools     │ │  Context    │ │   Check   │ │
│  │(view,edit,) │ │(external)   │ │(code intel) │ │ (yolo/ask) │ │
│  └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘ │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    LLM Provider Layer                            │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐│
│  │Anthropic │ │  OpenAI  │ │  Gemini  │ │ Bedrock  │ │  ...   ││
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘ └────────┘│
│                                                                 │
│              Abstracted by: charm.land/fantasy                 │
└─────────────────────────────────────────────────────────────────┘

技术栈详解

核心依赖

// go.mod 关键依赖
require (
    charm.land/fantasy v0.x.x        // LLM 提供商抽象层
    charm.land/bubbletea/v2 v2.x.x   // TUI 框架
    charm.land/lipgloss/v2 v2.x.x    // 终端样式
    charm.land/glamour/v2 v2.x.x     // Markdown 渲染
    github.com/mattn/go-sqlite3 v1.x.x // SQLite 驱动
    github.com/sqlc-dev/sqlc v1.x.x  // SQL 代码生成
)

关键技术选型

  1. Go 1.22+: 利用泛型、协程优化、标准库增强
  2. SQLite + sqlc: 类型安全的 SQL 操作,编译时检查
  3. Bubble Tea v2: 响应式 TUI,基于 The Elm Architecture
  4. charm.land/fantasy: 统一多 LLM 提供商的 Go SDK
  5. Cobra: CLI 框架,支持子命令和 Flag 解析

与同类项目的对比

特性CrushClaude CodeGitHub Copilot CLIAider
运行环境本地终端本地终端本地终端本地终端
开源✅ FSL-1.1-MIT✅ Apache 2.0❌ 闭源✅ Apache 2.0
多 LLM 支持✅ 10+ 提供商⚠️ 仅 Anthropic⚠️ OpenAI/GitHub✅ 多提供商
TUI 界面✅ Bubble Tea✅ 自研✅ 自研⚠️ 简单界面
MCP 支持✅ 完整支持⚠️ 部分支持⚠️ 部分支持❌ 不支持
LSP 集成✅ 自动发现✅ 内置✅ 内置⚠️ 基础支持
会话管理✅ SQLite 持久化✅ 本地存储✅ 云端同步⚠️ 文件级
工具系统✅ 15+ 内置 + MCP✅ 10+ 内置✅ 8+ 内置⚠️ 基础工具
本地模型✅ Ollama/LMStudio❌ 不支持❌ 不支持✅ 支持

核心优势

  1. 最强扩展性: MCP 协议支持让工具生态无限扩展
  2. 本地优先: 数据全部本地存储,隐私可控
  3. 提供商无关: 不锁定单一 LLM,根据场景选择模型
  4. Charm 生态: 基于成熟的 Charm TUI 组件库,界面精致
  5. 性能优化: Go 语言 + SQLite,启动快、响应快

适用场景

  • 日常开发: 代码解释、重构、Bug 修复
  • 代码审查: 结合 LSP 理解代码上下文,提供精准建议
  • 项目初始化: 生成项目结构、配置文件、文档
  • 多文件操作: 跨文件重构、批量修改
  • 学习探索: 理解新代码库,生成学习笔记

总结

Crush 代表了新一代终端 AI 编程助手的演进方向:开放、可扩展、本地优先。通过模块化的架构设计,它将 LLM 能力、代码智能和开发者工作流无缝融合,同时保持了对多种模型和工具的开放支持。对于追求效率和控制权的开发者来说,Crush 提供了一个功能强大且高度可定制的 AI 编程伙伴。


相关文档: