دستورهایی که هر بار خوانده میشوند
دوشنبه، لیلا به عاملش میگوید گزارشهای ماهانه در پوشهی reports/ هستند، عددها همیشه با ویرگول هزارگان نوشته میشوند و هرگز نباید به پوشهی archive/ دست بزند. عامل کارش را خوب انجام میدهد. سهشنبه لیلا نشست تازهای شروع میکند. این بار عامل کل رایانه را برای پیدا کردن گزارشها میگردد، عدد را 12500 مینویسد و پیشنهاد میکند پوشهی archive/ را مرتب کند.
هیچ چیز خراب نشده است. عامل فقط هیچوقت اینها را نمیدانست.
لیلا همهی اینها را دیروز توضیح دادم. چرا پروژهی من را یاد نمیگیرد؟
امید برگرد به اینکه مدل چطور کار میکند. مدل کِی چیزی یاد میگیرد؟
لیلا در زمان آموزش. بعد از آن عددهایش ثابت میمانند. بین درخواستها هم چیزی نگه نمیدارد، چون مدل بیحافظه است.
امید پس سهشنبه دربارهی پروژهات چه میداند؟
لیلا فقط چیزی که در زمینهی سهشنبه هست. یعنی پیام تازهی من و دستورهای خودِ برنامه.
امید درست است. اگر بخواهی چیزی را در همهی نشستها بداند، چه باید بشود؟
لیلا کسی باید هر بار آن را در زمینه بگذارد. میتوانم اول هر نشست یک پاراگراف را بچسبانم... ولی یادم میرود، و حوصلهام هم سر میرود.
امید پس چسباندن را به برنامه بسپار. پاراگراف را یک بار در یک فایل بنویس. در آغاز هر نشست، برنامهی دورِ مدل فایل را میخواند و آن را در زمینه میگذارد، کنار پرامپت سیستمی. مدل هر بار پیش از اولین پیامِ تو آن را میبیند.
لیلا پس پروژهی من را یاد نمیگیرد. هر صبح از نو دربارهاش به او گفته میشود.
امید دقیقاً. و چون آن را نوشتهای، هر صبح همان چیز به او گفته میشود.
فایلهای دستورها
فایلِ دستورها (instruction file) یک فایل متنیِ ساده است با یادداشتهایی دربارهی یک پروژه، که برنامهی عامل آن را در آغاز هر نشست (session) میخواند و به زمینه اضافه میکند. مدل هرگز آن را «یاد نمیگیرد». هر نشست دوباره آن را میخواند.
در Claude Code نام این فایل CLAUDE.md است. پسوند .md یعنی فایل به زبان Markdown نوشته شده است: متن ساده با چند نشانه، مثل # برای عنوانها. این فایل میتواند در چند جا باشد:
~/.claude/CLAUDE.mdدر پوشهی خانگیِ خودتان: یادداشتهای شخصیِ شما که در همهی پروژهها خوانده میشوند («چیزها را ساده توضیح بده.»).CLAUDE.mdدر پوشهی پروژه: یادداشتهایی دربارهی همین پروژه. تیمها معمولاً آن را کنار فایلهای پروژه نگه میدارند تا عاملِ همه یادداشتهای یکسانی بگیرد.CLAUDE.mdدر یک زیرپوشه: فقط اولین باری خوانده میشود که عامل با فایلهای آن پوشه کار میکند. پس تا وقتی به کار نیاید، هزینهای ندارد.
بسیاری از عاملهای دیگر (Codex، Cursor، Gemini CLI و دیگران) فایلی به نام AGENTS.md را میخوانند. این یک قالب باز است که قرار است برای هر عاملی کار کند. اگر پروژهای CLAUDE.md نداشته باشد، Claude Code فایل AGENTS.md را میخواند. یک CLAUDE.md هم میتواند با خطی مثل @AGENTS.md فایل دیگری را در خودش بیاورد. اینطور یک دسته یادداشت به کار همهی عاملها میآید.
این فایلِ لیلا است، بعد از یک هفته:
# Monthly reports
- Reports are in reports/YYYY-MM/. Templates are in templates/.
- Write numbers with a comma for thousands: 12,500, not 12500.
- Never change anything in archive/. It is the legal record.
- Run `python check_report.py <file>` after editing a report.
- Charts use the brand colours in templates/colours.md.پنج خط: گزارشها و قالبها کجا هستند، عددها چطور نوشته شوند، پوشهی بایگانی دست نخورد چون سابقهی رسمی است، بعد از ویرایش هر گزارش کدام فرمان اجرا شود، و رنگهای نمودارها از کجا بیایند. هر کدام از این خطها جلوی یک بار تذکر دادن را میگیرد. به وجه مشترکشان دقت کنید: مشخصاند (یک پوشه، یک فرمان، یک نمونه) و در هر نشست درستاند.
چه چیزی بنویسیم و چه چیزی را کنار بگذاریم
هر خطِ فایلِ دستورها در همهی درخواستهای همهی نشستها فرستاده میشود. همین آن را پرقدرت میکند، و همین آن را گران میکند. سه نتیجه دارد.
توکن خرج میکند. یک فایل ۲٬۰۰۰ خطی در همهی درخواستها همراه است، چه کار به آن نیاز داشته باشد چه نه. (در درسی جلوتر میبینید که متنی که در آغاز هر درخواست تکرار میشود ارزانتر میشود، ولی جایش در پنجرهی زمینه همچنان گرفته میشود.)
برای توجه رقابت میکند. یادتان هست در زمینهی شلوغ چه میشود: هرچه متن بیشتر باشد، راحتتر یک خط از چشم میافتد. ده خطِ دقیق بهتر از سیصد خطِ کلی دنبال میشوند. راهنمای Claude Code پیشنهاد میکند هر فایل کمتر از حدود ۲۰۰ خط باشد.
راهنماست، نه قفل. مدل این فایل را مثل هر متن دیگری میخواند: متنی که معمولاً کارش را بهشدت جهت میدهد. اگر چیزی باید هر بار و بیاستثنا انجام شود، درسی جلوتر ابزاری را نشان میدهد که به یادِ مدل بستگی ندارد.
پس اینها در فایل جا دارند: فرمانهای ساختن، آزمودن یا بررسی کردن؛ جای چیزها؛ قاعدهها و قراردادهای کار؛ اشتباههایی که عامل مدام تکرار میکند. اینها جا ندارند: سندهای بلند (به جایشان نشانی بدهید: «راهنمای برند در docs/brand.md است»)، چیزهایی که هر هفته عوض میشوند، و توصیههای کلی که مدل خودش رعایت میکند («کد تمیز بنویس»).
در Claude Code، فرمان /init از عامل میخواهد پروژه را بگردد و اولین CLAUDE.md را برایتان بنویسد. فرمان /memory هم فایلهای دستورهایتان را برای ویرایش باز میکند. تغییرِ فایل اصلی از نشست بعدی (یا بعد از /clear) اثر میکند.
امتحان کنید
اگر عامل دارید، پوشهی یک پروژه را باز کنید و بپرسید: «پیش از خواندن هر فایلی، دربارهی این پروژه چه میدانی؟» بعد یک CLAUDE.md (یا AGENTS.md) با سه خطِ مشخص بسازید، نشست تازهای شروع کنید و دوباره بپرسید. در یک دستیار گفتوگو، دنبال تنظیمی به نام «دستورهای سفارشی» یا «دستورهای پروژه» بگردید. ایده همان است.
درست به کار بردن
- بار دومی که عامل را اصلاح کردید، یک خط اضافه کنید. یک بار لغزش است؛ دو بار یعنی دستوری کم است.
- خطهایی بنویسید که بشود بررسیشان کرد. «از قالبِ templates/report.md استفاده کن» را میشود دنبال و بررسی کرد؛ «حرفهای به نظر برسد» را نه.
- کوتاه نگهش دارید و هرس کنید. ماهی یک بار آن را بخوانید و هر چه دیگر درست نیست پاک کنید. خطِ غلط هم به همان دقتِ خطِ درست دنبال میشود.
- به سندهای بلند نشانی بدهید، نه اینکه آنها را بچسبانید. عامل هر وقت لازم باشد میتواند فایلی را باز کند، ولی نمیتواند چیزی را که شما به همهی درخواستها تحمیل کردهاید نخوانده بگیرد.
واژههای این درس
- فایلِ دستورها (instruction file) - فایلی متنی با یادداشتهایی دربارهی یک پروژه، که برنامهی عامل در آغاز هر نشست میخواند و در زمینه میگذارد
- نشست (session) - یک دورهی کار با عامل، از آغاز تا پایان یک گفتوگو
- CLAUDE.md - فایلِ دستورهای Claude Code، در پوشهی خانگی، پوشهی پروژه یا یک زیرپوشه
- AGENTS.md - قالبی باز برای فایلهای دستورها که عاملهای مختلف زیادی آن را میخوانند
ایدهی اصلی
عامل پروژهی شما را یاد نمیگیرد؛ در آغاز هر نشست از نو دربارهاش به او گفته میشود. فایلِ دستورها راهی است که یک بار بگویید و هر بار گفته شود. کوتاه، مشخص و درست نگهش دارید، چون هر خطش در همهی درخواستها خوانده میشود.