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

এজেন্ট হারনেস কী এবং এটি কীভাবে কাজ করে?

এজেন্ট হারনেস হলো সেই প্রোগ্রাম যা ল্যাঙ্গুয়েজ মডেলকে ঘিরে লুপ, টুলস এবং সেশন স্টেট পরিচালনা করে। মডেল এবং হারনেসের মূল পার্থক্য ও এদের কাজের পদ্ধতি সম্পর্কে বিস্তারিত জানুন এখানে।

এজেন্ট হারনেস কী

এজেন্ট হারনেস হলো এমন একটি প্রোগ্রাম যা একটি ল্যাঙ্গুয়েজ মডেলকে ঘিরে কাজ করে এবং সেটিকে একটি এজেন্টে রূপান্তর করে। এটি সেই লুপটি পরিচালনা করে যা বারবার মডেলটিকে কল করতে থাকে। এতে টুল ডেফিনিশনগুলো থাকে যা মডেলটি ব্যবহার করতে পারে, পারমিশন রুলস থাকে যা নির্ধারণ করে কোন কলগুলো আসলে কার্যকর হবে, সেশন স্টেট থাকে যা প্রতিটি টার্নের মাঝে তথ্য ধরে রাখে এবং একটি ওয়ার্কিং ডিরেক্টরি থাকে যেখানে মূল কাজগুলো সম্পন্ন হয়। এই হারনেসের ভেতরে মডেলটিকে প্রয়োজনমতো পরিবর্তন বা অদলবদল করা যায়।

শেষের বাক্যটি মনে রাখা জরুরি। একটি মডেল নিজে থেকে শুধু প্রশ্নের উত্তর দেয় এবং তারপর আপনাকে ভুলে যায়। কিন্তু একটি হারনেস মডেলকে জিজ্ঞাসা করে পরবর্তী পদক্ষেপ কী হবে, মডেলের চাওয়া কমান্ডটি রান করে, ফলাফলটি পুনরায় মডেলে ইনপুট দেয় এবং আবার জিজ্ঞাসা করে। এই পুনরাবৃত্তিমূলক প্রক্রিয়াটিকেই মূলত "এজেন্ট" বলা হয়। যদি এই পরিভাষাগুলো নিয়ে আপনার অস্পষ্টতা থাকে, তবে AI এজেন্ট, LLM এবং অ্যাসিস্ট্যান্টের মধ্যে পার্থক্য বিষয়টি আপনাকে কোনো টুল বেছে নেওয়ার আগে শব্দগুলোর অর্থ বুঝতে সাহায্য করবে।

হারনেস (harness) এবং মডেল এক জিনিস নয়

ভেন্ডররা একই ব্র্যান্ডের নামে এগুলো বাজারজাত করায় অনেকেই এই দুটির মধ্যে গুলিয়ে ফেলেন।

dsh এবং DeepSeek ভিন্ন দুটি পণ্য। DeepSeek Harness, যা 13 আগস্ট 2026 তারিখে github.com/deepseek-ai/deepseek-harness-এ MIT লাইসেন্সের অধীনে প্রকাশিত হয়েছে, সেটি একটি Node প্রোগ্রাম যা আপনি আপনার মেশিনে ইনস্টল করেন। অন্যদিকে DeepSeek মডেলগুলো হলো এমন কিছু ওয়েট (weights) যা একটি API (application programming interface)-এর মাধ্যমে সার্ভ করা হয়। আপনি যদি dsh-কে অন্য কোনো ভেন্ডরের মডেলের দিকে নির্দেশ করেন, তবুও এটি কাজ করবে। কারণ হারনেসের কেবল এমন কিছু প্রয়োজন যা মেসেজ গ্রহণ করতে পারে এবং টুল কল (tool calls) রিটার্ন করতে পারে।

Claude Code এবং Claude একই ধরনের জুটি। Claude Code হলো একটি হারনেস: এটি একটি টার্মিনাল প্রোগ্রাম যাতে একটি লুপ, একটি পারমিশন সিস্টেম এবং ফাইল ও শেল টুল রয়েছে। Claude হলো সেই মডেল ফ্যামিলি যা এটি ডিফল্টভাবে কল করে। Codex এবং Gemini CLI-এর ক্ষেত্রেও একই বিভাজন প্রযোজ্য।

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

লুপটি আসলে কী কাজ করে

একটি হারনেস লুপের একটি ধাপ দেখতে এমন হয়। এটি ধীরে পড়ুন, কারণ হারনেসগুলোর মধ্যে প্রায় প্রতিটি পার্থক্যের উৎস এই পাঁচটি ধাপের ভেতরেই থাকে।

  1. হারনেসটি এখন পর্যন্ত হওয়া কথোপকথন এবং টুল ডেফিনিশনের একটি তালিকা মডেলের কাছে পাঠায়।
  2. মডেলটি টেক্সট অথবা কোনো টুল কল করার অনুরোধ জানিয়ে উত্তর দেয়।
  3. হারনেসটি সেই অনুরোধটিকে তার পারমিশন রুলসের সাথে মিলিয়ে দেখে এবং হয় সেটি রান করে, অথবা আপনাকে জিজ্ঞাসা করার জন্য থেমে যায়।
  4. হারনেসটি টুলটি রান করে, আউটপুট ও এক্সিট কোড ক্যাপচার করে এবং আউটপুট খুব বড় হলে তা ট্রাঙ্কেট (সংক্ষিপ্ত) করে।
  5. হারনেসটি সেই ফলাফল কথোপকথনের সাথে যুক্ত করে এবং 1 নম্বর ধাপে ফিরে যায়।

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

বাকি পার্থক্যগুলো 1 নম্বর ধাপে থাকে। হারনেসটি সিস্টেম প্রম্পটও লিখে যা প্রতিটি অনুরোধের সাথে যায়, এবং Claude Code আপনাকে সরাসরি সেই নিয়ন্ত্রণ দেয়, কারণ একটি আউটপুট স্টাইল তার পাঠানো সিস্টেম প্রম্পটকে এডিট করে এবং এর ফলে ফিরে আসা প্রতিটি উত্তর পরিবর্তিত হয়। কথোপকথন প্রতি ধাপে বড় হতে থাকে এবং একটি মডেলের নির্দিষ্ট কনটেক্সট উইন্ডো থাকে, তাই হারনেসকে সিদ্ধান্ত নিতে হয় কী বাদ দেওয়া হবে, কী সারসংক্ষেপ করা হবে এবং কী ফাইলে লিখে পরে আবার পড়া হবে। এই সিদ্ধান্তের কারণেই একই মডেল ব্যবহার করা দুটি হারনেস ভিন্ন মানের কাজ করে। যদি এই পাঁচটি ধাপ এখনো বিমূর্ত মনে হয়, তবে এর সমাধান হলো একবার নিজের একটি সাধারণ লুপ লিখে ফেলা, যা AI এজেন্ট শেখার একটি পর্যায়ক্রমিক পথ-এ শুরুতে তৈরি করতে হয়।

অধিকাংশ হারনেস এখন MCP (model context protocol)-এর মাধ্যমে এক্সটারনাল টুল যুক্ত করে, যা যেকোনো হারনেসের কাছে টুল এক্সপোজ করার একটি স্ট্যান্ডার্ড উপায়, ফলে একটি ইন্টিগ্রেশন একাধিক হারনেসে কাজ করে। একটি VPS-এ MCP সার্ভার চালানো বিষয়টি এই দিকটি কভার করে। ওয়েব সার্চ সাধারণত প্রথম টুল যা মানুষ যুক্ত করে, এবং আপনার নিজস্ব SearXNG ইনস্ট্যান্সে এজেন্টকে পয়েন্ট করা কোয়েরিগুলোকে থার্ড পার্টির বাইরে রাখে, পাশাপাশি এটি স্পষ্ট করে যে এজেন্ট এরপর যে পেজগুলো পড়ে তা লুপের ভেতরে আসা একটি আনট্রাস্টেড ইনপুট।

Agent harness বনাম agent framework

প্রতিবার নতুন কোনো harness আসার সময় এই প্রশ্নটি ওঠে এবং উত্তরগুলো একে অপরের সাথে মেলে না, কারণ ভেন্ডরদের মধ্যেও এ নিয়ে মতভেদ রয়েছে। নিচে এর একটি গ্রহণযোগ্য ব্যাখ্যা দেওয়া হলো।

Framework হলো এমন একটি লাইব্রেরি যা আপনি ইমপোর্ট করেন। লুপটি আপনি নিজেই লেখেন, কখন মডেলকে কল করবেন তা আপনিই ঠিক করেন এবং টুলের ফলাফলগুলো আপনি নিজেই হ্যান্ডেল করেন। LangChain এর একটি পরিচিত উদাহরণ: আপনি কিছু বিল্ডিং ব্লক পান এবং কোডের মাধ্যমে এজেন্ট তৈরি করেন।

Harness হলো এমন একটি প্রোগ্রাম যা আপনি রান করেন। লুপটি আগে থেকেই লেখা থাকে, টুলগুলো আগে থেকেই বিদ্যমান থাকে এবং পারমিশন মডেলের একটি ডিফল্ট সেটিংস থাকে। প্রথম কমান্ডেই আপনি একটি কার্যকর এজেন্ট পেয়ে যান এবং সেখান থেকে সেটিকে কনফিগার করেন।

ইনস্টলেশন টেস্ট সাধারণত এটি নির্ধারণ করে। যদি আপনি এটি ইনস্টল করার পর কোড লিখতে শুরু করেন, তবে এটি একটি framework। যদি আপনি এটি ইনস্টল করার পর সরাসরি সেটির সাথে যোগাযোগ (talk) করেন, তবে এটি একটি harness।

এই সীমানাটি নিয়ে বিতর্ক রয়েছে এবং এর সবচেয়ে স্পষ্ট প্রমাণ হলো LangChain-এর নিজস্ব ডকুমেন্টেশন। 2026 সালের আগস্ট পর্যন্ত এটি Deep Agents-কে LangGraph-এর ওপর ভিত্তি করে তৈরি একটি "opinionated, batteries-included" framework হিসেবে বর্ণনা করে, অথচ langchain-ai/deepagents রিপোজিটরি নিজেকে "the batteries-included agent harness" বলে দাবি করে। উভয় বর্ণনাই সঠিক। Deep Agents হলো একটি Python SDK (software development kit) যা আপনি ইমপোর্ট করেন, তাই ইনস্টলেশন টেস্ট অনুযায়ী এটি একটি লাইব্রেরি, কিন্তু এটি এত বেশি ডিফল্ট আচরণ প্রদান করে যে মানুষ এটিকে harness-এর মতোই ব্যবহার করে। Microsoft 2026 সালের আগস্টে একটি harness এবং hosted agent-কে general availability-তে নিয়ে আসে, যা প্রমাণ করে যে এই শব্দটি এখন আর কেবল jargon নয়, বরং একটি product category।

তাই আপনার কাজের ধরন অনুযায়ী প্রশ্নটি করুন। যদি লুপটি আপনি লেখেন, তবে লুপটির দায়িত্ব আপনার: retry, context trimming, permission prompt এবং কী ঘটেছে তার রেকর্ড রাখা—সবই আপনার নিয়ন্ত্রণে। যদি লুপটি আগে থেকেই তৈরি থাকে, তবে আপনি অন্যের তৈরি সমাধানগুলো গ্রহণ করছেন, যা শুরু করার জন্য অনেক দ্রুত কিন্তু পরবর্তীতে পরিবর্তন করা কঠিন।

Harness এবং chat window-এর মধ্যে পার্থক্য

Chat window এবং harness উভয়ই আপনাকে মডেলের আউটপুট দেখায়। এদের মধ্যে মূল পার্থক্য হলো কাজটি কার কম্পিউটারে সম্পন্ন হচ্ছে। Chat window-তে মডেল যে কোডই রান করুক না কেন, তা ভেন্ডরের স্যান্ডবক্সের ভেতরে এবং আপনার আপলোড করা ফাইলের ওপর কার্যকর হয়, যা সেশন শেষ হওয়ার সাথে সাথে মুছে যায়। অন্যদিকে, একটি harness আপনার চালু করা মেশিনে, আপনার ইউজার হিসেবে, আপনার আসল ফাইলগুলোর ওপর এবং আপনার এনভায়রনমেন্টে থাকা আসল ক্রেডেনশিয়াল ব্যবহার করে টুলস রান করে।

এই দুটি বাক্যই এর পুরো সুবিধা এবং ঝুঁকির সারসংক্ষেপ। এজেন্ট অবশেষে কাজটি করতে সক্ষম হয়। আবার এজেন্ট চাইলে সেই কাজ মুছেও ফেলতে পারে।

যে হারনেসগুলো বর্তমানে ব্যবহৃত হচ্ছে

এই তালিকাটি 19 আগস্ট 2026 তারিখের হিসেবে তৈরি করা হয়েছে। এই ক্যাটাগরিটি প্রতি সপ্তাহে পরিবর্তিত হয়, তাই যেকোনো রাউন্ডআপ দ্রুত পুরোনো হয়ে যায়।

  • Claude Code এবং Codex হলো ভেন্ডর হারনেস। এগুলো টার্মিনাল-কেন্দ্রিক, ডিফল্টভাবে তাদের নিজস্ব মডেলের সাথে যুক্ত এবং এগুলোতে পারমিশন হ্যান্ডলিং সবচেয়ে উন্নত। Claude Code, Cursor, Codex এবং Copilot-এর তুলনা অংশে এগুলো বিস্তারিত আলোচনা করা হয়েছে।
  • DeepSeek Harness (dsh) হলো MIT লাইসেন্সপ্রাপ্ত একটি টুল, যা একটি মূল ধারণার ওপর ভিত্তি করে তৈরি: সবকিছুই একটি প্লাগইন। ফলে মডেল, টুল, সেশন, স্যান্ডবক্স এবং ইউজার ইন্টারফেস—সবই পরিবর্তনযোগ্য। আপনি যে প্লাগইনই ইনস্টল করুন না কেন, তা এজেন্টের নিজস্ব পারমিশন নিয়ে চলে। তাই একটি dsh প্লাগইন যোগ করার আগে সেটি কী কী অ্যাক্সেস করতে পারে তা যাচাই করা এখানে অনেক বেশি গুরুত্বপূর্ণ। 19 আগস্ট 2026 তারিখে, অর্থাৎ এটি প্রকাশের ছয় দিন পর, এর GitHub স্টার সংখ্যা ছিল প্রায় 166,800।
  • Hermes, যা Nous Research থেকে এসেছে, এটি মূলত একটি কোডিং টুলের চেয়ে সাধারণ স্বয়ংক্রিয় এজেন্ট হিসেবে বেশি পরিচিত। এটি ফেব্রুয়ারি 2026 সালে MIT লাইসেন্সে মুক্তি পায় এবং এটি আপনার মেশিনের একটি লোকাল SQLite ডাটাবেসে মেমোরি ও দক্ষতা সংরক্ষণ করে। VPS-এ Hermes সেলফ-হোস্ট করা গাইডে এর বিস্তারিত প্রক্রিয়া দেওয়া আছে।
  • Omnigent হলো একটি মেটা-হারনেস: এটি Claude Code এবং Codex-সহ অন্যান্য হারনেসকে একটি API-এর অধীনে পরিচালনা করে, যেখানে শেয়ারড সেশন, স্পেন্ড ক্যাপ এবং অপারেটিং সিস্টেম লেভেল স্যান্ডবক্স সুবিধা থাকে। মাল্টি-এজেন্ট হারনেস হিসেবে Omnigent অংশে এর সুবিধাগুলো আলোচনা করা হয়েছে।
  • OneCLI হলো টিমগুলোর জন্য তৈরি একটি স্যান্ডবক্সড হারনেস। এটি এমন একটি গেটওয়ের চারপাশে তৈরি যা আউটবাউন্ড রিকোয়েস্টে আসল ক্রেডেনশিয়াল ইনজেক্ট করে, যাতে এজেন্ট নিজে কেবল প্লেসহোল্ডার কি (key) দেখতে পায়।

এগুলোর মধ্যে তিনটি প্রায়শই একই শর্টলিস্টে থাকে, তাই মডেল কাপলিং, লাইসেন্স, ম্যাচিউরিটি এবং সার্ভারে চালানোর জন্য কী কী প্রয়োজন তা জানতে DeepSeek Harness, Claude Code এবং Omnigent-এর তুলনামূলক আলোচনা পড়া জরুরি।

dsh কুইক স্টার্ট হলো একটি সিঙ্গেল কমান্ড, এবং এটি একবার চালানোই হারনেস কী তা বোঝার দ্রুততম উপায়। এটি চালানোর জন্য মেশিনে Node.js থাকা প্রয়োজন।

npx @deepseek-ai/dsh web

এটি http://127.0.0.1:3080-এ ওয়েব UI (ইউজার ইন্টারফেস) চালু করে। এটি ব্যবহারের আগে README পড়ে নিন, কারণ dsh নিজেকে ডেভেলপার প্রিভিউ হিসেবে বর্ণনা করে এবং স্পষ্টভাবে উল্লেখ করে যে ভবিষ্যতে এতে কম্প্যাটিবিলিটি নষ্ট হতে পারে এমন পরিবর্তন আসবে। যদি প্রথম কমান্ডটি সরাসরি ব্যর্থ হয় বা আপনি আশা করেননি এমন কোনো বিল্ড ডাউনলোড করে, তবে একটি নির্দিষ্ট dsh ভার্সন পিন করা এবং npx ক্যাশ পরিষ্কার করা সাধারণত সমস্যা সমাধানের কার্যকর উপায়। VPS-এ DeepSeek Harness চালানো অংশে সার্ভার ইনস্টলেশন এবং কেন সেই অ্যাড্রেসটি 127.0.0.1 দিয়ে শুরু হয় অংশে লুপব্যাক ডিফল্ট হওয়ার কারণ ব্যাখ্যা করা হয়েছে।

রাউটারগুলো হারনেসের উপরে অবস্থান করে

একটি মডেল রাউটার হলো হারনেস এবং প্রোভাইডার API-এর মধ্যে একটি লোকাল প্রক্সি। Claude Code Router এর একটি সাধারণ উদাহরণ: এটি ডিফল্টভাবে 127.0.0.1:3456-এ বাইন্ড হয়, Claude Code তার নিজস্ব ভেন্ডরের কাছে যে অনুরোধগুলো পাঠাতো তা গ্রহণ করে এবং আপনার কনফিগার করা প্রোভাইডারের কাছে সেগুলো পাঠিয়ে দেয়। হারনেস বুঝতেও পারে না যে কোনো কিছু পরিবর্তিত হয়েছে।

রাউটারগুলো বিদ্যমান কারণ মডেল পরিবর্তনযোগ্য, তাই এই পোস্টের মূল বিষয়বস্তু প্রমাণের জন্য এগুলো একটি ভালো উদাহরণ। এগুলো ঝুঁকির কেন্দ্রবিন্দুও বটে, কারণ প্রক্সি প্রতিটি প্রম্পট দেখতে পায় এবং প্রতিটি প্রোভাইডার কি (key) সংরক্ষণ করে। এটিকে একটি সুবিধা হিসেবে না দেখে অবকাঠামো হিসেবে বিবেচনা করুন। যেখানে একটি হারনেস তার API কি এবং মডেল সেটিংস রাখে তা এক স্তর নিচে একই সমস্যার সৃষ্টি করে।

VPS-এ হারনেস চালানোর সময় কী কী পরিবর্তিত হয়

আপনার ল্যাপটপ থেকে হারনেস সরিয়ে যখন কোনো ভাড়াকৃত সার্ভারে নিয়ে যান, তখন চারটি বিষয় পরিবর্তিত হয়।

ল্যাপটপের ঢাকনা বন্ধ করলেও এটি চলতে থাকে। দীর্ঘমেয়াদী কোনো কাজ আপনার যাতায়াত বা ব্যাটারির চার্জের ওপর নির্ভর করে না। এটিকে tmux-এর ভেতরে শুরু করুন এবং ডিটাচ করুন:

tmux new -s agent
# start the harness, then press Ctrl-b and then d to detach
tmux attach -t agent

রিবুটের পরেও কোনো কিছু চালু রাখতে চাইলে টার্মিনাল সেশনের চেয়ে ইউজার সার্ভিস বেশি কার্যকর:

loginctl enable-linger $USER
systemctl --user status my-agent.service

loginctl enable-linger হলো সেই অংশ যা অনেকেই এড়িয়ে যান। এটি ছাড়া, আপনার শেষ SSH (secure shell) সেশন বন্ধ হওয়ার সাথে সাথেই systemd আপনার ইউজারের সার্ভিসগুলো বন্ধ করে দেয়। ফলে আপনি লগ আউট করার সাথে সাথে এজেন্টটি বন্ধ হয়ে যায় এবং কোনো এরর মেসেজও দেখা যায় না। systemd-এর অধীনে dsh হেডলেস চালানো-তে ইউনিট ফাইলটি দেওয়া আছে। একবার একটি সেশন সার্ভারে চালু হয়ে গেলে, দ্বিতীয় সেশন চালাতে বাড়তি কোনো খরচ হয় না এবং একই মেশিনে দুটি Claude Code সেশন একে অপরের সাথে মেসেজ আদান-প্রদান করতে পারে। ফলে আপনি সকালে যে কাজটি শুরু করেছিলেন, সেটি অন্য সেশনকে হস্তান্তর করতে পারেন, আপনাকে আর নিজে থেকে কোনো কাজ করতে হবে না।

এটি আপনার কি (keys) সংরক্ষণ করে। প্রোভাইডার কি এখন সেই সার্ভারের একটি কনফিগারেশন ফাইলে থাকে। কারা এটি পড়তে পারে তা যাচাই করুন:

ls -l ~/.config

আপনার ইউজার হিসেবে চলমান যেকোনো প্রসেস এই ফাইলটি পড়তে পারে, যার মধ্যে এজেন্ট এবং এজেন্টের মাধ্যমে চালানো যেকোনো কিছু অন্তর্ভুক্ত।

এটি আপনার অন্যান্য মেশিনে পৌঁছাতে পারে। আপনার অন্যান্য বক্সের সাথে একই প্রাইভেট নেটওয়ার্কে থাকা একটি VPS এজেন্টকে সেগুলোর সাথে সংযোগ স্থাপনের পথ তৈরি করে দেয়। এটিই এর মূল উদ্দেশ্য, তবে এটিই আবার ঝুঁকির ক্ষেত্র (blast radius)।

এটি যেকোনো জায়গা থেকে অ্যাক্সেসযোগ্য। বেশিরভাগ হারনেস একটি ওয়েব UI প্রদর্শন করে এবং নিরাপত্তার খাতিরে বেশিরভাগই সেটিকে লুপব্যাক (loopback)-এ বাইন্ড করে রাখে। আপনারটি চেক করুন:

ss -tlnp | grep 3080

127.0.0.1:3080 মানে হলো শুধুমাত্র সার্ভার নিজেই সংযোগ করতে পারবে। 0.0.0.0:3080 মানে হলো যার কাছে ঠিকানা আছে, সে-ই সংযোগ করতে পারবে। বাইন্ড অ্যাড্রেস পরিবর্তন না করে বরং একটি SSH টানেলের মাধ্যমে লুপব্যাক UI-তে পৌঁছান:

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

এরপর আপনার ল্যাপটপের ব্রাউজারে http://127.0.0.1:3080 খুলুন। ট্রাফিকটি SSH সেশনের ভেতর দিয়ে যায়, তাই ইন্টারনেটে নতুন কিছু উন্মুক্ত হয় না।

এগুলোর প্রতিটিই নিরাপত্তার খাতিরে গুরুত্বপূর্ণ

একজন আক্রমণকারীর দৃষ্টিকোণ থেকে চারটি বৈশিষ্ট্য পুনরায় পড়ুন।

এটি স্বয়ংক্রিয়ভাবে চলে, তাই মডেল কোনো পাথ ভুল পড়লে তা দেখার মতো কেউ থাকে না। এটি আপনার কি (keys) সংরক্ষণ করে, তাই একটি মাত্র রিডেবল কনফিগারেশন ফাইল মানেই আপনার পুরো প্রোভাইডার অ্যাকাউন্টের নিয়ন্ত্রণ। এটি আপনার অন্যান্য মেশিনে পৌঁছাতে পারে, তাই প্রম্পট ইনজেকশন—অর্থাৎ কোনো ওয়েব পেজ বা ফাইলে লুকিয়ে রাখা নির্দেশ যা এজেন্ট পড়ে—এখন আপনার ডাটাবেস হোস্ট পর্যন্ত পৌঁছানোর পথ তৈরি করে দেয়। এটি যেকোনো জায়গা থেকে অ্যাক্সেসযোগ্য, তাই কোনো পাসওয়ার্ড ছাড়া 0.0.0.0-এ বাইন্ড করা ওয়েব UI মানেই পাবলিক ইন্টারনেটে একটি শেল।

প্রতিটি ক্ষেত্রে এর সমাধানটি সাধারণ এবং প্রতিবারই একই। আপনার নিজের অ্যাকাউন্টের পরিবর্তে এজেন্টকে তার নিজস্ব আনপ্রিভিলেজড (unprivileged) ইউজার অ্যাকাউন্ট দিন:

sudo adduser --disabled-password --gecos "" agent

ওয়েব UI-কে লুপব্যাকে (loopback) রাখুন এবং SSH-এর মাধ্যমে তা অ্যাক্সেস করুন। এজেন্টকে শুধুমাত্র প্রয়োজনীয় নূন্যতম ক্রেডেনশিয়াল দিন যা দিয়ে সে তার কাজ সম্পন্ন করতে পারে, যা AI এজেন্ট থেকে সিক্রেট দূরে রাখা-তে সঠিকভাবে আলোচনা করা হয়েছে। আপনি যখন দেখছেন না তখন যে কাজগুলো চলে, সেগুলোর জন্য সতর্ক মেশিনের চেয়ে একটি অস্থায়ী (throwaway) মেশিন ব্যবহার করা ভালো: ডিসপোজেবল VM-এ কোডিং এজেন্ট চালানো এবং VPS-এ নিরাপদে Claude Code চালানো—উভয় ক্ষেত্রেই এই পদ্ধতি অনুসরণ করা হয়।

আপনার কি একটি এজেন্ট হার্নেস (agent harness) প্রয়োজন?

যদি আপনার কাজ হয় একবারে একটি প্রশ্নের উত্তর দেওয়া, তবে একটি চ্যাট উইন্ডোই যথেষ্ট। সেক্ষেত্রে হার্নেস কেবল একটি লুপ যোগ করে যা আপনাকে তদারকি করতে হয়। একটি হার্নেস তখনই কার্যকর হয় যখন কোনো কাজ সম্পন্ন করতে বাস্তব ফাইলের ওপর অনেকগুলো ধাপের প্রয়োজন হয়, অথবা যখন আপনাকে ঘুমানোর সময়ও কাজ চালিয়ে যেতে হয়।

এই ক্যাটাগরির বেশিরভাগ টুলই নতুন। dsh-এর নিজস্ব README-তে আগস্ট 2026 অনুযায়ী ডেভেলপার প্রিভিউয়ের কথা উল্লেখ আছে। বাকিগুলো এত দ্রুত পরিবর্তিত হচ্ছে যে, আজ আপনি যে কনফিগারেশন ফাইলটি লিখবেন, তা আগামী মাসে সম্পাদনা করার প্রয়োজন হতে পারে। এটি আপনার সেটআপ ছোট এবং পুনরায় তৈরিযোগ্য (reproducible) রাখার একটি কারণ এবং আপনি কী পরিবর্তন করেছেন তা লিখে রাখারও একটি কারণ। এই একই সংযম লুপের ভেতরেও সাহায্য করে, যেখানে এমন একটি দক্ষতা যা এজেন্টকে সবচেয়ে ছোট কার্যকর পরিবর্তনের দিকে ধাবিত করে আপনাকে এমন একটি diff দেয় যা একটি আনঅ্যাটেন্ডেড রান (unattended run) শেষে আপনি সহজেই পড়তে পারবেন। একটি সার্ভারে একটি হার্নেস দিয়ে শুরু করুন, সেটিকে একটি কাজ এবং একটি সীমিত অ্যাক্সেসযুক্ত কি (key) দিন। প্রথম কাজটি এক সপ্তাহ ধরে সফলভাবে সম্পন্ন হওয়ার পরেই কেবল এর অ্যাক্সেস বাড়ান। বর্তমানে চালানোর মতো সেলফ-হোস্টেড এজেন্টসমূহ আপনার প্রথম এজেন্টটি বেছে নেওয়ার জন্য একটি ভালো জায়গা।

FAQ

এজেন্ট হারনেস (agent harness) বলতে সহজ কথায় কী বোঝায়?

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

Claude Code কি একটি মডেল নাকি হারনেস?

Claude Code একটি হারনেস। এটি একটি টার্মিনাল প্রোগ্রাম যার মধ্যে লুপ, পারমিশন সিস্টেম এবং বিল্ট-ইন ফাইল ও শেল টুল রয়েছে। Claude হলো সেই মডেল ফ্যামিলি যা এটি ডিফল্টভাবে কল করে। একই বিভাজন DeepSeek Harness (dsh)-এর ক্ষেত্রেও প্রযোজ্য, যা একটি Node প্রোগ্রাম এবং আপনি এটি ইনস্টল করেন, আর DeepSeek মডেলগুলো একটি API-এর মাধ্যমে সার্ভ করা হয়। আপনি একটি মেশিনে হারনেস ইনস্টল করেন। আপনি নেটওয়ার্কের মাধ্যমে একটি মডেলকে কল করেন।

এজেন্ট হারনেস এবং এজেন্ট ফ্রেমওয়ার্কের মধ্যে পার্থক্য কী?

ফ্রেমওয়ার্ক হলো এমন একটি লাইব্রেরি যা আপনি ইমপোর্ট করেন এবং যার ওপর ভিত্তি করে কোড লেখেন, ফলে লুপ, রিট্রাই (retries) এবং কনটেক্সট হ্যান্ডলিংয়ের নিয়ন্ত্রণ আপনার হাতে থাকে। হারনেস হলো এমন একটি প্রোগ্রাম যা আপনি সরাসরি চালান, তাই এর সবকিছু ডিফল্ট হিসেবেই থাকে যা আপনি কোড লেখার পরিবর্তে কনফিগার করেন। বাস্তবে এই দুটির মধ্যে পার্থক্য কিছুটা অস্পষ্ট: LangChain-এর Deep Agents হলো একটি ইমপোর্টেবল SDK, যাকে আগস্ট 2026 অনুযায়ী তাদের নিজস্ব রিপোজিটরিতে একটি 'ব্যাটারি-ইনক্লুডেড' এজেন্ট হারনেস বলা হয়েছে। নিজেকে প্রশ্ন করুন যে আপনি লুপটি নিজে লিখবেন কি না। এই উত্তরের ওপর ভিত্তি করেই নির্ধারিত হবে আপনার পরিস্থিতির জন্য কোন শব্দটি উপযুক্ত।

এজেন্ট হারনেস চালানোর জন্য কি আমার একটি VPS প্রয়োজন?

না। এখানে উল্লিখিত প্রতিটি হারনেস ল্যাপটপে চালানো যায়। একটি সার্ভার চারটি বিষয় পরিবর্তন করে: আপনি ল্যাপটপের ঢাকনা বন্ধ করলেও এজেন্ট চলতে থাকে, এটি আপনার কি (keys) এমন একটি মেশিনে রাখে যা সবসময় চালু থাকে, এটি আপনার অন্যান্য সার্ভারে পৌঁছাতে পারে এবং আপনি যেকোনো ডিভাইস থেকে একই সেশনে ফিরে আসতে পারেন। এর প্রতিটিই নিরাপত্তার বিষয়, তাই এজেন্টকে তার নিজস্ব ইউজার অ্যাকাউন্ট দিন এবং যেকোনো ওয়েব UI-কে 127.0.0.1-এ bind করে রাখুন।

আমি কি একই হারনেসের ভেতরে অন্য কোনো মডেল ব্যবহার করতে পারি?

সাধারণত হ্যাঁ, এবং এটিই একটি হারনেসের প্রধান বৈশিষ্ট্য। এদের বেশিরভাগই কনফিগারেশনে মডেলের নাম এবং একটি বেস URL গ্রহণ করে, তাই অন্য কোনো প্রোভাইডারের দিকে নির্দেশ করাটা কোড নতুন করে লেখার চেয়ে বরং একটি এডিট করার মতো কাজ। যেখানে কোনো হারনেস বাধা দেয়, সেখানে Claude Code Router-এর মতো একটি লোকাল রাউটার হারনেস এবং প্রোভাইডারের মাঝে বসে অনুরোধগুলো অনুবাদ করে দেয়, যা ডিফল্টভাবে 127.0.0.1:3456-এ bind থাকে। সেই প্রক্সিটির ব্যাপারে সতর্ক থাকুন, কারণ এটি প্রতিটি প্রম্পট দেখতে পায় এবং প্রতিটি কি (key) সংরক্ষণ করে।