Claude Code output styles: Cách hoạt động và tự tạo
Output style sửa system prompt của Claude Code và định hình mọi reply. Xem 5 style có sẵn, tác động lên transcript, cùng cách tự viết style riêng.
Kiểu đầu ra trong Claude Code
Kiểu đầu ra trong Claude Code là một khối chỉ thị mà Claude Code thêm vào system prompt của Claude. Nó thay đổi cách Claude trả lời bạn: vai trò Claude đảm nhận và cấu trúc nội dung được in ra. Kiểu đầu ra không dạy Claude thêm điều gì về codebase của bạn và không thể cấp quyền cho Claude chạy bất kỳ thứ gì.
Claude Code có sẵn 5 kiểu. Lựa chọn của bạn được lưu trong một settings key là outputStyle. Key này chỉ được đọc một lần khi session bắt đầu. Đây là nguyên nhân của phần lớn nhầm lẫn về tính năng này. Khi bạn đổi kiểu giữa session, lựa chọn mới được lưu nhưng bị bỏ qua cho đến khi bạn xóa nó.
Trên VPS, đây không chỉ là tùy chọn về giao diện. Transcript là nội dung bạn đọc qua kết nối SSH (secure shell), thường bên trong một cửa sổ tmux. Vì vậy, mỗi dòng Claude giải thích là một dòng bạn phải chờ và cũng chiếm một dòng trong scrollback buffer có kích thước cố định.
Vị trí của setting outputStyle
Chọn một style trong menu /config, tại mục Output style. Claude Code ghi lựa chọn của bạn vào .claude/settings.local.json trong project bạn đang làm việc.
Lệnh độc lập /output-style không còn tồn tại. Lệnh này đã bị deprecated từ v2.1.73 và bị removed trong v2.1.91, nên trên bản build hiện tại nó hoàn toàn không làm gì. Hãy kiểm tra phiên bản đang chạy trước khi làm theo guide cũ. Các phiên bản trên trang này được kiểm tra vào tháng 8 năm 2026.
claude --versionBạn cũng có thể tự đặt key. Có 4 settings file có thể chứa key này. File cụ thể hơn sẽ được ưu tiên hơn file tổng quát hơn.
~/.claude/settings.jsonlà user file của bạn. File này áp dụng cho mọi project trên máy đó..claude/settings.jsonlà project file. File này được commit vào git, nên áp dụng cho mọi người clone repository..claude/settings.local.jsonlà local project file. File này không được commit và override cả 2 file trên. Đây là file mà menu/configghi vào.- Managed settings do đội IT triển khai từ một system path như
/etc/claude-code/trên Linux sẽ override mọi thiết lập khác.
Giá trị của key là tên style:
{
"outputStyle": "Concise"
}Để chỉ áp dụng cho một session, truyền cùng key đó trên command line. Flag --settings nhận một path hoặc một chuỗi JSON inline. Các giá trị của flag này override những key tương ứng trong settings file trong lần chạy đó:
claude --settings '{"outputStyle": "Concise"}'Nhãn menu và slash command đã thay đổi ít nhất một lần trong quá trình phát triển feature này. Key outputStyle thì không thay đổi. Khi screenshot trong một guide không còn khớp với những gì bạn thấy, hãy đặt key trực tiếp và xác nhận bằng /status. Lệnh này liệt kê các nguồn settings đang có hiệu lực.
Vì sao style output mới không có tác dụng cho đến khi bạn clear
Claude Code tạo system prompt một lần khi session bắt đầu, và output style là một phần của system prompt đó. Vì vậy, thay đổi setting trong khi session đang chạy chỉ lưu lại giá trị mới mà không tạo ra thay đổi nào bạn có thể thấy, vì session hiện tại vẫn gửi prompt đã tạo lúc khởi động. Style mới sẽ được nạp ở lần /clear tiếp theo hoặc khi khởi chạy lại.
/clear
/context/context hiển thị nội dung hiện đang chiếm context window, được chia theo category, bao gồm cả system prompt. Hãy chạy lệnh này trong một session mới với từng style. Dòng system prompt là dữ liệu đầu vào để bạn so sánh. Đây cũng là cách nhanh nhất để xác nhận custom style đã được nạp. Để hiểu rõ hơn về những gì lấp đầy window đó, xem cách context đầy lên trong một session Claude Code dài.
Có lý do setting này chờ đến session tiếp theo thay vì áp dụng ngay. API phục vụ các request lặp lại từ prompt cache khớp theo phần đầu của mỗi request, còn system prompt nằm ngay ở phần đầu. Nếu viết lại system prompt giữa cuộc hội thoại, toàn bộ nội dung phía sau sẽ bị vô hiệu hóa, nên turn tiếp theo phải xử lý lại toàn bộ history như input mới. Cố định style khi session bắt đầu sẽ tránh chi phí đó. Chuyển style không tốn nhiều chi phí. Chỉ cần clear.
Những thay đổi của từng output style tích hợp sẵn đối với transcript
- Default là system prompt thông thường của Claude Code, được viết cho công việc phát triển phần mềm.
- Concise đưa kết quả lên đầu. Style này bỏ phần mở đầu và phần tường thuật từng bước, đồng thời giữ câu trả lời ngắn cho đến khi bạn yêu cầu thêm chi tiết. Công việc kỹ thuật phía sau không thay đổi. Style này không bao giờ rút gọn báo cáo lỗi hoặc cảnh báo bảo mật, và vẫn hỏi đầy đủ trước khi thực hiện hành động có tính phá hủy. Style này yêu cầu Claude Code v2.1.237 trở lên.
- Explanatory thêm các “Insights” mang tính hướng dẫn giữa các bước của một task, giải thích lý do chọn một cách triển khai và pattern mà codebase của bạn đang sử dụng. Transcript sẽ dài hơn theo thiết kế.
- Learning đi xa hơn. Claude chia sẻ các insight đó, sau đó yêu cầu bạn tự viết những phần code nhỏ, đồng thời đánh dấu từng vị trí bằng comment
TODO(human)trong file. - Proactive khiến Claude hành động thay vì hỏi. Style này cho phép Claude đưa ra các giả định hợp lý cho những quyết định thông thường, thay vì dừng lại để xin xác nhận.
Hãy đọc kỹ mục cuối, vì đây là mục dễ bị hiểu sai nhất. Proactive là hướng dẫn trong system prompt. Nó thay đổi những gì Claude cố gắng thực hiện. Permission mode của bạn vẫn quyết định thao tác nào thực sự được chạy mà không cần hỏi, và đây mới là setting quan trọng trên server mà bạn để chạy unattended. Nội dung này được giải thích trong auto mode và các permission mode của Claude Code.
Output style khác với CLAUDE.md, hook và subagent như thế nào
Tất cả các cơ chế này đều giống như cách chỉ cho Claude biết phải hoạt động thế nào, nhưng chúng hoạt động ở các layer khác nhau.
- Output style được thêm vào system prompt. Nó áp dụng cho mọi response trong conversation chính.
- CLAUDE.md được thêm dưới dạng user message sau system prompt. Đây là nơi đặt các quy ước của project và thông tin thực tế về codebase.
--append-system-promptnối thêm text vào system prompt cho một lần invocation, nhưng không xóa nội dung nào. Đây là phiên bản dùng một lần của output style.- Hook là shell command mà Claude Code tự chạy khi một event xảy ra. Harness thực thi hook, nên hook luôn chạy dù Claude có tự chọn chạy hay không. Xem hook của Claude Code có thể và không thể làm gì.
- Subagent chạy với system prompt riêng và bộ tool riêng.
Một phép thử ngắn giúp bạn chọn giữa 2 cơ chế đầu tiên. Thông tin thực tế về project nên đặt trong CLAUDE.md, vì Claude cần biết những thông tin đó. Cách diễn đạt nên đặt trong output style, vì nó quyết định cách đọc của câu trả lời. Bất kỳ việc gì bắt buộc phải xảy ra trong mọi lần chạy, bất kể model quyết định thế nào, đều nên dùng hook.
Output style chỉ áp dụng cho conversation chính. Subagent không kế thừa style của bạn, vì nó bắt đầu một conversation riêng với system prompt riêng. Fork của conversation hiện tại là ngoại lệ, vì fork kế thừa chính xác system prompt của conversation cha. Nếu subagent viết theo cách bạn không thích, hãy sửa file của agent đó thay vì sửa style của bạn.
Cách viết output style của riêng bạn
Output style tùy chỉnh là một file markdown có frontmatter. Lưu file trong thư mục home để dùng cho mọi project, hoặc lưu trong repository để giữ cùng code. Thư mục user là ~/.claude/output-styles/ và thư mục project là .claude/output-styles/.
mkdir -p ~/.claude/output-styles
cat > ~/.claude/output-styles/terse-ops.md <<'EOF'
---
name: Terse ops
description: Command first, explanation after, for SSH sessions
keep-coding-instructions: true
---
Lead with the command or the file change. Put the explanation after it, in two sentences or fewer.
Do not narrate what you are about to do. Report what you did.
When a command can fail, print the one check that proves it worked and say what a healthy result looks like.
EOFBắt đầu một session và mở /config. Style của bạn sẽ xuất hiện trong danh sách Output style, kèm description bạn đã viết. Nếu không thấy, file chưa được đọc: kiểm tra path và kiểm tra block frontmatter --- có nằm ở dòng đầu tiên của file không. Tên file trở thành tên style, trừ khi frontmatter đặt name. Vì vậy, style này có tên Terse ops chứ không phải terse-ops.
Chọn style đó, hoặc đặt key thành đúng tên đó rồi xóa:
{
"outputStyle": "Terse ops"
}Một field quyết định file của bạn là phần điều chỉnh hay phần thay thế. keep-coding-instructions mặc định là false, nghĩa là custom style loại bỏ các instruction built-in về software engineering của Claude Code và chỉ chạy theo nội dung của bạn. Các instruction built-in này hướng dẫn Claude xác định phạm vi thay đổi và xác minh kết quả. Hãy bỏ field này khi dùng cho writing assistant hoặc data analyst, vì các trường hợp đó không cần những instruction này. Đặt thành true cho mọi trường hợp vẫn có thao tác với code. Nếu không, bạn sẽ không hiểu vì sao một kỹ sư cẩn thận đột nhiên ngừng tự kiểm tra công việc của mình.
description là dòng mà picker /config hiển thị bên cạnh tên style. Hãy viết dòng này để sau 6 tháng, bạn vẫn phân biệt được hai style của chính mình khi chọn giữa chúng.
Vì sao phong cách Concise khác biệt khi dùng SSH
Trên VPS, bạn đọc transcript qua nhiều lớp mà terminal cục bộ không có. Mỗi lớp đều khiến việc dùng nhiều chữ trở nên tốn kém hơn.
Scrollback là yếu tố đầu tiên. Trong tmux, mỗi pane giữ một số dòng cố định do history-limit đặt, mặc định là 2000. Transcript có nhiều lời giải thích sẽ làm đầy buffer nhanh hơn. Phần đầu của session sẽ bị đẩy ra sớm hơn, nên output bạn muốn xem lại có thể không còn. Hãy tăng giới hạn nếu cần thêm chỗ trống:
echo 'set -g history-limit 20000' >> ~/.tmux.conf
tmux source-file ~/.tmux.confCác pane tạo sau đó sẽ giữ 20000 dòng mỗi pane, đổi lại sẽ tốn thêm memory cho từng pane. Những pane đã mở vẫn giữ giới hạn cũ vì kích thước buffer được cố định khi pane được tạo. Nếu bạn vẫn đang thiết kế layout cho session, chạy Claude Code bên trong tmux trên VPS sẽ trình bày cách thực hiện.
Latency là yếu tố thứ hai. Response được stream vào terminal trong lúc được tạo. Với kết nối có round-trip time cao, phần mở đầu dài đồng nghĩa với việc bạn phải chờ text xuất hiện trước khi thấy câu trả lời.
Output token là yếu tố thứ ba. Mỗi dòng giải thích đều được tính vào output. Explanatory và Learning được thiết kế để dài hơn. Concise được thiết kế để ngắn hơn vì nó hướng dẫn Claude mặc định giữ response ngắn.
Không nên tin một tỷ lệ phần trăm do bất kỳ ai đưa ra, kể cả trong bài này. Mức chênh lệch phụ thuộc vào prompt, model và công việc bạn yêu cầu. Vì vậy, hãy tự đo trước và sau khi thay đổi. Chạy cùng một tác vụ thực tế trong 2 session mới: một session dùng Default và một session dùng Concise, sau đó so sánh. Statusline là cách đo dễ nhất vì Claude Code truyền cho script một đối tượng JSON qua stdin. Đối tượng này đã có cả tên style và số lượng token:
cat > ~/.claude/statusline.sh <<'EOF'
#!/bin/bash
input=$(cat)
style=$(echo "$input" | jq -r '.output_style.name // "default"')
out=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0')
cost=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
echo "style=$style out=$out cost=$cost"
EOF
chmod +x ~/.claude/statusline.shTrỏ setting statusLine vào script đó:
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}Thanh ở cuối session giờ sẽ hiển thị style đang hoạt động cùng số token đã tạo. Đây chính là thông tin before-and-after bạn cần. Script cần jq, JSON parser chạy trên command line, nên hãy cài đặt trước bằng sudo apt install -y jq. Nếu thanh vẫn trống, hãy chạy script thủ công và pipe một JSON vào đó. Statusline thoát với mã khác 0 sẽ không in gì và cũng không báo lỗi gì. Statusline tùy chỉnh cho Claude Code liệt kê các field còn lại trong đối tượng đó. Nếu bạn quan tâm đến phần billing thay vì trạng thái session, hãy đọc token của Claude Code thực sự được tính vào đâu và các tool theo dõi chi phí Claude Code.
Cách kiểm tra style output nào thực sự đang được load
Hãy dùng các lệnh kiểm tra này thay vì đoán.
/statusliệt kê các nguồn settings đang có hiệu lực cho session này, bao gồm cả việc settings do organisation quản lý có đang được áp dụng hay không./contexthiển thị system prompt đã được load dưới dạng một category trong phần breakdown của context window.claude doctorchạy từ shell mà không khởi động session, in ra thông tin chẩn đoán về installation và settings, đồng thời báo các settings file không hợp lệ.
Khi một style không được áp dụng, nguyên nhân gần như luôn là một trong hai trường hợp. Trường hợp đầu tiên là bạn đã thay đổi style giữa session, nên hãy chạy /clear. Trường hợp thứ hai là thứ tự ưu tiên: .claude/settings.local.json ghi đè .claude/settings.json, và cả hai đều ghi đè ~/.claude/settings.json. Vì bộ chọn /config ghi vào local file, style mà team của bạn đã commit trong .claude/settings.json sẽ âm thầm bị ghi đè trên mọi máy mà trước đó ai đó đã dùng menu. /status cho biết nguồn nào đã được chọn.
Lỗi cú pháp JSON có cùng biểu hiện nhưng cách xử lý khác. claude doctor cho biết tên file mà nó không thể parse. Hãy chạy lệnh này trước khi tìm nguyên nhân phức tạp hơn.
FAQ
Lệnh /output-style không còn hoạt động. Tại sao?
Lệnh này đã bị deprecated trong v2.1.73 và bị xóa trong v2.1.91, nên trên bản build từ giữa năm 2026 lệnh này không còn tồn tại. Chạy claude --version để xem phiên bản bạn đang dùng. Chọn style trong /config tại mục Output style, hoặc đặt key outputStyle trong file settings. Key này vẫn được hỗ trợ sau khi lệnh bị xóa, nên đặt trực tiếp key là cách đáng ghi lại trong ghi chú riêng.
Tôi đã đổi output style nhưng không có gì thay đổi. Tại sao?
Output style là một phần của system prompt, và Claude Code tạo system prompt một lần khi session bắt đầu. Thay đổi giữa session được lưu nhưng không được áp dụng, vì session đang chạy vẫn gửi prompt đã tạo lúc khởi động. Chạy /clear hoặc bắt đầu session mới. Nếu vẫn không áp dụng, chạy /status để xem settings source nào được ưu tiên, vì .claude/settings.local.json ghi đè .claude/settings.json và cả hai đều ghi đè ~/.claude/settings.json.
Output style Concise có giúp tiết kiệm chi phí không?
Style này làm giảm output token theo đúng hướng bạn mong đợi, vì nó yêu cầu Claude mặc định giữ câu trả lời ngắn. Mức giảm phụ thuộc vào prompt và model bạn dùng, nên hãy xem mọi phần trăm được công bố là kết quả đo trên công việc của người khác. Hãy tự đo: chạy /context trong một session mới với từng style để đo phần input, sau đó chạy cùng một task với từng style và so sánh số output token. Concise không rút ngắn error report hoặc cảnh báo bảo mật, nên các phần bạn cần đọc nhất vẫn được giữ nguyên.
Output style có thay đổi cách subagent viết không?
Không. Output style chỉ áp dụng cho conversation chính, vì mỗi subagent bắt đầu conversation riêng với system prompt riêng và bộ tool riêng. Fork của conversation hiện tại là ngoại lệ, vì fork kế thừa nguyên vẹn system prompt của parent. Để thay đổi cách một subagent phản hồi, hãy sửa file riêng của agent đó.
Output style có cho phép Claude chạy command mà không hỏi không?
Không. Output style là text trong system prompt, nên nó chỉ có thể ảnh hưởng đến việc Claude cố gắng thực hiện gì. Style Proactive khiến Claude tự đưa ra giả định và hành động thay vì dừng lại trước các quyết định thông thường, nhưng vẫn không thể tự phê duyệt command. Permission mode quyết định command nào được chạy mà không cần prompt, và đó là setting cần kiểm tra trước khi bạn để session chạy trên server.