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

১. ভূমিকা

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

পূর্বশর্তসমূহ:

  • গুগল অ্যান্টিগ্র্যাভিটি ইনস্টল ও কনফিগার করা হয়েছে।
  • গুগল অ্যান্টিগ্র্যাভিটি সম্পর্কে প্রাথমিক ধারণা থাকা আবশ্যক। “ Getting Started with Google Antigravity” কোডল্যাবটি সম্পন্ন করার পরামর্শ দেওয়া হচ্ছে।

২. দক্ষতা কেন

আধুনিক এআই এজেন্টগুলো সাধারণ লিসেনার থেকে জটিল রিজনারে পরিণত হয়েছে, যা লোকাল ফাইল সিস্টেম এবং এক্সটার্নাল টুলের ( এমসিপি সার্ভারের মাধ্যমে) সাথে সমন্বিত হয়। তবে, কোনো এজেন্টকে নির্বিচারে সম্পূর্ণ কোডবেস এবং শত শত টুল দিয়ে ভারাক্রান্ত করলে ‘কন্টেক্সট স্যাচুরেশন’ এবং ‘টুল ব্লোট’ দেখা দেয়। এমনকি বড় কন্টেক্সট উইন্ডো থাকা সত্ত্বেও, অ্যাক্টিভ মেমোরিতে ৪০-৫০ হাজার অব্যবহৃত টুলের টোকেন যুক্ত করলে উচ্চ ল্যাটেন্সি, আর্থিক অপচয় এবং ‘কন্টেক্সট রট’ ঘটে, যেখানে মডেলটি অপ্রাসঙ্গিক ডেটা দ্বারা বিভ্রান্ত হয়ে পড়ে।

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

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

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

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

d3f4bcb065a19fea.png

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

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

অ্যান্টিগ্র্যাভিটিতে দক্ষতা বলতে কী বোঝায়?

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

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

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

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

মডেল কনটেক্সট প্রোটোকল (MCP) যেখানে এজেন্টের 'হাত' হিসেবে কাজ করে—GitHub বা PostgreSQL-এর মতো বাহ্যিক সিস্টেমের সাথে শক্তিশালী ও স্থায়ী সংযোগ স্থাপন করে—সেখানে স্কিলগুলো হলো 'মস্তিষ্ক' যা সেগুলোকে পরিচালনা করে।

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

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

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

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

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

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

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

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

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

মূল ক্ষেত্রসমূহ:

  • নাম : এটি বাধ্যতামূলক নয়। নির্দিষ্ট পরিসরের মধ্যে নামটি অবশ্যই অনন্য হতে হবে। ছোট হাতের অক্ষর ও হাইফেন ব্যবহার করা যাবে (যেমন, 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.

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

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

স্ক্রিপ্টগুলো scripts/ ` সাবডিরেক্টরিতে রাখা হয়। SKILL.md ফাইলটি রিলেটিভ পাথের মাধ্যমে সেগুলোকে রেফারেন্স করে।

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

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

আপনি এই গিটহাব রিপো থেকে স্কিলগুলো ডাউনলোড করতে পারেন: https://github.com/rominirani/antigravity-skills

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

স্তর ১ : মৌলিক রাউটার ( git-commit-formatter )

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

ডেভেলপাররা প্রায়শই দায়সারা কমিট মেসেজ লেখেন, যেমন—"wip", "fix bug", "updates"। ম্যানুয়ালি "কনভেনশনাল কমিট" প্রয়োগ করা ক্লান্তিকর এবং প্রায়শই উপেক্ষিত হয়। চলুন এমন একটি স্কিল তৈরি করি যা কনভেনশনাল কমিট স্পেসিফিকেশন প্রয়োগ করবে। এজেন্টকে শুধু নিয়মগুলো সম্পর্কে নির্দেশ দিয়েই আমরা তাকে প্রয়োগকারী হিসেবে কাজ করার সুযোগ করে দেব।

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 ব্যবহার করে একটি নমুনা পাইথন ফাইলে কিছু কমেন্ট যোগ করেছিলাম এবং এর ফলে Git কমিট মেসেজটি docs: add detailed comments to demo_primes.py.

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

এটি হলো 'রেফারেন্স' প্যাটার্ন।

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

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

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 ? ইংরেজিতে এই ৫০টি নিয়ম লিখে ফেলা ক্লান্তিকর এবং ভুলের সম্ভাবনা বেশি।

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

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

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

ইনপুট_ডেটা.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

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

এটাই হলো "সরঞ্জাম ব্যবহারের" ধরণ।

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

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

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)

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

জটিল কাজগুলোর জন্য প্রায়শই এমন কিছু ধারাবাহিক কার্যক্রমের প্রয়োজন হয়, যা আমরা এ পর্যন্ত যা যা দেখেছি তার সবকিছুকে একত্রিত করে: ফাইল তৈরি করা, টেমপ্লেট অনুসরণ করা এবং লজিক লেখা। 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 টুল স্ক্যাফোল্ডিং।

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

রেফারেন্স নথি