5 plugin DeepSeek Harness đáng cài trên VPS
Chọn 5 plugin DeepSeek Harness để giới hạn chi phí, kiểm soát tool, quét injection và secret, lưu memory bền vững, mở LAN an toàn trên VPS.
Những plugin DeepSeek Harness nào đáng cài đặt
Plugin DeepSeek Harness là code của bên thứ ba chạy bên trong agent, với quyền của agent, trên máy chủ mà bạn phải trả tiền để vận hành. Danh sách cộng đồng có hơn twenty category và hơn thousand entry. Trên một virtual private server (VPS) thuê riêng, bạn cần five plugin: dsh-budget để giới hạn chi phí, dsh-permission-rules để kiểm soát việc gọi tool, dsh-defend để quét injection và secret, dsh-memory để lưu các thông tin cần tồn tại qua nhiều session, và dsh-web-lan-access chỉ sau khi đã quyết định cách xác thực.
Harness là dsh, open-source agent harness của DeepSeek, được thiết kế để mọi thứ đều là plugin. README của nó gọi đây là developer preview và cảnh báo THERE WILL BE COMPATIBILITY-BREAKING CHANGES. Chỉ riêng điều đó đã chi phối mọi lựa chọn dưới đây. Hãy pin những gì bạn cài, dự kiến mỗi lần upgrade có thể làm hỏng chúng, và giữ bộ plugin đủ nhỏ để bạn thực sự đọc được toàn bộ. Nếu harness chưa chạy, hãy bắt đầu với hướng dẫn cài DeepSeek Harness trên VPS rồi quay lại đây.
Cách dsh cài plugin và nơi lưu cấu hình
dsh tự ghép từ các plugin Cordis, nên một instance đang chạy là một cây plugin thay vì một chương trình duy nhất. Profile là một tổ hợp có tên của các plugin đó. Hai template là web và headless. $DSH_HOME mặc định là ~/.dsh, còn profile nằm tại $DSH_HOME/profiles/<name>/, chứa package.json riêng, một manifest dsh.profile và một cordis.patch.yml.
dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budgetCó 4 dạng source: tên npm package không có tiền tố, tên scoped như @towzai/dsh-memory, tham chiếu GitHub như github:PerryLink/dsh-budget#main và path cục bộ với link: hoặc ./. Nên dùng dạng GitHub, vì bạn có thể thay #main bằng một commit và nhận lại đúng cùng code vào tháng sau.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"Các layer được áp dụng theo thứ tự cố định: từng bundle theo thứ tự được liệt kê trong profile, sau đó là cordis.patch.yml của profile, tiếp theo là cordis.patch.yml ở cấp home, rồi mọi overlay --patch. Thứ tự rất quan trọng vì layer phía sau có thể reconfigure hoặc xóa cấu hình mà layer phía trước đã thiết lập. Vì vậy, khi một plugin có vẻ đã được cài nhưng không làm gì, hãy mở cordis.patch.yml của profile và kiểm tra 2 việc: block insert của plugin có ở đó không, và không có layer phía sau nào disable plugin đó.
Tính đến ngày 17 tháng 8 năm 2026, npm package @deepseek-ai/dsh đang ở phiên bản 0.1.0-rc.7, trong khi mọi plugin bên dưới đều khai báo tương thích với 0.1.0-rc.5 đến 0.1.0-rc.6. Khoảng cách này là bình thường trong hệ sinh thái này và thường là lý do plugin ngừng load: harness phát triển nhanh hơn các plugin xung quanh. Hãy chủ động upgrade harness, sau đó test từng plugin một.
Đọc plugin trước khi tin dùng
dsh plugin không được sandbox khỏi harness. Nó được nạp vào cùng một cây Cordis, trong cùng một process, với cùng một user của hệ điều hành, và có quyền truy cập vào cùng model credentials cũng như cùng working tree. Cài đặt plugin gần với việc chạy script của người khác bằng sudo hơn là thêm một browser extension. Đây cũng là câu hỏi về mức độ tin cậy mà plugin Claude Code đặt ra, và câu trả lời giống nhau: hãy đọc code, nếu không thì đừng cài.
Có 4 thứ cần kiểm tra, theo thứ tự này:
- Plugin sử dụng những extension point nào.
tools/pre-executenghĩa là plugin thấy mọi tool call và có thể chặn chúng.agent/pre-stepnghĩa là plugin thấy các message của bạn.webServer.tapIndexnghĩa là plugin rewrite trang được phục vụ cho browser. Plugin không sử dụng extension point nào thì làm được rất ít; plugin sử dụng cả 3 extension point đó chính là security boundary của bạn. - Plugin có kết nối đến network hay không. Tìm trong source các chuỗi
fetch,httpvà mọi hostname được hard-code. Một cost meter tự gửi dữ liệu về server khác sẽ đẩy usage pattern của bạn đến nơi nào đó. - Plugin có đọc credentials hay không. Bất kỳ thành phần nào truy cập
credentials.*hoặc provider key đều phải nêu rõ lý do trong README. - License và ngày commit gần nhất. Một plugin không có license, không được cập nhật trong nhiều tháng, trong một ecosystem thay đổi hằng tuần, là một rủi ro.
Sau đó, hãy cài theo commit thay vì theo branch, rồi đọc insert block mà installer ghi vào cordis.patch.yml. Block này nêu plugin id và config mà plugin đã đăng ký. Đây là mô tả ngắn gọn và trung thực nhất về thứ bạn vừa thêm. Khi harness cho phép, hãy giữ provider key ngoài phạm vi truy cập của plugin, theo cách giữ secret khỏi AI agent.
dsh-budget: làm thế nào để ngăn một agent tiêu tiền cả đêm?
Một agent trên VPS chạy không cần giám sát. Đó là lý do bạn đặt nó trên VPS, nhưng cũng là rủi ro. dsh-budget theo dõi token và chi phí ước tính theo từng model, từng session và từng ngày, đồng thời áp dụng giới hạn cho các tổng này.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"Giá trị mặc định khá rộng: 10 USD mỗi session, 50 mỗi ngày và 500 mỗi tháng. Các mức này phù hợp với một team có ngân sách. Trên server cá nhân, chúng đủ cao để một vòng lặp chạy mất kiểm soát kết thúc trước khi cap được kích hoạt. Vì vậy, hãy hạ các mức này ngay ngày đầu tiên.
The data behind this chart
[
{
"label": "Per session",
"plugin_default_usd": 10,
"suggested_start_usd": 2
},
{
"label": "Per day",
"plugin_default_usd": 50,
"suggested_start_usd": 5
},
{
"label": "Per month",
"plugin_default_usd": 500,
"suggested_start_usd": 40
}
]Cột được đề xuất chỉ là điểm bắt đầu cho một operator trên một máy, không phải con số được công bố chính thức. Hãy tăng mức này khi dữ liệu sử dụng thực tế trong một tháng cho thấy cần tăng. Cap theo tháng 40 USD cùng cap theo session 2 sẽ báo lỗi sớm và rõ ràng. Đây là điều bạn muốn trong giai đoạn còn tìm hiểu mức tiêu thụ của tool.
- id: budget
config:
budgets:
session: 2
daily: 5
monthly: 40
warnRatio: 0.8
overLimit: blockThiết lập quyết định cách máy hoạt động là overLimit. Giá trị mặc định là alert. Giá trị này in cảnh báo nhưng vẫn tiếp tục tiêu tiền, nên khi cài mặc định plugin này chỉ hoạt động như một dashboard. Đặt thành block để harness từ chối các model call tiếp theo khi đã đạt cap. Nhờ đó, job chạy qua đêm sẽ dừng thay vì tiếp tục tính phí đến sáng. degrade là mode thứ ba: thay model hiện tại bằng model rẻ hơn trong map degradation. Mode này phù hợp khi job phải hoàn tất nhưng không cần model tốt nhất của bạn. warnRatio mặc định là 0.8, nên bạn sẽ được thông báo khi đã dùng 80 phần trăm cap.
Có 2 giới hạn cần lưu ý. Chi phí được tính từ các mức giá bạn cung cấp: prices mặc định để trống, còn defaultPrice dùng giá dự phòng là 1.0 USD cho mỗi triệu input token và 3.0 USD cho mỗi triệu output token. Hãy nhập đúng giá của các model bạn dùng. Nếu không, dashboard chỉ là một con số phỏng đoán được trình bày như số liệu đo lường. Thứ hai, plugin tổng hợp dữ liệu trong process đang chạy từ session event stream, nên các tổng số sẽ reset khi harness restart. Crash loop hoặc supervisor restart dsh cũng sẽ reset daily cap. Hãy xem dsh-budget là guardrail chống lại chính các job của bạn, đồng thời đặt spend limit trên provider account để làm giới hạn thực tế. Đây là nội dung rộng hơn được đề cập trong kiểm soát chi phí AI agent trên VPS.
Hằng ngày, dùng /budget để xem tổng quan, /budget models để xem phân tích theo từng model và /budget unblock <scope> để gỡ block sau khi đã quyết định tiếp tục.
dsh-permission-rules: những lệnh gọi tool nào tuyệt đối không được chạy?
dsh-permission-rules đặt các rule khai báo trên waterfall tools/pre-execute, nên rule được đánh giá trước khi tool chạy. Có 3 action. allow cho phép lệnh gọi tiếp tục, deny chặn lệnh gọi và trả về lý do để model đọc, còn ask chuyển lệnh gọi đến cơ chế approval chính thức.
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"Các rule nằm trong .dsh/rules.yaml, tính tương đối so với thư mục làm việc của session, cùng với fallbackPath ở phạm vi global và searchUp tùy chọn để đi ngược lên phía filesystem root. Việc match bao gồm glob của tên tool, glob của key và value trong parameter, glob của path tương đối với workspace, selector của agent như main hoặc subagent, và các network target.
rules:
- match: { tools: [bash], params: { command: "rm -rf*" } }
action: deny
reason: "No recursive deletes"
- match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
action: ask
reason: "Secret files need confirmation"
- match: { tools: ["mcp__*"] }
action: ask
reason: "MCP tools need confirmation"Việc đánh giá dùng rule đầu tiên khớp, nên một allow rộng đặt gần đầu sẽ âm thầm vô hiệu hóa mọi rule cụ thể hơn bên dưới. Hãy viết các rule deny trước và các rule cho phép sau cùng. Glob tên tool bao phủ mcp__*. Đây là cách kiểm soát những tool đến từ model context protocol (MCP) server thay vì từ chính harness, và điều này quan trọng ngay khi bạn chạy MCP server trên VPS.
Cần lập kế hoạch cho một hành vi: ask cần có người trả lời. Trên profile headless có thể không có ai đang theo dõi, nên rule ask có thể giữ một lần chạy cho đến khi có người xuất hiện. Dùng deny cho mọi thứ bạn tuyệt đối không bao giờ approve, giữ ask cho profile mà bạn đang trực tiếp theo dõi, và nếu muốn approval hoạt động không cần giám sát, bạn cần một đường trả lời thực sự. Nội dung này được trình bày trong kiểm soát action của AI agent bằng approval.
dsh-defend: còn prompt injection và secret bị lộ thì sao?
dsh-defend quét tại 3 điểm: message gửi vào trên agent/pre-step, đối số của tool trên tools/pre-execute, bao gồm guard chống xóa phá hoại, và kết quả của tool trên tools/post-execute. Điểm cuối cùng này đáng chú ý, vì đó là lúc nội dung lấy từ một trang web được kiểm tra trước khi model xử lý.
dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"Mặc định ưu tiên thận trọng thay vì nghiêm ngặt: detection.injectionAction, detection.jailbreakAction và detection.secretAction đều là ask, còn detection.secretBlockCritical là true, nên secret quan trọng sẽ bị chặn bất kể các thiết lập khác. Trên máy không có người trực, hãy đổi các action bạn cần thành block, vì ask mà không có ai để hỏi thì không phải là quyết định.
Thiết kế audit đáng được ghi nhận. Các event defend/detection ghi lại rule id, family, category, severity, decision và thông tin quét, nhưng không bao giờ ghi nội dung khớp; secret chỉ được ghi theo type. Vì vậy, bật audit log không tạo thêm một bản sao của credential mà bạn đang cố bảo vệ.
Cần hiểu rõ lợi ích thực tế. Cơ chế phát hiện dựa trên rule, và README nói rõ rằng cách diễn đạt mới hoặc các cuộc tấn công nhiều bước có thể vượt qua nó. Cơ chế này làm giảm tần suất các cuộc tấn công rõ ràng. Nó không khiến agent an toàn khi trỏ vào nội dung không đáng tin cậy, vì vậy vẫn phải đặt các permission rule bên dưới nó.
dsh-memory: agent nhớ gì vào ngày mai?
Có 2 plugin khác nhau được gọi là dsh-memory. Bạn nên biết điều này trước khi nhập lệnh cài đặt. Hãy cài đặt bằng source cụ thể để nhận đúng plugin mà bạn đã đọc.
Plugin tôi sẽ chọn cho một server nhỏ là bản build dùng SQLite. Plugin này đăng ký với tên memory, lưu một file tại $DSH_HOME/memory/memory.db dùng chung cho tất cả profile, đồng thời cung cấp memory_write, memory_search và memory_forget. Tính năng search tìm theo keyword trong phần text và tag đã lưu. Không cần embedding service, API key hoặc process bổ sung.
dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"Phần cấu hình bạn cần chỉnh khá nhỏ: path chỉ đến file database, promptRecentCount (mặc định 10) đặt số lượng memory không được ghim sẽ được chèn vào, và promptMaxChars (mặc định 2000) đặt budget khi render. Plugin này phụ thuộc vào node:sqlite, thành phần mà Node 22 và 24 vẫn đánh dấu là experimental. Vì vậy, cần test khi nâng cấp Node thay vì mặc định cho rằng nó sẽ hoạt động.
Đây là thay đổi thực tế của memory đối với máy: memory được chèn sẽ đi vào system prompt trong mỗi turn. Budget 2000 ký tự tương đương thêm vài trăm input token vào mọi request, vĩnh viễn. Đây là một khoản thực sự xuất hiện trên hóa đơn, nên dsh-budget cần được cài trên máy trước dsh-memory. Giữ promptMaxChars ở mức thấp và dùng memory_forget để prune thay vì để file phình to.
Bản build còn lại lưu memory trong file YAML và dùng embedding search với cơ chế tự động chèn vào prompt, cài bằng dsh plugin --profile web add github:towzai/dsh-memory. Bản này cần một instance ollama cục bộ và một embedding model, mặc định là qwen3-embedding:0.6b, có thể thay đổi bằng DSH_MEMORY_EMBED_MODEL. Semantic recall tốt hơn keyword recall. Tuy nhiên, bạn phải chạy thêm một service và giữ một bộ model weight trên cùng server. Với plan nhỏ, lượng memory này bị lấy khỏi phần công việc mà bạn thuê server để chạy. Chỉ chọn cách này khi còn dư RAM. Sự đánh đổi chung giữa chất lượng recall và chi phí resident được trình bày trong memory cục bộ cho agent.
dsh-web-lan-access: giao diện web có nên lắng nghe ngoài loopback không?
npx @deepseek-ai/dsh web cung cấp giao diện trên 127.0.0.1:3080. Trình duyệt chỉ cho phép truy cập crypto.randomUUID() trong secure context, nên mở cùng trang đó qua HTTP thuần từ máy khác sẽ thất bại. dsh-web-lan-access khắc phục việc này bằng cách hook vào webServer.tapIndex để inject một polyfill nhỏ, đồng thời chuyển binding của server sang 0.0.0.0.
Hãy đọc cảnh báo của chính công cụ trước khi cài. Binding 0.0.0.0 khiến agent có thể được bất kỳ ai trong cùng mạng cục bộ (LAN) truy cập mà không cần authentication. Trên server có địa chỉ IP public, điều đó đồng nghĩa với toàn bộ Internet. Một danh sách ngắn các method nhạy cảm (settings.*, credentials.*, llm.discoverModels) vẫn bị ghim vào loopback và trả về 403 khi request đến từ remote origin, nhờ đó hạn chế mức độ thiệt hại. Tuy nhiên, biện pháp này không ngăn chặn hoàn toàn rủi ro, vì bề mặt gọi tool vẫn mở cho bất kỳ ai tìm thấy port.
Hầu hết trường hợp bạn không cần plugin này. Thay vào đó, hãy forward port qua SSH.
ssh -N -L 3080:127.0.0.1:3080 you@your-serverSau đó mở http://127.0.0.1:3080 trong browser trên máy local. Harness chỉ tiếp tục lắng nghe trên loopback, nên không có gì bị expose. Vì browser coi 127.0.0.1 là secure origin, crypto.randomUUID() khả dụng và không cần polyfill. Chỉ một command, không cần plugin và không tạo thêm attack surface.
Chỉ cài plugin khi không thể dùng port forward, chẳng hạn khi điện thoại trong cùng mạng cần truy cập giao diện. Nếu cài, hãy bind nó phía sau một private network interface, giữ firewall rule chỉ cho phép interface đó truy cập, và liệt kê các tên bạn sẽ dùng trong trustedHosts của entry web-runtime. Nếu cần truy cập thực sự cho nhiều user, có dsh-passwords. Công cụ này bổ sung permission cho subuser, quota token theo giờ và quota thời gian theo ngày cho từng subuser, tự động cấp TLS (transport layer security) certificate thông qua Let's Encrypt, cùng encrypted audit log. Hãy đánh giá nó như một platform thay vì một plugin: công cụ yêu cầu port 80 và 443, đi kèm installer riêng, và quick path được mô tả sẽ pipe shell script từ network thẳng vào bash. Ưu tiên npm install -g dsh-passwords rồi đến dsh-passwords install, để code nằm trên disk và bạn có thể đọc trước khi chạy.
Cách gỡ plugin sạch sẽ
Gỡ cài đặt gồm 2 bước, nhưng nhiều người bỏ qua bước thứ hai.
dsh plugin --profile web remove dsh-budget
dsh plugin --profile web listlist không còn hiển thị plugin đó. Sau đó mở $DSH_HOME/profiles/web/cordis.patch.yml và xóa mọi block insert còn sót lại có tên plugin đó, vì entry này là phần nạp plugin vào cây. Khởi động lại harness để dựng lại cây; plugin đã được nạp sẽ vẫn hoạt động cho đến khi bạn khởi động lại harness. Cuối cùng, hãy nhớ rằng data tồn tại lâu hơn code. $DSH_HOME/memory/memory.db và .dsh/rules.yaml vẫn còn sau khi gỡ cài đặt. Hãy tự xóa chúng nếu mục đích của bạn là xóa cả data.
Tôi đã đọc gì và đọc vào thời điểm nào
Mọi tham chiếu ở đây đều trỏ đến một commit, không phải một branch, vì main sẽ là code khác vào thời điểm bạn đọc nội dung này. Tôi đã đọc toàn bộ vào ngày 17 August 2026, và chính harness cũng ở 0.1.0-rc.7 trên npm vào ngày đó.
Các commit chính xác đứng sau danh sách rút gọn này
- Danh sách plugin cộng đồng tại
f2918fb, ngày 17 August 2026. Cố ý chỉ liên kết một lần. Đây là một directory, và directory không phải là một khuyến nghị. - dsh-budget tại
461d478, ngày 17 August 2026. Apache 2.0. Khai báo dsh0.1.0-rc.6, Node 22.19 hoặc 24 trở lên. - dsh-permission-rules tại
b30b4fb, ngày 17 August 2026. Apache 2.0. Khai báo dsh0.1.0-rc.5đến0.1.0-rc.6. - dsh-defend tại
7ba3427, ngày 17 August 2026. Apache 2.0. Khai báo dsh0.1.0-rc.6. - dsh-memory tại
def7c6a, ngày 13 August 2026. MIT. Bản build SQLite. - dsh-web-lan-access tại
e27e909, ngày 16 August 2026. MIT.
Hãy kiểm tra lại các pin đó trước khi copy command. Trong một hệ sinh thái đang ở giai đoạn developer preview, số phiên bản kèm ngày tháng là loại thông tin duy nhất có ý nghĩa.
FAQ
Tôi nên cài những plugin DeepSeek Harness nào trước trên VPS?
Trước tiên, hãy cài dsh-budget và dsh-permission-rules. Đặt giới hạn ngân sách bằng overLimit: block để một lần chạy không có người giám sát không tiêu hết ngân sách trong cả đêm, và dùng file .dsh/rules.yaml để chặn một lời gọi tool mà bạn sẽ không bao giờ phê duyệt. Thêm dsh-defend khi agent đọc dữ liệu từ web công khai, và thêm dsh-memory khi bạn nhận thấy mình đang dán cùng một context vào mọi session. Bỏ qua theme và status chip: chúng thêm code chạy với quyền của agent nhưng không thay đổi hành vi của máy.
Plugin dsh có được sandbox tách biệt với harness không?
Không. Plugin được nạp vào cùng cây Cordis với harness, trong cùng process, dưới cùng user của hệ điều hành, cùng model credential và cùng working tree. Plugin hook vào tools/pre-execute có thể xem và chặn mọi tool call; plugin hook vào agent/pre-step có thể xem message của bạn. Vì vậy, hãy đọc source, kiểm tra license và ngày commit gần nhất, rồi cài theo commit thay vì theo branch để code không thể tự thay đổi sau khi bạn cài.
dsh-budget có thực sự dừng agent không, hay chỉ cảnh báo tôi?
Điều đó phụ thuộc vào overLimit. Mặc định là alert, tùy chọn này cảnh báo tại warnRatio nhưng vẫn tiếp tục chi tiêu. block từ chối các model call tiếp theo khi đạt giới hạn, còn /budget unblock <scope> gỡ giới hạn đó khi bạn chọn tiếp tục. degrade chuyển sang model rẻ hơn theo map degradation. Có một giới hạn cần lưu ý: tổng chi phí được cộng dồn trong process đang chạy từ session event stream, nên khi restart harness thì các tổng này bị reset; một vòng lặp restart sẽ vô hiệu hóa giới hạn theo ngày. Hãy đặt spend limit trên tài khoản provider để làm giới hạn thực tế.
Làm cách nào để gỡ hoàn toàn một plugin dsh?
Chạy dsh plugin --profile web remove <package-name>, xác nhận bằng dsh plugin --profile web list, sau đó mở $DSH_HOME/profiles/web/cordis.patch.yml và xóa mọi insert block còn lại của plugin đó, vì entry này là thành phần nạp plugin. Restart harness để dựng lại cây plugin. Dữ liệu do plugin ghi vẫn còn trên disk: cả $DSH_HOME/memory/memory.db và .dsh/rules.yaml đều vẫn tồn tại sau khi uninstall cho đến khi bạn tự xóa chúng.
Có an toàn khi expose web UI của dsh qua network không?
Không, nếu chỉ expose trực tiếp. dsh web listen trên 127.0.0.1:3080, còn dsh-web-lan-access thay đổi binding đó thành 0.0.0.0. README của nó nêu rõ rằng cấu hình này cho phép bất kỳ ai trên cùng network truy cập agent mà không cần authentication; nếu dùng public IP thì điều đó đồng nghĩa với việc expose agent ra Internet. Một số method (settings.*, credentials.*, llm.discoverModels) vẫn bị cố định ở loopback và trả về 403 cho remote origin, giúp giảm mức độ ảnh hưởng nhưng không loại bỏ rủi ro. Hãy dùng SSH port forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server, hoặc đặt port sau một private network interface cùng firewall rule; đồng thời thêm authentication thực sự trước khi cho phép truy cập từ bên ngoài.