Google Antigravity에서 스킬 시작하기

1. 소개

Google Antigravity (이 문서의 나머지 부분에서는 Antigravity라고 함)는 Google의 에이전트 기반 IDE입니다. Antigravity 시작하기 Codelab에서 Antigravity의 기본사항을 알아볼 수 있습니다. 이 Codelab에서는 Antigravity를 사용하여 에이전트 기술을 빌드합니다. 에이전트 기술은 전문 지식과 워크플로를 통해 AI 에이전트 기능을 확장하는 경량의 개방형 형식입니다. 상담사 기술이 무엇인지, 어떤 이점이 있는지, 어떻게 구성되는지 알아볼 수 있습니다. 그런 다음 Antigravity 내에서 모두 사용할 수 있는 Git 포맷터, 템플릿 생성기, 도구 코드 스캐폴딩 등 다양한 에이전트 기술을 빌드합니다.

기본 요건:

  • Google Antigravity가 설치되고 구성되었습니다.
  • Google Antigravity에 대한 기본적인 이해 Google Antigravity 시작하기 Codelab을 완료하는 것이 좋습니다.

2. 기술이 필요한 이유

최신 AI 에이전트는 단순한 리스너에서 로컬 파일 시스템 및 외부 도구 (MCP 서버를 통해)와 통합되는 복잡한 추론자로 발전했습니다. 하지만 전체 코드베이스와 수백 개의 도구를 에이전트에 무분별하게 로드하면 컨텍스트 포화 및 '도구 블로트'가 발생합니다. 컨텍스트 윈도우가 크더라도 사용하지 않는 도구의 토큰 40, 000~50, 000개를 활성 메모리에 덤프하면 지연 시간이 길어지고, 재정적 낭비가 발생하며, 모델이 관련 없는 데이터로 인해 혼동되는 '컨텍스트 손상'이 발생합니다.

해결 방법: 상담사 기술

이 문제를 해결하기 위해 Anthropic은 에이전트 스킬을 도입하여 아키텍처를 모놀리식 컨텍스트 로드에서 점진적 공개로 전환했습니다. 세션을 시작할 때 모델이 데이터베이스 이전이나 보안 감사와 같은 모든 특정 워크플로를 '기억'하도록 강제하는 대신 이러한 기능은 검색 가능한 모듈식 단위로 패키징됩니다.

작동 방식

모델은 처음에는 경량 메타데이터 '메뉴'에만 노출됩니다. 사용자의 의도가 스킬과 구체적으로 일치하는 경우에만 무거운 절차적 지식 (안내 및 스크립트)을 로드합니다. 이렇게 하면 인증 미들웨어를 리팩터링하려는 개발자가 관련 없는 CSS 파이프라인을 로드하지 않고 보안 컨텍스트를 가져와 컨텍스트를 간결하고 빠르며 비용 효율적으로 유지할 수 있습니다.

d3f4bcb065a19fea.png

3. 상담사 기술 및 Antigravity

Antigravity 생태계에서 에이전트 관리자가 두뇌이고 편집기가 캔버스라면 스킬은 범용 Gemini 3 모델과 특정 컨텍스트 간의 격차를 해소하는 전문 교육 모듈 역할을 합니다. 이를 통해 에이전트는 데이터베이스 이전 표준이나 보안 검사와 같은 정의된 일련의 지침과 프로토콜을 관련 작업이 요청된 경우에만 '장착'할 수 있습니다. 이러한 실행 프로토콜을 동적으로 로드함으로써 스킬은 AI를 일반적인 프로그래머에서 조직의 성문화된 권장사항과 안전 표준을 엄격하게 준수하는 전문가로 효과적으로 변환합니다.

Antigravity의 스킬이란 무엇인가요?

Google Antigravity의 맥락에서 스킬은 정의 파일 (SKILL.md)과 선택적 지원 애셋 (스크립트, 참조, 템플릿)이 포함된 디렉터리 기반 패키지입니다.

주문형 기능 확장 메커니즘입니다.

  • 주문형: 항상 로드되는 시스템 프롬프트와 달리 스킬은 에이전트가 사용자의 현재 요청과 관련이 있다고 판단할 때만 에이전트의 컨텍스트에 로드됩니다. 이렇게 하면 컨텍스트 윈도우가 최적화되고 에이전트가 관련 없는 명령어에 주의를 빼앗기지 않습니다. 수십 개의 도구가 있는 대규모 프로젝트에서는 이러한 선택적 로딩이 성능과 추론 정확도에 매우 중요합니다.
  • 기능 확장: 스킬은 지시하는 것 외에도 실행할 수 있습니다. Python 또는 Bash 스크립트를 번들로 묶으면 사용자가 명령어를 수동으로 실행하지 않아도 스킬이 에이전트에게 로컬 머신이나 외부 네트워크에서 복잡한 다단계 작업을 실행할 수 있는 기능을 제공할 수 있습니다. 이렇게 하면 에이전트가 텍스트 생성기에서 도구 사용자로 변환됩니다.

기술과 생태계 (도구, 규칙, 워크플로)

모델 컨텍스트 프로토콜 (MCP)은 에이전트의 '손' 역할을 하여 GitHub 또는 PostgreSQL과 같은 외부 시스템에 강력하고 지속적인 연결을 제공하는 반면, 스킬은 이러한 연결을 지시하는 '두뇌' 역할을 합니다.

MCP는 상태 저장 인프라를 처리하는 반면 스킬은 이러한 도구를 사용하는 방법론을 패키징하는 경량의 일시적인 작업 정의입니다. 이 서버리스 접근 방식을 사용하면 에이전트가 지속적인 프로세스를 실행하는 운영 오버헤드 없이 임시 작업 (예: 변경 로그 또는 마이그레이션 생성)을 실행하고, 작업이 활성 상태일 때만 컨텍스트를 로드하고 작업이 완료된 후 즉시 해제할 수 있습니다.

기능적으로 스킬은 '규칙' (수동적, 항상 사용 설정된 가이드라인)과 '워크플로' (능동적, 사용자 트리거 매크로) 사이의 고유한 중간 지점을 차지합니다. 특정 명령어가 필요한 워크플로 (예: /test) 스킬은 에이전트 트리거입니다. 모델이 사용자의 의도를 자동으로 감지하고 필요한 특정 전문 지식을 동적으로 갖춥니다. 이 아키텍처는 강력한 구성 가능성을 지원합니다. 예를 들어 전역 규칙은 데이터베이스 변경 중에 '안전한 이전' 스킬을 사용하도록 강제할 수 있으며, 단일 워크플로는 여러 스킬을 오케스트레이션하여 강력한 배포 파이프라인을 빌드할 수 있습니다.

4. 스킬 만들기

Antigravity에서 스킬을 만드는 것은 특정 디렉터리 구조와 파일 형식을 따릅니다. 이 표준화를 통해 스킬을 이동할 수 있으며 에이전트가 스킬을 안정적으로 파싱하고 실행할 수 있습니다. 이 설계는 마크다운 및 YAML과 같이 널리 이해되는 형식을 사용하여 의도적으로 간단하게 구성되어 IDE의 기능을 확장하려는 개발자의 진입 장벽을 낮춥니다.

디렉터리 구조

기술은 두 가지 범위로 정의할 수 있으므로 프로젝트별 맞춤설정과 사용자별 맞춤설정이 모두 가능합니다.

  1. Workspace 범위: <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). 제공되지 않으면 기본적으로 디렉터리 이름으로 설정됩니다.
  • description: 필수 항목이며 가장 중요한 필드입니다. '트리거 문구'로 작동합니다. 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는 상대 경로로 이를 참조합니다.

5. 작성 기술

이 섹션의 목표는 Antigravity에 통합되고 리소스/스크립트 등 다양한 기능을 점진적으로 표시하는 스킬을 빌드하는 것입니다.

https://github.com/rominirani/antigravity-skills의 GitHub 저장소에서 스킬을 다운로드할 수 있습니다.

이러한 각 스킬을 ~/.gemini/antigravity/skills 폴더 또는 /.agent/skills 폴더 안에 배치할 수 있습니다.

레벨 1 : 기본 라우터 ( git-commit-formatter )

이를 스킬의 'Hello World'라고 생각해 보겠습니다.

개발자는 'wip', 'fix bug', 'updates'와 같이 대충 작성된 커밋 메시지를 작성하는 경우가 많습니다. '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. 채팅을 열고 '이 변경사항을 커밋해 줘'라고 입력합니다.
  3. 에이전트는 git commit만 실행하지 않습니다. 먼저 git-commit-formatter 스킬을 활성화합니다.
  4. 결과: 기존 Git 커밋 메시지가 제안됩니다.

예를 들어 Antigravity가 샘플 Python 파일에 몇 가지 주석을 추가하도록 했더니 docs: add detailed comments to demo_primes.py.와 같은 Git 커밋 메시지가 생성되었습니다.

레벨 2: 애셋 활용 (license-header-adder)

'참조' 패턴입니다.

회사 프로젝트의 모든 소스 파일에는 특정 20줄 Apache 2.0 라이선스 헤더가 필요할 수 있습니다. 이 정적 텍스트를 프롬프트 (또는 SKILL.md)에 직접 넣는 것은 낭비입니다. 스킬이 색인화될 때마다 토큰이 사용되며 모델이 법적 텍스트에서 오타를 '환각'할 수 있습니다.

정적 텍스트를 resources/ 폴더의 일반 텍스트 파일로 오프로드합니다. 스킬은 필요한 경우에만 이 파일을 읽도록 상담사에게 안내합니다.

JSON API 응답과 같은 느슨한 데이터를 Pydantic 모델과 같은 엄격한 코드로 변환하려면 수십 가지 결정을 내려야 합니다. 클래스 이름을 어떻게 지정해야 하나요? Optional를 사용해야 하나요? snake_case 또는 camelCase 중에 선택하세요. 이러한 50개의 규칙을 영어로 작성하는 것은 지루하고 오류가 발생하기 쉽습니다.

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. 새 더미 Python 파일 touch my_script.py 만들기
  2. 유형: Add the license header to my_script.py
  3. 상담사는 license-header-adder/resources/HEADER_TEMPLATE.txt을 읽습니다.
  4. 콘텐츠가 파일에 그대로 붙여넣어집니다.

레벨 3: 예시를 통한 학습 (json-to-pydantic)

'퓨샷' 패턴

JSON API 응답과 같은 느슨한 데이터를 Pydantic 모델과 같은 엄격한 코드로 변환하려면 수십 가지 결정을 내려야 합니다. 클래스 이름을 어떻게 지정해야 하나요? Optional를 사용해야 하나요? snake_case 또는 camelCase 중에 선택하세요. 이러한 50개의 규칙을 영어로 작성하는 것은 지루하고 오류가 발생하기 쉽습니다.

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 파일과 출력 파일(Python 파일)이 있습니다. 두 가지 모두 아래에 나와 있습니다.

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
}

output_model.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의 코딩 스타일, 가져오기, 구조를 완벽하게 모방하는 Python 클래스를 생성하며, null 주식을 Optional로 처리하는 것도 포함됩니다.

샘플 출력 (product_model.py)은 다음과 같습니다.

from pydantic import BaseModel
from typing import Optional

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

4단계: 절차적 로직 (database-schema-validator)

'도구 사용' 패턴입니다.

LLM에 '이 스키마는 안전한가요?'라고 물으면 SQL이 올바르게 보이기 때문에 중요한 기본 키가 누락되어도 문제가 없다고 대답할 수 있습니다.

이 검사를 결정론적 스크립트에 위임해 보겠습니다. 기술을 사용하여 에이전트가 작성한 Python 스크립트를 실행하도록 라우팅합니다. 스크립트는 이진 (참/거짓) 값을 제공합니다.

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. 에이전트는 추측하지 않습니다. 스크립트가 호출되어 실패 (종료 코드 1)하고 'users' 테이블에 기본 키가 누락되어 유효성 검사에 실패했다는 메시지가 표시됩니다.

레벨 5: 설계자 (adk-tool-scaffold)

이 패턴은 스킬에서 사용할 수 있는 대부분의 기능을 다룹니다.

복잡한 작업에는 파일 생성, 템플릿 사용, 로직 작성 등 지금까지 살펴본 모든 것을 결합하는 일련의 작업이 필요한 경우가 많습니다. ADK (에이전트 개발 키트)용 새 도구를 만들려면 이 모든 것이 필요합니다.

Google은 다음을 결합합니다.

  • 스크립트 (파일 생성/스캐폴딩 처리)
  • 템플릿 (리소스의 상용구를 처리)
  • 예시 (로직 생성을 안내).
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. 1단계 (스캐폴딩): 에이전트가 Python 스크립트를 실행합니다. 이렇게 하면 올바른 클래스 구조, 가져오기, 클래스 이름 StockPriceTool으로 StockPriceTool.py가 즉시 생성됩니다.
  3. 2단계 (구현): 에이전트가 방금 만든 파일을 '읽습니다'. # TODO: Implement logic.이 표시됩니다.
  4. 3단계 (안내): 도구 인수의 JSON 스키마를 정의하는 방법을 모르겠습니다. examples/WeatherTool.py을 확인합니다.
  5. 완료: 파일을 수정하여 requests.get(...)를 추가하고 스키마에서 ADK 스타일과 정확히 일치하는 ticker 인수를 정의합니다.

6. 축하합니다

Antigravity Skills 실습을 완료하고 다음 스킬을 빌드했습니다.

  • Git 커밋 포맷터입니다.
  • 라이선스 헤더 추가기
  • JSON에서 Pydantic으로
  • 데이터베이스 스키마 유효성 검사기입니다.
  • ADK 도구 스캐폴딩

에이전트 스킬은 Antigravity가 내 방식으로 코드를 작성하고, 규칙을 따르고, 내 도구를 사용하도록 하는 좋은 방법입니다.

참조 문서