charmbracelet/crush

GitHub: charmbracelet/crush

Charmbracelet 出品的终端 AI 编程助手,支持多模型切换、LSP 增强、MCP 扩展,为命令行环境提供优雅的智能编码体验。

Stars: 21008 | Forks: 1307

# Crush

Charm Crush Logo
Latest Release Build Status

Your new coding bestie, now available in your favourite terminal.
Your tools, your code, and your workflows, wired into your LLM of choice.

终端里的编程新搭档,
无缝接入你的工具、代码与工作流,全面兼容主流 LLM 模型。

Crush Demo

## 功能特性 - **多模型支持:** 从广泛的 LLM 中选择,或通过 OpenAI 或 Anthropic 兼容的 API 添加你自己的模型 - **灵活便捷:** 在会话中切换 LLM,同时保留上下文 - **基于会话:** 为每个项目维护多个工作会话和上下文 - **LSP 增强:** Crush 像 you 一样使用 LSP 获取额外的上下文 - **可扩展:** 通过 MCP 添加功能 (`http`, `stdio`, 和 `sse`) - **全平台支持:** 在 macOS, Linux, Windows (PowerShell 和 WSL), Android, FreeBSD, OpenBSD, 和 NetBSD 的所有终端上提供一流支持 - **工业级:** 基于 Charm 生态系统构建,驱动着 25,000 多个应用程序,从领先的开源项目到关键业务基础设施 ## 安装 使用包管理器: ``` # Homebrew brew install charmbracelet/tap/crush # NPM npm install -g @charmland/crush # Arch Linux (btw) yay -S crush-bin # Nix nix run github:numtide/nix-ai-tools#crush # FreeBSD pkg install crush ``` Windows 用户: ``` # Winget winget install charmbracelet.crush # Scoop scoop bucket add charm https://github.com/charmbracelet/scoop-bucket.git scoop install crush ```
Nix (NUR) Crush 可通过官方 Charm [NUR](https://github.com/nix-community/NUR) 在 `nur.repos.charmbracelet.crush` 中获取,这是在 Nix 中获取 Crush 最新的方式。 你也可以通过 NUR 使用 `nix-shell` 试用 Crush: ``` # 添加 NUR 频道。 nix-channel --add https://github.com/nix-community/NUR/archive/main.tar.gz nur nix-channel --update # 在 Nix shell 中获取 Crush。 nix-shell -p '(import { pkgs = import {}; }).repos.charmbracelet.crush' ``` ### 通过 NUR 使用 NixOS & Home Manager 模块 Crush 通过 NUR 提供 NixOS 和 Home Manager 模块。 你可以通过从 NUR 导入这些模块直接在你的 flake 中使用它们。由于它会自动检测是 home manager 还是 nixos 上下文,你可以用完全相同的方式导入 :) ``` { inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nur.url = "github:nix-community/NUR"; }; outputs = { self, nixpkgs, nur, ... }: { nixosConfigurations.your-hostname = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ nur.modules.nixos.default nur.repos.charmbracelet.modules.crush { programs.crush = { enable = true; settings = { providers = { openai = { id = "openai"; name = "OpenAI"; base_url = "https://api.openai.com/v1"; type = "openai"; api_key = "sk-fake123456789abcdef..."; models = [ { id = "gpt-4"; name = "GPT-4"; } ]; }; }; lsp = { go = { command = "gopls"; enabled = true; }; nix = { command = "nil"; enabled = true; }; }; options = { context_paths = [ "/etc/nixos/configuration.nix" ]; tui = { compact_mode = true; }; debug = false; }; }; }; } ]; }; }; } ```
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 ```
或者,下载它: - [软件包][releases] 有 Debian 和 RPM 格式可用 - [二进制文件][releases] 适用于 Linux, macOS, Windows, FreeBSD, OpenBSD, 和 NetBSD 或者直接用 Go 安装: ``` go install github.com/charmbracelet/crush@latest ``` ## 快速入门 最快速的入门方式是为你的首选提供商获取一个 API Key, 例如 Anthropic, OpenAI, Groq, OpenRouter, 或 Vercel AI Gateway,然后启动 Crush。系统会提示你输入 API Key。 也就是说,你也可以为首选提供商设置环境变量。 | 环境变量 | 提供商 | | --------------------------- | -------------------------------------------------- | | `ANTHROPIC_API_KEY` | Anthropic | | `OPENAI_API_KEY` | OpenAI | | `VERCEL_API_KEY` | Vercel AI Gateway | | `GEMINI_API_KEY` | Google Gemini | | `SYNTHETIC_API_KEY` | Synthetic | | `ZAI_API_KEY` | Z.ai | | `MINIMAX_API_KEY` | MiniMax | | `HF_TOKEN` | Hugging Face Inference | | `CEREBRAS_API_KEY` | Cerebras | | `OPENROUTER_API_KEY` | OpenRouter | | `IONET_API_KEY` | io.net | | `GROQ_API_KEY` | Groq | | `VERTEXAI_PROJECT` | Google Cloud VertexAI (Gemini) | | `VERTEXAI_LOCATION` | Google Cloud VertexAI (Gemini) | | `AWS_ACCESS_KEY_ID` | Amazon Bedrock (Claude) | | `AWS_SECRET_ACCESS_KEY` | Amazon Bedrock (Claude) | | `AWS_REGION` | Amazon Bedrock (Claude) | | `AWS_PROFILE` | Amazon Bedrock (自定义 Profile) | | `AWS_BEARER_TOKEN_BEDROCK` | Amazon Bedrock | | `AZURE_OPENAI_API_ENDPOINT` | Azure OpenAI models | | `AZURE_OPENAI_API_KEY` | Azure OpenAI models (使用 Entra ID 时可选) | | `AZURE_OPENAI_API_VERSION` | Azure OpenAI models | ### 订阅 如果你更喜欢基于订阅的使用方式,以下是一些在 Crush 中运行良好的计划: - [Synthetic](https://synthetic.new/pricing) - [GLM Coding Plan](https://z.ai/subscribe) - [Kimi Code](https://www.kimi.com/membership/pricing) - [MiniMax Coding Plan](https://platform.minimax.io/subscribe/coding-plan) ### 顺便提一下 有你希望出现在 Crush 中的提供商吗?有需要更新的现有模型吗? Crush 的默认模型列表在 [Catwalk](https://github.com/charmbracelet/catwalk) 中管理,这是一个社区支持的、Crush 兼容模型的开源仓库,欢迎你贡献。 Catwalk Badge ## 配置 Crush 无需配置即可流畅运行。也就是说,如果你确实需要或想要定制 Crush,可以在项目本地或全局添加配置,优先级如下: 1. `.crush.json` 2. `crush.json` 3. `$HOME/.config/crush/crush.json` 配置本身存储为一个 JSON 对象: ``` { "this-setting": { "this": "that" }, "that-setting": ["ceci", "cela"] } ``` 另外请注意,Crush 还将临时数据(如应用程序状态)存储在另一个位置: ``` # Unix $HOME/.local/share/crush/crush.json # Windows %LOCALAPPDATA%\crush\crush.json ``` ### LSP Crush 可以使用 LSP 获取额外的上下文来辅助决策,就像你一样。可以像这样手动添加 LSP: ``` { "$schema": "https://charm.land/crush.json", "lsp": { "go": { "command": "gopls", "env": { "GOTOOLCHAIN": "go1.24.5" } }, "typescript": { "command": "typescript-language-server", "args": ["--stdio"] }, "nix": { "command": "nil" } } } ``` ### MCP Crush 还通过三种传输类型支持 Model Context Protocol (MCP) 服务器:`stdio` 用于命令行服务器,`http` 用于 HTTP 端点,以及 `sse` 用于 Server-Sent Events。支持使用 `$(echo $VAR)` 语法进行环境变量扩展。 ``` { "$schema": "https://charm.land/crush.json", "mcp": { "filesystem": { "type": "stdio", "command": "node", "args": ["/path/to/mcp-server.js"], "timeout": 120, "disabled": false, "disabled_tools": ["some-tool-name"], "env": { "NODE_ENV": "production" } }, "github": { "type": "http", "url": "https://api.githubcopilot.com/mcp/", "timeout": 120, "disabled": false, "disabled_tools": ["create_issue", "create_pull_request"], "headers": { "Authorization": "Bearer $GH_PAT" } }, "streaming-service": { "type": "sse", "url": "https://example.com/mcp/sse", "timeout": 120, "disabled": false, "headers": { "API-Key": "$(echo $API_KEY)" } } } } ``` ### 忽略文件 Crush 默认遵循 `.gitignore` 文件,但你也可以创建一个 `.crushignore` 文件来指定 Crush 应忽略的额外文件和目录。这对于排除那些你想纳入版本控制但不希望 Crush 在提供上下文时考虑的文件非常有用。 `.crushignore` 文件使用与 `.gitignore` 相同的语法,可以放置在项目的根目录或子目录中。 ### 允许工具 默认情况下,Crush 会在运行工具调用之前请求你的许可。如果你愿意,可以允许工具在执行时不再提示你授予权限。请谨慎使用此功能。 ``` { "$schema": "https://charm.land/crush.json", "permissions": { "allowed_tools": [ "view", "ls", "grep", "edit", "mcp_context7_get-library-doc" ] } } ``` 你也可以通过使用 `--yolo` 标志运行 Crush 来完全跳过所有权限提示。使用此功能时要非常、非常小心。 ### 禁用内置工具 如果你想完全阻止 Crush 使用某些内置工具,可以通过 `options.disabled_tools` 列表禁用它们。被禁用的工具对 agent 是完全隐藏的。 ``` { "$schema": "https://charm.land/crush.json", "options": { "disabled_tools": [ "bash", "sourcegraph" ] } } ``` 要禁用来自 MCP 服务器的工具,请参阅 [MCP 配置部分](#mcps)。 ### Agent Skills Crush 支持 [Agent Skills](https://agentskills.io) 开放标准,用于通过可复用的技能包扩展 agent 能力。技能是包含一个 `SKILL.md` 文件的文件夹,其中包含 Crush 可以按需发现和激活的指令。 技能发现路径: - Unix 上的 `~/.config/crush/skills/`(默认,可通过 `CRUSH_SKILLS_DIR` 覆盖) - Windows 上的 `%LOCALAPPDATA%\crush\skills\`(默认,可通过 `CRUSH_SKILLS_DIR` 覆盖) - 通过 `options.skills_paths` 配置的额外路径 ``` { "$schema": "https://charm.land/crush.json", "options": { "skills_paths": [ "~/.config/crush/skills", // Windows: "%LOCALAPPDATA%\\crush\\skills", "./project-skills" ] } } ``` 你可以从 [anthropics/skills](https://github.com/anthropics/skills) 获取示例技能来开始: ``` # Unix mkdir -p ~/.config/crush/skills cd ~/.config/crush/skills git clone https://github.com/anthropics/skills.git _temp mv _temp/skills/* . && rm -rf _temp ``` ``` # Windows (PowerShell) mkdir -Force "$env:LOCALAPPDATA\crush\skills" cd "$env:LOCALAPPDATA\crush\skills" git clone https://github.com/anthropics/skills.git _temp mv _temp/skills/* . ; rm -r -force _temp ``` ### 初始化 当你初始化一个项目时,Crush 会分析你的代码库并创建一个上下文文件,帮助它在未来的会话中更有效地工作。 默认情况下,此文件名为 `AGENTS.md`,但你可以使用 `initialize_as` 选项自定义名称和位置: ``` { "$schema": "https://charm.land/crush.json", "options": { "initialize_as": "AGENTS.md" } } ``` 如果你喜欢不同的命名约定或想将文件放在特定目录(例如 `CRUSH.md` 或 `docs/LLMs.md`),这很有用。Crush 会用项目特定的上下文填充该文件,如构建命令、代码模式和它在初始化期间发现的约定。 ### 归因设置 默认情况下,Crush 会向其创建的 Git commits 和 pull requests 添加归因信息。你可以使用 `attribution` 选项自定义此行为: ``` { "$schema": "https://charm.land/crush.json", "options": { "attribution": { "trailer_style": "co-authored-by", "generated_with": true } } } ``` - `trailer_style`:控制添加到 commit message 的归因 trailer (default: `assisted-by`) - `assisted-by`:添加 `Assisted-by: [Model Name] via Crush ` (includes the model name) - `co-authored-by`:添加 `Co-Authored-By: Crush ` - `none`:无归因 trailer - `generated_with`:当为 true(默认)时,向 commit message 和 PR description 添加 `💘 Generated with Crush` 行 ### 自定义提供商 Crush 支持 OpenAI 兼容和 Anthropic 兼容 API 的自定义提供商配置。 #### OpenAI 兼容 API 这是 Deepseek 的配置示例,它使用 OpenAI 兼容 API。别忘了在你的环境中设置 `DEEPSEEK_API_KEY`。 ``` { "$schema": "https://charm.land/crush.json", "providers": { "deepseek": { "type": "openai-compat", "base_url": "https://api.deepseek.com/v1", "api_key": "$DEEPSEEK_API_KEY", "models": [ { "id": "deepseek-chat", "name": "Deepseek V3", "cost_per_1m_in": 0.27, "cost_per_1m_out": 1.1, "cost_per_1m_in_cached": 0.07, "cost_per_1m_out_cached": 1.1, "context_window": 64000, "default_max_tokens": 5000 } ] } } } ``` #### Anthropic 兼容 API 自定义 Anthropic 兼容提供商遵循以下格式: ``` { "$schema": "https://charm.land/crush.json", "providers": { "custom-anthropic": { "type": "anthropic", "base_url": "https://api.anthropic.com/v1", "api_key": "$ANTHROPIC_API_KEY", "extra_headers": { "anthropic-version": "2023-06-01" }, "models": [ { "id": "claude-sonnet-4-20250514", "name": "Claude Sonnet 4", "cost_per_1m_in": 3, "cost_per_1m_out": 15, "cost_per_1m_in_cached": 3.75, "cost_per_1m_out_cached": 0.3, "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, "supports_attachments": true } ] } } } ``` ### Amazon Bedrock Crush 目前支持通过 Bedrock 运行 Anthropic 模型,但缓存已禁用。 - 一旦你配置了 AWS(即 `aws configure`),Bedrock 提供商就会出现 - Crush 还期望设置 `AWS_REGION` 或 `AWS_DEFAULT_REGION` - 要使用特定的 AWS profile,请在你的环境中设置 `AWS_PROFILE`,即 `AWS_PROFILE=myprofile crush` - 除了 `aws configure`,你也可以直接设置 `AWS_BEARER_TOKEN_BEDROCK` ### Vertex AI Platform 当设置了 `VERTEXAI_PROJECT` 和 `VERTEXAI_LOCATION` 时,Vertex AI 将出现在可用提供商列表中。你还需要进行身份验证: ``` gcloud auth application-default login ``` 要向配置中添加特定模型,请如下配置: ``` { "$schema": "https://charm.land/crush.json", "providers": { "vertexai": { "models": [ { "id": "claude-sonnet-4@20250514", "name": "VertexAI Sonnet 4", "cost_per_1m_in": 3, "cost_per_1m_out": 15, "cost_per_1m_in_cached": 3.75, "cost_per_1m_out_cached": 0.3, "context_window": 200000, "default_max_tokens": 50000, "can_reason": true, "supports_attachments": true } ] } } } ``` ### 本地模型 本地模型也可以通过 OpenAI 兼容 API 进行配置。这里有两个常见的例子: #### Ollama ``` { "providers": { "ollama": { "name": "Ollama", "base_url": "http://localhost:11434/v1/", "type": "openai-compat", "models": [ { "name": "Qwen 3 30B", "id": "qwen3:30b", "context_window": 256000, "default_max_tokens": 20000 } ] } } } ``` #### LM Studio ``` { "providers": { "lmstudio": { "name": "LM Studio", "base_url": "http://localhost:1234/v1/", "type": "openai-compat", "models": [ { "name": "Qwen 3 30B", "id": "qwen/qwen3-30b-a3b-2507", "context_window": 256000, "default_max_tokens": 20000 } ] } } } ``` ## 日志 有时你需要查看日志。幸运的是,Crush 记录了各种信息。日志存储在相对于项目的 `./.crush/logs/crush.log` 中。 CLI 还包含一些辅助命令,以便更轻松地查看最近的日志: ``` # 打印最后 1000 行 crush logs # 打印最后 500 行 crush logs --tail 500 # 实时跟踪日志 crush logs --follow ``` 想要更多日志?使用 `--debug` 标志运行 `crush`,或在配置中启用它: ``` { "$schema": "https://charm.land/crush.json", "options": { "debug": true, "debug_lsp": true } } ``` ## 提供商自动更新 默认情况下,Crush 会自动从 [Catwalk](https://github.com/charmbracelet/catwalk) 检查最新和最棒的提供商和模型列表,这是开源的 Crush 提供商数据库。这意味着当有新的提供商和模型可用时,或者当模型元数据发生变化时,Crush 会自动更新你的本地配置。 ### 禁用自动提供商更新 对于网络访问受限的用户,或者那些喜欢在 air-gapped 环境中工作的用户,这可能不是你想要的,此功能可以禁用。 要禁用自动提供商更新,请在你的 `crush.json` 配置中设置 `disable_provider_auto_update`: ``` { "$schema": "https://charm.land/crush.json", "options": { "disable_provider_auto_update": true } } ``` 或设置 `CRUSH_DISABLE_PROVIDER_AUTO_UPDATE` 环境变量: ``` export CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 ``` ### 手动更新提供商 可以使用 `crush update-providers` 命令手动更新提供商: ``` # 从 Catwalk 远程更新 providers。 crush update-providers # 从自定义 Catwalk base URL 更新 providers。 crush update-providers https://example.com/ # 从本地文件更新 providers。 crush update-providers /path/to/local-providers.json # 将 providers 重置为内嵌版本,即在构建时嵌入 crush 的版本。 crush update-providers embedded # 更多信息: crush update-providers --help ``` ## 指标 Crush 记录伪匿名使用指标(与设备特定的哈希值绑定),维护者依靠这些指标来告知开发和支持优先级。这些指标仅包含使用元数据;绝不收集 prompts 和 responses。 有关确切收集内容的详情请参阅源代码([这里](https://github.com/charmbracelet/crush/tree/main/internal/event) 和 [这里](https://github.com/charmbracelet/crush/blob/main/internal/llm/agent/event.go))。 你可以随时通过在你的环境中设置以下环境变量来选择退出指标收集: ``` export CRUSH_DISABLE_METRICS=1 ``` 或在你的配置中设置以下内容: ``` { "options": { "disable_metrics": true } } ``` Crush 也遵循 `DO_NOT_TRACK` 惯例,可以通过 `export DO_NOT_TRACK=1` 启用。 ## 贡献 请参阅[贡献指南](https://github.com/charmbracelet/crush?tab=contributing-ov-file#contributing)。 ## 你怎么看? 我们很乐意听到你对这个项目的看法。需要帮助?我们支持你。你可以通过以下方式找到我们: - [Twitter](https://twitter.com/charmcli) - [Slack](https://charm.land/slack) - [Discord][discord] - [The Fediverse](https://mastodon.social/@charmcli) - [Bluesky](https://bsky.app/profile/charm.land) ## 许可证 [FSL-1.1IT](https://github.com/charmbracelet/crush/raw/main/LICENSE.md) [Charm](https://charm.land) 的一部分。 The Charm logo Charm热爱开源 • Charm loves open source
标签:Agentic, AI编程助手, Anthropic, Charmbracelet, CIS基准, Claude, CLI, CVE检测, DLL 劫持, EVTX分析, Golang, GPT, LLM, LSP, MCP, OpenAI, Petitpotam, Shell, SRE, Unmanaged PE, WiFi技术, 上下文感知, 代码生成, 会话管理, 偏差过滤, 内存规避, 多模型支持, 大语言模型, 威胁情报, 安全编程, 开发者工具, 开源, 效率工具, 日志审计, 渗透测试工具, 漏洞管理, 终端工具, 编码辅助, 网络调试, 自动化, 语言服务器协议