iAct

Act on Ai

چطور توی یه پروژه‌ی واقعی با Claude Code کار می‌کنم؛ فلوی کامل از تیکت تا Pull Request


بیشتر محتوایی که درباره‌ی هوش مصنوعی و کدنویسی هست، روی پروژه‌های کوچیک و از صفر تمرکز داره. ولی سؤال واقعی برای خیلی از ماها اینه: چطور می‌شه از هوش مصنوعی توی یه پروژه‌ی واقعیِ پروداکشن — با میلیون‌ها کاربر و یه ساختار مرتب و حرفه‌ای — استفاده کرد؟

این مقاله دقیقاً همینه. من هر روز توی یه استارتاپ هوش مصنوعی توی اسپانیا (Luzia) کار می‌کنم؛ یه اپ چت هوش مصنوعی با کلی کاربر، که بخش‌های مختلفی مثل چت، فید ایده‌ها و یه سری ابزار (مثل ادیت عکس و تولید ویدیو) داره. می‌خوام فلوی واقعی روزانه‌م با Claude Code رو قدم‌به‌قدم نشون بدم. این یکی برای برنامه‌نویس‌هاییه که چند ساله کد می‌زنن؛ یه‌کم پیشرفته‌تره و اگه تازه‌کاری ممکنه بعضی جاهاش سخت باشه، ولی دیدنش کمکت می‌کنه بفهمی منطق کار چیه.

یه نکته: من اینجا کد واقعی پروژه رو نشون نمی‌دم (به‌خاطر مسائل حریم خصوصی)، ولی کل روش و منطق کار رو کامل توضیح می‌دم.

از جلسه تا تیکت: Granola و Jira

کار از خود کدنویسی شروع نمی‌شه، از جلسه شروع می‌شه. ما توی جلسه‌ها از ابزاری به اسم Granola استفاده می‌کنیم؛ یه ابزار که توی جلسه می‌شینه، به صحبت‌ها گوش می‌ده و ترنسکرایب و نوت‌برداری می‌کنه.

بعد از جلسه، مدیر من اون نوت‌ها رو برمی‌داره و با کمک هوش مصنوعی، بر اساس همون متن جلسه، توی Jira یه سری تیکت می‌سازه. یعنی خود تیکت هم دستی نوشته نشده — از روی متن جلسه و با هوش مصنوعی تولید شده.

تسک امروز کوچیکه ولی مثال خوبیه: توی ابزار ادیت عکس، وقتی کاربر چیزی انتخاب نکرده، دکمه‌ی ارسال غیرفعاله و این گیج‌کننده‌ست. می‌خوایم وقتی کاربر هنوز عکسی انتخاب نکرده، به‌صورت خودکار گالری براش باز بشه. در عمل دو خط کده، ولی روشِ کار برای تغییرات پیچیده‌تر هم دقیقاً همینه.

تیکت رو به‌جای PRD استفاده کن

اینجا نمی‌خوایم یه پروژه‌ی بزرگ از صفر بسازیم؛ می‌خوایم یه تغییر روی کدِ موجود بدیم. پس به‌جای نوشتن یه PRD جدا، خودِ تیکت Jira رو به‌عنوان PRD استفاده می‌کنم. هرچی جزئیات لازمه رو توی همون تیکت می‌ذارم، state تیکت رو می‌ذارم روی in progress و لینکش رو کپی می‌کنم. هر چقدر تسک پیچیده‌تر باشه، تیکت رو هم پُربارتر می‌نویسم.

Claude Code داخل IDE و الیاس cld

ترمینال رو نمی‌خواد جدا باز کنم — مستقیم توی Android Studio روی همون پروژه، یه ترمینال باز می‌کنم و Claude Code رو بالا میارم. برای این کار یه الیاس دارم:

alias cld="claude --dangerously-skip-permissions"

این باعث می‌شه هر بار ازم پرمیشن نپرسه. من به Claude اعتماد دارم و این کار رو سریع‌تر می‌کنه (طبیعتاً این رو وقتی بزن که به محیط و کاری که می‌کنی مطمئنی).

CLAUDE.md و Detekt: قوانین پروژه رو به مدل بده

دو تا چیز خیلی کمک می‌کنه که مدل اشتباه نکنه:

اول، فایل CLAUDE.md. توی این فایل معماری برنامه، خلاصه‌ی ساختار و یه سری قانون و قرارداد پروژه رو می‌نویسی. وقتی مدل همش یه اشتباه رو تکرار می‌کنه، یا یه قاعده‌ی خاص داری، اینجا می‌نویسیش و مدل رعایتش می‌کنه.

دوم، Detekt. این یه ابزار آنالیز استاتیکه که چک می‌کنه کد تمیز باشه — مثلاً تعداد ورودی‌های هر تابع از یه حدی بیشتر نباشه، فرمت رعایت بشه و… . مهمه که قبل از ساختن PR یه بار Detekt رو اجرا کنم. قبلاً دستی اجراش می‌کردم و اگه فیل می‌کرد می‌رفتم خطا رو درست می‌کردم؛ الان این کار رو هم به خود هوش مصنوعی سپردم. یه کامند ساختم که می‌گه «برو Detekt رو اجرا کن، اگه چیزی فیل شد توی کد درستش کن.»

مهم‌ترین قدم: قبل از تغییر، کانتکست رو گرم کن

این هسته‌ی کل روشه. مدل رو مثل یه همکار جدید فرض کن که تازه اومده شرکت و هیچ شناختی از کد شما نداره. هر بار که یه چت جدید باز می‌کنی، مدل هیچی درباره‌ی کدت نمی‌دونه؛ کل کد شما توی کانتکست ویندوزش جا نمی‌شه. (بعضی ابزارها مثل Cursor یا Codex از قبل پروژه رو ایندکس و امبد می‌کنن تا یه دانش اولیه داشته باشن، ولی منطق کلی همینه.)

پس قبل از اینکه بگم چی می‌خوام، اول «ذهنش رو گرم می‌کنم». به‌جای اینکه مستقیم بگم «این مشکله، درستش کن»، می‌گم:

Please check the visual-tools module and explain it to me

دقت کن: اصلاً نگفتم می‌خوام چی تغییر بدم. فقط گفتم برو این ماژول رو بخون و برام توضیح بده. مدل می‌ره کلی فایل مرتبط رو می‌خونه و می‌ریزه توی کانتکستش. بعد یه سؤال دقیق‌تر می‌پرسم:

how the send button is working, also how the attachment of image is working

این بار سریع‌تر جواب می‌ده چون همین الان کلی فایل خونده. هر بار که ازش می‌خوام بخونه و توضیح بده، متن‌های مرتبط می‌ره توی حافظه‌ش و خروجی‌های بعدی تمیزتر و دقیق‌تر می‌شن. مثل گرم‌کردن قبل از تمرین توی باشگاهه. دانش این مدل اندازه‌ی کل دنیاست؛ من دارم با این کار یه ذره‌بین می‌ذارم تا از اون دانشِ عظیم، بیاد دقیقاً رو همون چند خطی که می‌خوام تمرکز کنه.

دادن تیکت با Atlassian MCP

حالا که گرم شد، لینک تیکت رو می‌دم:

take a look at this ticket

ولی صبر کن — یه لینک Jira که روی مرورگر هم به‌سختی باز می‌شه، چطوری مدل می‌ره می‌خونتش؟ جوابش MCP ئه. من Atlassian MCP رو از قبل ست‌آپ و احراز هویت کردم، پس وقتی لینک رو می‌دم و می‌گم از MCP استفاده کن، خودش می‌ره تیکت رو می‌گیره و دیتاش — توضیحات، assignee، کامنت‌ها — رو می‌خونه. بعد می‌گم don't code yet تا زودتر از موعد کد نزنه.

اگه MCP یا Jira نداری، اصلاً مشکلی نیست: همون متن چیزی که می‌خوای رو از Trello، Notion یا هر جای دیگه کپی کن و توی پرامپت پیست کن. فقط قبل از پیست‌کردن، اول گرمش کن و فوکوسش بده روی همون بخشی که قراره دست بخوره.

Plan Mode و سؤال‌های دقیق

حالا با Shift+Tab سوییچ می‌کنم روی Plan Mode. مدل دوباره روی مسئله فکر می‌کنه، جاهای مختلف کد رو بررسی می‌کنه و یه پلن خوب می‌سازه. توی پلن مود به‌صورت پیش‌فرض ازش خواسته شده که سؤال بپرسه، و چون گرمش کرده بودم، سؤال‌هاش واقعاً مرتبط بودن:

  • وقتی هم پرامپت و هم عکس خالیه، دکمه‌ی ارسال چی کار کنه؟ → غیرفعال بمونه.
  • بعد از اینکه کاربر عکس رو انتخاب کرد، خودکار submit کنیم؟ → نه، فقط برگرده به input (کد رو پیچیده نکنیم).

اگه کانتکست رو گرم نکرده بودم، احتمالاً اصلاً به این سؤال‌ها فکر نمی‌کرد. معمولاً پلن رو هم نمی‌خونم و بهش اعتماد می‌کنم؛ ولی اگه وقت داری، خوندنش و تأییدش کار خوبیه. (مدلی که این‌جا استفاده می‌کردم Opus 4.7 بود.)

بذار خودش PR بسازه؛ و قدرت Sub-agentها

بعد از پلن، می‌ذارم کد رو بزنه. توی فایل CLAUDE.md بهش یاد دادم که بعد از نوشتن کد: تست بنویسه، یه بار بیلد/اینستال کنه و مطمئن بشه کار می‌کنه، Detekt رو اجرا کنه، و آخرش خودش یه Pull Request بسازه. چون به GitHub وصله، خودش PR می‌سازه، توضیحاتش رو می‌نویسه، و حتی ما رسممون اینه که توی PR یه GIF می‌ذاریم — یه ایجنت می‌ره GIF مرتبط رو سرچ می‌کنه و می‌ذاره توش.

اینجا sub-agentها وارد می‌شن. من چند تا sub-agent تعریف کردم:

  • یکی که Detekt رو اجرا می‌کنه (می‌تونه مدلش Haiku باشه، چون کار سنگینی نیست و نمی‌خوام برای این کار Opus خرج کنم).
  • یکی که می‌ره اینترنت رو سرچ می‌کنه و GIF پیدا می‌کنه (این هم Haiku).

این دو تا به‌صورت موازی اجرا می‌شن. توی Claude Code می‌تونی sub-agentها رو با ساختن یه فایل توی فولدر agents تعریف کنی و برای هر کدوم مدل مناسب خودش رو انتخاب کنی — کارهای ارزون رو بده به Haiku، کار اصلی رو نگه دار برای مدل قوی‌تر.

از اینجا به بعد معمولاً ولش می‌کنم و می‌رم سراغ یه تسک دیگه؛ این تسک کوچیک شاید ۵ تا ۲۰ دقیقه طول بکشه.

کامند /do و یه نکته درباره‌ی Spec Kit

تمام این مراحلی که گفتم رو توی یه کامند سفارشی به اسم /do اتوماتیک کردم. وقتی اجراش می‌کنم، خودش خط‌به‌خط می‌پرسه: «کجای پروژه رو نگاه کنم؟»، «تیکت داری؟»، «Figma داری؟» — همون مراحل گرم‌کردن و دادن کانتکست رو خودکار ازم می‌پرسه و بعد سوییچ می‌کنه روی Plan Mode. توی Claude Code می‌تونی به‌راحتی کامند بسازی و استفاده کنی.

بعضی از همکارهام به‌جای این، از Spec Kit استفاده می‌کنن. اون هم روش خودش رو داره؛ ولی به نظر من این روشی که گفتم بهینه‌تر و معقول‌تره.

حلقه‌ی ریویو و مرج

وقتی PR آماده شد، خودم پریویوش می‌کنم و کد رو چک می‌کنم. اگه جایی خوشم نیاد، برمی‌گردم به هوش مصنوعی می‌گم «این‌جا رو تغییر بده». اگه خوب باشه، یه همکار دیگه ریویوش می‌کنه و وقتی approve شد، مرجش می‌کنم. اگه کامنتی گذاشتن که اوکی نبود، اول خودم یه بار می‌خونم و تحلیل می‌کنم، بعد برمی‌گردم با هوش مصنوعی درباره‌ش صحبت می‌کنم.

راستی یه چیزی هم این بار از قلم افتاد: مدل دکمه رو خودکار فعال نکرد. ولی این تقصیر مدل نبود — توی تیکت این نکته نوشته نشده بود و من هم توضیحش ندادم. کیفیت خروجی به کیفیت تیکت برمی‌گرده.

نکته‌ی مهم: کانتکست رو تا مرج‌شدن نبند

این یکی خیلی مهمه: من کانتکست ویندوز رو تا وقتی اون تسک کامل تموم نشده (یعنی تا وقتی PR مرج نشده) نمی‌بندم. تبش رو همیشه باز نگه می‌دارم. اگه بخوام یه کار دیگه بکنم، یه کانتکست جدید باز می‌کنم و این یکی رو نگه می‌دارم.

چرا؟ چون این چت همه‌ی دانش اون تسک رو داره. اگه بعداً لازم شد یه تغییر دیگه روی همون PR بدم، دیگه می‌دونه چی به چیه. ولی اگه یه کانتکست جدید باز کنم، باید از اول همه‌چی رو توضیح بدم و دوباره گرمش کنم. وقتی PR مرج شد، اون موقع می‌بندمش.

جمع‌بندی

این روش حاصل تقریباً یک سال تجربه‌ی کار روزمره با هوش مصنوعیه، و هنوز خیلی از همکارهام این‌طوری کار نمی‌کنن. خلاصه‌ش: تیکت رو به‌جای PRD بردار، کد رو داخل IDE با Claude Code باز کن، با CLAUDE.md و Detekt قانون بده، قبل از هر تغییر کانتکست رو گرم کن، تیکت رو با MCP بهش بده، با Plan Mode پلن بگیر، بذار خودش کد و تست و PR بسازه و کارهای ارزون رو به sub-agentهای Haiku بسپار، و کانتکست رو تا مرج‌شدن باز نگه دار.

یه تذکر هم بدم: من این رو اواخر می ۲۰۲۶ ضبط کردم و مدل‌ها هر روز دارن بهتر می‌شن. شاید یه روزی برسه که دیگه کانتکست ویندوز معنی نداشته باشه و مدل کل پروژه رو توی حافظه‌ش داشته باشه. ولی فعلاً، برای مدل‌های امروز، این بهترین روشیه که بهش رسیدم — و هر چقدر مدلت بهتر باشه، خروجی بهتری هم می‌گیری.


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *