본문으로 건너뛰기
테마
폰트
크기
A A

Hooks (훅) — Antigravity 자동화 패턴 가이드

"매 대화마다 자동으로 검증·포맷·컨텍스트 주입"이라는 hooks의 효과는 Antigravity에서 .agent/rules/(상시 행동 규칙).agent/workflows/(다단계 절차)로 구현합니다. 같은 사용자 경험을 다른 메커니즘으로 얻는 방식입니다. 공식 문서 — Rules & Workflows

중요 — Antigravity에는 현재 별도 hooks 기능이 없습니다.

관련 내용은 Google AI Developers 공식 포럼 스레드에서 확인해 볼 수 있습니다. preTurn·postTurn·.gemini/settings.jsonagentSettings.hooks 같은 구조는 Claude Code 등 다른 에이전트의 패턴이며, Antigravity에서는 동작하지 않습니다.

대신 같은 효과를 다음으로 얻습니다.

  • "매 대화 시작 시 컨텍스트 주입" (preTurn 효과).agent/rules/의 Always On 또는 Glob 모드 규칙
  • "응답 후 포맷·테스트·정리" (postTurn 효과).agent/workflows/의 슬래시 명령(예: /format-and-test)을 사용자가 호출하거나, Rules에 "응답 끝에 X를 실행하라"는 지시 포함
  • 강제 실행이 필요한 경우 → 외부 git pre-commit 훅·에디터 저장 시 자동 포맷터 등 시스템 레벨 도구를 활용

추후 hooks 기능 추가 여부는 다음 채널에서 업데이트를 살펴보세요. 공식 로드맵이 별도로 공개되어 있지 않아 변경 시점은 미정입니다.

아래 본문은 두 가지를 함께 다룹니다. (1) Antigravity에서의 권장 구현 — Rules·Workflows 기반, (2) 참고: Claude Code 등 타 에이전트의 hooks 개념 — 동작 흐름 비교용.

참고 — Gemini CLI에서는 hooks를 사용할 수 있습니다.

같은 ~/.gemini/settings.json을 공유하지만, 이 hooks 설정은 Gemini CLI에서만 동작하고 Antigravity는 무시합니다. 터미널 작업 흐름에서 자동 검증·후처리가 필요하다면 Gemini CLI hooks를 활용하고, Antigravity 에디터 안에서는 Rules·Workflows로 같은 효과를 구현합니다.

Gemini CLI hooks는 다음 10개 라이프사이클 이벤트를 지원합니다.

  • SessionStart / SessionEnd — 세션 시작·종료 시점
  • BeforeAgent / AfterAgent — 에이전트 턴 진입·이탈
  • BeforeModel / AfterModel — 모델 호출 전·후
  • BeforeToolSelection — 도구 선택 직전
  • BeforeTool / AfterTool — 도구 실행 전·후
  • PreCompress — 컨텍스트 압축 직전
  • Notification — 사용자 알림 시점

프로젝트별 설정은 프로젝트_루트/.gemini/settings.json, 사용자 단위는 ~/.gemini/settings.json, 시스템 단위는 /etc/gemini-cli/settings.json에 정의합니다. 자세한 스키마·환경변수·보안 가이드는 Gemini CLI Hooks 공식 문서를 참고하세요.

이 페이지의 목적: Antigravity에서 hooks와 같은 자동화 효과를 얻는 실전 패턴을 정리합니다. 본문 예시의 .gemini/settings.json·preTurn·postTurn 키워드가 등장하면 "이는 Claude Code 등 타 에이전트의 표기로, Antigravity에서는 같은 위치에 Rules 또는 Workflow 파일을 둔다"고 이해하면 됩니다. 아키텍처 맥락은 Harness Engineering — 훅 & 자동화에서 다룹니다.

1. 빠른 시작 — Antigravity에서 hooks 효과 5분 만에 만들기 #

"매 대화마다 git 상태를 자동으로 컨텍스트에 알려주는" 효과를 Rules로 구현해 봅니다. 셸 명령을 직접 자동 실행시키는 hooks 방식이 아니라, "git 변경 사항이 있다면 답변 전에 먼저 확인하라"는 행동 규칙을 마크다운으로 정의하는 방식입니다.

Step 1 — Rules 디렉터리 만들기

워크스페이스 루트에 .agent/rules/ 디렉터리를 만듭니다. 이미 있다면 그대로 사용하세요.

디렉터리 구조
프로젝트_루트/
├── .agent/
│   ├── rules/         # 상시 또는 조건부로 적용되는 행동 규칙
│   └── workflows/     # 슬래시 명령으로 호출하는 다단계 절차
└── ...

Step 2 — 첫 Rule 파일 작성

.agent/rules/git-context.md
# description: 코드 변경·리뷰·커밋 관련 작업 시 적용되는 git 컨텍스트 규칙
# globs: **/*

## git 컨텍스트 규칙

코드를 수정·리뷰·커밋하는 작업을 시작하기 전에 다음 단계를 따른다.

1. `git status --short`로 현재 워킹 트리 상태를 먼저 확인한다.
2. 변경 파일이 있으면 사용자에게 변경 요약을 한 줄로 보고한다.
3. 새 변경을 만들기 전, 기존 변경과 충돌하는지 점검한다.

git 저장소가 아닌 워크스페이스에서는 위 규칙을 무시한다.

Step 3 — Antigravity에서 결과 확인

Antigravity 에디터를 재시작하거나 워크스페이스를 다시 엽니다. 새 대화에서 "이 파일 좀 고쳐줘" 같은 코드 수정 요청을 보내 보세요. 에이전트가 답변 시작 전에 git status --short를 실행하고 결과를 사용자에게 한 줄로 알려주는 동작을 확인할 수 있습니다.

방금 무슨 일이 일어났나?
  • 에이전트는 워크스페이스의 .agent/rules/*.md를 모두 읽어 자신의 행동 지침에 포함합니다.
  • 이번 규칙은 globs: **/*로 모든 파일에 적용되도록 했습니다. 좁히고 싶다면 **/*.py 등으로 변경합니다.
  • 강제 셸 실행이 아니라 규칙 기반 자율 판단이므로, 규칙 본문이 명확할수록 일관된 동작을 얻습니다.

Step 4 — "응답 후 자동 정리"가 필요하다면 Workflow로

Rules는 매 응답 시작 전에 무엇을 확인할지를 정합니다. 응답이 끝난 뒤 포맷·테스트·정리를 하나의 절차로 묶고 싶다면 Workflow를 만들어 슬래시 명령으로 호출하세요.

.agent/workflows/format-and-test.md
# 응답이 끝난 뒤 코드 품질 정리 절차

1. 변경된 Python 파일 목록을 `git diff --name-only --diff-filter=AM`로 추출
2. 각 파일에 `ruff format`을 실행
3. `pytest -x`로 테스트 1회 실행, 실패 시 즉시 보고
4. 모든 단계가 성공하면 "정리 완료" 메시지 출력

이 Workflow는 사용자가 /format-and-test를 입력해 호출합니다. Claude Code의 postTurn 훅처럼 자동 트리거되지는 않지만, 사용자가 한 번 호출하면 등록된 절차가 일관되게 실행됩니다.

강제 자동 실행이 꼭 필요하다면: Antigravity 외부의 시스템 도구를 활용합니다.
  • 커밋 시점 강제 — git pre-commit 훅으로 ruff format·pytest를 실행
  • 저장 시점 강제 — 에디터의 "Format on save" 옵션과 ruff·prettier 확장
  • CI 시점 강제 — GitHub Actions·GitLab CI에서 lint·test 단계
에이전트의 자율 판단에 맡기기 어려운 정책은 시스템 레벨에서 강제하는 것이 안정적입니다.

다음 절에서 위 패턴이 왜 hooks와 같은 효과를 내는지(개념 비교)와, 더 다양한 활용 패턴을 살펴봅니다.

2. Hooks 개념과 Antigravity의 대응 메커니즘 #

Claude Code 등 일부 에이전트에서 Hooks는 매 턴(turn)마다 자동으로 실행되는 셸 명령으로 정의됩니다. Antigravity는 이를 그대로 제공하지 않지만, 같은 효과를 얻는 메커니즘을 따로 두고 있습니다. 우선 hooks가 푸는 두 가지 문제를 정리하고, 각각을 Antigravity에서 어떻게 푸는지 매핑합니다.

에이전트 턴(turn) 실행 흐름 — 일반화
  1. 응답 전 단계 (pre) — 에이전트가 답변하기 전에 컨텍스트를 모으거나 정책을 확인
  2. 에이전트 추론 및 응답 생성 — 사용자 메시지 + 모은 컨텍스트로 답변 작성
  3. 응답 후 단계 (post) — 에이전트가 만든 결과를 검증·정리·후처리

응답 전(pre) vs 응답 후(post) 자동화의 목적

두 종류 자동화의 역할
응답 전 — 컨텍스트·정책 확보

목적: 에이전트가 답변하기 전에 필요한 정보·정책을 자동으로 갖추게 하기.

  • 현재 git 브랜치·변경 파일 자동 점검
  • 최근 테스트 결과 또는 빌드 상태 인지
  • 데이터셋의 shape·dtype·결측치 비율 인지
  • 환경변수·도구 버전 확인

핵심: 에이전트가 매번 "확인해 줘"라고 묻지 않아도 인지하고 시작.

응답 후 — 산출물 정리·검증

목적: 에이전트가 만든 결과물을 일관된 기준으로 정리·검증.

  • 코드 자동 포맷팅 (ruff format, prettier)
  • 린트·타입 체크
  • 단위 테스트 실행
  • 변경 사항 git 스테이징·커밋 메시지 초안
  • 생성된 plot·산출물 폴더 정리

핵심: 결과의 일관성·품질·정리 상태가 매번 비슷한 수준으로 유지됨.

같은 효과를 어떻게 얻는가 — Antigravity vs Claude Code

자동화 효과를 두 에이전트가 각각 어떻게 구현하는지 비교
자동화 효과 Claude Code 방식 (참고) Antigravity 방식 (실제 사용)
응답 전 컨텍스트 자동 주입 preTurn 셸 hook이 결과를 stdout으로 출력 → 컨텍스트에 자동 추가 .agent/rules/*.md에 "X를 먼저 확인하라" 규칙을 두면 에이전트가 답변 시작 전에 해당 도구를 호출
응답 후 자동 후처리 postTurn 셸 hook이 자동 트리거 .agent/workflows/*.md에 절차를 정의 → 사용자가 /이름 슬래시 명령으로 호출 (자동 트리거 없음)
강제 실행 (정책 위반 차단) hook의 종료 코드로 차단 가능 에이전트 외부에서 강제: git pre-commit 훅·에디터 저장 시 포맷·CI 단계
인터랙티브 대화 도중 도구 호출 Skills(.agent/skills/)와 MCP가 담당

왜 이런 자동화 패턴이 필요한가

매 대화마다 사용자가 명시적으로 지시하는 방식에는 다음과 같은 문제가 생깁니다.

  • 망각 위험 — "이번엔 ruff 돌리는 거 깜빡했네" 같은 일관성 결핍.
  • 프롬프트 길이 낭비 — 매번 "코드 작성 후 ruff format, mypy, pytest 실행" 같은 반복 지시가 토큰 소모.
  • 컨텍스트 누락 — 에이전트가 "데이터 좀 살펴볼게요" 한 뒤 답변하므로 한 턴이 추가 소모됨.
  • 팀 표준 불일치 — 팀원마다 사용하는 검증 도구·옵션이 달라짐.

Antigravity에서는 위 문제를 Rules + Workflows + 외부 시스템 도구의 조합으로 해결합니다. 한 번 정의하면 워크스페이스를 여는 모든 팀원에게 동일하게 적용됩니다.

Hooks vs Rules vs Skills vs Workflows — 한눈 비교

자동화 메커니즘 비교
메커니즘 실행 시점 언어/형식 주된 목적 Antigravity 지원
Hooks (preTurn/postTurn) 매 턴 자동 셸 명령 (settings.json) 턴 단위 자동 검증·후처리·컨텍스트 주입 ❌ 미지원 (Claude Code 등에서 사용)
Rules 매 응답마다 행동 지침으로 적용 (Always On / Glob / Model Decision) 마크다운 (자연어) 에이전트 행동 규칙·금지사항·"먼저 무엇을 확인하라" 정의 .agent/rules/
Skills 키워드·description 매칭 시 자동 활성화 또는 명시 호출 마크다운 + 보조 스크립트 특정 도메인 전문 지식·절차 캡슐화 .agent/skills/
Workflows 슬래시 명령으로 호출 시 마크다운 (단계별 절차) 다단계 반복 작업 절차화 (배포·리뷰·정리 등) .agent/workflows/
어떤 메커니즘을 선택할까? "응답 시작 전 항상 무엇을 확인해야 한다" → Rules. "여러 단계를 묶어 사용자가 호출하는 절차" → Workflows. "특정 도메인 지식·도구를 캡슐화" → Skills. "에이전트 외부에서 강제 실행" → git pre-commit·CI 등 시스템 도구.

3. 단계별 등록 가이드 — Rules·Workflows로 hooks 효과 만들기 #

3.1 파일 위치 결정 — 워크스페이스 vs 전역

Antigravity의 자동화 파일은 두 위치 중 하나에 둘 수 있습니다.

전역 vs 워크스페이스 .agent 디렉터리
범위 파일 위치 적용 대상 권장 용도
전역 ~/.agent/rules/*.md
~/.agent/workflows/*.md
모든 워크스페이스 개인 선호 도구·언어 컨벤션 (예: "Python에서는 항상 ruff 사용")
워크스페이스 프로젝트_루트/.agent/rules/*.md
프로젝트_루트/.agent/workflows/*.md
해당 프로젝트만 프로젝트 특화 컨벤션·검증 절차·데이터 경로 (팀 공유)

두 위치에 같은 항목이 있으면 워크스페이스 정의가 전역을 보강 또는 재정의합니다. 팀 공유가 필요한 자동화는 워크스페이스 디렉터리를 git에 커밋해 모든 팀원이 같은 환경을 얻게 합니다.

3.2 Rule 파일의 표준 골격

.agent/rules/<name>.md — 기본 구조
# description: 어떤 상황에 적용되는 규칙인지 자연어로 설명 (Model Decision 모드용)
# globs: **/*.py                # 어떤 파일과 관련된 작업에서 활성화할지 (Glob 모드용)

## 규칙 제목

규칙 본문은 평서문으로 명확하게 작성한다. 에이전트가 이를 답변
이전에 자연스럽게 적용한다.

- 항목 1
- 항목 2
- 예외 또는 회피 조건
  • frontmatter 주석 (선택)# description:, # globs:로 활성화 모드를 정합니다. 자세한 내용은 Rules 페이지의 활성화 모드 참조.
  • 본문 — 평서·짧은 문장이 가장 잘 동작합니다. 12,000자 이내 권장.
  • 여러 파일로 분리 — 주제별로 파일을 나누면 에이전트의 추론 정확도가 높아집니다.

3.3 Workflow 파일의 표준 골격

.agent/workflows/<name>.md — 기본 구조
# 워크플로우 제목 — 한 줄 요약

## 입력
- 사용자가 호출 시 전달할 인자 또는 컨텍스트

## 단계
1. 첫 단계 — 무엇을 확인하고 어떤 도구를 호출할지
2. 두 번째 단계 — 분기 조건 포함 가능
3. ...

## 출력
- 사용자에게 보고할 결과 형식 (표·요약·산출 파일 경로 등)
  • 슬래시 명령 이름은 파일명에서 자동 도출됩니다. format-and-test.md/format-and-test로 호출.
  • 사용자 호출 후 자동 실행되므로, 에이전트가 헷갈리지 않도록 단계마다 도구·결과를 명시합니다.

3.4 가장 자주 쓰는 기본 예시 3가지

예시 1 — Rule: 코드 작업 시작 전 git 컨텍스트 점검
# description: 코드 수정·리뷰·커밋 작업을 시작하기 전 git 컨텍스트를 먼저 확인
# globs: **/*

## git 컨텍스트 점검 규칙

코드를 수정하는 답변을 시작하기 전에 다음 단계를 따른다.

1. `git status --short`로 변경 파일을 확인한다.
2. 변경이 있으면 사용자에게 한 줄로 요약 보고한다.
   예: "현재 3개 파일이 미커밋 상태입니다 (src/main.py, tests/test_a.py, README.md)."
3. 새 변경을 만들기 전, 기존 변경과 충돌이 없는지 점검한다.

git 저장소가 아닌 워크스페이스에서는 위 규칙을 무시한다.
예시 2 — Workflow: 코드 변경 후 포맷·테스트 정리
# 코드 변경 마무리 — 포맷·린트·테스트

## 단계

1. `git diff --name-only --diff-filter=AM` 실행해 변경된 파일 목록 추출
2. Python 파일이 포함되어 있으면 `ruff format <파일>`을 일괄 실행
3. `ruff check --fix` 실행해 자동 수정 가능한 린트 이슈 처리
4. `pytest -x -q | tail -20` 실행해 빠른 회귀 테스트
5. 모든 단계 결과를 한 줄씩 요약 보고

테스트 실패 시 즉시 중단하고 실패 내역을 사용자에게 보여준다.

호출 방법: 에이전트 채팅에서 /<파일명>을 입력. 위 예시는 /code-cleanup 같은 이름으로 저장하면 그대로 호출됩니다.

예시 3 — Rule: 데이터 분석 시작 시 데이터 윤곽 점검
# description: CSV·Excel·Parquet 파일을 다루는 데이터 분석 작업 시작 시 적용
# globs: **/*.{csv,xlsx,parquet,ipynb}

## 데이터 윤곽 점검

데이터 분석 답변을 시작하기 전에 다음을 먼저 확인한다.

1. `df.shape`, `df.dtypes`, `df.head(3)` 출력으로 데이터 구조 파악
2. 결측치 비율을 컬럼별로 계산해 5% 이상인 컬럼만 보고
3. 시간·날짜 컬럼이 있으면 자료형이 datetime인지 확인

이 점검을 마친 뒤 사용자 요청을 처리한다.

3.5 등록 후 검증 절차

  1. 경로 확인 — 파일이 정확히 .agent/rules/ 또는 .agent/workflows/ 아래에 있는지 확인 (.gemini/가 아닙니다).
  2. frontmatter 검증 — Rule 파일은 # description: 또는 # globs: 주석을 추가했는지 확인. Always On 모드라면 둘 다 생략 가능.
  3. 워크스페이스 재로드 — Antigravity 에디터에서 워크스페이스를 다시 열거나, 새 대화를 시작합니다.
  4. Rule 동작 확인 — 규칙이 적용되는 작업(예: 파이썬 코드 수정 요청)을 보내고, 에이전트가 답변 시작 전에 규칙대로 동작하는지 확인합니다.
  5. Workflow 호출 확인 — 슬래시 명령(/<파일명>)을 입력해 절차가 단계대로 실행되는지 확인합니다.
흔한 함정 3가지:
  1. 경로 혼동 — Claude Code의 .claude/·Antigravity의 .agent/·Gemini CLI의 ~/.gemini/는 모두 다른 경로입니다. Antigravity Rules·Workflows는 .agent/에 둡니다.
  2. 너무 추상적인 본문 — "잘 처리해줘" 같은 모호한 지시는 에이전트마다 해석이 달라집니다. "X를 Y 도구로 실행하고 결과를 한 줄로 요약"처럼 구체화합니다.
  3. 강제 실행 기대 — Rules·Workflows는 자율 판단 기반입니다. 정책을 절대 위반하지 못하게 막으려면 git pre-commit 훅·CI 같은 시스템 레벨 도구를 함께 쓰세요.

4. 활용 패턴 모음 (참고용 — Claude Code 표기) #

이 절의 표기 방식 안내: 아래 표는 자주 쓰이는 자동화 패턴을 한눈에 보여주기 위해 Claude Code의 preTurn·postTurn 표기를 그대로 사용합니다. Antigravity에서는 이 셸 명령들을 같은 의도의 Rules·Workflows 본문으로 옮겨 적습니다.
  • preTurn 패턴.agent/rules/<name>.md에 "X를 먼저 확인하라"는 평서문 규칙으로 작성
  • postTurn 패턴.agent/workflows/<name>.md에 단계별 절차로 작성, 사용자가 /<name>으로 호출
  • 강제 실행이 필요한 정책 → git pre-commit·CI·에디터 저장 시 자동 포맷 등 시스템 도구

변환 예시는 위 3절 단계별 등록 가이드의 예시 1·2·3 참조.

실전에서 자주 쓰이는 자동화 패턴을 카테고리별로 정리했습니다. 자신의 워크플로우에 맞는 항목을 골라 위 변환 규칙대로 Rules·Workflows로 옮겨 사용하세요. 모든 명령은 파일 부재·도구 미설치 시 에러가 나지 않도록 가드 패턴([ -f ... ] && ..., ... || true)을 적용하는 것을 권장합니다.

4.1 코드 품질

코드 품질 자동화 훅
패턴 유형 명령 예시 효과
Python 자동 포맷팅 postTurn black . --quiet || true 모든 .py 파일 일관된 PEP 8 스타일
JS/TS 자동 포맷팅 postTurn npx prettier --write "src/**/*.{js,ts,jsx,tsx}" 2>/dev/null 모든 프런트엔드 코드 일관성
Python 린트 postTurn flake8 src/ --max-line-length=88 --statistics 2>&1 | tail -5 코드 스타일·잠재 버그 즉시 감지
JS 린트 postTurn npm run lint --silent 2>&1 | tail -5 ESLint 위반 자동 보고
타입 검사 postTurn mypy src/ --no-error-summary 2>&1 | tail -10 타입 힌트 위반 즉시 감지

4.2 Git 및 버전관리

Git 자동화 훅
패턴 유형 명령 예시 효과
변경 파일 미리 보여주기 preTurn git status --short 2>/dev/null 에이전트가 작업 중인 변경 사항 자동 인지
최근 커밋 히스토리 주입 preTurn git log --oneline -10 2>/dev/null 최근 작업 흐름 컨텍스트화
변경 사항 자동 스테이징 postTurn git add -A && git status --short 에이전트 변경분이 즉시 staging 영역에
현재 브랜치 표시 preTurn echo "Branch: $(git branch --show-current 2>/dev/null)" 다른 브랜치에서 작업 중임을 자동 인지

4.3 테스트 자동화

테스트 자동화 훅
패턴 유형 명령 예시 효과
Python 테스트 빠른 실행 postTurn pytest tests/ -x -q 2>&1 | tail -10 실패 즉시 중단(-x), 마지막 10줄만 노출
Jest 테스트 postTurn npm test --silent -- --passWithNoTests 2>&1 | tail -10 JS/TS 테스트 자동 실행
변경된 파일만 테스트 postTurn pytest tests/ --testmon 2>&1 | tail -5 이전과 비교해 영향받은 테스트만 실행 (속도 ↑)
커버리지 보고 postTurn pytest --cov=src --cov-report=term-missing 2>&1 | tail -10 테스트 커버리지 즉시 가시화

4.4 데이터 분석 분석가 권장

데이터 분석 자동화 훅
패턴 유형 명령 예시 효과
DataFrame 메타 자동 주입 preTurn [ -f data/train.csv ] && python -c "import pandas as pd; print(pd.read_csv('data/train.csv').info())" 데이터셋 구조·dtype·메모리 자동 컨텍스트화
Pandera 스키마 검증 postTurn [ -f tests/test_data_schema.py ] && pytest tests/test_data_schema.py -x -q 분석 코드 변경 시 데이터 가정 위반 감지
한글 폰트 설정 preTurn python -c "import koreanize_matplotlib" plot의 한글 깨짐 방지 (스타일은 분석 코드에서 자유롭게 지정)
ydata-profiling 자동 보고서 postTurn [ -f data.csv ] && [ $(wc -l < data.csv) -lt 10000 ] && python -m ydata_profiling data.csv -o profile.html EDA 보고서 자동 생성 (대용량 자동 스킵)
Plot 일자별 아카이빙 postTurn mkdir -p artifacts/$(date +%F) && mv *.png artifacts/$(date +%F)/ 2>/dev/null 시각화 산출물 자동 정리
분석 진행 로그 postTurn echo "$(date +%F\ %H:%M) - Turn complete" >> analysis_log.md 재현 가능성 확보를 위한 진행 이력 기록

4.5 보안

보안 자동화 훅
패턴 유형 명령 예시 효과
Python 보안 스캔 postTurn bandit -r src/ -ll -q 2>&1 | tail -10 생성 코드의 보안 취약점 자동 감지
의존성 취약점 검사 postTurn pip-audit --strict 2>&1 | tail -10 || true requirements.txt 패키지의 알려진 CVE 검사
secrets 누출 검사 postTurn git diff --cached | grep -iE "(api[_-]?key|secret|token|password)\\s*=" || true 커밋 직전 자격 증명 누출 자동 차단

4.6 문서 자동화

문서 자동화 훅
패턴 유형 명령 예시 효과
API 문서 자동 생성 postTurn pdoc src/ -o docs/ 2>/dev/null || true 코드 변경 시 docstring 기반 API 문서 갱신
CHANGELOG 갱신 안내 postTurn git diff --name-only | grep -q "src/" && echo "CHANGELOG.md 갱신 필요" || true 코드 변경이 있으면 changelog 작성 요청 자동 표시
마크다운 링크 검증 postTurn find . -name "*.md" -exec markdown-link-check {} \\; 2>&1 | tail -5 깨진 내부·외부 링크 즉시 감지

완성된 통합 예시 — 풀스택 Python 프로젝트

위 패턴들을 조합한 settings.json 예시. 자신의 프로젝트에 맞춰 가감하세요.

.gemini/settings.json — 통합 예시
{
  "agentSettings": {
    "hooks": {
      "preTurn": [
        {
          "command": "echo '=== Git ===' && git status --short 2>/dev/null && git log --oneline -5 2>/dev/null",
          "description": "변경 파일·최근 커밋 자동 주입"
        },
        {
          "command": "[ -f data/train.csv ] && python -c \"import pandas as pd; df = pd.read_csv('data/train.csv'); print(f'shape={df.shape} null_rate={df.isnull().mean().mean():.2%}')\" || echo 'data/train.csv 없음'",
          "description": "데이터셋 메타 주입 (있을 때만)"
        }
      ],
      "postTurn": [
        {
          "command": "black . --quiet 2>&1 || true",
          "description": "Python 자동 포맷팅"
        },
        {
          "command": "flake8 src/ --max-line-length=88 --statistics 2>&1 | tail -5",
          "description": "린트 검사 (마지막 5줄만)"
        },
        {
          "command": "pytest tests/ -x -q 2>&1 | tail -10",
          "description": "테스트 실행 (실패 즉시 중단)"
        },
        {
          "command": "git add -A && git status --short",
          "description": "변경 사항 자동 스테이징"
        }
      ]
    }
  }
}

5. 프롬프트로 자동화 파일 만들기 #

Rules·Workflow 파일을 직접 작성하는 대신, Antigravity 에이전트에게 자연어로 부탁하면 에이전트가 적절한 위치에 파일을 만들어 줍니다. 사용자는 "원하는 자동화"를 말로 표현하기만 하면 되고, frontmatter·본문 작성은 에이전트가 처리합니다.

이 절의 예시 표기 안내: 아래 흐름·예시 중 일부는 가독성을 위해 preTurn·settings.json 같은 Claude Code 표기를 사용할 수 있습니다. Antigravity에서 같은 의도를 전달할 때는 ".agent/rules/에 ~한 규칙을 만들어줘", ".agent/workflows/에 ~한 절차를 만들어줘"처럼 실제 디렉터리·파일 형식을 명시해 요청하면 더 정확한 결과를 얻습니다.

5.1 3단계 워크플로우

프롬프트로 훅 만들기 표준 흐름
  1. ① 의도 설명 — 사용자: "매 대화 시작 시 git 변경 파일을 자동으로 보여줘". 자연어로 자동화하고 싶은 시점·동작·조건을 명확히 전달.
  2. ② 에이전트가 settings.json 작성·등록 — 에이전트가 적절한 셸 명령을 선택하고, settings.json의 올바른 위치에 추가하며, 가드 패턴까지 적용.
  3. ③ 사용자 검증·수정 요청 — 새 대화 시작 후 동작 확인. 부족한 점이 있으면 "출력이 너무 길어, 5줄로 제한해줘" 같은 후속 요청으로 점진적 개선.

5.2 시나리오별 프롬프트 템플릿

템플릿 1 · 새 훅 만들기

구조: [언제] + [무엇을] + [어떤 조건으로] + [실패 시 어떻게]

예시 프롬프트
매 대화가 끝날 때마다 (postTurn) Python 코드를 black으로 자동 포맷팅하고
flake8 린트를 돌려서 마지막 5줄만 보여줘.
실패해도 다음 단계로 넘어가게 가드를 추가해주고,
.gemini/settings.json에 등록해줘.

에이전트는 이 한 줄로 4개의 결정(시점·도구·출력 제한·실패 처리)을 settings.json에 정확히 반영합니다.

템플릿 2 · 기존 훅 검토·개선

구조: [현재 settings.json 보여주기] + [개선 관점] + [구체 요청]

예시 프롬프트
지금 .gemini/settings.json의 훅 설정을 보고 다음 관점에서 검토해줘:
1. 파일 경로가 하드코딩된 곳이 있는지 (있으면 [ -f ... ] 가드 추가)
2. 출력이 너무 길어 컨텍스트를 낭비하는 곳 (tail -N으로 제한)
3. 실패 시 다음 단계가 막히는 곳 (|| true 또는 || echo 가드)
개선안을 적용한 settings.json을 보여줘.
템플릿 3 · 성능 최적화 요청

구조: [느리다는 증상] + [측정 요청] + [개선 방향]

예시 프롬프트
현재 postTurn 훅 실행이 너무 느려 매 턴이 답답해.
각 명령에 time을 붙여서 실행 시간을 측정하는 임시 settings.json을 만들고,
한 번 돌려본 뒤 가장 느린 명령부터 최적화 방안을 제안해줘.
(예: 캐시, 병렬 실행, 조건부 스킵)
템플릿 4 · 디버깅 도움 요청

구조: [에러 증상] + [현재 settings.json] + [원인 진단·수정 요청]

예시 프롬프트
preTurn 훅이 매 대화에서 'data/train.csv: No such file or directory' 에러를
출력해서 컨텍스트를 더럽히고 있어. 현재 settings.json은 다음과 같아:
[settings.json 내용 붙여넣기]
원인을 진단하고, 파일이 없을 때 에러 대신 안내 메시지가 나오도록 수정해줘.

5.3 점진적 정교화 패턴 — 한 번에 완성하지 않기

처음부터 완벽한 훅을 요청하기보다, 가장 단순한 버전 → 동작 확인 → 개선 흐름이 더 안정적입니다.

대화 1 — 가장 단순한 버전
👤 사용자: postTurn에 black 포맷팅을 추가해줘.

🤖 에이전트: settings.json에 다음 훅을 추가했습니다.
{ "command": "black .", "description": "Python 자동 포맷팅" }
대화 2 — 출력 정리
👤 사용자: black 출력이 너무 시끄러워. 변경된 파일 개수만 한 줄로 보여줘.

🤖 에이전트: command를 다음과 같이 수정했습니다.
"command": "black . --quiet 2>&1 | grep -c 'reformatted' | xargs -I {} echo '{} files reformatted'"
대화 3 — 실패 처리
👤 사용자: black 미설치 환경에서 에러로 막혀. 미설치면 안내만 하고 넘어가게.

🤖 에이전트: 가드 패턴을 추가했습니다.
"command": "command -v black >/dev/null && black . --quiet || echo 'black 미설치 — pip install black 필요'"

3턴 만에 처음의 단순한 black .정량 출력 + 미설치 가드를 갖춘 견고한 훅으로 진화했습니다.

5.4 자주 쓰는 변형 요청 모음

💬 훅을 점진적으로 다듬는 변형 요청 10가지
  • "이 훅의 출력을 마지막 5줄로 제한해줘 (현재 너무 길어서 컨텍스트 낭비)"
  • "실패해도 다음 단계가 실행되도록 || true 또는 || echo 가드를 추가해줘"
  • "파일이 존재할 때만 실행되도록 [ -f 경로 ] 조건 가드를 앞에 붙여줘"
  • "이 훅을 데이터 행이 1만 미만일 때만 실행되게 셸 조건문으로 가드해줘"
  • "이 명령이 30초 이상 걸리면 타임아웃 처리하도록 timeout 30을 앞에 붙여줘"
  • "에러 메시지를 한국어로 친절하게 바꿔줘 (예: 'data 폴더에 train.csv를 두세요')"
  • "이 훅이 백그라운드에서 비동기로 돌게 명령 끝에 &를 붙이고, 결과는 다음 턴에 반영"
  • "훅 설정을 워크스페이스에서 전역(~/.gemini/settings.json)으로 옮겨서 다른 프로젝트에도 적용해줘"
  • "훅 명령을 별도 헬퍼 스크립트(scripts/precheck.sh)로 추출하고 settings.json은 그것을 호출하도록 단순화해줘"
  • "현재 settings.json의 훅들을 README.md에 표로 문서화해줘 (이름·시점·역할 컬럼)"

💡 이 변형 요청들은 새 훅을 만들 때보다 기존 훅을 다듬을 때 효과적입니다. "지금 settings.json"을 함께 보여주면 에이전트가 정확한 위치에 변경을 적용합니다.

5.5 에이전트와 함께 디버깅하기

훅이 예상대로 동작하지 않을 때, 사용자가 직접 디버깅하는 대신 에이전트와 함께 단계적으로 좁혀가는 방식이 효율적입니다.

  1. 증상 공유: "preTurn 훅이 무시되는 것 같아. git status가 안 보여."

    에이전트는 우선 settings.json을 읽어 훅 등록 자체를 확인합니다.

  2. 격리 실행 요청: "settings.json의 첫 번째 preTurn command만 셸에서 직접 실행해보고 결과 보여줘."

    훅 메커니즘과 명령 자체 중 어느 쪽 문제인지 격리합니다.

  3. 이스케이프·환경 검증: "JSON 안의 따옴표·역슬래시 이스케이프가 올바른지 확인해줘. 그리고 셸이 bash인지 zsh인지에 따라 명령이 달라질 수 있는지 검토해줘."

    JSON 문법, 셸 차이로 인한 동작 차이를 점검합니다.

  4. 로그 추가: "각 훅 명령 앞에 echo '=== running hook X ==='를 붙여서 어느 훅이 어디까지 실행되는지 추적할 수 있게 해줘."

    실행 경로를 가시화합니다.

  5. 최소 재현: "위 모든 검증을 통과했는데 여전히 안 되면, 가장 단순한 echo 'hook OK' 만 남긴 settings.json으로 줄여서 그것이 동작하는지 먼저 확인해줘."

    가장 단순한 형태로 재현이 되는지 본 후 거꾸로 복잡도를 올립니다.

디버깅의 핵심 원칙: 훅은 "코드"가 아니라 "셸 명령 + JSON 설정"이므로 디버깅 도구가 제한적입니다. 사용자가 모든 가능성을 떠올리기 어렵기 때문에, "증상 + 현재 settings.json"을 통째로 에이전트에게 넘기고 함께 좁혀가는 흐름이 가장 빠릅니다.

6. 트러블슈팅 #

6.1 실행 실패 처리 — 가드 패턴 정리

훅 명령이 실패해도 에이전트 대화는 중단되지 않습니다. 하지만 실패 출력이 컨텍스트를 더럽히면 에이전트의 응답 품질이 떨어집니다. 다음 가드 패턴들을 적절히 조합해 사용하세요.

가드 패턴 모음
패턴 사용 시점 예시
... || true 실패해도 조용히 넘어가기 black . --quiet || true
... || echo '안내' 실패 시 사용자 친화 메시지 black . || echo 'black 미설치'
[ -f 경로 ] && ... 파일이 있을 때만 실행 [ -f .env ] && cat .env
command -v 도구 >/dev/null && ... 도구가 설치됐을 때만 실행 command -v black >/dev/null && black .
2>/dev/null stderr 숨기기 (예상 가능한 에러) git status 2>/dev/null
2>&1 | tail -N stderr까지 합쳐 마지막 N줄만 pytest 2>&1 | tail -10
timeout N ... 실행 시간 제한 timeout 10 npm test

6.2 디버깅 — stdout/stderr 활용

훅 명령의 stdout과 stderr는 모두 에이전트 컨텍스트에 추가되므로, 진단용 출력을 적극 활용할 수 있습니다.

디버그용 임시 훅
{
  "command": "echo '=== HOOK START $(date +%T) ===' && pwd && echo SHELL=$SHELL && ls -la .gemini/ && echo '=== HOOK END ==='",
  "description": "훅 실행 환경 진단 (시각·작업 디렉토리·셸·gemini 폴더)"
}

6.3 성능 최적화

  • 출력 최소화tail -N, --quiet, --silent로 토큰 낭비 줄이기.
  • 조건부 실행 — 모든 파일이 아닌 변경된 파일만 처리 (예: git diff --name-only | xargs black).
  • 비동기 실행 — 결과를 다음 턴에 봐도 되는 작업은 명령 끝에 &를 붙여 백그라운드로.
  • 캐시 활용 — pytest --testmon, mypy --incremental처럼 변경분만 검사하는 모드 사용.
  • 훅 개수 관리 — preTurn/postTurn 합쳐 5개 이내 권장. 그 이상이면 헬퍼 스크립트로 통합.

6.4 보안 고려사항

⚠️ 훅에 절대 넣지 말아야 할 것:
  • API 키·비밀번호·토큰 같은 자격 증명 (echo $API_KEY 절대 금지)
  • 외부 서버에 데이터를 자동 전송하는 명령 (사용자 인지 없이)
  • rm -rf, git push --force 같은 파괴적 명령
  • 네트워크에서 코드를 받아 실행하는 명령 (curl ... | bash)

자격 증명이 필요하면 환경변수로 빼고, 훅에서는 $ENV_VAR로 참조하세요. git status처럼 출력에 자격 증명이 노출될 가능성이 있는 명령도 주의.

6.5 흔한 실수 모음

흔한 실수와 해결책
증상 원인 해결
훅이 실행되지 않음 JSON 문법 오류 (콤마 누락 등) python -m json.tool .gemini/settings.json으로 검증
"command not found" 도구 미설치 또는 PATH에 없음 command -v 도구로 확인 후 설치, 또는 절대 경로 사용
한글 깨짐 로케일 또는 인코딩 문제 LANG=ko_KR.UTF-8 환경변수 설정 또는 koreanize-matplotlib 사용
매 턴 같은 에러 가드 패턴 누락 [ -f ... ] && ... || true 추가
출력이 너무 길어 컨텍스트 낭비 tail·head 누락 2>&1 | tail -10으로 제한
훅 변경이 반영 안 됨 기존 대화에서 캐시된 설정 사용 새 대화 시작

7. 더 깊이 학습 #

이 페이지가 훅의 실전 활용에 집중했다면, 다음 자료는 훅의 아키텍처 맥락과 보안적 의미를 다룹니다.

학습 순서 추천:
  1. 이 페이지의 빠른 시작으로 첫 훅 만들기 (10분)
  2. 활용 패턴 모음에서 자신의 워크플로우에 맞는 2-3개 훅 골라 적용 (30분)
  3. 프롬프트로 hooks 설정하기로 점진적 정교화 연습 (1시간)
  4. 위 Harness Engineering 페이지로 진입해 보안·아키텍처 맥락 학습 (별도 세션)

오늘코드 Antigravity 튜토리얼 — Google Antigravity 공식 문서 기반 한국어 학습 가이드

이 튜토리얼은 비공식 학습 자료입니다. 공식 문서: antigravity.google/docs

오늘코드