ویرگول
ورودثبت نام
فرشید روحی
فرشید روحیSenior Software Engineer
فرشید روحی
فرشید روحی
خواندن ۱۶ دقیقه·۳ ماه پیش

کار مؤثر با ایجنت‌های کدنویسی

پیش از شروع

استفاده از AI برای برنامه‌نویسی دیگه به کپی کردن یک پیام خطا در پنجره چت و پرسیدن «چطور این مشکل را برطرف کنم؟» محدود نمی‌شود.

ایجنت‌های کدنویسی مدرن می‌توانند یک Repository را بررسی کنند، دستورالعمل‌های پروژه را بخوانند، چندین فایل را تغییر دهند، تست‌ها را اجرا کنند، دلیل خطاها را پیدا کنند و نتیجه نهایی را اعتبارسنجی کنند. بااین‌حال، صرفاً دادن دسترسی به Codebase کافی نیست. بدون دستورالعمل‌های شفاف، Context مناسب و ابزارهای کارآمد، حتی یک ایجنت قدرتمند نیز ممکن است زمان و Token زیادی مصرف کند و تغییراتی انجام دهد که با معماری پروژه هماهنگ نیستند.

در این مقاله بررسی می‌کنیم که چگونه می‌توان یک Workflow مؤثرتر برای کار با Coding Agentها ساخت. برای این کار از فایل‌های AGENTS.md، تنظیمات سطح پروژه و سطح ایجنت و ابزارهایی مانند Caveman، RTK و Codebase Memory MCP استفاده می‌کنیم. همچنین می‌بینیم که چگونه می‌توان همین Workflow را در Codex، Claude Code و Hermes Agent اجرا کرد.

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

نکات کلیدی

  • از ایجنت‌های کدنویسی برای انجام کامل تسک‌ها استفاده کنید، نه صرفاً پاسخ دادن به پرسش‌ها.

  • به ایجنت اجازه دسترسی به Repository، ترمینال، تست‌ها، مستندات و تاریخچه Version Control را بدهید.

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

  • قوانین مشترک پروژه را از ترجیحات شخصی مربوط به ایجنت جدا کنید.

  • از Codebase Memory MCP برای درک ساختار Repository بدون اسکن مداوم تمام فایل‌ها استفاده کنید.

  • از RTK برای کاهش خروجی‌های شلوغ ترمینال، پیش از ورود آن‌ها به Context مدل استفاده کنید.

  • از Caveman برای حذف توضیحات غیرضروری از پاسخ‌های ایجنت استفاده کنید.

  • معیارهای پایان تسک را شفاف تعریف کنید: پیاده‌سازی، تست، اعتبارسنجی، مستندسازی و گزارش نهایی.

  • فایل‌های دستورالعمل را کوتاه و کاربردی نگه دارید. یک بیانیه ۹۰۰ خطی درباره نام‌گذاری متغیرها باعث باهوش‌تر شدن ایجنت نمی‌شود؛ فقط سردرگمی گران‌تری تولید می‌کند.

  • تمام تغییرات تولیدشده را با تست، Static Analysis، Build و بازبینی انسانی بررسی کنید.

گفت‌وگو را متوقف کنید و تسک واگذار کنید

گفت‌وگو با یک LLM زمانی مفید است که به توضیح، مثال یا یک پاسخ سریع نیاز دارید.

برای نمونه ممکن است بپرسید:

  • چگونه این Exception را برطرف کنم؟

  • این کلاس چه کاری انجام می‌دهد؟

  • برای این تابع یک Unit Test بنویس.

  • آیا این معماری درست است؟

این سؤال‌ها می‌توانند پاسخ‌های مفیدی تولید کنند، اما مدل همچنان بیرون از فرایند واقعی توسعه قرار دارد. مدل معمولاً نمی‌تواند کل Repository را با اطمینان بررسی کند، پیاده‌سازی‌های مرتبط را ببیند، پروژه را اجرا کند، فرضیات خود را اعتبارسنجی کند یا مطمئن شود که کد پیشنهادی واقعاً کامپایل می‌شود.

یک Coding Agent به شکل متفاوتی کار می‌کند.

به‌جای اینکه بپرسید:

How should I fix timeout handling in this API client?

یک تسک کامل به ایجنت بدهید:

Inspect the networking module, identify the current timeout behavior, implement typed timeout errors, update the affected tests, run the networking test suite, and report any remaining risks.

در این حالت، ایجنت کدنویسی می‌تواند یک چرخه کامل را اجرا کند:

  • دستورالعمل‌های Repository را بخواند.

  • معماری مرتبط را بررسی کند.

  • کلاس‌ها و Call Chainهای تحت‌تأثیر را پیدا کند.

  • یک برنامه کوتاه تهیه کند.

  • کد را تغییر دهد.

  • تست‌ها و ابزارهای Static Analysis را اجرا کند.

  • خطاها را بررسی کند.

  • پیاده‌سازی را اصلاح کند.

  • Diff نهایی را بازبینی کند.

  • تغییرات انجام‌شده را خلاصه کند.

برای مثال، Claude Code برای خواندن Codebase، ویرایش فایل‌ها، اجرای دستورات و ارتباط با ابزارهای توسعه طراحی شده است. بنابراین برخلاف یک رابط گفت‌وگوی ساده، می‌تواند مستقیماً داخل فرایند توسعه فعالیت کند.

تفاوت اصلی ساده است:

یک پاسخ چتی به شما پیشنهاد می‌دهد. یک ایجنت تغییر را انجام می‌دهد و آن را اعتبارسنجی می‌کند.

یک محیط کاری مناسب برای ایجنت بسازید

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

یک محیط مناسب برای Coding Agent به چهار لایه نیاز دارد:

  1. دستورالعمل‌ها: پروژه چگونه باید تغییر کند؟

  2. شناخت Codebase: Repository چه ساختاری دارد؟

  3. ابزارها: ایجنت چگونه فایل‌ها را می‌خواند، ویرایش می‌کند، Build می‌گیرد و تست اجرا می‌کند؟

  4. اعتبارسنجی: ایجنت چگونه ثابت می‌کند که تسک کامل شده است؟

سه ابزاری که در این مقاله بررسی می‌شوند، بخش‌های مختلفی از این محیط را بهبود می‌دهند:

  • Caveman: حجم توضیحات ایجنت را کاهش می‌دهد.

  • RTK: خروجی دستورات ترمینال را فشرده می‌کند.

  • Codebase Memory MCP: نیاز به جست‌وجو و بررسی تکراری Repository را کاهش می‌دهد.

این ابزارها جایگزین یکدیگر نیستند. یکی پاسخ‌های ایجنت را کوتاه می‌کند، دیگری نویز دستورات ترمینال را کاهش می‌دهد و سومی از کشف مکرر ساختار Codebase جلوگیری می‌کند.

از AGENTS.md به‌عنوان قرارداد پروژه استفاده کنید

نام استاندارد این فایل AGENTS.md و به‌صورت جمع است. مگر اینکه ابزار خاصی به‌طور مشخص از AGENT.md پشتیبانی کند، از نام مفرد استفاده نکنید.

Codex پیش از شروع کار، فایل‌های AGENTS.md را به‌صورت خودکار پیدا و بارگذاری می‌کند.

یک فایل AGENTS.md در سطح پروژه باید شامل موارد زیر باشد:

  • معماری پروژه

  • مرزهای مهم ماژول‌ها

  • دستورات Build

  • دستورات اجرای تست

  • قواعد کدنویسی

  • الزامات امنیتی

  • انتظارات مربوط به مستندسازی

  • Definition of Done

  • فایل‌ها یا دایرکتوری‌هایی که نباید تغییر کنند

  • مراحل ضروری بازبینی

برای مثال:

# AGENTS.md ## Architecture - UI modules depend on domain modules. - Domain modules must not depend on Android APIs. - Data modules implement repository interfaces defined in domain. - Use Kotlin Coroutines and Flow for asynchronous operations. ## Implementation Rules - Keep changes limited to the requested feature. - Do not introduce a new dependency without approval. - Preserve backward compatibility for public APIs. - Add tests for changed behavior. - Do not suppress compiler or lint warnings without documenting the reason. ## Validation Run the following before completing a task: ```bash ./gradlew test ./gradlew lint ./gradlew assembleDebug ``` ## Completion Report Include: - Files changed - Tests added or updated - Commands executed - Remaining risks

دستورالعمل‌های تو‌در‌توی پروژه

Repositoryهای بزرگ می‌توانند داخل هر ماژول، دستورالعمل‌های اختصاصی‌تری داشته باشند:

project/ ├── AGENTS.md ├── app/ ├── core/ └── features/ └── payment/ └── AGENTS.override.md

Codex دستورالعمل‌ها را از ریشه پروژه تا دایرکتوری جاری بارگذاری می‌کند. فایل‌هایی که به دایرکتوری کاری نزدیک‌تر هستند، اولویت بیشتری دارند.

Codex از موارد زیر پشتیبانی می‌کند:

  • فایل سراسری AGENTS.md

  • فایل AGENTS.md در سطح Repository

  • فایل‌های تو‌در‌توی AGENTS.override.md

به این ترتیب، فایل ریشه می‌تواند قوانین عمومی پروژه را تعریف کند و ماژول پرداخت قوانین سخت‌گیرانه‌تری داشته باشد:

# features/payment/AGENTS.override.md - Never log card, token, or payment-response data. - All payment-result states must be represented with typed models. - Run `./gradlew :features:payment:test` after each behavioral change. - Do not modify callback URLs without explicit approval.

دستورالعمل‌های سطح پروژه و سطح ایجنت را جدا کنید

قوانین پروژه باید همراه Repository نگهداری شوند. ترجیحات شخصی توسعه‌دهنده باید در تنظیمات محلی ایجنت باقی بمانند.

سطحکاربردنمونه‌هاسطح پروژهمعماری مشترک، دستورات و قوانین کیفیتAGENTS.md، فایل CLAUDE.md پروژه، .claude/rules/سطح ماژولقوانین مربوط به یک Feature یا دایرکتوریفایل‌های تو‌در‌توی AGENTS.md و AGENTS.override.mdسطح ایجنتترجیحات شخصی مربوط به Workflow~/.codex/AGENTS.md و ~/.claude/CLAUDE.mdتنظیمات ابزارMCP Serverها، Hookها، Permissionها و مدل‌هاconfig.toml، settings.json، config.yaml و .mcp.jsonSkillهافرایندهای قابل استفاده مجدد برای تسک‌های مشخصدایرکتوری Skillهای ایجنت

Codex

Codex از ساختار زیر پشتیبانی می‌کند:

~/.codex/AGENTS.md ~/.codex/AGENTS.override.md ~/.codex/config.toml project/AGENTS.md project/module/AGENTS.override.md

از فایل سراسری برای ترجیحات شخصی و قابل استفاده در پروژه‌های مختلف استفاده کنید:

# ~/.codex/AGENTS.md - Inspect existing implementations before introducing abstractions. - Prefer small, reviewable changes. - Run targeted tests before the entire test suite. - Do not modify generated files manually. - Keep final reports concise.

اطلاعات خاص هر پروژه باید در فایل AGENTS.md همان Repository قرار بگیرد.

Claude Code

Claude Code از CLAUDE.md برای نگهداری دستورالعمل‌های دائمی استفاده می‌کند.

این ابزار از Scopeهای مختلف پشتیبانی می‌کند:

  • پروژه

  • کاربر

  • سازمان

همچنین می‌توان از .claude/rules/ برای تعریف قوانینی استفاده کرد که فقط به فایل‌ها، زبان‌ها یا بخش‌های مشخصی از پروژه مربوط هستند.

Claude این فایل‌ها را به‌عنوان Context در نظر می‌گیرد، نه یک محدودیت تضمین‌شده. بنابراین برای قوانینی که باید همیشه اجرا یا مسدود شوند، بهتر است از Hookها استفاده کنید.

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

~/.claude/CLAUDE.md project/CLAUDE.md project/.claude/rules/kotlin.md project/.claude/rules/testing.md ~/.claude/settings.json

از CLAUDE.md برای دستورالعمل‌ها و از settings.json برای Permissionها، Hookها، Pluginها و تنظیمات ابزارها استفاده کنید.

Hermes Agent

Hermes از Workspace Instruction، Skillهای قابل استفاده مجدد، Pluginها، حافظه و فایل تنظیمات کاربر پشتیبانی می‌کند.

Skillها در مسیر زیر نگهداری می‌شوند:

~/.hermes/skills/

این Skillها فقط هنگام نیاز بارگذاری می‌شوند. Hermes از رویکرد Progressive Disclosure استفاده می‌کند؛ یعنی تنها دستورالعمل مرتبط با تسک جاری وارد Context می‌شود.

یک ساختار کاربردی برای Hermes:

project/AGENTS.md ~/.hermes/config.yaml ~/.hermes/skills/ ~/.hermes/plugins/

کاربرد هر بخش:

  • AGENTS.md برای قوانین Repository

  • config.yaml برای تنظیمات ایجنت و Pluginها

  • skills/ برای Workflowهای قابل استفاده مجدد

  • حافظه Hermes برای نگهداری دانشی که طی Sessionهای مختلف آموخته شده است

Hermes همچنین از Subagentها، حافظه دائمی، Tool Use، چندین Model Provider و ساخت Skill از کارهای قبلی پشتیبانی می‌کند.

۱. از Caveman برای کاهش حجم پاسخ‌های ایجنت استفاده کنید

Coding Agentها معمولاً بسیار بیشتر از مقدار لازم توضیح می‌دهند.

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

Caveman یک Skill و Plugin است که ایجنت‌های کدنویسی را وادار می‌کند پاسخ‌هایی فشرده و مستقیم ارائه دهند، بدون اینکه کدها، دستورات، مسیر فایل‌ها و پیام‌های خطا حذف شوند.

Caveman از ابزارهای مختلفی پشتیبانی می‌کند، از جمله:

  • Claude Code

  • Codex

  • Hermes Agent

  • بسیاری از ابزارهای کدنویسی دیگر

چرا باید از Caveman استفاده کنیم؟

Caveman در موارد زیر مفید است:

  • کوتاه‌تر شدن پاسخ‌های ایجنت

  • کاهش مصرف Output Token

  • حذف توضیحات و تعارف‌های غیرضروری

  • بررسی سریع‌تر روند انجام کار

  • کوچک‌تر شدن فایل‌های دائمی دستورالعمل و حافظه

  • باقی ماندن فضای بیشتر در Context Window برای کد واقعی

Caveman فقط نحوه ارتباط ایجنت را فشرده می‌کند. این ابزار توانایی استدلال، شناخت Repository یا کیفیت پیاده‌سازی مدل را افزایش نمی‌دهد.

این تفاوت مهم است. کوتاه‌تر کردن یک پاسخ اشتباه، آن را درست نمی‌کند؛ فقط باعث می‌شود زمان کمتری برای خواندن همان پاسخ اشتباه تلف شود.

نصب

برای Claude Code:

claude plugin marketplace add JuliusBrussee/caveman claude plugin install caveman@caveman

برای Codex:

npx skills add JuliusBrussee/caveman -a codex

برای فعال کردن آن در یک Session مربوط به Codex:

/caveman

برای Hermes Agent:

npx -y github:JuliusBrussee/caveman -- --only hermes

نصب Hermes از سیستم Skill بومی آن استفاده می‌کند و Skill هنگام بارگذاری فعال می‌شود.

بهترین موارد استفاده

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

  • خلاصه پیاده‌سازی

  • گزارش روند انجام کار

  • کامنت‌های Code Review

  • تولید Commit Message

  • Debug روزمره

  • تسک‌های طولانی با گزارش‌های متعدد ایجنت

در شرایط زیر، فشرده‌سازی بیش از حد مناسب نیست:

  • توضیح معماری

  • تحلیل Incident

  • گزارش مشکلات امنیتی

  • مستندات Migration

  • بررسی Trade-offهای مهم

هدف این نیست که پاسخ ایجنت مبهم و رمزآلود شود. هدف، حذف توضیحات اضافی است.

۲. از RTK برای کاهش نویز ترمینال استفاده کنید

بخش بزرگی از Context ایجنت ممکن است توسط خروجی دستورات ترمینال مصرف شود:

  • هزاران خط مربوط به تست‌های موفق

  • فهرست‌های بسیار بزرگ دایرکتوری‌ها

  • خروجی‌های طولانی Git Diff

  • لاگ‌های تکراری Build

  • Stack Traceهایی با Frameهای تکراری

  • پیام‌های پیشرفت Package Manager

  • خروجی Docker با ستون‌های غیرضروری

RTK دستورات Shell را رهگیری می‌کند و خروجی آن‌ها را پیش از رسیدن به Coding Agent فیلتر می‌کند.

این ابزار می‌تواند:

  • Directory Treeها را فشرده کند.

  • نتیجه Searchها را گروه‌بندی کند.

  • خروجی Git را کاهش دهد.

  • تست‌های موفق را جمع کند.

  • جزئیات Failureها را نگه دارد.

برای مثال:

git status

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

rtk git status

همچنین اجرای دستور زیر:

./gradlew test

می‌تواند به‌جای ارسال تمام تست‌های موفق به مدل، یک خروجی کوتاه و متمرکز بر Failureها تولید کند.

چرا باید از RTK استفاده کنیم؟

RTK به ایجنت کمک می‌کند:

  • Token کمتری برای خواندن خروجی ترمینال مصرف کند.

  • خطاها را سریع‌تر پیدا کند.

  • Context Window را با لاگ تست‌های موفق پر نکند.

  • Sessionهای طولانی را قابل استفاده نگه دارد.

  • دستورات اعتبارسنجی بیشتری را با بودجه Context یکسان اجرا کند.

درصد کاهش خروجی Shell که RTK گزارش می‌کند، الزاماً برابر با همان درصد کاهش هزینه کل API نیست.

Promptها، تاریخچه Conversation، پاسخ‌های مدل و سایر Tool Resultها نیز Token مصرف می‌کنند. مستندات RTK نیز کاهش خروجی Bash را از کاهش کل هزینه استفاده از مدل جدا می‌کند.

نصب

در macOS:

brew install rtk

برای Codex:

rtk init --global --codex

این دستور، راهنمای استفاده از RTK را به فایل سراسری AGENTS.md مربوط به Codex اضافه می‌کند.

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

برای Claude Code:

rtk init --global

Claude Code از Hook مربوط به PreToolUse استفاده می‌کند و می‌تواند دستورات Bash پشتیبانی‌شده را به‌صورت خودکار بازنویسی کند.

ابزارهای داخلی Claude مانند موارد زیر از Hook مربوط به Bash عبور نمی‌کنند:

  • Read

  • Grep

  • Glob

برای Hermes Agent:

rtk init --agent hermes

این دستور یک Plugin برای Hermes در مسیر زیر ایجاد می‌کند:

~/.hermes/plugins/rtk-rewrite/

سپس Plugin از طریق تنظیمات Hermes فعال می‌شود و دستورات پشتیبانی‌شده ترمینال را پیش از اجرا تغییر می‌دهد.

در صورت نیاز از خروجی خام استفاده کنید

RTK عمداً خروجی‌ها را فیلتر، گروه‌بندی، کوتاه و Deduplicate می‌کند.

در موارد زیر بهتر است RTK را دور بزنید و خروجی خام را بررسی کنید:

  • Parse کردن JSON خام

  • مقایسه خروجی در سطح Byte

  • بررسی مشکلات مربوط به ترتیب داده‌ها

  • مشاهده Stack Trace کامل

  • ارسال خروجی به Parser دیگر

  • بررسی مشکلی که احتمال دارد خود RTK خروجی آن را تغییر داده باشد

بهره‌وری باید نویز را حذف کند، نه شواهد را.

۳. از Codebase Memory MCP برای شناخت Repository استفاده کنید

بدون ابزارهای Code Intelligence، یک ایجنت معمولاً Repository را به این شکل بررسی می‌کند:

  1. دایرکتوری‌ها را فهرست می‌کند.

  2. نام یک کلاس را جست‌وجو می‌کند.

  3. چند فایل را باز می‌کند.

  4. محل استفاده از کلاس را جست‌وجو می‌کند.

  5. فایل‌های بیشتری باز می‌کند.

  6. Interfaceها را جست‌وجو می‌کند.

  7. پس از Context Compaction تمام مراحل را دوباره تکرار می‌کند.

  8. در Session بعدی نیز دوباره همین کار را انجام می‌دهد، چون ظاهراً کشف مجدد معماری به یک سنت معتبر مهندسی نرم‌افزار تبدیل شده است.

Codebase Memory MCP یک Repository را Index کرده و آن را به یک Knowledge Graph دائمی تبدیل می‌کند.

این Graph می‌تواند موارد زیر را نمایش دهد:

  • Functionها

  • Classها

  • Call Chainها

  • Routeها

  • Dependencyها

  • ارتباط میان سرویس‌ها

به‌جای بررسی مداوم فایل‌ها به‌صورت جداگانه، ایجنت می‌تواند این ساختار را Query کند.

چرا باید از Codebase Memory MCP استفاده کنیم؟

این ابزار می‌تواند به پرسش‌هایی مانند موارد زیر پاسخ دهد:

  • چه کلاس‌هایی این تابع را فراخوانی می‌کنند؟

  • چه کلاس‌هایی این Interface را پیاده‌سازی کرده‌اند؟

  • تغییر این Method چه بخش‌هایی را تحت‌تأثیر قرار می‌دهد؟

  • کدام Route به این Service می‌رسد؟

  • این Data Model در کجا تبدیل می‌شود؟

  • آیا این Function بدون استفاده است؟

  • چه ماژول‌هایی به این Component وابسته‌اند؟

  • چه فایل‌هایی بخشی از این Call Chain هستند؟

این ابزار به‌خصوص در شرایط زیر مفید است:

  • Repositoryهای Legacy و بزرگ

  • پروژه‌های چندماژوله Android

  • Monorepoها

  • سیستم‌های Microservice

  • پروژه‌هایی با چند Coding Agent

  • Refactorهای طولانی

  • Repositoryهایی با مستندات محدود

این Server از Codex، Claude Code، Hermes و بسیاری از Clientهای دیگر پشتیبانی می‌کند.

Installer آن می‌تواند فایل‌های تنظیمات MCP، دستورالعمل‌ها، Skillها و Lifecycle Hookهای مربوط به ایجنت‌های شناسایی‌شده را پیکربندی کند.

نصب

در macOS یا Linux:

curl -fsSL \ https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh \ | bash

پس از نصب، Coding Agent را مجدداً اجرا کنید و از آن بخواهید:

Index this project.

Installer می‌تواند موارد زیر را تنظیم کند:

  • Codex از طریق config.toml

  • Claude Code از طریق تنظیمات MCP

  • Hermes از طریق config.yaml

پیش از خواندن فایل‌ها، Graph را Query کنید

یک Workflow مناسب برای ایجنت:

  1. Graph را Query کند تا مسیر احتمالی کد مشخص شود.

  2. فایل‌های Source معرفی‌شده توسط Graph را مستقیماً بررسی کند.

  3. ارتباط‌های مهم را با خواندن کد واقعی تأیید کند.

  4. تغییر را انجام دهد.

  5. دوباره Impact تغییر را Query کند.

  6. تست‌ها و Static Analysis را اجرا کند.

نتیجه Graph را حقیقت قطعی در نظر نگیرید.

موارد زیر می‌توانند باعث ایجاد نقص در Index شوند:

  • کدهای تولیدشده

  • Syntaxهای پشتیبانی‌نشده

  • دایرکتوری‌های Ignoreشده

  • Index قدیمی

  • رفتارهای Dynamic

این پروژه سطح‌هایی مانند Scout، Verify و Auditor تعریف می‌کند که شواهد Graph را با بررسی مستقیم Source Code و پوشش Index ترکیب می‌کنند.

از Graph برای Navigation و Impact Analysis استفاده کنید. Source Code و تست‌ها باید شواهد نهایی باشند.

یک Workflow عملی با Codex، Claude Code و Hermes

فرض کنید تسک زیر را داریم:

Add typed timeout handling to an Android networking module. Preserve the public API, add unit tests, and verify all call sites.

مرحله اول: اضافه کردن دستورالعمل‌های پروژه

فایل زیر را در ریشه Repository ایجاد کنید:

# AGENTS.md ## Project Context - This is a multi-module Android project. - Networking code is located under `core/networking`. - Repository interfaces belong in domain modules. - Data modules implement domain repository interfaces. - Kotlin is the primary language. - Minimum Android SDK is 21. ## Coding Rules - Preserve source and binary compatibility for public APIs. - Use sealed interfaces for typed networking failures. - Do not expose Ktor-specific exceptions outside the networking module. - Use Coroutines for asynchronous code. - Do not add dependencies without approval. ## Agent Workflow 1. Query Codebase Memory MCP before broad repository searches. 2. Verify graph results by reading the relevant source files. 3. Use RTK for noisy shell commands. 4. Use raw commands when exact output is required. 5. Add or update unit tests for behavioral changes. 6. Review the final Git diff before completion. ## Validation Run: ```bash ./gradlew :core:networking:test ./gradlew lint ./gradlew assembleDebug ``` ## Completion Criteria Report: - Root cause - Files changed - API compatibility - Tests executed - Remaining risks

برای Claude Code می‌توانید همین اطلاعات را از طریق یک فایل کوتاه CLAUDE.md بازاستفاده کنید یا قوانین اختصاصی Claude را در .claude/rules/ قرار دهید.

مرحله دوم: نصب ابزارهای مشترک

brew install rtk curl -fsSL \ https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh \ | bash

مرحله سوم: پیکربندی Codex

npx skills add JuliusBrussee/caveman -a codex rtk init --global --codex

Codex را اجرا کنید:

codex

سپس Prompt زیر را وارد کنید:

/caveman Index this project using Codebase Memory MCP. Implement typed timeout handling in core/networking. First identify the public API, implementations, callers, and existing tests. Then provide a short plan. Preserve compatibility, implement the change, add tests, run the required validation commands, inspect the final diff, and report remaining risks. Do not stop after suggesting code.

مرحله چهارم: پیکربندی Claude Code

claude plugin marketplace add JuliusBrussee/caveman claude plugin install caveman@caveman rtk init --global

Claude Code را داخل Repository اجرا کنید:

claude

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

Use Codebase Memory MCP to map the timeout-related call chain before editing. Implement typed timeout handling in core/networking. Preserve the public API, update unit tests, run the commands from AGENTS.md, review the diff, and finish only when the completion criteria are satisfied.

Claude Code از دستورالعمل‌های پروژه، ابزارهای MCP، دسترسی ترمینال و Hookهای خود استفاده می‌کند.

Caveman پاسخ‌های Claude را کوتاه می‌کند و RTK خروجی دستورات Bash پشتیبانی‌شده را پیش از ورود به Context مدل کاهش می‌دهد.

مرحله پنجم: پیکربندی Hermes Agent

npx -y github:JuliusBrussee/caveman -- --only hermes rtk init --agent hermes

Hermes را داخل Repository اجرا کنید:

hermes

سپس Prompt زیر را وارد کنید:

Use the repository AGENTS.md as the task contract. Use Codebase Memory MCP to find the timeout implementation, its callers, repository boundaries, and related tests. Implement typed timeout handling without exposing networking-library exceptions. Add tests, execute the validation commands, review the final diff, and provide a concise completion report.

Hermes می‌تواند Caveman را به‌عنوان Skill بارگذاری کند، از Plugin ترمینال RTK استفاده کند، به تنظیمات MCP دسترسی داشته باشد و دانش مفید را از طریق سیستم Skill و حافظه خود نگهداری کند.

برای ایجنت‌ها قرارداد تکمیل تسک تعریف کنید

یک Prompt ضعیف:

Fix the timeout problem.

یک Prompt بهتر:

Investigate the timeout problem in core/networking. Before editing: - Identify the public API. - Find all implementations and callers. - Find current timeout tests. - Explain the root cause in no more than five lines. Implementation: - Add typed timeout handling. - Preserve API compatibility. - Do not expose Ktor exceptions outside the module. - Add tests for timeout, cancellation, and non-timeout failures. Validation: - Run the networking tests. - Run lint. - Build the debug application. - Review the final Git diff. Finish with: - Files changed - Commands executed - Test results - Compatibility impact - Remaining risks

این Prompt هم خود تسک و هم شواهد موردنیاز برای کامل در نظر گرفتن آن را مشخص می‌کند.

پیشنهادهای نهایی

عملکرد یک Coding Agent را فقط بر اساس جذاب یا حرفه‌ای بودن توضیحاتش ارزیابی نکنید.

این موارد را بررسی کنید:

  • آیا مسیر درست کد را پیدا کرده است؟

  • آیا معماری پروژه را رعایت کرده است؟

  • آیا پیاده‌سازی کامپایل می‌شود؟

  • آیا رفتار تغییرکرده توسط تست‌ها پوشش داده شده است؟

  • آیا Diff نهایی محدود و متمرکز است؟

  • آیا تصمیم‌های مهم مستند شده‌اند؟

  • آیا ایجنت می‌تواند برای نتیجه‌گیری‌های خود مدرک ارائه کند؟

از ابزارها و فایل‌ها به شکل زیر استفاده کنید:

  • AGENTS.md برای تعریف انتظارات پروژه

  • فایل‌های سطح ایجنت برای تعریف Workflow شخصی

  • Skillها برای بسته‌بندی فرایندهای قابل استفاده مجدد

  • Codebase Memory MCP برای پیمایش ساختار Repository

  • RTK برای کاهش نویز ترمینال

  • Caveman برای کاهش نویز پاسخ‌های ایجنت

  • تست، Build، Lint و بازبینی برای اعتبارسنجی نتیجه

بهترین Workflow برای Coding Agent، یک گفت‌وگوی طولانی‌تر نیست.

بهترین Workflow یک سیستم تکرارپذیر است که در آن ایجنت:

  1. Context مناسب را دریافت می‌کند.

  2. از ابزارهای درست استفاده می‌کند.

  3. تسک را انجام می‌دهد.

  4. نتیجه را اعتبارسنجی می‌کند.

  5. فقط اطلاعات مهم را گزارش می‌دهد.

ممنون که خواندید

ایجنت‌های کدنویسی زمانی واقعاً کاربردی می‌شوند که آن‌ها را بخشی از فرایند مهندسی نرم‌افزار بدانیم، نه فقط یک ابزار چت باهوش‌تر.

کار را با یک فایل AGENTS.md شفاف شروع کنید، ابزارهایی را اضافه کنید که پروژه واقعاً به آن‌ها نیاز دارد و مشخص کنید هر تسک چگونه باید اعتبارسنجی شود. فرایند را ساده نگه دارید، نتایج را بررسی کنید و به‌مرور Workflow خود را بهبود دهید.

ممنون که این مقاله را خواندید؛ امیدوارم تجربه بهتر و مؤثرتری از کار با ایجنت‌های کدنویسی داشته باشید.

فرایند توسعهمهندسی نرم‌افزارهوش مصنوعی
۰
۰
فرشید روحی
فرشید روحی
Senior Software Engineer
شاید از این پست‌ها خوشتان بیاید