← Tất cả bài viết
Vibe CodingAI AgentHarnessAgentic Engineering

AI viết 90% code mà dự án vẫn vỡ? Vì bạn thiếu Harness — bộ khung của Vibe Coding nghiêm túc

Vibe code thì ai cũng làm được vài buổi. Nhưng để cái bạn dựng không vỡ khi đụng tiền thật, khách thật — bạn cần Harness: bộ khung quanh AI. Bài này dành cho người đã vibe code cơ bản, muốn lên trình 'agentic engineering' — kèm 6 mảnh bộ khung và cách dựng từng cái trên Claude Code.

Bởi Mai Xuân Đạt 15 phút đọc

Harness cho Vibe Coding — Model 10%, Harness 90%

Ai vibe code vài buổi cũng có một khoảnh khắc giống nhau: mô tả một câu, AI dựng xong cả app, mở lên chạy được, sướng phát điên.

Rồi tới khoảnh khắc thứ hai — thường đến muộn hơn, đau hơn: bạn đem cái đó vào việc thật. Nó nhận đơn hàng thật, tính tiền thật, có khách thật bấm vào. Và một ngày nó làm sai một thứ mà nhìn bên ngoài vẫn trông như đang chạy ngon. Tiền tính lệch. Một email gửi nhầm cho cả danh sách. Một bảng dữ liệu bị ghi đè không lấy lại được.

Lúc đó nhiều người kết luận: “Vibe code chỉ để nghịch thôi, làm thật không được.”

Sai. Vibe code làm thật được — nhưng với điều kiện bạn thêm vào một thứ mà giai đoạn nghịch-cho-vui không có: harness.


AI chỉ là 10%. Harness là 90%.

Có một con số làm nhiều người ngạc nhiên: bản thân model AI (cái “bộ não” như Claude bạn đang gọi) chỉ đóng góp khoảng 10% sức mạnh của một trợ lý lập trình thật sự. 90% còn lại nằm ở bộ khung bao quanh nó — gọi là harness.

Ẩn dụ dễ hình dung: model là động cơ thô. Một động cơ trần, dù mạnh cỡ nào, đặt giữa sân cũng chẳng đi đâu được. Nó cần hộp số, vô lăng, phanh, khung gầm, cảm biến. Cùng một động cơ — lắp vào khung tốt thành xe đua, lắp vào khung tệ thì không nhúc nhích.

Bằng chứng rõ nhất: nhiều đội thi đấu đã đưa “trợ lý lập trình” của họ từ ngoài top 30 lên thẳng top 5 bảng xếp hạng — mà không đổi model AI nào cả. Họ chỉ nâng cấp cái harness quanh nó.

Bài học cho bạn: lần sau AI code sai, đừng vội đổ “model dở, chắc phải đợi bản xịn hơn”. Phần lớn là harness của bạn còn yếu. Và tin tốt: harness là thứ bạn dựng được, ngay hôm nay, không cần đợi ai.

Vibe coding là bạn xài model với harness gần như bằng 0. Agentic engineering là bạn xài đúng model đó, nhưng bọc nó trong một harness tử tế. Khác biệt không nằm ở AI — nằm ở cái khung.


Vibe coding hay Agentic engineering? Một câu hỏi quyết định

Trước khi đi vào bộ khung, phải phân biệt hai chế độ làm việc — vì chúng cần mức harness khác nhau.

  • Vibe coding: bạn mô tả, AI làm, sai thì bảo “sửa đi”, cứ thế thử tới khi chạy. Cực nhanh để bắt đầu, nhưng hỗn loạn. Kiểm tra kiểu “nhìn thấy chạy là được”.
  • Agentic engineering: AI vẫn làm phần lớn, nhưng trong khuôn khổ chặt — có đặc tả rõ, có bài kiểm thử tự động, có cổng kiểm tra trước khi ra sản phẩm thật. Kiểm tra kiểu “có bằng chứng nó thật sự đúng”.

Khác biệt cốt lõi không phải “có dùng AI hay không” — cả hai đều dùng. Khác ở cách bạn kiểm kết quả.

Ẩn dụ nhà bếp: vibe coding là tiệc nướng sân sau — cháy miếng thịt thì cạo đi ăn tiếp, không ai kiện. Agentic engineering là bếp nhà hàng sao Michelin — đo từng gram, kiểm nhiệt độ từng miếng trước khi bưng ra, vì bạn phục vụ khách trả tiền.

Nên trước mỗi việc, hỏi đúng một câu: “Việc này được phép sai không?”

  • Bản nháp, thử ý tưởng, công cụ dùng riêng → vibe coding. Cần nhanh, sai cũng không sao.
  • Dính tiền, dính khách, chạy thật lâu dài → agentic. Sai một lần là mất tiền hoặc mất uy tín.

Harness chính là thứ giúp bạn trượt từ đầu vibe sang đầu agentic khi việc trở nên nghiêm túc — mà không phải đập đi làm lại.


Nhắc nhanh: 6 yếu tố “ngữ cảnh” (nền của mọi thứ)

Trước khi nói về bộ khung kỹ thuật, nhắc lại cái nền: muốn AI làm đúng, phải bàn giao đủ ngữ cảnh — như giao việc cho nhân viên giỏi nhưng chưa biết gì về công ty bạn. Sáu loại: Chỉ dẫn, Kiến thức nền, Trí nhớ, Bài mẫu, Công cụ, Lằn ranh an toàn. Thiếu cái nào, AI lủng đúng chỗ đó — đói thông tin thì nó bịa.

Tôi đã viết kỹ phần này trong bài “AI Agent bịa không phải vì ngu — vì bạn giao thiếu 6 thứ”. Bài đó là nền. Bài này đi tiếp một tầng: khi cái việc bạn giao là tự code ra sản phẩm, ngoài ngữ cảnh, bạn cần thêm một bộ khung kỹ thuật để AI không phá. Đây là 6 mảnh của bộ khung đó.

6 mảnh bộ khung Harness cho Vibe Coding


Mảnh 1 — Đặc tả & Kế hoạch (Spec & Plan)

Icon Đặc tả và Kế hoạch

Vấn đề kinh điển của vibe code: nhảy thẳng vào “code đi” khi trong đầu mình còn chưa rõ muốn gì. AI đoán, đoán sai, bạn sửa, nó sửa kéo theo chỗ khác — vòng xoáy thử-sai đốt token (đơn vị chữ AI đọc/viết, càng nhiều càng tốn tiền) mà sản phẩm vẫn lệch.

Cách làm chuẩn: bắt AI viết đặc tả + kế hoạch trước, code sau. Một đoạn mô tả rõ “phần mềm này làm gì, màn hình nào, luồng nào, ràng buộc gì” + một kế hoạch chia nhỏ task theo thứ tự. Bạn đọc duyệt cái đó (nhanh) trước khi nó gõ dòng đầu tiên.

Trên Claude Code: dùng quy trình /srs (làm rõ yêu cầu) → /plan (chặt nhỏ task). Bắt Claude trình kế hoạch xin bạn duyệt (Plan Mode) trước khi thực thi. Một câu thần chú đáng dán màn hình: “Đừng code vội. Viết kế hoạch cho tôi duyệt trước đã.”

Mẹo “biến yêu cầu thành tiêu chí đo được”: đừng nói “làm cho nhanh” — nói “trang phải tải dưới 2.5 giây trên mạng 4G”. AI không đo được “nhanh”, nhưng đo được “2.5 giây”.


Mảnh 2 — Bản sao an toàn (Sandbox / Worktree)

Icon Bản sao an toàn

Nỗi sợ lớn nhất khi để AI tự code: nó sửa nhầm vào bản đang chạy thật, hoặc xóa nhầm dữ liệu khách. Tốc độ của AI là con dao hai lưỡi — nó làm sai cũng nhanh y như làm đúng.

Cách làm chuẩn: cho AI một sân chơi tách biệt để thử, chỉ khi chắc đúng mới gộp vào bản chính. Trong giới code gọi là sandbox; với Git thì là worktree — một bản sao của dự án nằm riêng, AI quậy thoải mái, hỏng thì vứt cả bản sao, bản thật không hề hấn.

Trên Claude Code: giao việc lớn cho sub-agent chạy trong isolation: "worktree" — nó làm trong bản sao, xong bạn diff (so sánh khác biệt) rồi mới merge. Vùng nhạy cảm (thanh toán, dữ liệu, đăng nhập) thì luôn qua bản sao, không bao giờ sửa thẳng.

Đời thường: như thử công thức mới trên một nồi nhỏ riêng, ngon mới đổ vào nồi lẩu đang bán — chứ không nêm đại vào nồi khách đang ăn.


Mảnh 3 — Trợ lý con (Sub-agent / Orchestration)

Icon Trợ lý con

Khi việc lớn lên, nhồi tất cả vào một cuộc trò chuyện duy nhất khiến AI mất tập trung — nó quên đầu nhớ đuôi, lạc hướng (dân trong nghề gọi là context rot: ngữ cảnh bị “mục” vì quá tải).

Cách làm chuẩn: vai của bạn đổi từ thợ sang quản đốc. Chia việc lớn thành nhiều việc nhỏ, giao cho các trợ lý con (sub-agent) chuyên biệt — mỗi đứa lo một mảng, giữ cho “đầu việc chính” của bạn gọn gàng.

Trên Claude Code: gọi sub-agent qua công cụ Task — planner để lập kế hoạch, researcher để tra cứu, code-reviewer để soi lỗi, tester để chạy kiểm thử. Bạn ngồi ghế nhạc trưởng (Conductor — chỉ huy sát từng bước khi việc khó) hoặc đạo diễn (Orchestrator — giao mục tiêu rồi đi làm việc khác, lát quay lại duyệt).

Quản đốc giỏi không tự siết từng con ốc — họ thiết kế dây chuyền và canh chất lượng đầu ra.


Mảnh 4 — Chốt chặn (Hook / Guardrail)

Icon Chốt chặn

Đây là mảnh tách rõ nhất giữa “nghịch” và “làm thật”. Bạn có thể dặn AI “đừng xóa dữ liệu thật, đừng đẩy mật khẩu lên mạng” — nhưng dặn là lời nói mềm, AI có thể quên khi ngữ cảnh đầy.

Cách làm chuẩn: đặt chốt chặn cứng (hook) — đoạn kiểm tra tự động chặn hành động nguy hiểm bằng máy, trước khi nó kịp xảy ra. Khác lời dặn ở chỗ: hook không trông chờ AI “nhớ mà tránh”, nó chặn thẳng tay.

Trên Claude Code: hook nằm trong .claude/settings.json, chạy trước mỗi thao tác. Ví dụ thật đáng có: chặn xóa cơ sở dữ liệu thật, chặn git push thẳng lên nhánh chính khi chưa qua quy trình, chặn đẩy file chứa mật khẩu, bắt buộc dùng bản sao an toàn khi đụng vùng nhạy cảm.

Một sự thật vui: chính cái hook tôi tự lắp đã chặn tôi đẩy bài blog này lên web vài lần — buộc tôi xác nhận đúng quy trình. Khó chịu một chút, nhưng đó đúng là việc của nó: ngăn cả chủ nhà làm bừa. Guardrail tốt là guardrail dám cãi cả bạn.


Mảnh 5 — Kiểm chứng (Test & CI)

Icon Kiểm chứng

Lỗi AI thời nay nguy hiểm hơn xưa. Trước, AI sai kiểu lộ liễu (máy báo đỏ). Giờ AI sai kiểu “nhìn thì đúng nhưng ngầm sai”: code chạy mượt nhưng âm thầm bỏ qua một bước kiểm tra, tính lệch một công thức, sót một trường hợp hiếm. Loại này nguy vì nó trông có vẻ ổn.

“Nhìn thấy chạy là được” — đó là tiêu chuẩn của vibe coding nghịch chơi. Lên làm thật, bạn cần bằng chứng: bài kiểm thử tự động (test) chứng minh từng phần làm đúng, và cổng kiểm tra (CI) tự chạy lại toàn bộ test mỗi lần thay đổi — đỏ thì chặn, không cho lên sản phẩm.

Trên Claude Code: bắt AI viết test cho logic quan trọng (đặc biệt chỗ tính tiền, xử lý dữ liệu), dùng /test để chạy. Dựng CI (ví dụ GitHub Actions) làm cổng: push code → tự chạy test → đỏ thì chặn đăng + báo bạn. Đừng bao giờ nhận code vùng tiền chỉ vì “tôi bấm thử thấy chạy”.

Kiểm cả cách AI làm, không chỉ kết quả cuối — vì cái “trông ổn” mới là cái giết bạn.


Mảnh 6 — Giám sát (Observability)

Icon Giám sát

Khi AI tự chạy nền làm việc dài, bạn cần biết nó đang làm tốt hay đang đi lạc — lao vào vòng sửa-tới-sửa-lui vô ích (gọi là agent drift), đốt token mà không tiến.

Cách làm chuẩn: có nhật ký (log) việc AI làm + theo dõi chi phí token. Quan trọng hơn với sản phẩm thật: giám sát cả lúc nó đang sống — không chỉ “web còn chạy không”, mà “web có đang trả lỗi cho khách không” (nhiều khi trang vẫn mở được nhưng 30% khách bấm vào thì lỗi mà bạn không biết).

Trên Claude Code & sản phẩm: xem lại log phiên làm việc, để ý token tiêu bất thường (dấu hiệu AI đang loay hoay), và với app đã chạy thật thì cắm theo dõi tỷ lệ lỗi — vượt ngưỡng là báo bạn ngay.


Bài toán 80% — và vì sao làm ẩu lại đắt hơn làm chuẩn

Hai sự thật cuối, dành cho con mắt người làm thật:

Bài toán 80%. AI làm nhanh được ~80% của bất cứ việc gì — phần khuôn mẫu, lặp lại. Nhưng 20% cuối — tình huống hiếm, logic riêng của ngành bạn, mấy chỗ tinh tế — cần phán đoán mà AI chưa có. Đừng cố nhanh bằng cách nhắm mắt nhận hết. Hãy nhanh bằng cách: để AI lo 80% tẻ nhạt, bạn dồn toàn lực vào 20% quan trọng. Harness chính là thứ giải phóng thời gian của bạn khỏi 80% kia.

Kinh tế token. Vibe code nhìn thì rẻ (bắt đầu gần như miễn phí), nhưng giấu chi phí ngầm. Vibe ẩu giống quẹt thẻ tín dụng lãi cao: sướng tức thì, rồi trả lãi liên tục — AI thử-sai đốt token, code lộn xộn sinh “thuế bảo trì”, lỗ hổng phải vá. Agentic engineering giống khoản vay thế chấp lãi thấp: đầu tư công sức ban đầu (dựng harness, viết test), nhưng mỗi việc sau rẻ hẳn vì AI làm đúng ngay. Khó lúc đầu, bền về sau.

Mẹo cắt chi phí nhanh nhất: đừng lấy model mạnh-nhất-đắt-nhất làm mọi việc, kể cả việc vặt. Việc khó → model mạnh; việc đơn giản → model nhỏ cực rẻ. Như phân luồng giao thông. Một lựa chọn này có thể cắt chi phí theo cấp số nhân mà chất lượng giữ nguyên.


Tóm lại: harness là thứ biến “biết vibe code” thành “làm được sản phẩm thật”

Ai cũng vibe code được vài buổi. Cái tách người làm ra sản phẩm thật khỏi người mãi nghịch đồ chơi không phải là “biết prompt khéo hơn” — mà là có dựng được bộ khung quanh AI hay không:

  1. Đặc tả & Kế hoạch — rõ muốn gì trước khi code
  2. Bản sao an toàn — thử không đụng đồ thật
  3. Trợ lý con — chia việc, giữ đầu óc gọn
  4. Chốt chặn — máy chặn làm bậy
  5. Kiểm chứng — bằng chứng đúng, không “nhìn chạy là được”
  6. Giám sát — biết khi AI đi lạc

Model chỉ là 10%. Sáu mảnh này là 90%. Và cả 6 đều là thứ bạn dựng — không phải thứ bạn mua.


👉 Muốn vào sâu, làm tay từng mảnh?

Bài này là bản đồ tổng. Phần thực hành chi tiết — dựng từng mảnh harness ngay trên Claude Code, tự tay làm một sản phẩm chạy thật từ ý tưởng tới đường link — nằm trong khóa Agent Boss: dạy bạn quản trị AI như quản một đội ngũ, để cái bạn dựng không vỡ khi đụng việc thật.

🚀 Tìm hiểu khóa Agent Boss → agentboss.vn

Vibe code cho vui thì ai cũng làm được. Làm cho thật — cần harness.