Tài liệu
Crush
Crush là agent lập trình chạy trong terminal của Charm — không phải shell Rust cùng tên. Cấu hình của Crush dùng Bash, vì vậy để trỏ đến endpoint khác, bạn chỉ cần thêm một nhà cung cấp gồm loại, URL cơ sở và khóa.
Cấu hình của Crush là Bash — một lệnh `provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1"` trong crushrc đưa agent terminal của Charm chạy Claude và GPT.
# A crushrc is Bash, not a settings file. Everything here is executed.
provider add kunavo \
--type openai-compat \
--base-url "https://api.kunavo.com/v1" \
--api-key "${KUNAVO_API_KEY:?set KUNAVO_API_KEY}"
model add kunavo/claude-sonnet-5 \
--name "Claude Sonnet 5" \
--context-window 1000000 \
--default-max-tokens 32000 \
--price-input 1.4 \
--price-output 7
model add kunavo/claude-haiku-4-5 \
--name "Claude Haiku 4.5" \
--context-window 200000 \
--default-max-tokens 16000 \
--price-input 0.7 \
--price-output 3.5
model large kunavo/claude-sonnet-5
model small kunavo/claude-haiku-4-5/v1. Ví dụ tương thích OpenAI được Crush tài liệu hóa dùng --base-url "https://api.deepseek.com/v1", và ví dụ tương thích Anthropic cũng kết thúc theo cùng cách — vì vậy hậu tố này là quy ước của client, không phải phỏng đoán. Nếu bỏ hậu tố, bạn sẽ gặp lỗi 404 thay vì lỗi xác thực.--type openai-compat, không dùng openai. README phân định rõ: openai dành cho việc proxy hoặc định tuyến yêu cầu qua OpenAI, còn openai-compat dành cho các nhà cung cấp không phải OpenAI có API tương thích OpenAI. Kunavo thuộc trường hợp thứ hai.crushrc là Bash có các lệnh tích hợp của Crush, và Crush cảnh báo rằng đây là mã được tin cậy — nó chạy trong một shell đầy đủ. Đây cũng là ưu điểm của cách này: --api-key "$(op read ...)" giữ khóa bên ngoài tệp. Cấu hình crush.json cũ vẫn tải được nhưng README đánh dấu là đã ngừng dùng, vì vậy hãy xây dựng trên crushrc.sk-kn-) và nạp tín dụng từ $10 — các lệnh gọi được thanh toán từ số dư đó và các lệnh gọi thất bại không bị tính phí. Sau đó, bảng điều khiển mở tại phần thiết lập Crush.Từng bước
- Tạo khóa tại
/app/keysrồi sao chép khóa — khóa chỉ được hiển thị một lần. Export khóa thànhKUNAVO_API_KEY, hoặc đọc khóa từ trình quản lý mật khẩu ngay trong cấu hình. - Đặt khối bên trên vào
~/.config/crush/crushrc. Crush đọc./.crushrc, rồi./crushrc, rồi đến cấu hình toàn cục, vì vậy một dự án có thể ghi đè cấu hình của máy — và một kho mã bạn đã clone có thể chứa tệp này. - Khởi chạy
crushrồi nhấnctrl+lđể mở bộ chọn model. Các dòngmodel largevàmodel smallở trên đã ghim sẵn cả hai vị trí, nên bộ chọn dùng để chuyển đổi chứ không phải để thiết lập. - Nếu không muốn đăng ký id thủ công: tính năng tự động phát hiện chạy khi danh sách model của nhà cung cấp
openai-compattrống hoặc khi bạn truyền--discover-models true. Kunavo phản hồi tạiGET /v1/models, vì vậy danh sách sẽ tự điền; các trườngmodel adddo bạn tự cấu hình sẽ được ưu tiên khi có xung đột. - Chạy một tác vụ có phạm vi giới hạn, rồi xem khoản phí tài khoản ghi nhận tại
/app/billing. Con số trong terminal chỉ là phép tính dựa trên các giá trị--price-*bạn đã nhập; sổ giao dịch mới là hóa đơn.
Đã kiểm tra đối chiếu với Mục Nhà cung cấp tùy chỉnh của Crush vào 21 tháng 9, 2026. Cài đặt của bên thứ ba có thể thay đổi; nếu tên trường ở đây không còn khớp với những gì bạn thấy, trang đó là nguồn có thẩm quyền, không phải trang này.
Xác minh trước khi gỡ lỗi ứng dụng khách
Một yêu cầu sẽ xác định liệu lỗi nằm ở endpoint, khóa hay tệp cấu hình. Nếu lệnh này trả về JSON, cùng base URL và khóa sẽ hoạt động trong Crush.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Đặt model id nào vào trường
Mọi mô hình văn bản đều có thể truy cập bằng model id — danh sách đang hoạt động là GET /v1/models, còn danh mục kèm giá nằm trên trang mô hình. Mức giá tính bằng USD trên mỗi 1M token, đầu vào / đầu ra.
| ID mô hình | Kunavo vào / ra | Phù hợp ở đâu trong Crush |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | model ở vị trí large — model dùng hàng ngày để lập trình và chỉnh sửa |
claude-haiku-4-5 | $0.70 / $3.50 | model ở vị trí small, được Crush dùng liên tục cho tiêu đề và tóm tắt |
claude-opus-5 | $3.50 / $17.50 | chuyển sang model large để tái cấu trúc khi một kế hoạch sai sẽ rất tốn kém |
gpt-5-6-terra | $0.70 / $4.20 | thêm một lần model add để có thêm một họ model dùng cùng khóa |
Câu hỏi thường gặp
Làm thế nào để thêm nhà cung cấp API tùy chỉnh vào Crush CLI?
Ghi cấu hình vào một tệp crushrc, là mã Bash có các lệnh tích hợp của Crush. Một dòng đăng ký endpoint — provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1" --api-key "$KUNAVO_API_KEY" — và một lệnh model add cho mỗi id đăng ký mô hình bạn muốn gọi, kèm tên hiển thị, cửa sổ ngữ cảnh và mức giá trên mỗi triệu token mà Crush dùng để ước tính chi phí trên màn hình. Crush đọc ./.crushrc, rồi ./crushrc, rồi ~/.config/crush/crushrc, nên cùng một khối cấu hình có thể dùng cho từng dự án hoặc từng máy.
URL cơ sở của Crush có cần /v1 ở cuối không?
Có. Các ví dụ về nhà cung cấp tùy chỉnh của chính Crush ghi hậu tố này cho cả hai loại: https://api.deepseek.com/v1 cho trường hợp tương thích với OpenAI và https://api.anthropic.com/v1 cho trường hợp tương thích với Anthropic. Với khóa Kunavo, giá trị là https://api.kunavo.com/v1. Điều này ngược với Claude Code, nơi ANTHROPIC_BASE_URL nhận địa chỉ gốc không kèm đường dẫn vì ứng dụng khách tự nối đường dẫn — cùng một cổng API, hai cách viết, và việc thiếu /v1 sẽ dẫn đến lỗi 404 thay vì 401.
Tôi nên dùng --type openai hay --type openai-compat?
Dùng openai-compat cho mọi cổng API của bên thứ ba. README của Crush dành openai cho việc chuyển tiếp hoặc định tuyến yêu cầu qua chính OpenAI và hướng dẫn các nhà cung cấp ngoài OpenAI có API tương thích với OpenAI dùng openai-compat. Loại này còn quyết định hành vi ngoài định dạng truyền tải: tính năng tự động khám phá mô hình chạy với nhà cung cấp openai-compat có danh sách mô hình trống. Crush cũng hỗ trợ --type anthropic cho các endpoint tương thích với Anthropic, sử dụng --extra-header anthropic-version 2023-06-01.
crush.json có còn là nơi phù hợp để lưu cấu hình này không?
Không. crush.json là định dạng ban đầu và tài liệu của chính Crush hiện mô tả nó là đã lỗi thời và không được bổ sung tính năng mới; định dạng hiện tại là crushrc. Lưu ý rằng cả hai đều được thực thi thay vì được phân tích cú pháp — crushrc chạy trong một shell đầy đủ và mọi $(...) trong crush.json đều được mở rộng khi tải — đó là lý do tài liệu cảnh báo không nên khởi chạy Crush trong thư mục có cấu hình mà bạn chưa đọc, đồng thời cũng là lý do việc lấy khóa từ trình quản lý mật khẩu ngay trong cấu hình có thể hoạt động.
Tại sao chi phí Crush hiển thị khác với số tiền tôi bị tính phí?
Vì đây là hai con số khác nhau từ hai nguồn khác nhau. Với nhà cung cấp được đăng ký thủ công, ước tính trên màn hình được tính toán từ các giá trị --price-input và --price-output bạn nhập vào model add; với các nhà cung cấp tích hợp sẵn, giá trị này đến từ Catwalk, danh mục nhà cung cấp bên ngoài của Crush. Cả hai đều không đọc tài khoản của bạn. Lỗi nhập liệu trong cờ --price-* khiến số hiển thị sai, chứ không khiến số tiền tính phí sai. Thay vào đó, hãy đối chiếu với sổ giao dịch tại /app/billing.
Crush có thể dùng các mô hình Claude hoặc GPT thông qua nhà cung cấp tùy chỉnh không?
Có, và Crush không có hạn chế nào ngăn điều đó. Charm Hyper là nhà cung cấp chính thức mà quy trình thiết lập ban đầu hướng bạn đến, nhưng nhà cung cấp tùy chỉnh là một phương thức được tài liệu mô tả và hỗ trợ đầy đủ, không bị giới hạn theo gói dịch vụ, và id mô hình được phân giải tại endpoint thay vì trong ứng dụng khách. Vì vậy, một id Claude trên nhà cung cấp openai-compat là tổ hợp đúng theo thiết kế: loại này chỉ tên giao thức truyền tải, không phải nhà cung cấp mô hình.