فرض کنید یک Skill برای بررسی PRها ساختید و بعد از چند بار استفاده، به نتیجه خوبی رسیدید.

فایلش رو برای بقیه اعضای تیم می‌فرستید. یکی کپی می‌کنه داخل .agents/skills، یکی می‌ذاره داخل .claude/skills و یکی هم چند خطش رو تغییر می‌ده تا روی سیستم خودش بهتر کار کنه.

دو هفته بعد چند نسخه مختلف از همون Skill داریم و دیگه دقیقاً معلوم نیست نسخه اصلی کدومه.

اینجا Skill دیگه فقط یک prompt شخصی نیست؛ تبدیل شده به یک dependency تیمی.

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

برای اشتراک‌گذاری تیمی هم بهتره یک repository مشخص، review و نسخه ثابت داشته باشه. نه اینکه هر کس یک کپی متفاوت روی سیستم خودش نگه داره و همه هم فکر کنن آخرین نسخه دست اون‌هاست.

باید دقت کنیم که ما معمولاً به SKILL.md مثل یک فایل Markdown نگاه می‌کنیم، ولی Agent محتوای اون رو به‌عنوان دستورالعمل قابل اعتماد وارد context خودش می‌کنه.

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

اگر Skill همراه خودش script داشته باشه، خطر دیگه فقط prompt injection نیست؛ ممکنه به اجرای کد و یک حمله واقعی در زنجیره تأمین نرم‌افزار تبدیل بشه.

حتی لازم نیست Skill اصلی مخرب باشه. ممکنه dependency که توی Skill بهش اشاره شده آلوده بشه یا یک آپدیت بدون review رفتار Skill رو عوض کنه.

آآآما ماجرا وقتی ترسناک‌تر میشه که می‌ریم سراغ Skillهای پابلیک. عمده محتوای Skillها متن‌های Markdown هستن که بشر (انواع گونه‌های دولوپر) همیشه از نوشتن و خوندنشون فرار می‌کرده.

ولی Agent خط‌به‌خط و کلمه‌به‌کلمه می‌خونه و بهش عمل می‌کنه.

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

اینجاست که SBOM هم می‌تونه کمک کنه بفهمیم چه Skill، script و dependencyهایی وارد سیستم شدن. البته SBOM فقط فهرست اجزاست و به‌تنهایی تضمین نمی‌کنه که اون‌ها امن هستن.

خلاصه اوضاعی شده که ایجنت دیگه صاحابش رو هم نمی‌شناسه 😁