Dùng Claude Code: Sức mạnh bất ngờ của HTML

Sau vài tháng dùng Claude Code, mình chuyển hẳn sang HTML làm định dạng đầu ra thay cho markdown. Bài lược dịch từ Thariq Shihipar (Claude Code team) về vì sao HTML hợp với agent hơn — kèm các trường hợp dùng cụ thể.

Ghi chú của người dịch: Bài này lược dịch và biên tập từ Using Claude Code: The Unreasonable Effectiveness of HTML của Thariq Shihipar (Claude Code team). Mình giữ ngôi thứ nhất của tác giả và chỉ chỉnh lại tone cho người đọc Việt.
Image

Markdown đang là định dạng mặc định mà các agent dùng để giao tiếp với mình. Nó đơn giản, đâu cũng đọc được, có hỗ trợ chút ít định dạng văn bản, và bạn ngồi sửa tay cũng dễ. Claude thậm chí còn khá giỏi vẽ sơ đồ bằng ký tự ASCII trong file markdown.

Nhưng càng dùng các agent mạnh hơn, mình càng thấy markdown gò bó. File markdown dài hơn 100 dòng là mình đọc không vào. Mình muốn trực quan hơn, có màu, có sơ đồ, và muốn chia sẻ cho người khác cũng dễ.

Mình cũng dần không còn tự sửa mấy file này nữa — chúng dần trở thành bản mô tả, tài liệu tham khảo, hay bản nháp brainstorm. Khi cần sửa, mình bảo Claude sửa hộ — và đến đây thì lợi thế lớn nhất của markdown coi như mất.

Mấy tháng nay mình chuyển hẳn sang HTML làm định dạng đầu ra, và thấy nhiều người trong Claude Code team cũng vậy. Lý do bên dưới.

Nếu muốn xem ví dụ trước, đây là một loạt artifact HTML mình tổng hợp lại — coi xong nhớ quay lại đọc tiếp nhé.

Vì sao là HTML?

Mật độ thông tin

Image

HTML thể hiện được nhiều loại thông tin hơn markdown rất nhiều. Cấu trúc cơ bản như tiêu đề, đoạn văn, định dạng thì không phải bàn — quan trọng là HTML còn diễn đạt được:

  • Bảng dữ liệu bằng <table>
  • Thiết kế bằng CSS
  • Hình minh hoạ bằng SVG
  • Đoạn code bằng <script>
  • Tương tác bằng HTML kết hợp JavaScript và CSS
  • Quy trình bằng SVG ghép HTML
  • Dữ liệu không gian bằng vị trí tuyệt đối và canvas
  • Hình ảnh bằng <img>

Nói thẳng: hầu như mọi loại thông tin Claude đọc được đều thể hiện được khá hiệu quả bằng HTML. Nhờ vậy, model truyền tải thông tin chi tiết cho bạn rất gọn, và bạn cũng dễ rà lại.

Khi không có HTML, model phải xoay sở bằng những cách kém hơn — vẽ sơ đồ bằng ký tự ASCII, hoặc buồn cười nhất là giả lập màu bằng ký tự Unicode như screenshot này từ Claude Code:

Image

Claude Code đang cố thể hiện màu trong markdown.

Dễ đọc hơn

Image

Claude càng làm việc phức tạp thì bản mô tả và kế hoạch nó viết ra càng dài. Thực tế: file markdown dài quá 100 dòng là mình ít khi đọc hết — và kéo đồng nghiệp đọc giúp lại càng khó.

HTML thì dễ đọc hơn nhiều. Claude tổ chức được layout có tab, có hình minh hoạ, có link — mở trong trình duyệt là thấy thoải mái ngay. Chưa kể còn responsive được trên mobile.

Dễ chia sẻ

Markdown khó chia sẻ vì hầu hết trình duyệt không tự render được. Thường phải đính kèm file vào email hoặc tin nhắn.

Với HTML, chỉ cần upload file lên đâu đó (ví dụ S3) là có link để gửi. Đồng nghiệp mở ở đâu cũng được, dễ tham chiếu.

Khả năng người ta thực sự đọc bản mô tả, ghi chú PR hay báo cáo của bạn cao hơn nhiều khi nó là HTML.

Tương tác hai chiều

Image

HTML cho phép bạn tương tác với tài liệu. Ví dụ thêm thanh trượt hoặc nút xoay để chỉnh thiết kế, hay cho bạn thử thay đổi tham số trong thuật toán xem kết quả khác nhau ra sao. Bạn cũng có thể bảo nó thêm một nút copy để dán những thay đổi đó trở lại vào Claude Code. Mình có một bài riêng về cái mình gọi là "playground" với nhiều ví dụ — đọc thêm ở đây .

Đọc được nhiều ngữ cảnh

Vì sao dùng Claude Code để tạo HTML thay vì ClaudeAI hay Claude Design? Lý do lớn nhất là lượng ngữ cảnh Claude Code đọc được. Khi viết bài này, mình bảo Claude Code đọc qua thư mục code của mình, tìm tất cả file HTML mình từng tạo, gom thành nhóm, rồi sinh một file HTML duy nhất chứa sơ đồ đại diện cho từng nhóm. Mấy sơ đồ trong bài này là kết quả trực tiếp của việc đó.

Ngoài file system, Claude Code còn lấy được thêm ngữ cảnh qua MCP (Slack, Linear…), trình duyệt (Claude in Chrome), git history, v.v.

Vui hơn

Làm tài liệu HTML với Claude vui hơn thật. Mình thấy mình tham gia vào việc tạo ra nó nhiều hơn — và chỉ riêng lý do đó cũng đủ rồi.

Bắt đầu thế nào

Mình hơi sợ là sẽ có người đọc bài này xong đi build hẳn một skill /html hay gì đó tương tự. Cái đó có thể có giá trị, nhưng mình muốn nhấn: bạn không cần làm gì nhiều. Cứ bảo Claude "tạo cho mình một file HTML" hoặc "làm artifact HTML" là được.

Phần khó là biết bạn muốn artifact đó làm gì và bạn dùng nó ra sao. Sau này có thể bạn sẽ tự build skill, nhưng giờ cứ prompt trực tiếp để quen tay đã.

Vài trường hợp cụ thể

Cho dễ hình dung, mình đã làm khá nhiều file HTML cho các mục đích khác nhau. Xem hết ở thariqs.github.io/html-effectiveness , còn dưới đây là tóm lược.

Bản mô tả, kế hoạch và khám phá ý tưởng

HTML là một không gian đủ rộng để Claude đào sâu một bài toán. Khi bắt đầu một vấn đề mới, mình không còn viết một plan markdown đơn thuần nữa — mình kỳ vọng tạo ra cả một loạt file HTML liên kết với nhau. Ví dụ: bảo Claude Code tìm ý và phác ra vài hướng đi khác nhau. Sau đó chọn một hướng và bảo nó mở rộng — có thể kèm bản phác thảo giao diện hoặc đoạn code mẫu. Khi thấy ổn, mình bảo nó viết kế hoạch triển khai. Plan ưng ý thì mình mở phiên mới, đưa toàn bộ các file đó vào để Claude triển khai.

Lúc kiểm tra, mình cũng đưa các file đó cho agent kiểm tra đọc — agent có ngữ cảnh đầy đủ hơn nhiều.

Image

Ví dụ prompt:

  • Mình chưa quyết hướng cho màn hình onboarding. Sinh 6 hướng tiếp cận khác hẳn nhau — thay đổi cả layout, giọng và mật độ thông tin — và xếp vào một file HTML dạng grid để mình so song song. Ghi rõ điểm đánh đổi của mỗi hướng.
  • Tạo một kế hoạch triển khai chi tiết trong một file HTML, có bản phác thảo giao diện, có sơ đồ luồng dữ liệu, có đoạn code quan trọng để mình review. Trình bày sao cho dễ đọc, dễ tiêu hoá.

Dùng cho:

  • Khám phá nhiều cách triển khai trong code
  • Khám phá nhiều phương án thiết kế

Code review và đọc hiểu code

Code đọc trong markdown thì khó. Nhưng với HTML, bạn hiển thị được diff, chú thích, sơ đồ luồng, module… Dùng để hiểu code Claude vừa viết, để code review, hoặc để giải thích PR cho người review. Mình thấy cách này thường tốt hơn diff mặc định của GitHub — và giờ mình đính một file HTML giải thích code vào mọi PR mình mở.

Image

Ví dụ prompt:

Giúp mình review PR này bằng cách tạo một artifact HTML mô tả nó. Mình chưa rành phần streaming/backpressure nên tập trung vào đó. Hiển thị diff thật, kèm chú thích bên lề, tô màu các phát hiện theo mức độ nghiêm trọng, và bất cứ thứ gì giúp truyền tải khái niệm rõ hơn.

Dùng cho:

  • Mở một PR
  • Review một PR
  • Hiểu một chủ đề trong code

Thiết kế và mẫu thử

Claude Design dựa trên HTML vì HTML cực mạnh ở mảng thiết kế — kể cả khi sản phẩm cuối không phải HTML. Claude phác thảo thiết kế bằng HTML rồi viết lại bằng React, Swift, hay gì cũng được.

Bạn cũng dựng được mẫu thử cho các tương tác — animation, action… Thử bảo Claude làm thanh trượt, nút xoay để chỉnh đúng cảm giác bạn muốn.

Image

Ví dụ prompt:

Mình muốn dựng thử một nút checkout mới: khi bấm thì chạy animation rồi đổi sang màu tím nhanh. Tạo một file HTML có vài thanh trượt và lựa chọn để mình thử các kiểu animation khác nhau, kèm một nút copy để chép tham số nào ưng nhất.

Dùng cho:

  • Tạo các artifact của design system
  • Tinh chỉnh component
  • Trực quan hoá thư viện component
  • Dựng thử animation cho vui

Báo cáo, nghiên cứu và học

Claude Code rất giỏi tổng hợp thông tin từ nhiều nguồn và biến thành báo cáo dễ đọc. Bạn prompt cho nó tìm trong Slack, codebase, git history, internet… rồi sinh báo cáo cực dễ đọc — cho bạn đọc, cho leadership đọc, cho team đọc.

Có thể đóng gói thành tài liệu HTML dài, một trang giải thích tương tác, hay thậm chí slideshow. Bảo Claude dùng SVG vẽ sơ đồ để trực quan hoá. Ví dụ, cho bài về prompt caching của mình, mình bảo Claude chuẩn bị một file nghiên cứu HTML chi tiết, đọc qua git history và ghi lại tất cả thay đổi liên quan đến prompt caching.

Image

Ví dụ prompt: Mình không hiểu rate limiter của tụi mình thực sự hoạt động ra sao. Đọc code liên quan và sinh một trang HTML giải thích duy nhất: sơ đồ dòng chảy của thuật toán token-bucket, 3-4 đoạn code quan trọng kèm chú thích, và một mục "gotcha" ở cuối. Tối ưu cho người chỉ đọc một lần là hiểu.

Dùng cho:

  • Tóm tắt một tính năng hoạt động ra sao
  • Giải thích một khái niệm
  • Báo cáo trạng thái hằng tuần cho sếp
  • Báo cáo sự cố cho leadership
  • Vẽ minh hoạ SVG, sơ đồ luồng, sơ đồ kỹ thuật

Tự tạo công cụ chỉnh sửa cho một lần dùng

Đôi khi mô tả thứ bạn muốn bằng text rất khó. Lúc đó mình bảo Claude dựng cho một công cụ chỉnh sửa dùng đúng một lần, cho đúng việc mình đang làm. Không phải sản phẩm, không phải tool dùng lại — chỉ một file HTML duy nhất, làm cho đúng một mảnh dữ liệu.

Mẹo: luôn kết thúc bằng một nút export — "copy as JSON" hoặc "copy as prompt" — biến thứ mình vừa làm trong UI thành thứ dán lại được vào Claude Code.

Image

Ví dụ prompt:

  • Mình cần xếp lại độ ưu tiên cho 30 ticket Linear. Tạo một file HTML, mỗi ticket là một thẻ kéo thả được giữa các cột Now / Next / Later / Cut. Sắp xếp sẵn theo phán đoán tốt nhất của Claude. Thêm nút "copy as markdown" để xuất thứ tự cuối cùng kèm một dòng lý do cho mỗi cột.
  • Đây là cấu hình feature flag của tụi mình. Dựng cho mình một editor dạng form, gom flag theo nhóm chức năng, hiển thị các flag phụ thuộc vào nhau, cảnh báo khi mình bật một flag mà điều kiện tiên quyết của nó đang tắt. Thêm nút "copy diff" để chỉ xuất ra những key đã đổi.
  • Đang tinh chỉnh system prompt này. Tạo cho mình một editor song song hai cột: bên trái là prompt sửa được với các vị trí biến được tô sáng, bên phải là ba ví dụ đầu vào, render template đã điền sẵn theo thời gian thực. Thêm bộ đếm ký tự / token và một nút copy.

Dùng cho:

  • Sắp xếp / phân loại / chia nhóm bất cứ thứ gì (ticket, test case, phản hồi)
  • Sửa cấu hình có cấu trúc (feature flag, biến môi trường, JSON / YAML có ràng buộc)
  • Tinh chỉnh prompt, template, copy với xem trước trực tiếp
  • Lọc tập dữ liệu, duyệt / loại từng dòng, gắn nhãn ví dụ, xuất phần đã chọn
  • Chú thích tài liệu / bản ghi / diff rồi xuất ra phần chú thích
  • Chọn các giá trị khó tả bằng text: màu sắc, đường cong easing, vùng cắt ảnh, lịch cron, regex

Câu hỏi thường gặp

Mình có nói chuyện với khá nhiều người về việc đổi sang HTML, và lặp đi lặp lại mấy câu hỏi này.

Vậy có tốn token hơn không? Markdown thường ít token hơn thật, nhưng HTML diễn đạt được nhiều thứ hơn — và xác suất mình thực sự đọc nó cũng cao hơn hẳn. Bù qua sớt lại, kết quả tốt hơn. Với context window 1MM ở Opus 4.7, phần token tăng thêm gần như không đáng kể.

Khi nào vẫn dùng markdown? Mình gần như đã bỏ markdown hoàn toàn cho hầu hết mọi thứ — nhưng mình thuộc dạng HTML maximalist, đừng tin mình hoàn toàn.

Xem file HTML thế nào? Mình mở thẳng trong trình duyệt local (bạn có thể bảo Claude mở luôn), hoặc upload S3 nếu cần link để gửi.

Sinh HTML có lâu hơn markdown không? Có. HTML có thể lâu hơn markdown 2-4 lần — nhưng kết quả xứng đáng.

Còn version control thì sao? Đây thật sự là điểm yếu lớn nhất của HTML — diff HTML rối và khó review hơn markdown rất nhiều.

Làm sao để Claude làm theo gu của mình, không bị xấu? Plugin frontend design giúp Claude làm HTML đỡ xấu. Còn để theo style của công ty bạn, hãy tạo một file HTML design system bằng cách trỏ Claude vào codebase. Sau đó dùng file đó làm tham chiếu cho các file HTML khác.

Giữ mình trong vòng lặp

Tất cả những gì kể trên gói lại thành một thứ: dùng HTML khiến mình cảm thấy mình ở trong vòng lặp với Claude hơn. Mình từng lo rằng vì không còn đọc plan kỹ nữa, mình sẽ phải để Claude tự quyết.

Nhưng giờ thì ngược lại — mình ở trong vòng lặp đó nhiều hơn bao giờ hết khi dùng HTML. Mong là bạn cũng vậy.

---

Bài gốc tiếng Anh: Thariq Shihipar — Using Claude Code: The Unreasonable Effectiveness of HTML.

No comments yet