هارنس ( Harness ) چیه؟

هیچکدوم از ما تکلیفمون با کلمه AI مشخص نیست! یه کلمه انداختیم وسط و هرکی هم منظورش از AI یه چیز متفاوت هست و خلاصه من روزی نیست که بابت این موضوع مکافات نداشته باشم و باید از زیر زبون ملت بکشم بیرون که آقا این AI که داری میگی خوردنیه یا پوشیدنی.

هارنس ( Harness ) چیه؟

هیچکدوم از ما تکلیفمون با کلمه AI مشخص نیست! یه کلمه انداختیم وسط و هرکی هم منظورش از AI یه چیز متفاوت هست و خلاصه من روزی نیست که بابت این موضوع مکافات نداشته باشم و باید از زیر زبون ملت بکشم بیرون که آقا این AI که داری میگی خوردنیه یا پوشیدنی.

این پست رو با الهام از مقاله Theo نوشتم که واقعا یکی از بهترین توضیحاتی بود که تا حالا در مورد هارنس خوندم و من فقط با چاشنی خودم بازنویسیش کردم. اگه زبانت خوبه حتما برو اصل مطلب رو بخون.

حالا اگه بخوای واقعا بفهمی اون چیزی که بهش میگی AI چطوری داره کار میکنه، باید این کلمه رو بشکونی و تک تک قطعاتش رو جدا ببینی و یکی از اون قطعات که تقریبا هیچکس درست توضیحش نمیده و اتفاقا کاربردی ترین قطعه هم هست، هارنسه!

ما انسان ها از اینترفیس استفاده میکنیم

منظور از اینترفیس همون رابط کاربری هست، گیر ندید :)))

بنی بشر برای استفاده از کامپیوتر از یه اینترفیس باید استفاده کنه، حالا این اینترفیس میتونه ترمینال باشه، میتونه یه وبسایت و یا یه اپلیکیشن باشه و حالا هرچیزی که که رابط بین شما و کامپیوتر هست.

حالا پشت اون اینترفیس هم یه سری کد هست که داره اجرا میشه یعنی یه نفری اومده اون کد رو نوشته و یه اینترفیس درست کرده که شما ازون اینترفیس در قالب دکمه و شورتکات و کامند و این چیزا استفاده میکنی یا حتی میری اینترفیس خودتو درست میکنی میدی بقیه استفاده کنن.

مثلا کروم یه اینترفیسه، Claude Code یه اینترفیسه، ChatGPT یه اینترفیسه، همین بلاگ منم یه اینترفیسه!

یه نکته هم اینه که ما اکثر مواقع به اون کدی که زیر اینترفیس هست کاری نداریم و نمیبینیمش و ما فقط با خود اینترفیس سر و کار داریم.

آیا LLM ها هم از اینترفیس استفاده میکنن؟

خب حالا بریم سراغ LLM ها، یه LLM به صورت پیش فرض فقط و فقط و فقط یه کار بلده و اونم اینه که متن تولید کنه و هیچ کار دیگه ای نمیتونه بکنه!

برای اینکه یه LLM بتونه یه کاری فراتر از تولید متن انجام بده، یه ابزار یا همون Tool نیاز داره و امروزه اکثر مدل ها یطوری train شدن که بتونن با ابزار هایی مثل read_file و edit_file و bash و search و اینجور چیزا کار کنن.

اگه هنوز نمیدونی tool چیه و tool calling چطور کار میکنه، قبلا یه رایت آپ راجع بهش نوشتم، اول اونو بخون بعد برگرد اینجا.

ولی نکته کنکوری اینجاس که LLM هنوزم فقط داره متن میفرسته و نمیتونه مثل منو شما رو یه دکمه کلید کنه.

پس ما به یه فرمت متنی خاص نیاز داریم که LLM با استفاده از اون بگه "الان باید فلان کد اجرا بشه". مثلا فرض کن به LLM میگیم که برای صدا زدن ابزار ها از این فرمت استفاده کن:

<read_file name="README.md">

حالا LLM میدونه که میتونه با این فرمت جواب بده ولی این هنوزم فقط یه متنه و به خودی خود هیچ کاری نمیکنه و مثل این میمونه که کامپیوتر خاموشه و شما داری روی کیبورد تایپ میکنی و موس رو تکون میدی.

یه چیزی باید این جواب ها رو بخونه، بفهمه که LLM چی میخواد، و بعد کد مربوطه رو اجرا کنه.

پس برای اینکه یه LLM واقعا بتونه یه کاری انجام بده، این چیزا لازمه:

۱. ابزار هایی که بتونن کاری انجام بدن ( read_file ، edit_file ، bash ، search و غیره )

۲. یه سینتکس مشخص که LLM بتونه با متن اون ابزار ها رو صدا بزنه.

۳. یه سیستم که جواب LLM رو بخونه ( parse کنه )، اون سینتکس رو تشخیص بده و کد مربوطه رو اجرا کنه.

۴. یه روش که نتیجه اجرای ابزار رو برگردونه به LLM.

۵. یه لیست از ابزار های در دسترس به همراه توضیح اینکه هر کدوم چیکار میکنن و چطوری باید ازشون استفاده کرد.

مجموع این پنج تا، میشه هارنس. تمام!

هارنس چیز پیچیده و عجیب غریبی نیست و یه لایه اس که بین LLM و دنیای واقعی میشینه و متن های LLM گرامی، جامه عمل میپوشانه و نتیجه اون عمل رو دوباره به متن تبدیل میکنه و فرو میکنه تو حلق LLM.

خب مگه Claude Code خودش هارنس نیست؟

یه جورایی هست و یه جورایی نیست.

این Claude Code از دو تا بخش تشکیل شده: اینترفیس و هارنس.

وقتی شما تو ترمینال claude رو میزنی، یه TUI باز میشه و وقتی تو اپ دسکتاپ Claude میری تو تب code ، یه GUI باز میشه و هیچکدوم از این دو تا هارنس نیستن بلکه هردوی اینا اینترفیس هستن!

بعد اون زیر Claude Code داره از Anthropic Agent SDK استفاده میکنه تا با ایجنت کار کنه و ChatGPT هم همین کارو میکنه و اپ ChatGPT ( یا همون کدکس سابق ) با یه چیزی به اسم Codex App Server که داخل CLI قرار داره صحبت میکنه.

حالا چرا مردم اینارو باهم قاطی میکنن؟ چون هم Claude Code و هم Codex هارنس رو داخل اپ خودشون جا دادن و شما واقعا از بیرون فقط یه چیز واحد میبینی و تفاوت این دوتا حالیت نمیشه!

ولییی همون هارنس رو میشه داخل اپ های دیگه هم استفاده کرد!

چند تا مثال:

  • هارنس Cursor داره تو Grok Bot استفاده میشه.
  • یا Anthropic Agents SDK و Codex App Server دارن تو T3 Code استفاده میشن.
  • یا Pi داره تو OpenClaw استفاده میشه.

خلاصه اینکه هارنس یه لایه جداگانه هست که معمولا هیچوقت مستقیم به آدمی که داره از اپ استفاده میکنه نشون داده نمیشه.

ابزار ها دست کیه؟

حالا بیا هارنس رو یه آشپزخونه تصور کنیم.

آشپزخونه کلی ابزار داره. قابلمه و ماهیتابه و چاقو و کفگیر و مخلوط کن و هزار تا چیز دیگه.

ولی هیچ آشپزخونه ای نمیاد هررررر چیزی که برای آشپزی لازم هست رو در اختیار شما بذاره.

هارنس های خوب با همین فرض ساخته میشن و به کاربر اجازه میدن که ابزار های خودشو هم بتونه با خودش بیاره.

البته که اکثر ابزار های مهم رو خود هارنس بهت میده و مثلا Codex و Claude Code جفتشون کلی ابزار داخل خودشون دارن در حالی که هارنس هایی مثل Pi خیلی مینیمال تر هستن و چیز زیادی داخلشون نیست.

بعد شما میتونی کلی ابزار سفارشی هم اضافه کنی. مثلا پلاگین TypeScript که به LLM یه سری ابزار میده تا کدتو چک کنه، یا پلاگین CUA که به ایجنت اجازه میده کامپیوترت رو کنترل کنه و این حرفا.

حالا یه نکته خیلی مهم که Theo تو مقاله اش روش تاکید کرده و منم خیلی دوستش داشتم:

نه انسان و نه LLM هیچکدوم نمیتونن مستقیم ابزار ها رو ببینن یا بهشون دست بزنن!!

ما اصلا راهی نداریم که بفهمیم این ابزار ها وجود دارن یا نه و این هارنسه که ابزار ها رو هم به LLM و هم به اینترفیس ( که ما ازش استفاده میکنیم ) نشون میده.

یعنی یه لایه ای هست که بهش میگن tool plane و هم من و شما و هم LLM بیرون این لایه ایستادیم و فقط از طریق هارنس میتونیم باهاش کار کنیم.

حالا MCP وارد میشود

این MCP یا Model Context Protocol یه استاندارده که کار دسترسی هارنس به بیرون رو فراهم میکنه

ساده بخوام بگم:

  • اون Tool که گفتم یعنی "همینجا یه کدی رو اجرا کن تا یه کاری انجام بشه".
  • ولی MCP یعنی "یه ریکوئست به یه جای دیگه بزن تا یه کاری انجام بشه".

ابزار ها کد رو مستقیم در اختیارت میذارن ولی MCP اجازه میده کد یه جای دیگه و رو یه کامپیوتر دیگه ای باشه ولی LLM هنوزم بتونه ازش استفاده کنه.

رایج ترین استفاده از MCP اینه که یه سری دیتا رو در اختیار LLM بذاری.

میخوای ChatGPT ایمیل هاتو بخونه -> MCP

میخوای Claude آنالیتیکس سایتتو ببینه -> MCP.

یه مثال خوب دیگه از تئو که قضیه رو خیلی روشن میکنه:

اکستنشن های Chrome یه جورایی شبیه Tool هستن و میتونن نحوه کار یه وبسایت رو تغییر بدن و این کارو هم با اجرای کد روی کامپیوتر شما داخل Chrome انجام میدن.

ولی MCP ها بیشتر شبیه وبسایت هستن و لازم نیست چیزی نصب کنی و فقط کافیه URL رو بدونی.

به محض اینکه URL رو داشته باشی، تمام اطلاعاتی که برای استفاده ازش لازمه رو ( قاعدتا ) بهت میده.

اگه بخوایم برگردیم به مثال آشپزخونه، MCP ها تقریبا مثل دستور پخت هستن و یه روش برای انجام یه کار هستن.

یعنی یه نفر میتونه یه کتاب آشپزی رو بیاره بذاره داخل این آشپزخونه که گفتم اصلا نحوه کار آشپزخونه هم هیچ تغییری نده و آشپز هم اگه بخواد میره سراغ اون کتاب و اگه نخواد اصلا نگاهشم نمیکنه و هیچی هم تغییر نمیکنه.

خب پس ایجنت چیه؟

ایجنت یعنی ترکیب هارنس و LLM!

یعنیLLM ها فقط متن تولید میکنن و هیچ کار دیگه نمیکنن و هارنس هم فقط یه آشپزخونه است و خودش نمیتونه هیچ غذایی بپزه ولی ترکیب این دو تا با هم میشه "ایجنت"!

و ایجنت های مختلفی که میبینی، خیلی وقتا فقط کانفیگ های مختلف از یه هارنس هستن، یعنی ابزار های سفارشی متفاوت و دستورالعمل های متفاوت و MCP های متفاوت و این داستانا.

من قبلا یه رایت آپ هم راجع به ایجنت ها و تفاوتشون با workflow ها نوشتم که اگه نخوندی حتما بخون.

جمع بندی

حالا که همه قطعات رو داریم، بیا یه بار همه رو کنار هم بذاریم:

  • آشپز = LLM
  • آشپزخونه = هارنس
  • ابزار های آشپزخونه = Tool ها
  • کتاب آشپزی = MCP
  • رستوران = اپلیکیشنی که شما باهاش کار میکنی ( مثل T3 Code )

تمام! حالا هم پاشو برو یه لیوان آب بخور چون شما کاکتوس نیستی و بدنت نیاز به مایعات داره. 🌵

با تشکر بوس بوس خدافظ. 👋