গুগল অ্যান্টিগ্র্যাভিটিতে দক্ষতা অর্জন শুরু করা

1. ভূমিকা

গুগল অ্যান্টিগ্র্যাভিটি (ডকুমেন্টের বাকি অংশে অ্যান্টিগ্র্যাভিটি নামে পরিচিত) হল গুগলের একটি এজেন্টিক আইডিই। অ্যান্টিগ্র্যাভিটি কোডল্যাব দিয়ে শুরু করার সময়, আপনি অ্যান্টিগ্র্যাভিটির মূল বিষয়গুলি শিখতে পারেন। এই কোডল্যাবে, আমরা এজেন্ট স্কিলস তৈরি করতে অ্যান্টিগ্র্যাভিটি ব্যবহার করব, যা বিশেষ জ্ঞান এবং কর্মপ্রবাহের মাধ্যমে এআই এজেন্টের ক্ষমতা বৃদ্ধির জন্য একটি হালকা, উন্মুক্ত ফর্ম্যাট। আপনি এজেন্ট স্কিলস কী, তাদের সুবিধা এবং কীভাবে সেগুলি তৈরি করা হয় তা শিখতে সক্ষম হবেন। এরপর আপনি একটি গিট ফর্ম্যাটার, টেমপ্লেট জেনারেটর, টুল কোড স্ক্যাফোল্ডিং এবং আরও অনেক কিছু থেকে শুরু করে একাধিক এজেন্ট স্কিলস তৈরি করবেন, যা অ্যান্টিগ্র্যাভিটির মধ্যে ব্যবহারযোগ্য।

পূর্বশর্ত:

2. কেন দক্ষতা

আধুনিক এআই এজেন্টরা সাধারণ শ্রোতা থেকে জটিল যুক্তিবাদীতে বিবর্তিত হয়েছে যা স্থানীয় ফাইল সিস্টেম এবং বহিরাগত সরঞ্জামগুলির সাথে একীভূত হয় (এমসিপি সার্ভারের মাধ্যমে)। যাইহোক, সম্পূর্ণ কোডবেস এবং শত শত সরঞ্জাম সহ একটি এজেন্টকে নির্বিচারে লোড করার ফলে কনটেক্সট স্যাচুরেশন এবং "টুল ব্লোট" হয়। এমনকি বড় কনটেক্সট উইন্ডো থাকা সত্ত্বেও, 40-50k টোকেন অব্যবহৃত সরঞ্জামগুলি সক্রিয় মেমরিতে ডাম্প করার ফলে উচ্চ বিলম্ব, আর্থিক অপচয় এবং "কনটেক্সট পচন" হয়, যেখানে মডেলটি অপ্রাসঙ্গিক ডেটা দ্বারা বিভ্রান্ত হয়ে পড়ে।

সমাধান: এজেন্ট দক্ষতা

এই সমস্যা সমাধানের জন্য, অ্যানথ্রপিক এজেন্ট স্কিলস চালু করে, আর্কিটেকচারকে একচেটিয়া প্রসঙ্গ লোডিং থেকে প্রগতিশীল প্রকাশে স্থানান্তরিত করে। একটি সেশনের শুরুতে প্রতিটি নির্দিষ্ট কর্মপ্রবাহ (যেমন ডাটাবেস মাইগ্রেশন বা নিরাপত্তা অডিট) "মুখস্থ" করতে মডেলকে বাধ্য করার পরিবর্তে, এই ক্ষমতাগুলিকে মডুলার, আবিষ্কারযোগ্য ইউনিটে প্যাকেজ করা হয়।

কিভাবে এটা কাজ করে

মডেলটি প্রাথমিকভাবে শুধুমাত্র মেটাডেটার একটি হালকা "মেনু"-তে উন্মুক্ত করা হয়। এটি ভারী পদ্ধতিগত জ্ঞান (নির্দেশাবলী এবং স্ক্রিপ্ট) লোড করে শুধুমাত্র তখনই যখন ব্যবহারকারীর উদ্দেশ্য বিশেষভাবে একটি দক্ষতার সাথে মেলে। এটি নিশ্চিত করে যে রিফ্যাক্টর প্রমাণীকরণ মিডলওয়্যারের জন্য অনুরোধকারী একজন ডেভেলপার সম্পর্কহীন CSS পাইপলাইন লোড না করেই নিরাপত্তা প্রসঙ্গ পায়, প্রসঙ্গটি মসৃণ, দ্রুত এবং সাশ্রয়ী রাখে।

d3f4bcb065a19fea.png

৩. এজেন্ট দক্ষতা এবং অ্যান্টিগ্র্যাভিটি

অ্যান্টিগ্র্যাভিটি ইকোসিস্টেমে, যদি এজেন্ট ম্যানেজার মস্তিষ্ক হয় এবং সম্পাদক ক্যানভাস হয়, তাহলে স্কিলস বিশেষ প্রশিক্ষণ মডিউল হিসেবে কাজ করে যা জেনারালিস্ট জেমিনি 3 মডেল এবং আপনার নির্দিষ্ট প্রেক্ষাপটের মধ্যে ব্যবধান পূরণ করে। তারা এজেন্টকে একটি নির্দিষ্ট নির্দেশাবলী এবং প্রোটোকলের সেট "সজ্জিত" করার অনুমতি দেয় — যেমন ডাটাবেস মাইগ্রেশন স্ট্যান্ডার্ড বা নিরাপত্তা পরীক্ষা — শুধুমাত্র যখন একটি প্রাসঙ্গিক কাজ অনুরোধ করা হয়। এই এক্সিকিউশন প্রোটোকলগুলিকে গতিশীলভাবে লোড করে, স্কিলস কার্যকরভাবে একটি জেনেরিক প্রোগ্রামার থেকে AI কে এমন একজন বিশেষজ্ঞে রূপান্তরিত করে যা কঠোরভাবে একটি সংস্থার কোডেড সেরা অনুশীলন এবং সুরক্ষা মান মেনে চলে।

অ্যান্টিগ্র্যাভিটিতে দক্ষতা কী?

গুগল অ্যান্টিগ্রাভিটির প্রেক্ষাপটে, একটি স্কিল হল একটি ডিরেক্টরি-ভিত্তিক প্যাকেজ যাতে একটি সংজ্ঞা ফাইল ( SKILL.md ) এবং ঐচ্ছিক সহায়ক সম্পদ (স্ক্রিপ্ট, রেফারেন্স, টেমপ্লেট) থাকে।

এটি চাহিদা অনুযায়ী সক্ষমতা বৃদ্ধির একটি প্রক্রিয়া।

  • অন-ডিমান্ড : সিস্টেম প্রম্পট (যা সর্বদা লোড করা হয়) এর বিপরীতে, একটি স্কিল কেবল তখনই এজেন্টের প্রসঙ্গে লোড করা হয় যখন এজেন্ট নির্ধারণ করে যে এটি ব্যবহারকারীর বর্তমান অনুরোধের সাথে প্রাসঙ্গিক। এটি কনটেক্সট উইন্ডোটিকে অপ্টিমাইজ করে এবং এজেন্টকে অপ্রাসঙ্গিক নির্দেশাবলী দ্বারা বিভ্রান্ত হতে বাধা দেয়। কয়েক ডজন সরঞ্জাম সহ বৃহৎ প্রকল্পগুলিতে, কর্মক্ষমতা এবং যুক্তির নির্ভুলতার জন্য এই নির্বাচনী লোডিং অত্যন্ত গুরুত্বপূর্ণ।
  • ক্যাপাবিলিটি এক্সটেনশন : স্কিল কেবল নির্দেশনা দেওয়ার চেয়েও বেশি কিছু করতে পারে; তারা এক্সিকিউট করতে পারে। পাইথন বা ব্যাশ স্ক্রিপ্টগুলিকে একত্রিত করে, একটি স্কিল এজেন্টকে স্থানীয় মেশিন বা বহিরাগত নেটওয়ার্কগুলিতে জটিল, বহু-পদক্ষেপের ক্রিয়া সম্পাদন করার ক্ষমতা প্রদান করতে পারে, ব্যবহারকারীকে ম্যানুয়ালি কমান্ড চালানোর প্রয়োজন ছাড়াই। এটি এজেন্টকে একটি টেক্সট জেনারেটর থেকে একটি টুল ব্যবহারকারীতে রূপান্তরিত করে।

দক্ষতা বনাম বাস্তুতন্ত্র (সরঞ্জাম, নিয়ম এবং কর্মপ্রবাহ)

যদিও মডেল কনটেক্সট প্রোটোকল (MCP) এজেন্টের "হাত" হিসেবে কাজ করে - যা GitHub বা PostgreSQL এর মতো বহিরাগত সিস্টেমের সাথে ভারী, স্থায়ী সংযোগ প্রদান করে - দক্ষতা তাদের "মস্তিষ্ক" হিসেবে কাজ করে যা তাদের নির্দেশ করে।

MCP স্টেটফুল অবকাঠামো পরিচালনা করে, যেখানে Skills হল হালকা, ক্ষণস্থায়ী টাস্ক সংজ্ঞা যা এই টুলগুলি ব্যবহারের পদ্ধতি প্যাকেজ করে। এই সার্ভারলেস পদ্ধতি এজেন্টদের স্থায়ী প্রক্রিয়া চালানোর অপারেশনাল ওভারহেড ছাড়াই অ্যাড-হক কাজগুলি (যেমন চেঞ্জলগ তৈরি করা বা মাইগ্রেশন) সম্পাদন করতে দেয়, কেবল যখন টাস্কটি সক্রিয় থাকে তখনই প্রসঙ্গ লোড করে এবং তাৎক্ষণিকভাবে এটি প্রকাশ করে।

কার্যকরীভাবে, "নিয়ম" (প্যাসিভ, সর্বদা-অন-রেল) এবং "ওয়ার্কফ্লো" (সক্রিয়, ব্যবহারকারী-ট্রিগার করা ম্যাক্রো) এর মধ্যে একটি অনন্য মধ্যম ক্ষেত্র দখল করে Skills। নির্দিষ্ট কমান্ডের প্রয়োজন হয় এমন ওয়ার্কফ্লোগুলির বিপরীতে (যেমন, /test ), Skills এজেন্ট-ট্রিগার করা হয়: মডেলটি স্বয়ংক্রিয়ভাবে ব্যবহারকারীর উদ্দেশ্য সনাক্ত করে এবং প্রয়োজনীয় নির্দিষ্ট দক্ষতাকে গতিশীলভাবে সজ্জিত করে। এই স্থাপত্যটি শক্তিশালী কম্পোজিবিলিটির জন্য অনুমতি দেয়; উদাহরণস্বরূপ, একটি বিশ্বব্যাপী নিয়ম ডাটাবেস পরিবর্তনের সময় একটি "নিরাপদ-মাইগ্রেশন" দক্ষতার ব্যবহার জোরদার করতে পারে, অথবা একটি একক ওয়ার্কফ্লো একটি শক্তিশালী স্থাপনার পাইপলাইন তৈরি করতে একাধিক দক্ষতাকে অর্কেস্ট্রেট করতে পারে।

৪. দক্ষতা তৈরি করা

অ্যান্টিগ্র্যাভিটিতে দক্ষতা তৈরি করা একটি নির্দিষ্ট ডিরেক্টরি কাঠামো এবং ফাইল ফর্ম্যাট অনুসরণ করে। এই মানদণ্ড নিশ্চিত করে যে দক্ষতাগুলি পোর্টেবল এবং এজেন্ট নির্ভরযোগ্যভাবে সেগুলি বিশ্লেষণ এবং কার্যকর করতে পারে। নকশাটি ইচ্ছাকৃতভাবে সহজ, মার্কডাউন এবং YAML এর মতো বহুল পরিচিত ফর্ম্যাটের উপর নির্ভর করে, যা তাদের IDE এর ক্ষমতা প্রসারিত করতে ইচ্ছুক ডেভেলপারদের জন্য প্রবেশের বাধা কমিয়ে দেয়।

ডিরেক্টরি কাঠামো

দক্ষতা দুটি ক্ষেত্রে সংজ্ঞায়িত করা যেতে পারে, যা প্রকল্প-নির্দিষ্ট এবং ব্যবহারকারী-নির্দিষ্ট উভয় ধরণের কাস্টমাইজেশনের সুযোগ করে দেয়:

  1. ওয়ার্কস্পেস স্কোপ : <workspace-root>/.agent/skills/ এ অবস্থিত। এই দক্ষতাগুলি শুধুমাত্র নির্দিষ্ট প্রকল্পের মধ্যেই উপলব্ধ। এটি প্রকল্প-নির্দিষ্ট স্ক্রিপ্টগুলির জন্য আদর্শ, যেমন একটি নির্দিষ্ট পরিবেশে স্থাপন, সেই অ্যাপের জন্য ডাটাবেস পরিচালনা, অথবা একটি মালিকানাধীন কাঠামোর জন্য বয়লারপ্লেট কোড তৈরি করা।
  2. গ্লোবাল স্কোপ : ~/.gemini/antigravity/skills/ এ অবস্থিত। এই দক্ষতাগুলি ব্যবহারকারীর মেশিনের সমস্ত প্রকল্পে উপলব্ধ। এটি "Format JSON," "UUID তৈরি করুন," "Review Code Style," অথবা ব্যক্তিগত উৎপাদনশীলতা সরঞ্জামগুলির সাথে ইন্টিগ্রেশনের মতো সাধারণ ইউটিলিটির জন্য উপযুক্ত।

একটি সাধারণ স্কিল ডিরেক্টরি দেখতে এরকম:

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 ফাইলটি হল Skill এর মস্তিষ্ক। এটি এজেন্টকে বলে যে দক্ষতা কী, কখন এটি ব্যবহার করতে হবে এবং কীভাবে এটি কার্যকর করতে হবে।

এটি দুটি অংশ নিয়ে গঠিত:

  • 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.
---

মূল ক্ষেত্র:

  • নাম : এটি বাধ্যতামূলক নয়। স্কোপের মধ্যে অনন্য হতে হবে। ছোট হাতের অক্ষর, হাইফেন অনুমোদিত (যেমন, postgres-query , pr-reviewer )। যদি এটি প্রদান না করা থাকে, তাহলে এটি ডিফল্টভাবে ডিরেক্টরির নামে থাকবে।
  • বর্ণনা : এটি বাধ্যতামূলক এবং সবচেয়ে গুরুত্বপূর্ণ ক্ষেত্র। এটি "ট্রিগার বাক্যাংশ" হিসেবে কাজ করে। LLM-এর জন্য শব্দার্থিক প্রাসঙ্গিকতা বুঝতে এটি যথেষ্ট বর্ণনামূলক হতে হবে। "ডেটাবেস টুলস"-এর মতো অস্পষ্ট বর্ণনা যথেষ্ট নয়। "ব্যবহারকারী বা লেনদেনের ডেটা পুনরুদ্ধারের জন্য স্থানীয় PostgreSQL ডাটাবেসের বিরুদ্ধে পঠনযোগ্য SQL কোয়েরিগুলি কার্যকর করে। ডেটা অবস্থা ডিবাগ করার জন্য এটি ব্যবহার করুন"-এর মতো একটি সুনির্দিষ্ট বিবরণ দক্ষতা সঠিকভাবে অর্জন করা নিশ্চিত করে।

মার্কডাউন বডি

বডিতে নির্দেশাবলী রয়েছে। এটি একটি ফাইলে "প্রম্পট ইঞ্জিনিয়ারিং" স্থাপিত হয়। দক্ষতা সক্রিয় হলে, এই বিষয়বস্তু এজেন্টের প্রসঙ্গ উইন্ডোতে প্রবেশ করানো হয়।

শরীরের অন্তর্ভুক্ত করা উচিত:

  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.

স্ক্রিপ্ট ইন্টিগ্রেশন

স্কিলসের সবচেয়ে শক্তিশালী বৈশিষ্ট্যগুলির মধ্যে একটি হল স্ক্রিপ্টগুলিতে এক্সিকিউশন অর্পণ করার ক্ষমতা। এটি এজেন্টকে এমন ক্রিয়া সম্পাদন করতে দেয় যা একজন LLM-এর পক্ষে সরাসরি করা কঠিন বা অসম্ভব (যেমন বাইনারি এক্সিকিউশন, জটিল গাণিতিক গণনা, অথবা লিগ্যাসি সিস্টেমের সাথে ইন্টারঅ্যাক্ট করা)।

স্ক্রিপ্টগুলি scripts/ সাবডিরেক্টরিতে স্থাপন করা হয়। SKILL.md তাদের আপেক্ষিক পথ দ্বারা উল্লেখ করে।

৫. লেখক দক্ষতা

এই বিভাগের লক্ষ্য হল এমন দক্ষতা তৈরি করা যা অ্যান্টিগ্র্যাভিটিতে একীভূত হয় এবং ধীরে ধীরে বিভিন্ন বৈশিষ্ট্য যেমন রিসোর্স / স্ক্রিপ্ট / ইত্যাদি প্রদর্শন করে।

আপনি Github রেপো থেকে Skills ডাউনলোড করতে পারেন এখানে: https://github.com/rominirani/antigravity-skills

আমরা এই দক্ষতাগুলির প্রতিটিকে ~/.gemini/antigravity/skills ফোল্ডার অথবা /.agent/skills ফোল্ডারের মধ্যে রাখার কথা ভাবতে পারি।

লেভেল ১: বেসিক রাউটার ( git-commit-formatter )

আসুন এটিকে দক্ষতার "হ্যালো ওয়ার্ল্ড" হিসেবে বিবেচনা করি।

ডেভেলপাররা প্রায়শই অলস কমিট বার্তা লেখেন যেমন "wip", "bug fix", "updates"। "Conventional Commits" ম্যানুয়ালি প্রয়োগ করা ক্লান্তিকর এবং প্রায়শই ভুলে যাওয়া হয়। আসুন এমন একটি দক্ষতা বাস্তবায়ন করি যা Conventional Commits স্পেসিফিকেশন প্রয়োগ করে। এজেন্টকে কেবল নিয়ম সম্পর্কে নির্দেশ দিয়ে, আমরা এটিকে এনফোর্সার হিসাবে কাজ করার অনুমতি দিই।

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. চ্যাটটি খুলুন এবং টাইপ করুন: Commit these changes.
  3. এজেন্ট কেবল গিট কমিট চালাবে না। এটি প্রথমে গিট-কমিট-ফরম্যাটার দক্ষতা সক্রিয় করবে।
  4. ফলাফল: একটি প্রচলিত গিট কমিট বার্তা প্রস্তাব করা হবে।

উদাহরণস্বরূপ, আমি অ্যান্টিগ্রাভিটিকে একটি নমুনা পাইথন ফাইলে কিছু মন্তব্য যোগ করতে বাধ্য করেছিলাম এবং এটি একটি গিট কমিট বার্তা দিয়ে শেষ হয়েছিল যেমন docs: add detailed comments to demo_primes.py.

স্তর ২: সম্পদের ব্যবহার (লাইসেন্স-হেডার-অ্যাডার)

এটি "রেফারেন্স" প্যাটার্ন।

কর্পোরেট প্রকল্পের প্রতিটি উৎস ফাইলের জন্য একটি নির্দিষ্ট ২০-লাইনের Apache 2.0 লাইসেন্স হেডারের প্রয়োজন হতে পারে। এই স্ট্যাটিক টেক্সটটি সরাসরি প্রম্পটে (অথবা SKILL.md ) রাখা অপচয়। প্রতিবার দক্ষতা সূচী করার সময় এটি টোকেন ব্যবহার করে এবং মডেলটি আইনি টেক্সটে টাইপোগ্রাফির "হ্যালুসিনেট" করতে পারে।

একটি resources/ ফোল্ডারের একটি প্লেইন টেক্সট ফাইলে স্ট্যাটিক টেক্সট অফলোড করা। এই দক্ষতা এজেন্টকে শুধুমাত্র প্রয়োজনের সময় এই ফাইলটি পড়ার নির্দেশ দেয়।

আলগা তথ্য (যেমন JSON API প্রতিক্রিয়া) কে কঠোর কোডে (যেমন Pydantic মডেল) রূপান্তর করতে ডজন ডজন সিদ্ধান্ত নিতে হয়। আমাদের ক্লাসগুলির নাম কীভাবে রাখা উচিত? আমাদের কি Optional ? snake_case নাকি camelCase ব্যবহার করা উচিত? এই ৫০টি নিয়ম ইংরেজিতে লেখা ক্লান্তিকর এবং ত্রুটি-প্রবণ।

এলএলএম হলো প্যাটার্ন-ম্যাচিং ইঞ্জিন।

তাদের একটি সুবর্ণ উদাহরণ (ইনপুট -> আউটপুট) দেখানো প্রায়শই মৌখিক নির্দেশাবলীর চেয়ে বেশি কার্যকর।

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 ফাইল এবং আউটপুট ফাইল অর্থাৎ পাইথন ফাইল রয়েছে। নীচে উভয়ই দেখানো হয়েছে:

ইনপুট_ডেটা.জেসন

{
   "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
}

আউটপুট_মডেল.পিআই

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 এর কোডিং স্টাইল, আমদানি এবং কাঠামোর সাথে পুরোপুরি অনুকরণ করে, যার মধ্যে null স্টককে ঐচ্ছিক হিসাবে পরিচালনা করাও অন্তর্ভুক্ত।

একটি নমুনা আউটপুট ( product_model.py ) নিচে দেখানো হল:

from pydantic import BaseModel
from typing import Optional

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

স্তর ৪: পদ্ধতিগত যুক্তি (ডাটাবেস-স্কিমা-বৈধকারী)

এটি "টুল ব্যবহার" প্যাটার্ন।

যদি আপনি একজন LLM-কে জিজ্ঞাসা করেন "এই স্কিমা কি নিরাপদ?", তাহলে এটি বলতে পারে যে সবকিছু ঠিক আছে, এমনকি যদি একটি গুরুত্বপূর্ণ প্রাথমিক কী অনুপস্থিত থাকে, কেবল কারণ SQL সঠিক দেখাচ্ছে।

আসুন এই চেকটি একটি ডিটারমিনিস্টিক স্ক্রিপ্টে অর্পণ করি। আমরা স্কিল ব্যবহার করে এজেন্টকে আমাদের লেখা একটি পাইথন স্ক্রিপ্ট চালানোর জন্য রুট করি। স্ক্রিপ্টটি বাইনারি (সত্য/মিথ্যা) সত্য প্রদান করে।

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. এজেন্ট অনুমান করে না। এটি স্ক্রিপ্টটি চালু করবে, যা ব্যর্থ হবে (Exit Code 1) এবং এটি আমাদের রিপোর্ট করবে যে "The validation failed because the table 'users' is missing a primary key."

স্তর ৫: স্থপতি (adk-টুল-স্ক্যাফোল্ড)

এই প্যাটার্নটি স্কিলস-এ উপলব্ধ বেশিরভাগ বৈশিষ্ট্যকেই অন্তর্ভুক্ত করে।

জটিল কাজগুলির জন্য প্রায়শই এমন কিছু ক্রিয়াকলাপের প্রয়োজন হয় যা আমরা যা দেখেছি তার সবকিছুকে একত্রিত করে: ফাইল তৈরি করা, টেমপ্লেট অনুসরণ করা এবং যুক্তি লেখা। 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 ফাইলটি নিচে দেখানো হল। স্ক্রিপ্ট, রিসোর্স এবং উদাহরণ ফোল্ডারে ফাইলগুলি পরীক্ষা করার জন্য আপনি দক্ষতার সংগ্রহস্থলটি দেখতে পারেন। এই নির্দিষ্ট দক্ষতার জন্য, 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 দিয়ে StockPriceTool.py তৈরি করে।
  3. ধাপ ২ (বাস্তবায়ন): এজেন্টটি তার তৈরি করা ফাইলটি "পড়ে"। এটি # TODO: Implement logic.
  4. ধাপ ৩ (নির্দেশিকা): টুল আর্গুমেন্টের জন্য JSON স্কিমা কীভাবে সংজ্ঞায়িত করা হবে তা নিশ্চিত নয়। এটি examples/WeatherTool.py পরীক্ষা করে।
  5. সমাপ্তি: এটি requests.get(...) যোগ করার জন্য ফাইলটি সম্পাদনা করে এবং ADK স্টাইলের সাথে হুবহু মিলে স্কিমার টিকার আর্গুমেন্ট সংজ্ঞায়িত করে।

৬. অভিনন্দন

তুমি অ্যান্টিগ্র্যাভিটি স্কিলসের ল্যাব সফলভাবে সম্পন্ন করেছ এবং নিম্নলিখিত দক্ষতাগুলি তৈরি করেছ:

  • গিট কমিট ফর্ম্যাটার।
  • লাইসেন্স হেডার অ্যাডার।
  • JSON থেকে Pydantic।
  • ডাটাবেস স্কিমা ভ্যালিডেটর।
  • ADK টুল স্ক্যাফোল্ডিং।

এজেন্ট স্কিলস অবশ্যই অ্যান্টিগ্র্যাভিটিকে আপনার কোড লেখার জন্য, নিয়ম মেনে চলার এবং আপনার সরঞ্জামগুলি ব্যবহারের জন্য একটি দুর্দান্ত উপায়।

রেফারেন্স ডক্স