شروع کار با مهارت‌ها در گوگل آنتی‌گراویتی

۱. مقدمه

گوگل آنتی‌گراویتی (که در ادامه سند با نام آنتی‌گراویتی از آن یاد می‌شود) یک IDE ایجنت از گوگل است. در شروع کار با Antigravity codelab ، می‌توانید اصول اولیه Antigravity را بیاموزید. در این codelab، ما از Antigravity برای ساخت مهارت‌های عامل (Agent Skills)، یک قالب سبک و باز برای گسترش قابلیت‌های عامل هوش مصنوعی با دانش و گردش‌های کاری تخصصی، استفاده خواهیم کرد. شما قادر خواهید بود مهارت‌های عامل، مزایای آنها و نحوه ساخت آنها را بیاموزید. سپس چندین مهارت عامل از قالب‌بندی Git، تولیدکننده قالب، داربست کد ابزار و موارد دیگر را خواهید ساخت که همگی در Antigravity قابل استفاده هستند.

پیش‌نیازها:

  • گوگل آنتی گراویتی نصب و پیکربندی شده است.
  • آشنایی اولیه با Google Antigravity. توصیه می‌شود Codelab: شروع کار با Google Antigravity را تکمیل کنید.

۲. چرا مهارت‌ها

عامل‌های هوش مصنوعی مدرن از شنوندگان ساده به استدلال‌کنندگان پیچیده‌ای تکامل یافته‌اند که با سیستم‌های فایل محلی و ابزارهای خارجی (از طریق سرورهای MCP) ادغام می‌شوند. با این حال، بارگذاری بی‌هدف یک عامل با کل پایگاه‌های کد و صدها ابزار منجر به اشباع متن و "انباشت ابزار" می‌شود. حتی با وجود پنجره‌های متن بزرگ، تخلیه ۴۰ تا ۵۰ هزار توکن از ابزارهای استفاده نشده در حافظه فعال باعث تأخیر زیاد، اتلاف مالی و "پوسیدگی متن" می‌شود، که در آن مدل توسط داده‌های نامربوط گیج می‌شود.

راه حل: مهارت‌های عامل

برای حل این مشکل، شرکت آنتروپیک (Anthropic) با معرفی مهارت‌های عامل (Agent Skills )، معماری را از بارگذاری یکپارچه‌ی زمینه (monolithic context loading) به افشای پیش‌رونده (progressive Disclosure ) تغییر داد. به جای اینکه مدل را مجبور به "به خاطر سپردن" هر گردش کار خاص (مانند انتقال پایگاه داده یا ممیزی‌های امنیتی) در ابتدای یک جلسه کند، این قابلیت‌ها در واحدهای ماژولار و قابل کشف بسته‌بندی می‌شوند.

چگونه کار می‌کند؟

این مدل در ابتدا فقط در معرض یک «منوی» سبک از فراداده‌ها قرار می‌گیرد. این مدل دانش رویه‌های سنگین (دستورالعمل‌ها و اسکریپت‌ها) را فقط زمانی بارگذاری می‌کند که قصد کاربر به طور خاص با یک مهارت مطابقت داشته باشد. این تضمین می‌کند که توسعه‌دهنده‌ای که درخواست بازسازی میان‌افزار احراز هویت را دارد، بدون بارگذاری خطوط لوله CSS نامرتبط، زمینه امنیتی را دریافت می‌کند و زمینه را سبک، سریع و مقرون به صرفه نگه می‌دارد.

d3f4bcb065a19fea.png

۳. مهارت‌های عامل و ضدجاذبه

در اکوسیستم Antigravity، اگر مدیر عامل مغز و ویرایشگر بوم نقاشی باشد، مهارت‌ها به عنوان ماژول‌های آموزشی تخصصی عمل می‌کنند که شکاف بین مدل عمومی Gemini 3 و زمینه خاص شما را پر می‌کنند. آن‌ها به عامل اجازه می‌دهند تا مجموعه‌ای از دستورالعمل‌ها و پروتکل‌های تعریف‌شده - مانند استانداردهای مهاجرت پایگاه داده یا بررسی‌های امنیتی - را تنها زمانی که یک کار مرتبط درخواست می‌شود، "مجهز" کند. با بارگذاری پویای این پروتکل‌های اجرایی، مهارت‌ها به طور مؤثر هوش مصنوعی را از یک برنامه‌نویس عمومی به یک متخصص تبدیل می‌کنند که به شدت به بهترین شیوه‌ها و استانداردهای ایمنی مدون سازمان پایبند است.

مهارت در ضد جاذبه چیست؟

در زمینه Google Antigravity، یک Skill یک بسته مبتنی بر دایرکتوری است که شامل یک فایل تعریف ( SKILL.md ) و دارایی‌های پشتیبانی اختیاری (اسکریپت‌ها، منابع، قالب‌ها) می‌باشد.

این مکانیزمی برای گسترش قابلیت‌ها بر اساس تقاضا است.

  • بر اساس تقاضا : برخلاف System Prompt (که همیشه بارگذاری می‌شود)، یک Skill فقط زمانی در context عامل بارگذاری می‌شود که عامل تشخیص دهد به درخواست فعلی کاربر مرتبط است. این کار پنجره context را بهینه می‌کند و از حواس‌پرتی عامل توسط دستورالعمل‌های نامربوط جلوگیری می‌کند. در پروژه‌های بزرگ با ده‌ها ابزار، این بارگذاری انتخابی برای عملکرد و دقت استدلال بسیار مهم است.
  • گسترش قابلیت : مهارت‌ها می‌توانند کاری بیش از آموزش انجام دهند؛ آن‌ها می‌توانند اجرا کنند. با بسته‌بندی اسکریپت‌های پایتون یا بش، یک مهارت می‌تواند به عامل توانایی انجام اقدامات پیچیده و چند مرحله‌ای را در دستگاه محلی یا شبکه‌های خارجی بدون نیاز به اجرای دستی دستورات توسط کاربر بدهد. این امر عامل را از یک تولیدکننده متن به یک کاربر ابزار تبدیل می‌کند.

مهارت‌ها در مقابل اکوسیستم (ابزارها، قوانین و گردش‌های کاری)

در حالی که پروتکل زمینه مدل (MCP) به عنوان "دست‌های" عامل عمل می‌کند - و اتصالات پایدار و قدرتمندی را با سیستم‌های خارجی مانند GitHub یا PostgreSQL فراهم می‌کند - مهارت‌ها به عنوان "مغز" عمل می‌کنند که آنها را هدایت می‌کنند.

MCP زیرساخت stateful را مدیریت می‌کند، در حالی که Skills تعاریف سبک و زودگذر وظایف هستند که روش‌شناسی استفاده از آن ابزارها را بسته‌بندی می‌کنند. این رویکرد بدون سرور به عامل‌ها اجازه می‌دهد تا وظایف ad-hoc (مانند ایجاد گزارش تغییرات یا مهاجرت‌ها) را بدون سربار عملیاتی اجرای فرآیندهای مداوم اجرا کنند، زمینه را فقط زمانی که وظیفه فعال است بارگذاری کنند و بلافاصله پس از آن آن را آزاد کنند.

از نظر عملکردی، مهارت‌ها (Skills) یک حد وسط منحصر به فرد بین «قوانین» (محافظ‌های غیرفعال و همیشه فعال) و «گردش‌های کاری» (ماکروهای فعال و فعال توسط کاربر) را اشغال می‌کنند. برخلاف گردش‌های کاری که به دستورات خاصی نیاز دارند (مثلاً /test )، مهارت‌ها توسط عامل فعال می‌شوند: مدل به طور خودکار قصد کاربر را تشخیص می‌دهد و به صورت پویا تخصص خاص مورد نیاز را تجهیز می‌کند. این معماری امکان ترکیب‌پذیری قدرتمند را فراهم می‌کند. به عنوان مثال، یک قانون جهانی می‌تواند استفاده از یک مهارت «مهاجرت ایمن» را در طول تغییرات پایگاه داده اعمال کند، یا یک گردش کاری واحد می‌تواند چندین مهارت را برای ساخت یک خط لوله استقرار قوی هماهنگ کند.

۴. ایجاد مهارت‌ها

ایجاد یک مهارت در Antigravity از یک ساختار دایرکتوری و فرمت فایل خاص پیروی می‌کند. این استانداردسازی تضمین می‌کند که مهارت‌ها قابل حمل هستند و عامل می‌تواند آنها را به طور قابل اعتمادی تجزیه و اجرا کند. طراحی عمداً ساده است و با تکیه بر فرمت‌های شناخته شده‌ای مانند Markdown و YAML، موانع ورود را برای توسعه‌دهندگانی که مایل به گسترش قابلیت‌های IDE خود هستند، کاهش می‌دهد.

ساختار دایرکتوری

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

  1. محدوده فضای کاری : در <workspace-root>/.agent/skills/ قرار دارد. این مهارت‌ها فقط در داخل پروژه خاص در دسترس هستند. این برای اسکریپت‌های خاص پروژه، مانند استقرار در یک محیط خاص، مدیریت پایگاه داده برای آن برنامه یا تولید کد تکراری برای یک چارچوب اختصاصی، ایده‌آل است.
  2. محدوده سراسری : در مسیر ~/.gemini/antigravity/skills/ قرار دارد. این مهارت‌ها در تمام پروژه‌های روی دستگاه کاربر در دسترس هستند. این محدوده برای ابزارهای عمومی مانند «قالب‌بندی JSON»، «تولید UUID»، «بررسی سبک کد» یا ادغام با ابزارهای بهره‌وری شخصی مناسب است.

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

my-skill/
├── SKILL.md # The definition file
├── scripts/ # [Optional] Python, Bash, or Node scripts
     ├── run.py
     └── util.sh
├── references/ # [Optional] Documentation or templates
     └── api-docs.md
└── assets/ # [Optional] Static assets (images, logos)

این ساختار به طور مؤثر دغدغه‌ها را از هم جدا می‌کند. منطق ( scripts ) از دستورالعمل ( SKILL.md ) و دانش ( references ) جدا شده است، که منعکس کننده شیوه‌های استاندارد مهندسی نرم‌افزار است.

فایل تعریف SKILL.md

فایل SKILL.md مغز متفکر مهارت است. این فایل به عامل می‌گوید که مهارت چیست، چه زمانی از آن استفاده کند و چگونه آن را اجرا کند.

از دو بخش تشکیل شده است:

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

فرانت‌متر YAML

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

---
name: database-inspector
description: Use this skill when the user asks to query the database, check table schemas, or inspect user data in the local PostgreSQL instance.
---

فیلدهای کلیدی:

  • name : این مورد اجباری نیست. باید در محدوده‌ی مورد نظر منحصر به فرد باشد. حروف کوچک و خط فاصله مجاز است (مثلاً postgres-query ، pr-reviewer ). اگر ارائه نشود، به طور پیش‌فرض نام دایرکتوری در نظر گرفته می‌شود.
  • توضیحات : این فیلد اجباری و مهم‌ترین فیلد است. این فیلد به عنوان «عبارت محرک» عمل می‌کند. این فیلد باید به اندازه کافی توصیفی باشد تا LLM بتواند ارتباط معنایی را تشخیص دهد. توضیحات مبهمی مانند «ابزارهای پایگاه داده» کافی نیست. توضیحات دقیقی مانند «اجرای کوئری‌های SQL فقط خواندنی در پایگاه داده محلی PostgreSQL برای بازیابی داده‌های کاربر یا تراکنش. استفاده از این برای اشکال‌زدایی وضعیت داده‌ها» تضمین می‌کند که مهارت به درستی انتخاب شده است.

بدنه‌ی مارک‌داون

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

بدن باید شامل موارد زیر باشد:

  1. هدف: بیان واضحی از آنچه که مهارت به آن دست می‌یابد.
  2. دستورالعمل: منطق گام به گام.
  3. مثال‌ها: نمونه‌های مختصری از ورودی‌ها و خروجی‌ها برای هدایت عملکرد مدل.
  4. محدودیت‌ها: قوانین «انجام ندهید» (مثلاً «درخواست‌های DELETE را اجرا نکنید»).

مثال بدنه SKILL.md:

Database Inspector

Goal
To safely query the local database and provide insights on the current data state.

Instructions
- Analyze the user's natural language request to understand the data need.
- Formulate a valid SQL query.
 - CRITICAL: Only SELECT statements are allowed.
- Use the script scripts/query_runner.py to execute the SQL.
 - Command: python scripts/query_runner.py "SELECT * FROM..."
- Present the results in a Markdown table.

Constraints
- Never output raw user passwords or API keys.
- If the query returns > 50 rows, summarize the data instead of listing it all.

ادغام اسکریپت

یکی از قدرتمندترین ویژگی‌های Skills، قابلیت واگذاری اجرا به اسکریپت‌ها است. این به عامل اجازه می‌دهد تا اقداماتی را انجام دهد که انجام مستقیم آنها برای یک LLM دشوار یا غیرممکن است (مانند اجرای دودویی، محاسبات ریاضی پیچیده یا تعامل با سیستم‌های قدیمی).

اسکریپت‌ها در زیرشاخه scripts/ قرار می‌گیرند. فایل SKILL.md با استفاده از مسیر نسبی به آنها ارجاع می‌دهد.

۵. مهارت‌های نویسندگی

هدف این بخش، ایجاد مهارت‌هایی است که با Antigravity ادغام می‌شوند و به تدریج ویژگی‌های مختلفی مانند منابع / اسکریپت‌ها / و غیره را نشان می‌دهند.

می‌توانید مهارت‌ها را از مخزن گیت‌هاب اینجا دانلود کنید: https://github.com/rominirani/antigravity-skills .

می‌توانیم هر یک از این مهارت‌ها را در پوشه ~/.gemini/antigravity/skills یا پوشه /.agent/skills قرار دهیم.

سطح ۱: روتر پایه ( git-commit-formatter )

بیایید این را به عنوان "سلام دنیای" مهارت‌ها در نظر بگیریم.

توسعه‌دهندگان اغلب پیام‌های commit را به صورت lazy می‌نویسند، مثلاً "wip"، "fix bug"، "updates". اعمال دستی "Conventional Commits" خسته‌کننده و اغلب فراموش می‌شود. بیایید مهارتی را پیاده‌سازی کنیم که مشخصات Conventional Commits را اعمال کند. با آموزش ساده‌ی قوانین به agent، به آن اجازه می‌دهیم که به عنوان مجری عمل کند.

git-commit-formatter/
└── SKILL.md  (Instructions only)

فایل SKILL.md در زیر نشان داده شده است:

---
name: git-commit-formatter
description: Formats git commit messages according to Conventional Commits specification. Use this when the user asks to commit changes or write a commit message.
---

Git Commit Formatter Skill

When writing a git commit message, you MUST follow the Conventional Commits specification.

Format
`<type>[optional scope]: <description>`

Allowed Types
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests or correcting existing tests
- **chore**: Changes to the build process or auxiliary tools and libraries such as documentation generation

Instructions
1. Analyze the changes to determine the primary `type`.
2. Identify the `scope` if applicable (e.g., specific component or file).
3. Write a concise `description` in an imperative mood (e.g., "add feature" not "added feature").
4. If there are breaking changes, add a footer starting with `BREAKING CHANGE:`.

Example
`feat(auth): implement login with google`

نحوه اجرای این مثال:

  1. یک تغییر کوچک در هر فایلی در فضای کاری خود ایجاد کنید.
  2. چت را باز کنید و تایپ کنید: این تغییرات را اعمال کنید.
  3. عامل فقط دستور git commit را اجرا نمی‌کند، بلکه ابتدا مهارت git-commit-formatter را فعال می‌کند.
  4. نتیجه: یک پیام کامیت مرسوم گیت پیشنهاد خواهد شد.

برای مثال، من Antigravity را مجبور کردم چند کامنت به یک فایل پایتون نمونه اضافه کند و در نهایت با یک پیام کامیت گیت مانند docs: add detailed comments to demo_primes.py.

سطح ۲: استفاده از دارایی (مجوز-سربرگ-افزودنی)

این الگوی «مرجع» است.

هر فایل منبع در یک پروژه شرکتی ممکن است به یک هدر مجوز آپاچی ۲.۰ با ۲۰ خط کد خاص نیاز داشته باشد. قرار دادن این متن ثابت مستقیماً در اعلان (یا SKILL.md ) اتلاف وقت است. هر بار که مهارت فهرست‌بندی می‌شود، توکن‌ها را مصرف می‌کند و مدل ممکن است در متن حقوقی دچار اشتباه تایپی شود.

بارگذاری متن استاتیک به یک فایل متنی ساده در پوشه resources/ . این مهارت به عامل دستور می‌دهد که این فایل را فقط در صورت نیاز بخواند.

تبدیل داده‌های آزاد (مانند پاسخ JSON API) به کد دقیق (مانند مدل‌های Pydantic) شامل ده‌ها تصمیم است. چگونه باید کلاس‌ها را نامگذاری کنیم؟ آیا باید Optional استفاده کنیم؟ snake_case یا camelCase ؟ نوشتن این ۵۰ قانون به زبان انگلیسی خسته‌کننده و مستعد خطا است.

LLMها موتورهای تطبیق الگو هستند.

نشان دادن یک مثال طلایی (ورودی -> خروجی) اغلب مؤثرتر از دستورالعمل‌های طولانی و مفصل است.

license-header-adder/
├── SKILL.md
└── resources/
   └── HEADER_TEMPLATE.txt  (The heavy text)

فایل SKILL.md در زیر نشان داده شده است:

---
name: license-header-adder
description: Adds the standard open-source license header to new source files. Use involves creating new code files that require copyright attribution.
---

# License Header Adder Skill

This skill ensures that all new source files have the correct copyright header.

## Instructions

1. **Read the Template**:
  First, read the content of the header template file located at `resources/HEADER_TEMPLATE.txt`.

2. **Prepend to File**:
  When creating a new file (e.g., `.py`, `.java`, `.js`, `.ts`, `.go`), prepend the `target_file` content with the template content.

3. **Modify Comment Syntax**:
  - For C-style languages (Java, JS, TS, C++), keep the `/* ... */` block as is.
  - For Python, Shell, or YAML, convert the block to use `#` comments.
  - For HTML/XML, use `<!-- ... -->`.

نحوه اجرای این مثال:

  1. یک فایل پایتون ساختگی جدید ایجاد کنید: touch my_script.py
  2. تایپ کنید: Add the license header to my_script.py .
  3. عامل، license-header-adder/resources/HEADER_TEMPLATE.txt را خواهد خواند.
  4. این ابزار، محتوا را دقیقاً و کلمه به کلمه در فایل شما جایگذاری می‌کند.

سطح ۳: یادگیری با مثال (json-to-pydantic)

الگوی «چند شات».

تبدیل داده‌های آزاد (مانند پاسخ JSON API) به کد دقیق (مانند مدل‌های Pydantic) شامل ده‌ها تصمیم است. چگونه باید کلاس‌ها را نامگذاری کنیم؟ آیا باید Optional استفاده کنیم؟ snake_case یا camelCase ؟ نوشتن این ۵۰ قانون به زبان انگلیسی خسته‌کننده و مستعد خطا است.

LLMها موتورهای تطبیق الگو هستند. نشان دادن یک مثال طلایی (ورودی -> خروجی) به آنها اغلب مؤثرتر از دستورالعمل‌های طولانی است.

json-to-pydantic/
├── SKILL.md
└── examples/
   ├── input_data.json   (The Before State)
   └── output_model.py   (The After State)

فایل SKILL.md در زیر نشان داده شده است:

---
name: json-to-pydantic
description: Converts JSON data snippets into Python Pydantic data models.
---

# JSON to Pydantic Skill

This skill helps convert raw JSON data or API responses into structured, strongly-typed Python classes using Pydantic.

Instructions

1. **Analyze the Input**: Look at the JSON object provided by the user.
2. **Infer Types**:
  - `string` -> `str`
  - `number` -> `int` or `float`
  - `boolean` -> `bool`
  - `array` -> `List[Type]`
  - `null` -> `Optional[Type]`
  - Nested Objects -> Create a separate sub-class.
 
3. **Follow the Example**:
  Review `examples/` to see how to structure the output code. notice how nested dictionaries like `preferences` are extracted into their own class.
 
  - Input: `examples/input_data.json`
  - Output: `examples/output_model.py`

Style Guidelines
- Use `PascalCase` for class names.
- Use type hints (`List`, `Optional`) from `typing` module.
- If a field can be missing or null, default it to `None`.

در پوشه /examples ، فایل JSON و فایل خروجی یعنی فایل پایتون وجود دارد. هر دو در زیر نشان داده شده‌اند:

input_data.json

{
   "user_id": 12345,
   "username": "jdoe_88",
   "is_active": true,
   "preferences": {
       "theme": "dark",
       "notifications": [
           "email",
           "push"
       ]
   },
   "last_login": "2024-03-15T10:30:00Z",
   "meta_tags": null
}

خروجی_مدل.py

from pydantic import BaseModel, Field
from typing import List, Optional

class Preferences(BaseModel):
   theme: str
   notifications: List[str]

class User(BaseModel):
   user_id: int
   username: str
   is_active: bool
   preferences: Preferences
   last_login: Optional[str] = None
   meta_tags: Optional[List[str]] = None

نحوه اجرای این مثال:

  1. یک قطعه کد JSON به اپراتور ارائه دهید (آن را در چت پیست کنید یا به یک فایل اشاره کنید).

{ "product": "Widget", "cost": 10.99, "stock": null }

  1. نوع: Convert this JSON to a Pydantic model .
  2. نماینده به جفت examples در پوشه مهارت‌ها نگاه می‌کند.
  3. این یک کلاس پایتون تولید می‌کند که به طور کامل سبک کدنویسی، ایمپورت‌ها و ساختار output_model.py را تقلید می‌کند، از جمله مدیریت موجودی تهی به عنوان اختیاری.

یک نمونه خروجی ( product_model.py ) در زیر نشان داده شده است:

from pydantic import BaseModel
from typing import Optional

class Product(BaseModel):
   product: str
   cost: float
   stock: Optional[int] = None

سطح ۴: منطق رویه‌ای (پایگاه داده-طرحواره-اعتبارسنج)

این الگوی «استفاده از ابزار» است.

اگر از یک LLM بپرسید «آیا این طرحواره امن است؟»، ممکن است بگوید همه چیز خوب است، حتی اگر یک کلید اصلی حیاتی وجود نداشته باشد، صرفاً به این دلیل که SQL درست به نظر می‌رسد.

بیایید این بررسی را به یک اسکریپت قطعی واگذار کنیم. ما از Skill برای مسیریابی عامل جهت اجرای اسکریپت پایتونی که خودمان نوشته‌ایم استفاده می‌کنیم. این اسکریپت، مقدار دودویی (درست/غلط) درست را ارائه می‌دهد.

database-schema-validator/
├── SKILL.md
└── scripts/
   └── validate_schema.py  (The Validator)

فایل SKILL.md در زیر نشان داده شده است:

---
name: database-schema-validator
description: Validates SQL schema files for compliance with internal safety and naming policies.
---

# Database Schema Validator Skill

This skill ensures that all SQL files provided by the user comply with our strict database standards.

Policies Enforced
1. **Safety**: No `DROP TABLE` statements.
2. **Naming**: All tables must use `snake_case`.
3. **Structure**: Every table must have an `id` column as PRIMARY KEY.

Instructions

1. **Do not read the file manually** to check for errors. The rules are complex and easily missed by eye.
2. **Run the Validation Script**:
  Use the `run_command` tool to execute the python script provided in the `scripts/` folder against the user's file.
 
  `python scripts/validate_schema.py <path_to_user_file>`

3. **Interpret Output**:
  - If the script returns **exit code 0**: Tell the user the schema looks good.
  - If the script returns **exit code 1**: Report the specific error messages printed by the script to the user and suggest fixes.

فایل validate_schema.py در زیر نشان داده شده است:

import sys
import re

def validate_schema(filename):
   """
   Validates a SQL schema file against internal policy:
   1. Table names must be snake_case.
   2. Every table must have a primary key named 'id'.
   3. No 'DROP TABLE' statements allowed (safety).
   """
   try:
       with open(filename, 'r') as f:
           content = f.read()
          
       lines = content.split('\n')
       errors = []
      
       # Check 1: No DROP TABLE
       if re.search(r'DROP TABLE', content, re.IGNORECASE):
           errors.append("ERROR: 'DROP TABLE' statements are forbidden.")
          
       # Check 2 & 3: CREATE TABLE checks
       table_defs = re.finditer(r'CREATE TABLE\s+(?P<name>\w+)\s*\((?P<body>.*?)\);', content, re.DOTALL | re.IGNORECASE)
      
       for match in table_defs:
           table_name = match.group('name')
           body = match.group('body')
          
           # Snake case check
           if not re.match(r'^[a-z][a-z0-9_]*$', table_name):
               errors.append(f"ERROR: Table '{table_name}' must be snake_case.")
              
           # Primary key check
           if not re.search(r'\bid\b.*PRIMARY KEY', body, re.IGNORECASE):
               errors.append(f"ERROR: Table '{table_name}' is missing a primary key named 'id'.")

       if errors:
           for err in errors:
               print(err)
           sys.exit(1)
       else:
           print("Schema validation passed.")
           sys.exit(0)
          
   except FileNotFoundError:
       print(f"Error: File '{filename}' not found.")
       sys.exit(1)

if __name__ == "__main__":
   if len(sys.argv) != 2:
       print("Usage: python validate_schema.py <schema_file>")
       sys.exit(1)
      
   validate_schema(sys.argv[1])

نحوه اجرای این مثال:

  1. ایجاد یک فایل SQL خراب bad_schema.sql : CREATE TABLE users (name TEXT);
  2. نوع: Validate bad_schema.sql .
  3. عامل حدس نمی‌زند. اسکریپت را فراخوانی می‌کند که با شکست مواجه می‌شود (کد خروج ۱) و به ما گزارش می‌دهد که «اعتبارسنجی با شکست مواجه شد زیرا جدول 'users' فاقد کلید اصلی است.»

سطح ۵: معمار (adk-tool-scaffold)

این الگو اکثر ویژگی‌های موجود در Skills را پوشش می‌دهد.

وظایف پیچیده اغلب به دنباله‌ای از عملیات نیاز دارند که هر آنچه را که دیده‌ایم، ترکیب می‌کند: ایجاد فایل‌ها، دنبال کردن قالب‌ها و نوشتن منطق. ایجاد یک ابزار جدید برای ADK (کیت توسعه عامل) به همه این موارد نیاز دارد.

ما ترکیب می‌کنیم:

  • اسکریپت (برای مدیریت ایجاد/اسکافلد کردن فایل)
  • الگو (برای مدیریت کدهای تکراری در منابع)
  • یک مثال (برای راهنمایی در تولید منطق).
adk-tool-scaffold/
├── SKILL.md
├── resources/
   └── ToolTemplate.py.hbs (Jinja2 Template)
├── scripts/
   └── scaffold_tool.py    (Generator Script)
└── examples/
    └── WeatherTool.py      (Reference Implementation)

فایل SKILL.md در زیر نشان داده شده است. می‌توانید برای بررسی فایل‌های موجود در پوشه‌های scripts، resources و examples به مخزن مهارت‌ها مراجعه کنید. برای این مهارت خاص، به مهارت adk-tool-scaffold بروید.

---
name: adk-tool-scaffold
description: Scaffolds a new custom Tool class for the Agent Development Kit (ADK).
---

# ADK Tool Scaffold Skill

This skill automates the creation of standard `BaseTool` implementations for the Agent Development Kit.

Instructions

1. **Identify the Tool Name**:
  Extract the name of the tool the user wants to build (e.g., "StockPrice", "EmailSender").
 
2. **Review the Example**:
  Check `examples/WeatherTool.py` to understand the expected structure of an ADK tool (imports, inheritance, schema).

3. **Run the Scaffolder**:
  Execute the python script to generate the initial file.
 
  `python scripts/scaffold_tool.py <ToolName>`

4. **Refine**:
  After generation, you must edit the file to:
  - Update the `execute` method with real logic.
  - Define the JSON schema in `get_schema`.
 
Example Usage
User: "Create a tool to search Wikipedia."
Agent:
1. Runs `python scripts/scaffold_tool.py WikipediaSearch`
2. Editing `WikipediaSearchTool.py` to add the `requests` logic and `query` argument schema.

نحوه اجرای این مثال:

  1. نوع: Create a new ADK tool called StockPrice to fetch data from an API .
  2. مرحله ۱ (داربست‌گذاری): عامل اسکریپت پایتون را اجرا می‌کند. این کار فوراً StockPriceTool.py را با ساختار کلاس صحیح، importها و نام کلاس StockPriceTool ایجاد می‌کند.
  3. مرحله ۲ (پیاده‌سازی): عامل فایلی را که تازه ساخته است «می‌خواند». # TODO: Implement logic.
  4. مرحله ۳ (راهنمایی): مطمئن نیست که چگونه طرحواره JSON را برای آرگومان‌های ابزار تعریف کند. examples/WeatherTool.py را بررسی می‌کند.
  5. تکمیل: فایل را ویرایش می‌کند تا requests.get(...) را اضافه کند و آرگومان ticker را در طرحواره تعریف می‌کند، دقیقاً مطابق با سبک ADK.

۶. تبریک

شما با موفقیت آزمایشگاه مهارت‌های ضد جاذبه را به پایان رسانده‌اید و مهارت‌های زیر را کسب کرده‌اید:

  • قالب‌بندی کامیت گیت.
  • جمع‌کننده‌ی هدر مجوز.
  • JSON به Pydantic.
  • اعتبارسنج طرحواره پایگاه داده.
  • داربست ابزار ADK.

مهارت‌های عامل قطعاً راهی عالی برای وادار کردن Antigravity به نوشتن کد به روش شما، پیروی از قوانین و استفاده از ابزارهای شما هستند.

اسناد مرجع