Crush - Tác nhân lập trình AI cho terminal
(github.com/charmbracelet)- Là một AI coding agent hoạt động trong terminal, hỗ trợ nâng cao năng suất mã bằng cách tích hợp với các LLM (mô hình ngôn ngữ lớn) để viết mã, tự động hóa quy trình làm việc và giữ ngữ cảnh mã
- Có thể chọn nhiều mô hình, hoặc chuyển đổi mô hình linh hoạt ngay giữa phiên làm việc, đồng thời hỗ trợ duy trì phiên/ ngữ cảnh theo từng dự án
- Cung cấp các tính năng thân thiện với nhà phát triển như tích hợp LSP (Language Server Protocol), hỗ trợ MCP (Model Context Protocol) có thể mở rộng, và bỏ qua
.gitignorecùng các file khác - Hoạt động trên mọi môi trường terminal chính như macOS, Linux, Windows, FreeBSD và hỗ trợ cài đặt theo nhiều cách như trình quản lý gói, Go hoặc binary
- Hỗ trợ đồng thời cài đặt trực quan và tùy chỉnh cao cấp, bao gồm biến môi trường, cấu hình JSON, danh sách trắng công cụ… với thiết kế dành cho cả người dùng nâng cao
Crush
- Là một AI coding agent chạy trong terminal, hỗ trợ viết, chỉnh sửa và tự động hóa mã khi tích hợp linh hoạt với LLM ưa thích của nhà phát triển
- Có thể tự do chọn và chuyển đổi giữa nhiều mô hình (Anthropic, OpenAI, Groq, OpenRouter, v.v.), đồng thời quản lý ngữ cảnh độc lập cho từng phiên
- Qua LSP (Language Server Protocol) nhận thêm ngữ cảnh phù hợp theo từng ngôn ngữ để hỗ trợ code thông minh hơn
- Thông qua MCP (Model Context Protocol), có thể thu thập và tận dụng thêm thông tin từ hệ thống bên ngoài, HTTP, dòng lệnh, SSE và nhiều nguồn khác
Tính năng chính
- Hỗ trợ đa mô hình: Tích hợp nhiều LLM như OpenAI, Anthropic, Groq, OpenRouter và có thể thêm thủ công
- Làm việc theo phiên: Tách biệt và quản lý nhiều phiên làm việc cũng như ngữ cảnh cho từng dự án
- Chuyển đổi mô hình linh hoạt: Có thể đổi mô hình thoải mái ngay cả giữa phiên và vẫn giữ nguyên ngữ cảnh hiện tại
- Tích hợp LSP: Kết nối LSP cho Go, TypeScript, Nix, ... để tăng cường ngữ cảnh code
- Mở rộng: Dễ dàng mở rộng thêm tính năng mới qua giao thức MCP với HTTP/CLI/SSE bên ngoài
- Hỗ trợ nền tảng rộng: Hoạt động trên terminal của các hệ điều hành chính như macOS, Linux, Windows (WSL, PowerShell), FreeBSD, OpenBSD, NetBSD
- Cấu hình trực quan: Có thể dùng ngay mà không cần thiết lập trước; khi cần thì hỗ trợ cấu hình JSON cấp dự án hoặc toàn cục
- Tính năng bỏ qua mạnh mẽ: Quản lý file/thư mục cần loại trừ ngữ cảnh qua file
.gitignore,.crushignore - Danh sách trắng công cụ: Hỗ trợ tiền-cho phép khi chạy tool và tùy chọn chạy tự động; có thể bỏ qua toàn bộ prompt bằng cờ
--yolo(cần thận trọng) - Nhà cung cấp tùy chỉnh: Thêm API tương thích OpenAI, Anthropic và cấu hình chi tiết theo ý muốn
Cài đặt và khởi chạy
- Có thể cài đặt qua nhiều cách như Homebrew, NPM, Arch, Nix, Debian/Ubuntu, Fedora/RHEL và qua binary/Go
- Lần đầu chạy cần nhập khóa API LLM ưa thích (OpenAI, Anthropic, Groq, v.v.), cũng có thể chỉ định bằng biến môi trường
- Các LLM có thể kết nối qua biến môi trường ví dụ:
OPENAI_API_KEY,ANTHROPIC_API_KEY,GROQ_API_KEY,OPENROUTER_API_KEY,GEMINI_API_KEY,VERTEXAI_PROJECT, ...
Ví dụ cấu hình
- Áp dụng tùy chọn nâng cao qua file JSON cấp toàn cục hoặc theo dự án (
./.crush.json,./crush.json,$HOME/.config/crush/crush.json) - Cấu hình LSP: Có thể chỉ định lệnh riêng cho từng ngôn ngữ
{ "lsp": { "go": { "command": "gopls" }, "typescript": { "command": "typescript-language-server", "args": ["--stdio"] } } } - Cấu hình MCP: Ví dụ mở rộng bên ngoài dựa trên HTTP/CLI/SSE
{ "mcp": { "filesystem": { "type": "stdio", "command": "node", "args": ["/path/to/mcp-server.js"] } } } - Bỏ qua file và phê duyệt công cụ
- Loại trừ file/thư mục cụ thể bằng
.crushignore - Dùng danh sách trắng cho công cụ hoặc cờ
--yolođể bỏ qua prompt
- Loại trừ file/thư mục cụ thể bằng
Tính năng nâng cao cho người dùng chuyên sâu
- Đăng ký nhà cung cấp tùy chỉnh: Thêm API tương thích OpenAI/Anthropic, chỉ định chi tiết về giá, ngữ cảnh, ...
- Log: Cung cấp file log theo dự án, xem thời gian thực qua lệnh CLI
crush logs,crush logs --follow - Tùy chọn debug: Bật log chi tiết bằng cờ
--debughoặc qua cấu hình
2 bình luận
aider thật sự dở quá;;
Ý kiến trên Hacker News
Tôi thấy khá lạ khi hầu hết các AI coding agent chạy trong terminal đều cố làm cho text UI trở nên hào nhoáng. Nhiều khoảng trắng, line art, widget, ASCII art, gradient, cả animation nữa. Nhưng những thứ cơ bản như key binding đầy đủ theo ý muốn, tab completion, scrollback nhất quán, hay render văn bản không nhấp nháy thì lại thiếu. Dù sao thì công cụ này ít nhất không được viết bằng node.js, nên về mặt hiệu năng có thể đáng kỳ vọng hơn vì terminal output giảm được các lần redraw không cần thiết. Nhưng nếu dùng với kỳ vọng là một REPL hay CLI thì nó lại hoạt động hoàn toàn khác dù mô hình tương tác bề ngoài có vẻ giống nhau, và cũng cho cảm giác rất khác so với các Unix TUI kiểu editor hay reader. Tôi tò mò không biết xu hướng này chỉ là bắt chước Claude Code, hay đã bắt đầu từ sớm hơn. Vì thế tôi vẫn thích Aider hơn. Nó cho cảm giác và khả năng sử dụng gần với REPL hơn
Công cụ này do một công ty tên là Charm làm ra, và sứ mệnh của họ là làm cho cửa sổ dòng lệnh trở nên hấp dẫn hơn. Họ đã hoạt động nhiều năm trước cả làn sóng LLM. Đây là nơi làm framework và công cụ CLI cho golang
Điều tôi thích ở terminal là workflow kiểu cuộn, nơi mình gõ lệnh rồi xem action và output từ nhiều nguồn và chương trình hiện ra tuần tự như log. Thứ tôi thực sự muốn là một workflow cuộn đa chương trình mạnh mẽ dựa trên HTML. Nhưng những nỗ lực gần đây lại giống như ghép nhược điểm của cả hai phía vào với nhau. Tôi muốn gặp một UI tốt trên một hệ thống render tốt hơn
Thực ra trào lưu text UI này đã là phong cách đặc trưng của charmbracelet từ trước cả khi có AI agent. Cá nhân tôi lại thích vì khác với các TUI truyền thống, key binding của nó dễ khám phá một cách trực quan
Có lẽ một lý do khiến các giao diện này đang nhanh chóng thu hút fan và nhà phát triển là vì nhiều người vốn quen với editor kiểu IDE đồ họa. Không phải lập trình viên nào cũng làm việc hoàn toàn trong terminal. (Tôi thì vẫn có những ngày chẳng bật cả X/Wayland)
Ít nhất thì có thể dùng Claude Code trong emacs https://github.com/stevemolitor/claude-code.el
Một điểm hay của công cụ này là nó vẫn còn ở giai đoạn đầu nên mã nguồn rất rõ ràng và được mô-đun hóa tốt. Nếu muốn thiết kế agent thì đây là một bản thiết kế tham khảo rất tốt về tool calling, session, auto summary, quản lý persistence, v.v. Rất đáng lưu lại link commit này
Với những ai thực sự muốn đọc được điều gì đang diễn ra trong demo GIF, tôi đã chuyển nó thành video chậm hơn bằng ffmpeg rồi đăng lên https://share.cleanshot.com/XBXQbSPP
Tôi đã dùng nghiêm túc khoảng 15 phút. So với Claude Code, ưu điểm là UI đẹp, sidebar hữu ích để theo dõi file thay đổi và chi phí, cùng UX chấp nhận thay đổi khá mượt (hotkey, diff dễ xem). Ngược lại, nhược điểm là không thể kết hợp nhiều model, và có khá nhiều file nhị phân không cần thiết bị thêm vào thư mục. Lần init ban đầu tạo ra một file tên là CHARM.md, nhưng nó không khớp với loại thông tin tôi muốn chia sẻ với model. Ví dụ, nó không truyền được chuyện test case Go của tôi dùng PascalCasing. Ngoài ra, khi thoát bằng Ctrl+C thì terminal của tôi bị crash
Câu hỏi thực sự quan trọng là trong số các agent mới này, cái nào hỗ trợ local model tử tế. Tôi muốn bỏ phụ thuộc vào API bên ngoài, và sẵn sàng chấp nhận hy sinh một phần hiệu năng
Crush đang có issue bổ sung hỗ trợ Ollama (đã 2 tuần)
Hầu hết agent đều chạy được trên endpoint tương thích OpenAI
OpenHands cho phép cấu hình bất kỳ LLM nào bạn muốn https://github.com/All-Hands-AI/OpenHands
Aider cũng ghi rõ là hỗ trợ local model, nhưng tôi chưa tự dùng thử https://aider.chat/docs/llms.html
Sẽ rất tuyệt nếu có một bảng so sánh đầy đủ tất cả các công cụ mới như Claude Code, opencode, aider, cortex. Không dễ để nhìn một phát là hiểu từng công cụ hoạt động ra sao hay khác biệt ở đâu
So sánh hay benchmark với model thương mại rất khó vì chi phí. Gần đây khi tôi viết một bài báo, chỉ riêng việc đánh giá nhiều commercial SOTA model đã tốn hơn 10.000 USD. So sánh với open model thì rẻ hơn, nhưng reviewer lại muốn có đối chiếu với loại “tốt nhất” nên cũng đành chịu. Không chỉ vậy, kiến trúc nội bộ hay stack của các model thương mại không minh bạch và có thể thay đổi bất cứ lúc nào, nên cực kỳ kém hiệu quả. Tôi không nghĩ việc mặc định yêu cầu so sánh với model thương mại trong nghiên cứu học thuật là điều tốt
Tôi nhớ tên gốc của nó là opencode, nhưng sau đó đổi tên vì có mâu thuẫn giữa các nhà phát triển
Hiệu năng không chỉ phụ thuộc vào công cụ, mà còn vào model được dùng, codebase (context), và tác vụ được giao (prompt). Các yếu tố này không độc lập, và hiệu năng chênh lệch nhiều tùy theo tổ hợp. Ví dụ, Claude Sonnet 4 với Claude Code rất tốt cho việc triển khai tính năng backend Python, còn Gemini 2.5 Pro lại tốt hơn khi sửa code React phía frontend. Tức là không thể cố định mọi biến rồi chỉ so công cụ; cần xét cả tổ hợp công cụmodelcontext*prompt. 16x Eval có đề cập một phần đến chuyện này, nhưng vẫn chưa đưa các yếu tố như công cụ vào https://eval.16x.engineer/
“glamorous” cũng là một cách diễn đạt được dùng trong tiếng Anh Anh https://dictionary.cambridge.org/dictionary/english/glamorous
Tôi đã dùng Crush trong vài tuần qua, và thực sự rất kỳ vọng. Tôi theo dõi Charm đã lâu, và đây là một trong số ít đội ngũ thực sự hiểu developer experience đồng thời liên tục làm ra những công cụ mà mọi người thích. Việc họ tham gia cuộc đua AI coding sớm như vậy cũng là tín hiệu tốt. Rõ ràng đây là công cụ do những người thực sự dùng nó tạo ra
Lại thêm một cái nữa xuất hiện, nhưng lần này thiết kế thực sự đẹp. Chắc chắn tôi sẽ thử. Điều khiến tôi thấy tiếc ở mọi công cụ (EDIT: opencode có thể xác thực bằng github) là không thể xác thực trực tiếp bằng gói thuê bao hiện có của tôi với các dịch vụ thu phí hàng tháng (github copilot, claude code, openai codex, cursor, v.v.). Tôi đã đăng ký dịch vụ rồi, nên sẽ rất tuyệt nếu có thể tự do thay đổi giao diện khi không thích interface mặc định
Tăng cường bằng LSP: Crush tận dụng LSP làm context bổ sung như cách người ta thường dùng. Đây là tính năng khiến tôi hứng thú nhất theo tiêu chí của mình. Tôi cũng quan tâm đến các tính năng multi-session hay project