Claude Code Output Styles Là Gì? Custom Style Dễ Dàng (2026)

Bạn đã bao giờ bắt đầu một coding session và muốn Claude trả lời ngắn gọn, chỉ code, không giải thích dài dòng? Hoặc ngược lại, bạn đang onboard vào codebase mới và muốn Claude “dạy” bạn hiểu từng quyết định thiết kế thay vì chỉ làm xong việc?
Claude Code output styles chính là tính năng giải quyết điều đó. Ít developer biết tới, từng bị deprecated rồi community kéo ngược lại sau 4 ngày, tính năng này cho phép bạn thay đổi hoàn toàn phong cách giao tiếp của Claude Code mà không cần sửa một dòng config project nào.
Bài này bao gồm: output styles là gì và hoạt động ra sao, 3 built-in styles có sẵn, cách tạo custom style trong 5 phút với file Markdown thực tế, so sánh với CLAUDE.md và hooks để biết dùng cái nào, cùng câu chuyện deprecated tháng 11/2025 và tình trạng hiện tại.
TL;DR
- Output styles thay đổi cách Claude Code giao tiếp (tone, vai trò, format), không phải kiến thức hay permissions
- 3 built-in styles sẵn có: Default, Explanatory (giải thích code patterns), Learning (coaching mode)
- Tạo custom style bằng file Markdown, lưu vào
~/.claude/output-styles/, kích hoạt bằng/output-style [name] - Từng bị deprecated v2.0.30, community phản đối qua 2 GitHub issues, Anthropic un-deprecated sau 4 ngày
Output Styles Là Gì? (Và Tại Sao Đây Là Tính Năng Ít Ai Biết Tới)
Output styles là các cấu hình thay đổi cách Claude Code phản hồi, không phải những gì Claude biết. Chúng sửa đổi system prompt để thiết lập vai trò, tone, và định dạng output, trong khi vẫn giữ nguyên toàn bộ khả năng cốt lõi như chạy script, đọc file, hay theo dõi TODO.
Hình dung output styles như một Persona Switch: bạn giữ nguyên Claude Code với đầy đủ sức mạnh, nhưng chọn cách nó “nói chuyện” với bạn trong session đó. Hôm nay muốn nó ngắn gọn, chỉ code? Bật style terse. Đang onboard vào codebase lạ và cần hiểu từng quyết định thiết kế? Bật style explanatory. Muốn tự viết code với Claude chỉ guide? Bật style learning.
Tính năng này ít được biết tới vì nó không xuất hiện trong luồng làm việc thông thường. Không có popup, không có onboarding reminder, không có nút nào trên giao diện. Bạn phải chủ động gõ /config hoặc /output-style [name] thì mới tiếp cận được.
Và đây là điều quan trọng mà official docs không nói rõ: output styles và CLAUDE.md đều sửa system prompt, nhưng theo cách hoàn toàn khác nhau. Output styles là persona switch theo session (tắt/bật được), còn CLAUDE.md là always-on rules của project (không tắt được). Dùng nhầm sẽ không gây lỗi, nhưng sẽ không đạt được kết quả mong muốn.
3 Built-in Output Styles Trong Claude Code Là Gì?
Claude Code có 3 built-in output styles sẵn dùng ngay, không cần tạo file hay cấu hình thêm. Ba styles này phản ánh 3 chế độ làm việc khác nhau mà Anthropic thiết kế dựa trên feedback từ developer community.
Default là style tiêu chuẩn, cân bằng giữa giải thích và thực thi. Claude làm việc bình thường, trả lời đủ thông tin nhưng không verbose. Phù hợp với hầu hết task hàng ngày khi bạn đã quen codebase và không cần hướng dẫn đặc biệt. Đây là style được chọn khi bạn không set gì.
Explanatory thêm một lớp “insights” giáo dục vào mọi tương tác. Khi Claude sửa một function với Explanatory, nó sẽ giải thích tại sao dùng pattern đó, framework nào đang được áp dụng, quyết định thiết kế nằm ở đâu và tại sao cách viết khác lại kém hơn. Mình khuyên dùng Explanatory khi bắt đầu làm việc với codebase mới hoặc khi học một ngôn ngữ chưa quen. Tốc độ làm việc chậm hơn một chút, nhưng bạn học được nhiều hơn trong cùng thời gian.
Learning đi một bước xa hơn Explanatory. Thay vì làm xong rồi giải thích, Claude sẽ “coach” bạn qua từng thay đổi: đặt câu hỏi ngược để bạn tự nghĩ trước, gợi ý thay vì viết thẳng, chỉ ra lỗi sai thay vì sửa trực tiếp. Style này phù hợp khi mục tiêu là phát triển skill trong quá trình làm việc thực tế, không phải giao output nhanh nhất.
Điều thú vị là ba style này không phải ngẫu nhiên. Chúng phản ánh ba giai đoạn khác nhau trong công việc của một developer: khi bạn đã quen việc và cần tốc độ (Default), khi bạn đang học hoặc khám phá (Explanatory), và khi bạn muốn cố tình làm chậm lại để xây dựng hiểu biết sâu hơn (Learning). Biết mình đang ở giai đoạn nào giúp chọn style phù hợp hơn nhiều so với chỉ dùng Default cho mọi thứ.
Gợi ý thực tế về thời điểm dùng từng style:
- Vừa join team mới, cần hiểu codebase nhanh: Explanatory trong 2 tuần đầu
- Đang debug lỗi khó, cần tập trung vào output: Default hoặc custom terse style
- Đang mentor junior developer hoặc tự học công nghệ mới: Learning
- Deadline gần, task quen thuộc, cần tốc độ tối đa: custom terse style
- Review PR của người khác, cần hiểu lý do từng thay đổi: Explanatory
Để kích hoạt bất kỳ style nào, gõ /config trong Claude Code rồi chọn “Output style”, hoặc dùng lệnh trực tiếp:
/output-style explanatory
Thay đổi có hiệu lực từ session tiếp theo. Session hiện tại không bị ảnh hưởng.
Output Styles Hoạt Động Thế Nào Bên Dưới Hood?
Output styles hoạt động bằng cách inject nội dung vào system prompt ngay khi bạn bắt đầu session mới. Đây là lý do thay đổi output style chỉ có hiệu lực từ session tiếp theo: system prompt được thiết lập một lần khi mở terminal, không thay đổi giữa chừng trong một conversation.

Cơ chế này là thiết kế có chủ đích, không phải giới hạn kỹ thuật. Giữ system prompt ổn định trong suốt conversation cho phép prompt caching hoạt động hiệu quả. Khi system prompt không thay đổi giữa các turn, Claude không cần reprocess toàn bộ context từ đầu. Với conversation dài kéo dài nhiều giờ, điều này giảm latency đáng kể và giảm chi phí token của từng lần gọi API. Đây là lý do thực tế đằng sau quyết định thiết kế, không phải giới hạn kỹ thuật.
Về mặt kỹ thuật, một custom output style chỉ là file Markdown có YAML frontmatter. Nội dung body của file đó được nối vào cuối system prompt của Claude Code khi session bắt đầu. Không có model fine-tuning, không có vector embedding, không có magic. Chỉ là text được thêm vào system prompt.
Điều này cũng giải thích tại sao output styles không conflict với tools hay permissions. Style chỉ ảnh hưởng đến “cách nói chuyện”, không ảnh hưởng đến “được phép làm gì”. Custom style với tone ngắn gọn không làm Claude mất khả năng chạy bash script hay đọc file hệ thống.
Làm Sao Tạo Custom Output Style Trong 5 Phút?
Mình đã tạo một custom style tên terse-engineer cho công việc hàng ngày: Claude chỉ trả lời code và kết quả ngắn gọn, không giải thích trừ khi mình hỏi thêm. Sau 3 ngày test trên các task quen thuộc, token usage trong coding sessions giảm khoảng 15% vì Claude không còn thêm phần giải thích và tóm tắt vào cuối mỗi response. Với những task mình đã làm nhiều lần, phần giải thích đó chỉ là noise, không phải thông tin mình cần.

Có 2 cách tạo custom output style:
Cách 1: Dùng lệnh /output-style:new: Gõ lệnh này trong terminal, Claude sẽ hỏi bạn muốn style làm gì rồi tự scaffold file. Nhanh nhất cho người mới bắt đầu.
Cách 2: Tạo file Markdown thủ công:
Chọn đường dẫn lưu file phù hợp:
| Level | Đường dẫn | Áp dụng cho |
|---|---|---|
| User (global) | ~/.claude/output-styles/[name].md |
Tất cả projects trên máy |
| Project | .claude/output-styles/[name].md |
Project hiện tại, có thể commit git |
Ví dụ hoàn chỉnh, file ~/.claude/output-styles/terse-engineer.md:
---
name: terse-engineer
description: Terse responses for experienced devs. Code-first, no fluff.
---
You are helping an experienced DevOps engineer who knows what they are doing.
Follow these rules strictly:
- Lead with code blocks. Explanation only if explicitly asked.
- Skip all preamble: no "Sure!", "Of course!", "Great question!"
- Commands: show only the command, skip setup context unless asked
- Error diagnosis: root cause in 1 sentence, then fix command
- No bullet-pointed summaries at the end of responses
- If something is critically important to warn about, one line before the code block
- Assume the reader can read code without hand-holding
Để kích hoạt:
/output-style terse-engineer
Hoặc vào /config > chọn “Output style” > chọn tên từ danh sách.
Nhớ rằng style có hiệu lực từ session tiếp theo. Nếu đang trong session hiện tại, mở terminal mới rồi Claude Code sẽ load style mới.
Output Styles vs CLAUDE.md: Dùng Cái Nào Và Khi Nào?
Dùng output styles khi bạn muốn thay đổi cách Claude giao tiếp theo từng loại task hôm nay. Dùng CLAUDE.md khi bạn muốn quy tắc đó áp dụng mọi lúc, bất kể đang làm gì. Đây là ranh giới mà tài liệu chính thức không giải thích rõ, nhưng quan trọng hơn bất kỳ chi tiết kỹ thuật nào.
Cả hai đều sửa system prompt, nhưng theo phạm vi khác nhau. Persona Switch (output styles) là session-level: bạn tắt/bật theo từng loại task, không bao giờ active nếu bạn không chọn. Always-On Rules (CLAUDE.md) là project-level: luôn luôn active, không tắt được trừ khi xóa hoặc comment out.

| Phương thức | Phạm vi | Tắt/bật? | Dùng khi nào |
|---|---|---|---|
| Output Styles | Session-level | Có (mỗi session) | Thay đổi tone, persona theo loại task hôm nay |
| CLAUDE.md | Project-level, always-on | Không | Rules cố định: coding standards, project context |
| Claude Code hooks | Event-triggered | Có | Tự động hóa: chạy linter sau mỗi file write |
| –append-system-prompt | One-time per call | N/A | Override nhanh cho một lần, không lưu |
Nguyên tắc chọn đơn giản: nếu bạn muốn Claude “nhớ” điều gì đó trong project, dù task là gì (không dùng console.log trong production, luôn viết TypeScript strict), thì viết vào CLAUDE.md. Nếu bạn muốn Claude thay đổi cách làm việc cho một loại task cụ thể hôm nay (review code vs viết tài liệu vs pair programming vs học codebase mới), thì dùng output style.
Sự khác biệt cốt lõi nằm ở tính linh hoạt. CLAUDE.md tốt cho những gì luôn đúng, bất kể bạn đang làm gì. Output styles tốt cho những gì đúng trong một bối cảnh cụ thể. Ví dụ: “không bao giờ commit lên main” là quy tắc luôn đúng, viết vào CLAUDE.md. Nhưng “hãy giải thích từng bước khi tôi đang học” chỉ đúng trong buổi học, không phải lúc deadline cận kề, dùng output style.
Output styles và CLAUDE.md không conflict: CLAUDE.md vẫn được đọc ngay cả khi bạn đang dùng custom output style. Style chỉ thêm instructions, không ghi đè CLAUDE.md. Tuy nhiên, nếu style và CLAUDE.md có instructions mâu thuẫn nhau, CLAUDE.md thường thắng vì nó được inject trước và rõ ràng hơn về project context.
Với Claude Code skills, logic tương tự: skills là slash commands với instructions đầy đủ, output styles là background persona. Bạn có thể dùng cả 2 cùng lúc mà không có vấn đề gì.
Tại Sao Output Styles Bị Deprecated Rồi Lại Được Giữ Lại?
Vào tháng 11/2025, Boris Cherny, developer tại Anthropic, đăng thông báo trên Threads: user-level output styles (file trong ~/.claude/output-styles/) sẽ tự động convert thành plugin. Đây là bước đầu của quá trình migrate tính năng sang hệ thống plugins mới hơn.
Rồi trong bản Claude Code v2.0.30, output styles bị deprecated hoàn toàn. Lý do: plugins và CLAUDE.md đã cover được phần lớn use cases.
Cộng đồng phản ứng ngay. Hai GitHub issues xuất hiện trên repo anthropics/claude-code:
- #10671: “Please don’t remove Output-Styles!” với hàng chục developer mô tả workflows cụ thể bị phá vỡ
- #10721: “IMPORTANT: 2.0.30 please KEEP the output-style” với chi tiết kỹ thuật về tại sao CLAUDE.md không thể thay thế
Nội dung chung của community feedback rất thuyết phục: CLAUDE.md là project rules, không phải persona switch. Khi bạn làm nhiều loại task khác nhau trên cùng một codebase, như lúc debug, lúc viết tài liệu, lúc onboard người mới, bạn cần khả năng tắt/bật hành vi khác nhau theo từng ngữ cảnh. CLAUDE.md không cung cấp tính linh hoạt đó vì nó luôn luôn bật. Đây là lý do community không chấp nhận câu trả lời “dùng CLAUDE.md thay thế”.
4 ngày sau, Anthropic un-deprecated output styles. Tính năng được giữ lại với cơ chế hiện tại: set tại session start, lưu vào settings.local.json.
Tình trạng hiện tại (2026): Output styles hoạt động đầy đủ. Lệnh /output-style và /config menu đều available. Nếu bạn có user-level styles tạo trước tháng 11/2025, kiểm tra lại tại ~/.claude/output-styles/ để đảm bảo frontmatter format còn đúng.
Câu Hỏi Thường Gặp
Output styles có hoạt động với mọi model không?
Output styles hoạt động với tất cả models Claude Code hỗ trợ, bao gồm Sonnet, Opus và Haiku. Style chỉ thêm text vào system prompt nên không phụ thuộc model cụ thể. Tuy nhiên, mỗi model thực thi style instructions theo cách khác nhau: Opus tuân theo instructions phức tạp và nhiều điều kiện tốt hơn Haiku. Với style đơn giản kiểu terse, sự khác biệt này không đáng kể. Với style phức tạp có nhiều quy tắc và điều kiện cụ thể, Opus cho kết quả nhất quán hơn.
Tôi có thể dùng nhiều output styles cùng lúc không?
Không, chỉ một output style active tại một thời điểm. Nếu bạn activate style B trong khi đang dùng style A, style B thay thế hoàn toàn style A từ session tiếp theo. Để kết hợp nhiều behaviors, cách tốt nhất là tạo một custom style tổng hợp tất cả instructions vào một file duy nhất. Ví dụ, style review-mode có thể bao gồm cả terse responses lẫn security-focused thinking nếu bạn cần cả hai trong cùng một loại task. Cách tổ chức này đơn giản hơn nhiều so với việc cố gắng stack nhiều style lên nhau.
Output styles có ảnh hưởng đến chất lượng code của Claude không?
Không ảnh hưởng đến correctness, chỉ ảnh hưởng đến cách trình bày kết quả. Code Claude viết với Default style và Explanatory style có chất lượng kỹ thuật tương đương nhau. Sự khác biệt nằm ở Explanatory thêm comments, giải thích và walkthrough vào response, còn terse style thì không có phần đó. Nếu bạn lo ngại về quality khi dùng terse style, hãy thêm một dòng instruction cụ thể vào file: “Never compromise code quality or skip error handling to be brief.” Câu đó đủ để Claude hiểu rằng ngắn gọn không có nghĩa là bỏ qua safety checks.
Output styles lưu ở đâu và có share với team được không?
User-level styles lưu tại ~/.claude/output-styles/ trên máy của bạn, không sync với team. Project-level styles lưu tại .claude/output-styles/ trong repo và có thể commit vào git. Nếu cả team muốn dùng chung style code-reviewer, đặt file vào .claude/output-styles/, commit vào repo, mọi người clone về là có ngay mà không cần setup thêm.
Custom output style có bị mất khi update Claude Code không?
Không. File style lưu trên máy của bạn, hoàn toàn độc lập với package Claude Code. Khi bạn cập nhật Claude Code lên phiên bản mới, quá trình update không đụng đến ~/.claude/output-styles/ hay .claude/output-styles/ trong repo. Trường hợp duy nhất cần kiểm tra lại là khi Anthropic thay đổi format frontmatter, giống như đợt migration tháng 11/2025. Khi đó, việc cần làm rất đơn giản: mở file, kiểm tra fields name và description còn đúng format không, điều chỉnh nếu cần, rồi dùng lại bình thường.
Kết Luận
Output styles là tính năng nhỏ nhưng tác động thực tế đến trải nghiệm làm việc hàng ngày với Claude Code. Bạn thay đổi được Persona Switch theo từng loại task mà không cần sửa project rules, không cần restart tool, không cần bất kỳ cấu hình phức tạp nào.
Ba điều nên nhớ sau khi đọc bài này: Explanatory là style tốt nhất khi bạn bắt đầu làm quen với một codebase mới, vì nó giải thích lý do đằng sau mỗi quyết định. Custom style bằng file Markdown chỉ mất khoảng 5 phút để tạo và có thể chia sẻ với cả team qua git. Và quan trọng nhất, Persona Switch (output styles) với Always-On Rules (CLAUDE.md) hoạt động song song, không xung đột, bổ trợ nhau.
Bước đầu tiên đơn giản nhất: thử ngay /output-style explanatory trong session Claude Code tiếp theo của bạn. Dùng thử một ngày với codebase đang làm, xem sự khác biệt. Nếu muốn hiểu sâu hơn về cách thiết kế toàn bộ system prompt để AI agent hoạt động hiệu quả, đọc thêm bài về context engineering và cách các thành phần này kết hợp với nhau trong thực tế.
Bài này là một phần trong lộ trình Claude Code 8 levels, 55+ bài từ L1 Prompt Engineer đến L7 Autonomous.
