SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-27

Agent harness là gì và cách nó vận hành AI agent

Agent harness là chương trình bao quanh LLM để duy trì vòng lặp, quản lý công cụ và trạng thái phiên làm việc. Tìm hiểu sự khác biệt giữa harness, model và framework thực tế.

Agent harness là gì

Agent harness là chương trình chạy bao quanh một language model và biến nó thành một agent. Nó duy trì vòng lặp liên tục gọi model, chứa các định nghĩa công cụ mà model được phép sử dụng, các quy tắc cấp quyền quyết định lệnh gọi nào được thực thi, trạng thái phiên làm việc được lưu giữ giữa các lượt, và thư mục làm việc nơi các tác vụ diễn ra. Bạn có thể thay thế model bên trong harness này.

Câu cuối cùng là điểm quan trọng nhất. Một model đơn lẻ chỉ trả lời câu hỏi rồi quên bạn ngay sau đó. Một harness sẽ hỏi model bước tiếp theo cần làm gì, thực thi lệnh mà model yêu cầu, trả kết quả về cho model, rồi lại tiếp tục hỏi. Sự lặp lại đó chính là ý nghĩa của thuật ngữ "agent". Nếu các thuật ngữ xung quanh vẫn còn mơ hồ, sự khác biệt giữa AI agent, LLM và assistant sẽ giúp bạn làm rõ các khái niệm trước khi chọn công cụ.

Harness không phải là model

Hai khái niệm này thường bị nhầm lẫn vì các nhà cung cấp phát hành chúng dưới cùng một tên thương hiệu.

dsh và DeepSeek là các sản phẩm khác nhau. DeepSeek Harness, được công bố tại github.com/deepseek-ai/deepseek-harness vào ngày 13 tháng 8 năm 2026 theo giấy phép MIT, là một chương trình Node mà bạn cài đặt trên máy. Các model DeepSeek là các trọng số (weights) được phục vụ phía sau một API (application programming interface). Hãy trỏ dsh vào một model từ nhà cung cấp khác và nó vẫn hoạt động, vì harness chỉ cần một thứ gì đó chấp nhận tin nhắn và trả về các lời gọi công cụ (tool calls).

Claude Code và Claude là một cặp tương tự. Claude Code là một harness: một chương trình terminal với vòng lặp, hệ thống phân quyền, cùng các công cụ file và shell. Claude là dòng model mà nó gọi theo mặc định. Codex và Gemini CLI cũng được phân tách theo cách tương tự.

Đây là bài kiểm tra giúp phân biệt rõ ràng mọi lúc. Bạn cài đặt một harness. Bạn gọi một model. Nếu thứ đó có phiên bản trên ổ đĩa của bạn và một file cấu hình trong thư mục home, đó là harness. Nếu nó là một chuỗi ký tự bên trong file cấu hình đó, ví dụ như deepseek-chat, thì đó là model.

Vòng lặp thực sự hoạt động như thế nào

Một vòng lặp của harness diễn ra như sau. Hãy đọc kỹ, vì hầu hết sự khác biệt giữa các harness đều nằm trong năm bước này.

  1. Harness gửi toàn bộ nội dung hội thoại hiện tại, kèm theo danh sách định nghĩa các tool, tới model.
  2. Model trả lời bằng văn bản hoặc yêu cầu gọi một trong các tool đó.
  3. Harness kiểm tra yêu cầu đó dựa trên các quy tắc quyền hạn, sau đó thực thi hoặc dừng lại để hỏi bạn.
  4. Harness chạy tool, thu thập kết quả đầu ra và exit code, đồng thời cắt bớt nếu kết quả quá dài.
  5. Harness thêm kết quả đó vào hội thoại và quay lại bước 1.

Bước 3 là nơi các harness khác biệt nhất trong quá trình sử dụng hàng ngày. Một harness hỏi trước mỗi lệnh thì an toàn nhưng gây mệt mỏi. Một harness không bao giờ hỏi sẽ có lúc chạy một lệnh phá hoại trên đường dẫn mà model xác định sai. Mọi harness nghiêm túc hiện nay đều có thiết lập trung gian: một allowlist các lệnh được chạy không cần hỏi, và prompt cho mọi thứ còn lại.

Bước 1 là nơi chứa đựng những khác biệt còn lại. Harness cũng viết system prompt đi kèm trong mỗi yêu cầu đó, và Claude Code cho phép bạn điều chỉnh trực tiếp, vì một kiểu đầu ra sẽ chỉnh sửa system prompt mà nó gửi đi và từ đó thay đổi mọi phản hồi nhận lại. Hội thoại dài ra sau mỗi lượt và model có một context window cố định, vì vậy harness phải quyết định cái gì cần loại bỏ, cái gì cần tóm tắt, và cái gì cần ghi ra file để đọc lại sau. Quyết định đó là lý do chính khiến hai harness cùng điều khiển một model lại tạo ra chất lượng công việc khác nhau. Nếu năm bước này vẫn còn trừu tượng, cách tốt nhất là tự viết một vòng lặp đơn giản, đó chính xác là những gì một lộ trình từng bước để học về AI agent yêu cầu bạn xây dựng ngay từ đầu.

Hầu hết các harness hiện nay gắn các tool bên ngoài thông qua MCP (model context protocol), một tiêu chuẩn để cung cấp tool cho bất kỳ harness nào hỗ trợ nó, nhờ đó một integration có thể dùng cho nhiều harness. Chạy các MCP server trên VPS đề cập đến khía cạnh này. Tìm kiếm web thường là tool đầu tiên mọi người thêm vào, và trỏ agent vào instance SearXNG của riêng bạn giúp giữ các truy vấn không qua bên thứ ba, đồng thời làm rõ rằng mọi trang mà agent đọc sau đó đều là dữ liệu đầu vào không đáng tin cậy đi vào bên trong vòng lặp.

Agent harness so với agent framework

Câu hỏi này xuất hiện mỗi khi có một harness mới ra mắt, và các câu trả lời thường không thống nhất, một phần vì các nhà cung cấp cũng không đồng nhất với nhau. Dưới đây là cách phân biệt hợp lý nhất.

Framework là một thư viện mà bạn import vào. Bạn tự viết vòng lặp, tự quyết định khi nào gọi model, và tự xử lý kết quả từ các tool. LangChain là ví dụ điển hình: bạn nhận được các khối xây dựng và tự lắp ráp agent bằng code.

Harness là một chương trình mà bạn chạy. Vòng lặp đã được viết sẵn, các tool đã tồn tại, và mô hình phân quyền đã có cấu hình mặc định. Bạn có ngay một agent hoạt động chỉ với lệnh đầu tiên và cấu hình từ đó.

Bài kiểm tra cài đặt thường là yếu tố quyết định. Nếu bạn cài đặt rồi mới viết code, đó là framework. Nếu bạn cài đặt rồi tương tác trực tiếp với nó, đó là harness.

Ranh giới này thực sự gây tranh cãi, và bằng chứng rõ ràng nhất nằm trong chính tài liệu của LangChain. Tính đến tháng 8 năm 2026, tài liệu mô tả Deep Agents là một framework "có quan điểm riêng, đầy đủ tính năng" (opinionated, batteries-included) được xây dựng trên LangGraph, trong khi kho lưu trữ langchain-ai/deepagents lại tự gọi mình là "agent harness đầy đủ tính năng". Cả hai mô tả đều hợp lý. Deep Agents là một Python SDK (software development kit) mà bạn import, nên bài kiểm tra cài đặt xác định nó là thư viện, nhưng nó cung cấp đủ hành vi mặc định để người dùng sử dụng nó như một harness. Microsoft đã phát hành một harness và các hosted agent ra bản general availability vào tháng 8 năm 2026, cho thấy từ này hiện đã trở thành một danh mục sản phẩm thay vì chỉ là thuật ngữ chuyên môn.

Vì vậy, hãy đặt câu hỏi giúp dự đoán khối lượng công việc của bạn thay thế. Nếu bạn viết vòng lặp, bạn làm chủ vòng lặp đó: các lần thử lại (retries), việc cắt tỉa context, các prompt phân quyền và nhật ký ghi lại những gì đã xảy ra. Nếu vòng lặp được cung cấp sẵn, bạn kế thừa giải pháp của người khác cho tất cả các vấn đề đó, giúp bắt đầu nhanh hơn nhiều nhưng lại khó thay đổi hơn về sau.

Sự khác biệt giữa harness và cửa sổ chat

Cửa sổ chat và harness đều hiển thị kết quả đầu ra của model. Sự khác biệt nằm ở chỗ công việc được thực thi trên máy tính của ai. Trong cửa sổ chat, mọi mã nguồn mà model chạy đều được thực thi bên trong sandbox của nhà cung cấp, trên các file bạn đã tải lên, và nó sẽ biến mất khi phiên làm việc kết thúc. Một harness chạy các công cụ trên chính máy tính mà bạn khởi chạy nó, với quyền của người dùng đã khởi chạy nó, tác động trực tiếp lên các file thực tế của bạn, và sử dụng các thông tin xác thực thực tế của bạn trong môi trường đó.

Đó là toàn bộ lợi ích và toàn bộ rủi ro chỉ trong hai câu. Agent cuối cùng cũng có thể thực hiện công việc. Agent cũng có thể xóa sạch công việc đó.

Các harness mà người dùng đang thực sự chạy

Danh sách này được cố tình ghi ngày 19 tháng 8 năm 2026. Danh mục này thay đổi hàng tuần và mọi bản tổng hợp đều nhanh chóng lỗi thời.

  • Claude Code và Codex là các harness của nhà cung cấp. Ưu tiên giao diện terminal, mặc định gắn liền với các model của chính nhà cung cấp đó, với cơ chế xử lý quyền hạn được trau chuốt nhất. So sánh Claude Code, Cursor, Codex và Copilot sẽ phân tích kỹ về chúng.
  • DeepSeek Harness (dsh) sử dụng giấy phép MIT và được xây dựng dựa trên một ý tưởng: mọi thứ đều là plugin, vì vậy model, công cụ, phiên làm việc, sandbox và giao diện người dùng đều là các thành phần có thể thay thế. Mỗi plugin bạn cài đặt đều chạy với quyền hạn riêng của agent, vì vậy kiểm tra quyền truy cập của plugin dsh trước khi thêm quan trọng hơn ở đây so với các harness có bộ công cụ cố định. Nó đạt khoảng 166,800 sao trên GitHub vào ngày 19 tháng 8 năm 2026, sáu ngày sau khi được công bố.
  • Hermes, từ Nous Research, là một agent tự hành tổng quát thay vì là một công cụ lập trình. Nó được phát hành theo giấy phép MIT vào tháng 2 năm 2026 và lưu trữ bộ nhớ cũng như kỹ năng trong một cơ sở dữ liệu SQLite cục bộ trên máy của bạn. Tự host Hermes trên VPS sẽ hướng dẫn chi tiết.
  • Omnigent là một meta-harness: nó điều khiển các harness khác, bao gồm Claude Code và Codex, đằng sau một API duy nhất với các phiên làm việc chia sẻ, giới hạn chi tiêu và sandbox ở cấp độ hệ điều hành. Omnigent dưới dạng harness đa agent bao quát những lợi ích mà nó mang lại.
  • OneCLI là một harness chạy trong sandbox hướng tới các nhóm, được xây dựng xung quanh một gateway có khả năng chèn thông tin xác thực thực vào các yêu cầu gửi đi để bản thân agent chỉ nhìn thấy các khóa giữ chỗ.

Ba trong số các công cụ trên thường xuyên xuất hiện trong cùng một danh sách rút gọn, vì vậy bạn nên đọc So sánh DeepSeek Harness, Claude Code và Omnigent về khả năng kết hợp model, giấy phép, độ hoàn thiện và yêu cầu tài nguyên khi chạy trên máy chủ.

Lệnh khởi động nhanh dsh chỉ là một dòng lệnh duy nhất, và chạy nó một lần là cách nhanh nhất để hiểu harness là gì. Nó yêu cầu Node.js trên máy.

npx @deepseek-ai/dsh web

Lệnh đó khởi động web UI (giao diện người dùng) tại http://127.0.0.1:3080. Hãy đọc README trước khi sử dụng, vì dsh tự mô tả là bản developer preview và nêu rõ rằng sẽ có những thay đổi làm hỏng tính tương thích. Nếu lệnh đầu tiên đó thất bại ngay lập tức hoặc tải về một bản build không như mong đợi, ghim một phiên bản dsh cụ thể và xóa cache npx thường là cách giúp bạn tiếp tục công việc. Chạy DeepSeek Harness trên VPS bao quát việc cài đặt trên máy chủ, và tại sao địa chỉ đó bắt đầu bằng 127.0.0.1 giải thích về mặc định loopback.

Router nằm phía trên harness

Một model router đóng vai trò là proxy cục bộ giữa harness và API của nhà cung cấp. Claude Code Router là ví dụ phổ biến: nó mặc định bind vào 127.0.0.1:3456, tiếp nhận các request mà Claude Code lẽ ra sẽ gửi trực tiếp đến nhà cung cấp, rồi chuyển tiếp chúng đến provider mà bạn đã cấu hình. Harness không hề biết có sự thay đổi nào.

Router tồn tại vì model có thể thay thế được, do đó chúng là minh chứng rõ ràng cho luận điểm chính của bài viết này. Chúng cũng tập trung rủi ro, vì proxy nhìn thấy mọi prompt và nắm giữ mọi key của nhà cung cấp. Hãy coi nó là hạ tầng, không phải là một tiện ích. Nơi harness lưu trữ API key và cài đặt model cũng là vấn đề tương tự ở một tầng thấp hơn.

Những thay đổi khi chạy harness trên VPS

Có bốn yếu tố thay đổi khi bạn chuyển harness từ laptop cá nhân lên một máy chủ thuê ngoài.

Nó vẫn tiếp tục chạy khi bạn đóng máy. Một tác vụ dài hơi sẽ không bị gián đoạn bởi việc bạn di chuyển hay hết pin. Hãy khởi chạy nó bên trong tmux và detach khỏi phiên làm việc:

tmux new -s agent
# start the harness, then press Ctrl-b and then d to detach
tmux attach -t agent

Đối với bất kỳ tiến trình nào cần tự khởi động lại sau khi reboot, một user service sẽ hiệu quả hơn phiên terminal thông thường:

loginctl enable-linger $USER
systemctl --user status my-agent.service

loginctl enable-linger là phần mà nhiều người thường bỏ qua. Nếu thiếu nó, systemd sẽ dừng các service của user ngay khi phiên SSH (secure shell) cuối cùng của bạn đóng lại, khiến agent bị tắt khi bạn logout mà không có thông báo lỗi nào. Chạy dsh ở chế độ headless bằng systemd có chứa file unit mẫu. Khi đã có một phiên chạy trên server, việc mở thêm phiên thứ hai không tốn thêm tài nguyên, và hai phiên Claude Code trên cùng một máy có thể nhắn tin cho nhau, cho phép phiên bạn khởi chạy từ sáng có thể bàn giao công việc cho phiên kia mà bạn không cần phải thao tác thủ công.

Nó lưu trữ các key của bạn. Provider key giờ đây nằm trong một file cấu hình trên server đó. Hãy kiểm tra xem ai có quyền đọc file này:

ls -l ~/.config

Bất kỳ tiến trình nào chạy dưới quyền user của bạn đều có thể đọc file đó, bao gồm cả agent và bất cứ thứ gì mà agent chọn để thực thi.

Nó có thể kết nối tới các máy khác của bạn. Một VPS nằm cùng mạng nội bộ với các máy khác sẽ cung cấp cho agent đường truyền để kết nối tới chúng. Đây chính là mục đích sử dụng, nhưng cũng đồng thời là phạm vi ảnh hưởng nếu xảy ra sự cố (blast radius).

Nó có thể truy cập được từ bất cứ đâu. Hầu hết các harness đều cung cấp giao diện web UI, và đa số đều bind nó vào loopback vì lý do bảo mật. Hãy kiểm tra cấu hình của bạn:

ss -tlnp | grep 3080

127.0.0.1:3080 nghĩa là chỉ bản thân server mới có thể kết nối. 0.0.0.0:3080 nghĩa là bất kỳ ai tìm thấy địa chỉ IP đều có thể truy cập. Hãy truy cập UI qua loopback bằng SSH tunnel thay vì thay đổi địa chỉ bind:

ssh -N -L 3080:127.0.0.1:3080 you@your-server

Sau đó mở http://127.0.0.1:3080 trên trình duyệt ở laptop của bạn. Lưu lượng truy cập sẽ đi qua phiên SSH, vì vậy không có cổng mới nào bị lộ ra ngoài Internet.

Mỗi yếu tố đó cũng chính là lập luận về bảo mật

Hãy đọc lại bốn đặc tính trên dưới góc nhìn của một kẻ tấn công.

Nó chạy tự động không cần giám sát, nên không ai phát hiện được thời điểm model đọc sai đường dẫn. Nó giữ các key của bạn, nên chỉ cần một file cấu hình bị lộ là toàn bộ tài khoản nhà cung cấp của bạn sẽ bị chiếm. Nó có thể truy cập các máy khác của bạn, nên một cuộc tấn công prompt injection — tức là các chỉ dẫn ẩn trong trang web hoặc file mà agent đọc — giờ đây đã có đường dẫn đến máy chủ database của bạn. Nó có thể truy cập từ bất cứ đâu, nên một web UI bind vào 0.0.0.0 mà không có mật khẩu chính là một shell mở ra internet công cộng.

Cách khắc phục cho từng trường hợp đều rất đơn giản và luôn giống nhau. Hãy cấp cho agent một tài khoản người dùng không đặc quyền thay vì dùng tài khoản của bạn:

sudo adduser --disabled-password --gecos "" agent

Hãy giữ web UI ở loopback và truy cập qua SSH. Cấp cho agent những quyền hạn tối thiểu nhất đủ để nó hoàn thành công việc, nội dung này đã được trình bày chi tiết tại giữ bí mật không để lộ cho AI agent. Đối với bất kỳ thứ gì chạy khi bạn không giám sát, một máy dùng một lần (throwaway machine) luôn tốt hơn một máy được cấu hình cẩn thận: chạy coding agent trong VM dùng một lần và chạy Claude Code an toàn trên VPS đều đi theo hướng đó.

Bạn có cần một agent harness không?

Nếu công việc của bạn chỉ là từng câu hỏi một, một cửa sổ chat là đủ, và một harness chỉ thêm vào một vòng lặp mà bạn phải giám sát. Một harness bắt đầu phát huy giá trị khi một tác vụ cần thực hiện nhiều bước trên các file thực tế, hoặc khi nó phải tiếp tục chạy trong lúc bạn đang ngủ.

Hầu hết các công cụ trong danh mục này còn khá mới. dsh ghi rõ là developer preview trong chính file README của nó tính đến tháng 8 năm 2026, và các công cụ còn lại đang thay đổi nhanh đến mức file cấu hình bạn viết hôm nay có thể cần chỉnh sửa vào tháng sau. Đó là lý do bạn nên giữ thiết lập của mình ở quy mô nhỏ, có thể tái lập và ghi lại những gì bạn đã thay đổi. Sự tiết chế tương tự cũng hữu ích bên trong vòng lặp, nơi một kỹ năng thúc đẩy agent hướng tới thay đổi nhỏ nhất có thể hoạt động để lại cho bạn một bản diff mà bạn thực sự có thể đọc được sau khi quá trình chạy tự động kết thúc. Hãy bắt đầu với một harness trên một server, giao cho nó một công việc và một key với quyền hạn hạn chế, và chỉ mở rộng quyền truy cập sau khi công việc đầu tiên đó đã trở nên nhàm chán trong một tuần. Các agent tự host đáng chạy hiện nay là một nơi hợp lý để chọn công cụ đầu tiên.

FAQ

Agent harness là gì nếu giải thích đơn giản?

Đó là chương trình bao quanh model. Model tạo ra văn bản và các yêu cầu sử dụng công cụ. Harness chạy vòng lặp để liên tục đặt câu hỏi, thực thi các công cụ mà model yêu cầu, thực thi các quy tắc về việc công cụ nào được phép chạy mà không cần xin quyền, đồng thời duy trì trạng thái phiên làm việc và các file giữa các lượt phản hồi. Bạn có thể thay thế model mà harness vẫn hoạt động; đây là dấu hiệu rõ ràng nhất cho thấy hai thành phần này tách biệt.

Claude Code là model hay là harness?

Claude Code là một harness. Nó là một chương trình terminal có vòng lặp, hệ thống cấp quyền và các công cụ file và shell tích hợp sẵn. Claude là dòng model mà nó gọi theo mặc định. Sự phân chia tương tự cũng áp dụng cho DeepSeek Harness (dsh), một chương trình Node mà bạn cài đặt, và các model DeepSeek được phục vụ qua API. Bạn cài đặt harness trên máy tính. Bạn gọi model qua mạng.

Sự khác biệt giữa agent harness và agent framework là gì?

Framework là một thư viện mà bạn import và viết code dựa trên đó, vì vậy bạn tự quản lý vòng lặp, cơ chế thử lại và xử lý context. Harness là một chương trình bạn chạy, vì vậy tất cả các thành phần đó đã được đóng gói sẵn với các thiết lập mặc định mà bạn chỉ cần cấu hình thay vì phải viết code. Trong thực tế, ranh giới này khá mờ nhạt: Deep Agents của LangChain là một SDK có thể import được, nhưng chính repository của nó lại gọi đó là một agent harness "tất cả trong một" (batteries-included), tính đến tháng 8 năm 2026. Hãy tự hỏi liệu bạn có phải tự viết vòng lặp hay không. Câu trả lời đó sẽ quyết định thuật ngữ nào phù hợp với trường hợp của bạn.

Tôi có cần VPS để chạy agent harness không?

Không. Mọi harness được nêu ở đây đều chạy được trên laptop. Một máy chủ sẽ thay đổi bốn yếu tố: agent vẫn tiếp tục chạy khi bạn gập máy, nó lưu giữ các key của bạn trên một máy luôn bật, nó có thể truy cập các máy chủ khác của bạn và bạn có thể quay lại cùng một phiên làm việc từ bất kỳ thiết bị nào. Mỗi yếu tố trên đều là một cân nhắc về bảo mật, vì vậy hãy cấp cho agent một tài khoản người dùng riêng và giữ mọi web UI bind vào 127.0.0.1.

Tôi có thể sử dụng model khác bên trong cùng một harness không?

Thường là có, và đó là đặc tính định nghĩa của một harness. Hầu hết các harness đều cho phép nhập tên model và base URL trong file cấu hình, vì vậy việc trỏ nó sang một nhà cung cấp khác chỉ là thao tác chỉnh sửa thay vì viết lại. Ở những nơi mà harness không hỗ trợ, một local router như Claude Code Router sẽ nằm giữa harness và nhà cung cấp để chuyển đổi các yêu cầu, mặc định bind vào 127.0.0.1:3456. Hãy cẩn thận với proxy đó, vì nó nhìn thấy mọi prompt và nắm giữ mọi key.