بهترین افزونههای DeepSeek Harness برای سرور مجازی
با 5 افزونه کاربردی DeepSeek Harness برای مدیریت هزینهها، کنترل دسترسی ابزارها، اسکن تزریق، حافظه پایدار و دسترسی LAN آشنا شوید. برای پایداری بیشتر، نسخهها را ثابت نگه دارید.
کدام افزونههای DeepSeek Harness ارزش نصب دارند
افزونههای DeepSeek Harness کدهای شخص ثالثی هستند که درون agent شما، با دسترسیهای agent شما و روی ماشینی که هزینه آن را پرداخت میکنید، اجرا میشوند. لیست جامعه کاربری شامل بیش از بیست دستهبندی و بیش از هزار مورد است. روی یک سرور مجازی (VPS) اجارهای، شما به پنج مورد نیاز دارید: dsh-budget برای محدودیتهای هزینه، dsh-permission-rules برای کنترل دسترسی ابزارها، dsh-defend برای اسکن تزریق و اسرار، dsh-memory برای حقایقی که طول عمرشان از یک نشست بیشتر است، و dsh-web-lan-access تنها پس از آنکه تصمیم گرفتید چگونه احراز هویت کنید.
این harness همان dsh است، ابزار متنباز agent برای DeepSeek که بهگونهای ساخته شده که همهچیز در آن یک افزونه باشد. فایل README خودِ پروژه، آن را یک پیشنمایش توسعهدهنده مینامد و هشدار میدهد که THERE WILL BE COMPATIBILITY-BREAKING CHANGES. همین یک واقعیت، تمام انتخابهای زیر را شکل میدهد. نسخههای نصبشده را ثابت (Pin) کنید، انتظار داشته باشید که یک بهروزرسانی باعث خرابی آنها شود، و تعداد آنها را آنقدر کم نگه دارید که واقعاً بتوانید تمام کدهایشان را بخوانید. اگر harness هنوز در حال اجرا نیست، با نصب DeepSeek Harness روی یک VPS شروع کنید و سپس به اینجا بازگردید. اگر بخشهایی که این افزونهها به آنها متصل میشوند—یعنی حلقه agent، ابزارهای آن و حافظهاش—هنوز برایتان مبهم است، ابتدا مبانی را مرور کنید، زیرا وقتی بدانید هر لایه چه کاری انجام میدهد، قضاوت درباره هر یک از انتخابهای زیر آسانتر خواهد بود.
نحوه نصب پلاگین توسط dsh و محل قرارگیری تنظیمات
dsh از پلاگینهای Cordis تشکیل شده است، بنابراین یک نمونه در حال اجرا، درختی از پلاگینهاست و نه یک برنامه واحد. یک profile، ترکیبی نامگذاریشده از این پلاگینهاست. دو قالب موجود عبارتند از web و headless. مقدار پیشفرض $DSH_HOME برابر با ~/.dsh است و هر profile در مسیر $DSH_HOME/profiles/<name>/ قرار میگیرد که شامل package.json اختصاصی، یک مانیفست dsh.profile و یک cordis.patch.yml است.
dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budgetچهار روش برای تعیین منبع وجود دارد: نام ساده یک پکیج npm، نام scoped مانند @towzai/dsh-memory، ارجاع به GitHub مانند github:PerryLink/dsh-budget#main، و مسیر محلی با استفاده از link: یا ./. از فرمت GitHub استفاده کنید، زیرا میتوانید #main را با یک commit جایگزین کنید تا ماه آینده دقیقاً همان کد را دریافت کنید.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"لایهها با ترتیب ثابتی اعمال میشوند: ابتدا هر bundle به ترتیبی که در profile لیست شده، سپس cordis.patch.yml مربوط به profile، بعد cordis.patch.yml در سطح home و در نهایت هرگونه overlay در --patch. ترتیب اهمیت دارد زیرا یک لایه بعدی میتواند تنظیمات لایه قبلی را تغییر دهد یا حذف کند. بنابراین اگر پلاگینی نصبشده به نظر میرسد اما کار نمیکند، cordis.patch.yml مربوط به profile را باز کنید و دو مورد را بررسی کنید: اینکه بلوک insert آن وجود داشته باشد و هیچ لایه بعدی آن را غیرفعال نکرده باشد.
تا تاریخ 17 August 2026، پکیج npm با نام @deepseek-ai/dsh در نسخه 0.1.0-rc.7 قرار دارد، در حالی که تمام پلاگینهای زیر، سازگاری خود را با نسخههای 0.1.0-rc.5 تا 0.1.0-rc.6 اعلام میکنند. این شکاف در این اکوسیستم طبیعی است و معمولاً دلیل توقف بارگذاری یک پلاگین همین است: ابزار harness سریعتر از پلاگینهای اطرافش بهروز میشود. harness را بهصورت هدفمند ارتقا دهید و سپس پلاگینها را یکییکی تست کنید.
پیش از اعتماد به یک افزونه، آن را بررسی کنید
یک افزونه dsh در محیطی ایزوله (sandboxed) از harness اجرا نمیشود. این افزونه در همان درخت Cordis، در همان پردازش، با همان کاربر سیستمعامل، و با دسترسی به همان اعتبارنامههای مدل و همان درخت کاری (working tree) بارگذاری میشود. نصب یک افزونه، بیشتر به اجرای اسکریپت شخص دیگری با sudo شباهت دارد تا افزودن یک افزونه به مرورگر. این همان مسئلهٔ اعتماد است که افزونههای Claude Code ایجاد میکنند و پاسخ آن نیز یکسان است: کد را بخوانید یا آن را نصب نکنید.
چهار مورد زیر را به همین ترتیب بررسی کنید:
- نقاط اتصالی که افزونه از آنها استفاده میکند. استفاده از
tools/pre-executeبه این معناست که افزونه تمام فراخوانیهای ابزار را میبیند و میتواند آنها را مسدود کند.agent/pre-stepبه این معناست که افزونه پیامهای شما را مشاهده میکند.webServer.tapIndexبه این معناست که افزونه صفحهای که به مرورگر شما ارائه میشود را بازنویسی میکند. افزونهای که از هیچکدام از این موارد استفاده نکند، کارایی بسیار محدودی دارد؛ اما افزونهای که از همهٔ آنها استفاده میکند، در واقع مرز امنیتی شماست. - آیا افزونه با شبکه ارتباط برقرار میکند یا خیر. در کد منبع به دنبال
fetch،httpو هر نام میزبان (hostname) سختکد شده بگردید. یک ابزار سنجش هزینه که اطلاعات را به سرور خود میفرستد، در حال ارسال الگوی استفادهٔ شما به مقصدی دیگر است. - آیا افزونه اعتبارنامهها را میخواند یا خیر. هر چیزی که با
credentials.*یا کلید یک ارائهدهنده (provider key) در تماس باشد، باید دلیل مشخصی در فایل README داشته باشد. - مجوز (license) و تاریخ آخرین commit. یک افزونه بدون مجوز که ماههاست تغییری نکرده، در اکوسیستمی که هر هفته تغییر میکند، یک ریسک امنیتی محسوب میشود.
سپس به جای نصب از روی branch، از روی commit نصب کنید و بلوک درجشدهای که نصبکننده در cordis.patch.yml نوشته است را بخوانید. آن بلوک، شناسهٔ افزونه و پیکربندی ثبتشدهٔ آن را مشخص میکند که کوتاهترین و صادقانهترین توصیف از چیزی است که بهتازگی اضافه کردهاید. تا جایی که harness اجازه میدهد، کلیدهای ارائهدهنده را از دسترس افزونه دور نگه دارید؛ مشابه روش دور نگه داشتن اسرار از عاملهای هوش مصنوعی.
dsh-budget: چگونه از مصرف بیرویه بودجه توسط یک ایجنت در طول شب جلوگیری کنم؟
یک ایجنت روی یک VPS بهصورت خودکار و بدون نظارت اجرا میشود. این دقیقاً هدف از قرار دادن آن روی سرور است، اما در عین حال ریسک آن نیز محسوب میشود. dsh-budget توکنها و هزینه تخمینی را به ازای هر مدل، هر نشست (session) و هر روز اندازهگیری میکند و سقفهای تعیینشده برای این مجموعها را اعمال مینماید.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"مقادیر پیشفرض آن سخاوتمندانه هستند: 10 دلار برای هر نشست، 50 دلار در روز و 500 دلار در ماه. این مقادیر برای یک تیم با بودجه مشخص مناسب است. روی یک سرور شخصی، این مبالغ آنقدر زیاد هستند که یک حلقه (loop) خارج از کنترل، پیش از رسیدن به سقف بودجه، تمام منابع را مصرف میکند؛ بنابراین در همان روز اول آنها را کاهش دهید.
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
}
]ستون پیشنهادی، نقطه شروعی برای یک اپراتور روی یک سیستم است و نه یک رقم قطعی. پس از یک ماه استفاده واقعی، اگر نیاز بود آن را افزایش دهید. سقف ماهانه 40 دلار با سقف نشست 2 دلار باعث میشود که سیستم در صورت بروز خطا، سریع و با صدای بلند متوقف شود؛ این دقیقاً همان چیزی است که در زمان یادگیری میزان مصرف ابزار به آن نیاز دارید.
- id: budget
config:
budgets:
session: 2
daily: 5
monthly: 40
warnRatio: 0.8
overLimit: blockتنظیمی که رفتار ماشین را تغییر میدهد overLimit است. مقدار پیشفرض آن alert است که فقط یک هشدار چاپ میکند و به مصرف ادامه میدهد؛ بنابراین این پلاگین در حالت پیشفرض صرفاً یک داشبورد است. آن را روی block تنظیم کنید تا پس از رسیدن به سقف بودجه، از فراخوانیهای بیشتر مدل جلوگیری شود؛ این یعنی یک پردازش شبانه به جای ادامه هزینهتراشی تا صبح، متوقف میشود. degrade حالت سوم است: مدل را با یک مدل ارزانتر از نقشه degradation جایگزین میکند که برای زمانی مناسب است که کار باید تمام شود اما نیازی به بهترین مدل شما نیست. warnRatio بهصورت پیشفرض روی 0.8 تنظیم شده است، بنابراین در 80 درصد سقف بودجه، از آن مطلع خواهید شد.
دو محدودیت صادقانه وجود دارد. هزینه بر اساس قیمتهایی که شما ارائه میدهید محاسبه میشود: prices بهصورت پیشفرض خالی است و defaultPrice بهطور خودکار به 1.0 دلار به ازای هر میلیون توکن ورودی و 3.0 دلار به ازای هر میلیون توکن خروجی بازمیگردد. اعداد واقعی مدلهای خود را وارد کنید، در غیر این صورت داشبورد فقط یک حدس و گمان است که در قالب اندازهگیری ارائه شده. دوم اینکه، پلاگین مجموعها را در پردازش در حال اجرا از جریان رویدادهای نشست جمعآوری میکند، بنابراین با ریاستارت شدن harness، مجموعها بازنشانی میشوند. یک حلقه کرش (crash loop) یا یک supervisor که dsh را ریاستارت میکند، سقف روزانه را بازنشانی خواهد کرد. به dsh-budget به عنوان یک محافظ در برابر کارهای خودتان نگاه کنید و سقف هزینه را در حساب ارائهدهنده سرویس به عنوان محدودیت نهایی حفظ کنید، که این موضوع بحث گستردهتری در کنترل هزینه ایجنت هوش مصنوعی روی VPS است.
برای استفاده روزمره، از /budget برای نمای کلی، /budget models برای تفکیک هزینهها به ازای هر مدل و از /budget unblock <scope> برای برداشتن مسدودیت پس از تصمیم به ادامه کار استفاده کنید.
dsh-permission-rules: which tool calls should never run?
dsh-permission-rules puts declarative rules on the tools/pre-execute waterfall, so a rule is evaluated before a tool runs. Three actions exist. allow passes the call through, deny blocks it and returns a reason the model can read, and ask routes it to the official approval seam.
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"Rules live in .dsh/rules.yaml relative to the session working directory, with a global fallbackPath and optional searchUp to walk up toward the filesystem root. Matching covers tool-name globs, parameter key and value globs, workspace-relative path globs, agent selectors such as main or subagent, and network targets.
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"Evaluation is first match wins, so a broad allow near the top quietly cancels every narrower rule under it. Write the denials first and the permissive rules last. The tool-name glob covers mcp__*, which is how you gate tools that came from a model context protocol (MCP) server rather than from the harness itself, and that matters as soon as you are running MCP servers on a VPS.
One behaviour to plan for: ask needs an answerer. On a headless profile nobody may be watching, so an ask rule can hold a run up until someone appears. Use deny for anything you would never approve, keep ask for the profile you sit in front of, and if you want approvals to work unattended you need a real answering path, which is the subject of gating AI agent actions with approvals.
dsh-defend: در مورد تزریق پرامپت (prompt injection) و نشت اسرار چه باید کرد؟
dsh-defend در سه نقطه اسکن انجام میدهد: پیامهای ورودی در agent/pre-step، آرگومانهای ابزار در tools/pre-execute که شامل یک محافظ برای حذف مخرب است، و نتایج ابزار در tools/post-execute. مورد آخر از این جهت جالب است که محتوای دریافتشده از یک صفحه وب، پیش از آنکه مدل بر اساس آن عمل کند، در این مرحله بررسی میشود.
dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"تنظیمات پیشفرض محتاطانه هستند نه سختگیرانه: detection.injectionAction، detection.jailbreakAction و detection.secretAction همگی ask هستند، در حالی که detection.secretBlockCritical روی true تنظیم شده است؛ بنابراین یک راز حیاتی صرفنظر از سایر تنظیمات، مسدود میشود. در یک سرور بدون نظارت (unattended)، اقداماتی که برایتان اهمیت دارند را به block تغییر دهید، زیرا ask در شرایطی که کسی برای پاسخگویی وجود ندارد، عملاً تصمیمی اتخاذ نمیکند.
طراحی سیستم حسابرسی (audit) شایسته تقدیر است. رویدادهای defend/detection شناسه قانون، خانواده، دستهبندی، شدت، تصمیم و حقایق اسکن را ثبت میکنند و هرگز متن تطبیقدادهشده را ذخیره نمیکنند؛ اسرار تنها بر اساس نوع ثبت میشوند. بنابراین، فعالسازی لاگ حسابرسی، کپی دومی از اعتبارنامهای که قصد محافظت از آن را دارید، ایجاد نمیکند.
دقیقاً بدانید که این ابزار چه چیزی برای شما فراهم میکند. تشخیص مبتنی بر قانون (rule-based) است و فایل README بهصراحت بیان میکند که عبارتبندیهای جدید و حملات چندمرحلهای میتوانند از آن عبور کنند. این ابزار نرخ حملات آشکار را کاهش میدهد. این سیستم باعث نمیشود که یک عامل (agent) برای مواجهه با محتوای غیرقابلاعتماد کاملاً ایمن شود، بنابراین قوانین دسترسی را در لایههای زیرین آن همچنان حفظ کنید.
dsh-memory: عامل فردا چه چیزی را به یاد میآورد؟
دو پلاگین متفاوت با نام dsh-memory وجود دارند که دانستن این موضوع پیش از تایپ دستور نصب، حائز اهمیت است. برای اطمینان از نصب نسخهای که مطالعه کردهاید، آن را از منبع مشخص نصب کنید.
نسخهای که من برای یک سرور کوچک پیشنهاد میکنم، نسخه مبتنی بر SQLite است. این نسخه با نام memory ثبت میشود، یک فایل واحد در مسیر $DSH_HOME/memory/memory.db را میان پروفایلها به اشتراک میگذارد و دستورات memory_write، memory_search و memory_forget را در دسترس قرار میدهد. جستجو در این نسخه بر اساس کلمات کلیدی در متنهای ذخیرهشده و برچسبها انجام میشود. در این مدل، هیچ سرویس embedding، کلید API یا پردازش اضافی وجود ندارد.
dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"پیکربندی که با آن سروکار خواهید داشت محدود است: path برای فایل پایگاه داده، promptRecentCount (پیشفرض 10) برای تعیین تعداد حافظههای پیننشدهای که تزریق میشوند، و promptMaxChars (پیشفرض 2000) برای بودجه رندرینگ. این ابزار به node:sqlite وابسته است که در Node 22 و 24 همچنان به عنوان آزمایشی (experimental) شناخته میشود؛ بنابراین ارتقای Node چیزی است که باید تست شود، نه اینکه فرض بر کارکرد بینقص آن باشد.
در اینجا توضیح میدهیم که حافظه واقعاً چه تغییری در ماشین ایجاد میکند: حافظههای تزریقشده در هر نوبت در system prompt قرار میگیرند. بودجه 2000 کاراکتری به معنای چند صد توکن ورودی اضافی در هر درخواست است که برای همیشه ادامه دارد. این موضوع مستقیماً بر هزینههای شما تأثیر میگذارد و به همین دلیل است که dsh-budget باید پیش از dsh-memory روی سرور نصب شود. مقدار promptMaxChars را محدود نگه دارید و به جای اجازه دادن به رشد بیرویه فایل، آن را با memory_forget پاکسازی کنید.
نسخه جایگزین، حافظهها را در یک فایل YAML ذخیره کرده و جستجوی embedding را با تزریق خودکار prompt انجام میدهد که با dsh plugin --profile web add github:towzai/dsh-memory نصب میشود. این نسخه به یک نمونه محلی ollama و یک مدل embedding (بهصورت پیشفرض qwen3-embedding:0.6b که با DSH_MEMORY_EMBED_MODEL قابل تغییر است) نیاز دارد. بازیابی معنایی (Semantic recall) در این مدل بهتر از بازیابی کلمات کلیدی است. این یعنی یک سرویس دوم و مجموعهای از وزنهای مدل که روی همان سرور ساکن هستند؛ موضوعی که در پلنهای کوچک، حافظه رم را از کاری که سرور برای آن اجاره شده است، میگیرد. اگر رم کافی در اختیار دارید، این گزینه را انتخاب کنید. موازنه کلی میان کیفیت بازیابی و هزینه منابع در حافظه محلی برای عاملها پوشش داده شده است.
دسترسی به رابط وب dsh در شبکه محلی: آیا رابط وب باید فراتر از loopback گوش دهد؟
npx @deepseek-ai/dsh web رابط کاربری را روی 127.0.0.1:3080 ارائه میدهد. مرورگرها فقط crypto.randomUUID() را در یک بستر امن در دسترس قرار میدهند، بنابراین بارگذاری همان صفحه از طریق HTTP ساده از یک ماشین دیگر با شکست مواجه میشود. dsh-web-lan-access این مشکل را با استفاده از webServer.tapIndex برای تزریق یک polyfill کوچک حل میکند و اتصال سرور را به 0.0.0.0 تغییر میدهد.
پیش از نصب، هشدار مربوط به آن را مطالعه کنید. اتصال روی 0.0.0.0 باعث میشود که agent بدون احراز هویت برای هر کسی در همان شبکه محلی (LAN) قابل دسترسی باشد، و در سروری با IP عمومی، این به معنای دسترسی کل اینترنت است. لیست کوتاهی از متدهای حساس (settings.*، credentials.*، llm.discoverModels) همچنان محدود به loopback باقی میماند و از مبدأهای راه دور خطای 403 برمیگرداند که این امر آسیب را محدود میکند. این کار از بروز مشکل جلوگیری نمیکند، زیرا سطح دسترسی به ابزار همچنان برای هر کسی که پورت را پیدا کند، باز است.
در بیشتر مواقع، شما اصلاً به این افزونه نیاز ندارید. در عوض، پورت را از طریق SSH فوروارد کنید.
ssh -N -L 3080:127.0.0.1:3080 you@your-serverسپس http://127.0.0.1:3080 را در مرورگر محلی خود باز کنید. harness همچنان فقط روی loopback گوش میدهد، بنابراین چیزی در معرض دید قرار نمیگیرد و از آنجا که مرورگرها 127.0.0.1 را به عنوان یک مبدأ امن در نظر میگیرند، crypto.randomUUID() در دسترس است و نیازی به هیچ polyfill نیست. یک دستور، بدون افزونه، بدون سطح حمله جدید.
افزونه را فقط زمانی نصب کنید که فوروارد کردن پاسخگو نباشد، برای مثال وقتی گوشی موبایلی در همان شبکه باید به رابط وب دسترسی پیدا کند. اگر این کار را انجام دادید، آن را پشت یک رابط شبکه خصوصی متصل کنید، یک قانون فایروال داشته باشید که فقط به همان رابط اجازه دسترسی بدهد، و نامهایی که استفاده خواهید کرد را در trustedHosts در ورودی web-runtime لیست کنید. برای دسترسی واقعی چندکاربره، dsh-passwords وجود دارد که مجوزهای زیرکاربر، توکن ساعتی و سهمیه زمانی روزانه برای هر زیرکاربر، گواهیهای TLS (امنیت لایه انتقال) خودکار از طریق Let's Encrypt و لاگ حسابرسی رمزنگاریشده را اضافه میکند. به آن به عنوان یک پلتفرم نگاه کنید تا یک افزونه؛ این ابزار پورتهای 80 و 443 را میخواهد، نصبکننده اختصاصی خود را دارد و مسیر سریع مستند شده آن، یک اسکریپت shell را مستقیماً از شبکه به داخل bash پایپ میکند. استفاده از npm install -g dsh-passwords و به دنبال آن dsh-passwords install را ترجیح دهید تا کد روی دیسک قرار گیرد و بتوانید پیش از اجرا آن را مطالعه کنید.
نحوه حذف تمیز یک افزونه
حذف نصب شامل دو مرحله است و کاربران اغلب مرحله دوم را نادیده میگیرند.
dsh plugin --profile web remove dsh-budget
dsh plugin --profile web listlist دیگر نباید آن را نمایش دهد. سپس $DSH_HOME/profiles/web/cordis.patch.yml را باز کنید و هرگونه بلوک درج (insert block) باقیمانده که نام آن افزونه را دارد حذف کنید، زیرا همان ورودی است که آن را در درخت بارگذاری میکند. ابزار (harness) را مجدداً راهاندازی کنید تا درخت بازسازی شود؛ افزونهای که قبلاً بارگذاری شده تا زمانی که این کار را انجام ندهید، در حافظه باقی میماند. در نهایت، به یاد داشته باشید که دادهها بیش از کد عمر میکنند. $DSH_HOME/memory/memory.db و .dsh/rules.yaml پس از حذف نصب باقی میمانند. اگر هدف شما پاکسازی دادهها بوده است، آنها را شخصاً حذف کنید.
آنچه مطالعه کردم و زمان آن
هر ارجاع در اینجا یک commit است، نه یک branch، زیرا main تا زمانی که شما این متن را میخوانید، کد متفاوتی خواهد بود. من تمام این موارد را در تاریخ 17 August 2026 مطالعه کردم و خودِ harness در آن روز در npm روی 0.1.0-rc.7 قرار داشت.
commitهای دقیق پشت این فهرست کوتاه
- فهرست پلاگینهای جامعه در
f2918fb، تاریخ 17 August 2026. تنها یک بار به عمد لینک شده است. این یک دایرکتوری است و دایرکتوری به معنای توصیه نیست. - dsh-budget در
461d478، تاریخ 17 August 2026. لایسنس Apache 2.0. نیازمند dsh0.1.0-rc.6و Node 22.19 یا 24 به بالا. - dsh-permission-rules در
b30b4fb، تاریخ 17 August 2026. لایسنس Apache 2.0. نیازمند dsh0.1.0-rc.5تا0.1.0-rc.6. - dsh-defend در
7ba3427، تاریخ 17 August 2026. لایسنس Apache 2.0. نیازمند dsh0.1.0-rc.6. - dsh-memory در
def7c6a، تاریخ 13 August 2026. لایسنس MIT. بیلد SQLite. - dsh-web-lan-access در
e27e909، تاریخ 16 August 2026. لایسنس MIT.
پیش از کپی کردن هر دستور، این پینها را دوباره بررسی کنید. در یک اکوسیستم developer-preview، شماره نسخهای که دارای تاریخ است، تنها موردی است که معنای مشخصی دارد.
FAQ
کدام افزونههای DeepSeek Harness را باید ابتدا روی یک VPS نصب کنم؟
پیش از هر چیز dsh-budget و dsh-permission-rules را نصب کنید. یک بودجه با overLimit: block مانع از آن میشود که اجرای بدون نظارت، تمام شب منابع شما را مصرف کند و یک فایل .dsh/rules.yaml از فراخوانی ابزاری که هرگز تأیید نمیکردید، جلوگیری میکند. هنگامی که ایجنت شروع به خواندن محتوا از وب عمومی کرد، dsh-defend را اضافه کنید و زمانی که متوجه شدید یک متن زمینه (context) مشابه را در هر نشست کپی میکنید، dsh-memory را به کار بگیرید. از پوستهها و نشانگرهای وضعیت (status chips) صرفنظر کنید: آنها کدی را با دسترسیهای ایجنت شما اجرا میکنند، بدون اینکه تغییری در عملکرد اصلی ماشین ایجاد کنند.
آیا افزونههای dsh از harness ایزوله (sandbox) هستند؟
خیر. یک افزونه در همان درخت Cordis که harness در آن قرار دارد، در همان پردازش، با همان کاربر سیستمعامل، با همان اعتبارنامههای مدل و در همان درخت کاری بارگذاری میشود. افزونهای که به tools/pre-execute متصل شود، تمام فراخوانیهای ابزار را میبیند و میتواند آنها را مسدود کند؛ افزونهای که به agent/pre-step متصل شود، پیامهای شما را مشاهده میکند. بنابراین کد منبع را بخوانید، مجوز (license) و تاریخ آخرین commit را بررسی کنید و به جای branch، بر اساس commit نصب کنید تا کد نتواند بدون اطلاع شما تغییر کند.
آیا dsh-budget واقعاً ایجنت را متوقف میکند یا فقط به من هشدار میدهد؟
این موضوع به overLimit بستگی دارد. مقدار پیشفرض alert است که در warnRatio هشدار میدهد و به مصرف ادامه میدهد. block پس از رسیدن به سقف تعیینشده، از فراخوانیهای بیشتر مدل خودداری میکند و /budget unblock <scope> زمانی که تصمیم به ادامه بگیرید، محدودیت را برمیدارد. degrade به یک مدل ارزانتر از نقشه degradation سوئیچ میکند. یک محدودیت مهم وجود دارد: مجموع هزینهها در پردازش در حال اجرا از جریان رویدادهای نشست (session event stream) جمعآوری میشود، بنابراین راهاندازی مجدد harness آنها را بازنشانی میکند و یک حلقه راهاندازی مجدد میتواند سقف روزانه را دور بزند. سقف هزینه را در حساب ارائهدهنده سرویس به عنوان محدودیت نهایی حفظ کنید.
چگونه یک افزونه dsh را بهطور کامل حذف کنم؟
دستور dsh plugin --profile web remove <package-name> را اجرا کنید، با dsh plugin --profile web list تأیید کنید، سپس $DSH_HOME/profiles/web/cordis.patch.yml را باز کرده و هر بلوک درج (insert block) باقیمانده برای آن افزونه را حذف کنید، زیرا همان ورودی است که باعث بارگذاری آن میشود. harness را مجدداً راهاندازی کنید تا درخت افزونهها بازسازی شود. دادههای نوشتهشده توسط افزونه روی دیسک باقی میمانند: $DSH_HOME/memory/memory.db و .dsh/rules.yaml هر دو پس از حذف افزونه باقی میمانند تا زمانی که خودتان آنها را پاک کنید.
آیا قرار دادن رابط کاربری وب dsh در معرض شبکه امن است؟
به تنهایی خیر. dsh web روی 127.0.0.1:3080 گوش میدهد و dsh-web-lan-access آن اتصال را به 0.0.0.0 تغییر میدهد. در فایل README آن ذکر شده که این کار باعث میشود ایجنت بدون احراز هویت برای هر کسی در همان شبکه قابل دسترسی باشد، و روی یک آدرس IP عمومی، این به معنای دسترسی از طریق اینترنت است. چند روش (settings.*، credentials.*، llm.discoverModels) روی loopback باقی میمانند و برای مبدأهای راه دور خطای 403 برمیگردانند که آسیب را کاهش میدهد اما آن را متوقف نمیکند. از SSH port forward، ssh -N -L 3080:127.0.0.1:3080 you@your-server استفاده کنید یا پورت را پشت یک رابط شبکه خصوصی به همراه یک قانون فایروال قرار دهید و پیش از آنکه هر چیزی از بیرون قابل دسترسی باشد، احراز هویت واقعی اضافه کنید.