5 plugin DeepSeek Harness đáng cài trên VPS
Chọn 5 plugin DeepSeek Harness cho VPS: giới hạn chi phí, kiểm soát tool, quét injection và secret, lưu memory bền vững, mở truy cập LAN an toàn.
Những plugin DeepSeek Harness nào đáng cài
Plugin DeepSeek Harness là mã của bên thứ ba chạy bên trong agent, với các quyền của agent, trên máy chủ mà bạn phải trả phí. Danh sách do cộng đồng duy trì có hơn twenty danh mục và hơn thousand mục. Trên một virtual private server (VPS) thuê ngoài, bạn cần năm loại: dsh-budget để giới hạn chi tiêu, dsh-permission-rules để kiểm soát việc dùng 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 bạn đã quyết định cách xác thực.
Harness là dsh, harness agent mã nguồn mở của DeepSeek, được xây dựng để mọi thứ đều là plugin. README của nó tự mô tả là bản xem trước cho developer và cảnh báo THERE WILL BE COMPATIBILITY-BREAKING CHANGES. Thực tế này chi phối mọi lựa chọn bên dưới. Pin những gì bạn cài, dự kiến upgrade có thể làm hỏng chúng, và giữ bộ plugin đủ nhỏ để bạn có thể thực sự đọc toàn bộ mã. 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. Nếu bạn vẫn chưa rõ các thành phần mà những plugin này kết nối vào, gồm agent loop, các tool và memory của agent, hãy tìm hiểu các khái niệm nền tảng trước, vì bạn sẽ dễ đánh giá từng lựa chọn bên dưới hơn khi biết mỗi lớp đang làm gì.
Cách dsh cài plugin và nơi lưu cấu hình
dsh tự lắp 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 composition 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à lấy lại đú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, rồi cordis.patch.yml ở cấp home, cuối cùng là mọi overlay --patch. Thứ tự rất quan trọng vì layer đến sau có thể reconfigure hoặc xóa những gì layer 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 điểm: block insert của plugin có tồn tại, và không có layer nào đến sau vô hiệu hóa nó.
Tính đến ngày 17 tháng 8 năm 2026, npm package @deepseek-ai/dsh đang ở 0.1.0-rc.7, trong khi các plugin bên dưới được build cho dòng 0.1.0-rc. dsh-permission-rules và dsh-defend khai báo tương thích với 0.1.0-rc.5 đến 0.1.0-rc.6, dsh-budget chỉ khai báo 0.1.0-rc.6, dsh-memory chỉ đặt các peer range bắt đầu từ ^0.1.0-rc.6, còn dsh-web-lan-access không khai báo phiên bản dsh nào. Vào ngày 10 tháng 10 năm 2026, tag latest trên npm là 0.2.0-rc.2, nên hiện tại khoảng cách lớn hơn thời điểm chọn các pin này. Khoảng cách đó là bình thường trong hệ sinh thái này và thường là lý do plugin ngừng được load: harness phát triển nhanh hơn các plugin xung quanh nó. Hãy nâng cấp harness có chủ đích, sau đó test từng plugin một.
Đọc plugin trước khi tin dùng
Một plugin dsh không bị sandbox tách khỏi harness. Nó được nạp vào cùng cây Cordis, trong cùng process, dưới cùng user của hệ điều hành, và có quyền truy cập vào cùng credential của model cũng như cùng working tree. Cài 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 extension cho trình duyệt. Đây cũng là câu hỏi về mức độ tin cậy mà plugin của 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 móc vào 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 viết lại trang được phục vụ cho browser của bạn. Plugin không móc vào các extension point này hầu như không thể làm được nhiều; plugin móc vào cả 3 chính là ranh giới bảo mật 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 hard-code. Một cost meter tự gửi dữ liệu về server khác đang đưa pattern sử dụng của bạn ra bên ngoài. - Plugin có đọc credential hay không. Bất kỳ thứ gì truy cập
credentials.*hoặc key của provider đề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 mỗi tuần, là một rủi ro.
Sau đó, hãy cài theo commit thay vì theo branch, rồi đọc block insert 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 ngoài phạm vi của AI agent.
dsh-budget: làm thế nào để ngăn agent tiêu tiền suốt đêm?
Agent trên VPS chạy không cần giám sát. Đó là mục đích triển khai nó trên VPS, nhưng cũng là rủi ro. dsh-budget theo dõi số token và chi phí ước tính theo model, theo session và theo ngày, đồng thời áp dụng các giới hạn cho những tổng này.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"Giá trị mặc định khá rộng: 10 USD cho mỗi session, 50 mỗi ngày và 500 mỗi tháng. Các giá trị 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 loop chạy vô hạn kết thúc trước khi cap được kích hoạt, vì vậy hãy hạ chúng ngay trong ngày đầu tiên.
Dữ liệu đằng sau biểu đồ này
[
{
"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
}
]Giá trị ở cột đề 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ố. Hãy tăng nó khi số liệu sử dụng thực tế trong một tháng cho thấy cần thiết. Monthly cap 40 USD cùng session cap 2 sẽ fail rõ ràng và sớm. Đây là điều bạn muốn khi vẫn đang 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: blockSetting thay đổi 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 chi phí, nên ở trạng thái mặc định plugin này chỉ là dashboard. Đặt thành block để harness từ chối các lần gọi model tiếp theo khi đã chạm cap. Khi đó, 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: nó chặn lần gọi và đưa ra hướng dẫn nêu tên model rẻ hơn từ 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, vì vậy bạn sẽ được cảnh báo khi đạt 80 phần trăm cap.
Có hai giới hạn cần lưu ý. Chi phí được tính từ price table tích hợp, sau đó merge với các mức giá bạn cung cấp. Maintainer cảnh báo rằng các mức giá tích hợp có thể thay đổi. prices mặc định để trống. Tại commit được pin 461d478, defaultPrice, là giá fallback cho model không có trong cả hai table, ở mức 1.0 USD cho mỗi triệu input token và 3.0 cho mỗi triệu output token. Trên main hiện tại, được kiểm tra ngày 10 October 2026, giá trị này mặc định là zero và model được hiển thị là chưa có giá. Hãy điền số liệu thực cho các model của bạn. Nếu không, dashboard chỉ là một phỏng đoán được trình bày như số đo. Giới hạn thứ hai là tại 461d478, plugin tổng hợp dữ liệu trong process đang chạy từ session event stream. Vì vậy, các tổng số được reset khi harness restart. Crash loop hoặc supervisor restart dsh cũng sẽ reset daily cap. main hiện tại mặc định lưu các bucket theo ngày và theo tháng (persistence.enabled: true, tạo snapshot mỗi 10 giây) rồi khôi phục chúng khi startup. Vì vậy, restart không còn xóa daily cap hoặc monthly cap trong phiên bản này, với điều kiện harness cung cấp storage domain. Nếu không có storage domain, việc tổng hợp vẫn chỉ diễn ra trong process. main cũng nhắm đến dòng harness 0.2, nên thay đổi pin đồng nghĩa với thay đổi harness. Dù dùng cách nào, hãy xem dsh-budget là một guardrail chống lại các job của chính bạn. Đồng thời, hãy đặt spend limit trên account của provider và coi đó là ceiling thực tế. Đây là nội dung được trình bày rộng hơn trong kiểm soát chi phí AI agent trên VPS.
Hằng ngày, bạn dùng /budget để xem tổng quan, /budget models để xem chi tiết theo model và /budget unblock <scope> để gỡ block sau khi đã quyết định tiếp tục.
quy tắc quyền dsh: những lệnh gọi tool nào không được phép chạy?
dsh-permission-rules đặt các quy tắc khai báo vào tools/pre-execute waterfall, vì vậy một quy tắc được đánh giá trước khi tool chạy. Có 3 hành động. allow cho phép lệnh gọi đi tiếp, deny chặn lệnh gọi và trả về lý do để model đọc, còn ask chuyển lệnh gọi đến luồng phê duyệt chính thức.
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"Các quy tắc nằm trong .dsh/rules.yaml, tính tương đối từ thư mục làm việc của session, cùng với fallbackPath ở cấp global và searchUp tùy chọn để đi ngược lên phía filesystem root. Việc khớp bao gồm glob tên tool, glob khóa và giá trị parameter, glob path tương đối với workspace, selector 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 quy tắc khớp đầu tiên, vì vậy một allow rộng ở gần đầu file sẽ âm thầm vô hiệu hóa mọi quy tắc cụ thể hơn bên dưới. Hãy viết các quy tắc từ chối trước và các quy tắc cho phép sau cùng. Glob tên tool bao phủ mcp__*. Đây là cách kiểm soát các tool đến từ server model context protocol (MCP) 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 tính đến một hành vi: ask cần một người trả lời. Trên profile headless, có thể không có ai đang theo dõi, và một ask không được trả lời sẽ không chờ người xuất hiện: khi không có answerer được cấu hình, chuỗi phê duyệt của harness sẽ fail closed và từ chối lệnh gọi. Trên một máy không có người giám sát, quy tắc ask vì thế hoạt động như một deny mà bạn không chủ ý viết. Dùng deny cho mọi thứ bạn không bao giờ phê duyệt, giữ ask cho profile mà bạn đang trực tiếp theo dõi, và nếu muốn các yêu cầu phê duyệt hoạt động mà không cần người giám sát, bạn cần một answering path thực sự; đây là nội dung của kiểm soát hành động của AI agent bằng cơ chế phê duyệt.
dsh-defend: xử lý prompt injection và secret bị rò rỉ như thế nào?
dsh-defend quét tại 3 điểm: message đến trên agent/pre-step, đối số tool trên tools/pre-execute, bao gồm cả guard chống xóa phá hủy, và kết quả tool trên tools/post-execute. Điểm cuối cùng đáng chú ý vì đây là nơi nội dung lấy từ một trang web được kiểm tra trước khi model thực hiện hành động.
dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"Mặc định được đặt theo hướng 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 nghiêm trọng sẽ bị chặn bất kể các thiết lập khác là gì. Trên máy không có người giám sát, hãy đổi các action cần kiểm soát sang block, vì ask khi 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 text khớp rule; 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õ cơ chế này bảo vệ được gì. Việc 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 vẫn có thể vượt qua. Nó 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 cho phép agent xử lý nội dung không đáng tin cậy, vì vậy vẫn phải duy trì các permission rule bên dưới nó.
dsh-memory: agent nhớ được gì vào ngày mai?
Có hai plugin khác nhau cùng đượ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 bằng source cụ thể để lấy đúng plugin mà bạn đã đọc.
Plugin tôi sẽ chọn cho một server nhỏ là bản SQLite. Plugin này đăng ký với tên memory, dùng chung một file tại $DSH_HOME/memory/memory.db cho mọi profile, đồng thời cung cấp memory_write, memory_search và memory_forget. Tính năng tìm kiếm dùng từ khóa trên phần văn bản và tag đã lưu. Không cần embedding service, API key hay 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 cho file database, promptRecentCount (mặc định 10) để xác định số memory chưa pin được chèn vào, và promptMaxChars (mặc định 2000) cho ngân sách hiển thị. Plugin dựa vào node:sqlite, thành phần vẫn được Node 22 và 24 đánh dấu là experimental, nên 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 vào system prompt trong mọi lượt. promptMaxChars là giới hạn trên của section được hiển thị, không phải dung lượng cố định. Tuy nhiên, khi memory đã lưu dùng hết giới hạn này, ngân sách 2000 ký tự sẽ tạo thêm vài trăm input token trong mọi request, mãi mãi. Đây là chi phí thực trên hóa đơn. Vì vậy, dsh-budget nên được cài trên máy trước dsh-memory. Giữ promptMaxChars ở mức thấp và dọn dẹp bằng memory_forget thay vì để file tăng không kiểm soát.
Bản build thay thế lưu memory trong file YAML và dùng embedding search kèm tự động chèn vào prompt. Cài đặt bằng dsh plugin --profile web add github:towzai/dsh-memory. Embedding search cần một instance ollama cục bộ và embedding model, mặc định là qwen3-embedding:0.6b, có thể ghi đè bằng DSH_MEMORY_EMBED_MODEL. Nếu không có ollama, plugin sẽ chuyển sang tìm kiếm chỉ bằng từ khóa. Semantic recall tốt hơn keyword recall. Đổi lại, máy phải chạy thêm một service và giữ một bộ model weights trong RAM. Với gói server nhỏ, phần RAM này bị lấy khỏi công việc mà bạn thuê máy để chạy. Hãy chọn bản này khi còn dư RAM. Phần đánh đổi giữa chất lượng recall và chi phí resident của memory cục bộ cho agent được trình bày ở đây.
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 tại 127.0.0.1:3080. Trình duyệt chỉ cho phép crypto.randomUUID() trong secure context, nên mở cùng trang đó qua HTTP thường từ một máy khác sẽ thất bại. dsh-web-lan-access khắc phục bằng cách chèn vào webServer.tapIndex để thêm một polyfill nhỏ, đồng thời đổi binding của server thành 0.0.0.0.
Hãy đọc cảnh báo của chính nó trước khi cài. Tại commit được trích dẫn ở đây, e27e909, README cho biết việc bind vào 0.0.0.0 khiến agent có thể được bất kỳ ai trên cùng mạng cục bộ (LAN) truy cập mà không cần xác thực; nếu server có public IP address thì toàn bộ Internet cũng truy cập được. Chỉ một danh sách ngắn các method nhạy cảm (settings.*, credentials.*, llm.discoverModels) được giữ trên loopback và trả về 403 khi request đến từ remote origin. Điều này đã thay đổi. Các bản build hiện tại của harness, được kiểm tra ngày 10 October 2026, xác thực trình duyệt: launch token trong URL được in ra sẽ được đổi thành signed session cookie, và mọi Host API route cùng stream đều yêu cầu cookie này. README hiện tại của plugin gọi trustedHosts là một hàng rào Origin/Host, không phải cơ chế định danh; README cũng nói binding 0.0.0.0 sẽ mở bề mặt xác thực trên mọi interface có thể truy cập. Plugin hiện còn bật các setting dựa trên Host cho remote page đã xác thực, nên trên các bản build hiện tại, remote browser đã đăng nhập cũng có thể truy cập Host settings. Rủi ro đã chuyển vị trí chứ chưa biến mất: bất kỳ ai truy cập được cổng đều có thể thăm dò màn hình đăng nhập, URL được in ra bản thân nó là một credential, và nếu dùng HTTP thường thì token đó đi qua network dưới dạng cleartext.
Hầu hết thời gian bạn không cần plugin này. Thay vào đó, hãy forward cổng qua SSH.
ssh -N -L 3080:127.0.0.1:3080 you@your-serverSau đó mở http://127.0.0.1:3080 trong local browser. Harness vẫn chỉ lắng nghe trên loopback, nên không có gì bị expose. Vì trình duyệt xem 127.0.0.1 là một 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 forward không đáp ứng được, chẳng hạn khi một điện thoại trong cùng network phải truy cập UI. Nếu cài, hãy bind nó sau một private network interface, giữ firewall rule chỉ cho phép interface đó, và liệt kê các name bạn sẽ dùng trong trustedHosts của entry web-runtime. Với nhu cầu truy cập thực sự dành cho nhiều user, có dsh-passwords. Công cụ này bổ sung quyền subuser, quota token theo giờ và quota thời gian theo ngày cho từng subuser, certificate TLS (transport layer security) tự động 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: nó yêu cầu các cổng 80 và 443, đi kèm installer riêng, và quick path được tài liệu hóa sẽ pipe shell script từ network thẳng vào bash. Nên dùng 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 insert block 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ẽ tiếp tục hoạt động cho đến khi bạn khởi động lại harness. Cuối cùng, hãy nhớ rằng dữ liệu 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. Nếu mục đích là xóa cả dữ liệu, bạn phải tự xóa chúng.
Nội dung tôi đã đọc và thời điểm đọc
Mọi tham chiếu ở đây đều là commit, không phải branch, vì main sẽ là mã 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 tháng 8 năm 2026, và chính harness đang ở 0.1.0-rc.7 trên npm vào ngày đó. Tôi đã đối chiếu lại các giá trị mặc định và hành vi được mô tả ở trên với các nguồn chính vào ngày 10 tháng 10 năm 2026, khi tag latest trên npm là 0.2.0-rc.2.
Các commit chính xác làm cơ sở cho danh sách rút gọn này
- Danh sách plugin cộng đồng tại
f2918fb, ngày 17 tháng 8 năm 2026. Cố ý chỉ liên kết một lần. Đây là một directory, và directory không phải là khuyến nghị. - dsh-budget tại
461d478, ngày 17 tháng 8 năm 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 tháng 8 năm 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 tháng 8 năm 2026. Apache 2.0. Khai báo dsh0.1.0-rc.5đến0.1.0-rc.6. - dsh-memory tại
def7c6a, ngày 13 tháng 8 năm 2026. MIT. Bản build SQLite. Không có trường tương thích với dsh, chỉ có các peer range từ^0.1.0-rc.6. - dsh-web-lan-access tại
e27e909, ngày 16 tháng 8 năm 2026. MIT. Không có trường tương thích với dsh.
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, version number kèm ngày tháng là loại duy nhất có ý nghĩa.
FAQ
Tôi nên cài plugin nào của DeepSeek Harness trước trên VPS?
Trước hết, hãy cài dsh-budget và dsh-permission-rules. Giới hạn ngân sách với overLimit: block ngăn một lần chạy không giám sát tiêu hết ngân sách trong cả đêm, còn file .dsh/rules.yaml ngăn một tool call mà bạn sẽ không bao giờ phê duyệt. Thêm dsh-defend khi agent đọc dữ liệu từ public web, và thêm dsh-memory khi bạn nhận thấy mình luôn 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 cách máy hoạt động.
Plugin dsh có được sandbox tách khỏ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, với 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 các 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 hay chỉ cảnh báo tôi?
Điều đó phụ thuộc vào overLimit. Mặc định là alert: nó 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 chạm giới hạn, còn /budget unblock <scope> gỡ chặn khi bạn chọn tiếp tục. degrade chặn và đưa ra hướng dẫn, trong đó chỉ rõ một model rẻ hơn từ map degradation. Có một giới hạn cần lưu ý: tại commit được pin là 461d478, các tổng được cộng dồn trong process đang chạy, nên restart harness sẽ reset chúng và một vòng lặp restart có thể vô hiệu hóa giới hạn theo ngày. Bản harness hiện tại main mặc định lưu các bucket theo ngày và theo tháng qua những lần restart. Dù dùng cách nào, hãy đặt spend limit trên account của provider để làm giới hạn tối đa 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 sót lại của plugin đó, vì chính entry này sẽ nạp plugin. Restart harness để dựng lại cây plugin. Dữ liệu do plugin ghi vẫn nằm trên disk: cả $DSH_HOME/memory/memory.db và .dsh/rules.yaml đều vẫn còn sau khi uninstall cho đến khi bạn tự xóa chúng.
Expose web UI của dsh qua network có an toàn 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. Tại commit được dẫn ở đây, README của nó nói rằng cấu hình này khiến agent có thể được bất kỳ ai trên cùng network truy cập mà không cần authentication; chỉ settings.*, credentials.* và llm.discoverModels được pin vào loopback. Các bản harness hiện tại, được kiểm tra vào 10 October 2026, authenticate browser session bằng launch token trong URL được in ra và signed session cookie. Tuy nhiên, login surface khi đó được expose trên mọi interface, và URL HTTP thuần sẽ gửi token ở dạng cleartext. Hãy dùng SSH port forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server, hoặc đặt port phía sau private network interface kết hợp với firewall rule. Luôn đặt TLS ở phía trước mọi dịch vụ có thể truy cập từ bên ngoài.