durable-harness ورسل: ایجنتهای کدنویسی که با کرش از کار نمیافتن
خلاصهٔ کاملتر
ورسل تو این پست پکیج اوپنسورس durable-harness رو معرفی کرده. مشکلی که حل میکنه اینه: harnessها (یعنی برنامههایی مثل Claude Code یا Codex که مدل رو به ابزارها و فایلها وصل میکنن) برای پروسههای طولانی ساخته شدن و session رو تو حافظه نگه میدارن. رو لپتاپ این مشکلی نیست، ولی اگه بخوای ایجنت شبانهروز تو کلاد کار کنه، یه کرش یا قطع شبکه یعنی از دست رفتن کار.
به گفتهٔ ورسل، حتی با یه VM و دیسک دائمی هم مشکل حل نمیشه، چون VM خودش ثبت نمیکنه کدوم فراخوانی مدل یا ابزار تموم شده. durable-harness همین کارو میکنه: قبل از هر فراخوانی مدل یا ابزار یه «intent» تو لاگ مینویسه و بعد از تموم شدنش نتیجه رو. خود turn هم با یه پیام صف (queue) پشتیبانی میشه؛ اگه function وسط کار بمیره، صف turn رو میده به یه function جدید که لاگ رو میخونه و ادامه میده.
نتیجهش اینه که فراخوانیهای تمومشده دیگه اجرا نمیشن و از لاگ خونده میشن، پس پول توکن یه فراخوانی مدل رو دوبار نمیدی. ابزاری که وسط کار قطع شده، اگه replay: 'safe' داشته باشه دوباره اجرا میشه؛ وگرنه به مدل گفته میشه «شاید اجرا شده باشه» و خود مدل تصمیم میگیره چک کنه یا نه. مثلاً خوندن فایل یا چک کردن CI امنه، ولی ریفاند یا کامنت گذاشتن روی PR باید 'never' باشه که دوبار انجام نشه:
{
name: 'refund_order',
description: 'Refunds an order',
replay: 'never', // never runs twice
execute: async ({ id }) => JSON.stringify(await refundOrder(id)),
}زیرساخت این کار چیزیه که ورسل بهش World میگه، یعنی بکاند پایدار Workflow SDK که لاگ، صف و استریم رو پشت یه interface جمع کرده. روی ورسل از Vercel World استفاده میشه، تو توسعه از فایلهای لوکال، و روی سرور خودتون از Postgres، MongoDB، Redis یا Turso. برای رفتن به Postgres فقط دو تا متغیر محیطی لازمه و کد ایجنت عوض نمیشه. فایلهای session خود harnessها، مثل transcript تو Claude Code یا rollout تو Codex، هم تو لاگ کپی میشن تا بعد از کرش دوباره ساخته بشن.
برای کار با فایل و شل هم سه گزینه هست: virtual() فایلها رو تو لاگ نگه میداره و یه شل سازگار با bash بدون دسترسی به شبکه میده که برای کارهای کوچیک خوبه؛ virtual({ durable: false }) فقط برای کار موقته و آخر هر turn پاک میشه؛ و sandbox() یه Vercel Sandbox با پوشهٔ /workspace روی یه Drive دائمی میده که برای پروژههای واقعی و طولانی مناسبه. تو تب Agent Runs ورسل هم trace هر session، با turnهایی که بعد از کرش ادامه پیدا کردن، دیده میشه.
نکات کلیدی:
- durable-harness برای Pi، OpenCode، Codex و Claude Code کار میکنه و خود harness رو تغییر نمیده
- هر فراخوانی مدل و ابزار قبل و بعد از اجرا تو یه لاگ پایدار ثبت میشه
- فراخوانیهای تمومشده بعد از کرش دوباره اجرا نمیشن و توکن دوبار حساب نمیشه
- ابزارها با replay: 'safe' یا 'never' مشخص میکنن بعد از کرش دوباره اجرا بشن یا نه
- بکاندهای پشتیبانیشده: Vercel، فایل لوکال، Postgres، MongoDB، Redis و Turso
- سه حالت فایل: virtual()، virtual({ durable: false }) و sandbox()




