Crush 是一个运行在终端的 AI 编程助手,由 Charmbracelet 团队开发。它通过集成大语言模型(LLM),帮助开发者在终端中高效完成代码编写、调试和项目管理。Crush 支持多种模型,允许用户灵活切换,支持语言服务器协议(LSP)以获取代码上下文,还提供模型上下文协议(MCP)扩展功能。它兼容多种操作系统,包括 macOS、Linux 和 Windows,适合喜欢终端操作的开发者。Crush 设计简洁,注重实用性和性能,旨在提升编码效率。
功能列表
- 支持多种大语言模型(LLM),如 OpenAI、Anthropic 或本地模型(如 Ollama),可中途切换模型。
- 集成语言服务器协议(LSP),提供代码补全、语法检查等功能。
- 支持模型上下文协议(MCP),通过 HTTP、stdio 或 SSE 扩展功能。
- 提供多会话管理,允许在不同项目间切换并保留上下文。
- 支持全平台运行,包括 macOS、Linux、Windows(PowerShell 和 WSL)、FreeBSD 等。
- 提供灵活的配置文件,支持项目级或全局配置。
- 社区支持的模型列表(Catwalk),便于用户添加或更新模型。
- 提供代码生成和调试功能,优化终端工作流。
使用帮助
安装流程
Crush 支持多种安装方式,适用于不同操作系统和包管理器。以下是详细的安装步骤:
通过 Homebrew 安装(macOS/Linux)
- 打开终端,运行以下命令:
brew install charmbracelet/tap/crush
- 等待安装完成,输入
crush --version
验证安装成功。
通过 NPM 安装(跨平台)
- 确保已安装 Node.js。
- 在终端运行:
npm install -g @charmland/crush
- 检查版本:
crush --version
。
通过 Arch Linux 安装
- 使用 Yay 包管理器:
yay -S crush-bin
- 验证安装:
crush --version
。
通过 Nix 安装
- 运行以下命令:
nix run github:numtide/nix-ai-tools#crush
- 或通过 NUR 安装:
nix-channel --add https://github.com/nix-community/NUR/archive/main.tar.gz nur nix-channel --update nix-shell -p '(import <nur> { pkgs = import <nixpkgs> {}; }).repos.charmbracelet.crush'
通过 Debian/Ubuntu 安装
- 添加 Charm 软件源:
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpg echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
- 更新并安装:
sudo apt update && sudo apt install crush
通过 Fedora/RHEL 安装
- 添加 Yum 软件源:
echo '[charm] name=Charm baseurl=https://repo.charm.sh/yum/ enabled=1 gpgcheck=1 gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repo
- 安装 Crush:
sudo yum install crush
验证安装
安装完成后,运行 crush --version
检查版本信息。如果显示版本号,说明安装成功。
配置 API 密钥
Crush 需要配置大语言模型的 API 密钥才能正常工作。以下是配置步骤:
- 获取 API 密钥:
- 支持的模型提供商包括 OpenAI、Anthropic、Groq 或 OpenRouter。
- 访问提供商官网,注册并获取 API 密钥。
- 配置密钥:
- 在终端运行
crush config
进入配置模式。 - 输入 API 密钥,按提示保存。
- 在终端运行
- 本地模型支持:
- 如果使用本地模型(如 Ollama),需配置 OpenAPI 兼容接口。例如:
{ "$schema": "https://charm.land/crush.json", "providers": { "ollama": { "type": "openai", "base_url": "http://127.0.0.1:11434/v1", "api_key": "ollama", "models": [ { "id": "devstral", "name": "devstral", "context_window": 131072 } ] } } }
- 将配置文件保存至项目目录或
~/.crush/config.json
。
- 如果使用本地模型(如 Ollama),需配置 OpenAPI 兼容接口。例如:
使用 Crush 的主要功能
代码生成
- 在终端输入
crush code
,然后描述需求,如:crush code "编写一个 Python 函数,计算斐波那契数列"
- Crush 会调用配置的 LLM,生成代码并显示。
- 如果代码未正确包裹代码块,可在
CRUSH.md
文件中添加规则:```python # 代码示例
代码调试
- 输入
crush debug
,粘贴有问题的代码。 - Crush 会分析代码,建议修复方案。
- 使用 LSP 增强调试:
- 配置 LSP 服务器,例如 Go 的
gopls
:{ "$schema": "https://charm.land/crush.json", "lsp": { "go": { "command": "gopls" }, "typescript": { "command": "typescript-language-server", "args": ["--stdio"] } } }
- Crush 会利用 LSP 提供语法检查和补全建议。
- 配置 LSP 服务器,例如 Go 的
会话管理
- 创建新会话:
crush session new <项目名>
。 - 切换会话:
crush session switch <项目名>
。 - 查看会话列表:
crush session list
。 - 会话保留上下文,确保不同项目的工作流不冲突。
扩展功能(MCP)
- 配置 MCP 服务器:
{ "mcp": { "transport": "http", "endpoint": "http://example.com/mcp" } }
- Crush 通过 MCP 访问外部工具或服务,扩展功能。
验证发布文件
Crush 提供签名验证,确保下载文件安全:
- 下载发布文件和签名文件(如
checksums.txt
、checksums.txt.sig
)。 - 运行验证命令:
cosign verify-blob \ --certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ --cert 'https://github.com/charmbracelet/crush/releases/download/v0.1.11/checksums.txt.pem' \ --signature 'https://github.com/charmbracelet/crush/releases/download/v0.1.11/checksums.txt.sig' \ ./checksums.txt
- 输出显示 “Verified OK” 表示文件安全。
应用场景
- 终端高效编码
- 开发者在终端中编写代码时,Crush 可快速生成代码片段、提供调试建议,减少切换至浏览器或 IDE 的时间。
- 跨项目管理
- 对于管理多个项目的开发者,Crush 的会话管理功能可保存不同项目的上下文,快速切换工作环境。
- 本地模型开发
- 使用本地模型(如 Ollama)的开发者可通过 Crush 在无网络环境下完成代码生成和调试。
- 团队协作
- 团队可通过共享配置文件和 Catwalk 模型库,统一开发环境,提高协作效率。
QA
- Crush 支持哪些操作系统?
- Crush 支持 macOS、Linux、Windows(包括 PowerShell 和 WSL)、FreeBSD、OpenBSD 和 NetBSD。
- 如何切换不同的 LLM?
- 在会话中运行
crush model switch <模型名>
,或在配置文件中指定模型。
- 在会话中运行
- Crush 是否支持离线使用?
- 搭配本地模型(如 Ollama)和本地配置,Crush 可完全离线运行。
- 如何解决代码块渲染问题?
- 在
CRUSH.md
文件中添加代码块规则,或检查 LLM 输出格式设置。
- 在