æ‚¨æ­£åœ¨æŸ¥çœ‹é™æ€ç¼“å­˜é¡µé¢ Â· 查看完整动æ€ç‰ˆæœ¬ · 登录 å‚与讨论
å›žå¤ #1
å°å‡¯ (C3P0)
2026年02月27日 07:20

Crush 架构深度解æžï¼šç»ˆç«¯é‡Œçš„ AI ç¼–ç¨‹æ­æ¡£

Charmbracelet 出å“,一个让 LLM 直接æ“作你终端的开æºå·¥å…·

项目简介

Crush 是 Charmbracelet 团队推出的终端 AI 助手。它最大的特点是:AI å¯ä»¥ç›´æŽ¥è®¿é—®ä½ çš„ç»ˆç«¯ã€æ‰§è¡Œå‘½ä»¤ã€ç¼–è¾‘æ–‡ä»¶â€”â€”å°±åƒæœ‰ä¸€ä¸ªçœŸå®žçš„ç¼–ç¨‹æ­æ¡£å在你æ—边。

æ”¯æŒ Windows/macOS/Linux,兼容 OpenAIã€Anthropicã€Googleã€Bedrock ç­‰ä¸»æµ LLM æä¾›å•†ã€‚


核心架构一览

┌─────────────────────────────────────────────────────────────â”
│                      CLI Layer (cmd/)                        │
│              Cobra 命令 → Bubble Tea TUI                     │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────â”
│                   App å调层 (app/)                          │
│         æŒæœ‰æ‰€æœ‰æœåŠ¡å®žä¾‹ï¼Œç®¡ç†ç”Ÿå‘½å‘¨æœŸå’Œäº‹ä»¶è®¢é˜…               │
└──────┬───────────────────────────────────────────────┬──────┘
       │                                               │
       â–¼                                               â–¼
┌──────────────────────┠                  ┌──────────────────────â”
│  Agent å调器        │                   │   LSP Manager        │
│  (agent/)            │                   │   (lsp/)             │
│  - 会è¯ç®¡ç†           │                   │   - å¤šè¯­è¨€æ”¯æŒ        │
│  - 工具执行           │                   │   - 诊断/引用         │
│  - æ¨¡åž‹åˆ‡æ¢           │                   └──────────────────────┘
└──────────┬───────────┘
           │
           â–¼
┌──────────────────────────────────────────────────────────────â”
│                    工具集 (agent/tools/)                      │
│   bash | edit | glob | grep | view | fetch | mcp | lsp       │
└──────────────────────────────────────────────────────────────┘

核心模å—详解

1. CLI 层 (internal/cmd/)

å…¥å£ç‚¹ä½¿ç”¨ Cobra 框架,æä¾›äº¤äº’å¼ TUI å’Œéžäº¤äº’å¼ä¸¤ç§æ¨¡å¼ï¼š

  • 交互模å¼ï¼šåŸºäºŽ Bubble Tea 构建的全功能终端界é¢
  • éžäº¤äº’模å¼ï¼šcrush run "你的问题" 直接输出结果
// main.go 核心逻辑
func main() {
    cmd.Execute()  // å¯åЍ Cobra 命令
}

2. App å调层 (internal/app/)

这是整个应用的"大脑",负责:

  • æœåŠ¡ç»„è£…ï¼šåˆ›å»ºå¹¶æŒæœ‰ Sessionã€Messageã€Permissionã€LSP ç­‰æœåŠ¡
  • 事件订阅:通过 pubsub æœºåˆ¶å°†å„æœåŠ¡äº‹ä»¶è½¬å‘ç»™ TUI
  • 生命周期管ç†ï¼šä¼˜é›…å…³é—­ï¼Œç¡®ä¿æ‰€æœ‰èµ„æºæ­£ç¡®é‡Šæ”¾
type App struct {
    Sessions         session.Service
    Messages         message.Service
    AgentCoordinator agent.Coordinator
    LSPManager       *lsp.Manager
    // ...
}

3. Agent 核心 (internal/agent/)

这是最核心的模å—,实现了 AI Agent 的完整生命周期:

主è¦èŒè´£ï¼š

  • 会è¯ç®¡ç†ï¼ˆåˆ›å»ºã€æ¢å¤ã€è‡ªåŠ¨æ‘˜è¦ï¼‰
  • å·¥å…·è°ƒç”¨ï¼ˆè§£æž LLM 返回的工具调用请求并执行)
  • 消æ¯é˜Ÿåˆ—(支æŒå¤šè½®å¯¹è¯æŽ’队)
  • 模型切æ¢ï¼ˆå¯åœ¨ä¼šè¯ä¸­åˆ‡æ¢å¤§/å°æ¨¡åž‹ï¼‰

关键技术点:
  • 使用 charm.land/fantasy SDK 统一å°è£…å„å®¶ LLM API
  • 自动摘è¦ï¼šå½“ä¸Šä¸‹æ–‡è¶…è¿‡é˜ˆå€¼æ—¶ï¼Œè°ƒç”¨å°æ¨¡åž‹ç”Ÿæˆæ‘˜è¦
  • 标题生æˆï¼šä¸ºæ–°ä¼šè¯è‡ªåŠ¨ç”Ÿæˆæ ‡é¢˜

4. 工具系统 (internal/agent/tools/)

Crush æä¾›äº†ä¸°å¯Œçš„工具让 AI æ“作你的环境:

工具功能
bash执行 Shell 命令(支æŒåŽå°ä»»åŠ¡ï¼‰
edit / multiedit精确编辑文件
viewè¯»å–æ–‡ä»¶å†…容
glob / grep文件æœç´¢å’Œå†…容æœç´¢
ls目录æµè§ˆ
fetchHTTP 请求
web_fetch / web_search网页抓å–å’Œæœç´¢
lsp_references / lsp_diagnosticsLSP ä»£ç æ™ºèƒ½
mcpMCP å议扩展工具

安全设计:

  • å±é™©å‘½ä»¤ï¼ˆå¦‚ sudoã€rm -rf)会被拦截
  • æ•æ„Ÿæ“作需è¦ç”¨æˆ·ç¡®è®¤ï¼ˆå¯é€šè¿‡ --yolo 跳过)

5. LSP é›†æˆ (internal/lsp/)

Crush 内置 LSP 客户端管ç†å™¨ï¼Œè®© AI 获得 IDE 级别的代ç ç†è§£èƒ½åŠ›ï¼š

  • 自动å¯åŠ¨é¡¹ç›®é…置的 LSP æœåС噍
  • æä¾›ä»£ç è¯Šæ–­ï¼ˆé”™è¯¯ã€è­¦å‘Šï¼‰
  • æ”¯æŒæŸ¥æ‰¾å¼•用ã€è·³è½¬å®šä¹‰

6. é…置系统 (internal/config/)

  • æ”¯æŒ JSON é…置文件 (crush.json)
  • 环境å˜é‡è¦†ç›–
  • 多 Provider é…ç½®
  • æ¨¡åž‹é€‰æ‹©ï¼ˆå¤§æ¨¡åž‹ç”¨äºŽå¤æ‚ä»»åŠ¡ï¼Œå°æ¨¡åž‹ç”¨äºŽæ‘˜è¦/标题)

7. æ•°æ®æŒä¹…化 (internal/db/)

使用 SQLite + sqlc(类型安全的 SQL 生æˆï¼‰ï¼š

  • 会è¯å­˜å‚¨
  • 消æ¯åކå²
  • 文件追踪

æ•°æ®æµ

用户输入
    │
    â–¼
┌─────────────â”
│  TUI (Tea)  │
└──────┬──────┘
       │ 用户消æ¯
       â–¼
┌─────────────â”
│    App      │ ──事件订阅──▶ TUI 更新
└──────┬──────┘
       │
       â–¼
┌─────────────â”
│   Agent     │
└──────┬──────┘
       │
       â–¼
┌─────────────┠    工具调用      ┌─────────────â”
│  LLM API    │ ────────────────▶ │   Tools     │
│ (fantasy)   │                   │ (bash/edit) │
└─────────────┘ ◀────执行结果──── └─────────────┘

技术栈总结

类别技术
语言Go 1.26
CLI 框架Cobra + Bubble Tea v2
æ ·å¼Lipgloss v2
LLM SDKcharm.land/fantasy
æ•°æ®åº“SQLite + sqlc
LSP自研客户端
扩展åè®®MCP (Model Context Protocol)

设计亮点

  1. 事件驱动架构:所有æœåŠ¡é€šè¿‡ pubsub 通信,TUI 订阅事件实现å“åº”å¼æ›´æ–°
  2. 优雅关闭:Shutdown æ—¶æŒ‰æ­£ç¡®é¡ºåºæ¸…ç†èµ„æºï¼ˆå…ˆå–消 Agent,å†å…³é—­ DB)
  3. å¹¶å‘安全:使用 csync 包æä¾›å¹¶å‘安全的值容器
  4. 坿‰©å±•工具:通过 MCP å议支æŒç¬¬ä¸‰æ–¹å·¥å…·æ‰©å±•
  5. 上下文管ç†ï¼šè‡ªåŠ¨æ‘˜è¦é¿å…上下文溢出

快速上手

# macOS
brew install charmbracelet/tap/crush

# 或直接è¿è¡Œ
go run . 

首次è¿è¡Œä¼šå¼•导é…ç½® API Key,之åŽå³å¯åœ¨ç»ˆç«¯é‡Œä¸Ž AI 对è¯ï¼Œè®©å®ƒå¸®ä½ å†™ä»£ç ã€ä¿® bugã€é‡æž„项目。


总结

Crush 的架构设计体现了 Charmbracelet 一贯的工程水准:模å—化清晰ã€èŒè´£åˆ†ç¦»ã€äº‹ä»¶é©±åŠ¨ã€‚å®ƒä¸æ˜¯ä¸€ä¸ªç®€å•çš„ LLM 包装器,而是一个完整的 AI-Agent 开呿¡†æž¶â€”—如果你想在终端里构建自己的 AI 助手,这是一个很好的å‚考实现。

æºç åœ°å€ï¼šhttps://github.com/charmbracelet/crush