Tài liệu

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.

~/.config/crush/crushrc
# 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
URL cơ sở giữ nguyên hậu tố /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.
Hãy dùng --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.
Kunavo chưa kiểm thử Crush khi chạy thực tế — cả client này lẫn bất kỳ client nào khác trên các trang này. Nội dung được kiểm tra ở đây là cấu hình Crush đã tài liệu hóa đối chiếu với endpoint Kunavo công bố; trang hướng dẫn thiết lập không phải kết quả kiểm thử. Hãy chạy một tác vụ có phạm vi giới hạn trước khi chuyển công cụ dùng hàng ngày sang cấu hình này.
Chưa có khóa? Tạo tài khoản Kunavo, tạo khóa (bắt đầu bằng 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

  1. Tạo khóa tại /app/keys rồi sao chép khóa — khóa chỉ được hiển thị một lần. Export khóa thành KUNAVO_API_KEY, hoặc đọc khóa từ trình quản lý mật khẩu ngay trong cấu hình.
  2. Đặ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.
  3. Khởi chạy crush rồi nhấn ctrl+l để mở bộ chọn model. Các dòng model large và 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.
  4. 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-compat trống hoặc khi bạn truyền --discover-models true. Kunavo phản hồi tại GET /v1/models, vì vậy danh sách sẽ tự điền; các trường model add do bạn tự cấu hình sẽ được ưu tiên khi có xung đột.
  5. 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.

Đây là phiên bản ngắn. Hướng dẫn đầy đủ — lựa chọn mô hình, chi phí của một phiên thực tế và các trường hợp lỗi — nằm trong Crush và OpenCode.

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ìnhKunavo vào / raPhù hợp ở đâu trong Crush
claude-sonnet-5$1.40 / $7.00model ở 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.50model ở 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.50chuyể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.20thêm một lần model add để có thêm một họ model dùng cùng khóa
Thanh toán theo token từ số dư trả trước, không có phí hàng tháng — xem trang Thanh toán. Với ngữ cảnh lặp lại — chiếm phần lớn dữ liệu mà trình chỉnh sửa hoặc ứng dụng trò chuyện gửi đi — bộ nhớ đệm prompt ảnh hưởng đến hóa đơn nhiều hơn lựa chọn mô hình.

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.