SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-29

সেরা 5টি DeepSeek Harness প্লাগিন যা আপনার অবশ্যই প্রয়োজন

আপনার VPS-এর সুরক্ষায় সেরা 5টি DeepSeek Harness প্লাগিন সম্পর্কে জানুন। বাজেট নিয়ন্ত্রণ, টুল পারমিশন, ইনজেকশন স্ক্যানিং, মেমোরি এবং ল্যান অ্যাক্সেস নিশ্চিত করার উপায় এখানে দেখুন।

কোন DeepSeek Harness প্লাগিনগুলো ইনস্টল করা সার্থক

DeepSeek Harness প্লাগিনগুলো হলো থার্ড-পার্টি কোড যা আপনার এজেন্টের ভেতরে, আপনার এজেন্টের প্রিভিলেজ ব্যবহার করে এবং আপনার খরচে চলা মেশিনে রান করে। কমিউনিটি লিস্টে বিশটির বেশি ক্যাটাগরি এবং হাজারের বেশি এন্ট্রি রয়েছে। একটি রেন্টেড virtual private server (VPS)-এ আপনার পাঁচটি প্লাগিন প্রয়োজন: spend cap-এর জন্য dsh-budget, tool gating-এর জন্য dsh-permission-rules, injection এবং secret scanning-এর জন্য dsh-defend, সেশনের পরেও টিকে থাকা তথ্যের জন্য dsh-memory, এবং আপনি কীভাবে authenticate করবেন তা নিশ্চিত হওয়ার পরেই কেবল dsh-web-lan-access

এই হার্নেসটি হলো dsh, যা DeepSeek-এর ওপেন-সোর্স এজেন্ট হার্নেস এবং এটি এমনভাবে তৈরি যে সবকিছুই একটি প্লাগিন। এর নিজস্ব README-তে একে ডেভেলপার প্রিভিউ হিসেবে উল্লেখ করা হয়েছে এবং THERE WILL BE COMPATIBILITY-BREAKING CHANGES সম্পর্কে সতর্ক করা হয়েছে। এই একটি তথ্যই নিচের প্রতিটি সিদ্ধান্তকে প্রভাবিত করে। আপনি যা ইনস্টল করছেন তা পিন করে রাখুন, আপগ্রেডের কারণে তা ভেঙে যেতে পারে এই প্রত্যাশা রাখুন, এবং প্লাগিনের সংখ্যা এত কম রাখুন যাতে আপনি সহজেই সবগুলোর কোড পড়তে পারেন। যদি হার্নেসটি এখনো চালু না হয়ে থাকে, তবে VPS-এ DeepSeek Harness ইনস্টল দিয়ে শুরু করুন এবং তারপর এখানে ফিরে আসুন। যদি এই প্লাগিনগুলো যে অংশগুলোর সাথে যুক্ত হয়—যেমন এজেন্ট লুপ, এর টুলস, এর মেমোরি—সেগুলো এখনো অস্পষ্ট মনে হয়, তবে প্রথমে মৌলিক বিষয়গুলো সম্পন্ন করুন, কারণ প্রতিটি লেয়ার কী কাজ করছে তা জানলে নিচের সিদ্ধান্তগুলো নেওয়া সহজ হবে।

dsh কীভাবে একটি প্লাগইন ইনস্টল করে এবং কনফিগারেশন কোথায় থাকে

dsh নিজেকে Cordis প্লাগইন থেকে একত্রিত করে, তাই একটি চলমান ইনস্ট্যান্স একক কোনো প্রোগ্রাম না হয়ে প্লাগইনগুলোর একটি বৃক্ষ (tree) হিসেবে কাজ করে। একটি প্রোফাইল হলো সেই প্লাগইনগুলোর একটি নামযুক্ত সংমিশ্রণ। দুটি টেমপ্লেট হলো web এবং headless$DSH_HOME ডিফল্টভাবে ~/.dsh ব্যবহার করে এবং একটি প্রোফাইল $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 প্যাকেজ নাম, @towzai/dsh-memory-এর মতো একটি স্কোপড নাম, github:PerryLink/dsh-budget#main-এর মতো একটি GitHub রেফারেন্স এবং link: বা ./ সহ একটি লোকাল পাথ। GitHub ফরম্যাটটি ব্যবহার করার চেষ্টা করুন, কারণ আপনি #main-কে একটি নির্দিষ্ট কমিট দিয়ে প্রতিস্থাপন করতে পারেন এবং পরের মাসেও একই কোড ফিরে পেতে পারেন।

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

লেয়ারগুলো একটি নির্দিষ্ট ক্রমে প্রয়োগ করা হয়: প্রোফাইলের তালিকায় থাকা প্রতিটি বান্ডেল, তারপর প্রোফাইলের cordis.patch.yml, এরপর হোম-লেভেলের cordis.patch.yml এবং সবশেষে যেকোনো --patch ওভারলে। ক্রমটি গুরুত্বপূর্ণ কারণ একটি পরবর্তী লেয়ার আগের কোনো লেয়ারের সেটআপ করা কনফিগারেশন পরিবর্তন বা বাতিল করতে পারে। তাই যখন কোনো প্লাগইন ইনস্টল করা মনে হলেও কাজ করে না, তখন প্রোফাইলের cordis.patch.yml খুলুন এবং দুটি জিনিস পরীক্ষা করুন: এর ইনসার্ট ব্লকটি সেখানে আছে কি না এবং পরবর্তী কোনো লেয়ার এটিকে নিষ্ক্রিয় করছে কি না।

17 আগস্ট 2026 অনুযায়ী, npm প্যাকেজ @deepseek-ai/dsh-এর অবস্থান 0.1.0-rc.7, যেখানে নিচের প্রতিটি প্লাগইন 0.1.0-rc.5 থেকে 0.1.0-rc.6-এর সাথে সামঞ্জস্যতা ঘোষণা করে। এই ইকোসিস্টেমে এই ব্যবধানটি স্বাভাবিক এবং এটিই সাধারণত প্লাগইন লোড না হওয়ার সাধারণ কারণ: হারনেস (harness) তার চারপাশের প্লাগইনগুলোর চেয়ে দ্রুত পরিবর্তিত হয়। হারনেসটি সচেতনভাবে আপগ্রেড করুন, তারপর প্রতিটি প্লাগইন আলাদাভাবে পরীক্ষা করুন।

কোনো প্লাগইন বিশ্বাস করার আগে সেটি পড়ে নিন

একটি dsh প্লাগইন হার্নেস (harness) থেকে স্যান্ডবক্স করা থাকে না। এটি একই Cordis ট্রিতে, একই প্রসেসে, একই অপারেটিং সিস্টেম ব্যবহারকারীর অধীনে লোড হয় এবং একই মডেল ক্রেডেনশিয়াল ও ওয়ার্কিং ট্রিতে অ্যাক্সেস পায়। এটি ইনস্টল করা মানে ব্রাউজার এক্সটেনশন যোগ করার চেয়ে বরং অন্য কারো স্ক্রিপ্ট sudo দিয়ে চালানোর কাছাকাছি। এটি সেই একই বিশ্বাসের প্রশ্ন যা Claude Code প্লাগইনগুলো উত্থাপন করে, এবং উত্তরটিও একই: কোডটি পড়ুন, অথবা এটি ইনস্টল করবেন না।

এই ক্রমে চারটি বিষয় পরীক্ষা করুন:

  • এটি কোন এক্সটেনশন পয়েন্টগুলো ব্যবহার করে। tools/pre-execute মানে এটি প্রতিটি টুল কল দেখতে পায় এবং তা ব্লক করতে পারে। agent/pre-step মানে এটি আপনার মেসেজগুলো দেখতে পায়। webServer.tapIndex মানে এটি আপনার ব্রাউজারে সার্ভ করা পেজটি নতুন করে লিখে ফেলে। যে প্লাগইন এগুলোর কোনোটিই ব্যবহার করে না সেটি খুব সামান্যই কাজ করতে পারে; আর যে প্লাগইন এগুলোর সবগুলো ব্যবহার করে, সেটিই আপনার নিরাপত্তার সীমানা।
  • এটি নেটওয়ার্কে যোগাযোগ করে কি না। সোর্সের মধ্যে fetch, http এবং যেকোনো হার্ড-কোডেড হোস্টনামের জন্য অনুসন্ধান করুন। একটি কস্ট মিটার যা বাইরে ডেটা পাঠায়, সেটি আপনার ব্যবহারের ধরন কোথাও পাঠিয়ে দিচ্ছে।
  • এটি ক্রেডেনশিয়াল পড়ে কি না। credentials.* বা কোনো প্রোভাইডার কি (key) স্পর্শ করে এমন যেকোনো কিছুর জন্য README ফাইলে একটি স্পষ্ট কারণ উল্লেখ থাকা প্রয়োজন।
  • লাইসেন্স এবং সর্বশেষ কমিট তারিখ। একটি লাইসেন্সবিহীন প্লাগইন, যা মাসের পর মাস আপডেট হয়নি, এমন একটি ইকোসিস্টেমে যা প্রতি সপ্তাহে পরিবর্তিত হয়, তা একটি বড় ঝুঁকি।

এরপর ব্রাঞ্চের পরিবর্তে কমিট ব্যবহার করে ইনস্টল করুন এবং ইনস্টলার cordis.patch.yml ফাইলে যে ইনসার্ট ব্লকটি লিখেছে তা পড়ুন। সেই ব্লকে প্লাগইন আইডি এবং এটি যে কনফিগারেশন রেজিস্টার করেছে তার নাম থাকে, যা আপনি ঠিক কী যোগ করেছেন তার সবচেয়ে সংক্ষিপ্ত ও সৎ বর্ণনা। হার্নেস যেখানে সুযোগ দেয়, সেখানে প্রোভাইডার কি (key) গুলো প্লাগইনের নাগালের বাইরে রাখুন, যেমনটি AI এজেন্ট থেকে সিক্রেট দূরে রাখার ক্ষেত্রে বলা হয়েছে।

dsh-budget: আমি কীভাবে একটি এজেন্টকে সারারাত খরচ করা থেকে থামাতে পারি?

একটি VPS-এ এজেন্ট unattended বা স্বয়ংক্রিয়ভাবে চলে। এটি সেখানে রাখার মূল উদ্দেশ্য, তবে এটিই আবার ঝুঁকির কারণ। dsh-budget প্রতিটি মডেল, প্রতিটি সেশন এবং প্রতিদিনের টোকেন ও আনুমানিক খরচ পরিমাপ করে এবং সেই মোট খরচের ওপর সীমা (cap) আরোপ করে।

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

এর ডিফল্ট মানগুলো বেশ উদার: প্রতি সেশনে 10 USD, প্রতিদিন 50 এবং প্রতি মাসে 500। এগুলো একটি ফান্ডেড টিমের জন্য উপযুক্ত। ব্যক্তিগত সার্ভারে এগুলো এত বেশি যে, কোনো runaway loop বা অনিয়ন্ত্রিত লুপ ক্যাপ কার্যকর হওয়ার আগেই শেষ হয়ে যেতে পারে, তাই প্রথম দিনেই এগুলো কমিয়ে নিন।

Chartdsh-budget default caps and a lower starting point for one small VPS (USD)
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 USD-এর মাসিক ক্যাপ এবং 2 USD-এর সেশন ক্যাপ দ্রুত এবং স্পষ্টভাবে ব্যর্থ হয়, যা আপনি টুলটির ব্যবহারের ধরন বোঝার সময় আশা করবেন।

- id: budget
  config:
    budgets:
      session: 2
      daily: 5
      monthly: 40
    warnRatio: 0.8
    overLimit: block

যে সেটিংটি মেশিনের আচরণ পরিবর্তন করে তা হলো overLimit। এর ডিফল্ট মান হলো alert, যা একটি সতর্কবার্তা দেয় কিন্তু খরচ অব্যাহত রাখে, তাই ডিফল্টভাবে এই প্লাগইনটি কেবল একটি ড্যাশবোর্ড হিসেবে কাজ করে। এটিকে block-এ সেট করুন; এতে ক্যাপে পৌঁছানোর সাথে সাথে harness আর কোনো মডেল কল গ্রহণ করবে না। এর ফলে সারারাত চলা কোনো কাজ সকাল পর্যন্ত বিল না করে সেখানেই থেমে যাবে। degrade হলো তৃতীয় মোড: এটি মডেলটিকে degradation ম্যাপ থেকে একটি সস্তা মডেলে পরিবর্তন করে। এটি তখন কার্যকর যখন কোনো কাজ শেষ হওয়া জরুরি কিন্তু আপনার সেরা মডেলটির প্রয়োজন নেই। warnRatio ডিফল্টভাবে 0.8-এ থাকে, তাই ক্যাপের 80 শতাংশে পৌঁছালে আপনি একটি নোটিফিকেশন পাবেন।

দুটি গুরুত্বপূর্ণ সীমাবদ্ধতা রয়েছে। খরচ হিসাব করা হয় আপনার দেওয়া তথ্যের ভিত্তিতে: prices ডিফল্টভাবে খালি থাকে এবং defaultPrice প্রতি মিলিয়ন ইনপুট টোকেনের জন্য 1.0 USD এবং আউটপুট টোকেনের জন্য 3.0 USD ধরে হিসাব করে। আপনার মডেলের জন্য সঠিক সংখ্যাগুলো পূরণ করুন, অন্যথায় ড্যাশবোর্ডটি কেবল অনুমানের ওপর ভিত্তি করে কাজ করবে। দ্বিতীয়ত, প্লাগইনটি সেশন ইভেন্ট স্ট্রিম থেকে চলমান প্রসেসের তথ্য একত্রিত করে, তাই harness রিস্টার্ট হলে মোট খরচ রিসেট হয়ে যায়। কোনো crash loop বা supervisor যদি dsh রিস্টার্ট করে, তবে দৈনিক ক্যাপ রিসেট হয়ে যাবে। dsh-budget-কে আপনার নিজের কাজের জন্য একটি সুরক্ষাকবচ হিসেবে দেখুন এবং প্রকৃত সর্বোচ্চ সীমা হিসেবে প্রোভাইডার অ্যাকাউন্টে খরচের সীমা বজায় রাখুন, যা VPS-এ AI এজেন্টের খরচ নিয়ন্ত্রণ-এর বৃহত্তর আলোচনার বিষয়।

দৈনন্দিন ব্যবহারের জন্য আপনি ওভারভিউ দেখতে /budget, মডেল অনুযায়ী খরচের বিস্তারিত জানতে /budget models এবং কাজ চালিয়ে যাওয়ার সিদ্ধান্ত নিলে ব্লক তুলে নিতে /budget unblock <scope> ব্যবহার করবেন।

dsh-permission-rules: কোন টুল কলগুলো কখনোই চালানো উচিত নয়?

dsh-permission-rules, tools/pre-execute ওয়াটারফলে ডিক্লারেটিভ রুল বা নিয়ম নির্ধারণ করে, ফলে কোনো টুল চলার আগেই নিয়মটি মূল্যায়ন করা হয়। এখানে তিনটি অ্যাকশন রয়েছে। allow কলটিকে সরাসরি অনুমোদন দেয়, deny সেটিকে ব্লক করে এবং মডেলটি পড়তে পারে এমন একটি কারণ প্রদান করে, এবং ask সেটিকে অফিসিয়াল অ্যাপ্রুভাল সিম (approval seam)-এ পাঠিয়ে দেয়।

dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"

নিয়মগুলো সেশনের ওয়ার্কিং ডিরেক্টরির সাপেক্ষে .dsh/rules.yaml-এ থাকে, যার সাথে একটি গ্লোবাল fallbackPath এবং ফাইলসিস্টেম রুটের দিকে যাওয়ার জন্য ঐচ্ছিক searchUp থাকে। ম্যাচিংয়ের ক্ষেত্রে টুল-নেম গ্লোব, প্যারামিটার কি (key) ও ভ্যালু গ্লোব, ওয়ার্কস্পেস-রিলেটিভ পাথ গ্লোব, main বা subagent-এর মতো এজেন্ট সিলেক্টর এবং নেটওয়ার্ক টার্গেট অন্তর্ভুক্ত থাকে।

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"

মূল্যায়নের ক্ষেত্রে প্রথম ম্যাচটিই কার্যকর হয়, তাই তালিকার উপরের দিকে থাকা একটি বিস্তৃত allow তার নিচের সব সংকীর্ণ নিয়মকে নীরবে বাতিল করে দেয়। তাই ডিনাই (denial) বা বর্জনের নিয়মগুলো আগে লিখুন এবং পারমিভ বা অনুমোদনের নিয়মগুলো শেষে রাখুন। টুল-নেম গ্লোবটি mcp__*-কেও কভার করে, যা দিয়ে আপনি হারনেস থেকে আসা টুলের পরিবর্তে মডেল কন্টেক্সট প্রোটোকল (MCP) সার্ভার থেকে আসা টুলগুলোকে নিয়ন্ত্রণ করতে পারেন; এবং আপনি যখন VPS-এ MCP সার্ভার চালাবেন, তখন এটি গুরুত্বপূর্ণ হয়ে ওঠে।

একটি আচরণের পরিকল্পনা করতে হবে: ask-এর জন্য একজন উত্তরদাতার প্রয়োজন হয়। একটি headless প্রোফাইলে হয়তো কেউ নজর রাখছে না, তাই একটি ask নিয়ম কোনো রানকে আটকে রাখতে পারে যতক্ষণ না কেউ উপস্থিত হয়। যে কাজগুলো আপনি কখনোই অনুমোদন করবেন না তার জন্য deny ব্যবহার করুন, যে প্রোফাইলে আপনি নিজে কাজ করছেন তার জন্য ask রাখুন, এবং যদি আপনি চান যে অনুমোদন প্রক্রিয়াটি কোনো মানুষের উপস্থিতি ছাড়াই চলুক, তবে আপনার একটি প্রকৃত উত্তর দেওয়ার পথ প্রয়োজন, যা অনুমোদনের মাধ্যমে AI এজেন্টের কাজ নিয়ন্ত্রণ-এর বিষয়বস্তু।

dsh-defend: প্রম্পট ইনজেকশন এবং ফাঁস হওয়া সিক্রেট সম্পর্কে কী করণীয়?

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, তাই অন্য সেটিংস যাই থাকুক না কেন, একটি গুরুত্বপূর্ণ সিক্রেট সবসময় ব্লক করা হয়। কোনো আনঅ্যাটেন্ডেড বক্সে আপনার প্রয়োজনীয় অ্যাকশনগুলোকে block-এ পরিবর্তন করুন, কারণ কোনো ব্যবহারকারী না থাকলে ask কোনো কার্যকর সিদ্ধান্ত হতে পারে না।

অডিট ডিজাইনটি প্রশংসার দাবি রাখে। defend/detection ইভেন্টগুলো রুল আইডি, ফ্যামিলি, ক্যাটাগরি, সিভিয়ারিটি, সিদ্ধান্ত এবং স্ক্যান ফ্যাক্ট রেকর্ড করে, কিন্তু কখনোই ম্যাচ হওয়া টেক্সট রেকর্ড করে না; সিক্রেটগুলো শুধুমাত্র টাইপ অনুযায়ী রেকর্ড করা হয়। তাই অডিট লগ চালু করলে আপনি যে ক্রেডেনশিয়াল সুরক্ষিত করার চেষ্টা করছেন, তার দ্বিতীয় কোনো কপি তৈরি হয় না।

এটি আপনাকে কী সুবিধা দিচ্ছে সে সম্পর্কে পরিষ্কার ধারণা রাখুন। ডিটেকশন বা শনাক্তকরণ পদ্ধতি রুল-ভিত্তিক এবং README-তে স্পষ্টভাবে বলা হয়েছে যে, নতুন ধরনের ফ্রেজিং এবং মাল্টি-স্টেপ অ্যাটাক এটি এড়িয়ে যেতে পারে। এটি সাধারণ আক্রমণের হার কমিয়ে দেয়। এটি কোনো এজেন্টকে অনির্ভরযোগ্য কন্টেন্টের জন্য পুরোপুরি নিরাপদ করে তোলে না, তাই এর নিচের পারমিশন রুলগুলো বজায় রাখুন।

dsh-memory: এজেন্ট আগামীকাল কী মনে রাখবে?

দুটি ভিন্ন প্লাগইনকে dsh-memory বলা হয়, যা কোনো ইনস্টল কমান্ড টাইপ করার আগে জেনে রাখা ভালো। আপনি যেটির কথা পড়েছেন সেটি পাওয়ার জন্য নির্দিষ্ট সোর্স থেকে ইনস্টল করুন।

আমি ছোট সার্ভারে যেটিকে রাখার পরামর্শ দেব সেটি হলো SQLite বিল্ড। এটি memory হিসেবে রেজিস্টার হয়, প্রোফাইলগুলোর মধ্যে শেয়ার করা একটি ফাইল $DSH_HOME/memory/memory.db-এ রাখে এবং memory_write, memory_searchmemory_forget এক্সপোজ করে। এর সার্চ পদ্ধতি সংরক্ষিত টেক্সট এবং ট্যাগগুলোর ওপর ভিত্তি করে কিওয়ার্ড-ভিত্তিক। এতে কোনো এম্বেডিং সার্ভিস, API কি বা অতিরিক্ত কোনো প্রসেস নেই।

dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"

আপনি যে কনফিগারেশনটি পরিবর্তন করবেন তা ছোট: ডাটাবেস ফাইলের জন্য path, কতগুলো আনপিন করা মেমোরি ইনজেক্ট করা হবে তার জন্য promptRecentCount (ডিফল্ট 10), এবং রেন্ডারিং বাজেটের জন্য promptMaxChars (ডিফল্ট 2000)। এটি node:sqlite-এর ওপর নির্ভর করে, যা Node 22 এবং 24-এ এখনও এক্সপেরিমেন্টাল হিসেবে চিহ্নিত, তাই Node আপগ্রেড করার বিষয়টি অনুমান না করে পরীক্ষা করে নেওয়া উচিত।

মেমোরি আসলে মেশিনে যা পরিবর্তন করে তা হলো: ইনজেক্ট করা মেমোরিগুলো প্রতিটি টার্নে সিস্টেম প্রম্পটে যুক্ত থাকে। 2000-ক্যারেক্টারের বাজেট মানে প্রতিটি রিকোয়েস্টে চিরতরে কয়েকশ অতিরিক্ত ইনপুট টোকেন। এটি আপনার বিলের ওপর সরাসরি প্রভাব ফেলে, আর এই কারণেই dsh-memory-এর আগে dsh-budget বক্সে থাকা প্রয়োজন। promptMaxChars-কে সীমিত রাখুন এবং ফাইলটিকে বড় হতে না দিয়ে memory_forget দিয়ে নিয়মিত ছাঁটাই করুন।

বিকল্প বিল্ডটি মেমোরিগুলোকে একটি YAML ফাইলে সংরক্ষণ করে এবং স্বয়ংক্রিয় প্রম্পট ইনজেকশনের মাধ্যমে এম্বেডিং সার্চ করে, যা dsh plugin --profile web add github:towzai/dsh-memory দিয়ে ইনস্টল করা হয়। এর জন্য একটি লোকাল ollama ইনস্ট্যান্স এবং একটি এম্বেডিং মডেল প্রয়োজন, যা ডিফল্টভাবে qwen3-embedding:0.6b, তবে DSH_MEMORY_EMBED_MODEL দিয়ে পরিবর্তন করা যায়। কিওয়ার্ড রিকলের চেয়ে সেমান্টিক রিকল অনেক ভালো। এর মানে হলো একই সার্ভারে একটি দ্বিতীয় সার্ভিস এবং কিছু মডেল ওয়েট চালু রাখা, যা ছোট প্ল্যানের ক্ষেত্রে সার্ভারের মূল কাজের জন্য বরাদ্দ মেমোরি কমিয়ে দেয়। যখন আপনার হাতে পর্যাপ্ত RAM থাকবে তখনই এটি বেছে নিন। রিকল কোয়ালিটি এবং রিসোর্স খরচের মধ্যে সাধারণ ভারসাম্য নিয়ে এজেন্টদের জন্য লোকাল মেমোরি-তে আলোচনা করা হয়েছে।

dsh-web-lan-access: ওয়েব UI কি loopback-এর বাইরে listen করা উচিত?

npx @deepseek-ai/dsh web ইন্টারফেসটিকে 127.0.0.1:3080-এ পরিবেশন করে। ব্রাউজারগুলো শুধুমাত্র নিরাপদ কনটেক্সটে crypto.randomUUID() এক্সপোজ করে, তাই অন্য কোনো মেশিন থেকে plain HTTP-এর মাধ্যমে সেই একই পেজ লোড করার চেষ্টা করলে তা ব্যর্থ হয়। dsh-web-lan-access একটি ছোট polyfill ইনজেক্ট করার জন্য webServer.tapIndex ব্যবহার করে এবং সার্ভার বাইন্ডিংকে 0.0.0.0-এ পরিবর্তন করে এই সমস্যার সমাধান করে।

এটি ইনস্টল করার আগে এর নিজস্ব সতর্কবার্তাটি পড়ে নিন। 0.0.0.0 বাইন্ড করলে এজেন্টটি একই লোকাল এরিয়া নেটওয়ার্কের (LAN) যে কারো কাছে প্রমাণীকরণ ছাড়াই অ্যাক্সেসযোগ্য হয়ে যায়, আর পাবলিক IP অ্যাড্রেসযুক্ত সার্ভারের ক্ষেত্রে এর অর্থ হলো পুরো ইন্টারনেট। সংবেদনশীল মেথডগুলোর একটি সংক্ষিপ্ত তালিকা (settings.*, credentials.*, llm.discoverModels) loopback-এ সীমাবদ্ধ থাকে এবং দূরবর্তী উৎস থেকে কল করলে 403 এরর দেয়, যা ক্ষতির পরিমাণ সীমিত করে। তবে এটি পুরোপুরি প্রতিরোধ করে না, কারণ টুল-কলিং সারফেসটি যে কেউ পোর্টটি খুঁজে পেলে তার জন্য উন্মুক্ত থাকে।

বেশিরভাগ ক্ষেত্রে আপনার এই প্লাগইনটির প্রয়োজন নেই। এর পরিবর্তে SSH-এর মাধ্যমে পোর্টটি forward করুন।

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

এরপর আপনার লোকাল ব্রাউজারে http://127.0.0.1:3080 ওপেন করুন। হারনেসটি শুধুমাত্র loopback-এ listen করে, তাই কোনো কিছুই এক্সপোজ হয় না। যেহেতু ব্রাউজারগুলো 127.0.0.1-কে একটি নিরাপদ উৎস হিসেবে বিবেচনা করে, তাই crypto.randomUUID() ব্যবহারযোগ্য থাকে এবং কোনো polyfill-এর প্রয়োজন হয় না। মাত্র একটি কমান্ড, কোনো প্লাগইন নেই, নতুন কোনো অ্যাটাক সারফেসও তৈরি হয় না।

শুধুমাত্র যখন পোর্ট ফরওয়ার্ডিং কাজ করে না, তখনই প্লাগইনটি ইনস্টল করুন; যেমন—যখন একই নেটওয়ার্কে থাকা কোনো ফোনকে UI-তে পৌঁছাতে হয়। যদি এটি করতেই হয়, তবে এটিকে একটি প্রাইভেট নেটওয়ার্ক ইন্টারফেসের পেছনে বাইন্ড করুন, একটি ফায়ারওয়াল রুল রাখুন যা শুধুমাত্র সেই ইন্টারফেসটিকে অনুমতি দেয় এবং web-runtime এন্ট্রিতে trustedHosts-এর অধীনে আপনার ব্যবহৃত নামগুলো তালিকাভুক্ত করুন। প্রকৃত মাল্টি-ইউজার অ্যাক্সেসের জন্য dsh-passwords রয়েছে, যা সাব-ইউজার পারমিশন, প্রতি সাব-ইউজারের জন্য আওয়ারলি টোকেন ও ডেইলি টাইম কোটা, Let's Encrypt-এর মাধ্যমে স্বয়ংক্রিয় TLS (transport layer security) সার্টিফিকেট এবং একটি এনক্রিপ্টেড অডিট লগ যোগ করে। এটিকে প্লাগইনের চেয়ে একটি প্ল্যাটফর্ম হিসেবে বিবেচনা করুন: এটি পোর্ট 80 এবং 443 দাবি করে, এটি নিজস্ব ইনস্টলার নিয়ে আসে এবং এর ডকুমেন্টেশনে বর্ণিত দ্রুততম পদ্ধতিতে নেটওয়ার্ক থেকে একটি শেল স্ক্রিপ্ট সরাসরি bash-এ পাইপ করা হয়। এর পরিবর্তে npm install -g dsh-passwords এবং তারপর dsh-passwords install ব্যবহার করা শ্রেয়, যাতে কোডটি ডিস্কে থাকে এবং চালানোর আগে আপনি তা পড়ে দেখতে পারেন।

কিভাবে একটি প্লাগইন সঠিকভাবে মুছে ফেলবেন

আনইনস্টল করার প্রক্রিয়াটি দুটি ধাপে সম্পন্ন হয়, কিন্তু অনেকেই দ্বিতীয় ধাপটি এড়িয়ে যান।

dsh plugin --profile web remove dsh-budget
dsh plugin --profile web list

list-এ আর প্লাগইনটি দেখানো উচিত নয়। এরপর $DSH_HOME/profiles/web/cordis.patch.yml খুলুন এবং সেই প্লাগইনের নাম উল্লেখ আছে এমন যেকোনো অবশিষ্ট ইনসার্ট ব্লক মুছে ফেলুন, কারণ এই এন্ট্রিটির মাধ্যমেই এটি ট্রিতে লোড হয়। হারনেস রিস্টার্ট করুন যাতে ট্রিটি পুনরায় তৈরি হয়; কারণ একবার লোড হয়ে যাওয়া প্লাগইন রিস্টার্ট না করা পর্যন্ত মেমরিতে থেকে যায়। পরিশেষে, মনে রাখবেন যে ডেটা কোডের চেয়ে বেশি সময় স্থায়ী হয়। $DSH_HOME/memory/memory.db এবং .dsh/rules.yaml আনইনস্টল করার পরেও থেকে যায়। যদি আপনার উদ্দেশ্য ডেটা মুছে ফেলা হয়, তবে সেগুলো নিজে থেকে ডিলিট করুন।

আমি যা পড়েছি এবং কখন

এখানে প্রতিটি রেফারেন্স একটি নির্দিষ্ট commit, কোনো branch নয়, কারণ আপনি যখন এটি পড়বেন তখন main-এ ভিন্ন কোড থাকতে পারে। আমি 17 আগস্ট 2026 তারিখে এর সবকিছু পড়েছি এবং সেই দিনে npm-এ harness-টি 0.1.0-rc.7 ভার্সনে ছিল।

এই সংক্ষিপ্ত তালিকার পেছনের সঠিক commit-সমূহ
  • কমিউনিটি প্লাগইন তালিকা, f2918fb, 17 আগস্ট 2026। ইচ্ছাকৃতভাবে একবার লিঙ্ক করা হয়েছে। এটি একটি ডিরেক্টরি এবং ডিরেক্টরি মানেই কোনো সুপারিশ নয়।
  • dsh-budget, 461d478, 17 আগস্ট 2026। Apache 2.0। dsh 0.1.0-rc.6, Node 22.19 বা 24 এবং তার পরবর্তী ভার্সন ঘোষণা করে।
  • dsh-permission-rules, b30b4fb, 17 আগস্ট 2026। Apache 2.0। dsh 0.1.0-rc.5 থেকে 0.1.0-rc.6 ঘোষণা করে।
  • dsh-defend, 7ba3427, 17 আগস্ট 2026। Apache 2.0। dsh 0.1.0-rc.6 ঘোষণা করে।
  • dsh-memory, def7c6a, 13 আগস্ট 2026। MIT। SQLite বিল্ড।
  • dsh-web-lan-access, e27e909, 16 আগস্ট 2026। MIT।

কোনো কমান্ড কপি করার আগে সেই পিনগুলো পুনরায় যাচাই করে নিন। একটি ডেভেলপার-প্রিভিউ ইকোসিস্টেমে, তারিখসহ ভার্সন নম্বরই একমাত্র অর্থবহ বিষয়।

FAQ

VPS-এ সবার আগে কোন DeepSeek Harness প্লাগিনগুলো ইনস্টল করা উচিত?

অন্য যেকোনো কিছুর আগে dsh-budget এবং dsh-permission-rules ইনস্টল করুন। overLimit: block সহ একটি বাজেট থাকলে তা unattended run-কে সারা রাত ধরে খরচ করা থেকে বিরত রাখে এবং একটি .dsh/rules.yaml ফাইল এমন কোনো tool call আটকে দেয় যা আপনি কখনোই অনুমোদন করতেন না। এজেন্ট যখনই পাবলিক ওয়েব থেকে কিছু পড়বে তখন dsh-defend যোগ করুন এবং যখন দেখবেন আপনি প্রতিটি সেশনে একই কনটেক্সট বারবার পেস্ট করছেন, তখন dsh-memory ব্যবহার করুন। থিম এবং স্ট্যাটাস চিপগুলো এড়িয়ে চলুন: এগুলো আপনার এজেন্টের প্রিভিলেজ নিয়ে কোড চালায়, কিন্তু মেশিনের কার্যকারিতায় কোনো পরিবর্তন আনে না।

dsh প্লাগিনগুলো কি হারনেস থেকে স্যান্ডবক্স করা থাকে?

না। একটি প্লাগিন হারনেসের মতো একই Cordis ট্রিতে, একই প্রসেসে, একই অপারেটিং সিস্টেম ব্যবহারকারীর অধীনে, একই মডেল ক্রেডেনশিয়াল এবং একই ওয়ার্কিং ট্রিতে লোড হয়। tools/pre-execute ব্যবহারকারী একটি প্লাগিন প্রতিটি tool call দেখতে এবং ব্লক করতে পারে; agent/pre-step ব্যবহারকারী একটি প্লাগিন আপনার মেসেজগুলো দেখতে পারে। তাই সোর্স কোড পড়ুন, লাইসেন্স এবং সর্বশেষ কমিট তারিখ যাচাই করুন এবং ব্রাঞ্চের পরিবর্তে কমিট আইডি ব্যবহার করে ইনস্টল করুন যাতে আপনার অজান্তে কোড পরিবর্তিত না হতে পারে।

dsh-budget কি আসলেই এজেন্টকে থামিয়ে দেয়, নাকি শুধু সতর্ক করে?

এটি overLimit-এর ওপর নির্ভর করে। ডিফল্ট হলো alert, যা warnRatio-এ সতর্কবার্তা দেয় কিন্তু খরচ চলতে থাকে। block একটি নির্দিষ্ট সীমা অতিক্রম করলে মডেল কল করা বন্ধ করে দেয় এবং /budget unblock <scope> আপনি যখন চালিয়ে যাওয়ার সিদ্ধান্ত নেন তখন সীমা বাড়িয়ে দেয়। degrade আপনাকে degradation ম্যাপ থেকে সাশ্রয়ী মডেলে সুইচ করতে দেয়। একটি সীমাবদ্ধতা মনে রাখা জরুরি: সেশন ইভেন্ট স্ট্রিম থেকে রানিং প্রসেসে মোট খরচ হিসাব করা হয়, তাই হারনেস রিস্টার্ট করলে তা রিসেট হয়ে যায় এবং রিস্টার্ট লুপ থাকলে দৈনিক সীমা কাজ করবে না। প্রকৃত সীমা হিসেবে প্রোভাইডার অ্যাকাউন্টে একটি স্পেন্ড লিমিট বজায় রাখুন।

আমি কীভাবে একটি dsh প্লাগিন পুরোপুরি রিমুভ করব?

dsh plugin --profile web remove <package-name> চালান, dsh plugin --profile web list দিয়ে নিশ্চিত করুন, তারপর $DSH_HOME/profiles/web/cordis.patch.yml ওপেন করে ওই প্লাগিনের জন্য কোনো leftover insert ব্লক থাকলে তা ডিলিট করুন, কারণ এই এন্ট্রির মাধ্যমেই এটি লোড হয়। হারনেস রিস্টার্ট করুন যাতে প্লাগিন ট্রি পুনরায় তৈরি হয়। প্লাগিন দ্বারা লেখা ডেটা ডিস্কেই থেকে যায়: $DSH_HOME/memory/memory.db এবং .dsh/rules.yaml উভয়ই আনইনস্টলের পরেও থেকে যায় যতক্ষণ না আপনি নিজে সেগুলো ডিলিট করছেন।

নেটওয়ার্কের মাধ্যমে dsh ওয়েব UI এক্সপোজ করা কি নিরাপদ?

এভাবে সরাসরি করা নিরাপদ নয়। dsh web ডিফল্টভাবে 127.0.0.1:3080-এ লিসেন করে এবং dsh-web-lan-access সেই বাইন্ডিং পরিবর্তন করে 0.0.0.0-এ নিয়ে যায়। এর নিজস্ব README-তে বলা হয়েছে যে, এর ফলে একই নেটওয়ার্কে থাকা যেকোনো ব্যক্তি প্রমাণীকরণ ছাড়াই এজেন্টকে অ্যাক্সেস করতে পারে, আর পাবলিক IP অ্যাড্রেসের ক্ষেত্রে এর অর্থ হলো পুরো ইন্টারনেট। কিছু মেথড (settings.*, credentials.*, llm.discoverModels) লুপব্যাক ইন্টারফেসেই সীমাবদ্ধ থাকে এবং রিমোট অরিজিন থেকে 403 এরর দেয়, যা ক্ষতির ঝুঁকি কমায় কিন্তু পুরোপুরি দূর করে না। SSH পোর্ট ফরওয়ার্ড, ssh -N -L 3080:127.0.0.1:3080 you@your-server ব্যবহার করুন অথবা পোর্টটিকে একটি প্রাইভেট নেটওয়ার্ক ইন্টারফেস এবং ফায়ারওয়াল রুলের পেছনে রাখুন এবং বাইরে থেকে অ্যাক্সেসযোগ্য করার আগে যথাযথ প্রমাণীকরণ ব্যবস্থা যোগ করুন।