Trong thế giới phát triển phần mềm hiện đại, các công cụ hỗ trợ AI như Claude Code đang dần trở thành một phần không thể thiếu, giúp tăng tốc độ coding và giải quyết vấn đề hiệu quả hơn. Tuy nhiên, để thực sự tận dụng tối đa tiềm năng của chúng, việc có được cái nhìn rõ ràng và tức thì về trạng thái hoạt động là cực kỳ quan trọng. Bài viết này sẽ hướng dẫn bạn cách tạo một dòng trạng thái (statusline) tùy chỉnh siêu đơn giản cho Claude Code, hiển thị các thông tin thiết yếu như tên mô hình AI, số lượng token đầu vào và đầu ra, thanh tiến trình ngữ cảnh, và thậm chí cả trạng thái Git của dự án.
Dòng trạng thái này không chỉ cung cấp thông tin quý giá mà còn giúp bạn quản lý tài nguyên và ngữ cảnh một cách chủ động hơn, từ đó nâng cao hiệu suất làm việc.
Nếu bạn muốn tham khảo tài liệu chính thức, hãy truy cập: Claude Code Statusline Official Documentation

Hệ thống này đã được kiểm tra thành công trên macOS, nhưng với bản chất của script shell, nó có thể dễ dàng hoạt động trên các hệ điều hành dựa trên Unix/Linux khác như WSL (Windows Subsystem for Linux).
Mục lục
Lợi Ích Của Dòng Trạng Thái Tùy Chỉnh
Một dòng trạng thái được cá nhân hóa mang lại nhiều lợi ích thiết thực, giúp bạn hiểu rõ hơn về cách Claude Code đang hoạt động và tương tác với code của bạn:
- Thông tin Mô hình AI: Nhanh chóng biết bạn đang sử dụng mô hình Claude nào (ví dụ: Opus, Sonnet, Haiku) để đưa ra quyết định phù hợp về mức độ phức tạp của câu hỏi.
- Số lượng Token Đầu vào/Đầu ra: Theo dõi số lượng token đã sử dụng giúp bạn ước tính chi phí, quản lý giới hạn ngữ cảnh và tối ưu hóa các câu lệnh của mình.
- Thanh Tiến trình Ngữ cảnh: Một thanh đồ họa trực quan cùng với phần trăm sử dụng giúp bạn hình dung mức độ “đầy” của cửa sổ ngữ cảnh hiện tại. Điều này cực kỳ hữu ích để tránh vượt quá giới hạn token và đảm bảo Claude có đủ thông tin để đưa ra phản hồi chính xác. Thanh tiến trình sẽ đổi màu (xanh, vàng, đỏ) tùy thuộc vào mức độ sử dụng, giúp bạn dễ dàng nhận biết khi nào ngữ cảnh gần đầy.
- Trạng thái Git Tức thì: Nếu bạn đang làm việc trong một kho lưu trữ Git, dòng trạng thái sẽ hiển thị nhánh hiện tại cùng với số lượng tệp đã được thêm vào khu vực staging (màu xanh) và số lượng tệp đã được sửa đổi nhưng chưa được staging (màu vàng). Điều này giúp bạn luôn nắm bắt được trạng thái thay đổi của code mà không cần rời khỏi Claude Code.
Chuẩn Bị Trước Khi Bắt Đầu
Trước khi chúng ta đi sâu vào cài đặt, có một công cụ dòng lệnh quan trọng mà bạn cần trang bị:
1. Cài Đặt Công Cụ Dòng Lệnh JQ
JQ là một bộ xử lý JSON nhẹ và linh hoạt từ dòng lệnh, được thiết kế để phân tích, lọc và ánh xạ dữ liệu JSON. Trong trường hợp này, Claude Code sẽ gửi dữ liệu trạng thái dưới dạng JSON và JQ sẽ giúp chúng ta trích xuất các thông tin cần thiết một cách dễ dàng và hiệu quả.
Để cài đặt JQ, hãy truy cập trang tải xuống chính thức của JQ và làm theo hướng dẫn phù hợp với hệ điều hành của bạn:
Ví dụ, trên macOS, bạn có thể cài đặt bằng Homebrew:
brew install jq
Trên các hệ thống Linux dựa trên Debian (như Ubuntu):
sudo apt-get install jq
Thiết Lập Dòng Trạng Thái Trong Claude Code
Giờ đây, chúng ta sẽ tiến hành cấu hình Claude Code để sử dụng dòng trạng thái tùy chỉnh của mình.
2. Kích Hoạt Statusline Trong Cài Đặt Claude Code
Claude Code cho phép bạn tùy chỉnh một số hành vi thông qua tệp settings.json. Tệp này thường nằm ở thư mục cấp cao nhất của Claude Code trong thư mục người dùng của bạn: ~/.claude/settings.json.
- Kiểm tra hoặc Tạo tệp
settings.json:
Nếu tệp~/.claude/settings.jsonchưa tồn tại, bạn cần tạo nó.touch ~/.claude/settings.json - Chỉnh sửa nội dung tệp
settings.json:
Mở tệp này bằng trình soạn thảo văn bản yêu thích của bạn và thêm hoặc cập nhật cấu hình"statusLine"như sau:{ "statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 2 } }Giải thích:
"type": "command": Chỉ định rằng dòng trạng thái sẽ được tạo ra bằng cách chạy một lệnh bên ngoài."command": "~/.claude/statusline.sh": Đường dẫn tuyệt đối đến script shell mà chúng ta sẽ tạo ở bước tiếp theo. Đảm bảo đường dẫn này chính xác."padding": 2: Đặt khoảng cách đệm (khoảng trống) ở hai bên của dòng trạng thái, giúp hiển thị dễ đọc hơn.
3. Tạo Tệp Script Statusline và Cấp Quyền Thực Thi
Tiếp theo, chúng ta sẽ tạo tệp script shell sẽ chịu trách nhiệm tạo ra chuỗi dòng trạng thái. Tệp này nên được đặt trong cùng thư mục với settings.json để dễ quản lý.
- Tạo tệp script
statusline.sh:Sử dụng lệnh
touchđể tạo tệp:touch ~/.claude/statusline.shBạn có thể đặt tên tệp là bất cứ thứ gì bạn muốn, nhưng hãy đảm bảo rằng đường dẫn trong thuộc tính
"command"của tệpsettings.jsonkhớp với tên bạn đã chọn. - Cấp quyền thực thi cho tệp script:
Để hệ thống có thể chạy script này, bạn cần cấp cho nó quyền thực thi:
chmod +x ~/.claude/statusline.shNếu bạn bỏ qua bước này, Claude Code sẽ không thể chạy script và dòng trạng thái sẽ không hiển thị.
- Ghi script dòng trạng thái vào tệp
statusline.sh:Mở tệp
~/.claude/statusline.shbằng trình soạn thảo văn bản và dán toàn bộ nội dung script dưới đây vào đó:#!/bin/bash # Đọc dữ liệu JSON mà Claude Code gửi tới stdin # Nhớ cài đặt jq để trích xuất dữ liệu từ chuỗi json, giúp dễ dàng hơn # Bạn có thể pipe dữ liệu json dạng text để kiểm tra script input=$(cat) # Đặt biến màu sắc. Các chuỗi thoát có thể khác nhau tùy hệ thống, bash, zsh, v.v. GREEN=$'\033[32m' YELLOW=$'\033[33m' RED=$'\033[91m' RESET=$'\033[0m' # Trích xuất các trường sử dụng jq. Nhớ cài đặt jq # Lấy Tên Mô hình MODEL=$(echo "$input" | jq -r '.model.display_name') # Lấy Phần trăm sử dụng, Tổng token đầu ra và Tổng token đầu vào, lưu vào biến # "// 0" cung cấp giá trị dự phòng nếu trường là null PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1) OTOK=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0' | cut -d. -f1) ITOK=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0' | cut -d. -f1) # Thanh tiến trình ngữ cảnh BAR_WIDTH=10 FILLED=$((PCT * BAR_WIDTH / 100)) EMPTY=$((BAR_WIDTH - FILLED)) BAR="" [ "$FILLED" -gt 0 ] && BAR=$(printf "%${FILLED}s" | tr ' ' '▓') [ "$EMPTY" -gt 0 ] && BAR="${BAR}$(printf "%${EMPTY}s" | tr ' ' '░')" # Chọn màu thanh tiến trình dựa trên mức sử dụng. < 50 xanh, < 80 vàng, còn lại đỏ if [ "$PCT" -lt 50 ]; then BAR_COLOR="$GREEN" elif [ "$PCT" -lt 80 ]; then BAR_COLOR="$YELLOW" else BAR_COLOR="$RED" # đỏ tươi fi # Trạng thái Git cho thư mục, nếu có if git rev-parse --git-dir > /dev/null 2>&1; then BRANCH=$(git branch --show-current 2>/dev/null) STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ') MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ') GIT_STATUS="" [ "$STAGED" -gt 0 ] && GIT_STATUS="${GREEN}+${STAGED}${RESET}" [ "$MODIFIED" -gt 0 ] && GIT_STATUS="${GIT_STATUS}${YELLOW}~${MODIFIED}${RESET}" # Hiển thị dòng trạng thái với trạng thái git nếu có echo -e "$MODEL | i$ITOK, o$OTOK | cntxt ${BAR_COLOR}$BAR${RESET} ${PCT}% |⎇ $BRANCH $GIT_STATUS" else # Ngược lại, hiển thị dòng trạng thái không có trạng thái git echo -e "$MODEL | i$ITOK, o$OTOK | cntxt ${BAR_COLOR}$BAR${RESET} ${PCT}%" fi
Phân Tích Script Statusline Chi Tiết
Để hiểu rõ hơn về cách dòng trạng thái hoạt động, hãy cùng phân tích từng phần của script:
Khởi tạo và Biến Màu Sắc
#!/bin/bash
input=$(cat)
GREEN=$'\033[32m'
YELLOW=$'\033[33m'
RED=$'\033[91m'
RESET=$'\033[0m'
#!/bin/bash: Đây là “shebang”, chỉ định rằng script này nên được thực thi bằng Bash shell.input=$(cat): Lệnh này đọc toàn bộ dữ liệu JSON được gửi từ Claude Code thông qua Standard Input (stdin) và lưu vào biếninput.- Các biến
GREEN,YELLOW,RED,RESET: Đây là các mã thoát ANSI được sử dụng để thêm màu sắc vào đầu ra của terminal, giúp dòng trạng thái trực quan hơn.
Trích xuất Dữ liệu với JQ
MODEL=$(echo "$input" | jq -r '.model.display_name')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
OTOK=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0' | cut -d. -f1)
ITOK=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0' | cut -d. -f1)
- Mỗi dòng sử dụng
echo "$input" | jq -r '...'để truyền dữ liệu JSON vào JQ và trích xuất thông tin cụ thể..model.display_name: Lấy tên hiển thị của mô hình AI..context_window.used_percentage // 0: Lấy phần trăm ngữ cảnh đã sử dụng.// 0là một tính năng của JQ cung cấp giá trị mặc định là 0 nếu trường này không tồn tại hoặc là null.cut -d. -f1được sử dụng để chỉ lấy phần nguyên của số (ví dụ: 75 từ 75.123)..context_window.total_output_tokens // 0và.context_window.total_input_tokens // 0: Tương tự, lấy tổng số token đầu ra và đầu vào.
Thanh Tiến Trình Ngữ cảnh
BAR_WIDTH=10
FILLED=$((PCT * BAR_WIDTH / 100))
EMPTY=$((BAR_WIDTH - FILLED))
BAR=""
[ "$FILLED" -gt 0 ] && BAR=$(printf "%${FILLED}s" | tr ' ' '▓')
[ "$EMPTY" -gt 0 ] && BAR="${BAR}$(printf "%${EMPTY}s" | tr ' ' '░')"
if [ "$PCT" -lt 50 ]; then
BAR_COLOR="$GREEN"
elif [ "$PCT" -lt 80 ]; then
BAR_COLOR="$YELLOW"
else
BAR_COLOR="$RED"
fi
- Đoạn code này tính toán độ dài của thanh “đã đầy” (
▓) và “trống” (░) dựa trênBAR_WIDTHvàPCT. printfvàtrđược sử dụng để tạo chuỗi các ký tự▓và░.- Câu lệnh
if/elif/elsegán màu sắc cho thanh tiến trình dựa trên ngưỡng sử dụng phần trăm ngữ cảnh (dưới 50% xanh, dưới 80% vàng, còn lại đỏ).
Tích hợp Trạng thái Git
if git rev-parse --git-dir > /dev/null 2>&1; then
BRANCH=$(git branch --show-current 2>/dev/null)
STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')
MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')
GIT_STATUS=""
[ "$STAGED" -gt 0 ] && GIT_STATUS="${GREEN}+${STAGED}${RESET}"
[ "$MODIFIED" -gt 0 ] && GIT_STATUS="${GIT_STATUS}${YELLOW}~${MODIFIED}${RESET}"
echo -e "$MODEL | i$ITOK, o$OTOK | cntxt ${BAR_COLOR}$BAR${RESET} ${PCT}% |⎇ $BRANCH $GIT_STATUS"
else
echo -e "$MODEL | i$ITOK, o$OTOK | cntxt ${BAR_COLOR}$BAR${RESET} ${PCT}%"
fi
if git rev-parse --git-dir > /dev/null 2>&1; then: Kiểm tra xem thư mục hiện tại có phải là một kho lưu trữ Git hay không. Nếu có, nó sẽ chạy các lệnh Git.BRANCH=$(git branch --show-current 2>/dev/null): Lấy tên nhánh Git hiện tại.STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' '): Đếm số lượng tệp đã được thêm vào khu vực staging.MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' '): Đếm số lượng tệp đã được sửa đổi nhưng chưa được staging.- Các dòng
[ "$STAGED" -gt 0 ] && ...và[ "$MODIFIED" -gt 0 ] && ...xây dựng chuỗiGIT_STATUS, hiển thị số lượng thay đổi với màu sắc tương ứng (+ cho staged, ~ cho modified). - Cuối cùng, script in ra dòng trạng thái đầy đủ với thông tin Git nếu có, hoặc chỉ thông tin Claude Code nếu không phải là kho lưu trữ Git. Lệnh
echo -echo phép giải thích các mã thoát ANSI (màu sắc).
Kiểm Tra và Khắc phục Sự cố
Nếu dòng trạng thái của bạn không hiển thị hoặc không hoạt động như mong đợi, hãy kiểm tra các điểm sau:
- Kiểm tra cấu trúc thư mục: Đảm bảo rằng tệp
settings.jsonvàstatusline.shnằm chính xác trong thư mục~/.claude/. - Quyền thực thi: Chắc chắn rằng tệp
~/.claude/statusline.shcó quyền thực thi. Bạn có thể xác nhận bằng lệnhls -l ~/.claude/statusline.sh. Nếu thiếu, chạy lạichmod +x ~/.claude/statusline.sh. - Đường dẫn script: Kiểm tra lại đường dẫn trong
"command"trong tệpsettings.jsoncó khớp chính xác với vị trí và tên tệp script của bạn hay không. - Cài đặt JQ: Đảm bảo JQ đã được cài đặt đúng cách và có thể truy cập được từ PATH của bạn. Bạn có thể kiểm tra bằng cách chạy
jq --versiontrong terminal. - Lỗi cú pháp Bash: Script shell có thể dễ bị lỗi với các dấu nháy, dấu ngoặc hoặc ký tự thoát.
Để kiểm tra script một cách độc lập, bạn có thể mô phỏng dữ liệu JSON đầu vào. Ví dụ, tạo một tệp
test_data.jsonvới nội dung sau:{ "model": { "display_name": "Claude-3-Opus" }, "context_window": { "used_percentage": 75.5, "total_output_tokens": 1200, "total_input_tokens": 3456 } }Sau đó chạy script của bạn với dữ liệu này:
cat test_data.json | ~/.claude/statusline.shĐiều này sẽ hiển thị đầu ra của script và giúp bạn debug mọi lỗi cú pháp.
- Kiểm tra nhật ký lỗi: Một số môi trường có thể ghi lại lỗi từ các script dòng lệnh. Kiểm tra nhật ký hệ thống hoặc nhật ký của Claude Code (nếu có) để tìm thông báo lỗi liên quan.
Kết Luận
Việc tùy chỉnh dòng trạng thái cho Claude Code không chỉ là một thủ thuật nhỏ mà còn là một cách mạnh mẽ để biến công cụ AI này thành một phần tích hợp sâu sắc hơn vào quy trình làm việc của bạn. Bằng cách hiển thị thông tin quan trọng một cách trực quan và tức thì, bạn có thể đưa ra quyết định tốt hơn, quản lý tài nguyên hiệu quả hơn và cuối cùng là nâng cao năng suất tổng thể.
Với hướng dẫn này, bạn đã có thể tự mình triển khai một dòng trạng thái thông minh và hữu ích. Đừng ngần ngại khám phá và tùy chỉnh script hơn nữa để phù hợp với nhu cầu riêng của bạn! Chúc bạn thành công trong việc tối ưu hóa trải nghiệm Claude Code của mình.



