Chủ đề: Agent harness, plugin architecture và khả năng tùy biến runtime
Đối tượng: Kỹ sư phần mềm, AI engineer, platform engineer và developer đang xây dựng coding agent
| Tóm tắt. DeepSeek Harness (dsh) là một agent harness mã nguồn mở của DeepSeek AI. Điểm nhấn của dự án không chỉ là giao diện cho coding agent, mà là một cách tổ chức runtime: gần như mọi capability của agent — từ model, tool, skill, session, sandbox, storage, loop, scheduling cho đến UI — đều được đóng gói dưới dạng plugin và phối hợp qua hệ thống Cordis. Bài viết giải thích ý nghĩa kỹ thuật của “Everything is a plugin”, các runtime mode, traceability, use case có thể áp dụng, quy trình cài đặt và những khó khăn cần dự trù trong giai đoạn developer preview. |
1. DeepSeek Harness là gì?
Một model ngôn ngữ có thể suy luận và sinh ra hành động, nhưng để làm việc ổn định trong môi trường thật, nó cần một lớp runtime biết cách cung cấp context, gọi tool, truy cập workspace, quản lý trạng thái, điều phối nhiều bước và xử lý quyền. DeepSeek Harness là lớp runtime đó: một agent harness mã nguồn mở do DeepSeek AI phát triển, xây dựng trên nền tảng plugin của Cordis [1] [2].
Trang giới thiệu chính thức cô đọng quan hệ này bằng công thức Agent = Model + Harness. Model là “phần hồn” tạo ra quyết định; harness biến quyết định thành một quy trình có thể tương tác với môi trường, dùng công cụ và tiếp tục làm việc trong nhiều vòng [2]. Nói cách khác, dsh không cố biến model thành một sản phẩm đóng kín. Nó cung cấp một “bộ khung” để model hoạt động như một agent có trạng thái, có công cụ và có khả năng kiểm tra lại tiến trình.
| Thành phần | Vai trò trong một agent | Câu hỏi kỹ thuật cần trả lời |
| Model | Suy luận, lập kế hoạch và chọn hành động | Model nào? Endpoint nào? Có cần đổi model theo tác vụ không? |
| Harness | Cấp môi trường, tool, session, loop và chính sách thực thi | Agent được phép đọc/ghi gì? Có thể chạy lệnh nào? |
| Plugin | Đóng gói một capability có vòng đời, dependency và cấu hình | Capability này có thể thay thế hoặc gỡ mà không sửa lõi không? |
| Cordis | Kernel quản lý việc mount/unmount plugin, service và dependency | Plugin nào phải được nạp trước? Khi gỡ plugin, tài nguyên được dọn thế nào? |
DeepSeek Harness hiện được công bố ở trạng thái developer preview, vì vậy API và plugin lõi có thể tiếp tục thay đổi, thậm chí có các thay đổi phá vỡ tương thích [1] [2]. Đây là điểm quan trọng khi đánh giá dsh: phù hợp để học, thử nghiệm, xây prototype và nghiên cứu agent infrastructure; với production, cần pin phiên bản và tự xây quy trình kiểm thử hồi quy.

Hình 1. Lifecycle khái quát của một plugin trong DeepSeek Harness.
Sơ đồ do Manus AI dựng từ tài liệu plugin chính thức [3].
2. “Everything is a plugin” nghĩa là gì?
“Everything is a plugin” không chỉ có nghĩa là dsh cho phép cài thêm plugin. Ý tưởng sâu hơn là capability không bị đóng cứng vào một monolith. Trang chính thức liệt kê các capability có thể được hoán đổi hoặc tái tổ hợp gồm model, tools, skills, sessions, sandboxes, storage, loops, scheduling và UI [2]. Mỗi capability được xem như một mô-đun có thể được nạp, cấu hình, thay thế hoặc mở rộng thông qua composition.
2.1. Plugin là đơn vị mở rộng, không phải một đoạn code “chèn tạm”
Theo tài liệu phát triển, một plugin cơ bản là một module TypeScript export hàm apply. Cordis gọi hàm này khi plugin được nạp và truyền vào một đối tượng context ctx; plugin dùng context đó để đăng ký capability [3]. Một plugin tối thiểu có thể trông như sau:
| import type { Context } from ‘@deepseek-ai/cordis’
export const name = ‘hello-plugin’ export function apply(ctx: Context) { |
Mẫu trên cho thấy ranh giới của plugin khá rõ: module khai báo danh tính, nhận context và đăng ký hành vi/capability. Plugin không cần sửa vào source của DeepSeek Harness. Khi muốn tiêu thụ một service khác, plugin khai báo dependency qua inject; framework sẽ chờ các service bắt buộc sẵn sàng trước khi gọi apply [3].
| import type { Context } from ‘@deepseek-ai/cordis’
export const name = ‘my-tool-plugin’ export function apply(ctx: Context) { |
Cách làm này tạo ra một contract đơn giản nhưng có giá trị: plugin nói rõ nó cung cấp gì, nó cần gì và nó được khởi tạo ở đâu. Khi hệ thống lớn lên, contract này giúp giảm phụ thuộc ngầm giữa các capability.
2.2. Vòng đời và dọn dẹp tài nguyên là một phần của kiến trúc
Một hệ thống plugin thực tế không chỉ quan tâm đến lúc load. Nó còn phải xử lý unload, hot reload, lỗi khởi tạo và tài nguyên sống lâu như timer, listener hoặc network connection. Tài liệu Cordis cho biết các tài nguyên đăng ký qua ctx, chẳng hạn event listener, tool và timer, được tự động cleanup khi plugin unload; với tài nguyên cần dọn thủ công, plugin có thể dùng ctx.effect() và trả về một disposer [3].
Điểm này biến “plugin” thành một đơn vị lifecycle có thể quản lý được. Nếu chỉ nối các module bằng import/export, việc gỡ một capability thường dễ để lại listener hoặc timer chạy ngầm. Với lifecycle rõ ràng, việc thử nghiệm nhiều cấu hình runtime an toàn hơn và việc phát hiện rò rỉ tài nguyên cũng có điểm kiểm tra cụ thể hơn.
2.3. Configuration thay cho fork source code
Dsh cho phép chọn, thay thế hoặc mở rộng capability bằng configuration mà không cần sửa source DeepSeek Harness [2]. Trong tutorial plugin, một local plugin được đưa vào Web UI bằng overlay cordis.yml và chạy với cờ –patch [3]:
| – insert: – id: hello name: ‘/absolute/path/to/deepseek-harness/scratch-plugin/src/my-plugin.ts’ |
| pnpm dsh web –patch ./scratch-plugin/cordis.yml |
Đây là cách tiếp cận gần với dependency injection và profile composition hơn là “copy một file vào thư mục plugins”. Một profile có thể chọn model adapter A, toolset B, storage C và UI D; profile khác có thể giữ nguyên lõi nhưng thay sandbox hoặc loop. Vì cấu hình là một phần của runtime, nó nên được version-control, review và test như source code.
| Diễn giải ngắn: “Everything is a plugin” = capability được chuẩn hóa thành mô-đun có dependency, lifecycle và configuration; Cordis là kernel điều phối các mô-đun đó thành một runtime agent. |

Hình 2. Agent runtime được composition từ Cordis kernel và các capability plugin.
Sơ đồ do Manus AI dựng từ mô tả kiến trúc chính thức [2].
3. Cordis đứng ở đâu trong kiến trúc?
Cordis là kernel quản lý việc mount, unmount và dependency của plugin. Các service và event của Cordis cho phép những plugin độc lập phối hợp với nhau [2]. Có thể hình dung kiến trúc theo ba lớp: model tạo quyết định; harness runtime cung cấp context và orchestration; plugin cung cấp các capability cụ thể.
Hình 2 ở phần minh họa trực quan mô tả luồng này. User gửi task vào Web UI. Runtime khởi tạo session, chọn model nguyen.dovanvà mount các plugin cần thiết. Tool, skill, sandbox, storage, loop và scheduler không phải những “khối cứng” nằm sâu trong lõi; chúng là các capability được runtime ghép lại. Các event/service là điểm kết nối giữa các plugin, còn session log là dòng sự kiện giúp quan sát lại run.
Cách phân lớp này có hai hệ quả. Thứ nhất, hệ thống dễ tái cấu hình: đổi model hoặc tool không nhất thiết kéo theo việc fork cả harness. Thứ hai, failure surface chuyển từ “một ứng dụng không thể thay đổi” sang “một đồ thị plugin có dependency”. Điều này tăng tính linh hoạt nhưng cũng đòi hỏi quản lý version, contract và thứ tự khởi tạo nghiêm túc hơn.
4. Các runtime mode và khi nào nên dùng?
Trang chính thức mô tả bốn mode tiêu biểu [2]. Chúng không chỉ là bốn preset giao diện; chúng là các cách đóng gói capability khác nhau cho những mục đích vận hành khác nhau.
| Runtime mode | Capability chính | Phù hợp với |
| Standard | Bộ tool đầy đủ: chỉnh sửa file, shell, tìm kiếm file/web, skills, planning, goals, subagents và workflows | Coding agent hằng ngày, task repo nhiều bước, prototype trợ lý kỹ thuật |
| Code | Các capability của Standard được expose qua Code Mode SDK để model điều phối nhiều vòng gọi tool trong một chương trình TypeScript | Tác vụ cần orchestration nhiều bước, giảm số vòng trao đổi thủ công giữa model và tool |
| Minimal | Chỉ giữ shell và file editor dạng persistent | Benchmark model, kiểm tra năng lực trong môi trường tối giản, giảm biến số |
| Creator | Có thêm runtime inspection, thử plugin Cordis trong memory và tạo preset mới | Nghiên cứu harness, phát triển plugin, thiết kế agent profile riêng |
Một thực hành hợp lý là bắt đầu với Standard để hiểu workflow, dùng Minimal khi cần benchmark có kiểm soát, chuyển sang Code cho orchestration nhiều bước và dùng Creator khi xây runtime/preset mới. Không nên đánh giá model ở Standard rồi kết luận đó là năng lực “thuần model”, vì toolset và policy của harness có thể ảnh hưởng mạnh đến kết quả.

Hình 3. Ví dụ giao diện hiển thị các plugin đã cài và trạng thái của chúng.
Ảnh chụp từ trang giới thiệu chính thức của DeepSeek Harness [2].
5. Mọi run có thể truy vết: tại sao traceability quan trọng?
Theo trang chính thức, mỗi run được ghi vào một session log dạng append-only. Log bao gồm system prompt, reasoning, tool call và kết quả, lịch điều phối subagent cùng các lần context được inject [2]. Trajectory view cho phép xem theo source; resume, fork, search và replay cùng hoạt động trên một event stream.
Với một coding agent, traceability giải quyết ba vấn đề thường gặp. Khi agent làm sai, kỹ sư có thể kiểm tra nó nhìn thấy context nào và tool trả về gì. Khi agent làm đúng, team có thể tái sử dụng trajectory để debug, đào tạo prompt/policy hoặc so sánh hai phiên bản runtime. Khi cần kiểm toán, session log tạo ra bằng chứng về trình tự hành động thay vì chỉ còn lại câu trả lời cuối cùng.
Tuy nhiên, traceability không tự động đồng nghĩa với an toàn hay riêng tư. Session log có thể chứa prompt, dữ liệu workspace, lệnh shell và kết quả tool. Vì vậy, khi đưa vào môi trường thật, cần xác định chính sách lưu trữ, quyền đọc log, thời hạn retention, secret redaction và workspace nào được phép truy cập.
6. Use cases có thể áp dụng ngay
6.1. Coding agent cho repository nội bộ
Use case trực tiếp nhất là trợ lý lập trình có thể đọc và chỉnh sửa repository, chạy lệnh, duy trì plan và delegate work. Quickstart chính thức hướng dẫn chọn workspace rồi gửi task dạng “Summarize this repository and identify its main packages”; Web UI có thể đọc/sửa file và chạy command, đồng thời hỏi phê duyệt khi thao tác yêu cầu quyền theo permission policy [4].
Để áp dụng cho một team, nên tạo một workspace thử nghiệm không chứa production secret, định nghĩa rule cho shell command, chọn Standard mode và kiểm tra trajectory sau mỗi task. Khi workflow ổn định, có thể đóng gói các quy ước của team thành skill/plugin thay vì nhúng tất cả vào prompt.
6.2. Agent có tool nội bộ hoặc API doanh nghiệp
Một doanh nghiệp có thể xây plugin để đăng ký tool truy vấn issue tracker, đọc tài liệu nội bộ, gọi CI/CD hoặc kiểm tra policy. inject cho phép plugin khai báo service phụ thuộc; lifecycle cleanup giúp listener, timer hoặc connection không tồn tại ngoài vòng đời plugin [3].
Mô hình triển khai nên tách tool read-only khỏi tool có side effect. Với tool ghi dữ liệu hoặc trigger deployment, cần permission policy, approval step, audit log và test ở sandbox. “Plugin hóa” giúp thay tool nội bộ này bằng tool khác trong môi trường staging mà không phải sửa agent core.
6.3. Benchmark model trong môi trường tối giản
Minimal mode chỉ giữ shell và file editor persistent, phù hợp để đo model trong môi trường ít capability hơn [2]. Đây là use case đáng chú ý vì benchmark agent thường bị nhiễu bởi số lượng tool, skill và mức độ orchestration. Một quy trình tốt là cố định repository, prompt, phiên bản dsh, model route và policy; chạy cùng task ở Minimal và Standard; sau đó so sánh trajectory, số lần gọi tool, lỗi và thời gian hoàn thành.
Kết quả không nên được diễn giải thành một điểm số tuyệt đối. Minimal trả lời câu hỏi “model làm được gì khi ít trợ giúp”, còn Standard trả lời “hệ thống model + harness làm được gì trong một runtime thực dụng”.
6.4. Orchestration nhiều bước bằng Code mode
Code mode expose các capability qua Code Mode SDK để model có thể kết hợp nhiều vòng gọi tool trong một chương trình TypeScript [2]. Điều này phù hợp với tác vụ như: quét cấu trúc repository, lọc các file liên quan, chạy test, đọc lỗi, sửa code, chạy lại test và tổng hợp kết quả.
Rủi ro cần kiểm soát là chương trình do model tạo ra có thể tạo ra chuỗi hành động khó dự đoán hơn một tool call đơn lẻ. Do đó, nên giới hạn filesystem, timeout, network egress và lệnh được phép; đồng thời giữ trajectory để điều tra khi orchestration thất bại.
6.5. Xây agent preset hoặc harness riêng
Creator mode được thiết kế để inspect runtime, thử plugin Cordis trong memory và kết hợp chúng thành mode mới [2]. Đây là điểm bắt đầu cho platform team muốn tạo nhiều profile: một profile cho coding, một profile cho data analysis, một profile chỉ có read-only tools và một profile benchmark.
Cách làm nên đi từ capability nhỏ. Trước tiên, clone một profile gần nhu cầu nhất; sau đó thay từng plugin một, ghi lại contract và test; cuối cùng đưa configuration/overlay vào repository. Việc thay đổi nhiều plugin cùng lúc sẽ làm khó việc xác định lỗi do dependency, lifecycle hay policy.
7. Cài đặt: nhanh để thử, đầy đủ để phát triển
7.1. Cách nhanh với npm
Repository chính thức yêu cầu cài Node.js rồi chạy lệnh sau [1]:
| npx @deepseek-ai/dsh web |
Web UI mặc định được phục vụ tại http://127.0.0.1:3080 [1]. Sau khi server chạy, cần mở Settings → Models, nhập DeepSeek API key và lưu; route model có hiệu lực ngay mà không cần restart. Tiếp theo chọn Choose workspace, thêm thư mục dự án nơi dsh được khởi chạy và chọn workspace trước khi composer có thể tạo session [4].
7.2. Cài từ source
Để phát triển plugin hoặc đọc source, dùng flow được README mô tả [1]:
| git clone https://github.com/deepseek-ai/deepseek-harness.git cd deepseek-harness pnpm install pnpm run build pnpm dsh web |
Tài liệu plugin giả định repository đã hoàn tất flow này. Local plugin có thể được mount bằng Web overlay và cờ –patch [3]. Vì đường dẫn plugin trong ví dụ là absolute path, người phát triển nên dùng pwd/đường dẫn chuẩn hóa và tránh commit đường dẫn cá nhân vào configuration dùng chung.
7.3. Những khó khăn có thể gặp
| Khó khăn | Biểu hiện | Cách giảm rủi ro |
| Developer preview | API/plugin thay đổi; bản mới có thể không tương thích với overlay hoặc plugin cũ | Pin commit/version; lưu lockfile; có smoke test khởi động và test plugin |
| Môi trường Node.js/package manager | `npx` hoặc `pnpm install` lỗi do version Node, native dependency hoặc cache | Chuẩn hóa Node.js và pnpm trong tài liệu team; dùng clean install; ghi lại version trong CI |
| Thiếu model key | Web UI chạy nhưng session chưa có model route usable | Cấu hình Settings → Models; kiểm tra endpoint/key trước khi debug tool |
| Chưa chọn workspace | Session composer bị vô hiệu hóa | Chọn thư mục workspace sau khi server khởi động; kiểm tra quyền đọc/ghi |
| Đường dẫn overlay | Plugin local không load do path tương đối hoặc sai profile directory | Dùng absolute path theo tutorial; xem log terminal để xác nhận plugin loaded |
| Permission và shell | Agent có thể tạo side effect ngoài dự kiến | Dùng workspace riêng, policy chặt, approval cho thao tác nhạy cảm, sandbox và network restriction |
| Log chứa dữ liệu nhạy cảm | Prompt, reasoning, file content hoặc tool result xuất hiện trong trajectory | Thiết kế retention, quyền đọc, redaction secret và phân loại workspace |
| Dependency/lifecycle | Plugin load trước service cần thiết hoặc để lại tài nguyên khi unload | Khai báo `inject`, dùng `ctx.effect()` cho disposer, test load/unload |
Điểm cần phân biệt là lỗi “server không chạy” và lỗi “agent chưa sẵn sàng”. Server có thể đã listen ở port 3080 nhưng model chưa được cấu hình, workspace chưa chọn hoặc permission policy chưa cho phép thao tác. Khi debug, nên đi theo thứ tự: process/port → model route → workspace → tool/permission → plugin overlay.
8. Khuyến nghị kiến trúc khi thử nghiệm
Một prototype an toàn nên bắt đầu bằng repository không chứa secret, Standard mode, một model route duy nhất và các tool read-only. Khi đã quan sát được trajectory, mới thêm tool ghi file, shell, subagent hoặc scheduler. Mỗi plugin nên có mô tả capability, dependency, configuration schema, quyền cần thiết và chiến lược cleanup.
Với team, configuration và overlay nên được review như code. Mỗi thay đổi nên ghi rõ plugin nào được thêm/thay, event/service nào được dùng, log nào có thể chứa dữ liệu nhạy cảm và cách rollback. Vì dsh đang ở developer preview, đừng chỉ pin model; cần pin cả dsh, plugin, lockfile và preset.
9. DeepSeek Harness và Claude Code: giống nhau ở đâu, khác nhau ở đâu?
So sánh DeepSeek Harness với Claude Code cần phân biệt plugin ecosystem và agent harness. Claude Code là một sản phẩm coding agent hoàn chỉnh: nó có model, tool tích hợp, agentic loop, quản lý context, permission, checkpoint và workflow phiên làm việc. Tài liệu chính thức mô tả Claude Code là agentic harness xung quanh Claude, cung cấp tools, context management và execution environment [6]. DeepSeek Harness cũng có lớp harness, nhưng dự án nhấn mạnh một cấp độ composition rộng hơn: model, tools, skills, sessions, sandboxes, storage, loops, scheduling và UI đều được mô hình hóa như capability plugin [2].
Claude Code có một hệ sinh thái mở rộng khá phong phú. Plugin của Claude Code có thể đóng gói skills, agents, hooks, MCP servers, LSP servers và background monitors; plugin có manifest, namespace riêng và có thể test bằng –plugin-dir [5] [7]. Những thành phần này giúp người dùng mở rộng hành vi của Claude Code mà không cần viết lại sản phẩm lõi. Tuy nhiên, về mặt kiến trúc, chúng chủ yếu là lớp đóng gói và mở rộng trên một agentic loop có sẵn, chứ không phải lời khẳng định rằng toàn bộ loop, session, storage, sandbox hay UI của sản phẩm đều là plugin có thể thay thế độc lập.
| Khía cạnh | DeepSeek Harness | Claude Code |
| Định vị | Framework/harness mã nguồn mở cho developer xây và thử nghiệm agent runtime | Coding agent dạng sản phẩm, tập trung vào năng suất phát triển phần mềm |
| Phạm vi plugin | Tuyên bố rộng: model, tools, skills, sessions, sandboxes, storage, loops, scheduling và UI | Plugin đóng gói skills, agents, hooks, MCP/LSP servers, monitors và settings trên core loop có sẵn |
| Kernel/runtime | Cordis quản lý mount, unmount, dependency, service và event giữa plugin | Claude Code quản lý agentic loop, context, permissions, checkpoints và session; extension layer tích hợp qua các điểm được định nghĩa |
| Tùy biến model | Kiến trúc hướng tới việc thay model adapter/capability bằng composition và configuration | Người dùng chọn model trong Claude Code; plugin mở rộng workflow nhưng không biến toàn bộ model/runtime thành một graph plugin tùy ý |
| Tool và tích hợp | Có thể xây capability/plugin riêng; hệ sinh thái dsh-plugin còn đang hình thành | MCP kết nối external tools/data; marketplace có các tích hợp GitHub, GitLab, Jira/Confluence, Slack, Sentry, Figma, Vercel, Firebase, Supabase và nhiều plugin LSP [8] [9] |
| Phân phối | Source checkout, configuration overlay, GitHub topic/community; đang ở developer preview | Official/community marketplace, scopes user/project/local, versioning, validation, catalog và cơ chế cài đặt qua UI/CLI [5] [9] [10] |
| Trace và phục hồi | Append-only session log; trajectory hỗ trợ inspect, resume, fork, search và replay cùng event stream [2] | Session được lưu dạng JSONL cục bộ, hỗ trợ resume/fork; file edit có checkpoints và permission controls [6] |
| Mức độ kiểm soát | Cao hơn ở runtime composition, phù hợp nghiên cứu, self-hosting và xây platform riêng | Cao hơn ở UX, built-in coding workflow, integrations và triển khai nhanh |
| Chi phí vận hành | Cao hơn: phải quản lý runtime, plugin graph, version, security, sandbox, storage và compatibility | Thấp hơn cho người dùng cuối; vẫn cần quản lý plugin/MCP trust, context cost, binary phụ thuộc và policy |
| Rủi ro hiện tại | Developer preview, API/plugin có thể thay đổi phá vỡ tương thích [1] [2] | Plugin/MCP bên thứ ba vẫn cần kiểm tra trust; marketplace không loại bỏ hoàn toàn rủi ro code hoặc prompt injection [9] |
Điểm tương đồng quan trọng là cả hai đều xem coding agent như sự kết hợp giữa model, tools, context và orchestration, thay vì chỉ là một chatbot trả lời code. Claude Code có skills để cung cấp kiến thức và workflow, MCP để kết nối dịch vụ bên ngoài, hooks để chạy hành động tại lifecycle event và subagents để cô lập tác vụ [5] [8]. DeepSeek Harness có plugin Cordis, service/event, runtime mode và trajectory. Vì vậy, nếu nhu cầu chỉ là thêm lệnh review, quy trình deploy, kết nối Jira hoặc chạy linter sau khi edit, Claude Code đã có abstraction phù hợp; chưa cần dựng một harness mới.
Sự khác biệt nằm ở ranh giới kiểm soát. Trong Claude Code, hook là lựa chọn tốt khi một hành động phải xảy ra chắc chắn ở lifecycle event, còn skill là nội dung/workflow để model diễn giải và áp dụng; MCP cung cấp kết nối, skill hướng dẫn cách sử dụng kết nối đó [5]. Trong DeepSeek Harness, cùng những thành phần này có thể được đặt trong một composition rộng hơn, nơi developer thử nghiệm chính runtime profile và thay các capability nền tảng. Đây là khác biệt giữa “mở rộng một sản phẩm agent” và “xây nền tảng để tạo nhiều agent runtime”.
10. Có nên bỏ Claude Code để tự dựng harness riêng chưa?
Câu trả lời ngắn là: chưa nên bỏ Claude Code chỉ vì DeepSeek Harness có kiến trúc plugin mở hơn. Nếu mục tiêu hiện tại là tăng năng suất developer, code review, sửa lỗi, chạy test, kết nối repository và tích hợp các dịch vụ phổ biến, Claude Code thường là lựa chọn thực dụng hơn. Bạn được hưởng agentic loop đã hoàn thiện, built-in tools, permission, checkpoint, resume/fork, MCP, skills, subagents, LSP và marketplace mà không phải tự vận hành toàn bộ platform [5] [6] [8] [9].
Tự dựng harness riêng chỉ đáng cân nhắc khi quyền kiểm soát runtime là yêu cầu sản phẩm, không phải sở thích kỹ thuật. Chẳng hạn, team cần thay model/provider theo từng nhiệm vụ; cần session, storage, sandbox hoặc UI riêng; cần trajectory có cấu trúc để replay và đánh giá; cần self-host hoặc cô lập dữ liệu; cần tạo nhiều agent profile cho các domain khác nhau; hoặc đang nghiên cứu agent infrastructure và chấp nhận đầu tư dài hạn vào platform engineering.
| Tín hiệu quyết định | Nên tiếp tục Claude Code | Nên thử DeepSeek Harness/harness riêng |
| Mục tiêu chính | Tăng năng suất coding ngay trong team | Xây nền tảng agent, runtime hoặc sản phẩm agent riêng |
| Tùy biến cần thiết | Thêm workflow, skill, hook, MCP, LSP, subagent | Thay hoặc composition model, loop, session, sandbox, storage, scheduler, UI |
| Độ trưởng thành cần có | Cần công cụ ổn định, UX tốt và rollout nhanh | Chấp nhận developer preview, API thay đổi và tự xây test/observability |
| Tích hợp | Dùng các hệ thống phổ biến đã có plugin/MCP | Có hệ thống nội bộ đặc thù cần capability/runtime riêng |
| Bảo mật và triển khai | Chấp nhận trust model và execution model của Claude Code | Cần kiểm soát sâu filesystem, network, storage, log, tenancy hoặc self-hosting |
| Năng lực vận hành | Không muốn duy trì agent platform | Có team đủ sức duy trì packaging, release, sandbox, policy, telemetry và support |
| Kỳ vọng ROI | ROI đến từ số giờ developer tiết kiệm được | ROI đến từ khả năng tái sử dụng runtime trên nhiều sản phẩm/quy trình |
Một cách ra quyết định an toàn hơn là không thực hiện big-bang migration. Hãy giữ Claude Code làm công cụ mặc định, đồng thời chọn một workflow hẹp để thử DeepSeek Harness trong một profile độc lập. Ví dụ phù hợp là benchmark coding agent, agent đọc repository nội bộ, hoặc một workflow cần trajectory/replay chi tiết. Trong khoảng hai đến bốn tuần, đo cùng một bộ task ở cả hai hệ thống theo các chỉ số: tỷ lệ hoàn thành đúng, số lần can thiệp của người dùng, thời gian, chi phí token/API, độ ổn định, khả năng khôi phục sau lỗi, chất lượng trace, mức độ cô lập và công sức bảo trì.
| Nguyên tắc thực tế: Claude Code là lựa chọn tốt để sử dụng agent; DeepSeek Harness là lựa chọn đáng thử khi bạn muốn sở hữu và tái cấu trúc cách agent hoạt động. Đừng thay công cụ năng suất bằng một nền tảng cần vận hành nếu vấn đề của bạn chưa thật sự là vấn đề về runtime. |
Nếu kết quả thử nghiệm cho thấy Harness chỉ giúp thay một vài prompt hoặc thêm một tool mà không cải thiện đáng kể quyền kiểm soát, khả năng audit hay chi phí vận hành, nên giữ Claude Code và đóng gói phần mở rộng thành plugin/skill/MCP. Ngược lại, nếu team liên tục phải làm workaround cho session, sandbox, loop, model routing, storage hoặc traceability của Claude Code, đó là tín hiệu rõ hơn rằng một harness riêng có thể tạo giá trị.
11. Kết luận
DeepSeek Harness đáng chú ý vì đặt kiến trúc runtime ngang hàng với model. “Everything is a plugin” tạo ra một lời hứa kỹ thuật rõ ràng: capability có thể được composition, thay thế và thử nghiệm độc lập hơn; Cordis chịu trách nhiệm về mount/unmount, dependency, service và event; session log biến mỗi run thành một trajectory có thể kiểm tra, fork, replay và tìm kiếm [2] [3].
Claude Code không đối lập hoàn toàn với cách nghĩ đó. Nó cũng có một extension layer mạnh gồm skills, agents, hooks, MCP, LSP và marketplaces, nhưng các extension này chủ yếu mở rộng một sản phẩm coding agent đã hoàn thiện [5] [7] [9]. Vì vậy, hai công cụ phù hợp với hai điểm trên cùng một phổ: Claude Code tối ưu cho adopt nhanh và năng suất, còn DeepSeek Harness phù hợp hơn cho quyền sở hữu runtime, composition và nghiên cứu agent infrastructure.
Kết luận thực dụng không phải là “bỏ Claude Code ngay”, mà là giữ Claude Code cho công việc hằng ngày và thử Harness ở một workload có lý do kỹ thuật rõ ràng. Chỉ nên chuyển trọng tâm khi dữ liệu thử nghiệm chứng minh rằng khả năng kiểm soát runtime, traceability, self-hosting hoặc tính tái sử dụng của harness riêng lớn hơn chi phí xây dựng và vận hành nó.
Tài liệu tham khảo
[1]: https://github.com/deepseek-ai/deepseek-harness “DeepSeek Harness — GitHub repository”
[2]: https://deepseek.com/harness/en/ “DeepSeek Harness developer preview — Everything is a plugin”
[3]: https://deepseek-harness.github.io/deepseek-harness/en/develop/basic/ “DeepSeek Harness developer docs — Your first plugin”
[4]: https://deepseek-harness.github.io/deepseek-harness/en/guide/quickstart “DeepSeek Harness developer docs — Use the Web UI”
[5]: https://code.claude.com/docs/en/features-overview “Claude Code — Extend Claude Code”
[6]: https://code.claude.com/docs/en/how-claude-code-works “Claude Code — How Claude Code works”
[7]: https://code.claude.com/docs/en/plugins-reference “Claude Code — Plugins reference”
[8]: https://docs.anthropic.com/en/docs/claude-code/mcp “Claude Code — Connect Claude Code to tools via MCP”
[9]: https://code.claude.com/docs/en/discover-plugins “Claude Code — Discover and install prebuilt plugins through marketplaces”
[10]: https://code.claude.com/docs/en/plugin-marketplaces “Claude Code — Create and distribute a plugin marketplace”
[11]: https://code.claude.com/docs/en/agent-sdk/plugins “Claude Code — Plugins in the SDK”
Lưu ý nguồn: Bài viết được biên soạn dựa trên các trang chính thức nêu trên. Các nhận định về use case, trade-off và khuyến nghị lựa chọn là phần diễn giải/đề xuất thực hành, không phải cam kết tính năng production của DeepSeek Harness hoặc Claude Code.
Minh họa bổ sung: Trajectory view

Hình 4. Trajectory view giúp tái dựng một run từ session log.
Ảnh chụp từ trang giới thiệu chính thức của DeepSeek Harness [2].
Ảnh minh họa cho thấy traceability là một phần của workflow quan sát agent: khi session log là event stream append-only, người phát triển có thể kiểm tra lại context, tool call và các bước điều phối thay vì chỉ nhìn vào câu trả lời cuối cùng [2].
Vui lòng đăng nhập để bình luận.