تفاوت Agent Skills، MCP و فایلهای Rules در کدنویسی
برای بهینهسازی context در coding agent، تفاوت هزینهای Agent Skills، سرورهای MCP و فایلهای rules را بررسی کنید. یاد بگیرید کدام روش برای کاهش مصرف توکن در هر نشست مناسبتر است.
مهارتهای Agent در مقابل سرورهای MCP و فایلهای rules: پاسخ کوتاه
مهارتهای Agent، سرورهای MCP و فایلهای rules همگی دانش را در اختیار یک coding agent قرار میدهند. انتخاب بین آنها به عملکرد آن دانش بستگی دارد. پروتکل MCP (مخفف Model Context Protocol) برای دادههایی است که ممکن است در مراجعه بعدی تغییر کنند. مهارت (Skill) برای رویهای است که میتوانید امروز بنویسید و تا 6 هفته دیگر همچنان معتبر باشد. فایل rules برای آن دسته از حقایق معدودی است که باید در هر نشست (session) ثابت بمانند.
این انتخاب هزینهای دارد و آن هزینه، context است. هر توکنی که صرف دستوری شود که agent به آن نیاز ندارد، توکنی است که برای خواندن کد در دسترس نخواهد بود. همچنین این توکنی است که در هر نوبت دوباره پرداخت میکنید، زیرا کل context window با هر درخواست مجدداً ارسال میشود. بنابراین پرسش مفید این نیست که کدام مکانیزم میتواند کار را انجام دهد؛ در بیشتر روزها هر سه گزینه قادر به انجام آن هستند. پرسش اصلی این است که کدامیک در زمان بیکاری، کمترین هزینه را تحمیل میکند.
هزینه هر کدام پیش از استفاده
این سه مورد در لحظات متفاوتی بارگذاری میشوند و همین زمانبندی، تفاوت اصلی آنهاست.
فایل قوانین (rules file) در زمان راهاندازی و در هر نشست، بهطور کامل بارگذاری میشود، چه مرتبط باشد و چه نباشد. Claude Code فایل CLAUDE.md را در ابتدای هر گفتگو میخواند و صرفنظر از طول آن، بهطور کامل بارگذاری میکند. هدف تعیینشده در مستندات، کمتر از 200 خط در هر فایل است، زیرا فایل طولانیتر هزینه context بیشتری دارد و با قابلیت اطمینان کمتری دنبال میشود. این دو اثر در یک جهت عمل میکنند و به همین دلیل است که یک فایل قوانین 900 خطی، بدتر از بیفایده است.
یک مهارت (skill) در دو مرحله بارگذاری میشود. در زمان شروع، تنها خط description از frontmatter هر SKILL.md وارد context میشود تا مدل بداند که این مهارت وجود دارد و تقریباً چه زمانی کاربرد پیدا میکند. بدنه اصلی زمانی بارگذاری میشود که مهارت فراخوانی شود. بنابراین، یک سند مرجع 400 خطی تا لحظهای که به آن نیاز نباشد، تقریباً هیچ هزینهای برای شما ندارد.
سرور MCP در گذشته پرهزینهترین مورد بود و این همان جایی است که اکثر مقایسههایی که میخوانید، اکنون قدیمی شدهاند. در نسخه فعلی Claude Code، قابلیت جستجوی ابزار (tool search) بهصورت پیشفرض فعال است. در شروع نشست، فقط نام ابزارها و فیلد دستورالعملهای سرور بارگذاری میشوند و طرحوارههای کامل JSON (JavaScript object notation) تا زمانی که Claude آنها را جستجو نکند، به تعویق میافتند. افزودن یک سرور دیگر هزینهای معادل هزاران توکن در ابتدا ندارد. البته هنوز هزینهای دارد و در پیکربندیهایی که جستجوی ابزار در آنها غیرفعال است، همچنان تمام هزینه در ابتدا پرداخت میشود.
The data behind this chart
[
{
"label": "Rules file, 200 lines",
"at_startup": "2,500",
"after_use": "2,500"
},
{
"label": "Skill, 12 KB body",
"at_startup": 40,
"after_use": "3,000"
},
{
"label": "MCP server, tool search on",
"at_startup": 500,
"after_use": "3,200"
},
{
"label": "MCP server, tool search off",
"at_startup": "4,500",
"after_use": "4,500"
}
]اینها تخمین هستند، نه اندازهگیریهای دقیق از دستگاه شما. این اعداد از اندازه متنی که هر مکانیزم بارگذاری میکند به دست آمدهاند (تقریباً هر 4 کاراکتر معادل یک توکن است): یک فایل قوانین 200 خطی حدود 10 KB مارکداون است، توضیحات یک مهارت حدود 160 کاراکتر است و سروری که 12 ابزار را ارائه میدهد، حدود 18 KB طرحواره به اضافه یک بلوک دستورالعمل 2 KB حمل میکند. Claude Code هر توضیح ابزار و هر فیلد دستورالعمل سرور را در 2 KB قطع (truncate) میکند، بنابراین آن بخش دارای سقف است. بخش بعدی به شما نشان میدهد که چگونه اعداد واقعی خود را بخوانید.
دو ردیف اول را با هم بخوانید. فایل قوانین در نشستی که کسی به آن نیاز نداشته، 2,500 توکن هزینه دارد. مهارت در همان نشست 40 توکن و در یک نشست از هر ده نشستی که در آن اجرا میشود، 3,000 توکن هزینه دارد. دو ردیف آخر مربوط به یک سرور مشابه در دو حالت با جستجوی ابزار فعال و غیرفعال است: 500 توکن در مقابل 4,500. این شکاف، دلیلی است که توصیههای قدیمی درباره سنگین شدن context توسط MCP همچنان مطرح میشوند.
جستجوی ابزار به مدلی نیاز دارد که از بلوکهای tool_reference پشتیبانی کند، که تا اوت 2026 شامل Claude Sonnet 4.5، Haiku 4.5، Opus 4.5 و نسخههای بعدی میشود. Claude Code زمانی که ANTHROPIC_BASE_URL به میزبانی اشاره کند که شخص ثالث (غیر از شرکت اصلی) است، این قابلیت را غیرفعال میکند، زیرا اکثر پروکسیها این بلوکها را فوروارد نمیکنند. برای کنترل آن، ENABLE_TOOL_SEARCH را تنظیم کنید: false تمام طرحوارهها را در ابتدا بارگذاری میکند، true بارگذاری همه آنها را به تعویق میاندازد و auto آنها را فقط زمانی در ابتدا بارگذاری میکند که در 10 درصد از پنجره context جای بگیرند.
# Load schemas up front only if they fit in 5% of the window
ENABLE_TOOL_SEARCH=auto:5 claudeپرسش تعیینکننده: آیا دادهها بین فراخوانیها تغییر میکنند؟
این پرسش را در ابتدا مطرح کنید، زیرا یک گزینه را بهطور کامل حذف میکند. اگر عامل (agent) نیاز دارد چیزی را بخواند یا بنویسد که ممکن است در مراجعه بعدی متفاوت باشد، شما به یک سرور نیاز دارید. یک سیستم ردیابی مشکلات (issue tracker)، یک پایگاه داده، یک داشبورد مانیتورینگ یا API داخلی خودتان. یادداشت کردن آن کمکی نمیکند، زیرا آنچه نوشتهاید در لحظهای که شخص دیگری رکورد را ویرایش کند، قدیمی (stale) میشود.
اگر پاسخ همچنان پس از 6 هفته و بدون اینکه کسی آن را نگهداری کند درست باقی بماند، شما به یک مهارت (skill) نیاز دارید. یک چکلیست انتشار. یک رویه مهاجرت. ساختار پاسخهای خطای شما. نحوه نوشتن تستها در این مخزن. یک مهارت، فایلی در git است. این فایل نه پورتی دارد، نه پردازشی و نه حالت شکستی جز اشتباه بودن؛ که آن هم با بازبینی کد (code review) قابل تشخیص است.
اگر این یک حقیقت است که باید برای کارهایی که هنوز به آنها فکر نکردهاید اعمال شود، آن را در فایل قوانین (rules file) قرار دهید. Run make lint before committing. Never push to main. Handlers live in src/api/handlers/. هر کدام در یک خط. لحظهای که یک ورودی به مراحل مختلف تبدیل میشود، دیگر یک حقیقت نیست و به یک رویه تبدیل شده است، بنابراین باید به یک مهارت منتقل شود.
چه زمانی یک فایل قوانین کافی است
فایلهای قوانین از چندین مکان بارگذاری میشوند، از کلیترین تا جزئیترین: یک فایل سیاست مدیریتشده، ~/.claude/CLAUDE.md شخصی شما، ./CLAUDE.md یا ./.claude/CLAUDE.md پروژه، و یک ./CLAUDE.local.md که در gitignore قرار دارد. تمام فایلهای کشفشده بهجای جایگزینی یکدیگر، با هم ترکیب (concatenate) میشوند و فایلهایی که به دایرکتوری کاری شما نزدیکتر هستند، در انتها خوانده میشوند.
Claude Code فایل CLAUDE.md را میخواند، نه AGENTS.md را. اگر مخزن شما در حال حاضر دارای یک AGENTS.md برای ابزارهای دیگر است، دو نسخه از آن را که بهمرور با هم تفاوت پیدا میکنند، نگهداری نکنید.
ln -s AGENTS.md CLAUDE.mdلینک نمادین (symlink) در صورت موفقیت، خروجی چاپ نمیکند. یک نشست (session) را شروع کنید، /context را اجرا کنید و تأیید کنید که CLAUDE.md در زیر بخش Memory files ظاهر میشود. اگر در آنجا فهرست نشده است، عامل (agent) هرگز آن را ندیده است و هیچ بازنویسیای کمکی نخواهد کرد. زمانی که میخواهید خطوط اختصاصی Claude را نیز داشته باشید، از فرم import استفاده کنید و آنها را زیر دستور import قرار دهید.
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.یک تله در اینجا وجود دارد. دستورات import در @path، کانتکست را ذخیره نمیکنند. فایل واردشده (imported) در زمان راهاندازی، در کنار فایلی که به آن ارجاع داده است، تا عمق چهار سطح باز و بارگذاری میشود. تقسیم یک فایل قوانین 600 خطی به شش import، آن را برای انسانها سازماندهی میکند و هزینه توکن را دقیقاً به میزان صفر تغییر میدهد. مطالعه قراردادهای پشت AGENTS.md و همزاد انسانی آن پیش از نهایی کردن ساختار فایلها، ارزشمند است.
آنچه هزینه را کاهش میدهد، .claude/rules/ با یک فیلد paths است. یک فایل قوانین که دارای frontmatter از نوع paths باشد، تنها زمانی بارگذاری میشود که عامل با فایلی که با یکی از الگوها مطابقت دارد، تعامل داشته باشد.
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Every endpoint validates its input.
- Use the standard error response shape.یک قانون بدون فیلد paths، در زمان راهاندازی با همان اولویت .claude/CLAUDE.md بارگذاری میشود. بنابراین الگوی کاری مناسب، استفاده از قوانین کوتاه بدون شرط، بهعلاوه یک لیست paths برای هر چیزی است که فقط در داخل یک دایرکتوری خاص اهمیت دارد.
هنگامی که به یک مهارت نیاز دارید
یک مهارت، دایرکتوری است که یک فایل SKILL.md در آن قرار دارد. مهارتهای شخصی در مسیر ~/.claude/skills/<name>/SKILL.md قرار میگیرند و برای تمامی پروژههای موجود در سیستم شما اعمال میشوند. مهارتهای پروژه در مسیر .claude/skills/<name>/SKILL.md ذخیره میشوند، همراه با مخزن (repository) جابهجا میشوند و مانند هر فایل دیگری در یک pull request قابل بازبینی هستند.
mkdir -p ~/.claude/skills/summarize-changes---
name: summarize-changes
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
Run `git status` and `git diff` against the merge base.
Group the changes by intent, not by file.
Call out anything touching auth, migrations or deletions.بخش description تنها قسمتی از آن فایل است که پیش از اجرای مهارت در context قرار میگیرد، بنابراین دو وظیفه بر عهده دارد. این بخش مشخص میکند که مهارت چه کاری انجام میدهد و چه زمانی باید از آن استفاده کرد. توصیفی مانند "کمک به استقرارها" (Helps with deploys) هیچ دادهای برای تطبیق با درخواست به مدل نمیدهد؛ در نتیجه مهارت هرگز بهطور خودکار فعال نمیشود و شما تصور میکنید که مهارتها کار نمیکنند.
نام دایرکتوری به دستور تبدیل میشود، بنابراین مثال بالا دستور /summarize-changes را در اختیار شما قرار میدهد. در یک مهارت شخصی یا پروژهای، فیلد name در frontmatter فقط برچسب نمایشی را در لیستها تنظیم میکند.
هنگامی که یک مهارت فراخوانی میشود، محتوای رندر شدهٔ آن بهعنوان یک پیام واحد وارد گفتگو شده و تا پایان نشست (session) در آنجا باقی میماند. Claude Code فایل را در نوبتهای بعدی دوباره نمیخواند. دستورالعملهای دائمی بنویسید، نه مراحل یکباره؛ و بدنهٔ متن را مختصر نگه دارید، زیرا از آن لحظه به بعد، هر خط هزینهٔ تکراری برای هر درخواست خواهد داشت. پس از فشردهسازی خودکار (auto-compaction)، Claude Code آخرین فراخوانی هر مهارت را دوباره ضمیمه میکند و 5000 توکن اول هر کدام را در یک بودجهٔ ترکیبی 25000 توکنی نگه میدارد. اگر چندین مهارت بزرگ را در یک نشست فراخوانی کنید، قدیمیترین آنها کاملاً حذف میشوند؛ به همین دلیل است که یک مهارت ممکن است پس از یک گفتگوی طولانی دیگر تأثیری نداشته باشد. آن را دوباره فراخوانی کنید تا بازگردد. هنگامی که یک رویهٔ مشابه برای بیش از یک codebase کاربرد دارد، بهجای کپی کردن فایل در جاهای مختلف، یک مهارت را بین چندین مخزن به اشتراک بگذارید.
چه زمانی به یک MCP server نیاز دارید
افزودن یک سرور تنها با یک دستور انجام میشود و نوع transport، ساختار آن را تعیین میکند.
# Remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Remote HTTP server behind a bearer token
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
# Local stdio server: everything after -- is passed through untouched
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-serverاستفاده از -- اهمیت دارد. در یک سرور stdio، این جداکننده، گزینههای مربوط به Claude Code را از خط فرمانی که سرور شما را اجرا میکند، تفکیک میکند. اگر آن را حذف کنید، یک --port 8080 که برای سرور در نظر گرفته شده، به عنوان گزینهای برای claude mcp add تفسیر میشود و در نتیجه با خطا مواجه خواهید شد.
claude mcp list
claude mcp get notionclaude mcp add با یک خط Added ... تأیید میشود که تنها نشان میدهد پیکربندی در دیسک ذخیره شده است. claude mcp list دستوری است که واقعیت را به شما نشان میدهد، زیرا وضعیت سلامت هر سرور را چاپ میکند: ✔ Connected، ! Needs authentication، یا ✘ Failed to connect. وضعیت failure به این معناست که Claude Code نتوانسته به آن سرور متصل شود، نه اینکه دستور list دچار مشکل شده باشد. در طول یک session، دستور /mcp همان وضعیت را به ازای هر سرور به همراه تعداد ابزارها نمایش میدهد.
هر فراخوانی به یک MCP server مستقل است و هر آنچه نیاز دارد را به همراه میبرد؛ به همین دلیل است که یک MCP server درخواست قبلی شما را به خاطر نمیسپارد. این یک انتخاب طراحی است که پیامد آن بر عهده شماست: هر وضعیتی (state) که ارزش نگهداری داشته باشد، باید در پشت سرور، درون یک پایگاه داده یا یک فایل ذخیره شود و این چیزی است که اکنون شما مدیریت آن را بر عهده دارید.
یک سرور MCP فرآیندی است که باید آن را اجرا کنید
این هزینهای است که مقایسههای فروشندگان نادیده میگیرند. یک skill در واقع یک فایل است. اما یک سرور MCP نرمافزاری است که در جایی اجرا میشود و وقتی آن «جا» سرور مجازی (VPS) شما باشد، مسئولیت پایداری (uptime) آن با شماست.
یک سرور stdio حالت کمهزینه است. Claude Code آن را هنگام شروع نشست به عنوان یک فرآیند فرزند (child process) ایجاد میکند و با پایان نشست، آن فرآیند نیز خاتمه مییابد. در این حالت نیازی به مانیتورینگ یا زمانبندی جداگانه برای وصله کردن (patch) وجود ندارد. اما یک سرور HTTP از راه دور، یک سرویس ماندگار است و به همان چیزهایی نیاز دارد که هر سرویس ماندگار دیگری به آن محتاج است.
[Unit]
Description=Notes MCP server
After=network-online.target
Wants=network-online.target
[Service]
User=mcp
WorkingDirectory=/srv/notes-mcp
ExecStart=/usr/bin/node /srv/notes-mcp/dist/server.js
Environment=PORT=8931
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pagersystemctl is-active باید active را چاپ کند. اگر failed را چاپ کرد، لاگهای journal دلیل آن را در خود دارند؛ در اولین اجرا، این مشکل تقریباً همیشه به دلیل یک متغیر محیطی (environment variable) گمشده یا پورتی است که توسط برنامه دیگری اشغال شده است. Restart=on-failure در اینجا اختیاری نیست، زیرا یک سرور MCP که کرش کرده باشد، خودش این موضوع را اعلام نمیکند. شما زمانی متوجه میشوید که agent به شما بگوید نمیتواند issue tracker شما را بخواند.
فرآیند را به 127.0.0.1 متصل (bind) کنید و یک reverse proxy با TLS (امنیت لایه انتقال) در مقابل آن قرار دهید. سرور MCP که به دیتابیس شما دسترسی دارد و روی یک پورت عمومی بدون احراز هویت پاسخ میدهد، در واقع دیتابیس شما را عمومی کرده است. اجرای یک سرور MCP روی VPS به درستی مباحث مربوط به proxy، گواهیها و فایروال را پوشش میدهد.
سپس کارهای تکراری را صادقانه محاسبه کنید. این سرویس بهطور مستقل از agentای که با آن صحبت میکند، بهروزرسانیهای امنیتی دریافت میکند. توکن OAuth آن منقضی میشود و claude mcp list در لحظهای نامناسب شروع به چاپ ! Needs authentication میکند. اعتبارنامهها (credentials) در یک فایل پیکربندی یا یک هدر Authorization قرار میگیرند، بنابراین به همان مراقبتی نیاز دارند که هر secret دیگری نیاز دارد؛ موضوعی که خود بحث مفصلی است: دور نگه داشتن secretها از دسترس یک AI agent. هیچکدام از این کارها برای یک skill وجود ندارد.
پیش از ساخت، آن را با جایگزینهایش بسنجید. اگر دادههای پشت سرور پیشنهادی شما حدوداً هر سه ماه یکبار تغییر میکنند، یک skill که به agent میگوید کجا را نگاه کند و فیلدها چه معنایی دارند، ارزانتر از سرویسی است که باید آن را همیشه زنده نگه دارید.
نحوه اندازهگیری هزینه کانتکست (context) اختصاصی خود
حدس و گمان را متوقف کنید و /context را در یک نشست اجرا کنید. این دستور جزئیات راهاندازی را چاپ میکند: پرامپت سیستم، فایلهای حافظه، ابزارها و سرورهای MCP، به همراه وزن توکن هر کدام.
دو مورد را بررسی کنید. در بخش Memory files، تأیید کنید که تمام فایلهای قوانین (rules) مورد انتظار شما فهرست شده باشند. فایل گمشده برای ایجنت نامرئی است، بنابراین هنگام نادیده گرفته شدن دستورالعملها، این اولین موردی است که باید بررسی شود. سپس به هزینه سرورهای خود نگاه کنید. اگر سروری که دو بار در ماه از آن استفاده میکنید یکی از بزرگترین ردیفهای آن لیست است، آن را در /mcp غیرفعال کنید و فقط برای نشستهایی که به آن نیاز دارند، دوباره فعالش کنید. پیکربندی در هر دو حالت حفظ میشود.
یک سرور از راه دور ممکن است وضعیتی مانند cached 2h ago · connects on first use · 5 tools را گزارش دهد. این بدان معناست که Claude Code لیست ابزارها را از یک نشست قبلی خوانده است و به جای اتصال در زمان راهاندازی، اولین باری که ابزاری فراخوانی شود، متصل خواهد شد. ابزارها از همان پیام اول شما در دسترس هستند، بنابراین نیازی به اصلاح چیزی نیست. اگر ترجیح میدهید هر سرور در زمان راهاندازی متصل شود، MCP_DISCOVERY_CACHE=0 را تنظیم کنید. برای دید کلیتر، مدیریت پنجره کانتکست Claude Code توضیح میدهد که چه چیزی پس از فشردهسازی باقی میماند و هزینه واقعی آن توکنها برای شما این اعداد را به پول تبدیل میکند.
چرا مهارت (skill) من هرگز فعال نمیشود؟
دلیل معمول این اتفاق description است. این تنها متنی است که پیش از اجرای مهارت در context قرار دارد، بنابراین اگر وضعیت مورد نظر را توصیف نکند، هیچ تطابقی صورت نمیگیرد. ماشه (trigger) را به این صورت در جمله بنویسید: "Use when the user asks what changed, wants a commit message, or asks to review their diff." توصیفات مبهم بدون هیچ خطایی نادیده گرفته میشوند که تشخیص علت را دشوار میکند.
دلیل دوم، غلط تایپی در frontmatter است که بسیار آشکار است. یک کلید ناشناخته بلافاصله رد میشود:
Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, nameدلیل سوم، موقعیت مکانی است. مهارتهای پروژه از .claude/skills/ در دایرکتوری کاری شما و تمام دایرکتوریهای والد تا ریشه مخزن بارگذاری میشوند. مهارتهای موجود در دایرکتوریهای تو در تو پایینتر از جایی که شروع کردهاید، هنگام راهاندازی بارگذاری نمیشوند. این مهارتها اولین باری که عامل (agent) فایلی را در آن زیردایرکتوری بخواند یا ویرایش کند ظاهر میشوند، بنابراین تا آن زمان تکمیل خودکار (autocomplete) نمیشوند و با نام قابل فراخوانی نیستند.
معادل MCP برای این شکست خاموش، یک ورودی .mcp.json با یک url و بدون type است. Claude Code هر ورودی بدون type را به عنوان یک سرور stdio میخواند، بنابراین از آن ورودی عبور کرده و گزارش میدهد:
MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entryاستفاده همزمان از هر سه مورد
این مکانیزمها برای تصاحب یک جایگاه با هم رقابت نمیکنند. یک پیکربندی کارآمد از هر کدام در جایی استفاده میکند که هزینه کمتری دارد. فایل rules شامل چند خط محدود است که در همه جا صادق هستند. Skills رویهها را در خود نگه میدارند و تنها زمانی بارگذاری میشوند که کاربرد داشته باشند. یک سرور MCP، و گاهی دو سرور، سیستمهایی را متصل میکنند که محتوای آنها را نمیتوان از پیش پیشبینی کرد. اگر هنوز در حال ساخت مدل ذهنی خود از اولین مورد هستید، اینکه یک agent skill واقعاً چیست جزئیات مربوط به فرمت آن را پوشش میدهد.
یک آزمایش، اکثر بحثها درباره اینکه هر چیزی به کجا تعلق دارد را حل میکند. آن را حذف کنید، یک نشست (session) جدید شروع کنید و وظیفه را به agent بسپارید. اگر agent صرفاً کندتر عمل میکند، آن مورد متعلق به یک skill بوده است. اگر agent با اطمینان پاسخ اشتباه میدهد، آن مورد متعلق به فایل rules بوده است. اگر agent اصلاً نمیتواند اطلاعات را دریافت کند، شما به آن سرور نیاز داشتهاید و اکنون برای سرپا نگه داشتن آن سرور نیز به یک برنامه نیاز دارید.
FAQ
آیا باید یک مهارت (Skill) بنویسم یا یک سرور MCP راهاندازی کنم؟
تصمیمگیری بر این اساس است که آیا اطلاعات بین یک فراخوانی و فراخوانی بعدی تغییر میکند یا خیر. اگر عامل (Agent) باید وضعیت زندهای را بخواند که شخص دیگری میتواند آن را ویرایش کند، مانند یک سیستم ردیابی تیکت، پایگاه داده یا داشبورد، به یک سرور MCP نیاز دارید؛ زیرا هر چیزی که یادداشت کنید به محض تغییر رکورد، قدیمی میشود. اگر میتوانید پاسخ را یک بار بنویسید و تا 6 هفته دیگر همچنان درست باشد، یک مهارت بنویسید. مهارت یک فایل در git است که هیچ فرآیندی برای اجرا، هیچ پورتی برای باز کردن و هیچ برنامه زمانبندی برای وصله (Patch) ندارد، بنابراین هر زمان که ممکن باشد، گزینه ارزانتری است.
آیا سرورهای MCP همچنان پنجره کانتکست (Context Window) من را پر میکنند؟
بسیار کمتر از گذشته. جستجوی ابزار (Tool search) بهصورت پیشفرض در نسخه فعلی Claude Code فعال است، بنابراین فقط نام ابزارها و فیلد دستورالعملهای سرور در شروع نشست بارگذاری میشوند و طرحوارههای (Schemas) کامل زمانی که Claude آنها را جستجو میکند، فراخوانی میشوند. بارگذاری اولیه (Upfront loading) همچنان زمانی رخ میدهد که جستجوی ابزار خاموش باشد: با ENABLE_TOOL_SEARCH=false، با ANTHROPIC_BASE_URL که به یک پروکسی غیر از طرف اول اشاره دارد، یا در مدلهای قدیمیتر از نسل Claude 4.5. دستور /context را اجرا کنید تا ببینید در چه وضعیتی هستید، زیرا اعداد موجود در پستهای مقایسهای قدیمی، فرض را بر بارگذاری اولیه گذاشتهاند.
آیا Claude Code فایل AGENTS.md را میخواند؟
خیر. Claude Code فایل CLAUDE.md را میخواند. اگر مخزن شما از قبل یک AGENTS.md برای سایر عاملها دارد، بهجای نگهداری دو نسخه، یکی را به دیگری ارجاع دهید. برای ایجاد یک symlink ساده، ln -s AGENTS.md CLAUDE.md را اجرا کنید یا @AGENTS.md را در خط اول یک CLAUDE.md قرار دهید و دستورالعملهای اختصاصی Claude را زیر آن اضافه کنید. سپس یک نشست را شروع کرده و /context را اجرا کنید تا تأیید کنید که CLAUDE.md در بخش Memory files ظاهر میشود.
چرا مهارت من در میانه یک نشست دیگر تأثیری ندارد؟
دلیل معمول آن فشردهسازی خودکار (Auto-compaction) است. هنگامی که مکالمه خلاصهسازی میشود، Claude Code آخرین فراخوانی هر مهارت را دوباره متصل میکند و 5000 توکن اول از هر کدام را در یک بودجه ترکیبی 25000 توکنی برای همه آنها نگه میدارد. این بودجه از آخرین مهارت فراخوانیشده پر میشود، بنابراین اگر چندین مهارت بزرگ را فراخوانی کرده باشید، مهارتهای قدیمیتر بهطور کامل حذف میشوند. برای بازیابی محتوای کامل، مهارت را دوباره فراخوانی کنید.
چگونه از بارگذاری یک فایل قوانین طولانی در هر نشست جلوگیری کنم؟
بخشهایی که فقط گاهی اوقات اهمیت دارند را به فایلهای .claude/rules/ با فیلد paths در frontmatter آنها منتقل کنید تا هر کدام فقط زمانی بارگذاری شوند که عامل با یک فایل منطبق کار میکند. تقسیم فایل به importهای @path کمکی نمیکند، زیرا فایلهای واردشده (Imported) در زمان راهاندازی، در کنار فایلی که به آنها ارجاع داده، بسط داده و بارگذاری میشوند. هر چیزی که یک رویه چندمرحلهای است و نه یک واقعیت ثابت، باید به یک مهارت تبدیل شود، زیرا بدنه یک مهارت تا زمانی که فراخوانی نشود، هزینهای ندارد.