Google Antigravity 시작하기

1. 소개

이 Codelab에서는 IDE를 에이전트 우선 시대로 발전시키는 에이전트 개발 플랫폼인 Google Antigravity (문서의 나머지 부분에서는 Antigravity라고 함)에 대해 알아봅니다.

줄을 자동 완성하는 표준 코딩 어시스턴트와 달리 Antigravity는 빌드를 지원하기 위해 계획, 코딩, 웹 탐색까지 할 수 있는 자율 에이전트를 관리하는 '미션 컨트롤'을 제공합니다.

Antigravity는 에이전트 중심 플랫폼으로 설계되었습니다. AI는 코드를 작성하는 도구일 뿐만 아니라 최소한의 인간 개입으로 복잡한 엔지니어링 작업을 계획, 실행, 검증, 반복할 수 있는 자율적 행위자라고 가정합니다.

학습할 내용

  • Antigravity 설치 및 구성
  • 에이전트 관리자, 편집기, 브라우저 등 Antigravity의 주요 개념을 살펴봅니다.
  • Antigravity를 사용한 몇 가지 사용 사례를 살펴봅니다.

필요한 항목

현재 Antigravity는 개인 Gmail 계정의 미리보기로 제공됩니다. 최고급 모델을 사용할 수 있는 무료 할당량이 제공됩니다.

Antigravity는 시스템에 로컬로 설치되어 있어야 합니다. 이 제품은 Mac, Windows, 특정 Linux 배포에서 사용할 수 있습니다. 자체 머신 외에 다음이 필요합니다.

  • Chrome 웹브라우저
  • Gmail 계정 (개인 Gmail 계정)

이 Codelab은 초보자를 포함한 모든 수준의 사용자와 개발자를 대상으로 합니다.

문제 신고

Codelab을 진행하고 Antigravity를 사용하면서 문제가 발생할 수 있습니다.

Codelab 관련 문제 (오타, 잘못된 안내)의 경우 이 Codelab의 왼쪽 하단에 있는 Report a mistake 버튼을 사용하여 버그를 신고하세요.

b06b582bcd847f6d.png

Antigravity와 관련된 버그 또는 기능 요청은 Antigravity 내에서 문제를 신고하세요. 왼쪽 하단의 Provide Feedback 링크를 사용하여 에이전트 관리자에서 이 작업을 수행할 수 있습니다.

281ac826fb44d427.png

프로필 아이콘 아래의 Report Issue 링크를 사용하여 편집기로 이동할 수도 있습니다.

e8afd782a8f92129.png

2. 설치

먼저 Antigravity를 설치합니다. 현재 제품은 미리보기로 제공되며 개인 Gmail 계정을 사용하여 시작할 수 있습니다.

다운로드 페이지로 이동하여 케이스에 해당하는 적절한 운영체제 버전을 클릭합니다. 애플리케이션 설치 프로그램을 실행하고 컴퓨터에 설치합니다. 설치를 완료한 후 Antigravity 애플리케이션을 실행합니다. 다음과 유사한 화면이 표시됩니다.

29fada39721093c.png

매번 Next을 클릭하여 진행하세요. 주요 단계는 아래에 자세히 설명되어 있습니다.

  • 설정 흐름 선택: 기존 VS Code 또는 Cursor 설정에서 가져오는 옵션이 표시됩니다. 새로운 시작을 할 것입니다.
  • 편집기 테마 유형 선택: 어두운 테마를 선택하지만 이는 전적으로 사용자에게 달려 있습니다.
  • Antigravity 에이전트를 어떻게 사용하고 싶으신가요?

7ca55560ec377130.png

좀 더 자세히 알아보겠습니다. 설정은 언제든지 Antigravity 사용자 설정 (Cmd + ,)을 통해 변경할 수 있습니다.

옵션을 자세히 살펴보기 전에 대화상자 오른쪽에 표시되는 몇 가지 속성을 살펴보겠습니다.

터미널 실행 정책

이는 에이전트가 터미널에서 명령어 (애플리케이션/도구)를 실행할 수 있도록 하는 것과 관련이 있습니다.

  • 항상 진행: 구성 가능한 거부 목록에 있는 명령어를 제외하고 항상 터미널 명령어를 자동 실행합니다.
  • 검토 요청: 터미널 명령어를 실행하기 전에 사용자 검토 및 승인을 요청합니다.

정책 검토

에이전트는 작업을 수행하면서 다양한 아티팩트 (작업 계획, 구현 계획 등)를 생성합니다. 검토 정책은 검토가 필요한지 여부를 결정하는 사용자를 지정할 수 있도록 설정됩니다. 항상 검토할지 아니면 상담사가 결정하도록 할지 선택합니다. 따라서 여기에도 세 가지 옵션이 있습니다.

  • 항상 진행: 에이전트가 검토를 요청하지 않습니다.
  • 상담사가 결정: 상담사가 검토를 요청할 시점을 결정합니다.
  • 검토 요청: 상담사가 항상 검토를 요청합니다.

JavaScript 실행 정책

사용 설정되면 에이전트가 브라우저 도구를 사용하여 URL을 열고, 웹페이지를 읽고, 브라우저 콘텐츠와 상호작용할 수 있습니다. 이 정책은 브라우저에서 JavaScript가 실행되는 방식을 제어합니다.

  • 항상 진행: 에이전트가 브라우저에서 JavaScript를 실행할 권한을 요청하기 위해 중지되지 않습니다. 이렇게 하면 에이전트가 브라우저에서 복잡한 작업과 유효성 검사를 실행할 수 있는 최대 자율성이 제공되지만 보안 악용에 가장 많이 노출되기도 합니다.
  • 검토 요청: 상담사는 항상 브라우저에서 JavaScript 코드를 실행할 권한을 요청하기 위해 중지됩니다.
  • 사용 중지됨: 에이전트가 브라우저에서 JavaScript 코드를 실행하지 않습니다.

이제 다양한 정책을 이해했으므로 왼쪽의 4가지 옵션은 터미널 실행, 검토, JavaScript 실행 정책에 대한 특정 설정일 뿐이며, 이 중 3가지에 대해서는 완전히 맞춤설정할 수 있는 네 번째 옵션도 제공됩니다. 이 4가지 옵션은 터미널에서 명령어를 실행하고 작업을 진행하기 전에 아티팩트를 검토할 수 있도록 에이전트에게 부여할 자율성을 선택할 수 있도록 제공됩니다.

다음 4가지 옵션이 있습니다.

  • 보안 모드: 보안 모드는 에이전트에 향상된 보안 제어를 제공하여 외부 리소스 및 민감한 작업에 대한 액세스를 제한할 수 있습니다. 보안 모드가 사용 설정되면 환경을 보호하기 위해 여러 보안 조치가 적용됩니다.
  • 검토 기반 개발 (권장): 에이전트가 검토를 자주 요청합니다.
  • 에이전트 기반 개발: 에이전트가 검토를 요청하지 않습니다.
  • 맞춤 구성

검토 기반 개발 옵션은 상담사가 결정을 내리고 사용자에게 돌아와 승인을 받을 수 있으므로 균형이 잘 잡혀 있으며 권장되는 옵션입니다.

다음은 편집기 구성 설정 페이지로, 여기에서 다음 항목에 대한 환경설정을 선택할 수 있습니다.

  • 단축키: 단축키를 구성합니다.
  • 확장 프로그램: 인기 언어 및 기타 추천 확장 프로그램을 설치합니다.
  • 명령줄: 명령줄 도구를 설치하여 agy로 Antigravity를 엽니다.

이제 Google에 로그인할 준비가 되었습니다. 앞서 언급한 바와 같이 개인 Gmail 계정이 있는 경우 미리보기 모드에서 Antigravity를 무료로 사용할 수 있습니다. 지금 계정으로 로그인하세요. 그러면 브라우저가 열리고 로그인할 수 있습니다. 인증에 성공하면 아래와 유사한 메시지가 표시되고 Antigravity 애플리케이션으로 다시 이동합니다. 흐름을 따르세요.

마지막으로 이용약관입니다. 선택 여부를 결정한 후 Next를 클릭합니다.

그러면 Antigravity가 여러분과 공동작업하기 위해 기다리고 있는 순간으로 이어집니다.

3. 상담사 관리자

시작할 준비가 되었습니다.

Antigravity는 오픈소스 Visual Studio Code (VS Code) 기반을 포크하지만 텍스트 편집보다 에이전트 관리를 우선시하도록 사용자 환경을 대폭 변경합니다. 인터페이스는 EditorAgent Manager라는 두 개의 기본 창으로 나뉩니다. 이 관심사 분리는 개인 기여와 엔지니어링 관리 간의 차이를 반영합니다.

에이전트 관리자: 미션 컨트롤

Antigravity를 실행하면 일반적으로 파일 트리가 아닌 아래와 같이 에이전트 관리자가 표시됩니다.

d5ae91fc746e1bba.png

이 인터페이스는 Mission Control 대시보드 역할을 합니다. 고급 오케스트레이션을 위해 설계되었으며, 개발자가 여러 작업공간 또는 작업에서 비동기적으로 작동하는 여러 에이전트를 생성, 모니터링, 상호작용할 수 있습니다.

이 뷰에서 개발자는 설계자 역할을 합니다. 이들은 대략적인 목표를 정의합니다. 예를 들면 다음과 같습니다.

  • 인증 모듈 리팩터링
  • 종속 항목 트리 업데이트
  • 결제 API의 테스트 모음 생성

위 다이어그램에 표시된 것처럼 이러한 각 요청은 전용 에이전트 인스턴스를 생성합니다. UI는 이러한 병렬 작업 스트림을 시각화하여 각 에이전트의 상태, 생성된 아티팩트 (계획, 결과, 차이점), 인간 승인을 기다리는 요청을 표시합니다.

이 아키텍처는 선형적이고 동기적인 챗봇 환경이 더 많았던 이전 IDE의 주요 제한사항을 해결합니다. 기존 채팅 인터페이스에서는 개발자가 AI가 코드 생성을 완료할 때까지 기다린 후 다음 질문을 해야 합니다. Antigravity의 관리자 뷰에서 개발자는 5개의 서로 다른 버그를 동시에 해결하기 위해 5개의 서로 다른 에이전트를 디스패치하여 처리량을 효과적으로 늘릴 수 있습니다.

위의 Next를 클릭하면 작업공간을 열 수 있습니다.

ec72712ea24bf6d5.png

VS Code에서 알고 있던 작업공간을 생각하면 됩니다. 버튼을 클릭하고 시작할 폴더를 선택하여 로컬 폴더를 열 수 있습니다. 이 경우 홈 폴더에 my-agy-projects라는 폴더가 있어 이를 선택했습니다. 완전히 다른 폴더를 사용할 수 있습니다. 원하는 경우 이 단계를 완전히 건너뛸 수 있으며 나중에 언제든지 작업공간을 열 수 있습니다.

이 단계를 완료하면 아래와 같은 에이전트 관리자 창이 표시됩니다.

156224e223eeda36.png

선택한 작업공간 폴더 (my-agy-projects)에서 새 대화를 시작하도록 애플리케이션이 즉시 조정됩니다. 다른 AI 애플리케이션 (Cursor, Gemini CLI)을 사용한 기존 지식을 활용하여 프롬프트를 입력하는 동안 @ 및 기타 방법을 사용하여 추가 컨텍스트를 포함할 수 있습니다.

PlanningModel Selection 드롭다운을 모두 확인하세요. 모델 선택 드롭다운을 사용하면 에이전트가 사용할 수 있는 모델 중 하나를 선택할 수 있습니다. 목록은 아래와 같습니다.

fb0744dc43911365.png

마찬가지로 에이전트가 기본 Planning 모드에 있음을 알 수 있습니다. Fast 모드를 사용할 수도 있습니다.

f403e40ad480efc9.png

문서에서 이와 관련해 설명하는 내용을 살펴보겠습니다.

  • Planning: 에이전트는 작업을 실행하기 전에 계획을 세울 수 있습니다. 심층 조사, 복잡한 작업 또는 공동 작업에 사용 이 모드에서 에이전트는 작업 그룹으로 작업을 정리하고, 아티팩트를 생성하고, 최적의 품질을 위해 작업을 철저히 조사하고, 생각하고, 계획하는 다른 단계를 거칩니다. 여기에 훨씬 더 많은 출력이 표시됩니다.
  • Fast: 에이전트가 작업을 직접 실행합니다. 변수 이름 바꾸기, 몇 가지 bash 명령어 시작, 기타 작은 로컬 작업과 같이 더 빠르게 완료할 수 있는 간단한 작업에 사용합니다. 속도가 중요한 요소이고 작업이 간단하여 품질이 저하될 우려가 적은 경우에 유용합니다.

에이전트의 사고 예산 및 유사한 용어에 익숙하다면 에이전트의 사고를 제어하여 사고 예산에 직접적인 영향을 미칠 수 있는 기능이라고 생각하면 됩니다. 지금은 기본값을 사용하지만, 출시 시점에는 Gemini 3 Pro 모델의 사용 가능 여부가 모든 사용자에게 제한된 할당량에 따라 결정되므로 Gemini 3 사용에 대한 무료 할당량을 소진한 경우 이를 나타내는 적절한 메시지가 표시될 수 있습니다.

이제 에이전트 관리자 (창)에 대해 잠시 알아보고 기본 빌딩 블록, Antigravity 탐색 방법 등을 명확히 이해해 보겠습니다. 아래에 에이전트 관리자 창이 표시됩니다.

22f6dcf7b3edc583.png

위의 다이어그램을 참고하세요.

  1. Inbox: 모든 대화를 한곳에서 추적하는 방법이라고 생각하면 됩니다. 에이전트가 작업을 수행하도록 보내면 받은편지함에 표시되며 받은편지함을 클릭하여 현재 대화 목록을 확인할 수 있습니다. 대화를 탭하면 교환된 모든 메시지, 할 일 상태, 상담사가 생성한 항목, 할 일에 대한 승인을 기다리고 있는지 여부까지 확인할 수 있습니다. 이전 작업으로 나중에 돌아갈 수 있는 좋은 방법입니다. 매우 유용한 기능입니다.
  2. Start Conversation: 새 대화를 시작하려면 이 아이콘을 클릭합니다. 그러면 Ask anything라고 표시된 입력으로 바로 이동합니다.
  3. Workspaces: 작업공간에 대해 언급했으며 원하는 작업공간에서 작업할 수 있습니다. 언제든지 작업공간을 추가할 수 있으며 대화를 시작할 때 작업공간을 선택할 수 있습니다.
  4. Playground: 상담사와 간단하게 대화를 시작한 후 파일 등을 더 엄격하게 관리할 수 있는 작업공간으로 전환할 수 있는 좋은 방법입니다. 스크래치 영역이라고 생각하면 됩니다.
  5. Editor View: 지금까지는 에이전트 관리자 뷰에 있습니다. 원하는 경우 언제든지 편집기 보기로 전환할 수 있습니다. 그러면 작업공간 폴더와 생성된 파일이 표시됩니다. 여기에서 파일을 직접 수정하거나 편집기에서 인라인 안내, 명령어를 제공하여 에이전트가 수정된 추천/안내에 따라 작업을 수행하거나 변경할 수 있습니다. 편집기 보기는 나중에 자세히 다루겠습니다.
  6. Browser: 마지막으로 Antigravity를 매우 강력하게 만드는 명확한 차별화 요소 중 하나인 Chrome 브라우저와의 긴밀한 통합에 대해 알아보겠습니다. 다음 섹션에서 브라우저를 설정해 보겠습니다.

4. Antigravity Browser

문서에 따라 에이전트가 브라우저와 상호작용하려면 브라우저 하위 에이전트를 호출하여 당면한 작업을 처리합니다. 브라우저 하위 에이전트는 Antigravity에서 관리하는 브라우저 내에서 열린 페이지에서 작동하도록 특화된 모델을 실행합니다. 이 모델은 기본 에이전트에 대해 선택한 모델과 다릅니다.

이 하위 에이전트는 클릭, 스크롤, 입력, 콘솔 로그 읽기 등 브라우저를 제어하는 데 필요한 다양한 도구에 액세스할 수 있습니다. 또한 DOM 캡처, 스크린샷 또는 마크다운 파싱을 통해 열려 있는 페이지를 읽고 동영상을 촬영할 수 있습니다.

즉, Antigravity 브라우저 확장 프로그램을 실행하고 설치해야 합니다. Playground에서 실제로 대화를 시작하고 단계를 진행하여 이를 수행해 보겠습니다.

Playground를 선택하고 아래와 같이 에이전트에게 다음 작업 go to antigravity.google을 부여합니다.

51a373d3da23db56.png

작업을 제출합니다. 태스크를 분석하는 에이전트가 표시되며 사고 과정을 검사할 수 있습니다. 어느 시점에는 올바르게 진행되어 아래와 같이 브라우저 에이전트를 설정해야 한다고 언급합니다. Setup를 클릭합니다.

e7119f40e093afd2.png

그러면 브라우저가 표시되고 아래와 같이 확장 프로그램을 설치하라는 메시지가 표시됩니다.

82fb87d7d75b4a6c.png

계속 진행하면 설치할 수 있는 Chrome 확장 프로그램으로 연결됩니다.

f3468f0e5f3bb075.png

확장 프로그램을 성공적으로 설치하면 Antigravity Agent가 작업을 시작하고 작업을 수행할 권한을 허용해 달라는 메시지를 표시합니다. 열린 브라우저 창에 다음과 같은 활동이 표시됩니다.

7f0367e00ac36d5a.png

에이전트 관리자 뷰로 다시 전환하면 다음이 표시됩니다.

b9d89e1ebefcfd76.png

상담사에게 antigravity.google 웹사이트를 방문하라고 요청했으므로 예상한 결과입니다. 권한을 부여하면 아래와 같이 웹사이트로 안전하게 이동한 것을 확인할 수 있습니다.

77fcc38b5fb4ca7c.png

5. 아티팩트

Antigravity는 작업을 전달하고 인간 사용자의 의견을 받기 위해 작업을 계획하고 완료할 때 아티팩트를 만듭니다. 리치 마크다운 파일, 아키텍처 다이어그램, 이미지, 브라우저 녹화, 코드 차이 등이 있습니다.

아티팩트는 '신뢰 격차'를 해결합니다. 이전에는 상담사가 '버그를 수정했습니다'라고 말하면 개발자가 코드를 읽어 확인해야 했습니다. Antigravity에서 에이전트는 이를 증명하기 위해 아티팩트를 생성합니다.

Antigravity에서 생성되는 주요 아티팩트는 다음과 같습니다.

  • Task Lists: 코드를 작성하기 전에 에이전트가 구조화된 계획을 생성합니다. 일반적으로 이 계획을 수정할 필요는 없지만, 검토하고 필요한 경우 댓글을 추가하여 변경할 수 있습니다.
  • Implementation Plan: 코드베이스 내에서 변경사항을 설계하여 작업을 완료하는 데 사용됩니다. 이러한 계획에는 필요한 수정사항에 관한 기술 세부정보가 포함되어 있으며, 아티팩트 검토 정책이 '항상 진행'으로 설정되어 있지 않은 경우 사용자가 검토해야 합니다.
  • Walkthrough: 에이전트가 작업 구현을 완료한 후 변경사항과 테스트 방법을 요약한 것으로 생성됩니다.
  • Code diffs: 엄밀히 말해 아티팩트는 아니지만 Antigravity는 검토하고 댓글을 달 수 있는 코드 차이도 생성합니다.
  • Screenshots: 에이전트가 변경 전후의 UI 상태를 캡처합니다.
  • Browser Recordings: 동적 상호작용 (예: '로그인 버튼을 클릭하고 스피너를 기다린 후 대시보드가 로드되는지 확인') 에이전트는 세션 동영상을 녹화합니다. 개발자는 이 동영상을 시청하여 앱을 직접 실행하지 않고도 기능 요구사항이 충족되는지 확인할 수 있습니다.

아티팩트가 생성되고 에이전트 관리자 및 편집기 뷰에 모두 표시됩니다.

편집기 뷰의 오른쪽 하단에서 Artifacts을 클릭할 수 있습니다.

5deff47fe0a93aa1.png

에이전트 관리자 뷰의 오른쪽 상단에 있는 Review changes 옆에 아티팩트를 전환하는 버튼이 표시됩니다. 아티팩트가 사용 설정된 경우 생성된 아티팩트 목록이 표시됩니다.

5320f447471c43eb.png

아래와 같이 아티팩트 뷰가 표시됩니다. 여기서는 상담사에게 antigravity.google 페이지를 방문하도록 안내했으므로 스크린샷이 캡처되고 동영상이 생성되었습니다.

19d9738bb3c7c0c9.png

편집기 뷰의 Review Changes에서 코드 차이점을 확인할 수 있습니다.

e1d8fd6e7df4daf3.png

개발자는 'Google 문서 스타일 댓글'을 사용하여 이러한 아티팩트 및 코드 차이와 상호작용할 수 있습니다. 특정 작업 또는 할 일을 선택하고 원하는 방식으로 명령어를 제공한 다음 에이전트에 제출할 수 있습니다. 그러면 에이전트가 이 의견을 수집하고 그에 따라 반복합니다. 작성자에게 피드백을 제공하면 작성자가 이를 반복하는 대화형 Google Docs를 사용하는 것을 생각해 보세요.

6. 받은편지함 다시 확인하기

에이전트와 몇 차례 대화를 시작했다면 이제 Agent Manager 창에서 Inbox을 살펴보세요. 이렇게 하면 모든 대화가 표시됩니다. 대화를 클릭하면 해당 대화의 기록, 생성된 아티팩트 등을 확인할 수 있습니다. 이 경우 첫 번째 대화를 실행한 후 받은편지함에 아래와 같이 대화가 표시됩니다.

1a2a1bbdd4464ecf.png

해당 대화를 클릭하면 다음과 같은 세부정보가 표시됩니다.

b7e493765cfb1b1a.png

여기에서 대화를 계속할 수도 있습니다.

7. 편집자

편집기는 VS Code의 친숙함을 유지하여 숙련된 개발자의 근육 기억을 존중합니다. 여기에는 표준 파일 탐색기, 구문 강조 표시, 확장 프로그램 생태계가 포함됩니다.

Agent Manager의 오른쪽 상단에 있는 Open Editor 버튼을 클릭하여 편집기로 이동할 수 있습니다.

설정 및 확장 프로그램

일반적인 설정에서는 편집기, 터미널, 에이전트가 표시됩니다.

7996408528de93e1.png

그렇지 않은 경우 다음과 같이 터미널 및 에이전트 패널을 전환할 수 있습니다.

  • 터미널 패널을 전환하려면 Ctrl + ` 단축키를 사용합니다.
  • 에이전트 패널을 전환하려면 Cmd + L 단축키를 사용합니다.

또한 Antigravity는 설정 중에 일부 확장 프로그램을 설치할 수 있지만 사용하는 프로그래밍 언어에 따라 더 많은 확장 프로그램을 설치해야 할 수 있습니다. 예를 들어 Python 개발의 경우 다음과 같은 확장 프로그램을 설치할 수 있습니다.

bd33a79837b5a12a.png

편집자

자동 완성

편집기에 코드를 입력하면 탭으로 간단히 입력할 수 있는 스마트 자동 완성 기능이 작동합니다.

e90825ed7a009350.png

탭하여 가져오기

누락된 종속 항목을 추가하기 위해 탭하여 가져오기 추천이 표시됩니다.

bcab60794caa0aec.png

탭하여 점프

탭으로 이동 추천을 통해 커서를 코드의 다음 논리적 위치로 이동할 수 있습니다.

8610ae5217be7fe5.png

명령어

자연어를 사용하여 인라인 자동 완성을 위해 편집기 또는 터미널에서 Cmd + I로 명령어를 트리거할 수 있습니다.

편집기에서 피보나치 수를 계산하는 메서드를 요청한 다음 수락하거나 거부할 수 있습니다.

13a615e515cea100.png

터미널에서 터미널 명령어 추천을 받을 수 있습니다.

5a75e560f998cedc.png

상담사 측면 패널

편집기에서 여러 가지 방법으로 에이전트 측면 패널을 전환할 수 있습니다.

수동 열기

Cmd + L 단축키를 사용하여 오른쪽의 에이전트 패널을 수동으로 전환할 수 있습니다.

질문을 시작하고, @를 사용하여 파일, 디렉터리, MCP 서버와 같은 컨텍스트를 추가하거나, /를 사용하여 워크플로 (저장된 프롬프트)를 참조할 수 있습니다.

95c5a6d31d771748.png

두 가지 대화 모드(Fast 또는 Planning) 중에서 선택할 수도 있습니다.

d3d1449f12510e3e.png

Fast은 빠른 작업에 권장되고 Planning은 에이전트가 승인할 수 있는 계획을 만드는 더 복잡한 작업에 권장됩니다.

대화에 사용할 다른 모델을 선택할 수도 있습니다.

af709bcc03c1e21e.png

설명 및 수정

문제를 마우스로 가져가 Explain and fix를 선택하여 에이전트를 트리거할 수도 있습니다.

e45cbe02ed76b9c1.png

상담사에게 문제 보내기

Problems 섹션으로 이동하여 Send all to Agent를 선택하면 상담사가 문제를 해결하려고 시도할 수도 있습니다.

e4992d14708005d0.png

터미널 출력을 에이전트에게 전송

터미널 출력의 일부를 선택하여 Cmd + L로 에이전트에게 보낼 수도 있습니다.

c40293bab474c9b1.png

편집기와 에이전트 관리자 간 전환

언제든지 편집기 모드에서는 오른쪽 상단의 Open Agent Manager 버튼을 통해, 에이전트 관리자 모드에서는 오른쪽 상단의 Open Editor 버튼을 클릭하여 편집기 모드와 전체 에이전트 관리자 모드 간에 전환할 수 있습니다.

또는 Cmd + E 단축키를 사용하여 두 모드 간에 전환할 수도 있습니다.

8. 의견 보내기

Antigravity의 핵심은 환경의 모든 단계에서 손쉽게 의견을 수집할 수 있다는 점입니다. 에이전트가 작업을 처리하는 동안 다음과 같은 다양한 아티팩트를 만듭니다.

  • 구현 계획 및 할 일 목록 (코딩 전)
  • 코드 차이점 (코드를 생성하므로)
  • 코딩 후 결과를 확인하는 연습

이러한 아티팩트는 Antigravity가 계획과 진행 상황을 전달하는 방법입니다. 더 중요한 점은 Google Docs 스타일 댓글로 상담사에게 피드백을 제공할 수 있다는 것입니다. 이는 원하는 방향으로 에이전트를 효과적으로 유도하는 데 매우 유용합니다.

간단한 할 일 목록 애플리케이션을 빌드하면서 그 과정에서 Antigravity에 의견을 제공하는 방법을 알아보겠습니다.

계획 모드

먼저 Antigravity가 Fast 모드가 아닌 Planning 모드인지 확인해야 합니다. 상담사 측 패널 채팅에서 이를 선택할 수 있습니다. 이렇게 하면 Antigravity가 코드에 바로 뛰어들기 전에 구현 계획과 작업 목록을 만듭니다. 그런 다음 Create a todo list web app using Python와 같은 프롬프트를 사용해 보세요. 이렇게 하면 에이전트가 계획을 시작하고 구현 계획을 생성합니다.

구현 계획

구현 계획은 Antigravity가 수행하려는 작업, 사용할 기술 스택, 제안된 변경사항에 대한 개략적인 설명입니다.

Implementation Plan - Python Todo App
Goal
Create a simple, functional, and aesthetically pleasing Todo List web application using Python (Flask).

Tech Stack
Backend: Python with Flask
Frontend: HTML5, CSS3 (Vanilla), Jinja2 templates
...

또한 의견을 제공할 수 있는 첫 번째 위치이기도 합니다. 이 경우 에이전트는 Flask를 Python 웹 프레임워크로 사용하려고 합니다. FastAPI를 대신 사용하도록 구현 계획에 주석을 추가할 수 있습니다. 댓글을 추가한 후 댓글을 제출하거나 Antigravity에 업데이트된 구현 계획을 Proceed하도록 요청합니다.

작업 목록

구현 계획이 업데이트되면 Antigravity에서 작업 목록을 만듭니다. 이는 Antigravity에서 앱을 만들고 확인하기 위해 따르는 구체적인 단계 목록입니다.

Task Plan
 Create requirements.txt
 Create directory structure (static/css, templates)
 Create static/css/style.css
 Create templates/index.html
 Create main.py with FastAPI setup and Database logic
 Verify application

두 번째로 의견을 제공할 수 있는 곳입니다.

예를 들어 사용 사례에서 다음 댓글을 추가하여 더 자세한 인증 안내를 추가할 수 있습니다. Verify application by adding, editing, and deleting a todo item and taking a screenshot.

코드 변경

이때 Antigravity는 새 파일에 코드를 생성합니다. 세부정보를 확인하지 않고도 상담사 채팅 측면 패널에서 이러한 변경사항을 Accept all하거나 Reject all할 수 있습니다.

Review changes 아이콘을 클릭하여 변경사항의 세부정보를 확인하고 코드에 대한 자세한 의견을 추가할 수도 있습니다. 예를 들어 main.py에 다음 주석을 추가할 수 있습니다. Add basic comments to all methods

이는 Antigravity로 코드를 반복하는 좋은 방법입니다.

둘러보기

Antigravity는 코딩을 완료하면 서버를 시작하고 브라우저를 열어 앱을 확인합니다. 작업 추가, 작업 업데이트 등과 같은 수동 테스트를 실행합니다. 이 모든 것은 Antigravity 브라우저 확장 프로그램 덕분입니다. 마지막으로 앱을 확인하기 위해 실행한 작업을 요약하는 둘러보기 파일을 만듭니다. 여기에는 스크린샷이나 브라우저 녹화가 포함된 확인 흐름이 포함됩니다.

둘러보기에서 스크린샷이나 브라우저 녹화에 댓글을 달 수도 있습니다. 예를 들어 Change the blue theme to orange theme라는 댓글을 추가하고 제출할 수 있습니다. 댓글이 제출되면 Antigravity에서 변경사항을 적용하고 결과를 확인하며 둘러보기 문서를 업데이트합니다.

변경사항 실행취소

마지막으로 각 단계를 거친 후 변경사항이 마음에 들지 않으면 채팅에서 변경사항을 실행취소할 수 있습니다. 채팅에서 ↩️ Undo changes up to this point를 선택하기만 하면 됩니다.

9. 규칙 및 워크플로

Antigravity에는 규칙워크플로라는 두 가지 맞춤설정 옵션이 있습니다.

오른쪽 상단에 있는 ...를 클릭하고 Customizations을 선택하면 RulesWorkflows이 표시됩니다.

ff8babd8d8bcfa83.png

규칙은 에이전트의 동작을 안내하는 데 도움이 됩니다. 이는 에이전트가 코드를 생성하고 테스트할 때 따르도록 제공할 수 있는 가이드라인입니다. 예를 들어 에이전트가 특정 코드 스타일을 따르거나 항상 메서드를 문서화하도록 할 수 있습니다. 이를 규칙으로 추가하면 에이전트가 이를 고려합니다.

워크플로는 상담사와 상호작용할 때 /로 필요에 따라 트리거할 수 있는 저장된 프롬프트입니다. 또한 에이전트의 동작을 안내하지만 사용자가 필요에 따라 트리거합니다.

규칙은 시스템 명령어와 유사한 반면 워크플로는 필요할 때 선택할 수 있는 저장된 프롬프트와 유사하다고 생각하면 됩니다.

규칙워크플로는 전역 또는 작업공간별로 적용할 수 있으며 다음 위치에 저장할 수 있습니다.

  • 전역 규칙: ~/.gemini/GEMINI.md
  • 전역 워크플로: ~/.gemini/antigravity/global_workflows/global-workflow.md
  • 작업공간 규칙: your-workspace/.agent/rules/
  • Workspace 워크플로: your-workspace/.agent/workflows/

작업공간에 규칙과 워크플로를 추가해 보겠습니다.

규칙 추가

먼저 코드 스타일 규칙을 추가해 보겠습니다. Rules으로 이동하여 +Workspace 버튼을 선택합니다. 다음 코드 스타일 규칙을 사용하여 code-style-guide와 같은 이름을 지정합니다.

* Make sure all the code is styled with PEP 8 style guide
* Make sure all the code is properly commented

두 번째로, 코드가 code-generation-guide 규칙의 예와 함께 모듈식으로 생성되도록 다른 규칙을 추가합니다.

* The main method in main.py is the entry point to showcase functionality.
* Do not generate code in the main method. Instead generate distinct functionality in a new file (eg. feature_x.py)
* Then, generate example code to show the new functionality in a new method in main.py (eg. example_feature_x) and simply call that method from the main method.

두 규칙이 저장되고 준비됩니다.

bfd179dfef6b2355.png

워크플로 추가

단위 테스트를 생성하는 워크플로도 정의해 보겠습니다. 이렇게 하면 코드가 만족스러울 때 단위 테스트를 트리거할 수 있습니다 (에이전트가 항상 단위 테스트를 생성하는 대신).

Workflows으로 이동하여 +Workspace 버튼을 선택합니다. 다음과 같이 generate-unit-tests와 같은 이름을 지정합니다.

* Generate unit tests for each file and each method
* Make sure the unit tests are named similar to files but with test_ prefix

이제 워크플로도 사용할 수 있습니다.

d22059258592f0e1.png

사용해 보기

이제 규칙과 워크플로가 실제로 어떻게 작동하는지 살펴보겠습니다. 작업공간에 스켈레톤 main.py 파일을 만듭니다.

def main():
    pass

if __name__ == "__main__":
    main()

이제 에이전트 채팅 창으로 이동하여 에이전트에게 다음과 같이 질문합니다. Implement binary search and bubble sort.

1~2분 후 작업공간에 main.py, bubble_sort.py, binary_search.py의 세 파일이 표시됩니다. 또한 모든 규칙이 구현되어 있습니다. 기본 파일은 어수선하지 않고 예시 코드가 있으며 각 기능은 자체 파일에 구현되어 있고 모든 코드는 문서화되어 있으며 스타일이 좋습니다.

from binary_search import binary_search, binary_search_recursive
from bubble_sort import bubble_sort, bubble_sort_descending


def example_binary_search():
    """
    Demonstrate binary search algorithm with various test cases.
    """
    ...

def example_bubble_sort():
    """
    Demonstrate bubble sort algorithm with various test cases.
    """
    ...

def main():
    """
    Main entry point to showcase functionality.
    """
    example_binary_search()
    example_bubble_sort()
    print("\n" + "=" * 60)


if __name__ == "__main__":
    main()

코드가 마음에 들었으므로 단위 테스트 생성 워크플로를 트리거할 수 있는지 확인해 보겠습니다.

채팅으로 이동하여 /generate를 입력하면 Antigravity가 이미 워크플로를 알고 있습니다.

8a3efd9e3be7eb6f.png

generate-unit-tests을 선택하고 Enter 키를 누릅니다. 몇 초 후에 작업공간에 test_binary_search.py, test_bubble_sort.py 파일이 표시되며, 이미 여러 테스트가 구현되어 있습니다.

11febd7940ef8199.png

좋은 소식입니다.

10. 에이전트 보안

AI 에이전트에게 터미널과 브라우저에 대한 액세스 권한을 부여하는 것은 양날의 검과 같습니다. 이를 통해 자율 디버깅 및 배포가 가능하지만 프롬프트 삽입 및 데이터 유출의 벡터도 열립니다.

Antigravity는 터미널 명령 자동 실행 정책, 허용 목록, 거부 목록을 중심으로 하는 세분화된 권한 시스템을 통해 이 문제를 해결합니다.

Antigravity를 처음 구성하거나 설정 메뉴를 통해 구성할 때 Terminal Command Auto Execution 정책을 선택해야 합니다. 이 설정은 셸 명령어와 관련된 에이전트의 자율성을 결정합니다.

Antigravity — Settings로 이동한 다음 Advanced Settings로 이동하여 현재 설정을 확인할 수 있습니다. 에이전트 설정의 Terminal 섹션이 표시됩니다. 이 설정을 다른 설정으로 변경하려면 다음 표를 참고하세요.

정책 모드

설명

사용 안함

에이전트는 명시적으로 허용되지 않는 한 터미널 명령어를 자동으로 실행하지 않습니다.

자동

에이전트는 내부 안전 모델에 따라 실행 여부를 결정합니다. 위험한 명령어에 대한 권한을 요청합니다.

터보

에이전트는 명시적으로 거부되지 않는 한 항상 명령어를 자동 실행합니다.

허용 목록 구성

허용 목록은 주로 사용 안함 정책과 함께 사용됩니다. 명시적으로 허용되지 않는 한 모든 것이 금지된다는 의미의 긍정적 보안 모델을 나타냅니다. 이 구성이 가장 안전합니다.

단계별 구성

  1. 터미널 명령어 자동 실행 설정을 사용 안함으로 설정합니다.
  2. 허용 목록 터미널 명령어에 다음 명령어를 추가합니다. 옆에 있는 추가 버튼을 클릭합니다. ls -al 원하는 경우 다른 터미널 명령어를 추가할 수도 있습니다.

허용 목록 테스트

  • 상담사에게 List the files in this directory을 요청합니다.
  • 에이전트는 ls를 자동으로 실행합니다.
  • 상담사에게 다음과 같이 요청합니다. Delete the <some file>
  • 상담사는 rm <filepath>을 시도하지만 rm이 허용 목록에 없으므로 Antigravity가 이를 차단하고 사용자 검토를 강제합니다. 명령어를 실행하기 전에 Antigravity에서 권한을 요청해야 합니다.

거부 목록 구성

거부 목록은 터보 (때로는 자동) 정책의 안전 장치입니다. 명시적으로 금지되지 않는 한 모든 것이 허용된다는 부정적인 보안 모델을 나타냅니다. 이는 개발자가 발생 가능한 모든 위험을 예측해야 하므로 위험한 제안이지만 최대 속도를 제공합니다.

단계별 구성

  1. 터미널 명령어 자동 실행 설정을 터보로 설정합니다.
  2. 옆에 있는 추가 버튼을 클릭하여 거부 목록 터미널 명령어에 다음 명령어를 추가합니다.
  3. rm
  4. rmdir
  5. sudo
  6. curl
  7. wget

거부 목록 테스트

  • 상담사에게 Check the version of python을 요청합니다.
  • 에이전트는 python --version를 자동으로 실행합니다.
  • 상담사에게 요청: Download www.google.com home page
  • 상담사가 curl을 시도합니다. Antigravity가 차단 목록에서 curl를 감지하고 실행을 차단하여 수동 승인을 요청합니다.

브라우저 보안

Antigravity의 웹 탐색 기능은 초능력이지만 취약점이기도 합니다. 보안이 침해된 문서 사이트를 방문하는 에이전트는 프롬프트 인젝션 공격을 받을 수 있습니다.

이를 방지하려면 브라우저 에이전트에 브라우저 URL 허용 목록을 구현하면 됩니다.

Antigravity — Settings로 이동한 다음 Advanced Settings로 이동하여 현재 설정을 확인할 수 있습니다. 아래와 같이 브라우저 설정의 브라우저 URL 허용 목록 섹션이 표시됩니다.

5ed231150122ecc5.png

허용 목록 파일 열기를 클릭하면 HOME/.gemini/antigravity/browserAllowlist.txt. 폴더에 파일이 열립니다. 여기에서 신뢰할 수 있는 도메인만 입력할 수 있습니다.

11. 사용 사례

이제 제품을 기본적으로 이해했으니 몇 가지 사용 사례를 통해 실제 작동 방식을 살펴보겠습니다. Antigravity는 에이전트 우선 플랫폼입니다. 즉, 대부분의 경우 Google은 에이전트에게 지시를 내리고 에이전트는 자체적으로 작업을 수행하고, 필요한 경우 권한을 요청하고, 아티팩트를 생성한 후 작업이 완료되면 Google에 알립니다. 따라서 다음 사용 사례에서 에이전트 대화의 모든 출력을 생성할 수는 없습니다. 안내와 예상 결과의 필수 스크린샷을 공유해 드리지만 결과는 약간 다를 수 있습니다.

여기에서는 외부 사이트에서 몇 가지 작업을 자동화하는 것부터 프로젝트의 단위 테스트 사례를 생성하고 확인하는 것, 전체 웹사이트 개발에 이르기까지 다양한 사용 사례를 다룹니다. 안내를 시작하겠습니다.

뉴스 하이라이트

간단한 사용 사례이지만 웹브라우저를 사용하여 웹사이트를 방문하고, 정보를 추출하고, 일부 작업을 실행한 다음 사용자에게 데이터를 반환하는 기반이 될 수 있습니다.

이 경우 Google 뉴스 사이트를 방문하여 정보를 추출합니다. 하지만 원하는 사이트를 쉽게 실험해 보고 결과를 확인할 수 있습니다.

아래와 같이 Agent Manager에 있고 Playground를 선택했는지 확인합니다.

cffa12c98a68cb6c.png

그런 다음 다음 안내를 제공합니다.

8513d489eea0b014.png

이렇게 하면 에이전트 프로세스가 시작되고 브라우저를 실행해야 하는지 등이 결정됩니다. 사고 과정에 주의를 기울여 에이전트가 어떻게 작업을 수행하는지 확인하세요. 모든 것이 잘 진행되면 아래와 같이 Antigravity 브라우저가 실행되고 사이트를 방문합니다. 사이트 주변의 파란색 테두리는 에이전트가 이제 브라우저를 제어하고 사이트를 탐색하여 정보를 가져오고 있음을 보여줍니다.

9d594588f2ffe6bc.png

작업이 완료되면 아래와 같이 아티팩트가 생성되는 것도 확인할 수 있습니다.

dc6cf4e7d8425df8.png

에이전트의 샘플 실행은 아래와 같습니다.

fb7397cd2cce0682.png

왼쪽에 생각 과정이 표시됩니다. 포인트를 스크롤하여 재생 및 기타 데이터를 볼 수도 있습니다.

시도해 볼 만한 작업

  • 이 내용을 이해한 후에는 에이전트가 방문하여 데이터를 가져오거나 요약할 수 있는 웹사이트를 선택합니다. 대시보드와 차트가 있는 웹사이트를 고려하여 몇 가지 값을 선택해 달라고 요청합니다.
  • 다음 프롬프트를 사용해 보세요. Visit https://docs.cloud.google.com/release-notes and get me a summary of the release notes, categorized by product.

Python + Flask로 동적 웹사이트 생성

이제 완전한 웹 애플리케이션을 생성해 보겠습니다. 만들 웹 애플리케이션은 하루 종일 여러 연사가 강연하는 1일 기술 행사에 관한 정보를 제공하는 사이트입니다.

다시 한번 Agent Manager에 있고 Playground를 선택했는지 확인합니다.

다음 프롬프트를 입력합니다.

I would like to generate a website that is a 1-day technical conference informational site.

The website should have the following functionality:
        1. A home page that shows the current date, location, schedule and time table.
        2. The 1-day event is a list of 8 talks in total.
        3. Each talk has 1 or 2 max. speakers. 
        4. A talk has an ID, Title, Speakers, Category (1 or 2), Description and time of the talk.
        5. Each speaker has a First Name, Last Name and LinkedIn url.
        6. Allow for users to search by category, speaker, title.
        7. Give a lunch break of 60 minutes.
        8. Use dummy data for events and speakers, come up with a schedule, the event is about Google Cloud Technologies.
        9. Tech Stack: Python and Flask framework on server side. Front-end is basic HTML, CSS and JavaScript. 
        10. Test out the site on your own for all functionality and provide a detailed README on how to setup, run and make any further changes. 
11. Launch the web application for me to review. 

위의 프롬프트를 입력하여 대화를 시작할 수 있습니다.

에이전트가 작업을 진행하면서 아티팩트 생성을 진행합니다.

  • 작업 아티팩트
  • 구현 아티팩트
  • 둘러보기 아티팩트

아래에 제공된 태스크 아티팩트는 상담사가 주어진 태스크에 따라 실행해야 한다고 해독한 초기 태스크 시퀀스입니다. 실행의 샘플 스크린샷은 아래에 나와 있습니다.

c95d82e1c040698f.png

그런 다음 구현 계획 아티팩트를 클릭합니다. 샘플 스크린샷은 아래에 나와 있습니다.

632169a236bc62cc.png

마지막으로 Walkthrough 아티팩트가 있습니다. 여기에는 아래와 같이 에이전트가 수행한 모든 작업이 포함됩니다.

e3f6152d6f54d4f9.png

서버가 시작되었고 URL이 제공되었습니다. URL을 클릭하면 애플리케이션이 표시됩니다. 샘플 스크린샷은 아래에 나와 있습니다.

abf879f2ce53d055.png

편집기로 전환하면 Python Flask 애플리케이션이 생성된 폴더가 화면에 표시됩니다. 오른쪽에 Agent mode이 태그되어 있으며 여기에서도 대화를 이어갈 수 있습니다.

b0fea8aa65c3a1c5.png

이제 이벤트에 몇 가지 강연을 더 추가하고 싶다고 가정해 보겠습니다. 편집기와 에이전트 패널에 머물면서 Add two more talks to the schedule와 같은 명령어를 입력할 수 있습니다.

이렇게 하면 에이전트가 요구사항을 분석하고, 작업과 구현 계획을 업데이트한 다음, 업데이트된 기능을 검증합니다. 샘플 대화는 다음과 같습니다.

ba8455e6f68973e9.png

원하는 경우 에이전트 관리자로 다시 전환할 수 있습니다. 이 프로세스를 통해 상담사 관리자에서 편집자로 전환하고 그에 따라 변경하는 등의 프로세스를 이해할 수 있습니다.

시도해 볼 만한 작업

  • 애플리케이션에 원하는 기능을 추가합니다. 세부정보를 에이전트에게 제공하고, 먼저 작업 목록을 수정한 다음 구현 계획 등을 수정하여 작업을 수행하는 방식을 확인합니다.
  • 에이전트에게 애플리케이션의 README 또는 추가 문서를 생성해 달라고 요청합니다.

간단한 생산성 앱 생성

이제 간단한 포모도로 타이머 웹 애플리케이션을 생성하겠습니다.

Agent Manager에 있고 Playground를 선택했는지 확인합니다. 다음 프롬프트를 입력합니다.

Create a productivity app that features a Pomodoro timer. Give a calm and aesthetic look to the application.

할 일 목록과 구현 계획을 만든 다음 이를 실행하는 방식을 확인하세요. 흐름에 계속 주의를 기울이세요. 검토를 요청하는 상황이 있을 수 있습니다. 샘플 실행은 아래와 같습니다.

5be0a668e5a67d85.png

이 경우 Antigravity 브라우저도 실행하고 자체 테스트를 실행한 후 테스트가 성공했는지 확인해야 합니다. 이 도구에서 생성한 항목 중 하나는 인증 동영상이 포함된 미디어 아티팩트입니다. 테스트한 내용을 확인하는 데 유용합니다. 또한 스타일이 적용되지 않았고 스타일을 변경할 수 있었기 때문에 스타일 변경을 제안했습니다.

최종 앱은 아래와 같으며 꽤 괜찮아 보입니다.

c9ab6bca97a51a8c.png

애플리케이션에 멋진 타이머 이미지를 추가할 수 있습니다. 아래와 같이 후속 안내를 제공하기만 하면 됩니다.

Add an image to the application that displays a timer.

이로 인해 에이전트가 태스크 아티팩트에 새 태스크를 추가했습니다.

498dd946d4e9ae55.png

그런 다음 작업을 진행하면서 이미지를 생성했습니다.

c291da9bdb37ff96.png

마지막으로 앱에 요청한 이미지가 표시됩니다.

de8f418ba8e4600d.png

시도해 볼 만한 작업

  • 애플리케이션의 모래시계 아이콘 배경이 투명하지 않습니다. 에이전트에게 투명하게 만들어 달라고 요청해 보세요.
  • 생성하려는 애플리케이션의 변형을 몇 가지 사용해 보세요. 스타일, 이미지를 사용해 보고 변경을 요청하는 등 다양한 작업을 해 보세요.

단위 테스트 생성, 모의 스텁, 테스트 검증

여기서 시도할 마지막 사용 사례는 특정 코드 파일의 단위 테스트를 생성하고 에이전트가 테스트를 실행하고 검증하는 것입니다.

이를 위해 아래와 같이 단일 Python 파일이 있는 작업공간을 사용합니다.

from typing import Dict

# --- Custom Exceptions ---
class InventoryShortageError(Exception):
    """Raised when there is not enough item stock."""
    pass

class PaymentFailedError(Exception):
    """Raised when the payment gateway rejects the transaction."""
    pass

class InvalidOrderError(Exception):
    """Raised when the order violates business rules."""
    pass

# --- External Service Interfaces (To be Mocked) ---
class InventoryService:
    def get_stock(self, product_id: str) -> int:
        """Connects to DB to check stock."""
        raise NotImplementedError("Real connection required")

    def decrement_stock(self, product_id: str, quantity: int):
        """Connects to DB to reduce stock."""
        raise NotImplementedError("Real connection required")

class PaymentGateway:
    def charge(self, amount: float, currency: str) -> bool:
        """Connects to Stripe/PayPal."""
        raise NotImplementedError("Real connection required")

# --- Main Business Logic ---
class Order:
    def __init__(self, 
                 inventory_service: InventoryService, 
                 payment_gateway: PaymentGateway,
                 customer_email: str,
                 is_vip: bool = False):
        
        self.inventory = inventory_service
        self.payment = payment_gateway
        self.customer_email = customer_email
        self.is_vip = is_vip
        self.items: Dict[str, Dict] = {} # {product_id: {'price': float, 'qty': int}}
        self.is_paid = False
        self.status = "DRAFT"

    def add_item(self, product_id: str, price: float, quantity: int = 1):
        """Adds items to the cart. Rejects invalid prices or quantities."""
        if price < 0:
            raise ValueError("Price cannot be negative")
        if quantity <= 0:
            raise ValueError("Quantity must be greater than zero")

        if product_id in self.items:
            self.items[product_id]['qty'] += quantity
        else:
            self.items[product_id] = {'price': price, 'qty': quantity}

    def remove_item(self, product_id: str):
        """Removes an item entirely from the cart."""
        if product_id in self.items:
            del self.items[product_id]

    @property
    def total_price(self) -> float:
        """Calculates raw total before discounts."""
        return sum(item['price'] * item['qty'] for item in self.items.values())

    def apply_discount(self) -> float:
        """
        Applies business logic:
        1. VIPs get flat 20% off.
        2. Regulars get 10% off if total > 100.
        3. No discount otherwise.
        """
        total = self.total_price
        
        if self.is_vip:
            return round(total * 0.8, 2)
        elif total > 100:
            return round(total * 0.9, 2)
        
        return round(total, 2)

    def checkout(self):
        """
        Orchestrates the checkout process:
        1. Validates cart is not empty.
        2. Checks stock for all items.
        3. Calculates final price.
        4. Charges payment.
        5. Updates inventory.
        """
        if not self.items:
            raise InvalidOrderError("Cannot checkout an empty cart")

        # 1. Check Inventory Logic
        for product_id, data in self.items.items():
            available_stock = self.inventory.get_stock(product_id)
            if available_stock < data['qty']:
                raise InventoryShortageError(f"Not enough stock for {product_id}")

        # 2. Calculate Final Price
        final_amount = self.apply_discount()

        # 3. Process Payment
        try:
            success = self.payment.charge(final_amount, "USD")
            if not success:
                raise PaymentFailedError("Transaction declined by gateway")
        except Exception as e:
            # Catching generic network errors from the gateway
            raise PaymentFailedError(f"Payment gateway error: {str(e)}")

        # 4. Decrement Stock (Only occurs if payment succeeded)
        for product_id, data in self.items.items():
            self.inventory.decrement_stock(product_id, data['qty'])

        self.is_paid = True
        self.status = "COMPLETED"
        
        return {"status": "success", "charged_amount": final_amount}

위의 Python 파일이 폴더에 로컬로 저장되어 있고 Antigravity에서 작업공간으로 로드되어 있는지 확인합니다.

이는 checkout 함수에 다음과 같은 핵심 기능이 있는 간단한 주문 서비스입니다.

  1. 장바구니가 비어 있지 않은지 확인합니다.
  2. 모든 상품의 재고를 확인합니다.
  3. 최종 가격을 계산합니다.
  4. 결제를 청구합니다.
  5. 인벤토리를 업데이트합니다.

에이전트에게 단위 테스트 사례를 생성하고, 모의 구현을 제공하고, 테스트를 실행하여 성공하는지 확인하는 작업을 할당할 것입니다.

특정 작업공간 폴더를 열면 이제 @ 기호를 사용하여 파일을 참조할 수도 있습니다. 예를 들어 다음과 같은 작업을 할 수 있습니다.

8368856e51a7561a.png

이 파일에 대한 설명이 표시됩니다.

b69c217d3372d802.png

프롬프트를 통해 더 나은 시각화를 생성하도록 요청할 수 있습니다.

Can you visually show this class for better understanding

da5bd701323818d4.png

다음 단계는 단위 테스트를 생성하고 에이전트에게 테스트를 요청하는 것입니다. 다음 프롬프트를 입력합니다.

generate unit tests for this module and test it out with mock implementations.

다음 작업 아티팩트를 생성하고 작업을 진행했습니다.

21425379db336dc6.png

실행된 테스트의 세부정보도 확인할 수 있습니다.

48f3320cd76b5cd8.png

생성된 파일 중 하나가 테스트 파일이었습니다. 스크린샷은 아래와 같습니다.

f962061f115c040f.png

시도해 볼 만한 작업

자체 코드를 가져와 에이전트에게 요청할 수 있는 작업을 확인하세요. 기능을 추가하는 것부터 코드의 일부를 리팩터링하는 것까지 다양합니다.

12. 축하합니다

축하합니다. 에이전트 중심 개발 플랫폼인 Antigravity를 성공적으로 설치하고 사용 방법을 이해했습니다. Google에서 시도한 다양한 사용 사례를 통해 자체 요구사항을 파악하고 Antigravity가 요구사항을 완료하기 위해 어떻게 협업할 수 있는지 알아볼 수 있습니다.

참조 문서