صفحه ۲۳ از ۴۹، پروژههای عملی
پروژه 07. ساخت نخستین حلقه خودکار
در این صفحه
درس مرتبط: درس 13. از پرامپتنویسی دستی تا حلقههای خودمختار
کاری که انجام میدهید#
این پروژه مرحله گذار از «هارنس» به «حلقه» است. شما پیش از این میدانید که چگونه یک ایجنت را همراه با محیط، دستورالعملها و بازخورد مناسب تنظیم کنید — اکنون آن ساختار را به حلقهای تبدیل خواهید کرد که به طور مستقل اجرا میشود.
شما سه آزمایش پیشرونده انجام خواهید داد: ابتدا یک وظیفه را از حالت دستی به /goal تبدیل میکنید، سپس یک وظیفه پایش را به یک تایمر /loop تبدیل مینمایید، و در نهایت یک حلقه کامل سازنده-بازبین (maker-checker) میسازید تا تجربه کنید وقتی شما به بیرون از حلقه گام مینهید چه حسی دارد.
فایلهای پروژه#
مسیر مخزن: projects/project-07/
| دایرکتوری | شامل چه مواردی است | کاری که انجام میدهید |
|---|---|---|
starter/ |
یک پروژه پایگاه دانش کوچک با هارنس کامل (وضعیت نهایی P06)، شامل AGENTS.md، feature_list.json، init.sh، session-handoff.md، clean-state-checklist.md. | این هارنس را به هارنسی تبدیل کنید که بتواند به طور خودکار حلقه بزند. |
solution/ |
پیادهسازی کامل سه حلقه: حلقه هدف، حلقه تایمر، حلقه سازنده-بازبین، به همراه فایلهای وضعیت حلقه و اسکریپتهای راستیآزمایی. | مرجعی برای الگوهای طراحی حلقه و مدیریت وضعیت. |
ابزارهایی که استفاده خواهید کرد#
- Claude Code یا Codex
- Git
- هارنس کامل شما از P06
- یک مالتیپلکسر ترمینال (tmux یا screen، برای مشاهده حلقههای طولانیمدت)
- اختیاری: GitHub Actions یا cron (برای آزمایشهای پیشرفته مبتنی بر رویداد / زمانبندیشده)
مراحل#
آمادهسازی#
- از همان کامیتی که P06 را به پایان رساندید شروع کنید.
- سه شاخه ایجاد کنید:
p07-goal-loop،p07-timer-loop،p07-maker-checker. - مطمئن شوید هارنس شما کار میکند: init.sh را اجرا کنید، بررسی کنید فایل وضعیت، فهرست ویژگیها و مستندات تحویل همگی سر جای خود باشند.
- یک وظیفه هدف انتخاب کنید که میخواهید حلقه مکرراً روی آن کار کند. چیزی با اندازه متوسط و معیارهای تکمیل شفاف انتخاب نمایید — به عنوان مثال: «افزودن آزمونهای واحد به تمام ماژولها و رسیدن به پوشش 80%» یا «افزودن اعتبارسنجی ورودی به تمام اندپوینتهای API».
آزمایش 1: حلقه هدف — از اجرای دستی تا اجرای خودکار#
به شاخه p07-goal-loop بروید.
-
نوشتن شرح هدف: وظیفه انتخابی خود را به یک فایل
goal.mdتبدیل کنید که شامل موارد زیر باشد: - هدف شفاف («چه چیزی اتمام کار محسوب میشود») - روش راستیآزمایی («چگونه اتمام کار تأیید شود» — اجرای آزمونها؟ اجرای لینت؟ بررسی پوشش آزمون؟) - شرط توقف («چه زمانی باید متوقف شود» — حداکثر نوبتها؟ محدودیت زمانی؟ سقف هزینه؟) - محدودیتها («به چه مواردی نباید دست زد» — پیکربندی پروداکشن، اسکیمای دیتابیس، و غیره) -
نخستین اجرای دستی: خودتان وظیفه را به صورت دستی به ایجنت بدهید. ثبت کنید چند نوبت طول کشید، چند بار مداخله کردید، و کیفیت نتیجه چگونه بود. این خط پایه شماست.
-
اجرا با
/goal: از همانgoal.mdبه عنوان ورودی استفاده کنید و آن را در حالت/goalاجرا نمایید. ایجنت تا زمانی که به هدف برسد یا شرط توقف فعال شود، به تنهایی حلقه میزند. -
مقایسه نتایج: - تفاوت در تعداد نوبتها - تفاوت در تعداد مداخلههای شما - تفاوت در کیفیت نتیجه (با استفاده از استاندارد راستیآزمایی یکسان) - تفاوت در زمانی که صرف کردید
-
بازنگری در goal.md: اگر نتایج ضعیف بود، شرح هدف را اصلاح کرده و دوباره اجرا کنید. این کار را تا زمانی که از نتایج راضی شوید، یا حد توانایی یک حلقه هدف در این وظیفه را تأیید کنید، ادامه دهید.
آزمایش 2: حلقه تایمر — تبدیل پایش به یک ضربآهنگ#
به شاخه p07-timer-loop بروید.
-
انتخاب یک وظیفه پایش: یک بررسی تکراری پیدا کنید که معمولاً به صورت دستی انجام میدهید. به عنوان مثال: - اجرای آزمونها هر یک ساعت و رفع شکستها - بررسی بهروزرسانیهای امنیتی وابستگیها هر روز صبح - بررسی نقض سبک کدنویسی پس از هر کامیت - اسکن دورهای کامنتهای TODO برای دیدن مواردی که کهنه شدهاند
-
نوشتن پرامپت/اسکریپت پایش: مراحل پایش را به طور شفاف مشخص کنید — چه چیزی بررسی شود، در صورت بروز مشکل چه کاری انجام گیرد، و چه زمانی انسان فراخوانده شود.
-
اجرا با
/loop(یا اتوماسیون Thread در Codex): - یک فاصله زمانی معقول تنظیم کنید (10 تا 30 دقیقه پیشنهاد میشود — کوتاهتر از آن شما را کلافه میکند، طولانیتر از آن اثرش را نخواهید دید) - بگذارید حداقل 2 ساعت اجرا شود (یا بروید سراغ کارهای دیگر و بعداً برگردید) -
ثبت نتایج: - چند مشکل پیدا کرد؟ - چند مورد را خودش برطرف کرد؟ - چند مورد مثبت کاذب (false positive) بودند؟ - چند مورد را بدتر کرد؟ - چه مقدار زمان صرف پیگیری نتایج آن کردید؟
-
بازنگری: آیا این وظیفه پایش ارزش خودکارسازی را دارد؟ زمان ذخیرهشده را در برابر زمان صرفشده برای پیگیری مقایسه کنید. اگر ارزش ندارد، آیا وظیفه اشتباهی انتخاب کردهاید، یا حلقه بد طراحی شده است؟
آزمایش 3: حلقه سازنده-بازبین — کنار کشیدن خود از حلقه#
به شاخه p07-maker-checker بروید.
این مهمترین آزمایش از این سه آزمایش است. شما یک حلقه کامل خواهید ساخت که نیازی به حضور شما ندارد:
-
طراحی ساختار حلقه: - ایجنت سازنده (Maker): پیادهسازی میکند، کد مینویسد، فایلها را اصلاح میکند - ایجنت بازبین (Checker): راستیآزمایی میکند، آزمونها را اجرا میکند، بازبینی کد انجام میدهد، قبولی / ردی را اعلام مینماید - فایل وضعیت (
loop-state.md): دور فعلی، کارهای انجامشده، نتایج راستیآزمایی و گام بعدی را ثبت میکند - شرط توقف: N قبولی متوالی، یا رسیدن به حداکثر دورها -
نوشتن سه پرامپت: - دستورالعملهای سازنده (چه کاری انجام دهد، چگونه انجام دهد، به چه چیزهایی دست نزند) - دستورالعملهای بازبین (چه چیزی را راستیآزمایی کند، چگونه راستیآزمایی کند، چه چیزی قبولی محسوب میشود، چگونه بازخورد دهد) - منطق کنترل حلقه (چه کسی اول برود، تحویل چگونه کار کند، دور بعدی چگونه آغاز شود)
-
اجرای حداقل 5 دور: - دور 1: سازنده پیادهسازی میکند ← بازبین راستیآزمایی میکند ← رد میشود ← بازخورد به سازنده - دور 2: سازنده بر اساس بازخورد اصلاح میکند ← بازبین راستیآزمایی میکند ← … - … - تا زمان قبولی متوالی، یا توقف توسط شما
-
ثبت وضعیت هر دور: - شماره دور - کاری که سازنده انجام داد - مشکلاتی که بازبین پیدا کرد - قبولی / ردی - آیا شما مداخله کردید؟ (اگر بله، چرا؟)
-
مرور گذشتهنگر نهایی (retro): - چند بار مداخله کردید؟ چرا؟ - اگر مداخله نمیکردید چه اتفاقی میافتاد؟ - آیا بازبین هیچ مشکلی را جا انداخت؟ - آیا سازنده یک اشتباه را مدام تکرار میکرد؟ - سقف کیفی این حلقه کجاست؟ توانایی سازنده، یا توانایی بازبین؟
نحوه اندازهگیری نتایج#
| سنجه | آزمایش 1 (هدف) | آزمایش 2 (تایمر) | آزمایش 3 (سازنده-بازبین) |
|---|---|---|---|
| نرخ تکمیل وظیفه | آیا به هدف رسید؟ | چند چرخه پایش اجرا شد؟ | چند دور تا قبولی طول کشید؟ |
| مداخلههای انسانی | چند بار وارد عمل شدید؟ | چقدر زمان صرف پیگیری کردید؟ | چند بار مداخله کردید؟ |
| کیفیت نتیجه | در مقایسه با حالت دستی چگونه است؟ | نرخ مثبت کاذب؟ موارد جاافتاده؟ | بازبین چند مشکل را پیدا کرد که شما متوجه نمیشدید؟ |
| زمان ذخیرهشده | چقدر زمان صرفهجویی کردید؟ | آیا ارزش خودکارسازی را دارد؟ | زمان صرفشده برای طراحی حلقه در برابر زمان ذخیرهشده |
| قابلیت اطمینان | آیا شرط توقف قابل اعتماد بود؟ | آیا از کنترل خارج شد؟ | آیا حلقه میتواند در همان نقطه گیر کند؟ |
آنچه باید تحویل دهید#
goal.md(شرح هدف آزمایش 1، حداقل در دو نسخه بازنگریشده)- یادداشتهای مقایسهای آزمایش 1: اجرای دستی در برابر حلقه هدف
- پرامپت پایش آزمایش 2 + لاگ اجرای 2 ساعته
- سه پرامپت آزمایش 3 (سازنده / بازبین / کنترل حلقه)
- فایل
loop-state.mdآزمایش 3 (ثبت حداقل 5 دور) - مرور گذشتهنگر نهایی: آموختهها از هر سه آزمایش، نحوه تغییر درک شما از مهندسی حلقه، چه مواردی کاندیدای مناسبی برای حلقهسازی هستند و چه مواردی نیستند
درسهای مرتبط#
- درس 13 — از پرامپتنویسی دستی تا حلقههای خودمختار
- درس 12 — بر جای گذاشتن یک تحویل تمیز در پایان هر نشست (هر دور از یک حلقه به وضعیت تمیز نیاز دارد)
- درس 11 — مشاهدهپذیر ساختن زمان اجرای ایجنت (باید ببینید درون حلقه چه میگذرد)
- درس 05 — زنده نگهداشتن زمینه در طول نشستها (فایلهای وضعیت حلقه امتداد فایلهای وضعیت هستند)