Case Studies · Parhum Khoshbakht

سطح‌بندی مهارت‌ها: مدل چهار سطلی که بیش از 80 مهارت ما را از کانتکست بیرون نگه می‌دارد

افشای تدریجی یعنی 80 مهارت می‌تواند 3,200 توکن متادیتا خرج کند، یا صفر. اینجا می‌بینید چطور هر مهارت در مخزن Statnive را در یکی از چهار دستهٔ همیشه‌فعال، خودفراخوان، فقط‌دستی یا فورک طبقه‌بندی می‌کنیم — و آن آزمون تک‌سؤالی که برای تصمیم‌گیری به کار می‌بریم.

چرا مهارت بیشتر لزوماً به معنای کانتکست کمتر نیست

پیکربندی Claude Code در Statnive بیش از 80 مهارت را بار می‌کند که مدیریت محصول، اسکفولدینگ بک‌اند، QA، ممیزی امنیتی، الگوهای مخصوص وردپرس، بسته‌بندی نسخه و موارد دیگر را پوشش می‌دهند. چارچوبی که رویش می‌سازیم (jaan.to) خودش 141 مهارت دارد. یک برداشت ساده‌انگارانه: مهارت بیشتر، سربار کانتکست بیشتر، فضای کمتر برای کار واقعی.

اما حساب‌وکتاب واقعی جالب‌تر است. 80 مهارت می‌تواند 3,200 توکن متادیتای دائمی خرج کند، یا صفر؛ این بستگی دارد به اینکه هر مهارت چطور پیکربندی شده باشد. تفاوت در همان مدل سطح‌بندی چهار سطلی است که سیستم مهارت Claude Code تعریف می‌کند، به‌علاوهٔ یک آزمون تک‌سؤالی برای انتخاب سطل درست.

این نوشته هر چهار سطل را با توزیع واقعی مهارت‌های Statnive، آزمونی که برای تصمیم‌گیری به کار می‌بریم، و سه چیزی که اول اشتباه کردیم تا درستش را پیدا کنیم، مرور می‌کند.

افشای تدریجی: سازوکاری که زیرش نشسته

پیش از اینکه مدل سطح‌بندی معنا پیدا کند، باید سازوکار بارگذاری روشن شود. Claude Code برای مهارت‌ها از سه لایه افشای تدریجی استفاده می‌کند:

لایهچه چیزی بار می‌شودچه زمانیهزینه
1 — متادیتاکلیدهای name و description در فرانت‌متر YAMLهمیشه، هنگام راه‌اندازیحدود 30 تا 50 توکن برای هر مهارت
2 — بدنهمحتوای کامل SKILL.mdهنگام فراخوانی مهارتAnthropic 500 خط یا حدود 5 هزار توکن یا کمتر را توصیه می‌کند
3 — منابع همراهاسکریپت‌ها، قالب‌ها و مراجع ارجاع‌شدهفقط هنگام دسترسیهزینهٔ پایهٔ صفر

این همان اهرمی است که مدل سطح‌بندی به کار می‌گیرد. لایهٔ متادیتا تنها چیزی است که همیشه در کانتکست حضور دارد. بقیه به‌صورت درخواستی بار می‌شوند.

برای یک چارچوب 141 مهارتی، این یعنی 4,200 تا 14,100 توکن سربار دائمی فقط برای متادیتا، که خطی با تعداد مهارت‌ها رشد می‌کند. اگر توضیح‌ها پرگو باشند بیشتر می‌شود. کمتر — یا صفر — اگر به برخی مهارت‌ها بگویید کلاً از ثبت در فهرست متادیتا صرف‌نظر کنند.

یک باگ مستندشده (مسئلهٔ #14882 در GitHub مربوط به Claude Code) گزارش می‌دهد که برخی مهارت‌های افزونه‌ای ممکن است به‌جای فقط فرانت‌متر، کل بدنهٔ خود را هنگام راه‌اندازی مصرف کنند. ما در خروجی /context خودمان مراقب این موضوع هستیم. اگر خط متادیتای مهارت‌های شما عددی به‌مراتب بالاتر از حدود 50 توکن ضربدر تعداد مهارت‌های خودفراخوان نشان می‌دهد، دارید به همین باگ برمی‌خورید.

چهار سطل

هر مهارت در مخزن Statnive در یکی از چهار سطل جا می‌گیرد. تنها فیلد فرانت‌متری که هرکدام را تعریف می‌کند:

سطل 1 — همیشه‌فعال (فرانت‌متر پیش‌فرض)

---
name: simplify
description: Review changed code for reuse, quality, efficiency. Auto-fixes issues.
---

این‌ها مهارت‌های اصلی جریان کار هستند که مدل باید خودکار به سمتشان مسیریابی کند. فرانت‌متر استاندارد — بدون هیچ پرچم ویژه‌ای. متادیتا هنگام راه‌اندازی بار می‌شود؛ بدنه هنگام فراخوانی.

نمونه‌های Statnive: simplify، statnive-release، statnive-release-zip. این‌ها در بیشتر کارهای مرتبط با انتشار نسخه فعال می‌شوند.

هزینه به‌ازای هر مهارت: حدود 40 توکن متادیتای دائمی در کانتکست.

سطل 2 — خودفراخوان (فرانت‌متر پیش‌فرض، توضیح کوتاه)

از دید Claude Code همان پیکربندی همیشه‌فعال است. تمایز ویراستارانه است: این‌ها مهارت‌های حوزه‌ای هستند که فقط وقتی کلیدواژه‌های محرکشان مطابقت داشته باشد فعال می‌شوند. نظم کار در این است که توضیح را محرک‌محور و کوتاه نگه دارید.

---
name: wp-rest-api
description: Use when building REST endpoints in WordPress plugins.
---

توضیح بد (باز هم کار می‌کند، ولی گران‌تر تمام می‌شود):

description: A comprehensive skill for working with the WordPress REST API,
  including endpoint registration, controller patterns, schema validation,
  authentication, response shaping, and CPT/taxonomy exposure...

توضیح خوب (بالا): 13 توکن. توضیح بد: 38 توکن. در بیش از 60 مهارت خودفراخوان، این تفاوت چیزی حدود 1,500 توکن صرفه‌جویی در متادیتای دائمی است.

نمونه‌های Statnive: wp-rest-api، wp-plugin-development، wp-performance، react-best-practices، wp-block-development و همهٔ مهارت‌های برنامه‌ریزی jaan-to:*.

هزینه به‌ازای هر مهارت: حدود 30 تا 50 توکن متادیتای دائمی در کانتکست.

سطل 3 — فقط‌دستی (disable-model-invocation: true)

---
name: statnive-emergency-rollback
description: Emergency-only rollback procedure for a botched deploy.
disable-model-invocation: true
---

مهارت وجود دارد، دستور اسلش هم کار می‌کند (/statnive-emergency-rollback)، اما متادیتا هرگز وارد فهرست <available_skills> نمی‌شود. Claude از وجودش خبر ندارد، مگر اینکه کاربر آن را صراحتاً فراخوانی کند.

هزینه به‌ازای هر مهارت: 0 توکن. این همان سطل جادویی است.

کجا به کارش ببرید: جریان‌های کاری نادر، عملیات مخرب، و هر چیزی که نمی‌خواهید مدل خودکار به سمتش مسیریابی کند. اگر فقط‌دستی‌کردن یک مهارت باعث شود یک جریان کاری نتواند کامل شود، آن مهارت جایش در سطل 1 یا 2 است.

نمونه‌های Statnive: بازگردانی اضطراری، جراحی دستی دیتابیس، اسکریپت‌های مهاجرت یک‌بارمصرف، و هر چیزی که «فقط محض احتیاط» وجود دارد ولی نباید فرصت‌طلبانه فعال شود.

تقریباً نیمی از مهارت‌هایمان را با disable-model-invocation: true علامت می‌زنیم. در بیش از 80 مهارت، این یعنی حدود 1,800 توکن از متادیتای پایه پس گرفته می‌شود — و جالب اینکه کیفیت مسیریابی روی مهارت‌های خودفراخوان باقی‌مانده هم بهتر شد، چون Claude دیگر مجبور نبود بین گزینه‌های تقریباً یکسان یکی را انتخاب کند.

سطل 4 — فورک / زیرعامل (context: fork)

---
name: simplify
description: Review changed code for reuse, quality, efficiency. Auto-fixes issues.
context: fork
---

حالت فورک، مهارت را در کانتکست یک زیرعامل جداگانه اجرا می‌کند که تاریخچهٔ گفت‌وگوی خودش و پنجرهٔ 200 هزار توکنی مخصوص خودش را دارد. خروجی کار از پنجرهٔ کانتکست اصلی بیرون می‌ماند. فقط یک خلاصه برمی‌گردد.

برای جریان‌های کاری خودبسنده مثل بازبینی کد، ممیزی امنیتی و پژوهش چندمرحله‌ای، این تحول‌آفرین است. Anthropic مستند کرده که زیرعامل‌ها حدود 500 تا 1000 توکن از بیش از 10 هزار توکن کار درونی برمی‌گردانند — یعنی روی کارهای پیچیده‌ای که زیرعامل خواندن و پردازش سنگینی انجام داده، تقریباً 37% کاهش در کانتکست اصلی.

نمونه‌های Statnive: simplify (سه عامل بازبینی موازی که یک خلاصه برمی‌گردانند)، jaan-to:backend-pr-review، jaan-to:sec-audit-remediate، jaan-to:detect-dev. هر چیزی که فایل‌های زیادی را می‌خواند و یک حکم برمی‌گرداند.

هزینه به‌ازای هر مهارت: حدود 40 توکن متادیتا، اما خودِ کار در انزوا انجام می‌شود.

آزمون تک‌سؤالی

این چهار سطل شبیه چهار تصمیم به نظر می‌رسند. در واقع یک تصمیم‌اند: آیا گفت‌وگوی اصلی لازم است کار میانیِ مهارت را ببیند؟

پاسخسطل
بله — مهارت کدی می‌نویسد که نشست اصلی به ویرایشش ادامه می‌دهدهمیشه‌فعال یا خودفراخوان
نه — مهارت یک حکم، خلاصه یا گزارش برمی‌گرداندفورک / زیرعامل
شاید — اما هرگز نباید خودکار فعال شود (نادر، مخرب، عجیب)فقط‌دستی

اگر پاسخ «نه» است، context: fork را تنظیم کنید. کانتکست اصلی‌تان تمیز می‌ماند و می‌توانید برای کار خواندن‌محورِ زیرعامل از Haiku 4.5 (با هزینهٔ $1/$5 به‌ازای هر میلیون توکن) استفاده کنید، در حالی که نشست اصلی روی Sonnet یا Opus کار می‌کند. این علاوه بر صرفه‌جویی در کانتکست، یک برد سه‌برابری در هزینه هم هست.

اگر پاسخ «بله» است، مهارت در سطل 1 یا 2 می‌نشیند. انتخاب میان همیشه‌فعال و خودفراخوان ویراستارانه است: Claude با چه اطمینانی می‌تواند این مهارت را از روی نشانه‌های زبان طبیعی فعال کند؟ محرک‌های قوی و بدون ابهام در سطل خودفراخوان جا می‌گیرند. جریان‌های کاری‌ای که مدل باید در بیشتر نشست‌ها در نظر بگیرد، در سطل همیشه‌فعال.

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

توزیع واقعی مهارت‌های Statnive

این هم تفکیک فعلی ما در حدود 85 مهارت:

سطلتعدادهزینهٔ کل متادیتایادداشت‌ها
همیشه‌فعال8حدود 320 توکنانتشار، simplify، برنامه‌ریزی اسپرینت، بازبینی PR
خودفراخوان38حدود 1,520 توکنمهارت‌های حوزه‌ای با کلیدواژه‌های محرک قوی
فقط‌دستی320 توکنفقط با دستور اسلش
فورک / زیرعامل7حدود 280 توکنبازبینی‌ها، ممیزی‌ها، تشخیص‌ها
هزینهٔ کل متادیتا85حدود 2,120 توکنحدود 1% از کانتکست

بدون سطح‌بندی — اگر هر 85 مهارت پیش‌فرض بودند — تقریباً 3,400 توکن متادیتای دائمی می‌پرداختیم. همان 32 مهارت فقط‌دستی به‌تنهایی حدود 1,280 توکن صرفه‌جویی می‌کنند. در انزوا کوچک به نظر می‌رسد؛ اما وقتی روی هم با کوتاه‌سازی CLAUDE.md و جستجوی ابزار MCP انباشته شود، اهمیت پیدا می‌کند.

محدودیت بدنه: چرا 500 خط عدد درستی است

سمت متادیتا سربار دائمی است. سمت بدنه سربار هر فراخوانی است — و کنترلش به همان اندازه مهم.

Anthropic توصیه می‌کند هر SKILL.md را زیر 500 خط (حدود 5 هزار توکن) نگه دارید. پژوهش‌ها روی بهینه‌سازی تهاجمی این رقم را تا سقف سخت 600 خط برای بدنهٔ هر مهارت بالا می‌برند، با این شرط که هر چیزی فراتر از آن به استخراج مرجع نیاز دارد: قالب‌ها، چک‌لیست‌های بلند، مقایسه‌های چندپشته‌ای و فهرست‌های الگوی غلط را از SKILL.md بیرون بکشید و در فایل‌های جداگانه‌ای بگذارید که با اشاره‌گرهای روشن به آن‌ها ارجاع داده می‌شود.

این الگو این شکلی است:

.claude/skills/wp-plugin-development/
├── SKILL.md                          # 380 lines — execution core only
└── references/
    ├── activation-deactivation-patterns.md   # Loaded only when needed
    ├── settings-api-patterns.md
    ├── nonce-and-capability-checklist.md
    └── release-packaging-checklist.md

هستهٔ اجرایی فشرده و قطعی باقی می‌ماند. مراجع به‌صورت درخواستی بار می‌شوند و تا وقتی به آن‌ها دسترسی پیدا نشده، صفر توکن خرج می‌کنند. ما سه تا از سنگین‌ترین مهارت‌هایمان را به همین شکل بازسازی کردیم و حدود 12 هزار توکن از بودجهٔ فراخوانی معمول کم کردیم.

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

allowed-tools: ["Read", "Grep", "Glob"]

این کار محدود می‌کند که مهارت به کدام ابزارها دسترسی دارد و هم سربار توکن و هم سطح اجرا را کاهش می‌دهد. مهارتی که فقط کد می‌خواند نباید به Write، Bash یا ابزارهای MCP دسترسی داشته باشد — باریک‌کردن مجموعهٔ ابزارها، شِمایی را که هنگام فعال‌شدن مهارت تزریق می‌شود باریک می‌کند و دسته‌های کاملی از رفتار تصادفی را حذف می‌کند.

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

اعتراف‌های صادقانه، با همان الگوی بقیهٔ این مجموعه:

  1. با توضیح‌های پرگو شروع کردیم. موج اول مهارت‌هایمان توضیح‌های بیش از 60 توکنی داشت که برای خوانندهٔ انسانی بهینه شده بودند. کار می‌کردند، اما دو برابر چیزی که لازم داشتند خرج می‌کردند. دور اول کوتاه‌سازی، حدود 1,400 توکن متادیتا را در سطل خودفراخوان کم کرد.
  2. سه مهارت داشتیم که کار مشابهی می‌کردند. سطل خودفراخوان pm-roadmap-add، pm-roadmap-update و pm-sprint-plan را با محرک‌های همپوشان داشت. مسیریابی شبیه شیر یا خط شده بود. آن‌ها را یکی کردیم و محرک‌ها را شفاف‌تر کردیم. دقت مسیریابی بالا رفت؛ هزینهٔ متادیتا پایین آمد.
  3. مهارت‌های سنگینی داشتیم که از حالت فورک استفاده نمی‌کردند. simplify در ابتدا درون‌خطی اجرا می‌شد. بیش از 30 فایل را می‌خواند، سه پاس بازبینی را اجرا می‌کرد و یک گزارش 2 هزار توکنی برمی‌گرداند — همهٔ این کار درونی کانتکست اصلی را آلوده می‌کرد. تغییر به context: fork مصرف معمول کانتکست اصلی را در هر نشست انتشار حدود 9 هزار توکن کم کرد.

گام اندازه‌گیری

مثل بقیهٔ این مجموعه: /context ابزار تشخیص است. خطی که برای سطح‌بندی مهارت‌ها مراقبش هستید همان است که تعداد توکن متادیتای مهارت‌ها را نشان می‌دهد. هدف‌هایی که به کار می‌بریم:

منبعهدفسقف سخت
متادیتای مهارت2,500 توکن یا کمتر5,000
تعداد مهارت‌های خودفراخوان60 یا کمتر
بدنهٔ هر تک SKILL.md500 خط / حدود 5 هزار توکن یا کمتر600 خط / حدود 8 هزار توکن

اگر خط متادیتای مهارت‌هایتان خیلی بالاتر از 5 هزار توکن است و کمتر از 100 مهارت دارید، احتمالاً یا توضیح‌های پرگو دارید (مشکل سطل 2) یا به همان باگ بارگذاری برخورده‌اید که قبلاً اشاره کردیم (مشکل سطل 1).

این موضوع چطور به بقیهٔ Statnive وصل می‌شود

ما 248 تست واحد PHP را روی هر کامیت اجرا می‌کنیم. هر نسخه پیش از انتشار از 22 دروازهٔ انتشار عبور می‌کند. مهارت‌هایی که همهٔ این‌ها را هماهنگ می‌کنند — statnive-release، simplify، wp-plugin-development و تولیدکننده‌های QA — روی هم تقریباً در 2,100 توکن متادیتای دائمی جا می‌گیرند. کار انجام می‌شود، کانتکست تمیز می‌ماند و تیم کوچک باقی می‌ماند.

مدل چهار سطلی یک تمرین آکادمیک نیست. به همین دلیل است که می‌توانیم یک افزونهٔ آمار وردپرس را زیر بودجهٔ ردیاب 5KB منتشر کنیم، بدون اینکه پشتش یک تیم پنج‌نفره باشد.

Statnive را امتحان کنید

آنالیتیکس وردپرس با محوریت حریم خصوصی، ساخته‌شدهٔ تیمی که /context را بیشتر از /help اجرا می‌کند. Statnive را رایگان از WordPress.org نصب کنید — داده‌هایتان روی سرور خودتان می‌ماند و کتابخانهٔ مهارت‌های ما هم با خیال راحت زیر بودجهٔ توکنش جا می‌گیرد.

Get Statnive Free