Crush:你的新编码最佳拍档,随时随地提升开发效率

想象一下,有一个工具能让你的编码工作变得更简单、更高效,无论你在哪里、用什么设备,它都能陪着你,把你的代码、工具和工作流程与强大的语言模型连接起来。这就是Crush——一款专为开发者设计的终端应用。今天,我们就来聊聊Crush是什么、它能做什么,以及如何让它成为你日常开发中的得力助手。所有内容都来自它的技术文档,保证真实、实用、接地气,适合专科及以上毕业生轻松上手。

Charm Crush Logo
Latest Release
Build Status

你的新编码最佳拍档,随时随地为你服务。
将你的工具、代码和工作流程与你选择的LLM连接起来。

Crush Demo


Crush是什么?

Crush是一款运行在终端上的应用,它的核心目标是把你的开发工具、代码和工作流程与大型语言模型(LLM)结合起来。你可以把它想象成一个超级助手,能帮你在敲代码时更聪明、更高效。不管你是用macOS、Linux、Windows(支持PowerShell和WSL),还是FreeBSD、OpenBSD、NetBSD,Crush都能完美适配。

那它具体能干啥呢?简单来说,Crush能让你在终端里直接调用语言模型,处理代码相关任务,比如生成代码片段、分析问题,甚至还能通过语言服务器协议(LSP)理解你的项目上下文。它就像一个随时待命的编程伙伴,帮你省时间、少走弯路。

Crush的核心功能有哪些?

为了让你更清楚Crush的能耐,我整理了它的几个亮点:

  • 「多模型支持」:你可以从一堆语言模型里挑一个喜欢的,比如OpenAI、Anthropic,或者通过兼容的API加个你自己的模型。
  • 「灵活切换」:写代码写到一半,想换个模型试试?没问题,Crush支持随时切换,还能保留之前的上下文。
  • 「会话管理」:每个项目可以有多个独立的工作会话,上下文互不干扰,特别适合多任务并行。
  • 「LSP增强」:它能用LSP(语言服务器协议)获取项目信息,给你更贴合实际的建议。
  • 「可扩展性」:通过MCP(模型上下文协议,支持httpstdiosse三种方式),你可以给Crush加新功能。
  • 「跨平台」:无论你用什么系统,Crush都能跑得顺畅。

这些功能听起来是不是很实用?接下来,我们看看怎么把它装到你的电脑上。


如何安装Crush?

Crush的安装方式特别多样,不管你是喜欢用包管理器,还是直接下载文件,甚至用Go编译,都能找到适合你的方法。下面我详细介绍一下每种方式的操作步骤。

1. 用包管理器安装

如果你习惯用包管理器,Crush支持以下几种常见工具:

  • 「Homebrew(macOS用户)」

    brew install charmbracelet/tap/crush
    
  • 「NPM(Node.js爱好者)」

    npm install -g @charmland/crush
    
  • 「Arch Linux(yay用户)」

    yay -S crush-bin
    
  • 「Nix(跨平台选择)」

    nix run github:numtide/nix-ai-tools#crush
    

针对特定系统的额外选项

  • 「Debian/Ubuntu」

    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」

    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
    sudo yum install crush
    

2. 下载预编译文件

不想折腾包管理器?直接去Crush的GitHub发布页下载现成的文件吧,支持以下格式:

  • 「软件包」:Debian(.deb)和RPM格式。
  • 「二进制文件」:适用于Linux、macOS、Windows、FreeBSD、OpenBSD和NetBSD。

3. 用Go安装

如果你是Go开发者,可以直接用这一招:

go install github.com/charmbracelet/crush@latest

安装完后,敲个crush命令试试,看看能不能跑起来。如果顺利的话,你就离高效编码更近一步了!

「小提示」:第一次用Crush可能会让你有点“上头”,效率提升的同时,也可能忍不住多玩一会儿。如果有啥问题,欢迎加入Discord社区,跟大家聊聊你的体验。


快速上手Crush

装好了Crush,接下来怎么用呢?别急,我一步步带你入门。

第一步:准备API密钥

Crush需要连接语言模型,所以你得先弄个API密钥。支持的提供商包括Anthropic、OpenAI、Groq、OpenRouter等。拿到密钥后,启动Crush,它会提示你输入。

不想每次都手动输入?可以直接设置环境变量,这样更省事。以下是常见提供商的环境变量列表:

环境变量 提供商
ANTHROPIC_API_KEY Anthropic
OPENAI_API_KEY OpenAI
GEMINI_API_KEY Google Gemini
GROQ_API_KEY Groq
AWS_ACCESS_KEY_ID AWS Bedrock (Claude)
AWS_SECRET_ACCESS_KEY AWS Bedrock (Claude)
AZURE_OPENAI_API_KEY Azure OpenAI

设置方法很简单,比如在Linux或macOS上:

export OPENAI_API_KEY="你的密钥"

Windows用户可以用PowerShell:

$env:OPENAI_API_KEY = "你的密钥"

第二步:启动Crush

输入crush命令,回车,Crush就跑起来了。如果设置了环境变量,它会自动识别;如果没有,就按提示输入密钥。之后,你就可以开始用它写代码、调试或者探索功能了。

额外小贴士:想加新模型?

Crush内置了不少模型,但如果你想要更多选择,可以去Catwalk贡献代码。这个社区项目专门管理Crush兼容的模型,欢迎你加入!

Catwalk Badge


如何配置Crush?

Crush默认就能用得很顺手,但如果你想调整一下功能,或者让它更贴合你的习惯,可以加个配置文件。配置文件是JSON格式的,可以放以下几个地方(优先级从高到低):

  1. ./.crush.json(项目目录下)
  2. ./crush.json(项目目录下)
  3. $HOME/.config/crush/crush.json(全局配置)

基本结构是这样的:

{
   "设置项1": { },
   "设置项2": { }
}

下面我介绍几种常见的配置场景,帮你快速上手。

配置LSP:让Crush更聪明

LSP(语言服务器协议)能让Crush理解你的代码上下文。比如你是Go开发者,可以这样配置:

{
  "$schema": "https://charm.land/crush.json",
  "lsp": {
    "go": {
      "command": "gopls"
    },
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"]
    }
  }
}

装好对应的语言服务器(比如gopls),Crush就能根据你的代码给出更精准的建议。

配置MCP:扩展Crush功能

MCP(模型上下文协议)能让Crush连接外部服务,支持三种方式:stdiohttpsse。举个例子:

{
  "$schema": "https://charm.land/crush.json",
  "mcp": {
    "filesystem": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/mcp-server.js"]
    },
    "github": {
      "type": "http",
      "url": "https://example.com/mcp/"
    }
  }
}

这样Crush就能从文件系统或GitHub获取额外信息,功能更强大。

设置工具白名单:省去确认步骤

Crush默认会在运行工具前问你能不能执行。如果你信任某些工具,可以加到白名单:

{
  "$schema": "https://charm.land/crush.json",
  "permissions": {
    "allowed_tools": [
      "view",
      "ls",
      "grep"
    ]
  }
}

或者直接用--yolo命令跳过所有确认,但要小心,别随便乱跑未知工具。

添加自定义提供商

想用自己的语言模型?Crush支持OpenAI和Anthropic兼容的API。比如用Deepseek:

{
  "$schema": "https://charm.land/crush.json",
  "providers": {
    "deepseek": {
      "type": "openai",
      "base_url": "https://api.deepseek.com/v1",
      "api_key": "$DEEPSEEK_API_KEY",
      "models": [
        {
          "id": "deepseek-chat",
          "name": "Deepseek V3",
          "context_window": 64000
        }
      ]
    }
  }
}

记得设置DEEPSEEK_API_KEY环境变量哦。


查看Crush的日志

有时候程序出了问题,或者你想看看Crush在干啥,可以查日志。日志默认存在./.crush/logs/crush.log。用以下命令查看:

  • 「看最近1000行」

    crush logs
    
  • 「看最近500行」

    crush logs --tail 500
    
  • 「实时跟踪」

    crush logs --follow
    

想要更详细的信息?启动时加--debug标志,或者在配置里加:

{
  "options": {
    "debug": true
  }
}

开发者须知:如何参与Crush开发?

如果你不仅想用Crush,还想帮它变得更好,这里有些开发指南,来自它的开发文档。

构建和测试

  • 「构建」go build .go run .
  • 「测试」task testgo test ./...
  • 「代码检查」task lint-fix

代码规范

写代码时注意这些:

  • 「命名」:导出用PascalCase,非导出用camelCase
  • 「错误处理」:用fmt.Errorf包装错误。
  • 「格式化」:优先用gofumpt -w .,或者goimportsgofmt

测试技巧

测试时可以用mock提供商,避免真调用API:

func TestSomething(t *testing.T) {
    config.UseMockProviders = true
    defer func() { config.UseMockProviders = false }()
    // 测试代码
}

社区与反馈

Crush的开发者很欢迎你的意见。你可以通过以下方式联系他们:

Crush用的是FSL-1.1-MIT许可证,属于Charm项目的一部分。

The Charm logo

Charm热爱开源 • Charm loves open source


FAQ:常见问题解答

Crush是啥?

Crush是个终端工具,能把你的代码和工具跟大型语言模型连起来,帮你更高效地开发。

支持哪些系统?

macOS、Linux、Windows(PowerShell和WSL)、FreeBSD、OpenBSD、NetBSD,全都支持。

怎么安装?

可以用Homebrew、NPM、Nix等包管理器,或者下载预编译文件,也可以用Go直接装。

支持哪些语言模型?

Anthropic、OpenAI、Groq、Google Gemini等等,还能加自定义模型。

怎么查看日志?

crush logs命令,或者直接看./.crush/logs/crush.log文件。