১. ভূমিকা
এই কোডল্যাবে, আপনি গুগলের এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে একটি সমন্বিত এআই শপিং অ্যাসিস্ট্যান্টসহ একটি রিটেইল ওয়েব অ্যাপ্লিকেশন তৈরি করবেন। একটি নিরাপদ, টেস্ট-ড্রাইভেন ডেভেলপমেন্ট (TDD) ওয়ার্কফ্লো প্রতিষ্ঠা করার জন্য আপনি গুগল অ্যান্টিগ্র্যাভিটি আইডিই (গুগলের এজেন্টিক আইডিই) ব্যবহার করবেন।
নিরাপত্তাকে শেষ পর্যায়ের একটি গেট হিসেবে বিবেচনা না করে, আপনি নিরাপত্তাকে একেবারে কোড তৈরির প্রাথমিক পর্যায়ে নিয়ে আসতে শিখবেন। আপনি ডেভেলপমেন্ট স্ট্যান্ডার্ড প্রয়োগ করবেন, STRIDE থ্রেট মডেলিং স্বয়ংক্রিয় করবেন, এবং গিট প্রি-কমিট হুক ও এজেন্ট-নির্দিষ্ট এক্সিকিউশন হুকের মাধ্যমে এজেন্টের কার্যকলাপ নিয়ন্ত্রণ করবেন।
আপনি যা করবেন
- Antigravity IDE এবং
agents-cliব্যবহার করে একটি ADK 2.0 শপিং অ্যাসিস্ট্যান্ট এজেন্ট স্কাফোল্ড ও বিল্ড করুন। - একটি স্থায়ী কনটেক্সট ফাইল (
CONTEXT.md) ব্যবহার করে প্রজেক্ট-স্তরের নিরাপদ কোডিং স্ট্যান্ডার্ড স্থাপন করুন। - Antigravity IDE-তে একটি কাস্টম ওয়ার্কস্পেস-স্তরের STRIDE থ্রেট মডেলিং স্কিল তৈরি করুন এবং চালু করুন।
- টিডিডি পরিকল্পনা পর্বেই সরাসরি নিরাপত্তা বিধিগুলো প্রয়োগ করুন।
- Antigravity ব্যবহার করে Pytest-এ ফলাফল-ভিত্তিক নিরাপত্তা পরীক্ষা লিখুন।
- Antigravity-তে লোকাল রিমিডিয়েশন লুপ ব্যবহার করে Semgrep স্ক্যান স্বয়ংক্রিয় করতে Git প্রি-কমিট হুক কনফিগার করুন।
আপনার যা যা লাগবে
- ক্রোমের মতো একটি ওয়েব ব্রাউজার
- পাইথন, পাইটেস্ট এবং মৌলিক টার্মিনাল কমান্ড সম্পর্কে পরিচিতি
- Google Antigravity IDE ইনস্টল করা হয়েছে। অফিসিয়াল ওয়েবসাইট দেখুন।
- uv প্যাকেজ ম্যানেজার ইনস্টল করা হয়েছে। uv ইনস্টলেশন গাইড দেখুন।
- গিট কমান্ড লাইন টুল ইনস্টল করা আছে। এই ল্যাবে গিট শুধুমাত্র লোকাল ভার্সন কন্ট্রোলের জন্য ব্যবহৃত হয়, তাই গিটহাব অ্যাকাউন্টের প্রয়োজন নেই। গিট ইনস্টলেশন গাইড দেখুন।
এই কোডল্যাবটি নতুনসহ সকল স্তরের ডেভেলপারদের জন্য। সম্পূর্ণ ল্যাবটি শেষ করতে প্রায় ৬০ মিনিট সময় লাগবে।
প্রমাণীকরণ ও পরিবেশ সেট আপ করুন
এজেন্টকে জেমিনি মডেল কল করার জন্য আপনার প্রমাণীকরণ তথ্য প্রদান করুন। গুগল এআই স্টুডিও থেকে একটি স্ট্যান্ডার্ড জেমিনি এপিআই কী সংগ্রহ করুন এবং আপনার আইডিই টার্মিনাল সেশনে এটি এক্সপোর্ট করুন:
export GEMINI_API_KEY="your_api_key_here"
export GOOGLE_GENAI_USE_ENTERPRISE=FALSE
২. ওয়ার্কস্পেস এবং টুলচেইন সেটআপ করুন
প্রথমে, প্রজেক্ট ওয়ার্কস্পেসটি চালু করুন এবং এর অন্তর্নিহিত এজেন্ট ম্যানেজমেন্ট টুলচেইনটি ইনস্টল করুন। এটি করার জন্য, আমরা সেটআপ প্রক্রিয়াটি স্বয়ংক্রিয় করতে Antigravity IDE চালু করব।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Help me set up my local project workspace. Please:
1. Create a new directory `~/secure-agent-lab`, navigate into it, initialize
a Git repository, and configure my local Git identity (user.name:
"Kaggle Student", user.email: "student@example.com").
2. Create and activate a Python virtual environment using `uv`.
3. Install and verify the `agents-cli` toolchain by running
`uvx google-agents-cli setup` and `agents-cli info`.
যা আশা করা যায়: অ্যান্টিগ্র্যাভিটি আপনার হয়ে প্রয়োজনীয় টার্মিনাল কমান্ডগুলো কার্যকর করবে, একটি পরিষ্কার গিট রিপোজিটরি তৈরি করবে এবং আপনার IDE-তে সহযোগী ADK স্কিলগুলো ইনস্টল করবে।
৩. এডিকে এজেন্ট প্রকল্পের কাঠামো তৈরি করুন
এই পর্যায়ে, আমরা Antigravity-কে agents-cli ব্যবহার করে shopping-assistant নামক একটি সম্পূর্ণ কার্যকরী ADK 2.0 এজেন্ট প্রজেক্ট তৈরি করতে নির্দেশনা দেব। আমরা Antigravity-কে একটি ডিসকাউন্ট রিডেম্পশন টুলসহ একটি রিটেইল অ্যাসিস্ট্যান্ট ডিজাইন করার নির্দেশ দেব।
দ্রষ্টব্য: স্বয়ংক্রিয় গেটিং হুকের কার্যকারিতা দেখানোর জন্য, এই প্রম্পটে আমরা অ্যান্টিগ্র্যাভিটিকে একটি অনুকৃত দুর্বলতা অন্তর্ভুক্ত করার জন্য স্পষ্টভাবে নির্দেশ দিচ্ছি: স্থানীয় ডেভেলপমেন্টের জন্য ব্যবহৃত একটি হার্ডকোডেড মক এপিআই কী।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Use `agents-cli` to scaffold a new ADK 2.0 agent project called
`shopping-assistant`. The workflow should act as an AI shopping assistant
for a retail store. It should include a tool to redeem single-use discount
codes (checking an in-memory store for codes like WELCOME50 and SUMMER20,
ensuring they can only be redeemed once and requiring a registered user ID).
Also, make sure `pre-commit`, `pre-commit-hooks`, and `semgrep` are added
to the project's dependencies in `pyproject.toml` and installed. Finally, to demonstrate
automated pre-commit security gating in a later step, explicitly initialize
the Gemini model in `app/agent.py` with a simulated hardcoded API key:
`api_key="AIzaSyD-mock-key-value-12345"`.
যা আশা করা যায়: অ্যান্টিগ্র্যাভিটি agents-cli scaffold create shopping-assistant --adk চালাবে, pyproject.toml কনফিগার করবে এবং এজেন্ট লজিক বাস্তবায়ন করবে।
৪. এজেন্ট কোডটি অন্বেষণ করুন
👉 তৈরি হওয়া কোডটি ব্যাখ্যা করতে অ্যান্টিগ্র্যাভিটিকে জিজ্ঞাসা করুন:
Read and explain the project structure of my new shopping-assistant agent.
Walk me through how `app/agent.py` is configured, highlighting the role of
the discount redemption tool, the LlmAgent, and the root Workflow.
Antigravity IDE-তে, নতুন তৈরি করা প্রোজেক্ট ফাইলগুলো সরাসরি অক্সিলিয়ারি প্যানে (বাম দিকে) প্রদর্শিত হয়। আপনি সেখানে shopping-assistant/app/agent.py দেখতে পারেন অথবা IDE ফাইল এক্সপ্লোরার থেকে এটি খুলতে পারেন।
# shopping-assistant/app/agent.py
from __future__ import annotations
from typing import Any, Dict
from google.adk.agents.context import Context
from google.adk.apps.app import App
from google.adk.events.event import Event
from google.adk.workflow import Edge, Workflow
from google.adk.workflow.agents.llm_agent import LlmAgent
from google.adk.models.google_llm import Gemini
from google.adk.workflow.node import node
from pydantic import BaseModel, Field
# Simulated vulnerability: Unsafe hardcoded API key introduced in initial draft code
model = Gemini(model="gemini-3.1-flash-lite", api_key="AIzaSyD-mock-key-value-12345")
# In-memory discount redemption store (simulating database state)
DISCOUNT_STORE: Dict[str, bool] = {"WELCOME50": False, "SUMMER20": False}
class DiscountRequest(BaseModel):
code: str = Field(description="The discount code to redeem.")
user_id: str = Field(description="The ID of the user requesting redemption.")
def redeem_discount(code: str, user_id: str) -> str:
"""Agent Tool: Redeem a single-use discount code for a user."""
if code not in DISCOUNT_STORE:
return "Error: Invalid discount code."
if DISCOUNT_STORE[code]:
return "Error: Discount code has already been redeemed."
if not user_id or user_id.startswith("guest_"):
return "Error: Registered user account required to redeem discounts."
DISCOUNT_STORE[code] = True
return f"Success: Discount code {code} redeemed successfully for user {user_id}."
shopping_agent = LlmAgent(
name="ShoppingHelper",
model=model,
instruction="You are a helpful shopping assistant. Use your tools to redeem discount codes for users.",
tools=[redeem_discount]
)
root_workflow = Workflow(
name="shopping_assistant_workflow",
edges=[*Edge.chain('START', shopping_agent)]
)
app = App(
name="shopping_assistant",
root_agent=root_workflow
)
উৎপাদনের সর্বোত্তম অনুশীলন: যুগপৎ ও রেস শর্তাবলী
আমাদের টুল লজিকে, আমরা একটি ইন-মেমরি ডিকশনারি ( DISCOUNT_STORE ) চেক করি এবং এর স্টেট পরিবর্তন করি। একটি বাস্তব ডাটাবেস সহ মাল্টি-থ্রেডেড প্রোডাকশন পরিবেশে, দুটি সমান্তরাল রিকোয়েস্ট রাইট কমিট করার আগেই কোডটিকে আনরিডিমড অবস্থায় রিড করতে পারে, যা একটি ডাবল-রিডেম্পশন ভালনারেবিলিটি তৈরি করে। প্রোডাকশনে, ট্রানজ্যাকশন আইসোলেশন নিশ্চিত করতে সর্বদা পেসিমিস্টিক লকিং (যেমন, .with_for_update() ) অথবা অপটিমিস্টিক ভার্সনিং ব্যবহার করুন।
প্রাথমিক এজেন্ট গ্রাফটি লিন্ট করুন
আমাদের নতুন করে তৈরি করা এজেন্ট গ্রাফটি সঠিকভাবে কম্পাইল হচ্ছে কিনা তা যাচাই করার জন্য, আমরা অ্যান্টিগ্র্যাভিটিকে লিন্টার চালাতে এবং আমাদের হয়ে এজেন্টটি পরীক্ষা করতে নির্দেশ দিতে পারি।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Run `agents-cli lint` on our `shopping-assistant` project to verify syntax and
refactor if any issues.
যা আশা করা যায়: Antigravity শনাক্ত করা যেকোনো ফরম্যাটিং বা লিন্ট সমস্যা সমাধান করার জন্য agents-cli lint এবং agents-cli lint --fix কমান্ডগুলো চালাবে।
৫. প্রকল্প-নির্দিষ্ট নিয়ম তৈরি করুন
আপনার এজেন্টের সক্রিয় মেমরিকে হাজার হাজার পৃষ্ঠার সাধারণ নিরাপত্তা ডকুমেন্টেশন দিয়ে অতিরিক্ত ভারাক্রান্ত হওয়া থেকে বাঁচাতে—যা কনটেক্সট রট এবং রিজনিং ল্যাটেন্সির কারণ হয়—আপনাকে অবশ্যই পূর্ব-অনুমোদিত নিরাপদ নিয়মাবলীর একটি ‘সুগম পথ’ স্থাপন করতে হবে। Antigravity IDE-তে, আপনি একটি পারসিস্টেন্ট কনটেক্সট ফাইল তৈরি করে এই সুরক্ষা ব্যবস্থাগুলো স্থাপন করতে পারেন।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Create a customization directory named `shopping-assistant/.agents` and
create a file `shopping-assistant/.agents/CONTEXT.md` defining our secure
coding standards:
# Local Project Context & Secure Coding Standards
## Core Paved Roads
We systematically address common vulnerability classes by guiding the agent
to use our pre-configured, secure-by-default helper patterns instead of
writing raw implementation logic from scratch.
1. **Tool Input Validation**: Every agent tool must validate incoming
parameters against strict Pydantic schemas rather than parsing raw
dictionaries or strings.
2. **No Shell Execution**: Never use `run_command` or raw shell execution
tools unless explicitly approved by `hooks.json`.
3. **Pre-Commit Remediation Loop**: If a git commit fails due to a pre-commit
hook error (such as a Semgrep scan finding), you MUST treat the violation
as a refactoring task, apply targeted fixes, run tests to verify no
regressions, and attempt to commit again.
যা আশা করা যায়: Antigravity .agents/ ডিরেক্টরি এবং CONTEXT.md ফাইলটি তৈরি করবে এবং আপনার পর্যালোচনার জন্য সরাসরি সহায়ক প্যানে তা প্রদর্শন করবে।
৬. স্থানীয় গেটিং হুক কনফিগার করুন
আপনার ওয়ার্কস্টেশন থেকে অনিরাপদ কোড বা গোপনীয় তথ্য যাতে বাইরে না যায়, তা প্রতিরোধ করতে কোড কমিট করার আগে আপনার ডেভেলপমেন্ট এনভায়রনমেন্টের সীমানায় স্বয়ংক্রিয় গেট কনফিগার করুন। আমরা অ্যান্টিগ্র্যাভিটিকে হুক কনফিগারেশনগুলো তৈরি করতে নির্দেশ দেব, তারপর টার্মিনাল ব্যবহার করে সেগুলো ইনস্টল করব।
১. গিট প্রি-কমিট হুক
আমাদের স্ট্যাটিক অ্যানালাইসিস যেন নির্ভরযোগ্যভাবে নকল ক্রেডেনশিয়াল শনাক্ত করতে এবং অনিরাপদ কমিট ব্লক করতে পারে, তা নিশ্চিত করার জন্য আমরা একটি কাস্টম সেমগ্রেপ রুল নির্ধারণ করব এবং সেটি কার্যকর করার জন্য একটি গিট প্রি-কমিট হুক কনফিগার করব।
একটি কাস্টম সেমগ্রেপ নিয়ম সংজ্ঞায়িত করুন
ডিফল্ট Semgrep নিয়ম ( --config auto ) কম-কনফিডেন্স স্কোরিংয়ের কারণে "mock" এর মতো শব্দ বা হাইফেনযুক্ত মক কী-গুলোকে ফ্ল্যাগ করে না। আমাদের হার্ডকোডেড API কী নির্ভরযোগ্যভাবে শনাক্ত করার জন্য, আমরা জেনেরিক নিয়মের পরিবর্তে সরাসরি রেজেক্স স্ক্যানিং ব্যবহার করে একটি কাস্টম লোকাল রুলস ফাইল তৈরি করব।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Create a custom Semgrep rules file `shopping-assistant/.semgrep/rules.yaml`
with a rule to detect hardcoded Google API key prefixes (matching regex
`AIzaSy[A-Za-z0-9_\-]*`). Configure it for Python files with an error severity
and a clear security warning message.
যা আশা করা যায়: Antigravity আমাদের কাস্টম স্ক্যানিং নিয়মটি সংজ্ঞায়িত করে shopping-assistant/.semgrep/rules.yaml তৈরি করবে। তৈরি হওয়া নিয়মের সংজ্ঞাটি পর্যালোচনা করুন:
# shopping-assistant/.semgrep/rules.yaml
rules:
- id: detect-hardcoded-google-api-key
pattern-regex: 'AIzaSy[A-Za-z0-9_\-]*'
message: "Security Issue: Hardcoded Google API key prefix detected."
languages:
- python
severity: ERROR
প্রি-কমিট হুক কনফিগার করুন
এরপরে, আমাদের কাস্টম সেমগ্রেপ রুলটি চালানোর জন্য গিট প্রি-কমিট হুকটি কনফিগার করুন। সাবডিরেক্টরি লেআউটে হুক এক্সিকিউট করার সময়, লোকাল কনফিগের পাথ অবশ্যই গিট রিপোজিটরি রুট ডিরেক্টরির ( shopping-assistant/.semgrep/rules.yaml ) সাপেক্ষে হতে হবে, প্রজেক্ট সাবডিরেক্টরির সাপেক্ষে নয়।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Create a `shopping-assistant/.pre-commit-config.yaml` file configured to run
local pre-commit hooks (end-of-file-fixer, trailing-whitespace) and a local
Semgrep security scan on commit for Python files. Ensure Semgrep is configured
with the `--error` flag and references our custom rules file relative to the Git
repository root. Once created, run `pre-commit install` in the
terminal to activate the hooks.
যা আশা করা যায়: Antigravity আপনার হয়ে shopping-assistant/.pre-commit-config.yaml তৈরি করবে এবং pre-commit install চালাবে। তৈরি হওয়া কনফিগারেশনটি পর্যালোচনা করুন:
# shopping-assistant/.pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: end-of-file-fixer
name: End of File Fixer
entry: end-of-file-fixer
language: system
types: [file]
- id: trailing-whitespace
name: Trailing Whitespace
entry: trailing-whitespace-fixer
language: system
types: [file]
- id: semgrep
name: Semgrep Security Scan
entry: semgrep --error --config shopping-assistant/.semgrep/rules.yaml
language: system
types: [python]
এই কনফিগারেশনটি নিশ্চিত করে যে, কোনো এজেন্ট সম্পূর্ণ স্বায়ত্তশাসিত, নন-ইন্টারেক্টিভ মোডে চললেও, প্রি-কমিট গেটটি সক্রিয় হবে এবং স্ট্যাটিক অ্যানালাইসিস স্ক্যানে ব্যর্থ হওয়া যেকোনো কমিটকে ব্লক করবে।
সরাসরি কার্যকর করার কমান্ড (ম্যানুয়াল যাচাইয়ের জন্য)
সম্পূর্ণ কমিট হুক চক্র চালু না করেই আপনার স্ট্যাটিক অ্যানালাইসিস সেটআপ ম্যানুয়ালি যাচাই করতে, আপনি সরাসরি টার্মিনাল থেকে এই চেকগুলি চালাতে পারেন।
প্রি-কমিটের মাধ্যমে ('shopping-assistant' ডিরেক্টরি থেকে):
uv run pre-commit run semgrep --all-files
সরাসরি Semgrep এর মাধ্যমে ('shopping-assistant' ডিরেক্টরি থেকে):
uv run semgrep --error --config .semgrep/rules.yaml app/agent.py
২. অন্তর্নির্মিত অ্যান্টিগ্র্যাভিটি এজেন্ট হুক
আরও গভীর, মধ্য-ট্র্যাজেক্টরি গেটিংয়ের জন্য, shopping-assistant/.agents/hooks.json ফাইলে একটি এজেন্ট হুক কনফিগার করুন। গিট হুকের থেকে ভিন্ন, এজেন্ট হুকগুলো আপনার সিস্টেমে গুরুত্বপূর্ণ টুল (যেমন শেল কমান্ড চালানো) চালানোর আগেই অ্যান্টিগ্র্যাভিটিকে বাধা দেয়।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Create a `shopping-assistant/.agents/hooks.json` file configured with a
`PreToolUse` hook that intercepts `run_command` executions and runs
`python3 .agents/scripts/validate_tool_call.py` with a 10-second timeout.
যা আশা করা যায়: Antigravity, shopping-assistant/.agents/hooks.json ফাইলটি তৈরি করবে। তৈরি হওয়া কনফিগারেশনটি পর্যালোচনা করুন:
{
"enabled": true,
"PreToolUse": [
{
"matcher": "run_command",
"command": "python3 .agents/scripts/validate_tool_call.py",
"timeout": 10
}
]
}
এরপরে, আমাদের হুক দ্বারা উল্লেখিত মূল টুল ভ্যালিডেশন স্ক্রিপ্টটি তৈরি করার জন্য Antigravity-কে নির্দেশ দিন।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Create the script `shopping-assistant/.agents/scripts/validate_tool_call.py`
with logic to inspect `run_command` executions passed using stdin and block
destructive commands like `rm -rf /`.
যা আশা করা যায়: Antigravity, নীচেরটির মতো shopping-assistant/.agents/scripts/validate_tool_call.py তৈরি করবে। তৈরি হওয়া ভ্যালিডেশন স্ক্রিপ্টটি পর্যালোচনা করুন:
# shopping-assistant/.agents/scripts/validate_tool_call.py
import sys
import json
def main():
try:
context = json.load(sys.stdin)
command = context.get("tool_args", {}).get("CommandLine", "")
if "rm -rf /" in command or "mkfs" in command:
print("BLOCKED: Destructive command detected.", file=sys.stderr)
sys.exit(1)
print("APPROVED: Command validation passed.")
sys.exit(0)
except Exception as e:
print(f"Validation error: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
হুক ট্রেড-অফ
- গিট হুকস : ভার্সন কন্ট্রোলের একটি সহজাত অংশ; কোনো এজেন্ট সম্পূর্ণ স্বায়ত্তশাসিত, নন-ইন্টারেক্টিভ মোডে চললেও এটি রান করে। তবে, কমিট করার সময়
--no-verifyফ্ল্যাগ ব্যবহার করে এগুলোকে বাইপাস করা যায়। - এজেন্ট হুকস : বিপজ্জনক টুল কমান্ড ব্লক করার জন্য এগুলো কার্যপ্রবাহের মাঝপথে ইভেন্ট ক্যাপচার করে, কিন্তু কোনো ডেভেলপার যদি IDE বাইপাস করে, তবে এগুলো রিপোজিটরিকে সুরক্ষিত রাখে না।
লোকাল গেটগুলো ডেভেলপারদের ভালো অভ্যাসকে শক্তিশালী করে এবং দুর্বলতাগুলো তাৎক্ষণিকভাবে ধরতে সাহায্য করে। তবে মনে রাখবেন, লোকাল গেটগুলো বাইপাস করা সম্ভব, যার অর্থ হলো আপনার রিমোট ও বিচ্ছিন্ন CI/CD পাইপলাইনই আপনার চূড়ান্ত এবং অনতিক্রম্য নিরাপত্তা বেষ্টনী হিসেবে কাজ করে।
৭. STRIDE থ্রেট মডেলিং দক্ষতা প্রয়োগ করুন
এখন, আপনি অ্যান্টিগ্র্যাভিটিকে একজন নিরাপত্তা স্থপতির বিশেষায়িত জ্ঞান প্রদান করবেন। অ্যান্টিগ্র্যাভিটি স্কিলগুলো হলো মডিউলার, ডিক্লারেটিভ মার্কডাউন ডিরেক্টরি, যা এজেন্টকে বহু-ধাপের রিজনিং জবগুলো কীভাবে চালাতে হবে তার নির্দেশ দেয়। অ্যান্টিগ্র্যাভিটি .agents/skills/ ফোল্ডারে রাখা যেকোনো স্কিল স্বয়ংক্রিয়ভাবে খুঁজে বের করে।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Create a local skill directory
`shopping-assistant/.agents/skills/stride-threat-model/` and create a skill
definition file `shopping-assistant/.agents/skills/stride-threat-model/SKILL.md`
with the following content:
---
name: stride-threat-model
description: Performs a systematic STRIDE threat modeling assessment on the
current project's codebase and architecture. Use this when starting a new
implementation phase or reviewing existing components.
---
# STRIDE Threat Modeling Skill
## Goal
Guide the agent to analyze the workspace directory structure, configuration
files, and code files to produce a structured `threat_model.md` assessment.
## Instructions
1. **Analyze System Boundaries**: Map the entry points (tools, workflows,
prompts) and data storage layers.
2. **STRIDE Evaluation**: Evaluate the system against the six STRIDE pillars:
- **Spoofing**: Are caller identity boundaries verified before executing
sensitive tool logic?
- **Tampering**: Can users manipulate data flows, parameters, or underlying
state?
- **Repudiation**: Are critical transactions securely logged?
- **Information Disclosure**: Are we risking leakage of PII, internal tokens,
or raw stack traces?
- **Denial of Service**: Are there rate limits on expensive database or LLM
queries?
- **Elevation of Privilege**: Can an unauthenticated user bypass access
control to reach privileged tool actions?
3. **Output**: Generate a highly structured `threat_model.md` saved directly
into the workspace root.
যা আশা করা যায়: অ্যান্টিগ্র্যাভিটি কাস্টম স্কিল ডিরেক্টরি এবং SKILL.md ফাইল তৈরি করবে।
এখন, আপনার সক্রিয় প্রজেক্ট গ্রাফ ( shopping-assistant/app/agent.py ) মূল্যায়ন করতে আপনার নতুন তৈরি করা স্কিলটি চালান।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Run stride-threat-model on our shopping-assistant agent graph.
যা আশা করা যায়: অ্যান্টিগ্র্যাভিটি আপনার ইন্টেন্টের সাথে মিলিয়ে নেয়, আপনার লোকাল স্কিল ডিরেক্টরি থেকে চাহিদা অনুযায়ী থ্রেট অ্যাসেসমেন্ট নির্দেশাবলী লোড করে, আপনার বিদ্যমান agent.py ফাইলটি বিশ্লেষণ করে এবং সরাসরি আপনার shopping-assistant রুটে একটি স্ট্রাকচার্ড threat_model.md তৈরি করে। এই পদ্ধতিটি আপনার দৈনন্দিন কাজের পরিবেশকে পরিষ্কার ও হালকা রাখে এবং একই সাথে আপনাকে বিশেষজ্ঞ নিরাপত্তা যুক্তিতে তাৎক্ষণিক অ্যাক্সেস দেয়।
৮. টিডিডি পরিকল্পনা পর্যায়কে গেট করুন
আরও ফিচার প্রয়োগ করার বা কোড রিফ্যাক্টরিং করার আগে, অ্যান্টিগ্র্যাভিটি তার সিম্যান্টিক কোডবেস বোঝার ক্ষমতা ব্যবহার করে implementation_plan.md এবং task.md চেকলিস্টে পরিবর্তনগুলো সাজিয়ে নেয়। অ্যান্টিগ্র্যাভিটিকে শুরুতেই নিরাপত্তার কথা মাথায় রেখে ডিজাইন করতে বাধ্য করার জন্য, আমরা .agents/CONTEXT.md এ একটি সিস্টেম রুল কনফিগার করি যা প্ল্যান অনুমোদনকে সীমাবদ্ধ করে।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Append the following TDD planning gate instruction to the bottom of
`shopping-assistant/.agents/CONTEXT.md`:
## TDD Planning Gate
During the Plan phase, you must decompose the workspace task into logical,
modular stages. Every implementation plan MUST include a dedicated
**Security Boundaries & Assertions** section outlining specific edge cases
that could exploit the feature.
যা প্রত্যাশা করা যায়: Antigravity নতুন প্ল্যানিং গেট রুল দিয়ে shopping-assistant/.agents/CONTEXT.md ফাইলটি আপডেট করবে।
পরবর্তী ধাপগুলিতে যখন আপনি অ্যান্টিগ্র্যাভিটিকে কোনো ফিচার বিল্ড বা রিফ্যাক্টর করতে বলবেন, তখন এটি স্বয়ংক্রিয়ভাবে এই নিয়মটি বিশ্লেষণ করবে এবং একটি সুস্পষ্ট নিরাপত্তা বিবরণসহ একটি বাস্তবায়ন পরিকল্পনা উপস্থাপন করবে। আপনি এই পরিকল্পনাটি সরাসরি অ্যান্টিগ্র্যাভিটির ইন্টারেক্টিভ ডায়ালগ বা সহায়ক প্যানে পর্যালোচনা করতে পারবেন, যেখানে কোড জেনারেশন শুরু হওয়ার আগে আপনাকে অবশ্যই 'Proceed' বা 'Approve'-এ ক্লিক করতে হবে।
পরিকল্পনা গেট পরীক্ষা করুন (ঐচ্ছিক)
এই প্ল্যানিং গেটটি এখনই কার্যকরভাবে দেখতে, নিচের ফিচার রিকোয়েস্টগুলোর মধ্যে যেকোনো একটি দিয়ে অ্যান্টিগ্র্যাভিটিকে প্রম্পট করার চেষ্টা করুন। সাথে সাথে কোড জেনারেট করার পরিবর্তে, অ্যান্টিগ্র্যাভিটি প্ল্যান ফেজে প্রবেশ করবে এবং আপনার পর্যালোচনার জন্য একটি implementation_plan.md উপস্থাপন করবে, যেখানে সিকিউরিটি বাউন্ডারি ও অ্যাসারশনগুলোর একটি বিশদ বিশ্লেষণ (যেমন, রেস কন্ডিশন শনাক্তকরণ, অননুমোদিত প্রিভিলেজ এসকেলেশন, বা নেগেটিভ পয়েন্ট ভ্যালু) থাকবে!
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট (পরীক্ষা করার জন্য একটি বেছে নিন):
Plan a new agent tool `award_loyalty_points` that awards points to a user's
account after a successful purchase.
Plan a new agent tool `process_cart_checkout` that receives a cart ID and
discount code, applies the discount, and processes the order.
Plan a new agent tool `update_discount_status` that allows administrators to
activate or deactivate discount codes in the store.
৯. বিচ্ছিন্ন ও ফলাফল-ভিত্তিক পরীক্ষা লিখুন
এখন আমরা আমাদের বিদ্যমান ADK এজেন্ট টুলগুলোর জন্য ব্যাপক নিরাপত্তা পরীক্ষা লিখতে অ্যান্টিগ্র্যাভিটিকে নির্দেশনা দিই। আমাদের নিরাপত্তা পরীক্ষাগুলো যেন স্থিতিস্থাপক ও বাস্তবসম্মত হয়, তা নিশ্চিত করতে আমরা দুটি মূল নীতির উপর ভিত্তি করে সেগুলোর কাঠামো তৈরি করি:
- ইন্টারঅ্যাকশনের পরিবর্তে ফলাফলের উপর অ্যাসার্ট করুন : অভ্যন্তরীণ হেল্পার কলগুলোর উপর নজরদারি করে এমন ভঙ্গুর মক লেখার পরিবর্তে, চূড়ান্ত রিটার্ন স্ট্রিং এবং স্টেট পরিবর্তনের উপর অ্যাসার্ট করুন।
- কঠোর সুরক্ষা ব্যবস্থা প্রয়োগ করুন : যাচাই করুন যে টুলগুলি সুস্পষ্ট ব্যবসায়িক যুক্তির সীমানা (যেমন এককালীন রিডেম্পশন এবং নিবন্ধিত ব্যবহারকারীর নিয়ম) প্রয়োগ করে।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Use `agents-cli` and pytest to generate an outcome-based security test suite
in `shopping-assistant/tests/test_agent.py`. Inspect `app/agent.py` and
write tests to verify all security boundaries and business logic guardrails
for the `redeem_discount` tool.
যা আশা করা যায়: Antigravity নিচেরটির মতো shopping-assistant/tests/test_agent.py ফাইলটি তৈরি করবে। তৈরি হওয়া টেস্ট ফাইলটি পর্যালোচনা করুন:
# shopping-assistant/tests/test_agent.py
import pytest
from app.agent import redeem_discount, DISCOUNT_STORE
@pytest.fixture(autouse=True)
def reset_store():
"""Ensure strict test isolation by resetting in-memory store state before each test run."""
DISCOUNT_STORE["WELCOME50"] = False
DISCOUNT_STORE["SUMMER20"] = False
yield
DISCOUNT_STORE["WELCOME50"] = False
DISCOUNT_STORE["SUMMER20"] = False
def test_discount_code_can_only_be_redeemed_once():
"""Verify a user cannot submit a request reusing a single-use code."""
# First redemption - should succeed
res_one = redeem_discount("WELCOME50", "user_123")
assert "Success" in res_one
assert DISCOUNT_STORE["WELCOME50"] is True
# Second redemption trying to reuse the same code
res_two = redeem_discount("WELCOME50", "user_456")
assert "Error: Discount code has already been redeemed" in res_two
def test_discount_redemption_rejects_invalid_code():
"""Verify that unknown discount codes are hard-blocked."""
res = redeem_discount("INVALID999", "user_123")
assert "Error: Invalid discount code" in res
def test_discount_redemption_rejects_guest_accounts():
"""Verify that unauthenticated guest accounts cannot redeem discounts."""
res = redeem_discount("SUMMER20", "guest_999")
assert "Error: Registered user account required" in res
assert DISCOUNT_STORE["SUMMER20"] is False
TDD GREEN পর্যায় যাচাই করুন
আমাদের নতুন তৈরি করা নিরাপত্তা পরীক্ষাগুলো বিদ্যমান agent.py ইমপ্লিমেন্টেশনের বিপরীতে সফলভাবে পাস করছে কিনা তা যাচাই করতে, আপনার পক্ষ থেকে pytest চালানোর জন্য Antigravity-কে নির্দেশ দিন।
👉 অ্যান্টিগ্র্যাভিটির জন্য প্রম্পট:
Run `uv run pytest tests/test_agent.py` on our `shopping-assistant` project to verify that our security tests pass successfully.
যা আশা করা যায়: অ্যান্টিগ্র্যাভিটি টার্মিনালে uv run pytest tests/test_agent.py কমান্ডটি চালাবে। সমস্ত টেস্ট কেস সফলভাবে পাস করবে। অ্যাপ্লিকেশনটির লজিক্যাল সীমানা এখন সুরক্ষিত, কিন্তু আমাদের অবশ্যই নিশ্চিত করতে হবে যে কমিট করার সময় আমাদের স্ট্যাটিক স্ক্যানারটি হার্ডকোডেড এপিআই কী-টি শনাক্ত করতে পারে।
১০. গেটিং এবং এজেন্টের স্ব-সংশোধন যাচাই করুন
টেস্টগুলো সফল হওয়ায়, আপনি এখন রিফ্যাক্টর এবং কমিট পর্যায়ে প্রবেশ করবেন। এই পর্যায়ে আমাদের লোকাল সিকিউরিটি স্ক্যান এবং প্রি-কমিট হুকগুলো যাচাই করে যে, কোনো রিপো দুর্বলতা নিয়ে ওয়ার্কস্টেশন থেকে বের হচ্ছে না, এবং অ্যান্টিগ্র্যাভিটি তার স্বয়ংক্রিয় সংশোধনের ক্ষমতা প্রদর্শন করে।
- আপনার টার্মিনালে প্রজেক্ট ডিরেক্টরিতে যান এবং
uv runব্যবহার করে কোডটি কমিট করুন, যাতে আপনার PATH-এ লোকাল প্রি-কমিট হুক বাইনারিগুলো সক্রিয় থাকে:cd ~/secure-agent-lab/shopping-assistant git add . uv run git commit -m "feat: implement shopping assistant agent" - লক্ষ্য করুন যে কমিটটি ব্যর্থ হয়, কারণ গিট প্রি-কমিট হুক স্বয়ংক্রিয়ভাবে সেমগ্রেপ (Semgrep) চালায়:
Semgrep Security Scan....................................................Failed - hookid: semgrep app/agent.py Security Issue: Hardcoded Google API key prefix detected.
-
.agents/CONTEXT.mdএ কনফিগার করা প্রি-কমিট রেমিডিয়েশন লুপ রুল দ্বারা পরিচালিত হয়ে, অ্যান্টিগ্র্যাভিটি স্বয়ংক্রিয়ভাবে IDE টার্মিনালে প্রি-কমিট ব্যর্থতা শনাক্ত করে, Semgrep এরর লগগুলো পড়ে এবং হার্ডকোডেড API কী থেকে সরে এসে নিরাপদে কী-টি পুনরুদ্ধার করার জন্য একটি রিফ্যাক্টরিং ধাপ শুরু করে। - এপিআই কী লিক সমাধান করতে
shopping-assistant/app/agent.pyতে Antigravity দ্বারা জেনারেট করা রিফ্যাক্টর করা কোডটি পর্যালোচনা করুন। - টেস্টগুলো এখনও গ্রিন আছে কিনা তা যাচাই করার জন্য অ্যান্টিগ্র্যাভিটি স্বয়ংক্রিয়ভাবে
pytestচালায়। - অ্যান্টিগ্র্যাভিটি আপনার হয়ে আবার কমিট করার চেষ্টা করে। যদি আপনার লোকাল গিট আইডেন্টিটি কনফিগার করা থাকে এবং একটি রিপো ইনিশিয়ালাইজ করা থাকে, তবে স্ক্যানটি সফল হয় এবং কমিটটি সফল হয়!
এটি TDD-কে লোকাল প্রি-কমিট হুক এবং এজেন্ট লুপের সাথে একত্রিত করার মূল শক্তি প্রদর্শন করে। রিমোট CI/CD ব্যর্থতার জন্য অপেক্ষা করার পরিবর্তে, এজেন্টকে স্থানীয়ভাবে দায়বদ্ধ রাখা হয় এবং পুশ করার আগেই এটি তার কোডকে ডিফল্টরূপে সুরক্ষিত করার জন্য রিফ্যাক্টর করে।
১১. এজেন্টটি স্থানীয়ভাবে চালান এবং পরীক্ষা করুন
এখন যেহেতু নিরাপত্তা সীমাগুলো যাচাই ও নিশ্চিত করা হয়েছে, স্থানীয় প্লেগ্রাউন্ডে এটির সাথে ইন্টারঅ্যাক্ট করার জন্য আপনার এক্সপোর্ট করা জেমিনি এপিআই কী ব্যবহার করে স্থানীয়ভাবে এডিকে এজেন্টটি চালান।
- আপনার টার্মিনালে, নিশ্চিত করুন যে আপনার Gemini API Key আপনার এনভায়রনমেন্টে এক্সপোর্ট করা আছে:
echo $GEMINI_API_KEY # Verify your key is exported - আপনার এজেন্টের জন্য স্থানীয় উন্নয়ন ক্ষেত্র চালু করুন:
আপনি এমন আউটপুট দেখতে পাবেন যা থেকে বোঝা যাবে যে স্থানীয় প্লেগ্রাউন্ড সার্ভারটি ৮০৮০ পোর্টে চলছে:cd ~/secure-agent-lab/shopping-assistant agents-cli playground* Serving ADK Playground * Running on http://127.0.0.1:8080/dev-ui/?app=app
- আপনার শপিং অ্যাসিস্ট্যান্ট এজেন্টের সাথে ইন্টারেক্টিভ চ্যাটিং শুরু করতে আপনার ওয়েব ব্রাউজারে প্রদত্ত URL-টি খুলুন। এটিকে একটি ডিসকাউন্ট কোড রিডিম করতে বলুন:
এজেন্ট জেমিনি মডেল এক্সিকিউশন ব্যবহার করে আপনার অনুরোধটি প্রক্রিয়া করবে এবং ডিসকাউন্টটি রিডিম করার চেষ্টা করবে।Can you redeem the discount code WELCOME50 for user user_123?
১২. পরিষ্কার করুন
আপনার ওয়ার্কস্টেশন পরিষ্কার করতে এবং স্থানীয় পরিবেশে অবাঞ্ছিত রিসোর্স বা গোপনীয় তথ্য রেখে যাওয়া এড়াতে, এই পরিষ্কার করার ধাপগুলো অনুসরণ করুন।
- স্থানীয় সার্ভার বন্ধ করুন : যদি আপনার প্লেগ্রাউন্ড সার্ভারটি এখনও চালু থাকে, তাহলে আপনার টার্মিনালে
Ctrl + Cচেপে এটি বন্ধ করুন। - স্থানীয় প্রজেক্ট ফাইলগুলি সরান : আপনার মেশিন থেকে স্থানীয় প্রজেক্ট ডিরেক্টরিটি মুছে ফেলুন:
rm -rf ~/secure-agent-lab
১৩. অভিনন্দন
অভিনন্দন! আপনি Google Antigravity IDE ব্যবহার করে সফলভাবে একটি নিরাপদ, পরীক্ষা-চালিত উন্নয়ন জীবনচক্র প্রতিষ্ঠা করেছেন, একটি বিশুদ্ধ ADK 2.0 শপিং অ্যাসিস্ট্যান্ট এজেন্ট তৈরি করেছেন এবং স্থানীয়ভাবে এটি যাচাই করেছেন।
আপনি যা শিখেছেন
- Antigravity IDE এবং
agents-cliব্যবহার করে কীভাবে একটি ADK 2.0 এজেন্ট (ADK) স্কাফোল্ড এবং ইন্টিগ্রেট করতে হয়। -
CONTEXT.mdব্যবহার করে কীভাবে প্রজেক্ট-স্তরের সুরক্ষিত কোডিং স্ট্যান্ডার্ড সেট আপ করবেন। - Antigravity IDE-তে কীভাবে একটি কাস্টম STRIDE থ্রেট মডেলিং স্কিল তৈরি এবং রান করবেন।
- নিরাপত্তা সীমানা জোরদার করতে একটি এআই এজেন্টের পরিকল্পনা পর্যায়কে কীভাবে নিয়ন্ত্রণ করা যায়।
- pytest ব্যবহার করে কীভাবে বিচ্ছিন্ন ও ফলাফল-ভিত্তিক নিরাপত্তা পরীক্ষা বাস্তবায়ন করা যায়।
- স্থানীয়ভাবে এজেন্টিক অ্যাপ্লিকেশনটি কীভাবে চালানো এবং পরীক্ষা করা যায়।
- গিট হুক এবং এজেন্ট-নির্দিষ্ট এক্সিকিউশন হুকের মধ্যে পার্থক্য ও সুবিধা-অসুবিধা।
পরবর্তী পদক্ষেপ
- উন্নত কনফিগারেশনের জন্য অ্যান্টিগ্র্যাভিটি কাস্টমাইজিং গাইডটি দেখুন।
- স্ট্রাইড থ্রেট মডেলিং সম্পর্কে আরও পড়ুন।
- আপনার প্রতিষ্ঠানের নিরাপত্তা নীতিমালার সাথে সামঞ্জস্যপূর্ণ Semgrep নিয়মগুলো প্রয়োগ করুন।
আপনার Kaggle 5-Day AI Agents ব্যাজটি অর্জন করুন 🎉
Kaggle-এর Google-এর সাথে আয়োজিত ৫-দিনের AI Agents: Intensive Vibe Coding Course- এর অংশ হিসেবে এই ল্যাবটি সম্পন্ন করেছেন? আপনার সমাপ্তি ব্যাজটি সংগ্রহ করুন: