2026-03-146 phút đọcVI
Claude Code là gì — và tại sao cần "agent harness"
English title: What Is Claude Code — and Why You Need an Agent Harness
Bài 1 trong chuỗi 20 bài về Claude Code. Bạn đã quen "chat với AI" để viết code — nhưng khi làm sản phẩm thật, mỗi lần mở session lại phải nhắc "dùng TypeScript strict", "commit theo format", "chạy test trước khi push". Claude Code là môi trường tương tác với Claude (chat, gọi tool, chạy nhiều bước); agent harness là cách bạn biến nó thành một hệ thống có quy ước, context tái dùng và tự động hóa. Bài này giúp bạn hiểu rõ sự khác biệt và tại sao harness lại quan trọng.
Mở đầu: Từ chat rời rạc đến workflow có quy ước
Một dev mỗi sáng mở Claude, hỏi "thêm tính năng login". Lần một: Claude viết code không có test. Lần hai: nhắc "viết test trước" — Claude làm. Lần ba: quên nhắc, lại nhận code không test. Đến khi làm chung team: người A thích camelCase, người B dùng snake_case; agent mỗi lần trả lời theo context khác nhau. Vấn đề không phải Claude "kém" — mà thiếu một lớp quy ước và automation để mọi session đều follow cùng chuẩn. Đó chính là lúc bạn cần nghĩ tới agent harness: không chỉ là "chat với AI", mà là môi trường có rules, skills, commands và (tuỳ nền tảng) hooks, để workflow ổn định và tái sử dụng.
1. Đi sâu: Chat với AI vs môi trường có quy ước
Tại sao chủ đề này quan trọng: Nếu bạn chỉ dùng Claude như một chat window, mỗi lần bạn phải tự nhắc convention, tự chạy test, tự nhớ "lần trước mình làm thế nào". Khi làm product hoặc làm việc theo team, chi phí đó tăng nhanh: inconsistency, bug lặp lại, onboarding tốn thời gian.
Hiểu sai thường gặp: Nhiều người nghĩ "có AI coding = chỉ cần gõ prompt hay là xong". Thực tế, prompt hay chỉ giải quyết một lần; để mọi lần đều đúng quy trình (test trước, format code, không commit secret), bạn cần thứ luôn được áp dụng — tức là quy ước nằm trong hệ thống, không nằm trong đầu bạn.
Bản chất đúng: Claude Code là CLI hoặc môi trường tương tác nơi Claude có thể chat, gọi tool (đọc file, chạy lệnh, sửa code), và thực hiện nhiều bước trong một session. Harness là lớp bạn thêm lên trên: (1) quy ước luôn được áp dụng (rules, coding style, security); (2) context có thể load/save qua session (memory, state); (3) tự động hóa theo sự kiện (hooks: trước/sau khi chạy tool). Chat-only = mỗi lần từ đầu; harness = cùng một "chat" nhưng có khung cố định.
2. Khái niệm
- Claude Code: Môi trường (thường là CLI hoặc tích hợp IDE) để tương tác với Claude: hỏi đáp, ra lệnh, Claude gọi tool (read file, run command, edit file) và thực hiện nhiều bước. Khác với chatbot đơn thuần vì có tool use và multi-step execution.
- Agent harness: Tập quy ước, cấu hình và automation khiến "agent" (Claude trong vai trò coding) hoạt động theo cách có thể lặp lại và kiểm soát được. Gồm:
- Rules: Guidelines luôn được inject vào context (vd. "luôn dùng TypeScript strict", "không commit API key").
- Skills: Workflow định nghĩa sẵn (vd. "khi user nói fix bug thì làm các bước A, B, C").
- Commands: Slash commands để gọi nhanh một quy trình (vd.
/plan "Add auth",/tdd). - Context / memory: Load và save state qua session (session start/end, compaction).
- Hooks (nếu nền tảng hỗ trợ): Tự động chạy logic trước/sau khi tool được gọi (vd. cảnh báo khi chạy lệnh nguy hiểm, format sau khi sửa file).
3. Code / ví dụ cấu trúc
Bạn không cần viết code để "dùng" harness — harness thể hiện qua cấu trúc thư mục và file cấu hình mà Claude Code (hoặc nền tảng tương thích) đọc khi khởi động. Ví dụ một cấu trúc tối giản:
<config-root>/
agents/ # Định nghĩa agent (role, instruction, tool)
commands/ # Slash commands (/plan, /tdd, ...)
skills/ # Workflow (SKILL.md hoặc tương đương)
rules/ # Guidelines luôn áp dụng (common + theo ngôn ngữ)
hooks/ # (Tuỳ nền tảng) PreToolUse, PostToolUse, ...
Khi bạn gõ /plan "Add user login", hệ thống sẽ load command tương ứng, command có thể tham chiếu tới skill "planning" và agent "planner". Toàn bộ chạy trong cùng một session, với rules đã được inject sẵn. Bạn không phải nhắc "nhớ viết test" — rule đã nói rồi.
4. Workflow: Từ chat rời rạc đến harness
- Chỉ chat: Mỗi lần bạn mô tả task, nhắc convention (nếu nhớ), chạy test thủ công. Không có "lần sau tự áp dụng".
- Thêm rules: Bạn cấu hình rules (common + theo ngôn ngữ). Mỗi session, rules được load vào context; Claude mặc định follow. Giảm nhắc lại coding style, security.
- Thêm commands + skills: Bạn định nghĩa command (vd.
/tdd) gắn với skill "TDD workflow". User chỉ cần gõ/tdd "UserService"— cả quy trình (viết test fail → implement → refactor) chạy theo đúng bước. - Thêm context/memory (và tuỳ chọn hooks): Session dài có thể save/load state; hooks tự động format, cảnh báo, hoặc gợi ý compact. Workflow trở thành có thể lặp lại và mở rộng mà không phụ thuộc vào bạn nhớ từng chi tiết.
Quy ước thực hành: bắt đầu với ít (một vài rules + một command hay dùng), sau đó thêm dần skill và hook khi đã quen.
5. Ứng dụng trong AI-centric engineering
Trong công việc dev hàng ngày, harness giúp bạn và team:
- Consistency: Mọi session đều dùng cùng convention (lint, format, test), không phụ thuộc ai "nhắc" hay không.
- Onboarding: Member mới clone config (rules, commands, skills) là có cùng môi trường; không cần đọc tài liệu dài để biết "team mình dùng Claude thế nào".
- Automation: Thay vì mỗi lần tự chạy test/lint sau khi sửa file, hook có thể chạy giúp (nếu nền tảng hỗ trợ); command
/verifychạy cả build + test + lint một lần. - Scale: Khi project lớn, nhiều agent (planner, reviewer, coder) và nhiều skill — harness là nơi bạn quản lý tất cả ở một chỗ, thay vì prompt rời rạc trong từng chat.
Chuỗi 20 bài tiếp theo sẽ đi lần lượt: cài đặt và chạy (bài 2), rồi agents, skills, commands, rules, hooks, token, memory, verification, bảo mật, MCP, và cuối cùng tổng kết. Mỗi bài độc lập về Claude Code; bạn có thể tham khảo thêm tài liệu chính thức và các bộ config mẫu từ cộng đồng để tùy biến harness của mình.
Bài tiếp: Cài đặt và chạy Claude Code lần đầu (bài 2) — 2 phút từ zero đến chạy lệnh.