Docs
설정
16px

Antigravity 전환 — 무료 사용자 요금제 가이드 전환

2026년 6월 18일부터 Gemini CLI는 무료·Pro·Ultra 사용자에게 서비스를 중단합니다. 무료로 쓰던 분들이 가장 궁금한 "전환 후에도 무료로 쓸 수 있나? 한도는 그대로인가? 무엇을 미리 준비해야 하나?"를 정리합니다.

📣 공식 소개 블로그 — "Introducing Google Antigravity CLI"

Google Antigravity 공식 블로그 · The Antigravity Team
📅 2026-05-20

"The Google Antigravity CLI is the most lightweight way to invoke, monitor, and interact with Antigravity agents, directly from your terminal."

👉 원문 읽기 (antigravity.google/blog)

1. Antigravity CLI란?

Antigravity CLI는 Google Antigravity 2.0의 "터미널 UI 대안"입니다. 데스크톱 앱(2.0)과 동일한 "agent harness"(에이전트 실행 환경)를 공유하며, 동일한 설정을 쓰고, CLI에서 시작한 대화를 데스크톱 앱으로 가져올 수 있습니다.

2. Antigravity CLI ↔ Antigravity 2.0 관계

요소공유 여부의미
Agent harness (실행 환경) ✅ 동일 핵심 에이전트 개선이 두 제품에 자동 반영
공통 설정 (예: 권한) ✅ 공유 2.0에서 권한 설정했다면 CLI에서 다시 안 해도 됨 (반대도 마찬가지)
대화(conversation) ❌ 기본 분리 단, Antigravity 2.0의 @conversation 드롭다운으로 CLI 대화 가져오기 가능
최적화 방향 다름 2.0 = 기능 종합성, CLI = 속도·낮은 오버헤드

3. Gemini CLI와의 관계

블로그는 두 도구의 관계를 다음과 같이 명시합니다:

"At Google, we will drive the most long-term value to our users by having a single, cohesive developer product offering that leverages a shared agent harness co-optimized with Gemini models. As part of this unification effort, the Antigravity CLI took inspiration from core Gemini CLI product and harness components."

— Antigravity CLI 발표 블로그

4. 기존 Gemini CLI 사용자의 시작 방법

  1. 다운로드 페이지의 안내에 따라 Antigravity CLI 설치 → antigravity.google/download
  2. 마이그레이션 가이드를 따라 기존 자산(스킬 · MCP 서버 · 기타 커스터마이징)을 옮김 → antigravity.google/docs/gcli-migration
  3. 슬래시 명령 · 설정 · 키바인딩 전체 레퍼런스는 Antigravity CLI 공식 문서에서 확인

5. 향후 로드맵 (Looking Forward)

📋 5분 요약 — 가장 중요한 5가지

#핵심 메시지
1Antigravity CLI는 2.0 데스크톱의 가벼운 터미널 대안 — 호출·모니터링·상호작용에 특화
2두 제품은 동일한 agent harness를 공유 — 한쪽 개선이 다른 쪽에 자동 반영
3권한 등 공통 설정도 공유 — 한 곳에서만 설정하면 됨
4대화 자체는 기본 분리되어 있지만 2.0에서 @conversation으로 CLI 대화 불러올 수 있음
5장기 비전: "single, cohesive developer product offering" — 단일 통합 개발자 제품 라인 + 공유 하니스 + Gemini 모델 공동 최적화

🔗 블로그가 안내하는 공식 자료

출처: The Antigravity Team — "Google Antigravity CLI" (2026-05-20), antigravity.google/blog/introducing-google-antigravity-cli


📌 이 문서의 신뢰 기준

Antigravity CLI의 최종 요금제는 출시일(2026-05-19) 기준 전체가 공식 발표되지 않았습니다. 이 가이드는 다음 3가지 카테고리로 명시합니다:

  • 확정 — Google Developers Blog 발표문에 명시된 내용
  • 📋 현행 — 2026년 5월 기준 Gemini CLI 공식 한도 (변경되기 전 기준선)
  • 미확정 — Antigravity 공식 문서가 채워야 할 항목 (전환 전 본인이 직접 확인해야 함)

1. 지금 내가 어떤 요금제로 쓰고 있는지부터 확인

본인의 현재 상태에 따라 영향 범위와 필요한 조치가 다릅니다. 아래 표에서 해당 행을 찾으세요.

현재 사용 방식인증 방법현행 일일 한도 📋2026-06-18 영향 ✅
Google 계정 로그인 (무료) OAuth — gemini 첫 실행 시 브라우저 로그인 약 1,000건/일 (Code Assist for individuals) 서비스 종료
Gemini API 키 (무료 등급) 환경 변수 GEMINI_API_KEY 약 250건/일 서비스 종료
Gemini API 키 (유료) 결제 등록된 키 등급별 가변, 종량제 🛡️ 유지 — "paid Gemini API keys via Gemini CLI remain accessible"
Google AI Pro 구독 OAuth + 구독 약 1,500건/일 Gemini CLI 종료 → Antigravity CLI로 이전 필요
Google AI Ultra 구독 OAuth + 구독 약 2,000건/일 Gemini CLI 종료 → Antigravity CLI로 이전 필요
Vertex AI 서비스 계정 / Express 가변 🛡️ 유지 — "Gemini Enterprise Agent Platform API keys remain accessible"
Code Assist Standard / Enterprise 조직 라이선스 조직 협상 🛡️ 유지 — 엔터프라이즈 라이선스 영향 없음

자신이 어디 해당하는지 모르겠으면 터미널에서 /auth를 입력해 현재 인증 방법을 확인하세요. "Google account"라고 나오면 첫 행, "Gemini API key"라고 나오면 두 번째 행입니다.

2. ✅ 공식 발표문에서 확정된 변경 사항

Google Developers Blog가 명시한 내용만 추렸습니다:

구분2026-06-17까지2026-06-18부터
무료 사용자 (Code Assist for individuals)Gemini CLI 사용 가능Gemini CLI 중단 · Antigravity CLI로 이전
Pro·Ultra 구독자Gemini CLI 사용 가능Gemini CLI 중단 · Antigravity CLI로 이전
유료 Gemini API 키그대로그대로 유지
Gemini Enterprise Agent Platform API 키그대로그대로 유지
Code Assist Standard/Enterprise 조직그대로그대로 유지
GitHub 확장 (Issue/PR 자동화)그대로6/18 이후 수 주 내 종료

3. ❓ 아직 공식적으로 확인 안 된 항목

마이그레이션 전 직접 확인 권장:

⚠️ 직접 확인하는 법

위 항목은 다음에서 최신 정보를 받을 수 있습니다 — 가이드도 확정되는 대로 업데이트할 예정입니다:

4. 시나리오별 무료 사용자 액션 플랜

시나리오 A: "취미·학습용으로 가끔 쓴다"

권장: Antigravity CLI 무료 등급으로 이전 시도 → 한도·기능 확인 후 만족하면 계속, 부족하면 시나리오 B 또는 C로

시나리오 B: "매일 본격적으로 쓰는데 비용은 최소화하고 싶다"

권장: 유료 Gemini API 키로 전환 → Gemini CLI도 6/18 이후 계속 사용 가능

시나리오 C: "팀 단위로 쓰고 안정성이 중요하다"

권장: Code Assist Standard 또는 Vertex AI(Gemini Enterprise Agent Platform)로 업그레이드

시나리오 D: "Antigravity가 마음에 안 들면 어떡하지?"

대안: Gemini API 키만 발급해두고 다른 오픈소스 CLI 또는 IDE 확장으로 우회

5. 전환 전 체크리스트

6월 18일이 되기 전 다음을 미리 점검하세요:

항목확인 방법
☐ 본인의 현재 사용량 파악/stats model로 일일 평균 호출 수 확인. 1,000건/일 한도 대비 몇 %인지 측정
☐ GEMINI.md / settings.json 백업cp -r ~/.gemini ~/.gemini.backup-$(date +%Y%m%d)
☐ MCP 서버 목록 정리/mcp list 출력을 텍스트로 저장 — 재등록에 필요
☐ 커스텀 명령·스킬·서브에이전트 백업.gemini/commands/, .gemini/skills/, .gemini/agents/ 디렉토리 보존
☐ Antigravity CLI 사이드 설치 + 점검기존 Gemini CLI를 지우지 말고 Antigravity를 별도 디렉토리에 설치해 비교
☐ 무료 한도 실측5월 19일부터 6월 18일 사이 며칠을 평소처럼 사용해보고 한도 도달 여부 확인
☐ 청구 정보 등록 (시나리오 B인 경우)AI Studio에서 결제 카드 등록 — 한도 초과 시 자동 차단 설정 권장

6. 비용 비교 (현행 기준선)

Antigravity 요금이 발표되면 이 표에 추가될 예정입니다. 지금은 의사결정 참고용으로 현재 Gemini CLI 요금만 정리합니다:

요금제월 비용일일 한도특이사항
Google 계정 (Code Assist 개인 무료)$0약 1,000건2026-06-18 종료
Gemini API 키 (무료 등급)$0약 250건2026-06-18 종료
Gemini API 키 (유료)종량제 (대략 $1~10)가변, 결제 한도까지가벼운 사용에 추천
Google AI Pro약 $20약 1,500건Gemini CLI는 종료, Antigravity로 이전
Google AI Ultra약 $250약 2,000건Gemini CLI는 종료, Antigravity로 이전
Vertex AI종량제가변엔터프라이즈 권장, Gemini CLI 유지
Code Assist Standard / Enterprise조직 협상조직 협상Gemini CLI 유지, 영향 없음

정확한 최신 가격은 Gemini CLI 공식 요금 페이지Google AI 가격 페이지를 확인하세요.

💬 프롬프트로 자동 점검

전환 준비를 Gemini CLI에게 직접 시킬 수도 있습니다:

프롬프트
> Gemini CLI에서 Antigravity CLI로의 전환을 준비해줘:
> 1. ~/.gemini 디렉토리를 ~/.gemini.backup-YYYYMMDD 로 복사 백업
> 2. /mcp list 결과를 .gemini/migration/mcp-servers.txt 로 저장
> 3. .gemini/agents/, .gemini/skills/, .gemini/commands/ 의
>    파일 목록을 .gemini/migration/custom-assets.md 로 정리
> 4. /auth 와 /stats model 결과를 .gemini/migration/account.txt 로 저장
> 5. 위 내용을 한 줄 요약으로 보여주고 다음 단계 4가지를 제안해줘
>    (Antigravity 다운로드 / 백업 위치 / MCP 재등록 / 한도 모니터링)

Antigravity CLI 개요

Antigravity 공식 문서 cli-overview 페이지를 한국어로 정리. 이 CLI가 무엇이고 Antigravity 2.0과는 어떤 관계인지, 그리고 어디서부터 학습을 시작해야 하는지 안내합니다.

Antigravity CLI란 무엇인가

Antigravity CLI는 Antigravity를 터미널에서 가볍게 사용할 수 있도록 만든 TUI(터미널 사용자 인터페이스) 환경입니다. Antigravity 2.0이 제공하는 핵심 에이전트 능력 — 다단계 추론, 다중 파일 편집, 도구 호출, 대화 히스토리 관리 — 을 그대로 가져와 터미널 안에서 그대로 사용할 수 있게 해줍니다.

💡 한 줄 요약

키보드 중심으로 작업하는 개발자, 그리고 원격 SSH 환경에서 일하는 사용자에게 가장 적합한 도구입니다. 속도와 낮은 리소스 오버헤드를 최우선으로 설계됐습니다.

철학적 차이 — CLI vs. Antigravity 2.0

Antigravity CLI는 Antigravity 2.0을 ‘대체’하는 것이 아니라, 터미널 우선(terminal-first)의 보완재로 자리 잡습니다. 두 도구는 같은 두뇌를 공유하면서도 최적화 지향점이 다릅니다.

Antigravity CLIAntigravity 2.0
최적화 지향점 속도, 키보드 효율, 낮은 오버헤드 종합성, 시각적 오케스트레이션, 프로젝트 관리
주요 입출력 터미널 TUI 풀스크린 IDE 환경
적합한 시나리오 원격 SSH, CI/CD, 빠른 반복, 스크립팅 대규모 멀티 워크스페이스, 매니저 뷰, 시각적 검토

두 도구를 잇는 통합 기능

두 도구는 서로 다른 사용자 인터페이스를 갖고 있지만, 내부 아키텍처와 사용자 자산 측면에서 다음 세 가지를 공유합니다.

구분설명
공유 에이전트 하네스 두 제품 모두 동일한 코어 에이전트 엔진 위에서 동작합니다. 추론·도구 사용 측면의 개선 사항은 별도 작업 없이 양쪽 모두에 자동 반영됩니다.
공유 설정 핵심 환경설정과 권한 정책이 공유됩니다. CLI에서 한 변경이 Antigravity 2.0에도 즉시 반영되며, 반대 방향도 동일합니다.
대화 내보내기 대화 자체는 기본적으로 분리돼 있지만, CLI에서 진행 중이던 대화를 Antigravity 2.0으로 내보내 에이전트 우선 UI에서 이어가는 흐름이 지원됩니다.
🎯 실무 활용 시나리오 한 가지

새벽에 노트북에서 SSH로 서버에 접속해 CLI로 빠르게 이슈를 진단·수정하다가, 출근 후 데스크탑에서 동일 대화를 Antigravity 2.0으로 옮겨 시각적으로 후속 검토를 이어가는 워크플로우가 가능합니다.

시작하기와 마이그레이션

처음 설치

설치 절차는 본 가이드의 설치 가이드 또는 개발 환경 설정 섹션을 따라 진행합니다.

Gemini CLI에서 마이그레이션

이미 Gemini CLI를 사용해온 경우, 첫 실행 시 안내되는 일회성 마이그레이션 단계가 기존의 다음 항목들을 자동으로 가져옵니다.

마이그레이션 절차의 단계별 안내는 본 가이드의 Antigravity 전환 가이드 섹션을 참고하세요.

⚠️ 한 번만 자동, 그 뒤는 수동

자동 임포트는 최초 1회만 동작합니다. 이후 추가된 스킬·익스텐션은 사용자가 직접 새 위치(~/.gemini/antigravity-cli/ 하위)에 배치해야 합니다.

심화 학습 — 어디서부터 읽을까

공식 문서가 권장하는 다음 단계와 그에 대응하는 본 가이드의 한국어 섹션을 함께 정리했습니다.

관심사공식 문서 페이지이 가이드의 대응 섹션
처음 켜기 — 무음 키체인 로그인, 원격 SSH 세션 인증 Getting Started 설치 · 인증 설정
일상 사용 — 슬래시 명령, 설정, 기본 키바인딩 Using AGY CLI Antigravity CLI 사용 가이드
핵심 기능 — 백그라운드 위임, Fast-Path 승인, 고급 기능 Features Antigravity CLI 공식 기능
도구·확장 — 서드파티 스킬·MCP 서버 설치·관리 Tools & Extensions 확장 프로그램 · 에이전트 스킬 · MCP 서버

한눈 보기 요약

질문
Antigravity CLI는 무엇인가?Antigravity를 터미널에서 사용하는 가벼운 TUI 환경. Antigravity 2.0과 같은 두뇌, 다른 입출력.
왜 CLI가 필요한가?속도·키보드 효율·낮은 오버헤드. SSH·CI·스크립팅 환경 대응.
Antigravity 2.0과 어떻게 연동되나?공유 하네스, 공유 설정, 대화 내보내기.
Gemini CLI에서 옮기려면?최초 실행 시 안내되는 일회성 임포트로 자동 마이그레이션.
다음으로 읽어야 할 페이지?설치 → 사용 가이드 → 공식 기능 → 확장 프로그램.

Antigravity CLI 사용 가이드

Antigravity 공식 문서 cli-using 페이지를 한국어로 정리. 설정 · 빠른 팁 · 키바인딩 3개 축으로 구성됩니다.

📌 다음 페이지(공식 기능)와의 차이

이 페이지는 ‘CLI를 어떻게 다루는가’에 초점을 둡니다 — 설정을 어디서 어떻게 바꾸는지, 일상에서 자주 쓰는 단축 동작, 키바인딩 커스터마이징 등. 반면 다음 페이지 Antigravity CLI 공식 기능은 ‘CLI가 어떤 기능을 갖고 있는가’ — 플러그인·샌드박스·서브에이전트 같은 기능 자체를 다룹니다.

1. 설정 시스템

Antigravity CLI는 워크스페이스 동작, 보안 정책, 에디터 선호도, 시각 스타일, 성능을 모두 다루는 유연한 설정 시스템을 제공합니다. 설정에 접근하는 경로는 두 가지이며 어느 쪽으로 바꿔도 결과는 동일하게 같은 디스크 파일에 저장됩니다.

저장 위치 — JSON 파일

인터랙티브 설정 패널 — /config · /settings

실행 중인 프롬프트에서 /config 또는 /settings 를 입력하면 모든 옵션을 나열한 풀스크린 오버레이 메뉴가 열립니다.

설정 오버라이드 — CLI 플래그가 이긴다

일부 설정은 CLI 실행 시 플래그로 덮어쓸 수 있습니다. 예: --sandbox, --dangerously-skip-permissions.

⚠️ 우선순위 한 줄 정리

CLI 플래그 > 환경 변수 > 워크스페이스 설정 > 사용자 설정 > 시스템 기본값. 자세한 우선순위 표는 설정 파일 섹션을 참고하세요.

2. 알아두면 좋은 빠른 팁

공식 문서가 강조하는 가장 자주 쓰이는 단축 동작과 명령 10가지를 정리했습니다. 손에 익혀두면 CLI에서의 작업 속도가 크게 빨라집니다.

동작방법설명
파일 경로 자동완성 @ 프롬프트 중간에 @ 를 입력하면 경로 제안이 활성화됩니다. 파일을 컨텍스트에 첨부할 때 매우 빠름.
프롬프트 비우기 Esc Esc 스트리밍이 없을 때 ESC를 두 번 누르면 입력 박스를 즉시 비웁니다. 잘못 쓴 긴 프롬프트 정리에 유용.
터미널 명령 직접 실행 프롬프트 시작에 ! !ls -la처럼 프롬프트를 !로 시작하면 LLM 통과 없이 셸 명령으로 직행. 빠른 확인용.
도움말 / 슬래시 명령 목록 ? ? 한 글자 입력으로 사용 가능한 모든 슬래시 명령이 나열됩니다.
도구 호출 출력 줄이기 /config → Verbosity = low 여러 도구를 연쇄 호출할 때 화면이 너무 채워지는 것을 줄입니다. 시연·발표용으로 적합.
권한 관리 /config 또는 /permissions 도구 호출 승인 모드(request-review / always-proceed / strict)를 즉시 전환.
대화 되돌리기 /rewind 또는 /undo 대화 히스토리를 이전 체크포인트로 되감습니다. 결과가 마음에 안 들 때 가장 먼저 시도할 명령.
대화 분기 (Fork) /fork 이전 지점에서 별도 워크스페이스를 띄워 대화를 분기. ‘이 가설을 다른 갈래로도 시험해보고 싶다’는 상황에 적합.
대화 초기화 /clear 프롬프트와 컨텍스트를 비우고 새 대화 세션을 시작.
이전 세션 재개 /resume 이전 대화 로그 목록을 띄워 그중 하나를 골라 재개. CLI를 종료할 때 그 세션을 정확히 재개하는 명령이 자동 출력되므로 따로 메모해둘 필요가 없습니다.

3. 키바인딩

AGY CLI는 커스텀 키바인딩을 지원합니다. 두 가지 방법으로 변경할 수 있습니다.

초기화 방법: keybindings.json 파일을 삭제하면 다음 실행 시 기본값으로 자동 복원됩니다.

기본 키바인딩 — 카테고리별 정리

① TUI / 세션 제어

동작설명
TUI 화면 비우기Ctrl+L터미널 출력 영역 클리어
Enter / 제출Enter프롬프트나 선택지를 제출
Escape / 취소Ctrl+C, Esc스트림 정지, 메뉴 닫기, 프롬프트 비우기
CLI 종료Ctrl+DTUI 세션 자체를 종료
CLI 일시 중단Ctrl+Z세션을 터미널 백그라운드로 보냄 (포그라운드 복귀는 fg)

② 명령 승인 (인터랙티브 프롬프트)

동작설명
명령 편집E제안된 터미널 명령을 에디터로 수정
거절N해당 터미널 명령 실행을 거부
승인Y해당 터미널 명령 실행을 승인

③ 텍스트 편집

동작설명
외부 에디터 열기Ctrl+G기본 셸 에디터에서 프롬프트 편집
붙여넣기Ctrl+V클립보드 내용 붙여넣기
편집 재실행 (Redo)Ctrl+Shift+Z방금 되돌린 텍스트 변경을 다시 적용
편집 되돌리기 (Undo)Ctrl+_, Ctrl+Shift+-마지막 텍스트 변경 되돌리기
복사 (Yank)Ctrl+Y선택한 텍스트 복사
줄바꿈 삽입Alt+Enter, Ctrl+J, Shift+Enter제출하지 않고 새 줄만 추가 — 긴 프롬프트 작성에 필수

④ 탐색 / 스크롤

동작설명
아래로 이동메뉴 목록 아래로 이동
위로 이동메뉴 목록 위로 이동
왼쪽 이동프롬프트 커서 왼쪽 이동
오른쪽 이동프롬프트 커서 오른쪽 이동
맨 위로Ctrl+HomeTUI 뷰를 즉시 최상단으로 이동
맨 아래로Ctrl+EndTUI 뷰를 즉시 최하단으로 이동
페이지 위로PgUp, Shift+TUI 한 페이지 위로 스크롤
페이지 아래로PgDn, Shift+TUI 한 페이지 아래로 스크롤
Tab / 포커스 전환Tab자동완성 선택 또는 컴포넌트 포커스 전환

키바인딩 커스터마이징 규칙

⚠️ 비활성화할 수 없는 키바인딩

cli.exitcli.enter 두 동작은 시스템 안정성을 위해 비활성화가 차단됩니다. JSON에 빈 배열로 두어도 무시되고 기본값이 사용됩니다.

한눈 보기 요약

핵심 진입점저장 위치
설정/config · /settings · 직접 편집~/.gemini/antigravity-cli/settings.json
빠른 팁@ · ! · ? · /rewind · /fork · /resume
키바인딩/keybindings · 직접 편집~/.gemini/antigravity-cli/keybindings.json

Antigravity CLI 공식 기능 정리

Antigravity 공식 문서 cli-features 페이지를 한국어로 정리. 플러그인·터미널 샌드박스·슬래시 명령 레퍼런스·서브에이전트 4개 축으로 구성됩니다.

📌 이 페이지의 위치

같은 주제의 더 자세한 한국어 설명은 본 가이드의 개별 섹션에 분산돼 있습니다. 이 페이지는 공식 features 페이지의 구성 그대로 한곳에서 비교할 수 있게 모아둔 ‘공식 인덱스’ 역할입니다. 각 소절 하단의 ‘이 가이드의 상세 섹션’ 링크로 깊이 들어갈 수 있습니다.

1. 플러그인 (Plugins)

플러그인은 스킬·서브에이전트·룰·MCP 서버·훅을 하나의 네임스페이스가 부여된 번들로 묶은 배포 단위입니다. 설치 한 번으로 여러 종류의 커스터마이징을 한꺼번에 가져올 수 있습니다.

설치 시 동작

플러그인 디렉토리 구조
~/.gemini/antigravity-cli/
├── plugins/
│   └── <plugin_name>/
│       ├── plugin.json         # 필수 — 플러그인 마커
│       ├── mcp_config.json     # 선택 — MCP 서버 정의
│       ├── hooks.json          # 선택 — 이벤트 훅 정의
│       ├── skills/             # 선택 — 스킬 모음
│       ├── agents/             # 선택 — 서브에이전트 모음
│       └── rules/              # 선택 — 룰 모음
└── import_manifest.json        # 플러그인 추적 매니페스트

구성 요소 접근

플러그인이 스테이징·로드되면, CLI 안에서 슬래시 명령으로 각 구성 요소(스킬·에이전트·MCP·훅 등)와 상호작용할 수 있습니다. 예: /skills로 스킬 목록을 보거나 /mcp로 MCP 서버 상태를 확인.

🔗 이 가이드의 상세 섹션

2. 터미널 샌드박스 (Terminal Sandbox)

터미널 샌드박스는 에이전트가 로컬 셸 명령을 실행할 때 호스트 시스템을 보호하기 위한 경량 격리 메커니즘입니다. 잠재적으로 파괴적인 파일 조작이나 허가되지 않은 외부 네트워크 요청을 차단합니다.

왜 가상머신·컨테이너가 아닌가

VM이나 도커 컨테이너 대신 OS 네이티브 격리 기능을 사용해 시작 오버헤드를 사실상 0으로 유지합니다. 플랫폼별 백엔드는 다음과 같습니다.

OS샌드박스 백엔드
Linuxnsjail
macOSsandbox-exec
WindowsAppContainer

설정 방법

사용자 설정 파일(~/.gemini/antigravity-cli/settings.json)에 다음 항목을 추가하면 활성화됩니다.

settings.json
{
  "enableTerminalSandbox": true
}

인터랙티브 승인 — 샌드박스 on/off에 따른 차이

에이전트가 사용자의 확인이 필요한 터미널 명령을 제안할 때, CLI의 승인 프롬프트는 현재 샌드박스 설정에 따라 동적으로 옵션을 추가합니다.

현재 상태추가되는 옵션의미
샌드박스 켜짐 Yes, and run without sandbox restrictions 이번 한 번만 격리 경계를 우회. 신뢰할 수 있는 단일 명령을 빠르게 통과시킬 때 사용
샌드박스 꺼짐 Yes, and run in sandbox 이번 한 번만 샌드박스 안에서 강제 실행. 위험할 수 있는 명령을 안전 경계에서 시험할 때 사용
🔗 이 가이드의 상세 섹션

3. 슬래시 명령 레퍼런스

Antigravity CLI는 프롬프트 박스에 직접 입력하는 슬래시 명령으로 대화 관리·설정·에이전트 상태 조회를 처리합니다. 공식 문서가 강조하는 핵심 12개를 카테고리별로 정리했습니다.

명령분류용도
/resume (별칭 /switch)대화대화 선택기를 열어 이전 세션 재개 또는 전환
/rewind (별칭 /undo)대화이전 체크포인트로 대화 히스토리 롤백
/rename <이름>대화현재 대화 스레드의 이름을 변경해 추적을 쉽게
/permissions설정에이전트 자율도 선택 (request-review · always-proceed · strict)
/model설정기본 추론 모델 선택 — 세션 종료 후에도 유지
/keybindings설정인터랙티브 키 바인딩 편집기 열기
/statusline설정CLI 상태바에 표시되는 실시간 인디케이터 커스터마이즈
/tasks모니터링백그라운드 작업 모니터링, 로그 보기, 종료
/skills모니터링로컬·글로벌 스킬(캡슐화된 에이전트 워크플로우) 탐색
/mcp모니터링MCP 서버 구성·관리 패널 열기
/open <경로>유틸리티지정한 파일을 선호 외부 에디터로 즉시 열기
/usage유틸리티터미널 안에서 인터랙티브 도움말 매뉴얼 열기
/logout계정Google 세션 로그아웃 및 캐시된 자격 증명 삭제

settings.json을 통한 고급 커스터마이징

일부 슬래시 명령은 단순 토글을 넘어 ~/.gemini/antigravity-cli/settings.json에서 깊이 있는 설정을 받습니다.

세분화된 권한 — 전역 레벨 대신 명령 단위 화이트/블랙리스트

settings.json — permissions
{
  "permissions": {
    "allow": ["command(git)", "command(npm test)"],
    "deny":  ["command(rm -rf)"]
  }
}

커스텀 상태 라인 / 윈도우 타이틀

에이전트의 실시간 메타데이터(JSON: 현재 디렉토리·활성 모델·토큰 사용량·상태 등)를 사용자가 작성한 셸 스크립트로 파이프해, 동적인 상태바나 터미널 타이틀을 만들 수 있습니다. 모니터링 패널을 직접 꾸미고 싶을 때 유용합니다.

🔗 이 가이드의 상세 섹션

4. 서브에이전트 (Subagents)

Antigravity CLI는 비동기 서브에이전트 프레임워크를 갖추고 있습니다. 메인 에이전트가 병렬 작업, 백그라운드 조사, 시스템 테스트를 위임할 수 있어 현재 진행 중인 대화를 멈추지 않고도 부가 작업을 끝낼 수 있습니다.

서브에이전트란?

/agents 패널 — 인터랙티브 관리 UI

도구 승인 — 두 가지 경로

서브에이전트가 사용자 권한이 필요한 도구(예: 로컬 명령 실행, 파일 쓰기)를 호출하려 하면 승인 요청이 떠오릅니다. 두 가지 방식으로 처리할 수 있습니다.

방식위치단축키특징
Detail View Approvals 서브에이전트 상세 화면 내 ‘interaction’ 섹션 Ctrl+J — 다음 승인 대기 서브로 점프 여러 보류 요청을 한꺼번에 선택적으로 승인/거부
Fast Path Alerts 메인 대화의 프롬프트 박스 바로 위 알림 Ctrl+K — 즉시 승인 메인 대화를 떠나지 않고 즉시 처리 — 흐름 유지에 최적
💡 두 경로의 사용 분리

Fast Path Alerts는 신뢰도가 높고 자주 발생하는 작은 승인용(파일 읽기, 안전한 셸 명령 등)에 적합합니다. 반면 Detail View는 서브가 무엇을 했고 왜 이 도구를 호출하는지 맥락까지 살펴봐야 할 때 — 예: 데이터베이스 쓰기, 외부 API 호출 — 적합합니다.

🔗 이 가이드의 상세 섹션

요약 — 4개 축의 관계

핵심 키워드해결하는 문제
플러그인배포·재사용·네임스페이스여러 커스터마이징을 한 묶음으로 공유
터미널 샌드박스OS 네이티브 격리·제로 오버헤드잠재적으로 위험한 명령으로부터 호스트 보호
슬래시 명령TUI·즉시 토글대화·설정·모니터링을 키보드 한 번에 처리
서브에이전트비동기·병렬·승인 게이트메인 대화를 막지 않고 부가 작업 처리

Gemini CLI → Antigravity CLI 마이그레이션

Antigravity 공식 문서 gcli-migration 페이지를 한국어로 정리. 익스텐션·컨텍스트 파일·스킬·MCP 서버 4축의 이전 절차와 위치 변화를 다룹니다.

📋 TL;DR — 한 문단 요약

Antigravity CLI는 Gemini CLI 기능 대부분을 그대로 지원합니다. 100% 동일하진 않지만 워크플로우의 뼈대를 이루는 — 익스텐션(이제 ‘플러그인’), 에이전트 스킬, MCP 서버, 훅, 서브에이전트 — 모두 호환됩니다. 첫 실행 시 자동 임포트로 대부분의 자산을 옮길 수 있고, 일부 항목(예: 커스텀 테마)은 현재 1:1로 옮겨지지 않습니다.

첫 실행 — Migration Options 화면

Antigravity CLI를 처음 실행하면 Migration Options 화면이 표시됩니다. 여기서 기존 Gemini CLI 익스텐션을 동등한 Antigravity 플러그인으로 자동 변환하도록 선택할 수 있습니다.

⚠️ 1:1 변환되지 않는 항목

일부 컴포넌트는 현재 호환되지 않습니다. 대표적으로 커스텀 테마가 그 예입니다. 마이그레이션 로그에서 skipped 표시가 보이면 해당 항목은 수동 이전이 필요합니다.

대부분의 사용자는 마이그레이션이 끝난 직후 기존 Gemini CLI 워크플로우 그대로 Antigravity CLI를 사용할 수 있습니다. 컨텍스트 파일과 글로벌 에이전트 스킬은 같은 위치에서 그대로 로드됩니다.

1. 익스텐션 (Extensions) → 플러그인 (Plugins)

Gemini CLI가 ‘익스텐션’이라 부르던 — 기능을 묶어서 공유하는 단위 — 개념은 이제 업계 표준 용어인 플러그인으로 정착됐습니다. Antigravity CLI는 이 플러그인을 1급 시민으로 지원합니다.

자동 마이그레이션

첫 실행 시 안내되는 옵션을 통해 자동으로 진행되며, 언제든 명령으로 다시 실행할 수도 있습니다.

Terminal — 수동 임포트
agy plugin import gemini

임포트 로그 보는 법

위 명령을 실행하면 로컬에 설치된 각 익스텐션을 검색해 플러그인으로 변환합니다. 변환 로그는 다음과 같은 형태로 출력됩니다.

예시 출력
[ok]    conductor
        - skills      : skipped (not found)
        - agents      : skipped (not found)
        ✔ commands    : 6 processed (converted to skills)
        - mcpServers  : skipped (not found)
        - hooks       : skipped (not found)
[ok]    google-workspace
        ✔ skills      : 6 processed
        - agents      : skipped (not found)
        ✔ commands    : 4 processed (converted to skills)
        ✔ mcpServers  : 1 processed
        - hooks       : skipped (not found)

2. 컨텍스트 파일 (Rules)

Gemini CLI와 동일한 컨텍스트 파일 메커니즘이 그대로 동작합니다. 이전 작업 없이 즉시 사용 가능합니다.

범위파일적용 시점
워크스페이스 현재 워크스페이스의 GEMINI.md 또는 AGENTS.md 세션이 해당 폴더에서 시작될 때
글로벌 ~/.gemini/GEMINI.md 모든 세션에서 자동 로드·강제 적용
💡 새 파일명 AGENTS.md가 추가

워크스페이스 컨텍스트로 GEMINI.md 외에 AGENTS.md도 인식됩니다. 두 파일이 모두 있으면 함께 적용됩니다. 신규 프로젝트는 도구 중립적인 AGENTS.md로 시작하는 것도 한 가지 선택지입니다.

3. 에이전트 스킬 (Agent Skills)

에이전트 스킬은 Antigravity CLI에서도 그대로 동작합니다. /skills 명령으로 관리하는 것도 동일하고, 스킬이 슬래시 명령으로 노출되는 동작도 똑같습니다. 차이는 워크스페이스 스킬의 저장 위치뿐입니다.

속성Gemini CLIAntigravity CLI
저장 위치 — 글로벌 ~/.gemini/skills/ ~/.gemini/antigravity-cli/skills/
저장 위치 — 워크스페이스 .gemini/skills/ 또는 .agents/skills/ .agents/skills/
관리 명령 /skills /skills
동작 스킬이 슬래시 명령으로 노출 동일
⚠️ 워크스페이스 스킬 이동 필요

프로젝트에 .gemini/skills/ 폴더로 워크스페이스 스킬을 보관해왔다면, 그 내용을 .agents/skills/ 로 옮겨주세요. 글로벌 스킬은 자동으로 인식되므로 별도 작업이 필요 없습니다.

💡 gemini skills 명령 대체

Antigravity CLI에는 터미널에서 스킬을 관리하는 gemini skills의 1:1 대응 명령이 현재 없습니다. 스킬 파일을 직접 작성하거나 npx skills install을 사용하면 됩니다.

4. MCP 서버

로컬·원격 MCP 서버 모두 지원되고, /mcp 관리 명령도 동일합니다. 가장 중요한 차이는 두 가지입니다.

  1. MCP 서버 정의가 settings.json에서 분리되어 별도의 mcp_config.json 파일을 사용
  2. 원격 MCP 서버의 URL 필드 이름이 url(또는 deprecated된 httpUrl)에서 serverUrl로 변경
속성Gemini CLIAntigravity CLI
저장 위치 — 글로벌 ~/.gemini/settings.json 의 인라인 mcpServers 블록 ~/.gemini/antigravity-cli/mcp_config.json (별도 파일)
저장 위치 — 워크스페이스 .gemini/settings.json 인라인 .agents/mcp_config.json
원격 URL 필드 url 또는 httpUrl (deprecated) serverUrl
관리 명령 /mcp /mcp
⚠️ 원격 MCP 키 이름 주의

기존 설정을 복사할 때 "url": "..." 또는 "httpUrl": "..." 를 그대로 두면 동작하지 않습니다. "serverUrl": "..." 로 키 이름을 변경하세요.

마이그레이션 체크리스트

전체 마이그레이션을 빠짐없이 진행하기 위한 체크리스트입니다. 순서대로 진행하시면 안전합니다.

단계작업확인 방법
1 기존 ~/.gemini/ 폴더 전체 백업 cp -r ~/.gemini ~/.gemini.backup
2 Antigravity CLI 첫 실행 후 Migration Options에서 자동 임포트 진행 (또는 agy plugin import gemini) 로그에서 ✔ processed 항목 확인
3 워크스페이스 스킬을 .gemini/skills/.agents/skills/ 로 이동 /skills 명령으로 인식 여부 확인
4 MCP 서버 설정을 settings.json에서 mcp_config.json 으로 분리하고, 원격은 serverUrl 키로 변경 /mcp 명령으로 연결 상태 확인
5 커스텀 테마·기타 1:1 변환 불가 항목은 별도 점검 로그의 skipped 항목을 검토하고 필요한 경우 수동 재설정
6 대표 워크플로우를 실제로 실행해 동작 확인 자주 쓰는 슬래시 명령·MCP 도구 호출이 정상 작동하는지 점검

한눈 보기 요약 — 위치 변화 매트릭스

자산Gemini CLIAntigravity CLI변경 정도
익스텐션 → 플러그인 ~/.gemini/extensions/ ~/.gemini/antigravity-cli/plugins/ 자동 임포트로 처리
글로벌 컨텍스트 ~/.gemini/GEMINI.md 동일 변화 없음
워크스페이스 컨텍스트 GEMINI.md GEMINI.md 또는 AGENTS.md AGENTS.md 추가 지원
글로벌 스킬 ~/.gemini/skills/ ~/.gemini/antigravity-cli/skills/ 자동 인식
워크스페이스 스킬 .gemini/skills/ .agents/skills/ 수동 이동 필요
MCP 서버 설정 settings.json 인라인 별도 mcp_config.json 파일 분리 + serverUrl
🔗 관련 섹션

Antigravity CLI 설치

Antigravity CLI를 처음 설치하는 가이드입니다. 시스템 요구사항을 확인한 후 원하는 방법을 선택하세요. 기존 Gemini CLI를 쓰던 경우라면 자동 마이그레이션 안내도 참고하세요.

💡 시작 전에 알아두면 좋은 점
  • CLI 본체의 실행 명령은 agy 입니다 (Antigravity의 약어).
  • 설정·플러그인 파일은 ~/.gemini/antigravity-cli/ 아래에 저장됩니다.
  • 기존 ~/.gemini/ 폴더의 글로벌 스킬·컨텍스트 파일은 그대로 인식됩니다 — 즉, 마이그레이션 없이도 글로벌 자산은 살아 있습니다.

1. 시스템 요구사항

항목요구사항
운영체제macOS 15+, Windows 11 24H2+ (또는 WSL2), Ubuntu 20.04+
Node.js20.0.0 이상 (LTS 권장)
RAM최소 4GB, 매니저 뷰·서브에이전트 활용 시 16GB 권장
Bash, Zsh, Fish, PowerShell
Git2.40+ (체크포인팅·워크트리 기능 활용에 권장)
네트워크인터넷 연결 필수 (Vertex AI / Workspace 인증)
계정Google 개인 계정 또는 Workspace 계정

2. Node.js 사전 준비

Antigravity CLI는 Node.js 기반 도구입니다. node --version으로 현재 버전을 확인하고, 20.0.0 미만이거나 설치돼 있지 않다면 아래 방법 중 하나로 설치하세요.

Terminal — 버전 확인
node --version    # v20.0.0 이상이면 OK
npm  --version    # npm도 함께 설치돼 있어야 함

설치 옵션

옵션 A — 공식 사이트 (입문자에 가장 간단)

nodejs.org에서 LTS 버전을 다운로드해 설치 프로그램을 실행합니다. Node.js와 npm이 함께 설치됩니다.

옵션 B — nvm (개발자 권장: 여러 버전 전환 가능)
Terminal (macOS / Linux)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
# 터미널 재시작 후
nvm install --lts
nvm use --lts
Terminal (Windows — nvm-windows)
# https://github.com/coreybutler/nvm-windows/releases 에서 설치 후
nvm install lts
nvm use lts
옵션 C — 패키지 매니저
macOS — Homebrew
brew install node
Ubuntu / Debian — NodeSource
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
Windows — Chocolatey
choco install nodejs-lts

3. Antigravity CLI 설치 방법

방법 1 — npm 글로벌 설치 (권장)

가장 표준적인 방법입니다. 한 번 설치하면 어디서든 agy 명령으로 실행할 수 있습니다.

Terminal
npm install -g @google/antigravity-cli

# 설치 확인
agy --version

방법 2 — Homebrew (macOS / Linux)

Terminal
brew install antigravity-cli

방법 3 — 설치 없이 일회성 실행 (npx)

한 번만 써보고 싶거나 글로벌 설치를 피하고 싶을 때.

Terminal
npx @google/antigravity-cli@latest

방법 4 — IDE에서 자동 설치

VS Code, Cursor, Windsurf 등 Antigravity IDE 또는 VS Code 계열 환경의 통합 터미널에서 처음 agy 를 입력하면 컴패니언 익스텐션과 함께 설치가 안내됩니다. 자세한 내용은 IDE 익스텐션 섹션 참조.

방법 5 — 제한된 환경 (Anaconda 등)

Node.js를 직접 설치할 수 없는 폐쇄망·랩 환경에서 유용합니다.

Terminal
conda create -y -n agy_env -c conda-forge nodejs
conda activate agy_env
npm install -g @google/antigravity-cli
✅ Cloud Shell / Cloud Workstations

Google Cloud Shell과 Cloud Workstations에는 Node.js가 사전 설치돼 있어 npm install -g @google/antigravity-cli 한 줄로 바로 시작 가능합니다.

4. 첫 실행과 인증

설치가 끝났다면 빈 디렉토리든 작업 중인 프로젝트든 어디서나 agy 명령으로 진입할 수 있습니다.

Terminal — 첫 실행
agy
# 1) 환영 화면 표시
# 2) 처음 한 번 Google 계정 로그인 (브라우저 자동 오픈)
# 3) 기존 Gemini CLI 사용자라면 Migration Options 안내
# 4) /help 또는 /ide install 추천 표시

인증·계정·과금 통합 흐름의 자세한 안내는 인증 설정 섹션을 참고하세요. Workspace SSO를 쓰는 팀은 다음과 같이 도메인을 지정해 로그인합니다.

Terminal — Workspace 로그인
agy auth login --workspace example.com

5. 설치 결과 확인 체크리스트

아래 3가지가 모두 정상 응답하면 설치가 끝난 것입니다.

Terminal
# 1. 버전
agy --version

# 2. 인증 상태
agy auth status

# 3. 한 줄 프롬프트 (헤드리스 모드)
agy -p "현재 디렉토리의 파일 구조를 한 줄로 요약해줘"

6. 업데이트와 제거

Terminal — 최신으로 업데이트
npm install -g @google/antigravity-cli@latest
# 또는
agy update
Terminal — 제거
npm uninstall -g @google/antigravity-cli
# 설정 파일도 함께 제거하려면
rm -rf ~/.gemini/antigravity-cli

7. 설치 후 추천 다음 단계

단계섹션핵심
1 인증 설정 Google 계정 / Workspace SSO / 서비스 계정 중 시나리오 선택
2 사용 가이드 슬래시 명령·설정·키바인딩 익히기
3 기능 플러그인·샌드박스·서브에이전트의 동작 원리 이해
4 IDE 익스텐션 /ide install 로 IDE 컨텍스트 공유 활성화
5 MCP 서버 GitHub·Slack·DB 같은 외부 도구 연결

문제 해결 — 자주 묻는 설치 오류

증상원인 / 해결
command not found: agy npm 글로벌 bin 경로가 PATH 에 없음. npm config get prefix 로 확인 후 $PREFIX/bin 추가.
EACCES: permission denied npm 글로벌 디렉토리 권한 문제. sudo 대신 nvm 사용 권장 (위 옵션 B).
engine "node" is incompatible Node.js 20.0.0 미만. nvm install --lts 후 재시도.
설치는 됐는데 인증 실패 방화벽이 OAuth 콜백 포트를 막을 수 있음. agy auth login --no-browser 로 디바이스 코드 흐름 사용.
기존 Gemini CLI와 충돌 두 CLI는 별도 바이너리(gemini vs agy)라 공존 가능. 설정도 별도 폴더(~/.gemini/antigravity-cli/)에 저장되므로 안전.
📚 관련 섹션

/config — 인터랙티브 설정 메뉴

CLI 안에서 settings.json을 직접 열지 않고도 자주 쓰는 설정을 즉시 토글할 수 있는 TUI 메뉴.

호출 방법

실행 중인 CLI 프롬프트에서 /config를 입력하면 다음과 같은 메뉴가 떠 현재 설정값을 한눈에 보여줍니다.

예시 출력 — 메인 목록
  Artifact Review      asks for review
  Editor               auto ($EDITOR)
  Enable Telemetry     on
  Non-Workspace Access off
  Notifications        off
  Rendering Mode       native terminal (inline)
  Sandbox Mode         off
  Show Tips            on
> Tool Permission      request-review
  Verbosity            high

  Controls whether terminal commands require your approval before running.

  ↑/↓ Navigate · enter Edit · Esc Clear Search/Exit

특정 항목에서 Enter를 누르면 선택지 목록이 열리고, 현재 적용 중인 값에 (current) 표시가 함께 보입니다.

예시 — Tool Permission 항목 진입
Tool Permission
> request-review (current)
  proceed-in-sandbox
  always-proceed
  strict
💡 핵심 단축키 4개
  • / — 항목 이동 (현재 선택 항목은 > 표시)
  • Enter — 선택한 항목 값 변경 (토글 또는 선택지 펼침)
  • 문자 입력 — 항목 이름으로 즉시 검색·필터링
  • Esc — 검색 초기화 (이미 비어 있으면 메뉴 종료)
⚠️ overridden by ... 표시의 의미

일부 항목에 (overridden by --sandbox) 또는 (overridden by dangerously-skip-permissions) 같은 부가 설명이 보입니다. 이는 현재 세션에서 CLI 인자나 환경 변수가 메뉴 값을 덮어쓰고 있다는 표시입니다. /config로 값을 바꿔도 이 세션에서는 인자 우선이라 즉시 반영되지 않으며, 인자 없이 다시 띄운 다음 세션부터 적용됩니다. 설정 우선순위는 설정 파일 섹션의 우선순위 표를 참고하세요.

각 항목 상세 (10종)

항목설명선택지 (기본값 굵게)
Artifact Review 에이전트가 만든 산출물(아티팩트)을 적용하기 전 검토 수준을 결정합니다. 검토 없이 바로 적용할지, 에이전트가 스스로 판단하게 할지, 사용자가 매번 확인할지 셋 중 하나를 고릅니다. always proceeds · agent decides · asks for review
Editor 긴 프롬프트 편집 등 외부 편집기 호출 시 어떤 에디터를 띄울지. auto ($EDITOR)는 환경 변수 $EDITOR를 따라가며, other...를 선택하면 임의 명령을 직접 입력할 수 있습니다. auto ($EDITOR) · vim · emacs · other...
Enable Telemetry 익명 사용 통계·에러 리포트 전송 여부. 사내망·오프라인 환경 등 외부 전송을 차단해야 하는 경우 off로 두세요. on · off
Non-Workspace Access 현재 워크스페이스(보통 cwd) 바깥의 파일에 접근을 허용할지. off이면 ~/Documents 같은 외부 경로 읽기·쓰기가 차단됩니다. 보안상 기본 off가 안전합니다. on · off
Notifications 장시간 작업 완료 시 데스크탑 알림 표시 여부. 매니저 뷰나 백그라운드 디스패치를 자주 쓰면 on이 유용합니다. on · off
Rendering Mode TUI 화면을 어떤 방식으로 그릴지 결정합니다. 인라인은 터미널의 기본 스크롤을 그대로 사용해 친숙하지만 긴 대화에서 잘릴 수 있고, altscreen은 별도 풀스크린 영역을 사용해 깜빡임이 없는 대신 텍스트 선택 방식이 달라집니다. 아래 ‘렌더링 모드 비교’ 표를 참고하세요. native terminal (inline) · no flickering (altscreen)
Sandbox Mode 도구 실행을 격리된 샌드박스(macOS Seatbelt, Linux nsjail, Windows AppContainer 등)에서 돌릴지. on이면 잠재적으로 위험한 명령·외부 네트워크 호출이 격리 경계에서 차단됩니다. 자세한 정책은 샌드박싱 섹션 참조. on · off
Show Tips 시작 화면이나 빈 프롬프트에서 보여주는 사용 팁 표시 여부. 숙련 사용자는 off로 두면 화면이 더 깔끔합니다. on · off
Tool Permission 도구 호출(특히 셸 명령) 실행 전 사용자 승인 정책. 매번 검토받을지(request-review), 샌드박스 안에서만 자동 진행할지(proceed-in-sandbox), 항상 자동 실행할지(always-proceed), 엄격 모드로 강한 제한을 둘지(strict) 중 하나를 고릅니다. request-review · proceed-in-sandbox · always-proceed · strict
Verbosity 출력 상세도. low는 결과 중심, high는 도구 호출·중간 추론까지 모두 표시. 디버깅 중에는 high, 시연 중에는 low가 보기 좋습니다. high · low

렌더링 모드 비교 — Native Terminal (inline) vs. No Flickering (altscreen)

native terminal (inline)no flickering (altscreen)
스크롤 터미널의 기본 스크롤 버퍼 그대로 사용 풀스크린 alt-screen 별도 영역에서 렌더링
긴 대화 버퍼 한계를 넘어가면 잘릴 수 있음 긴 대화에 더 적합 (잘림 없음)
뷰 전환 시 패널을 토글하면 깜빡임이 생길 수 있음 깜빡임 없음
텍스트 선택 네이티브 터미널처럼 그대로 드래그 선택 네이티브 선택을 하려면 Shift 또는 Option을 누른 채 드래그
추천 시나리오 로그 복사·외부 도구 연동이 잦은 경우 긴 세션이 많고 화면 깜빡임이 거슬리는 경우
💡 요약

no flickering (altscreen)는 긴 대화에 이상적이지만, 네이티브 텍스트 선택을 하려면 Shift/Option을 누른 채 드래그해야 합니다. 반대로 native terminal (inline)는 터미널 기본 동작을 그대로 유지하지만, 긴 대화가 잘릴 수 있고 뷰를 토글할 때 깜빡임이 발생할 수 있습니다.

settings.json과의 관계

/config로 변경한 값은 사용자 설정 파일(~/.gemini/settings.json 또는 ~/.antigravity/settings.json)에 즉시 기록됩니다. 따라서 동일한 변경을 텍스트 에디터로 직접 해도 결과는 같습니다. 어느 쪽이 편리한지에 따라 선택하세요.

상황권장이유
지금 한두 개만 빠르게 토글 /config 현재 적용된 값과 override 출처를 한 화면에서 확인
MCP 서버·스킬·훅 같은 복합 구조 편집 에디터로 settings.json 직접 수정 중첩 JSON·배열은 메뉴로 다루기 불편
프로젝트 단위 강제 정책 적용 워크스페이스 .gemini/settings.json 저장소에 커밋해 팀 전체에 동일 적용
일시적인 단발 실험 CLI 인자/환경 변수 다음 세션에 영향 없음, 메뉴 값에는 overridden by ...로 표시

자주 쓰는 조합

🎯 시연·발표용
  • Verbosity: low — 화면을 깔끔하게 (도구 호출 출력 최소화)
  • Show Tips: off — 의도하지 않은 안내 문구 노출 방지
  • Notifications: off — 화면 캡처 시 방해 요소 제거
  • Rendering Mode: native terminal (inline) — 스크롤백을 그대로 보존
🛠️ 디버깅·개발용
  • Verbosity: high — 도구 호출·내부 단계 추적
  • Tool Permission: request-review — 의도치 않은 명령 실행 방지
  • Sandbox Mode: on — 실험적 명령의 격리 보장
  • Notifications: on — 장시간 작업 완료 알림
  • Artifact Review: asks for review — 산출물 적용 전 점검
🚀 CI / 자동화용
  • Tool Permission: always-proceed — 비대화형 환경에서 차단 방지
  • Artifact Review: always proceeds — 무인 작업 흐름 유지
  • Rendering Mode: native terminal (inline) — 로그 파싱 쉬움
  • Show Tips: off — 불필요한 출력 차단
  • Enable Telemetry: 조직 정책에 따라 결정
📜 긴 대화 / 긴 세션용
  • Rendering Mode: no flickering (altscreen) — 잘림·깜빡임 없음 (대신 텍스트 선택 시 Shift/Option 필요)
  • Verbosity: low — 출력량 자체를 줄여 가독성 확보

문제 해결

증상원인 / 해결
/config에서 값을 바꿨는데 세션 동작이 변하지 않음 해당 항목 옆에 (overridden by ...)이 있는지 확인. 인자 우선이므로 인자 없이 재시작해야 적용
메뉴 자체가 안 뜸 (헤드리스 모드) -p/--print로 실행 중이면 TUI 메뉴 불가. 일반 대화형 모드로 재시작
변경한 값이 새 세션에서 또 초기화됨 워크스페이스 .gemini/settings.json이 사용자 설정을 덮어쓰는 중. 우선순위 표 확인
화살표 키가 동작하지 않음 일부 멀티플렉서(예: tmux + 특정 키바인딩)와 충돌. 검색용 문자 입력으로 항목 필터 후 선택
📣 Google 공식 소개 : "Introducing Google Antigravity CLI" — 신규 도구의 디자인 철학·기능·로드맵 자세히 보기 →
Google Antigravity CLI 공식 소개 이미지
출처: https://antigravity.google/blog/introducing-google-antigravity-cli

오늘코드 Antigravity CLI 가이드 v1.0

Google의 Gemini 모델을 터미널에서 직접 활용하세요. 코드 이해, 작업 자동화, 워크플로우 구축을 위한 완벽 가이드입니다.

🚨 중요 공지 — Gemini CLI가 Antigravity CLI로 전환됩니다

Google이 2026년 5월 19일 공식 발표한 내용에 따르면, Gemini CLI는 후속 도구인 Antigravity CLI로 통합·이전됩니다. 이 가이드도 곧 Antigravity CLI 내용으로 확장될 예정입니다.

📅 주요 일정

날짜변경 사항
2026-05-19Antigravity CLI 전 사용자에게 공개. Gemini CLI도 당분간 병행
2026-06-18Gemini CLI 및 Gemini Code Assist IDE 확장 서비스 종료 — Google AI Pro·Ultra·무료 사용자 모두 요청 불가
2026-06-18 이후 수 주GitHub 확장 요청 서비스도 순차 종료

🆕 무엇이 달라지나

  • Go로 재작성 — Node.js 기반 Gemini CLI보다 응답 속도가 빠르고 가벼움
  • 비동기 워크플로우 — 여러 에이전트를 백그라운드에서 동시 실행
  • Antigravity 2.0 데스크톱 앱과 동일한 아키텍처 — 데스크톱·CLI 일관된 경험
  • 핵심 기능 유지 — 에이전트 스킬 / 훅 / 서브에이전트 / 확장(이제 "플러그인"으로 명칭 변경)
  • ⚠️ 출시 시점에는 완전한 1:1 기능 패리티 없음 — 일부 기능은 점진적 이식 예정

🎯 누가 영향을 받나

  • 영향 받음: Google AI Pro·Ultra 구독자, 무료 사용자, Code Assist 개인 사용자
  • 🛡️ 영향 받지 않음: 엔터프라이즈 유료 라이선스 보유 조직 (별도 안내)

🚀 마이그레이션

  1. Antigravity CLI 다운로드 → antigravity.google/download
  2. 마이그레이션 가이드 정독 → antigravity.google/docs/gcli-migration
  3. 커뮤니티·이슈 트래커 → github.com/google-antigravity/antigravity-cli
  4. 주요 변경점(설정 파일, 명령 이름, 확장 → 플러그인) 본인 환경에서 검증 후 6월 18일 전 전환

📝 이 가이드는 어떻게 되나

  • 당분간 Gemini CLI 내용 그대로 유지 — 6월 18일 전까지 학습·참고용으로 유효
  • Antigravity CLI 챕터를 별도 섹션으로 점진적 추가 (먼저 마이그레이션 가이드, 그다음 명령 매핑 표, 그다음 신기능)
  • 섹션마다 Gemini CLI / Antigravity 배지로 어느 도구 기준인지 명시 예정

👉 무료 사용자 요금제·전환 상세 가이드 보기

출처: Google Developers Blog — "An important update: Transitioning Gemini CLI to Antigravity CLI" (2026-05-19)

🚀

빠른 설치

npm 한 줄로 설치하고 바로 사용할 수 있습니다. Node.js 20 이상이면 충분합니다.

💻

터미널 네이티브

터미널을 떠나지 않고 AI와 대화하며 코드를 분석, 생성, 리팩토링할 수 있습니다.

🧠

프로젝트 컨텍스트

GEMINI.md로 프로젝트별 지시사항을 설정하면 더 정확한 응답을 받을 수 있습니다.

🔌

확장 가능

MCP 서버, 확장 프로그램, 에이전트 스킬로 기능을 무한히 확장할 수 있습니다.

🔒

안전한 실행

샌드박싱, 승인 모드, 훅으로 AI의 행동을 안전하게 제어합니다.

💰

무료 사용

Google 계정(OAuth)만 있으면 Gemini Code Assist 기반 무료 할당량으로 사용할 수 있습니다.

Gemini CLI란?

📐 Gemini CLI 아키텍처
💬 터미널 REPL
📄 GEMINI.md
⚙️ settings.json
🤖
Gemini CLI
에이전트 루프
(반복 실행 엔진)
🌐 Gemini API
🔌 MCP 서버
🗂️ 파일 시스템
⚡ 셸 명령

Gemini CLI는 Google의 Gemini AI 모델을 터미널에서 직접 사용할 수 있게 해주는 오픈소스 명령줄 도구입니다. 코드베이스를 이해하고, 파일을 편집하고, 셸 명령을 실행하며, 복잡한 개발 작업을 자동화할 수 있습니다.

📖 주요 용어 안내

이 문서에서 자주 사용되는 용어들을 먼저 정리합니다:

  • CLI (Command Line Interface) — 마우스 클릭 대신 키보드로 명령어를 입력하여 프로그램을 실행하는 방식입니다.
  • API (Application Programming Interface) — 프로그램끼리 서로 데이터를 주고받을 수 있게 해주는 통신 규약입니다. "API 키"는 이 통신에 필요한 인증 비밀번호와 비슷합니다.
  • MCP (Model Context Protocol) — AI가 외부 도구(슬랙, 데이터베이스 등)와 연동할 수 있게 해주는 표준 통신 규격입니다.
  • npm (Node Package Manager) — Node.js 프로그램을 설치하고 관리하는 도구입니다. 앱스토어에서 앱을 설치하는 것과 비슷합니다.
  • JSON (JavaScript Object Notation) — 데이터를 저장하거나 전달할 때 사용하는 텍스트 형식입니다. {"이름": "값"} 형태로 작성합니다.
  • IDE (Integrated Development Environment) — VS Code, IntelliJ 같은 코드 편집 프로그램을 말합니다. "통합 개발 환경"이라고도 합니다.
  • LLM (Large Language Model) — ChatGPT, Gemini처럼 자연어를 이해하고 생성하는 대규모 AI 모델입니다.
  • OAuth — "Google로 로그인" 같은 소셜 로그인 방식의 인증 표준입니다. 별도 비밀번호 없이 기존 계정으로 로그인할 수 있습니다.
💡 핵심 특징
  • 대규모 코드베이스 탐색 및 편집
  • 이미지나 PDF로부터 애플리케이션 생성
  • 복잡한 워크플로우 자동화
  • MCP 프로토콜을 통한 외부 도구 연동
  • Gemini 3 모델 지원 (프리뷰)

빠른 설치

Terminal
npm install -g @google/gemini-cli

설치 후 gemini 명령으로 바로 시작할 수 있습니다.

Terminal
gemini

개발 환경 설정

Gemini CLI를 사용하기 위해 필요한 개발 도구를 설치하세요. Node.js, Git, uv(Python 패키지 매니저)의 역할과 설치 방법을 안내합니다.

🧩 Gemini CLI 개발 환경 구성 요소
Node.js
⚙️
필수
Gemini CLI 런타임
npm 패키지 관리
Git
📦
권장
버전 관리
Worktree 기능
uv
🐍
필수
Python 패키지 관리
스크립트 실행 환경

Node.js — Gemini CLI의 핵심 런타임

💡 왜 Node.js가 필요한가요?

Gemini CLI는 JavaScript(Node.js) 기반으로 개발된 도구입니다. npm(Node Package Manager)을 통해 배포되며, CLI 실행 시 Node.js 런타임 위에서 동작합니다. 따라서 Node.js 20.0.0 이상이 반드시 설치되어 있어야 합니다.

설치 여부 확인

Terminal
node --version   # 예: v22.11.0 (20.0.0 이상이면 OK)
npm --version    # 예: 10.9.0

명령어가 인식되지 않거나(command not found) 버전이 20.0.0 미만이면 아래 방법으로 설치하세요.

🪟 Windows 트러블슈팅: Set-ExecutionPolicy 액세스 거부 오류

Windows PowerShell에서 node --version이나 npm --version을 실행할 때 다음과 같은 메시지가 나타날 수 있습니다:

오류 메시지 예시
Set-ExecutionPolicy : 레지스트리 키 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell'
에 대한 액세스가 거부되었습니다.
+ CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

이 오류는 Windows의 PowerShell 실행 정책(ExecutionPolicy)이 기본값 Restricted로 설정되어 있어 npm, nvm 등의 스크립트 실행이 차단되기 때문에 발생합니다. 시스템 전체(LocalMachine) 레지스트리는 일반 사용자가 변경할 수 없으므로, 아래 방법 중 하나로 해결하세요.

✅ 해결 방법 1: 현재 사용자 범위로 변경 (권장 · 관리자 권한 불필요)

가장 안전하고 간단한 방법입니다. 일반 PowerShell 창에서 다음을 실행하세요:

PowerShell
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

# 변경 확인
Get-ExecutionPolicy -Scope CurrentUser   # → RemoteSigned

현재 로그인한 사용자에게만 적용되며 시스템 전체는 영향받지 않습니다. RemoteSigned는 로컬 스크립트는 자유롭게 실행하고, 인터넷에서 다운로드한 스크립트는 디지털 서명이 있을 때만 실행하는 안전한 정책입니다.

✅ 해결 방법 2: 관리자 권한으로 PowerShell 실행 (시스템 전체 적용)

  1. 시작 메뉴에서 "PowerShell"을 검색
  2. "Windows PowerShell"을 마우스 오른쪽 클릭"관리자 권한으로 실행" 선택
  3. "이 앱이 디바이스를 변경할 수 있도록 허용하시겠어요?"에서 "예" 클릭
  4. 아래 명령 실행:
PowerShell (관리자)
Set-ExecutionPolicy RemoteSigned
# Y 입력 후 Enter

✅ 해결 방법 3: 일회성 우회 (정책 변경 없이 실행)

정책을 영구적으로 바꾸지 않고 한 번만 우회하고 싶을 때 사용합니다. 단축 실행 형태로 자주 쓰이는 패턴입니다:

PowerShell
# 단일 명령 우회 실행
powershell -ExecutionPolicy Bypass -Command "node --version"

# 한 세션 동안만 우회
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

💡 대안: 다른 터미널 사용

PowerShell 정책을 건드리고 싶지 않다면, 다음 터미널에서는 이 오류가 발생하지 않습니다:

  • 명령 프롬프트(cmd.exe) — 실행 정책 영향을 받지 않음
  • Git Bash — Git for Windows 설치 시 함께 제공
  • Windows Terminal + cmd 또는 WSL 프로필
  • WSL2 (Ubuntu 등) — 리눅스 환경에서 Node.js 사용 (개발자에게 권장)

참고: 위 방법으로 해결되지 않으면 회사 PC의 그룹 정책(Group Policy)으로 막혀있을 가능성이 큽니다. 이 경우 IT 담당자에게 문의하거나 WSL2 사용을 검토하세요. 자세한 내용은 Microsoft PowerShell 실행 정책 공식 문서를 참고하세요.

설치 방법

방법플랫폼특징추천 대상
공식 사이트전체설치 프로그램으로 간편 설치입문자
nvmmacOS / Linux여러 버전 설치·전환 가능개발자 (권장)
nvm-windowsWindowsWindows용 Node 버전 관리자Windows 개발자
HomebrewmacOSbrew install nodeHomebrew 사용자
패키지 매니저Linuxapt, dnf 등 시스템 패키지 관리자서버 환경

방법 1: 공식 사이트 (가장 간단 — 추천)

https://nodejs.org에서 LTS(장기 지원) 버전을 다운로드하여 설치합니다. Node.js와 npm이 함께 설치됩니다.

처음 사용하시면 방법 1만 따라하세요. 아래 방법 2·3은 여러 Node 버전을 다뤄야 하거나 패키지 매니저를 선호하는 사용자를 위한 옵션입니다.

방법 2: nvm — 여러 Node 버전 관리가 필요할 때
Terminal (macOS / Linux)
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

# 터미널 재시작 후
nvm install --lts
nvm use --lts
Terminal (Windows — nvm-windows)
# nvm-windows 설치 후 (https://github.com/coreybutler/nvm-windows/releases)
nvm install lts
nvm use lts
방법 3: 패키지 매니저 (Homebrew / apt / Chocolatey)
Terminal (macOS — Homebrew)
brew install node
Terminal (Ubuntu / Debian)
# NodeSource 저장소 추가 (최신 LTS: Node.js 22.x 기준)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
Terminal (Windows — Chocolatey)
choco install nodejs-lts
⚠️ 주의

Node.js 버전이 20.0.0 미만이면 Gemini CLI 설치 시 오류가 발생합니다. nvm install --lts 또는 공식 사이트에서 최신 LTS 버전을 설치하세요.

Git — 버전 관리 및 Worktree 지원

💡 왜 Git이 필요한가요?

Git은 코드 버전 관리 시스템입니다. Gemini CLI는 Git이 있으면 다음 기능을 사용할 수 있습니다:

  • Git Worktree: gemini -w로 독립된 브랜치에서 AI가 안전하게 코드 변경
  • 체크포인팅: 파일 변경 전 자동 스냅샷 저장, 이전 상태로 되돌리기
  • Diff 기반 작업: AI가 변경사항을 정확하게 추적하고 리뷰
  • 브랜치 관리: 기능 개발, 버그 수정 등을 독립적으로 관리

Git 없이도 Gemini CLI를 사용할 수 있지만, 위 기능들이 비활성화되므로 설치를 강력히 권장합니다.

설치 여부 확인

Terminal
git --version   # 예: git version 2.43.0

설치 방법

플랫폼설치 방법명령어 / 링크
macOSXcode CLI Tools (별도 설치 필요)xcode-select --install
macOSHomebrewbrew install git
WindowsGit for Windowsgit-scm.com/download/win
WindowsChocolateychoco install git
Windowswingetwinget install --id Git.Git
Ubuntu / Debianaptsudo apt install git
Fedora / RHELdnfsudo dnf install git

설치 후 초기 설정

Git을 처음 설치했다면 사용자 정보를 설정하세요. 이 정보는 커밋 기록에 포함됩니다.

Terminal
# 사용자 이름과 이메일 설정
git config --global user.name "이름"
git config --global user.email "email@example.com"

# 설정 확인
git config --list
✅ Git 공식 문서

자세한 사용법은 Git 공식 문서 또는 Pro Git 한국어 번역을 참고하세요.

uv — 초고속 Python 패키지 매니저

💡 왜 uv가 필요한가요?

uv는 Rust로 작성된 초고속 Python 패키지 매니저로, pip 대비 최대 수십 배 빠른 설치 속도를 자랑합니다. Gemini CLI와 함께 Python 스크립트를 작성하고 실행할 때, 복잡한 환경 설정 없이 의존성을 간편하게 관리할 수 있습니다.

  • Python 스크립트 개발: uv run script.py 한 줄로 가상환경 생성부터 의존성 설치, 실행까지 자동 처리
  • 데이터 분석 · 자동화: pandas, matplotlib, requests 등 Python 라이브러리를 빠르게 설치하고 Gemini CLI와 연동
  • 프로젝트 의존성 관리: uv init / uv add로 재현 가능한 Python 환경을 손쉽게 구성
  • MCP 서버 실행 (선택): Python으로 작성된 MCP 서버를 uvx로 별도 설치 없이 즉시 실행 가능

Python 스크립트를 자주 작성하거나 데이터 분석 도구와 함께 Gemini CLI를 활용할 계획이라면 uv 설치를 강력히 권장합니다.

설치 여부 확인

Terminal
uv --version   # 예: uv 0.6.12

설치 방법

플랫폼설치 방법명령어
macOS / Linux공식 설치 스크립트curl -LsSf https://astral.sh/uv/install.sh | sh
Windows공식 설치 스크립트powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
macOSHomebrewbrew install uv
전체pip (기존 Python 있을 때)pip install uv
전체pipx (격리 설치)pipx install uv

macOS / Linux 설치

Terminal
# 공식 설치 스크립트 (권장)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 설치 후 셸 재시작 또는
source $HOME/.local/bin/env

Windows 설치

PowerShell
# 공식 설치 스크립트
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

uv로 Python MCP 서버 실행하기 선택 · 예시 · 건너뛰어도 됨

🛑 잠깐! 이 섹션은 읽지 않고 건너뛰어도 됩니다

아래 MCP 설정은 "이런 식으로 활용할 수도 있다"는 예시일 뿐, Gemini CLI를 시작하기 위한 필수 절차가 절대 아닙니다.

MCP(Model Context Protocol) 서버는 Slack, GitHub, 데이터베이스 같은 외부 서비스를 AI에 연결하는 고급 부가 기능입니다. 처음 Gemini CLI를 설치하는 단계에서는 신경 쓸 필요가 없으며, 다음 조건을 모두 만족할 때 비로소 고려하면 됩니다:

  • Gemini CLI 기본 기능(파일 편집, 셸 실행 등)을 충분히 사용해본 뒤
  • "이 외부 도구를 AI가 직접 다루게 하고 싶다"는 구체적인 필요가 생겼을 때
  • 해당 외부 서비스의 MCP 서버가 실제로 존재하고, 그것이 Python 기반일 때
⏭ 다음 단계: Gemini CLI 설치하러 가기 📚 나중에 MCP가 궁금해지면 →
📌 그래도 이 섹션을 읽고 싶다면

다음과 같은 분에게 도움이 됩니다:

  • uv가 Gemini CLI 생태계와 어떻게 연결되는지 큰 그림이 궁금한 분
  • Python 기반 MCP 서버를 이미 사용해 본 경험이 있는 분
  • 설정 파일(settings.json) 구조를 미리 한번 훑어보고 싶은

⚠️ 다시 강조: 아래 코드는 "보기만 하는 예시"이며, 직접 입력해 실행할 필요는 없습니다.

↓ 아래 코드 블록은 참고용 예시입니다. 지금 따라 입력하지 마세요.

Terminal — 참고용 예시 (실행 X)
# [예시] Python으로 작성된 MCP 서버를 등록하는 한 가지 방법
# 실제로는 사용하려는 MCP 서버에 따라 명령이 완전히 달라집니다.
# 그리고 대부분의 MCP 서버는 Node.js(npx)로 실행되므로 uv 없이도 충분합니다.
gemini mcp add filesystem uvx mcp-server-filesystem /path/to/dir

# [예시] settings.json 직접 설정 — 동일한 결과
# "mcpServers": {
#   "filesystem": {
#     "command": "uvx",
#     "args": ["mcp-server-filesystem", "/path/to/dir"]
#   }
# }
✅ uv 공식 문서

uv 자체에 대한 자세한 사용법은 uv 공식 문서를 참고하세요. GitHub 저장소에서 최신 릴리스를 확인할 수 있습니다.

전체 환경 검증

모든 도구가 설치되었는지 한 번에 확인하세요.

Terminal
# 필수: Node.js 20+ 확인
node --version

# 필수: npm 확인
npm --version

# 권장: Git 확인
git --version

# 권장: uv 확인 (Python 스크립트 개발 · MCP 서버 실행은 선택)
uv --version
✅ 환경 설정 완료 체크리스트

각 항목을 설치 완료하면 체크하세요. 진행 상황이 자동 저장됩니다.

모든 항목 확인 후 → Gemini CLI 설치로 이동

IDE 익스텐션

VS Code, Antigravity, Cursor, Windsurf 등 VS Code 계열 IDE에서 Gemini CLI를 IDE와 연동하세요.

Gemini CLI Companion 익스텐션이란?

gemini-cli-vscode-ide-companion(게시자: Google)은 통합 터미널에서 실행 중인 Gemini CLI에 현재 IDE의 컨텍스트를 자동으로 공유해주는 공식 확장입니다. 사용자가 매번 파일 경로를 복사·붙여넣기 하거나 코드를 인용하지 않아도, Gemini CLI가 IDE에서 열린 파일·선택 영역·커서 위치를 인식하고 변경 사항을 IDE의 diff 뷰어로 보여줍니다.

💡 두 가지가 모두 필요합니다

이 확장은 Gemini CLI의 대체품이 아닙니다. CLI 자체는 npm으로 별도 설치해야 하며, 익스텐션은 IDE ↔ CLI 사이의 컨텍스트 브리지 역할을 합니다.

지원 IDE

VS Code 1.99.0 이상의 API를 사용하는 IDE에서 동작합니다.

IDE설치 경로비고
VS CodeVS Code Marketplace 또는 Open VSX1차 지원
Google AntigravityOpen VSXVS Code 포크 — Open VSX 레지스트리 사용
CursorOpen VSXVS Code 포크
WindsurfOpen VSXVS Code 포크
VSCodiumOpen VSX오픈소스 빌드
⚠️ Antigravity / Cursor / Windsurf 사용자 주의

이들은 라이선스 문제로 VS Code Marketplace에 직접 접근할 수 없으며 Open VSX 레지스트리를 사용합니다. 따라서 익스텐션 검색 시 결과가 보이지 않으면 Open VSX 페이지에서 .vsix 파일을 받아 수동 설치하거나, IDE의 익스텐션 탭에서 Google.gemini-cli-vscode-ide-companion을 검색하세요.

주요 기능

기능설명
편집기 파일 인식현재 IDE에서 열린 탭 목록을 Gemini CLI에 자동 전달. 프로젝트 구조를 더 정확히 이해합니다.
선택 영역 컨텍스트사용자가 드래그한 코드 블록과 커서 위치가 자동으로 프롬프트 컨텍스트에 포함됩니다.
네이티브 Diff 뷰어AI가 제안한 변경을 터미널 텍스트가 아닌 IDE의 좌·우 분할 diff로 확인·수정·승인할 수 있습니다.
Command Palette 통합Cmd/Ctrl+Shift+PGemini CLI: Run으로 통합 터미널에서 새 세션을 시작합니다.

요구사항

설치 방법

1. VS Code에서 설치

가장 간단한 방법입니다.

  1. 왼쪽 사이드바의 익스텐션 아이콘 클릭 (또는 Cmd/Ctrl+Shift+X)
  2. 검색창에 Gemini CLI 입력
  3. 게시자가 GoogleGemini CLI Companion 선택 → Install

2. Antigravity / Cursor / Windsurf / VSCodium에서 설치 (Open VSX)

이 IDE들은 Open VSX를 기본 마켓플레이스로 사용합니다. 익스텐션 탭에서 검색하면 같은 결과가 나오지만, 보이지 않을 경우 다음 방법을 사용합니다.

방법 A — IDE 내 검색
# 익스텐션 탭에서 정확한 ID로 검색
Google.gemini-cli-vscode-ide-companion
방법 B — VSIX 수동 설치
# 1. https://open-vsx.org/extension/Google/gemini-cli-vscode-ide-companion 에서
#    "Download" 버튼으로 .vsix 파일 다운로드

# 2. 명령행에서 설치 (각 IDE의 CLI 명령 사용)
code --install-extension gemini-cli-vscode-ide-companion-*.vsix       # VS Code
cursor --install-extension gemini-cli-vscode-ide-companion-*.vsix     # Cursor
windsurf --install-extension gemini-cli-vscode-ide-companion-*.vsix   # Windsurf
# Antigravity는 GUI에서 익스텐션 패널 → "..." 메뉴 → "Install from VSIX..." 선택

3. Gemini CLI 자동 설치 트리거

VS Code 계열 IDE의 통합 터미널에서 처음 gemini를 실행하면, CLI가 IDE를 감지하고 익스텐션 설치를 안내합니다. 또한 CLI 내부 슬래시 명령으로도 설치할 수 있습니다.

Gemini CLI 내부
/ide install      # 현재 IDE에 맞는 companion 익스텐션 자동 설치
/ide status       # 연결 상태 확인
/ide enable       # IDE 모드 켜기 (기본값)
/ide disable      # IDE 모드 끄기 (컨텍스트 공유 중단)

사용법

  1. IDE의 통합 터미널을 엽니다 (Ctrl+`)
  2. gemini 실행 — 익스텐션이 활성 상태면 우측 상태바 또는 첫 응답에 IDE 연결 표시가 나옵니다
  3. 편집기에서 코드를 선택한 뒤 프롬프트 작성 — 선택 영역이 자동으로 컨텍스트에 포함됩니다
  4. AI가 파일 수정을 제안하면 IDE의 diff 뷰어가 열립니다 — 라인별로 승인/거부 가능

설정 및 문제 해결

증상해결 방법
익스텐션이 검색 결과에 안 보임 (Antigravity/Cursor)마켓플레이스가 Open VSX인지 확인. 안 되면 VSIX 수동 설치.
CLI가 IDE를 감지하지 못함CLI를 IDE의 통합 터미널에서 실행했는지 확인. 외부 터미널은 미지원.
diff 뷰어가 안 열림/ide status로 연결 확인 → 끊겨 있으면 /ide enable
버전 불일치 경고익스텐션과 CLI 버전을 함께 최신으로 업데이트 (npm i -g @google/gemini-cli@latest)
💬 에이전트에게 이렇게 요청하세요
프롬프트
> 현재 IDE(VS Code/Antigravity/Cursor)에 Gemini CLI Companion 익스텐션이 설치되어 있는지 확인하고, 없으면 /ide install로 설치해줘. 설치 후 /ide status로 연결 상태를 보고해줘.

빠른 시작

설치부터 첫 번째 대화까지 5분 안에 시작해보세요.

🚀 5분 빠른 시작 흐름
① 설치
npm install -g
② 실행
gemini
③ 로그인
Google 계정
④ 질문
자연어 입력
✅ 완료
AI와 대화 시작

단계별 가이드

Gemini CLI 설치

Terminal
npm install -g @google/gemini-cli

대화형 세션 시작

프로젝트 디렉토리로 이동한 후 gemini를 실행합니다.

Terminal
cd my-project
gemini

Google 계정으로 로그인

처음 실행 시 "Sign in with Google"을 선택하면 브라우저가 열립니다. 로그인하면 인증 정보가 로컬에 캐시됩니다.

첫 번째 질문하기

프롬프트가 나타나면 자연어로 질문을 입력합니다.

Gemini CLI
> 이 프로젝트의 구조를 설명해줘
> README.md를 요약해줘
> src/ 폴더에서 TODO 주석을 찾아줘

기본 사용 패턴

대화형 모드 (기본)

Terminal
# 대화형 REPL 시작
gemini

# 초기 프롬프트와 함께 시작
gemini "이 프로젝트에 대해 설명해줘"
📖 REPL이란?

REPLRead-Eval-Print Loop의 약자로, "입력을 읽고(Read) → 실행하고(Eval) → 결과를 출력하고(Print) → 다시 반복(Loop)하는" 대화형 환경을 뜻합니다. 쉽게 말해, 터미널에서 한 줄씩 명령을 입력하면 바로 응답을 받을 수 있는 실시간 대화 모드입니다. gemini를 입력하면 REPL이 시작되고, 질문을 입력할 때마다 AI가 즉시 답변합니다.

비대화형 모드 (일회성 질문)

Terminal
# 질문 후 바로 종료
gemini -p "README.md를 요약해줘"

# 파이프와 함께 사용
cat error.log | gemini -p "이 에러 로그를 분석해줘"

대화형 + 프롬프트

Terminal
# 프롬프트 실행 후 REPL 유지
gemini -i "프로젝트 구조를 분석해줘"
✅ 팁: 승인 모드 (--approval-mode)

파일 수정이나 셸 명령 실행 시 Gemini CLI는 사용자의 승인을 요청합니다. --approval-mode 플래그로 이 동작을 제어할 수 있습니다:

  • default — 기본값. 모든 도구 실행 전 사용자 승인을 요청합니다.
  • auto_edit — 파일 편집은 자동 승인하되, 셸 명령 등은 승인을 요청합니다.
  • yolo — 모든 작업을 자동 승인합니다. 신뢰할 수 있는 환경에서만 사용하세요.
  • plan — 읽기 전용 플랜 모드로 시작합니다. 파일 수정 없이 계획만 세울 수 있습니다.
Terminal
# 모든 작업 자동 승인 (주의해서 사용)
gemini --approval-mode=yolo

# 파일 편집만 자동 승인
gemini --approval-mode=auto_edit

--yolo / -y 플래그는 deprecated(더 이상 권장되지 않는, 향후 제거 예정) 상태입니다. 대신 --approval-mode=yolo를 사용하세요. 자세한 내용은 CLI 레퍼런스 공식 문서를 참고하세요.

인증 설정

Gemini CLI에서 사용할 수 있는 인증 방법과 설정 방법을 알아봅니다.

🔐 인증 방식 비교
👤
Google 개인 계정
무료 · 하루 1,000건
Gemini Code Assist 개인 티어
즉시 사용 가능
🔑
Gemini API Key
AI Studio에서 발급
GEMINI_API_KEY 환경변수
개인 프로젝트용
☁️
Vertex AI
Google Cloud 기반
엔터프라이즈 용도
gcloud ADC 사용

인증 방법 전환: `/auth` 명령

REPL 내에서 /auth 명령을 입력하면 OAuth / API Key / Vertex AI 등 인증 방법을 대화형으로 전환할 수 있습니다. 새 방법을 선택하면 필요한 브라우저 로그인 또는 환경 변수 확인을 진행합니다.

Gemini CLI
/auth

인증 방법

1. Google 계정으로 로그인 (권장)

가장 간단한 방법입니다. gemini를 실행하고 "Sign in with Google"을 선택하면 브라우저를 통해 로그인이 진행됩니다. 인증 정보는 로컬에 캐시되어 이후 세션에서 자동으로 사용됩니다.

2. Gemini API 키

Google AI Studio에서 API 키를 발급받아 환경 변수로 설정합니다.

Terminal
export GEMINI_API_KEY="your-api-key-here"
⚠️ 보안 주의

API 키는 민감한 자격 증명입니다. 코드 저장소에 직접 커밋하지 마세요.

3. Vertex AI

Google Cloud 프로젝트를 통한 인증으로, 세 가지 방법을 지원합니다:

Vertex AI 인증 시 다음 환경 변수도 설정이 필요합니다:

Terminal (macOS/Linux)
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="us-central1"

Google Cloud 프로젝트 설정

다음에 해당하는 경우 Google Cloud 프로젝트 설정이 필요합니다:

Terminal
# 환경 변수로 프로젝트 설정 (공식: GOOGLE_CLOUD_PROJECT)
export GOOGLE_CLOUD_PROJECT="my-project-id"

환경 변수 영구 저장

두 가지 방법으로 환경 변수를 영구적으로 저장할 수 있습니다.

방법 1: 셸 설정 파일

~/.zshrc 또는 ~/.bashrc
export GEMINI_API_KEY="your-api-key-here"
export GOOGLE_CLOUD_PROJECT="my-project-id"

방법 2: .gemini/.env 파일

현재 디렉토리에서 상위로 탐색하며 첫 번째로 발견된 .gemini/.env 파일을 로드합니다. 홈 디렉토리의 ~/.gemini/.env도 지원됩니다.

⚠️ 주의: 파일은 병합되지 않음

여러 위치에 .gemini/.env 파일이 있을 경우, 처음 발견된 파일만 로드됩니다. 파일들이 병합되지 않습니다.

.gemini/.env
GEMINI_API_KEY=your-api-key-here
GOOGLE_CLOUD_PROJECT=my-project-id
💡 자동 인증 환경
  • Google Cloud Shell: Cloud Shell 자격 증명 자동 사용
  • Compute Engine: 메타데이터 서버의 ADC 자동 적용
  • Headless 모드: 사전 캐시된 자격 증명 또는 환경 변수 필요

CLI 치트시트

자주 사용하는 명령어와 옵션을 한눈에 확인하세요.

기본 명령어

명령어설명예시관련 문서
gemini대화형 REPL 시작gemini빠른 시작
gemini -p "질문"비대화형 질문gemini -p "README 요약해줘"헤드리스 모드
gemini "질문"질문 후 REPL 유지gemini "프로젝트 설명해줘"
gemini -i "질문"프롬프트 실행 후 REPLgemini -i "구조 분석해줘"
cat 파일 | gemini파이프 입력 처리cat logs.txt | gemini헤드리스 모드
gemini --resume가장 최근 세션 이어서gemini -r 1 또는 gemini --resume <UUID>체크포인팅
gemini update최신 버전으로 업데이트gemini update설치

주요 옵션

옵션단축설명관련 문서
--model-m사용할 모델 지정모델 선택
--prompt-p비대화형 프롬프트헤드리스 모드
--prompt-interactive-i프롬프트 + REPL 유지
--sandbox-s샌드박스 모드 실행샌드박싱
--yolo-yDeprecated. 모든 액션 자동 승인. --approval-mode=yolo 사용 권장CLI 레퍼런스
--worktree-wGit worktree에서 실행 (요구사항: settings.json에 experimental.worktrees: true)Git Worktrees
--skip-trust현재 세션 동안만 워크스페이스 신뢰 — 폴더 신뢰 확인 건너뛰기신뢰 폴더
--allowed-toolsDeprecated. 정책 엔진 사용 권장. 승인 없이 실행 가능한 도구 목록정책 엔진
--debug-d디버그 모드 (상세 로깅)텔레메트리
--resume-r이전 세션 재개. "latest", 세션 ID, 또는 인덱스 번호(예: --resume 5) 사용체크포인팅
--list-sessions현재 프로젝트의 사용 가능한 세션 목록 표시 후 종료
--delete-session인덱스 번호로 세션 삭제 (--list-sessions로 확인)
--approval-mode승인 모드: default(기본), auto_edit(편집 자동승인), yolo(전체 자동승인), plan(읽기 전용)CLI 레퍼런스
--output-format-o출력 형식: text, json, stream-json헤드리스 모드
--extensions-e사용할 확장 프로그램 지정확장 프로그램
--screen-reader접근성 모드 활성화
--list-extensions-l설치된 확장 프로그램 목록 표시 후 종료확장 프로그램
--include-directories추가로 포함할 워크스페이스 디렉토리 (쉼표 구분 또는 다중 플래그)
--allowed-mcp-server-names허용할 MCP 서버 이름 (필터링)MCP 서버
--acpACP(Agent Client Protocol) 모드 실행 (별칭: --experimental-acp)
--experimental-zed-integrationZed 에디터 통합 모드 (실험적)
--version-vCLI 버전 표시 후 종료
--help-h도움말 표시

REPL 내부 명령어

REPL(대화형 모드)에서 사용할 수 있는 슬래시(/) 명령어입니다. gemini를 실행한 후 아래 명령어를 입력하세요.

명령어설명관련 문서
/help 또는 /?도움말 표시
/quit 또는 /exit세션 종료
/clear터미널 화면 + 가시 세션 비우기 (Ctrl+L 단축키)
/about버전 정보 표시 (이슈 작성 시 공유)
/bug [메시지]이슈 작성 (커스텀: advanced.bugCommand로 사내 트래커로 변경 가능)
/copy마지막 출력을 클립보드로 복사 (플랫폼 클립보드 도구 필요)
/docs공식 문서를 브라우저로 열기
/editor외부 편집기 선택 다이얼로그
/init현재 디렉토리 분석 후 GEMINI.md 자동 생성GEMINI.md
/auth인증 방법 변경 다이얼로그인증 설정
/settings설정 에디터 열기 (대화형)
/themeUI 테마 변경 다이얼로그테마
/privacy개인정보 안내 + 텔레메트리 옵트인/아웃
/policies list모드별 활성 정책 목록정책 엔진
/permissions trust [경로]폴더 신뢰 설정 관리신뢰 폴더
/directory add <경로> · show워크스페이스 디렉토리 관리 (별칭: /dir)
/tools [desc|nodesc]사용 가능 도구 목록 (설명 포함/생략)
/vimVim 키바인딩 모드 토글 (NORMAL/INSERT)
/shells 또는 /bashes백그라운드 프로세스 대시보드 토글 — 로그 확인, 폭주 프로세스 종료(kill)
/terminal-setup멀티라인 입력용 터미널 키바인딩 구성 (VS Code 등)
/setup-githubGitHub Actions로 이슈 트리아지/PR 리뷰 자동화 설정
/upgradeGemini Code Assist 업그레이드 페이지 (Google 로그인 시만)
/restore [tool_call_id]도구 호출 직전 상태로 파일 복원 (체크포인팅 활성 시만)체크포인팅
/rewind대화 이력/파일 변경 되감기 (Esc 두 번)되감기
/compress채팅 컨텍스트를 요약으로 대체 (토큰 절약)
/model모델 선택 다이얼로그 열기모델 선택
/memory refreshGEMINI.md 등 컨텍스트 파일 다시 로드GEMINI.md
/memory show현재 컨텍스트 내용 표시GEMINI.md
/memory add <텍스트>글로벌 GEMINI.md에 텍스트 추가GEMINI.md
/skills reload디스크에서 발견된 에이전트 스킬 다시 로드에이전트 스킬
/commands reload커스텀 슬래시 명령 다시 로드 (TOML 파일 변경 후)
/agents list등록된 에이전트 목록에이전트 스킬
/agents reload (별칭: refresh)에이전트 디렉토리 재스캔 (~/.gemini/agents, .gemini/agents)에이전트 스킬
/agents enable <이름> / disable에이전트 활성화/비활성화
/agents config <이름>에이전트 설정 관리
/mcp reloadMCP 서버 재시작MCP 서버
/extensions list설치된 확장 프로그램과 상태 확인 (REPL 내부)확장 프로그램
/extensions restart모든 확장 프로그램 재시작확장 프로그램
/stats session현재 세션 통계
/stats model모델별 토큰 사용량 확인토큰 캐싱
/stats tools도구 호출 통계
/hooks list설정된 훅 목록 표시 (별칭: /hooks show, /hooks panel)훅 (Hooks)

@ 명령 (파일/디렉토리 컨텍스트 주입)

프롬프트에 @로 시작하는 경로를 넣으면 해당 파일/디렉토리 내용이 즉시 프롬프트에 포함됩니다. 내부적으로 read_many_files 도구를 사용합니다.

예시
# 단일 파일
@src/components/UserProfile.tsx 이 컴포넌트 설명해줘

# 여러 파일 체이닝
@src/types/User.ts @src/api/users.ts 두 파일이 일관성 있는지 확인해줘

# 디렉토리 전체
@src/utils/ 이 유틸리티들 deprecated API 쓰는지 확인해줘

# 공백 이스케이프
@My\ Documents/notes.md 요약해줘

# 외로운 @ — 그대로 모델로 전달
이 코드의 @ 심볼은 무엇을 의미하나?

하네스 엔지니어링 (Harness Engineering)

LLM을 단순 호출하는 것을 넘어, "에이전트가 살아 움직이는 환경"을 설계하는 기술. Gemini CLI를 진짜 생산성 도구로 만드는 핵심 사고방식입니다.

하네스(Harness)란 무엇인가?

하네스(harness)는 원래 "마구(馬具)" — 말을 마차에 연결하는 가죽 끈을 뜻합니다. 소프트웨어에서는 "무언가를 통제 가능하게 묶어두는 장치"를 의미하며, AI 분야에서는 LLM을 둘러싼 실행 루프 + 도구 + 컨텍스트 + 안전장치의 총합을 가리킵니다.

같은 모델(예: Gemini 3 Pro)을 사용해도, 하네스가 어떻게 설계되었느냐에 따라 결과물의 품질이 10배 이상 차이가 납니다. 하네스 엔지니어링은 바로 이 차이를 만드는 작업입니다.

💡 비유: 같은 엔진, 다른 자동차

모델이 "엔진"이라면, 하네스는 "차체·서스펜션·브레이크·계기판"입니다. 엔진이 좋아도 차체가 부실하면 멈추거나 폭주합니다. 반대로 평범한 엔진이라도 잘 짜인 차체 위에 얹으면 안정적이고 강력해집니다.

왜 Gemini CLI에서 중요한가?

Gemini CLI는 단순한 챗봇이 아니라 파일을 수정하고, 셸 명령을 실행하고, 외부 API를 호출하는 자율 에이전트입니다. 이런 에이전트가 안전하고 일관되게 동작하려면 다음 질문에 답할 수 있어야 합니다:

Gemini CLI는 이 질문들에 대응하는 9개 레이어의 하네스 컴포넌트를 제공합니다.

Gemini CLI 하네스의 9개 레이어

#레이어역할주요 도구
1 컨텍스트(Context) 모델에게 프로젝트와 도메인 지식을 주입 GEMINI.md, /memory, memport
2 모델(Model) 작업 난이도에 맞는 모델 선택과 라우팅 모델 선택, 라우팅, 스티어링
3 도구(Tools) 모델이 외부 세계와 상호작용하는 통로 내장 도구, MCP 서버, 커스텀 명령
4 권한·안전(Safety) 위험한 작업을 차단하거나 사람 확인을 거치게 함 샌드박스, --approval-mode, 신뢰 폴더, 정책 엔진
5 제어 흐름(Control Flow) "먼저 계획하고, 그 다음 실행" 같은 단계 분리 플랜 모드, Todo 플래닝, 훅(Hooks)
6 모듈화(Modularity) 큰 문제를 작은 전문 에이전트로 분해 에이전트 스킬, 서브 에이전트, 원격 에이전트, 확장
7 상태·복구(State & Recovery) 실패 시 복구, 긴 세션의 일관성 유지 체크포인팅, 되감기, 세션, 토큰 캐싱
8 실행 환경(Runtime) 대화형/배치, 격리, 병렬화 헤드리스, Git Worktree, IDE 통합, ACP
9 관측(Observability) 무엇이 실행됐고 왜 실패했는지 추적 텔레메트리, JSON 출력, 알림

레이어를 직관적으로 이해하기

아래는 사용자가 "이 함수 리팩터링해줘"라고 입력했을 때, 9개 레이어가 차례로 작동하는 과정입니다:

사용자 입력
    │
    ▼
[1. 컨텍스트] ──── GEMINI.md 로드, 메모리 병합, 코드 스타일 주입
    │
    ▼
[2. 모델]    ──── 라우터가 작업 복잡도 판단 → Gemini 3 Pro 선택
    │
    ▼
[5. 제어]    ──── Plan Mode면 먼저 계획만, 일반 모드면 바로 실행
    │
    ▼
[6. 모듈화]  ──── "리팩터링" 스킬/서브에이전트가 있으면 위임
    │
    ▼
[3. 도구]    ──── read_file → edit → run_shell_command(테스트)
    │
    ▼
[4. 안전]    ──── 각 도구 호출마다 approval-mode/sandbox/policy 검사
    │
    ▼
[7. 상태]    ──── 변경 전 자동 체크포인트 저장 → 실패 시 /rewind
    │
    ▼
[9. 관측]    ──── 텔레메트리에 도구 호출, 토큰 사용량, 실패 기록

실전 튜닝 레시피

레시피 1: "처음 보는 레거시 프로젝트" 하네스

모델이 코드를 마구 수정하지 않고, 먼저 이해하고 계획부터 세우게 만드는 설정입니다.

Terminal
# 읽기 전용으로 시작 → 안전하게 탐색
gemini --approval-mode=plan -m gemini-3-pro

# 계획이 마음에 들면 Shift+Tab으로 일반 모드 전환

+ GEMINI.md"먼저 코드 구조를 파악하고 변경 계획을 제시한 뒤, 사용자 승인 후 수정"이라는 메타 지침을 넣으면 더 안정적입니다.

레시피 2: "신뢰할 수 있는 작업 자동화" 하네스

CI 파이프라인이나 새벽 자동 작업 등, 사람이 지켜보지 않는 환경에서 동작하는 설정입니다.

Terminal
# 격리된 컨테이너 + 자동 승인 + JSON 출력으로 로그 수집
gemini \
  --sandbox \
  --approval-mode=yolo \
  --output-format=json \
  --prompt "오늘 머지된 PR을 요약해서 release-notes.md 업데이트해줘"
⚠️ 주의: yolo는 반드시 sandbox와 함께

--approval-mode=yolo를 단독으로 쓰면 호스트 시스템에 위험한 명령이 실행될 수 있습니다. --sandbox로 격리하거나, 정책 엔진으로 허용 도구를 명시적으로 제한하세요.

레시피 3: "큰 작업을 작게 쪼개기" 하네스

한 에이전트에게 거대한 작업을 시키지 말고, 전문 서브에이전트에게 위임하는 패턴입니다.

~/.gemini/agents/code-reviewer.md
---
name: code-reviewer
description: 코드 변경 사항을 보안·성능·가독성 관점에서 리뷰
tools: read_file, run_shell_command(git diff:*)
---
당신은 시니어 엔지니어입니다. diff를 받으면 다음 순서로 리뷰합니다:
1. 보안 이슈 (SQL injection, XSS, 인증)
2. 성능 핫스팟
3. 테스트 커버리지
한국어로 답하되, 코드 스니펫은 그대로 인용하세요.

메인 에이전트는 code-reviewer 서브에이전트에게 이 PR 리뷰 부탁해처럼 위임만 하면 됩니다. 컨텍스트가 분리되어 메인 세션의 토큰을 절약하고, 전문성도 높아집니다.

레시피 4: "되돌릴 수 있는 실험" 하네스

위험한 변경을 시도하기 전, 안전망을 깔아두는 설정입니다.

  1. Git Worktree로 별도 브랜치에서 작업: gemini --worktree feat/experiment
  2. 체크포인팅 활성화: settings.json"checkpointing": { "enabled": true }
  3. 으로 위험 명령 차단: PreToolUse 훅에서 rm -rf / 같은 패턴 거부
  4. 실패하면 /rewind로 직전 도구 호출 취소

안티패턴 (피해야 할 설정)

안티패턴왜 나쁜가대안
매 세션 GEMINI.md 없이 시작 매번 같은 지침을 입력 → 토큰 낭비, 일관성 깨짐 프로젝트 루트에 GEMINI.md 작성
모든 작업에 --approval-mode=yolo 되돌릴 수 없는 파괴적 명령 위험 auto_edit 기본 + 셸은 매번 승인
한 세션에 모든 컨텍스트 욱여넣기 토큰 낭비, 모델 주의 분산, 캐시 무효화 서브에이전트/스킬로 분리
훅 없이 위험 명령 허용 git push --force, DROP TABLE 등이 그냥 실행됨 PreToolUse 훅으로 패턴 차단
관측(텔레메트리) 비활성화 + 무한 루프 토큰을 다 쓰고도 무엇이 잘못됐는지 모름 로컬 텔레메트리 활성화 + 토큰 한도 설정

측정 가능한 하네스 품질 지표

좋은 하네스는 "감"이 아니라 숫자로 검증할 수 있습니다. 아래 지표를 주기적으로 추적하세요:

💬 에이전트에게 이렇게 요청하세요

현재 프로젝트의 하네스 상태를 점검하고 싶다면:

프롬프트
> 이 프로젝트의 GEMINI.md, .gemini/settings.json, .gemini/hooks/, .gemini/agents/, .gemini/skills/ 파일을 모두 읽고
"하네스 엔지니어링" 9개 레이어 관점에서 부족한 부분을 표로 정리해줘.
각 레이어별로 (현재 상태 / 권장 개선 / 우선순위) 컬럼을 채워줘.

참고 자료

GEMINI.md (프로젝트 컨텍스트)

프로젝트별 지시사항과 규칙을 정의하여 AI의 응답을 맞춤화하세요.

GEMINI.md란?

GEMINI.md는 Gemini 모델에게 프로젝트에 대한 컨텍스트와 지시사항을 전달하는 파일입니다. 매번 프롬프트에 반복적인 설명을 입력하는 대신, 한 번 정의하면 모든 세션에서 자동으로 적용됩니다.

계층 구조

Gemini CLI는 다음 순서로 컨텍스트 파일을 로드합니다:

우선순위위치설명
1~/.gemini/GEMINI.md모든 프로젝트에 적용되는 글로벌 컨텍스트
2워크스페이스 GEMINI.md프로젝트 디렉토리와 상위 디렉토리
3JIT (Just-in-Time) 컨텍스트도구가 특정 디렉토리에 접근할 때 자동 스캔 — 기본 최대 200개 하위 디렉토리. .gitignore/.geminiignore 존중

GEMINI.md 작성 예시

GEMINI.md
# 프로젝트: My TypeScript Library

## 일반 지침
- 기존 코딩 스타일을 따를 것
- 함수와 클래스에 JSDoc 주석 추가
- 한국어로 주석 작성

## 코딩 스타일
- 들여쓰기: 2칸 스페이스
- 인터페이스 이름: 'I' 접두사 사용
- 엄격한 동등 비교 (=== 및 !==)
- 세미콜론 필수

## 테스트
- Jest 프레임워크 사용
- 테스트 파일은 __tests__ 디렉토리에 배치
- 커버리지 80% 이상 유지

모듈화

@ 구문으로 다른 마크다운 파일을 임포트할 수 있습니다.

GEMINI.md
@./components/instructions.md
@../shared/style-guide.md

파일명 커스터마이징

settings.json에서 컨텍스트 파일명을 변경할 수 있습니다.

settings.json
{
  "context": {
    "fileName": ["AGENTS.md", "CONTEXT.md", "GEMINI.md"]
  }
}
💬 에이전트에게 이렇게 요청하세요

컨텍스트 파일명을 바꾸고 싶다면 아래처럼 요청하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI가 AGENTS.md, CONTEXT.md, GEMINI.md를 컨텍스트 파일로 읽도록 설정해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 context.fileName 배열을 추가하거나 갱신해줘.

관련 명령어

명령어설명
/memory show현재 로드된 컨텍스트 전체 표시
/memory list사용 중인 GEMINI.md 파일 경로 목록
/memory refresh모든 GEMINI.md 파일 다시 스캔 (별칭: /memory reload)
/memory add <텍스트>글로벌 ~/.gemini/GEMINI.md에 텍스트 추가 (프로젝트 파일 아님)
/memory inboxAuto-Memory로 추출된 스킬 후보 검토 (아래 Auto-Memory 섹션 참조)

Auto-Memory 실험적

Auto-Memory는 과거 세션 기록을 분석해 반복되는 워크플로우를 자동으로 Agent Skill로 추출하는 실험적 기능입니다. 백그라운드에서 세션 시작 시 실행되며, 3시간 이상 유휴 상태였고 사용자 메시지가 10개 이상인 세션만 분석합니다.

settings.json
{
  "experimental": {
    "autoMemory": true
  }
}
💬 에이전트에게 이렇게 요청하세요

Auto-Memory 실험 기능도 설정 파일 수정을 에이전트에게 맡길 수 있습니다.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI Auto-Memory를 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 experimental.autoMemory 값을 true로 설정해줘. 적용 후 CLI 재시작이 필요한지도 알려줘.

내부 동작 5단계

  1. 적격성 스캔: ~/.gemini/tmp/<project>/chats/의 최근 세션 인덱싱. 3시간+ 유휴 + 10+ 사용자 메시지인 세션만 적격.
  2. 락 획득: 프로젝트 메모리 디렉토리에 락 파일을 두어 다중 CLI 인스턴스 사이에 한 번만 추출하도록 조정.
  3. 서브 에이전트 추출: confucius 전용 서브 에이전트(Flash 프리뷰 모델)가 세션을 검토하고 SKILL.md 초안 작성. 증거가 약하면 아무것도 만들지 않는 것이 기본.
  4. 패치 검증: 기존 스킬 편집 제안 시 unified diff .patch 파일 생성 → dry-run 후 깨끗하게 적용되지 않으면 폐기.
  5. 알림: 새 스킬/패치 생성 시 인라인 메시지로 대기 항목 수 표시.

인박스 액션

/memory inbox 다이얼로그에서:

🔒 데이터 프라이버시 & 한계
  • 로컬 세션 파일만 읽음 — 추출 sub-agent의 일반 API 호출 외 별도 업로드 없음
  • 비밀/토큰/자격증명 자동 리댁션, 큰 도구 출력은 그대로 복사하지 않음
  • 현재 세션은 추출 안 함 — 3시간+ 유휴 세션만 대상
  • 인박스는 프로젝트별 격리 — 사용자 스코프 승격 시에만 다른 워크스페이스에서 사용 가능

모델 선택

작업 특성에 맞는 최적의 모델을 선택하는 방법을 알아봅니다.

사용 가능한 모델

별칭모델설명
auto프리뷰 ON: gemini-3-pro-preview / gemini-3-flash-preview 자동 라우팅
프리뷰 OFF: gemini-2.5-pro
기본값. 작업 복잡도에 따라 시스템이 최적 모델을 선택
pro프리뷰 ON: gemini-3-pro-preview
프리뷰 OFF: gemini-2.5-pro
복잡한 추론 작업용
flash프리뷰 ON: gemini-3-flash-preview
프리뷰 OFF: gemini-2.5-flash
빠르고 균형 잡힌 모델
flash-litegemini-2.5-flash-lite단순 작업에 최적화된 가장 빠른 모델

모델 선택 방법

CLI 시작 시 지정

Terminal
# Pro 모델로 시작
gemini -m pro

# Flash 모델로 시작
gemini -m flash

세션 중 변경

Gemini CLI
/model

대화형 다이얼로그가 열리며 모델을 선택할 수 있습니다. 변경은 즉시 적용됩니다.

모델 선택 가이드

⚡ 모델 속도 vs 성능 비교
속도
Flash-Lite
100%
Flash
78%
Auto
55%
Pro
40%
추론 성능
Pro
100%
Auto
90%
Flash
65%
Flash-Lite
42%
💡 단순 작업 → Flash-Lite
⚖️ 일반 작업 → Auto (기본값)
🧠 복잡한 추론 → Pro
✅ 권장 사항
  • Auto (기본): 대부분의 경우 권장. 속도와 성능의 균형을 자동으로 조절합니다.
  • Pro: 복잡한 멀티스텝 작업, 깊은 추론, 창의적 코드 생성 시 사용하세요.
  • Flash: JSON-YAML(데이터 직렬화 형식) 변환 같은 단순 작업에서 빠른 응답이 필요할 때 적합합니다.
⚠️ 참고

/model 명령어와 --model 플래그는 서브 에이전트가 사용하는 모델에는 영향을 주지 않습니다.

에이전트 스킬

전문 지식과 워크플로우를 패키징하여 AI의 능력을 확장하세요.

에이전트 스킬이란?

에이전트 스킬은 특화된 전문 지식과 절차적 워크플로우를 패키징한 확장 기능입니다. GEMINI.md와 달리 스킬은 온디맨드로 작동하며, 모델이 작업의 관련성과 스킬의 설명을 기반으로 자율적으로 활성화를 결정합니다.

주요 장점

📦

공유 가능한 전문 지식

복잡한 워크플로우를 재사용 가능한 폴더로 패키징합니다.

🔄

반복 가능한 워크플로우

일관된 멀티스텝 작업 실행을 보장합니다.

📁

리소스 번들링

스크립트, 템플릿, 데이터를 함께 포함할 수 있습니다.

점진적 로딩

메타데이터만 먼저 로드하여 컨텍스트 토큰을 절약합니다.

스킬 발견 우선순위

같은 이름의 스킬이 여러 위치에 있을 때 높은 우선순위가 낮은 우선순위를 오버라이드합니다:

  1. 워크스페이스 스킬 (최우선): .gemini/skills/ 또는 .agents/skills/ — 보통 버전 컨트롤에 커밋해 팀과 공유
  2. 사용자 스킬: ~/.gemini/skills/ 또는 ~/.agents/skills/ — 모든 워크스페이스에서 사용 가능한 개인 스킬
  3. 확장 프로그램 스킬: 설치된 확장 프로그램에 번들된 스킬

Workspace > User > Extension.

💡 .agents/ 별칭의 우선순위

같은 티어 안에서 .agents/skills/.gemini/skills/보다 우선합니다. .agents/는 다른 AI 에이전트 도구와 호환되는 일반화된 별칭으로, 에이전트 무관 스킬을 관리할 때 직관적입니다.

스킬 관리 명령어

명령어설명
gemini skills list발견된 모든 스킬 목록
gemini skills install <소스>Git URL, 로컬 경로, `.skill` 압축 파일에서 설치 (기본 user 스코프)
gemini skills install <repo> --path skills/frontend모노레포 서브디렉토리에서 특정 스킬 설치
gemini skills install <경로> --scope workspace워크스페이스 스코프(.gemini/skills)에 설치
gemini skills link <경로> [--scope workspace]로컬 스킬을 심볼릭 링크로 연결 (기본 user 스코프)
gemini skills uninstall <이름> [--scope workspace]스킬 제거
gemini skills enable <이름>스킬 활성화 (글로벌)
gemini skills disable <이름> [--scope workspace]스킬 비활성화 (기본 workspace 스코프)
gemini skills enable --all / disable --all모든 스킬 일괄 활성/비활성

슬래시 명령 스코프

/skills disable / /skills enable기본 user 스코프입니다. 워크스페이스 설정만 관리하려면 --scope workspace 추가:

/skills disable my-skill                    # user 스코프
/skills disable my-skill --scope workspace  # workspace 스코프

내장 skill-creator로 자동 생성

새 스킬을 만드는 가장 빠른 방법은 자연어로 요청하는 것입니다:

Gemini CLI
> create a new skill called 'code-reviewer'

Gemini CLI가 내장 skill-creator를 사용하여 자동으로:

  1. 스킬 디렉토리 생성 (예: code-reviewer/)
  2. name/description 프론트매터가 있는 SKILL.md 작성
  3. 표준 리소스 디렉토리(scripts/, references/, assets/) 생성

SKILL.md 구조

각 스킬 폴더의 루트에 SKILL.md가 필수로 있어야 하며, YAML 프론트매터의 두 필드가 필수입니다:

SKILL.md
---
name: pdf-fixer             # 필수. 고유 식별자 (디렉토리명과 일치 권장)
description: PDF 병합/분할/OCR 처리. 사용자가 PDF 파일 작업을 요청할 때 사용.  # 필수
---

# 본문 (마크다운)
이 스킬이 어떻게 동작해야 하는지에 대한 지침을 작성합니다.

권장 디렉토리 구조 (SKILL.md 외 폴더는 모두 선택):

my-skill/
├── SKILL.md      (필수)
├── scripts/      (실행 스크립트)
├── references/   (참조 문서)
└── assets/       (템플릿, 데이터)

활성화 5단계

1. Discovery (검색)

세션 시작 시 세 티어 경로를 스캔하고 활성화된 스킬의 이름과 설명만 시스템 프롬프트에 주입 (Progressive Disclosure로 토큰 절약).

2. Activation (매칭)

모델이 작업과 매칭되는 스킬을 식별하고 activate_skill 도구를 호출합니다.

3. Consent (동의)

사용자에게 스킬 이름·목적·접근 권한이 부여될 디렉토리 경로가 포함된 확인 프롬프트가 표시됩니다.

4. Injection (주입)

승인 시 SKILL.md 본문 + 폴더 구조가 대화 히스토리에 추가되고, 스킬 디렉토리가 에이전트의 허용 파일 경로에 추가되어 번들된 자산을 읽을 권한이 부여됩니다.

5. Execution (실행)

모델이 전문 지식이 활성화된 상태로 진행. 스킬의 절차적 지침을 합리적 범위에서 우선시하도록 지시받음. 한 번 활성화된 스킬은 세션 동안 유지되고 가이드가 우선 적용됩니다.

MCP 서버

Model Context Protocol을 통해 외부 도구와 API를 Gemini CLI에 연동하세요.

MCP 서버란?

🔌 MCP 서버 연결 구조
🤖 Gemini CLI
Stdio
SSE
HTTP
🐙 GitHub
MCP 서버
💬 Slack
MCP 서버
🗄️ DB
MCP 서버
🌐 API
MCP 서버
⚙️ 커스텀
MCP 서버

MCP(Model Context Protocol) 서버는 Gemini CLI에 외부 도구와 리소스를 제공하는 애플리케이션입니다. 외부 시스템, API, 데이터베이스, 커스텀 워크플로우에 대한 접근을 가능하게 합니다.

전송 방식

방식설명
Stdio서브프로세스를 생성하여 stdin/stdout(표준 입출력)으로 통신하는 방식입니다. 같은 컴퓨터 내에서 프로그램끼리 데이터를 주고받습니다.
SSEServer-Sent Events의 약자로, 서버가 클라이언트에게 실시간으로 데이터를 보내는 방식입니다. 원격 서버와 연결할 때 사용합니다.
Streamable HTTPHTTP 프로토콜을 통한 스트리밍 통신 방식입니다. SSE와 유사하지만 더 유연한 양방향 통신을 지원합니다.

MCP 서버 추가

CLI로 추가

Terminal
# Stdio 기반 서버 추가
gemini mcp add github npx -y @modelcontextprotocol/server-github

# HTTP 기반 서버 추가
gemini mcp add api-server http://localhost:3000 --transport http

# 환경 변수와 함께 추가
gemini mcp add slack node server.js --env SLACK_TOKEN=xoxb-xxx

# 특정 도구만 포함
gemini mcp add github npx -y @modelcontextprotocol/server-github \
  --include-tools list_repos,get_pr

# 사용자 범위(글로벌)로 추가 — 모든 프로젝트에서 사용 가능
gemini mcp add db node db-server.js --scope user

실전 튜토리얼: GitHub MCP 서버 (Docker)

가장 인기 있는 MCP 서버 중 하나인 GitHub MCP 서버를 설치하는 전체 흐름:

  1. 토큰 준비: fine-grained PAT 생성. 권한: Metadata/Contents Read, Issues/PR Read/Write
  2. 환경 변수 설정:
    export GITHUB_PERSONAL_ACCESS_TOKEN="github_pat_..."
  3. settings.json 추가:
    {
      "mcpServers": {
        "github": {
          "command": "docker",
          "args": [
            "run", "-i", "--rm",
            "-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
            "ghcr.io/github/github-mcp-server:latest"
          ],
          "env": {
            "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
          }
        }
      }
    }
  4. CLI 재시작/mcp list✓ github: docker ... - Connected 확인
  5. 자연어 사용: "List the open PRs in the google/gemini-cli repository." → 에이전트가 자동으로 mcp_github_list_pull_requests 호출
💡 트러블슈팅
  • 서버가 시작 안 함 → 터미널에서 docker run 명령 직접 실행해 오류 메시지 확인 (예: 이미지 미존재)
  • 도구가 안 보임 → /mcp reload로 도구 재탐색

settings.json으로 설정

Python 서버 (Stdio)

settings.json
{
  "mcpServers": {
    "pythonTools": {
      "command": "python",
      "args": ["-m", "my_mcp_server"],
      "env": { "API_KEY": "$DB_TOKEN" },
      "timeout": 15000
    }
  }
}

HTTP 서버

settings.json
{
  "mcpServers": {
    "httpServer": {
      "httpUrl": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer token" }
    }
  }
}

Docker 기반 서버

settings.json
{
  "mcpServers": {
    "dockerized": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "my-mcp-server:latest"]
    }
  }
}
💬 에이전트에게 이렇게 요청하세요

MCP 서버 종류와 실행 명령만 알려주면 에이전트가 settings.json 형식으로 정리할 수 있습니다.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에 MCP 서버를 추가해줘. 서버 이름은 내도구, 실행 명령은 여기에 입력할게: [실행 명령]. 파일이 없으면 만들고, 기존 mcpServers 설정은 유지한 채 새 서버만 추가해줘.

MCP 설정 필드 전체

필드설명
commandStdio 전송 필수 — 실행 파일 경로
argsStdio 인자 배열
cwd작업 디렉토리 (Stdio)
env환경 변수 맵 ($VAR, ${VAR}, %VAR% 지원)
urlSSE 전송 필수 — SSE 엔드포인트 URL
httpUrlHTTP 전송 필수 — HTTP 스트리밍 엔드포인트
headersurl/httpUrl의 커스텀 HTTP 헤더
timeout요청 타임아웃(ms). 기본값 600000 (10분)
trusttrue면 이 서버의 모든 도구 호출 승인 스킵 (기본 false)
includeTools허용 도구 이름 배열 (allowlist)
excludeTools차단 도구 이름 배열 — includeTools보다 우선
authProviderTypedynamic_discovery / google_credentials / service_account_impersonation
targetAudienceIAP-protected 앱의 OAuth Client ID
targetServiceAccount임퍼소네이션 대상 GCP 서비스 계정 이메일
oauthOAuth 2.0 설정 (scopes, clientId, clientSecret, authorizationUrl, tokenUrl, redirectUri, audiences)

전송 방식별 필수 필드

전송필수 필드용도
Stdiocommand로컬 프로세스 (가장 일반적)
SSEurlServer-Sent Events 원격 서버
HTTP StreaminghttpUrlHTTP 스트리밍 원격 서버

trust vs 사용자 승인

서버 관리

명령어설명
gemini mcp list설정된 모든 MCP 서버 목록
gemini mcp remove <이름>MCP 서버 제거
/mcp list 또는 /mcp ls설정된 MCP 서버와 도구 목록 (세션 내)
/mcp descMCP 서버와 도구를 설명과 함께 표시
/mcp schemaMCP 서버와 도구를 설명 및 스키마와 함께 표시
/mcp auth <서버>OAuth 지원 MCP 서버 인증
/mcp enable <서버>MCP 서버 활성화
/mcp disable <서버>MCP 서버 비활성화
/mcp reload모든 MCP 서버 재시작 및 도구 재탐색
⚠️ 이름 규칙

서버 이름에 밑줄(_)을 사용하지 마세요. 정책 파서가 mcp_ 뒤의 첫 번째 밑줄에서 분할합니다. my_server 대신 my-server를 사용하세요.

보안

샌드박싱

AI 작업을 격리된 환경에서 안전하게 실행하세요.

샌드박싱이란?

샌드박스(Sandbox)는 "모래놀이터"라는 뜻으로, 프로그램을 나머지 시스템과 격리된 안전한 공간에서 실행하는 보안 기술입니다. AI가 실수로 중요한 파일을 삭제하거나 시스템을 손상시키는 것을 방지합니다.

🛡️ 샌드박싱 보안 계층
🌐
호스트 시스템
실제 운영체제 및 중요 파일
보호됨
↓ 격리
📦
샌드박스 레이어
macOS Seatbelt / Docker / gVisor / Windows ACL
필터
🤖
Gemini CLI 에이전트
프로젝트 디렉토리 내 파일만 접근 가능
제한됨

샌드박싱은 잠재적으로 위험한 작업을 호스트 시스템으로부터 격리하는 보안 기능입니다. AI 작업과 실행 환경 사이에 보안 장벽을 제공하여 우발적인 시스템 손상을 방지합니다.

플랫폼별 격리 방식

방식플랫폼설명
macOS SeatbeltmacOSsandbox-exec를 사용한 경량 격리. SEATBELT_PROFILE 환경 변수로 6개 프로파일 선택 (기본: permissive-open)
Docker/Podman크로스플랫폼완전한 프로세스 격리를 제공하는 컨테이너 방식
Windows NativeWindowsicacls를 사용한 Low Integrity Level 파일 보호
gVisor/runscLinux사용자 공간 커널을 통한 가장 강력한 격리
LXC/LXDLinux (실험)완전한 Linux 시스템 컨테이너 격리

활성화 방법

우선순위 순서로 세 가지 방법이 있습니다:

1. 명령줄 플래그

Terminal
gemini -s
# 또는
gemini --sandbox

2. 환경 변수

Terminal
export GEMINI_SANDBOX=true
# 특정 방식 지정 — 전체 허용 값 목록
export GEMINI_SANDBOX=docker         # Docker 컨테이너
export GEMINI_SANDBOX=podman         # Podman 컨테이너
export GEMINI_SANDBOX=sandbox-exec   # macOS Seatbelt
export GEMINI_SANDBOX=runsc          # gVisor (Linux)
export GEMINI_SANDBOX=lxc            # LXC/LXD (Linux 실험적)

3. settings.json

settings.json
{
  "tools": {
    "sandbox": true
  }
}

Docker 기본 이미지 & 커스텀화

커스텀 이미지 — 옵션 A: 레지스트리 이미지

settings.json
{
  "tools": {
    "sandbox": {
      "command": "docker",
      "image": "us-central1-docker.pkg.dev/my-project/my-repo/my-custom-sandbox:latest"
    }
  }
}

또는 환경 변수: export GEMINI_SANDBOX_IMAGE="us-central1-docker.pkg.dev/.../my-sandbox:latest"

커스텀 이미지 — 옵션 B: Dockerfile 자동 빌드

  1. 프로젝트 루트에 .gemini/sandbox.Dockerfile 작성
  2. gh CLI 설치/인증 (기본 ghcr.io/google/gemini-cli 베이스 이미지 사용 시)
  3. BUILD_SANDBOX=1 환경 변수와 함께 실행:
Terminal
BUILD_SANDBOX=1 GEMINI_SANDBOX=docker gemini -p "run my custom build"
💬 에이전트에게 이렇게 요청하세요

settings.json 위치를 직접 찾기 어렵다면 Gemini CLI 채팅창에 아래 문장을 그대로 입력하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에 샌드박싱을 활성화하는 설정을 추가해줘. 파일이 없으면 새로 만들고, 이미 다른 설정이 있으면 유지한 채 tools.sandbox 값을 true로 설정해줘.

macOS Seatbelt 프로파일

SEATBELT_PROFILE 환경 변수로 6가지 프로파일 중 선택할 수 있습니다. 기본값은 permissive-open입니다.

프로파일설명
permissive-open (기본)쓰기 제한, 네트워크 허용
permissive-proxied쓰기 제한, 프록시 경유 네트워크
restrictive-open엄격한 제한, 네트워크 허용
restrictive-proxied엄격한 제한, 프록시 경유 네트워크
strict-open읽기/쓰기 모두 제한, 네트워크 허용
strict-proxied읽기/쓰기 모두 제한, 프록시 경유 네트워크

도구 수준 vs 프로세스 수준

도구 수준 샌드박싱은 개별 작업(셸 명령, 파일 쓰기)만 격리하며, 비도구 작업은 로컬 환경과 통합을 유지합니다. security.toolSandboxing: false로 비활성화할 수 있습니다.

✅ 모범 사례
  • 워크플로우와 호환되는 가장 제한적인 프로파일을 사용하세요.
  • 샌드박싱은 모든 위험을 제거하지는 않지만 크게 줄여줍니다.
  • 컨테이너 오버헤드는 초기 이미지 빌드 후 미미합니다.

훅 (Hooks)

에이전트 루프의 특정 시점에서 커스텀 스크립트를 실행하여 동작을 제어하세요.

훅(Hook)은 "갈고리"라는 뜻으로, 프로그램이 실행되는 중간 지점에 여러분의 코드를 "걸어 놓는" 기능입니다. 예를 들어 "AI가 응답하기 직전에 이 스크립트를 실행해줘"처럼 특정 순간에 자동으로 동작을 추가할 수 있습니다.

훅이란?

⏱️ 훅 이벤트 라이프사이클
SessionStart
세션 초기화
BeforeAgent
프롬프트 제출 후
BeforeModel
LLM 요청 전
AfterModel
LLM 응답 후
BeforeTool
도구 실행 전
AfterTool
도구 실행 후
AfterAgent
에이전트 루프 완료
SessionEnd
세션 종료

훅은 Gemini CLI의 에이전트 루프에서 특정 시점에 실행되는 스크립트입니다. 소스 코드를 수정하지 않고도 동작을 커스터마이징할 수 있습니다. 훅은 동기적으로 실행되며, 모든 훅이 완료될 때까지 Gemini CLI가 대기합니다.

훅 이벤트

이벤트트리거 시점주요 용도
SessionStart세션 초기화컨텍스트 로드, 리소스 초기화
SessionEnd세션 종료정리, 상태 저장
BeforeAgent프롬프트 제출 후컨텍스트 추가, 입력 검증
AfterAgent에이전트 루프 완료출력 검토, 재시도 강제
BeforeModelLLM 요청 전프롬프트 수정, 모델 교체
AfterModelLLM 응답 후응답 필터링/편집
BeforeTool도구 실행 전인수 검증, 작업 차단
AfterTool도구 실행 후결과 처리, 테스트 실행
BeforeToolSelection도구 선택 전사용 가능 도구 필터링
PreCompress컨텍스트 압축 시상태 저장 알림
Notification시스템 알림외부 알림 전달/로깅

설정 예시

settings.json
{
  "hooks": {
    "BeforeTool": [
      {
        "matcher": "write_file|replace",
        "hooks": [
          {
            "name": "security-check",
            "type": "command",
            "command": "$GEMINI_PROJECT_DIR/.gemini/hooks/security.sh",
            "timeout": 5000
          }
        ]
      }
    ]
  }
}
💬 에이전트에게 이렇게 요청하세요

훅 스크립트와 settings.json 등록을 에이전트에게 함께 맡길 수 있습니다.

프롬프트
> 현재 프로젝트에 Gemini CLI 훅을 설정해줘. .gemini/hooks 폴더를 만들고, 파일 수정 도구 실행 전에 동작하는 BeforeTool 훅 예시 스크립트를 만든 뒤 .gemini/settings.json의 hooks 설정에 등록해줘. 기존 설정은 유지해줘.

종료 코드

코드라벨동작
0성공stdout을 JSON으로 파싱; 의도적 차단을 포함한 모든 로직에 사용
2시스템 차단치명적 작업 중단; stderr에 거부 이유 포함
기타경고비치명적 실패; 원래 매개변수로 계속 진행
🔑 훅의 골든 룰

훅 스크립트는 stdout에 오직 유효한 JSON만 출력해야 합니다. 로그, 디버그, 오류 메시지 등 그 외 모든 출력은 반드시 stderr로 보내세요. stdout에 JSON 외 텍스트가 섞이면 파싱 실패로 훅이 동작하지 않습니다.

stdin JSON 입력 구조

모든 훅 스크립트는 다음 공통 필드를 stdin으로 받습니다:

필드설명
session_id현재 세션 UUID
transcript_path대화 transcript JSON 파일 절대 경로
cwd현재 작업 디렉토리
hook_event_name발생한 훅 이벤트 이름 (예: BeforeTool)
timestampISO 8601 타임스탬프

도구 훅(BeforeTool/AfterTool)은 추가로 tool_name, tool_input 필드를 받습니다.

훅 설정 필드

필드기본값설명
type-"command" 고정 (필수)
command-실행할 셸 명령 (필수)
name-표시용 이름 (/hooks enable/disable용)
description-선택적 설명 문자열
timeout60000ms실행 타임아웃 (밀리초)
matcher-도구 훅에서는 정규식, 라이프사이클 훅에서는 정확 문자열
sequentialfalse동일 이벤트의 여러 훅을 순차(true) 또는 병렬 실행

훅 공통 출력 필드 (stdout JSON)

필드타입설명
systemMessagestring사용자 터미널에 즉시 표시
suppressOutputboolean로그/텔레메트리에서 훅 메타데이터 숨김
continuebooleanfalse면 에이전트 루프 즉시 중단
stopReasonstringcontinue: false 시 사용자에게 표시할 사유
decisionstring"allow" 또는 "deny" (별칭 "block")
reasonstringdecision: "deny" 시 필수 — 피드백/오류 메시지

이벤트별 입출력 필드

BeforeTool / AfterTool

BeforeAgent / AfterAgent

MCP 도구 매처 패턴

MCP 서버 도구는 mcp_<server_name>_<tool_name> 패턴으로 명명됩니다. 훅 matcher에서 정규식으로 활용:

settings.json
{
  "hooks": {
    "BeforeTool": [
      {
        "matcher": "mcp_github_.*",
        "hooks": [{ "type": "command", "command": "/path/to/gh-audit.sh" }]
      }
    ]
  }
}

환경 변수

훅 실행 시 다음 환경 변수에 접근할 수 있습니다:

⚠️ 보안 경고 & 핑거프린트

훅은 사용자 권한으로 임의 코드를 실행합니다. 신뢰할 수 있는 스크립트만 등록하세요.

Gemini CLI는 프로젝트 수준 훅을 핑거프린트합니다. 훅의 이름이나 명령이 변경되면(예: git pull 후) 새로운 신뢰되지 않은 훅으로 간주되어 실행 전 사용자 경고가 표시됩니다. 신뢰할 수 없는 프로젝트를 열 때 특히 중요한 보호 메커니즘입니다.

관리 명령어

Gemini CLI
/hooks list             # 설정된 훅 목록 표시 (별칭: /hooks show, /hooks panel)
/hooks enable-all       # 모든 훅 활성화
/hooks disable-all      # 모든 훅 비활성화
/hooks enable <이름>     # 특정 훅 활성화
/hooks disable <이름>    # 특정 훅 비활성화

위협 모델 (출처별 신뢰 수준)

출처신뢰 수준
System (/etc/gemini-cli/)가장 안전 — 시스템 관리자 구성
User (~/.gemini/)본인 책임
Extensions명시적 승인 후 설치, 출처 의존
Project (.gemini/)기본 비신뢰 — 외부/공개 저장소는 위험

주요 위험: 임의 코드 실행, 데이터 유출(API 키 등), 프롬프트 인젝션

📊 데이터 분석 후크 예시 실전

훅의 stdin JSON 입력을 활용하면 사용자 개입 없이 도구 호출, 토큰 소비, 파일 변경 빈도 등을 수집해 나중에 분석할 수 있습니다. 아래는 즉시 적용 가능한 4가지 분석 후크 레시피입니다.

① 도구 호출 로그 (JSONL 누적)

모든 도구 호출을 한 줄짜리 JSON으로 누적합니다. jq로 즉시 쿼리 가능.

.gemini/hooks/log-tool-calls.sh
#!/usr/bin/env bash
set -euo pipefail
LOG=".gemini/analytics/tool-calls.jsonl"
mkdir -p "$(dirname "$LOG")"

# stdin JSON에 timestamp + cwd를 추가해 JSONL 1줄로 append
jq -c --arg ts "$(date -u +%FT%TZ)" \
   '. + {ts: $ts, project: env.GEMINI_PROJECT_DIR}' \
  >> "$LOG"
settings.json
{
  "hooks": {
    "BeforeTool": [
      {
        "matcher": "*",
        "hooks": [
          { "name": "log-tool-calls", "type": "command",
            "command": "$GEMINI_PROJECT_DIR/.gemini/hooks/log-tool-calls.sh",
            "timeout": 2000 }
        ]
      }
    ]
  }
}

분석 쿼리 예시:

Terminal
# 가장 많이 사용된 도구 Top 10
jq -r '.tool_name' .gemini/analytics/tool-calls.jsonl | sort | uniq -c | sort -rn | head

# 시간대별 도구 호출 분포
jq -r '.ts[11:13]' .gemini/analytics/tool-calls.jsonl | sort | uniq -c

# 오늘 셸 명령 호출 모두
jq -r 'select(.tool_name=="run_shell_command") | .tool_input.command' \
  .gemini/analytics/tool-calls.jsonl | tail -20

② 파일 변경 빈도 (hot files)

AfterTool에서 파일 편집 도구만 골라 변경된 경로를 카운트합니다. 자주 수정되는 "핫스팟" 파일을 식별할 수 있습니다.

.gemini/hooks/track-file-edits.sh
#!/usr/bin/env bash
set -euo pipefail
LOG=".gemini/analytics/file-edits.csv"
mkdir -p "$(dirname "$LOG")"
[ -f "$LOG" ] || echo "timestamp,tool,file,session_id" > "$LOG"

INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')
SESSION=$(echo "$INPUT" | jq -r '.session_id')

case "$TOOL" in
  write_file|replace|edit)
    FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // empty')
    [ -n "$FILE" ] && \
      echo "$(date -u +%FT%TZ),$TOOL,$FILE,$SESSION" >> "$LOG"
    ;;
esac
settings.json (hooks 추가)
"AfterTool": [
  { "matcher": "write_file|replace|edit",
    "hooks": [
      { "name": "track-file-edits", "type": "command",
        "command": "$GEMINI_PROJECT_DIR/.gemini/hooks/track-file-edits.sh" }
    ]
  }
]

핫스팟 분석:

# 가장 자주 수정된 파일 Top 10
cut -d, -f3 .gemini/analytics/file-edits.csv | sort | uniq -c | sort -rn | head

③ 세션별 토큰·비용 추적

AfterModel은 LLM 호출마다 응답 메타데이터를 받습니다. 토큰 사용량을 세션별로 누적해 비용을 추정합니다.

.gemini/hooks/track-tokens.sh
#!/usr/bin/env bash
set -euo pipefail
LOG=".gemini/analytics/tokens.jsonl"
mkdir -p "$(dirname "$LOG")"

jq -c '{
  ts: (now | strftime("%FT%TZ")),
  session_id,
  model: (.model_name // "unknown"),
  prompt_tokens:     (.usage.prompt_tokens     // 0),
  completion_tokens: (.usage.completion_tokens // 0),
  cached_tokens:     (.usage.cached_tokens     // 0)
}' >> "$LOG"

비용 추정 (Gemini 3 Pro 가정, 1M 토큰당 USD):

# 세션별 토큰 합계
jq -s 'group_by(.session_id) | map({
  session: .[0].session_id,
  prompt:     map(.prompt_tokens)     | add,
  completion: map(.completion_tokens) | add,
  cached:     map(.cached_tokens)     | add
}) | sort_by(.prompt + .completion) | reverse' \
  .gemini/analytics/tokens.jsonl

# 오늘 사용 토큰 총합
jq -s "map(select(.ts | startswith(\"$(date -u +%F)\"))) |
       {prompt: map(.prompt_tokens) | add,
        completion: map(.completion_tokens) | add}" \
  .gemini/analytics/tokens.jsonl

④ 위험 명령·실패율 모니터링

BeforeTool로 위험한 셸 패턴을 기록(또는 차단)하고, AfterTool로 실패율을 집계합니다.

.gemini/hooks/audit-shell.sh
#!/usr/bin/env bash
# BeforeTool: run_shell_command 매처에만 부착
LOG=".gemini/analytics/shell-audit.jsonl"
mkdir -p "$(dirname "$LOG")"

INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // ""')

# 위험 패턴 매칭
RISK="low"
case "$CMD" in
  *"rm -rf"*|*"sudo "*|*"dd if="*|*"chmod 777"*)         RISK="high"   ;;
  *"git push --force"*|*"DROP TABLE"*|*"DROP DATABASE"*)  RISK="high"   ;;
  *"curl "*"| sh"*|*"curl "*"| bash"*)                    RISK="high"   ;;
  *"npm install -g"*|*"pip install"*)                     RISK="medium" ;;
esac

echo "$INPUT" | jq -c --arg risk "$RISK" \
  '{ts: (now | strftime("%FT%TZ")), cmd: .tool_input.command, risk: $risk, session_id}' \
  >> "$LOG"

# RISK=high는 차단하려면 아래 주석 해제 (exit 2 = 사용자에게 거부 메시지)
# [ "$RISK" = "high" ] && { echo "🚫 위험 명령 차단: $CMD" >&2; exit 2; }

exit 0

대시보드 한 줄 요약:

# 오늘 risk 등급별 명령 개수
jq -r --arg today "$(date -u +%F)" \
  'select(.ts | startswith($today)) | .risk' \
  .gemini/analytics/shell-audit.jsonl | sort | uniq -c
💡 일별 리포트 자동 생성

매일 오전 9시에 어제 통계를 마크다운 리포트로 만드는 SessionStart 후크 예시:

#!/usr/bin/env bash
# .gemini/hooks/daily-report.sh — SessionStart에 부착
REPORT=".gemini/analytics/daily/$(date -d 'yesterday' +%F).md"
[ -f "$REPORT" ] && exit 0   # 이미 생성됨
mkdir -p "$(dirname "$REPORT")"

cat > "$REPORT" <<EOF
# $(date -d 'yesterday' +%Y-%m-%d) Gemini CLI 사용 리포트

## 도구 호출
$(jq -r --arg d "$(date -d 'yesterday' +%F)" \
   'select(.ts | startswith($d)) | .tool_name' \
   .gemini/analytics/tool-calls.jsonl | sort | uniq -c | sort -rn)

## 토큰 사용량
$(jq -s --arg d "$(date -d 'yesterday' +%F)" \
   'map(select(.ts | startswith($d))) |
    {prompt: map(.prompt_tokens) | add, completion: map(.completion_tokens) | add}' \
   .gemini/analytics/tokens.jsonl)
EOF
echo "📊 어제 리포트 생성: $REPORT"
🔒 분석 후크의 프라이버시

위 예시는 로컬 디스크에만 저장합니다. 클라우드로 전송하려면 텔레메트리의 OTLP 엔드포인트를 사용하세요. 또한 .gemini/analytics/.gitignore에 추가해 의도치 않은 커밋을 막으세요:

echo ".gemini/analytics/" >> .gitignore

모범 사례

성능

독립 테스트

CLI에 연결 전 샘플 JSON으로 후크 동작 검증:

Terminal
# 테스트 입력 생성
cat > test-input.json << 'EOF'
{
  "session_id": "test-123",
  "cwd": "/tmp/test",
  "hook_event_name": "BeforeTool",
  "tool_name": "write_file",
  "tool_input": {"file_path": "test.txt", "content": "Test"}
}
EOF

# 후크 실행 + 종료 코드 확인
cat test-input.json | .gemini/hooks/my-hook.sh
echo "Exit code: $?"

실행 권한

비활성 후크 (settings.json)

슬래시 명령 외에도 hooks.disabled 배열로 직접 비활성화:

{
  "hooks": {
    "disabled": ["my-hook-name", "another-hook"]
  }
}
⚠️ 환경 변수 리댁션 기본 OFF

security.environmentVariableRedaction.enabled기본 비활성화입니다. 3rd party 후크 또는 민감 환경에서 작업할 때 강력히 활성화 권장:

{
  "security": {
    "environmentVariableRedaction": {
      "enabled": true,
      "allowed": ["MY_REQUIRED_TOOL_KEY"]
    }
  }
}

활성 시 KEY/TOKEN/SECRET/PASSWORD/AUTH/CREDENTIAL/PRIVATE/CERT 패턴이 자동 가려집니다.

파일 관리

Gemini CLI를 사용하여 파일을 읽고, 생성하고, 수정하는 방법을 알아봅니다.

파일 작업 예시

Gemini CLI
# 파일 읽기 및 분석
> src/index.ts 파일을 분석해줘

# 파일 생성
> utils/helpers.ts에 문자열 유틸리티 함수를 만들어줘

# 파일 수정
> config.json에서 포트를 3000에서 8080으로 변경해줘

# 여러 파일 작업
> src/ 폴더의 모든 .ts 파일에서 console.log를 제거해줘

# 파일 검색
> TODO 주석이 포함된 파일을 모두 찾아줘

승인 모드

Gemini CLI는 파일을 수정하기 전에 사용자의 승인을 요청합니다.

모드설명
default모든 파일 수정과 셸 명령에 승인 필요
auto_edit파일 수정은 자동, 셸 명령은 승인 필요
yolo모든 작업 자동 승인 (주의 필요)
plan읽기 전용 모드 (분석만 수행)
Terminal
# 승인 모드 지정
gemini --approval-mode auto_edit

# yolo 모드 (모든 작업 자동 승인)
gemini --approval-mode yolo

# --yolo / -y 플래그는 deprecated (하위 호환을 위해 동작하나 권장하지 않음)
# gemini -y  ← 대신 --approval-mode=yolo 사용 권장

셸 명령어

Gemini CLI 내에서 직접 셸 명령을 실행하고 결과를 활용하세요.

셸 명령 실행

Gemini CLI는 AI가 필요할 때 자동으로 셸 명령을 실행합니다. 또한 사용자가 직접 실행을 요청할 수도 있습니다.

Gemini CLI
# AI에게 명령 실행 요청
> git log --oneline -10 실행해서 최근 커밋 보여줘
> npm test 실행하고 실패한 테스트 수정해줘
> docker ps로 실행 중인 컨테이너 확인해줘

# 파이프로 결과 전달
cat build.log | gemini -p "빌드 에러를 분석하고 해결 방법을 알려줘"

비대화형 자동화

Terminal
# CI/CD 파이프라인에서 사용
gemini -p "src/ 폴더의 코드를 린트하고 문제를 수정해줘" -y

# 스크립트에서 사용
result=$(gemini -p "package.json의 버전을 파싱해줘" -o json)
echo $result
💡 출력 형식

--output-format (-o) 옵션으로 출력 형식을 지정할 수 있습니다: text (기본), json, stream-json. 자동화 스크립트에서는 json 형식이 유용합니다.

JSON 출력 스키마

--output-format=json은 단일 객체를 반환합니다:

필드설명
response모델의 최종 답변 텍스트
stats토큰 사용량과 API 지연 메트릭
error (선택)요청 실패 시 오류 상세

Stream JSON (JSONL) 이벤트

--output-format=stream-json은 줄바꿈 구분 이벤트를 스트리밍합니다:

이벤트설명
init세션 메타데이터
message사용자/어시스턴트 메시지 조각
tool_use도구 호출 요청 (인자 포함)
tool_result도구 실행 결과
error비치명적 경고 및 시스템 오류
result최종 결과 + 모델별 토큰 사용량 집계

종료 코드

코드오류 유형설명
0성공정상 종료
1일반 오류API 실패 등
41FatalAuthenticationError인증 프로세스 오류
42FatalInputError잘못된 입력 (비대화형 모드)
44FatalSandboxError샌드박스 환경 오류 (Docker/Podman/Seatbelt)
52FatalConfigErrorsettings.json 오류
53FatalTurnLimitedError최대 대화 턴 도달 (비대화형)

세션 관리

대화 세션을 저장하고 이어서 작업하는 방법을 알아봅니다.

세션 이어하기

Terminal
# 가장 최근 세션 재개 (인자 없이)
gemini --resume

# 인덱스 번호로 재개
gemini --resume 1

# 세션 UUID로 재개
gemini --resume a1b2c3d4-e5f6-7890-abcd-ef1234567890

# 세션 재개 + 추가 프롬프트
gemini --resume 1 "이 PR을 마무리해줘"

REPL 내부 인터랙티브 브라우저

실행 중인 세션에서 /resume을 입력하면 과거 대화를 미리보기, 검색, 선택할 수 있는 인터랙티브 세션 브라우저가 열립니다.

명령어설명
/resume인터랙티브 세션 브라우저 열기 (/chat의 별칭)
/resume save <이름>현재 세션 내 이름있는 체크포인트 저장

세션 목록 및 관리

Terminal
# 현재 프로젝트의 세션 목록
gemini --list-sessions

# 특정 세션 삭제
gemini --delete-session 0

저장 위치 및 보존 정책

✅ 체크포인팅

Gemini CLI는 자동으로 세션 스냅샷(체크포인트)을 생성합니다. 작업 중 문제가 생기면 이전 상태로 되돌릴 수 있습니다. /rewind 명령으로 이전 체크포인트로 돌아갈 수 있습니다.

📚 관련 공식 문서

확장 프로그램

Gemini CLI의 기능을 확장하는 확장 프로그램을 설치하고 관리하세요.

확장 프로그램 관리

명령어설명
gemini extensions install <소스> [옵션...]Git URL 또는 로컬 경로에서 설치
gemini extensions uninstall <이름...>확장 프로그램 1개 이상 제거 (가변 인자)
gemini extensions list설치된 확장 프로그램 목록 (REPL은 /extensions list)
gemini extensions update <이름>특정 확장 업데이트 (원격 변경 반영)
gemini extensions update --all모든 확장 일괄 업데이트
gemini extensions enable <이름> [--scope user|workspace]활성화 (스코프 지정 가능)
gemini extensions disable <이름> [--scope user|workspace]비활성화 (스코프 지정 가능)
gemini extensions restart <이름>확장 프로그램 재시작
gemini extensions link <경로>로컬 개발 중 확장 심볼릭 링크
gemini extensions explore공개 확장 갤러리 탐색
gemini extensions config <이름> [setting] [--scope]설정 변경 (값은 .env에 저장)
gemini extensions new <경로> [template]템플릿으로 새 확장 생성

install 플래그 전체

플래그동작
--ref <ref>git 참조 (브랜치/태그/커밋) 지정
--auto-update자동 업데이트 활성화
--pre-release프리릴리스 버전 설치 허용
--consent보안 위험 인지 + 확인 프롬프트 스킵 (CI 등)
--skip-settings설치 시 설정 입력 단계 건너뛰기

new 템플릿 종류

💡 설치는 로컬 복사본 — 업데이트 필요

Gemini CLI는 확장 프로그램 설치 시 로컬 복사본을 만듭니다. 원격 저장소의 변경을 반영하려면 반드시 gemini extensions update <name> (또는 --all)을 실행해야 합니다.

개발용 명령어

Terminal
# 새 확장 프로그램 템플릿 생성
gemini extensions new ./my-extension

# 로컬 확장 프로그램 링크 (개발용)
gemini extensions link /path/to/extension

# 확장 프로그램 구조 검증
gemini extensions validate ./my-extension
💬 에이전트에게 이렇게 요청하세요

확장 프로그램은 보통 명령어로 설치하고 활성화합니다. 이름이나 Git URL만 알려주면 에이전트가 필요한 명령을 정리할 수 있습니다.

프롬프트
> Gemini CLI 확장 프로그램을 설치하고 활성화하는 명령어를 만들어줘. 확장 프로그램 소스는 [Git URL 또는 로컬 경로]이고, 설치 후 목록 확인과 enable 명령까지 함께 알려줘.

작업 자동화

Gemini CLI를 스크립트와 CI/CD(지속적 통합/지속적 배포 — 코드 변경 시 자동으로 테스트하고 배포하는 자동화 시스템) 파이프라인에 통합하여 작업을 자동화하세요.

Headless 모드

Gemini CLI를 프로그래밍 방식으로 사용할 수 있습니다. 대화형 인터페이스 없이 프롬프트를 처리합니다.

Terminal
# 비대화형 실행
gemini -p "모든 테스트 파일에 JSDoc 주석을 추가해줘" -y

# JSON 출력
gemini -p "package.json의 의존성 목록" -o json

# 파이프라인에서 사용
git diff HEAD~1 | gemini -p "이 변경사항을 리뷰해줘" -o text

CI/CD 활용 예시

GitHub Actions
name: AI Code Review
on: [pull_request]
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install -g @google/gemini-cli
      - run: |
          git diff origin/main...HEAD | \
          gemini -p "PR 변경사항을 리뷰하고 문제를 보고해줘" -y
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}

스크립트 통합

bash
#!/bin/bash
# 자동 코드 리뷰 스크립트

# 변경된 파일 목록 가져오기
changed_files=$(git diff --name-only HEAD~1)

# 각 파일에 대해 리뷰 수행
for file in $changed_files; do
  echo "리뷰 중: $file"
  gemini -p "다음 파일의 코드를 리뷰해줘: $file" -y -o text
done

랄프 루프 (Ralph Loop) 패턴

"같은 프롬프트를 무한 반복"이라는 단순한 아이디어로 거대한 작업을 끝내는 자율 에이전트 패턴. Gemini CLI의 헤드리스 모드와 자동 승인 모드만 있으면 누구나 구성할 수 있습니다.

랄프 루프란?

랄프 루프(Ralph Loop)는 호주 엔지니어 Geoffrey Huntley가 2025년에 공개·정착시킨 자율 에이전트 운용 패턴입니다. 이름은 미국 만화 〈심슨 가족〉의 캐릭터 Ralph Wiggum이 같은 말을 끝없이 반복하는 모습에서 따왔습니다.

핵심 아이디어는 어이없을 정도로 단순합니다:

💡 한 줄 요약

"while :; do gemini -p "$(cat PROMPT.md)"; done — 끝."

같은 프롬프트 파일을 매 반복 다시 읽고, 같은 명령으로 에이전트를 호출하고, 끝나면 다시 호출합니다. 작업 진행 상황은 에이전트가 직접 파일(fix_plan.md, TODO.md)에 적어 다음 반복에 인계합니다.

왜 무한 반복이 효과적인가?

"한 번에 끝내면 되지 왜 반복하나?"라고 생각할 수 있지만, 랄프 루프는 LLM 에이전트의 구조적 약점 3가지를 정면으로 해결합니다:

LLM의 약점랄프 루프의 해결
컨텍스트 한계 — 백만 토큰이라도 큰 프로젝트는 못 담음 매 반복마다 컨텍스트를 새로 시작 → 토큰 누수 없음. 영구 상태는 파일에 위임
주의 분산 — 한 세션 안에서 작업이 길어질수록 정확도 하락 반복마다 "지금 해야 할 한 가지"만 집중 → 매번 fresh attention
실패 누적 — 한 번 실수하면 그 위에 더 큰 실수가 쌓임 반복마다 실제 코드/테스트 결과를 다시 읽음 → 자기 수정 기회

덤으로, 사용자는 루프가 도는 동안 자유롭게 자리를 비울 수 있습니다. 노트북을 닫고 산책을 다녀와서 git diff로 결과를 검토하면 됩니다.

구성 요소

랄프 루프는 단 4개의 부품으로 동작합니다:

부품역할예시
루프 셸 스크립트Gemini CLI를 무한 호출ralph.sh (bash while)
고정 프롬프트매 반복 읽히는 메타 지시문PROMPT.md
상태 파일진행 상황·할 일·발견한 이슈fix_plan.md, TODO.md
중지 신호작업 완료 또는 사용자 개입 감지STOP 파일, Ctrl+C

최소 구현 (5분 만에 시작하기)

1단계: 프롬프트 파일 작성

에이전트가 매 반복마다 따를 변하지 않는 지시문입니다. 구체적인 작업 목록은 여기에 적지 말고, "fix_plan.md를 읽고 다음 한 가지를 하라"는 메타 지시만 적습니다.

PROMPT.md
# 임무
당신은 이 저장소를 안전하게 개선하는 자율 에이전트입니다.

## 매 반복 절차
1. fix_plan.md를 읽는다. 없으면 빈 상태로 시작한다.
2. 가장 위에 있는 미완료 항목 **단 한 가지**를 선택한다.
3. 항목이 너무 크면 더 작은 단위로 쪼개서 fix_plan.md를 갱신만 하고 종료한다.
4. 항목이 적당하면 실제로 코드를 수정하고 npm test(또는 프로젝트의 테스트 명령)를 실행한다.
5. 테스트가 통과하면 fix_plan.md에서 해당 항목을 ✅로 표시한다.
6. 테스트가 실패하면 fix_plan.md 맨 아래에 새로운 작업 "테스트 실패 수정: [내용]"을 추가하고 종료한다.
7. 모든 작업이 ✅이면 STOP 파일을 만들고 종료한다.

## 절대 규칙
- git push 금지. 커밋만 한다.
- fix_plan.md 외 메타 파일은 만들지 않는다.
- 한 반복에 파일 5개 이상 동시에 수정하지 않는다.
- 의심스러우면 fix_plan.md에 질문을 적고 종료한다.

2단계: 초기 작업 목록

fix_plan.md
# Fix Plan

- [ ] src/auth/ 모듈에 단위 테스트 추가
- [ ] README의 깨진 링크 수정
- [ ] TypeScript strict 모드 켜고 발생한 에러 정리
- [ ] CI 워크플로우에 lint 단계 추가
- [ ] CHANGELOG.md 최신 커밋 기준으로 갱신

3단계: 루프 스크립트

ralph.sh
#!/usr/bin/env bash
set -u

ITER=0
MAX_ITER=${MAX_ITER:-50}     # 안전장치: 최대 반복 횟수
LOG_DIR=".ralph-logs"
mkdir -p "$LOG_DIR"

while [ ! -f STOP ] && [ "$ITER" -lt "$MAX_ITER" ]; do
  ITER=$((ITER + 1))
  echo "===== 🔁 Iteration $ITER  $(date '+%H:%M:%S') ====="

  gemini \
    --approval-mode=yolo \
    --output-format=json \
    -p "$(cat PROMPT.md)" \
    > "$LOG_DIR/iter-$ITER.json" 2>&1

  # 짧은 휴식 (rate limit 회피)
  sleep 5
done

if [ -f STOP ]; then
  echo "✅ STOP 파일 감지 — 작업 완료"
  rm STOP
else
  echo "⚠️  최대 반복 횟수($MAX_ITER) 도달 — 수동 확인 필요"
fi

4단계: 실행

Terminal
chmod +x ralph.sh
./ralph.sh

이게 전부입니다. 이제 자리를 비워도 됩니다.

⚠️ --approval-mode=yolo는 반드시 격리 환경에서

랄프 루프는 본질적으로 모든 도구 실행을 자동 승인합니다. 호스트 시스템에서 그대로 돌리면 위험합니다. 다음 중 하나를 반드시 함께 사용하세요:

  • Git Worktree로 별도 브랜치에서 실행 — gemini --worktree feat/ralph
  • 샌드박스 활성화 — --sandbox 또는 GEMINI_SANDBOX=docker
  • 훅(Hooks)으로 위험 명령 차단 — BeforeTool에서 rm -rf, git push --force 등 거부
  • 전용 컨테이너에서 실행 (Devcontainer / GitHub Codespaces 등)

자세한 내용은 하네스 엔지니어링 섹션의 "되돌릴 수 있는 실험 하네스" 레시피를 참고하세요.

중급 패턴: 병렬 랄프

여러 작업을 동시에 굴리고 싶다면 Git Worktree로 격리한 뒤 N개의 루프를 동시에 돌리는 병렬 랄프(Parallel Ralph)로 확장할 수 있습니다.

parallel-ralph.sh
#!/usr/bin/env bash
# 3개 작업을 별도 worktree에서 동시 진행

TASKS=(
  "feat/auth-tests:auth 모듈 테스트 보강"
  "fix/typescript-strict:strict 모드 에러 정리"
  "docs/changelog-update:CHANGELOG 갱신"
)

for entry in "${TASKS[@]}"; do
  branch="${entry%%:*}"
  goal="${entry#*:}"
  wt="../ralph-${branch//\//-}"

  git worktree add "$wt" -b "$branch"
  (
    cd "$wt"
    cp ../$(basename "$PWD")/PROMPT.md .
    echo "# Goal\n$goal\n\n## Tasks\n- [ ] 시작" > fix_plan.md
    bash ../$(basename "$PWD")/ralph.sh > "../$wt.log" 2>&1 &
  )
done

wait
echo "✅ 모든 병렬 랄프 종료"

완료 후 각 worktree에 가서 git diff main으로 변경을 검토하고 PR을 따로 올립니다.

프롬프트 작성 비결 (가장 중요한 부분)

루프 자체는 단순하지만, PROMPT.md의 품질이 결과를 결정합니다. 실전에서 검증된 5가지 원칙:

① "다음 한 가지(One Next Thing)" 원칙

여러 작업을 한 반복에 끝내려고 하면 컨텍스트가 폭발합니다. 매 반복은 단 하나의 변경만 하도록 강제하세요.

❌ "fix_plan.md의 모든 항목을 처리하라"
✅ "fix_plan.md에서 가장 위 미완료 항목 단 한 가지만 처리하라"

② "쪼개기 vs 실행하기"를 분리

큰 작업을 만나면 즉시 시도하지 말고 먼저 쪼개기만 하고 종료하게 합니다. 다음 반복에서 작아진 항목으로 다시 시작합니다.

3. 항목이 너무 크면 더 작은 단위로 쪼개서 fix_plan.md를 갱신만 하고 종료한다.

③ 실패도 작업으로 만든다

테스트가 실패해도 멈추지 않고 새로운 작업으로 추가합니다. 다음 반복에서 fresh attention으로 디버그합니다.

6. 테스트가 실패하면 fix_plan.md 맨 아래에 새로운 작업 "테스트 실패 수정: [내용]"을 추가하고 종료한다.

④ 의심스러우면 멈춘다

에이전트가 확신하지 못할 때 추측으로 진행하면 잘못된 코드가 누적됩니다. fix_plan.md에 질문을 적고 종료하게 만들면 사람이 다음 날 답해주면 됩니다.

- 의심스러우면 fix_plan.md에 질문을 적고 종료한다.

⑤ 종료 조건을 명시한다

루프가 영원히 돌면 안 됩니다. STOP 파일이라는 명시적 신호를 두면 에이전트가 작업 완료를 직접 선언할 수 있습니다.

7. 모든 작업이 ✅이면 STOP 파일을 만들고 종료한다.

관측과 디버깅

루프가 돌면서 무슨 일이 벌어지는지 보고 싶다면 다음을 활용하세요:

흔한 실수와 함정

실수증상대응
PROMPT.md에 구체적 작업 직접 적기 한 작업 끝나면 다음 작업이 사라짐 → 루프가 같은 일만 반복 PROMPT.md엔 메타 지시만, 실제 작업은 fix_plan.md에
--sandbox 없이 yolo 모드 호스트의 다른 디렉토리·계정 정보까지 건드림 worktree + sandbox + 훅 차단 3중 방어
MAX_ITER 미설정 무한 루프로 쿼터 폭주 50~100회 상한 설정, 반복마다 sleep 추가
fix_plan.md를 git에 커밋하지 않음 중간에 멈췄을 때 진행 상황 유실 매 반복 끝에 git commit도 에이전트가 수행
모든 LLM이 똑같이 잘할 거라 가정 약한 모델은 같은 실수를 반복하며 무한 루프 Pro 모델 사용 + 5회 연속 같은 파일만 수정 시 자동 중단 로직

언제 쓰면 좋고, 언제 피해야 하나

👍 잘 맞는 작업👎 안 맞는 작업
대규모 리팩터링 (TS strict 적용 등) 1~2시간이면 끝나는 작업 (오버킬)
레거시 코드에 단위 테스트 보강 창의적 설계가 필요한 신규 기능
의존성/lint 규칙 일괄 적용 실시간 사용자 응답이 필요한 작업
CHANGELOG·docs 보수적 갱신 되돌리기 어려운 DB 마이그레이션
이슈 트래커의 "good first issue" 일괄 처리 외부 API 키가 필요한 통합 작업 (인증 루프 어려움)
💬 에이전트에게 이렇게 요청하세요 — 랄프 루프 부트스트랩

처음부터 직접 만들기 부담스럽다면 Gemini CLI에게 만들어달라고 하세요:

프롬프트
> 이 프로젝트에 랄프 루프(Ralph Loop)를 셋업해줘. 다음을 만들어줘:
> 1. PROMPT.md — fix_plan.md를 읽고 다음 한 가지만 처리하는 메타 지시문
> 2. fix_plan.md — README와 package.json을 분석해 시작 작업 5개 제안
> 3. ralph.sh — gemini --approval-mode=yolo --output-format=json 사용,
>    MAX_ITER=50, STOP 파일 감지, .ralph-logs/ 디렉토리에 로그 저장
> 4. .gitignore에 .ralph-logs/와 STOP 추가
> 5. 실행 전 확인사항을 README의 새 섹션 "Ralph Loop 운용"에 작성
> 안전을 위해 먼저 git worktree를 만들고 그 안에서 동작하도록 안내해줘.

참고 자료

GitHub CLI 연동 (gh)

GitHub CLI(gh)를 Gemini CLI와 함께 사용해 이슈·PR·릴리스를 터미널에서 자동화하세요.

💡 왜 함께 쓰나?

Gemini CLI가 코드를 작성/수정하면, gh가 그 결과를 이슈 작성/PR 생성/릴리스 배포로 자동화합니다. 두 CLI를 셸 파이프와 슬래시 명령으로 묶으면 "코드 변경 → 커밋 → PR 생성 → 리뷰 요청"까지 한 줄로 끝낼 수 있습니다. Gemini CLI 내부 슬래시 명령 /setup-github로 GitHub Actions 자동화도 한 번에 셋업 가능.

설치

플랫폼명령
macOS (Homebrew)brew install gh
macOS (MacPorts)sudo port install gh
Windows (winget)winget install --id GitHub.cli
Windows (Scoop)scoop install gh
Ubuntu/Debiansudo apt install gh (공식 저장소 등록 후)
Fedora/RHELsudo dnf install gh
Arch Linuxsudo pacman -S github-cli

최신 설치 가이드: github.com/cli/cli#installation

인증

Terminal
# 대화형 OAuth 로그인 (브라우저 자동 오픈)
gh auth login

# 토큰 기반 로그인 (CI/CD)
echo "$GITHUB_TOKEN" | gh auth login --with-token

# 인증 상태 확인
gh auth status

# 다른 호스트 (GitHub Enterprise)
gh auth login --hostname github.mycompany.com

인증 정보는 OS 키체인(macOS Keychain / Windows Credential Manager / Linux libsecret)에 저장됩니다.

이슈 관리

Terminal
# 새 이슈 작성 (대화형)
gh issue create

# 본문 파일에서 작성 (자동화 친화)
gh issue create --title "버그: 로그인 실패" --body-file issue.md --label bug

# 이슈 목록 (필터링)
gh issue list --label "kind/bug" --state open --limit 20
gh issue list --assignee @me

# 특정 이슈 조회
gh issue view 123              # 브라우저
gh issue view 123 --web

# 이슈 닫기/재오픈/댓글
gh issue close 123 --comment "Fixed in #456."
gh issue reopen 123
gh issue comment 123 --body "확인 부탁드립니다."

Pull Request 관리

Terminal
# 현재 브랜치로 PR 생성 (HEREDOC으로 본문)
gh pr create --title "feat: 새 기능 추가" --body "$(cat <<'EOF'
## 요약
- 새 X 기능 추가
- Y 버그 수정

## 테스트
- [ ] 단위 테스트 통과
- [ ] 수동 검증

Closes #123
EOF
)"

# PR 목록 / 조회
gh pr list --state open --label "ready-to-review"
gh pr view 456
gh pr view 456 --web

# PR 체크아웃 (리뷰용)
gh pr checkout 456

# PR 머지 (4가지 전략)
gh pr merge 456 --merge          # merge commit
gh pr merge 456 --squash         # squash and merge
gh pr merge 456 --rebase         # rebase and merge
gh pr merge 456 --auto --squash  # CI 통과 후 자동 머지

# 브랜치 정리
gh pr merge 456 --squash --delete-branch

# 리뷰
gh pr review 456 --approve
gh pr review 456 --request-changes --body "..."
gh pr review 456 --comment --body "..."

저장소 / 워크플로우 / 릴리스

Terminal
# 저장소
gh repo create my-project --public --source=. --push   # 로컬 → 신규 GitHub 저장소
gh repo clone owner/repo
gh repo fork owner/repo --clone

# Actions 워크플로우
gh workflow list
gh workflow view ci.yml
gh workflow run release.yml -f version=v1.2.3   # 입력값 전달
gh run list --workflow=ci.yml --limit 10
gh run view 12345 --log                          # 전체 로그
gh run watch                                      # 진행 중인 run 실시간 모니터

# 릴리스
gh release create v1.0.0 --generate-notes
gh release create v1.0.0 ./dist/*.tar.gz --notes-file CHANGELOG.md
gh release list
gh release download v1.0.0

Gemini CLI와 통합 패턴

패턴 1: 코드 리뷰 자동 요청

Gemini CLI로 작업 후 gh로 PR 생성을 한 번에:

Gemini CLI
> src/auth/ 모듈을 리팩토링하고, 변경사항을 새 브랜치에 커밋한 다음
> gh pr create로 PR을 만들어줘. PR 본문에는 변경 사항 요약과
> "Closes #142"를 포함해줘.

패턴 2: 이슈를 GEMINI.md 컨텍스트로 주입

Terminal
# 이슈 본문을 그대로 Gemini에 전달
gh issue view 123 --json title,body --jq '"# \(.title)\n\n\(.body)"' \
  | gemini -p "이 이슈를 분석하고 구현 플랜을 만들어줘"

# 여러 이슈를 한꺼번에
gh issue list --label bug --json number,title,body --limit 5 \
  | gemini -p "이 버그들의 공통 원인을 찾아줘"

패턴 3: PR diff 자동 리뷰

Terminal
gh pr diff 456 | gemini -p "이 PR의 보안·성능 문제점을 찾아 인라인 코멘트로 정리해줘"

패턴 4: 자동화 스크립트

auto-review.sh
#!/usr/bin/env bash
PR=$1
# 1) PR 가져와서 체크아웃
gh pr checkout "$PR"
# 2) Gemini로 분석
gh pr diff "$PR" | gemini -p "주요 변경 사항 요약" -o text > /tmp/summary.md
# 3) 리뷰 코멘트로 게시
gh pr review "$PR" --comment --body-file /tmp/summary.md

패턴 5: /setup-github 슬래시 명령

Gemini CLI 안에서 /setup-github를 실행하면 이슈 트리아지/PR 리뷰용 GitHub Actions 워크플로우를 자동 생성합니다 (Gemini CLI 자체에 내장된 명령).

주요 환경 변수

변수용도
GH_TOKEN / GITHUB_TOKEN인증 토큰 (CI/CD 사용)
GH_HOST기본 호스트 (예: github.mycompany.com)
GH_REPO기본 저장소 (owner/repo)
GH_EDITOR에디터 (예: code --wait, vim)
GH_PAGER출력 페이저 (cat으로 비활성화)
NO_COLOR색상 출력 비활성화

유용한 옵션

옵션설명
--json <fields>JSON 출력 (자동화에 필수)
--jq <expr>JSON에 jq 쿼리 적용
--template <Go-template>Go 템플릿으로 출력 가공
--web해당 항목을 브라우저로 열기
--repo owner/repo현재 디렉토리와 다른 저장소 지정

확장 (gh extension)

Terminal
# 검색·설치
gh extension search
gh extension install owner/gh-extension-name

# 추천 확장 예
gh extension install dlvhdr/gh-dash       # 대시보드 TUI
gh extension install seachicken/gh-poi    # 머지된 로컬 브랜치 정리
gh extension install meiji163/gh-notify   # 알림 관리

# 업데이트 / 제거
gh extension upgrade --all
gh extension remove gh-dash
⚠️ 보안 주의
  • gh auth login --with-token 사용 시 토큰을 환경 변수나 secret manager에 보관 — 셸 히스토리에 직접 입력 금지
  • CI에서는 GITHUB_TOKEN(자동 발급) 또는 fine-grained PAT를 권장
  • Gemini CLI에 PR 본문/이슈를 입력으로 줄 때, 사내 비공개 정보가 외부 모델로 전송될 수 있음을 인지

설정 파일

settings.json으로 Gemini CLI의 동작을 세밀하게 제어하세요.

설정 파일 위치

설정 파일은 두 위치에 저장됩니다. 워크스페이스(프로젝트) 설정이 사용자 설정을 덮어씁니다:

우선순위위치설명
1 (최종)명령줄 인자 (--model, -p 등)가장 높은 우선순위
2환경 변수 (GEMINI_MODEL 등)셸 환경 값
3System Overrides (GEMINI_CLI_SYSTEM_SETTINGS_PATH)관리자 강제 설정
4프로젝트/.gemini/settings.json (Workspace)워크스페이스별 설정
5~/.gemini/settings.json (User)사용자(글로벌) 설정
6system-defaults.json시스템 기본 설정 파일
7 (기준)하드코딩 기본값가장 낮은 우선순위

병합은 아래 → 위 순서로 덮어쓰기 방식이며, 배열/객체(예: mcpServers)는 각 단계에서 머지됩니다. CLI 인자 > 환경 변수 > 설정 파일의 큰 틀을 기억하세요.

주요 최상위 키

역할
general승인 모드(defaultApprovalMode), 자동 업데이트, Vim 모드, 플랜, 세션 보존 등
ui테마(theme), autoThemeSwitching, showLineNumbers, compactToolOutput, accessibility.screenReader
output출력 포맷 (format: text / json / stream-json)
modelname, maxSessionTurns, compressionThreshold, disableLoopDetection, skipNextSpeakerCheck
contextfileName, fileFiltering.respectGitIgnore, discoveryMaxDirs, loadMemoryFromIncludeDirectories
toolssandboxAllowedPaths, shell.enableInteractiveShell, useRipgrep, truncateToolOutputThreshold, disableLLMCorrection
mcpServersMCP 서버 정의 (서버명 → command/args/env 등)
securitytoolSandboxing, disableYoloMode, folderTrust.enabled, enablePermanentToolApproval, environmentVariableRedaction.enabled
skills스킬 활성화 (skills.enabled)
hooks훅 이벤트 핸들러 등록 (이벤트명별 매처/명령 배열)
telemetry텔레메트리 수집 설정
experimental실험적 기능 (voiceMode, worktrees, modelSteering, memoryV2 등)
policyPaths / adminPolicyPaths정책 엔진 파일 경로

환경 변수 치환 구문

settings.jsongemini-extension.json의 문자열 값에서 환경 변수를 치환할 수 있습니다:

구문동작
$VAR_NAME환경 변수로 치환 (단순 형태)
${VAR_NAME}환경 변수로 치환 (중괄호 형태)
${VAR_NAME:-DEFAULT}환경 변수 치환, 없으면 DEFAULT 사용

민감 환경 변수 자동 리댁션

도구 실행 시 변수 이름에 다음 키워드가 포함되면 자동으로 가려집니다(best effort):

TOKEN · SECRET · PASSWORD · KEY · AUTH · CREDENTIAL · PRIVATE · CERT

settings.json (커스터마이징)
{
  "security": {
    "environmentVariableRedaction": {
      "enabled": true,
      "allowed": ["PUBLIC_API_KEY"],
      "blocked": ["MY_CUSTOM_SECRET_VAR"]
    }
  }
}

텔레메트리 옵트아웃 (privacy)

기본적으로 익명화된 도구 이름, API 요청 메타데이터, 세션 설정이 수집됩니다. 프롬프트, 응답, 파일 내용은 수집되지 않습니다. 완전히 비활성화하려면:

settings.json
{
  "privacy": {
    "usageStatisticsEnabled": false
  }
}
💬 에이전트에게 이렇게 요청하세요

설정 파일을 처음 다룬다면 원하는 정책을 자연어로 말하고 기존 설정 보존을 함께 요청하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json을 확인해서 내가 원하는 Gemini CLI 설정을 추가해줘. 파일이 없으면 만들고, 기존 설정은 유지해줘. 원하는 설정은 다음과 같아: [여기에 원하는 기능과 값을 적기]

자주 쓰는 general 설정

설명
general.defaultApprovalMode기본 승인 모드 (default / auto_edit / yolo / plan)
general.vimModeVim 키바인딩 활성화
general.enableAutoUpdate자동 업데이트 활성화
general.plan.enabled플랜 모드 기능 활성화
general.checkpointing.enabled체크포인팅 활성화
general.sessionRetention.maxAge세션 자동 삭제 보존 기간 (기본 30일)
general.enableNotifications데스크톱 알림 활성화 (실험적)

설정 예시

~/.gemini/settings.json
{
  "ui": {
    "theme": "dark"
  },
  "model": {
    "name": "auto"
  },
  "context": {
    "fileName": ["GEMINI.md"]
  },
  "tools": {
    "sandbox": false
  },
  "security": {
    "toolSandboxing": true
  },
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "$GITHUB_TOKEN"
      }
    }
  },
  "hooks": {}
}

권한 (Permissions)

5개 보안 레이어를 한눈에 — 어떤 레이어가 무엇을 막는지, 언제 무엇을 켜야 하는지, 그리고 프롬프트 한 줄로 한 번에 설정하는 법.

📍 이 페이지의 역할

여기는 "허브" 페이지입니다. 각 레이어의 개념과 비교만 다루고, 세부 설정은 전용 페이지로 안내합니다. 한 곳에서 전체를 조망하고 필요한 곳으로 점프하기 위한 페이지입니다.

5개 보안 레이어 비교

Gemini CLI는 자율 에이전트입니다 — 파일을 직접 수정하고 셸 명령을 실행합니다. 위험을 줄이기 위해 다음 5개 레이어가 겹쳐 동작합니다:

#레이어막는 것전용 페이지
1 승인 모드 도구 실행 전 사용자 확인 CLI 치트시트 §--approval-mode
2 신뢰 폴더 모르는 디렉토리에서의 자동 실행 신뢰 폴더
3 정책 엔진 도구·인자 단위 세밀한 거부/허용 정책 엔진
4 샌드박스 실수가 호스트 시스템으로 새는 것 샌드박싱
5 훅 차단 실행 직전 스크립트 기반 동적 거부 훅(Hooks)

의사결정 가이드: 어떤 레이어부터 켤까?

모든 레이어를 한꺼번에 켤 필요는 없습니다. 상황별로 다음 순서를 권장합니다:

처음 사용자
   ↓
[1] 승인 모드 = default (기본값, 모든 도구 확인)
   ↓ "매번 확인이 귀찮다"
[2] 신뢰 폴더 등록 + 승인 모드 = auto_edit
   ↓ "셸 명령 중 위험한 패턴만 막고 싶다"
[3] 정책 엔진 + 위험 패턴 deny 규칙
   ↓ "yolo 모드로 자율 실행하고 싶다"
[4] 샌드박스(docker/seatbelt) + 강력한 정책
   ↓ "팀 전체에 적용 + 감사 로그 필요"
[5] 훅 기반 동적 차단 + 분석 로그

레이어별 한 줄 요약

1. 승인 모드 — 4가지 중 선택

모드동작설정
default모든 도구 실행 전 사용자 승인--approval-mode=default
auto_edit파일 편집은 자동, 셸은 승인--approval-mode=auto_edit
yolo전체 자동 승인 (위험)--approval-mode=yolo
plan읽기 전용 (수정 불가)--approval-mode=plan

세션 중 Shift+Tab으로 default → auto_edit → plan 순환. 영구 설정은 general.defaultApprovalMode. yolo 차단은 security.disableYoloMode = true.

2. 신뢰 폴더 — 디렉토리 단위 허용

처음 진입한 폴더에서 "이 폴더를 신뢰합니까?" 다이얼로그가 뜹니다. 신뢰한 폴더는 자동 도구 실행이 허용됩니다.

자세한 설정과 비신뢰 폴더 제한 사항 → 신뢰 폴더 전용 페이지

3. 정책 엔진 — 도구·인자 패턴 단위 규칙

도구 단위가 아니라 "도구 + 인자 패턴" 단위로 허용/거부할 수 있는 정밀 시스템. TOML 포맷으로 작성하며 우선순위로 충돌 해결.

~/.gemini/policies/dangerous.toml (요약 예시)
[[rule]]
toolName = "run_shell_command"
commandPrefix = "rm -rf"
decision = "deny"
priority = 100

전체 문법, 매처 옵션(mcpName/mode/commandPrefix 등), 파일 위치 → 정책 엔진 전용 페이지

4. 샌드박스 — 실행 환경 자체를 격리

위 1~3이 "무엇을 허용/거부"라면 샌드박스는 "설사 잘못 실행되어도 호스트는 안전"한 마지막 방어선입니다.

Terminal
GEMINI_SANDBOX=docker gemini --approval-mode=yolo   # 컨테이너 격리
GEMINI_SANDBOX=sandbox-exec gemini                  # macOS Seatbelt

6가지 macOS Seatbelt 프로파일, GEMINI_SANDBOX 값, 커스텀 이미지 → 샌드박싱 전용 페이지

5. 훅 기반 차단 — 동적 스크립트 거부

BeforeTool 후크에서 exit 2를 반환하면 모델에게 "거부됨, 다른 방법 시도"가 전달됩니다. 패턴 매칭으로 차단할 수도 있고, ML 분석 결과를 기반으로 조건부 차단할 수도 있습니다.

구현 예시(위험 명령 감사 + 차단) → 훅(Hooks) §④ 위험 명령·실패율 모니터링

💬 프롬프트로 한 번에 설정

JSON/TOML을 직접 작성하기 부담스럽다면, 아래 4가지 프롬프트를 채팅창에 그대로 붙여넣으세요. Gemini CLI가 알아서 파일을 만들고 병합합니다.

레시피 1 — "안전한 기본값" 한 번에 적용

프롬프트
> 이 프로젝트에 보수적인 권한 기본값을 설정해줘:
> 1. .gemini/settings.json 에 다음 키를 추가/병합:
>    - general.defaultApprovalMode = "auto_edit"
>    - security.folderTrust.enabled = true
>    - security.disableYoloMode = true
>    - security.environmentVariableRedaction.enabled = true
> 2. .gemini/policies/safety.toml 을 만들어:
>    - run_shell_command 의 rm -rf, sudo, dd, chmod 777 패턴 → deny
>    - write_file 의 .env, secrets/, credentials.json → deny
>    - write_file/replace 기본은 ask_user (우선순위 낮게)
> 3. .gitignore 에 .gemini/analytics/, .gemini/tmp/ 추가
> 작업 후 변경한 내용을 표로 요약해줘.

레시피 2 — "yolo 안전망" (worktree + 샌드박스 + 훅)

프롬프트
> yolo 모드를 안전하게 쓸 수 있는 환경을 만들어줘:
> 1. git worktree로 별도 브랜치(experimental/yolo) 생성
> 2. 그 worktree의 .gemini/settings.json 에:
>    - "security.toolSandboxing" = true
>    - "general.defaultApprovalMode" = "yolo"
> 3. .gemini/hooks/block-dangerous.sh 작성 (BeforeTool 부착):
>    - rm -rf /, git push --force, sudo, curl | sh 패턴은 exit 2 차단
> 4. GEMINI_SANDBOX=docker 로 실행하는 README.yolo.md 작성

레시피 3 — 팀 공유 정책 파일

프롬프트
> 팀 전체가 따를 .gemini/policies/team.toml 을 작성해줘:
> - 읽기 전용 도구(read_file, glob, search_file_content) → allow (priority 10)
> - npm/pnpm/yarn 의 test/lint/build 스크립트 → allow (priority 50)
> - git 의 status/diff/log/show → allow, 그 외 git 명령 → ask_user
> - production/, .env*, *.pem, *.key 쓰기 → deny (priority 1000)
> - 그 외 모든 도구 → ask_user
> 각 규칙에 왜 그렇게 분류됐는지 주석을 달아줘.

레시피 4 — 현재 권한 상태 자동 점검

프롬프트
> 이 프로젝트의 권한 설정을 점검해줘:
> 1. .gemini/settings.json, ~/.gemini/settings.json,
>    .gemini/policies/*.toml, ~/.gemini/policies/*.toml,
>    ~/.gemini/trustedFolders.json, .gemini/hooks/* 모두 읽기
> 2. 5개 권한 레이어 각각의 현재 상태를 정리
> 3. "안전(🟢) / 보통(🟡) / 위험(🔴)" 등급으로 평가
> 4. 개선 제안과 함께 .gemini/permissions-audit.md 로 저장

권장 프리셋 (상황별 조합)

시나리오승인신뢰 폴더정책샌드박스
일반 개발 default .env 차단
리팩토링 마라톤 auto_edit 위험 패턴 deny 셸 감사 로그
자율 작업 (랄프 루프) yolo ✅ worktree 엄격 docker 위험 차단 + 분석
탐색 · 코드 리뷰 plan
CI / 무인 자동화 yolo 최소 권한 docker 실패 알림
⚠️ 안티패턴
  • --approval-mode=yolo를 호스트에서 단독 실행 — 항상 샌드박스나 worktree와 함께
  • security.folderTrust.enabled = false 글로벌 비활성화 — 모든 폴더가 신뢰됨
  • 정책 파일에 decision = "allow"를 광범위하게 — 화이트리스트가 무력화됨
  • 환경 변수 리댁션 비활성 상태로 외부 hook 사용 — 토큰/시크릿 로그 유출

테마

Gemini CLI의 터미널 UI를 취향에 맞게 커스터마이징하세요.

테마 설정

공식 키 경로는 ui.theme 입니다. settings.json에서 다음과 같이 설정합니다:

settings.json
{
  "ui": {
    "theme": "dark"
  }
}
⚠️ 주의

settings.json에 테마가 지정되어 있으면 /theme 대화형 명령으로 변경할 수 없습니다. 대화형 선택을 사용하려면 해당 키를 제거하세요.

Gemini CLI는 /theme 명령어로 다양한 테마를 선택하거나 settings.json에서 테마명을 직접 지정할 수 있습니다.

사용 가능한 테마

카테고리테마 이름
다크 테마ANSI, Atom One, Ayu, Default, Dracula, GitHub, Holiday, Shades Of Purple, Solarized Dark, Tokyo Night
라이트 테마ANSI Light, Ayu Light, Default Light, GitHub Light, Google Code, Solarized Light, Xcode

커스텀 테마 정의

settings.jsonui.customThemes 블록에서 색상을 직접 정의할 수 있습니다:

settings.json
{
  "ui": {
    "customThemes": {
      "MyCustomTheme": {
        "name": "MyCustomTheme",
        "type": "custom",
        "background": {
          "primary": "#181818",
          "diff.added": "#1a3328",
          "diff.removed": "#3d2e0a"
        },
        "text": {
          "primary": "#f0f0f0",
          "secondary": "#a0a0a0",
          "link": "#5599ff",
          "accent": "#fdd663",
          "response": "#ffffff"
        },
        "border": {
          "default": "#333333",
          "focused": "#5599ff"
        }
      }
    }
  }
}
⚠️ /theme 변경 충돌

settings.jsonui.theme(이름 또는 파일 경로)가 정의되어 있으면 /theme 대화형 명령으로 테마를 변경할 수 없습니다. 대화형 선택을 사용하려면 먼저 해당 설정을 제거하세요.

커스텀 명령어

자주 사용하는 프롬프트를 슬래시 명령어로 등록하세요.

커스텀 명령어란?

자주 사용하는 프롬프트 패턴을 슬래시 명령어로 만들어 빠르게 재사용할 수 있습니다.

파일 위치 및 우선순위

커스텀 명령어는 TOML 파일(.toml)로 정의하며 두 위치에서 자동 로드됩니다:

  1. 프로젝트: <프로젝트 루트>/.gemini/commands/
  2. 사용자: ~/.gemini/commands/

같은 이름의 명령이 양쪽에 있으면 프로젝트 명령이 우선합니다. 하위 디렉토리는 콜론(:)으로 네임스페이스가 됩니다:

TOML 필드

필드필수설명
promptGemini에 전송되는 프롬프트 텍스트
description도움말/자동완성에 표시될 한 줄 설명

인자 및 특수 구문

구문용도
{{args}}사용자 인자 주입 (셸 블록 내에서는 자동 이스케이프). 없으면 두 줄바꿈 뒤 뒤에 덧붙여짐.
!{...}셸 명령 실행 후 표준 출력을 프롬프트에 삽입 (실행 전 사용자 확인)
@{...}파일/디렉토리 내용 임베딩 (이미지/PDF/오디오/비디오 멀티모달 지원). .gitignore/.geminiignore 존중

예시

.gemini/commands/review.toml
description = "현재 diff 리뷰"
prompt = """
다음 변경사항을 리뷰하고 잠재적 문제점을 지적해줘.

!{git diff HEAD~1}

추가 지시사항: {{args}}
"""

무시 파일 (.geminiignore)

AI가 접근하지 않아야 할 파일과 디렉토리를 지정하세요.

.geminiignore란?

.gitignore와 유사한 형식으로, Gemini CLI가 무시할 파일과 디렉토리 패턴을 지정합니다. 민감한 파일, 대용량 바이너리, 불필요한 종속성 폴더 등을 제외할 수 있습니다.

⚠️ Git에는 영향 없음

.geminiignore에 지정된 파일은 Gemini CLI에게만 보이지 않을 뿐, Git이나 다른 도구에서는 정상적으로 추적됩니다. 민감한 파일은 반드시 .gitignore에도 추가하세요.

💡 변경 반영

.geminiignore 변경 사항은 Gemini CLI 세션을 재시작해야 적용됩니다.

예시

.geminiignore
# 종속성
node_modules/
vendor/

# 빌드 산출물
dist/
build/
*.min.js

# 민감한 파일
.env
.env.local
credentials.json
*.pem

# 대용량 파일
*.zip
*.tar.gz
data/

요금 및 할당량

Gemini CLI의 무료 사용 한도와 유료 플랜을 확인하세요.

⚠️ 할당량은 변경될 수 있습니다

아래 수치는 문서 작성 시점 기준이며, Google의 정책에 따라 언제든지 변경될 수 있습니다. 최신 정확한 정보는 공식 요금 및 할당량 페이지를 확인하세요.

무료 사용

인증 방법일일 한도비고
Google 계정 무료1,000건/일Gemini Code Assist 기반
Gemini API 키 (무료) 무료15 RPM(분당 요청 수) / 250건/일Flash 모델 위주, 최신 요율 확인 필요
Vertex AI Express가변90일 무료 사용 후 결제 설정 필요

개인 유료 플랜

플랜일일 한도
Google AI Pro 1,500건/일
Google AI Ultra 2,000건/일

조직/기업 플랜

플랜일일 한도
Code Assist Standard1,500건/일
Code Assist Enterprise2,000건/일
Workspace AI Ultra2,000건/일

종량제

사용량 확인

/stats model 명령으로 현재 세션의 토큰 사용량과 적용된 한도를 실시간으로 확인할 수 있습니다. 세션 종료 시에도 사용량 요약이 자동으로 표시됩니다.

Gemini CLI
/stats model

키보드 단축키

Gemini CLI를 더 빠르게 사용하기 위한 단축키 모음입니다.

세션 제어

단축키설명비고
Ctrl+C현재 작업 중단 / 응답 취소스트리밍 응답 중 사용 가능
Ctrl+D세션 종료 (EOF)빈 입력에서 동작
Ctrl+L터미널 화면 지우고 UI 재렌더링대화 컨텍스트는 유지됨 (컨텍스트 초기화는 /clear)
Ctrl+Z프로세스 백그라운드 이동터미널에서 fg로 복귀
Ctrl+\\강제 종료 (SIGQUIT)응답 없을 때 비상 탈출용
Ctrl+[취소 / 다이얼로그 닫기 (Esc 대체)

앱 제어

단축키설명
F12디버그 콘솔 토글 (상세 오류 정보)
Ctrl+TTODO 리스트 전체 표시 토글
Alt+M마크다운 렌더링 토글
Ctrl+S마우스 모드 토글 (스크롤/클릭)
Ctrl+YYOLO(자동 승인) 모드 토글
Ctrl+B백그라운드 셸 표시 토글
F4IDE 컨텍스트 세부 정보 표시
F6 / F7세션 녹화 시작 / 중지
F8현재 프레임 스냅샷 덤프

입력 편집

단축키설명
Tab자동 완성 (슬래시 명령, 파일 경로)
Up / Down이전/다음 입력 히스토리 탐색
Ctrl+A줄 시작으로 커서 이동
Ctrl+E줄 끝으로 커서 이동
Ctrl+K커서부터 줄 끝까지 삭제
Ctrl+U줄 시작부터 커서까지 삭제
Ctrl+W / Alt+Backspace이전 단어 삭제
Alt+D / Ctrl+Delete다음 단어 삭제
Alt+B / Ctrl+Left이전 단어로 이동
Alt+F / Ctrl+Right다음 단어로 이동
Ctrl+P / Ctrl+N이전 / 다음 히스토리 항목
Ctrl+R히스토리 역방향 검색
Ctrl+G현재 프롬프트를 외부 편집기에서 편집
Ctrl+Shift+G플랜을 외부 편집기에서 편집

실행 취소 / 다시 실행

단축키설명
Cmd+Z / Alt+Z최근 텍스트 편집 실행 취소
Shift+Cmd+Z / Ctrl+Shift+Z / Alt+Shift+Z다시 실행

멀티라인 입력

단축키설명
Enter입력 전송
Shift+Enter줄바꿈 (제출 없이)
Ctrl+Enter줄바꿈
Alt+Enter줄바꿈
Cmd/Win+Enter줄바꿈
Ctrl+J줄바꿈

컨텍스트별 특수 키

단축키설명
! (빈 프롬프트에서)셸 모드 진입/해제. 셸 모드에서는 입력이 바로 셸로 실행됨. !ls -la처럼 한 번만 실행도 가능 (입출력이 세션 컨텍스트에 기록되어 후속 프롬프트에서 참조 가능)
? (빈 프롬프트에서)단축키 패널 토글. 다시 누르면 패널이 닫히고 ?가 입력됨
Tab+Tab최소/전체 UI 표시 토글 (자동완성 활성 아닐 때). 설정은 세션 간 유지
Esc+Esc입력이 있으면 프롬프트 초기화, 비어있으면 이전 상호작용 탐색/되감기

슬래시(/) 명령어

명령어설명
/help도움말 표시
/clear대화 컨텍스트 초기화
/quit 또는 /exit세션 종료
/stats model토큰 사용량 및 모델 통계 확인
/memory show현재 로드된 메모리(컨텍스트) 표시
/memory refreshGEMINI.md 파일 다시 로드
/memory add <텍스트>글로벌 ~/.gemini/GEMINI.md에 메모 추가 (프로젝트 파일에는 추가되지 않음)
/chat save <이름>현재 대화 저장
/chat resume <이름>저장된 대화 불러오기
/chat list저장된 대화 목록 표시
/chat delete <이름>저장된 대화 삭제
/chat share현재 대화를 공유 가능한 형식으로 내보내기
/chat debug대화 디버그 정보 표시
/compress긴 대화를 요약하여 컨텍스트 압축
/themeUI 테마 선택 다이얼로그 열기 (이름 인자 없음 — 이름 지정은 settings.json ui.theme)
💡 팁

Tab을 누르면 사용 가능한 슬래시 명령어가 자동 완성됩니다. Ctrl+R로 이전 입력 히스토리를 검색할 수 있습니다(터미널 readline 지원 시). 슬래시 명령어는 항상 Tab으로 완성하는 것이 가장 정확합니다.

문제 해결

자주 발생하는 문제와 해결 방법을 안내합니다.

설치 관련

Node.js 버전 오류

Node.js 20.0.0 이상이 필요합니다.

Terminal
# 현재 버전 확인
node --version

# nvm으로 업그레이드
nvm install 20
nvm use 20

권한 오류 (npm)

Terminal
# npm 글로벌 디렉토리 변경
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

# 재설치
npm install -g @google/gemini-cli

인증 관련

로그인이 안 될 때

API 키 오류

MCP 서버 관련

서버가 연결되지 않을 때

도구가 발견되지 않을 때

기업 네트워크 인증서 문제

UNABLE_TO_GET_ISSUER_CERT_LOCALLY 또는 unable to get local issuer certificate 오류가 발생할 때:

Terminal
# 시스템 인증서 저장소 사용 (먼저 시도)
export NODE_USE_SYSTEM_CA=1

# 또는 명시적 CA 인증서 경로
export NODE_EXTRA_CA_CERTS=/path/to/your/corporate-ca.crt

# Windows PowerShell
$env:NODE_USE_SYSTEM_CA=1
$env:NODE_EXTRA_CA_CERTS="C:\path\to\corporate-ca.crt"

기업 방화벽이 SSL/TLS 트래픽을 가로채고 커스텀 CA 인증서가 필요할 때 사용. NODE_USE_SYSTEM_CA를 먼저 시도하고 안 되면 NODE_EXTRA_CA_CERTS 사용.

CI 환경 자동 감지 이슈

CI_TOKEN 같은 CI_ 프리픽스 환경 변수가 있으면 인터랙티브 모드 진입이 차단됩니다.

MCP EADDRINUSE 오류

MCP 서버 시작 시 EADDRINUSE (Address already in use) 발생 시:

Terminal
# Linux/macOS — 점유 프로세스 찾기
lsof -i :3000

# Windows
netstat -ano | findstr :3000

해결: 점유 프로세스 종료 또는 MCP 서버 설정에서 다른 포트 지정.

사전 검사 (commit 전)

Terminal
npm run preflight

포맷팅, 린트, 타입 오류 등 흔한 문제를 사전에 잡아냅니다.

디버그 모드

Terminal
# CLI 디버깅
gemini --debug             # 상세 로깅 (-d)
# 인터랙티브 모드 중 F12 → 디버그 콘솔

# 환경 변수 (코어 디버그 상세도)
DEBUG_MODE=true gemini

# Node.js 디버거로 단계별 실행
node --inspect packages/cli/dist/index.js
⚠️ DEBUG / DEBUG_MODE는 .env에서 자동 제외

프로젝트 .envDEBUG/DEBUG_MODE는 Gemini CLI 동작 간섭 방지를 위해 자동 제외됩니다. 디버그 모드 환경 변수가 동작하지 않을 때:

  • 옵션 1: .gemini/.env 사용 (자동 제외 안 됨)
  • 옵션 2: advanced.excludedEnvVars 설정 변경 (기본 제외 목록 오버라이드)

종료 코드 (스크립팅용)

코드오류 유형
41FatalAuthenticationError — 인증 오류
42FatalInputError — 잘못된 입력 (비대화형)
44FatalSandboxError — Docker/Podman/Seatbelt 오류
52FatalConfigError — settings.json 오류
53FatalTurnLimitedError — 최대 턴 도달

FAQ

자주 묻는 질문과 답변을 모았습니다.

일반

Q. Gemini CLI는 무료인가요?

네, Google 계정(OAuth)으로 로그인하면 Gemini Code Assist 기반의 무료 사용 할당량을 제공합니다. Gemini API 키(무료)의 경우 Flash 모델 위주로 제한된 RPM/일일 한도가 적용됩니다. 정확한 최신 한도는 공식 요금 페이지에서 확인하세요.

Q. 어떤 운영체제를 지원하나요?

macOS 15+, Windows 11 24H2+, Ubuntu 20.04+를 공식 지원합니다.

Q. 오프라인에서 사용할 수 있나요?

아니요, Gemini CLI는 Google의 AI 모델에 접근하기 위해 인터넷 연결이 필요합니다.

Q. Claude Code나 GitHub Copilot과 차이점은 무엇인가요?

Gemini CLI는 Google 계정만으로 무료 사용이 가능하며, Gemini 모델을 기반으로 합니다. 오픈소스이며 MCP 프로토콜 지원, 에이전트 스킬, 훅 등 확장성이 뛰어납니다.

Q. VS Code 등 IDE에서도 사용할 수 있나요?

Gemini CLI는 터미널 도구이므로 IDE 내 터미널에서 실행할 수 있습니다. ACP(Agent Client Protocol) 모드를 통해 프로그래밍 방식으로 IDE 확장과 연동도 가능합니다.

Q. 프로젝트에 따라 다른 설정을 사용할 수 있나요?

네, 프로젝트 루트의 GEMINI.md 파일과 .gemini/settings.json에 프로젝트별 설정을 작성하면 해당 폴더에서만 적용됩니다.

모델

Q. Gemini 3은 무엇인가요?

Gemini 3은 Google의 최신 AI 모델 시리즈입니다. Gemini CLI에서 프리뷰로 사용할 수 있으며, auto 모드에서 자동으로 선택될 수 있습니다.

Q. 서브 에이전트의 모델을 변경할 수 있나요?

현재 /model 명령어와 --model 플래그는 서브 에이전트에 영향을 주지 않습니다.

Q. Flash와 Pro 모델의 차이는 무엇인가요?

Flash는 빠르고 가벼운 작업(코드 설명, 간단한 Q&A)에 적합하고 Pro는 복잡한 추론, 대규모 코드 분석에 강합니다. Auto 모드에서는 프롬프트 복잡도에 따라 자동으로 선택됩니다.

Q. 컨텍스트 윈도우는 얼마나 되나요?

Gemini 2.5 Pro는 최대 100만 토큰(1M), Flash는 최대 100만 토큰의 컨텍스트 윈도우를 지원합니다. Gemini 3 계열 모델도 프리뷰로 제공 중이며 대규모 코드베이스도 한 번에 처리할 수 있습니다. 최신 수치는 공식 Gemini 3 페이지를 확인하세요.

MCP & 도구

Q. MCP 서버란 무엇인가요?

MCP(Model Context Protocol)는 AI 모델이 외부 도구와 통신하는 표준 프로토콜입니다. 파일 시스템, 데이터베이스, API 등 다양한 도구를 Gemini CLI에 연결할 수 있습니다.

Q. Python으로 MCP 서버를 만들려면 무엇이 필요한가요?

Python 3.10+, uv(패키지 매니저), mcp 패키지가 필요합니다. uvx mcp-server-filesystem처럼 별도 설치 없이 uvx로 바로 실행할 수도 있습니다.

Q. 에이전트 스킬과 MCP 서버의 차이는 무엇인가요?

MCP 서버는 독립적인 프로세스로 외부 도구를 제공하고, 에이전트 스킬은 SKILL.md 파일로 정의되며 .gemini/skills/ 또는 ~/.gemini/skills/ 경로에 위치합니다. 온디맨드로 작동하며 모델이 작업 관련성에 따라 자율적으로 활성화를 결정합니다.

보안

Q. 내 코드가 학습에 사용되나요?

인증 방법과 서비스 약관에 따라 다릅니다. 자세한 내용은 공식 문서의 약관 및 개인정보 보호 페이지를 확인하세요.

Q. 샌드박스 모드는 어떻게 작동하나요?

플랫폼별 격리 기술을 사용합니다. macOS는 Seatbelt, Linux는 Docker/gVisor, Windows는 icacls를 활용합니다. gemini -s로 활성화할 수 있습니다.

Q. 훅(Hook)을 사용해 AI 행동을 제어할 수 있나요?

네, BeforeTool, AfterTool, SessionStart, SessionEnd 등의 훅 이벤트에 쉘 스크립트를 연결하면 Gemini CLI가 특정 도구를 실행하기 전/후에 승인 요청, 로깅, 차단 등을 할 수 있습니다.

Q. API 키 없이 사용할 수 있나요?

네, Google 계정으로 OAuth 로그인하면 API 키 없이 사용할 수 있습니다. API 키는 자동화, CI/CD, 헤드리스 환경에서 유용합니다.

Q. 3rd party 도구(Claude Code, OpenClaw 등)에서 Gemini OAuth를 사용할 수 있나요?

⚠️ 아니요, 정책 위반입니다. Claude Code, OpenClaw, OpenCode 등 3rd party 도구로 Gemini CLI의 OAuth를 piggyback하여 백엔드에 접근하는 것은 TOS 위반이며 계정 정지/해지 사유가 됩니다. Gemini를 다른 코딩 에이전트와 사용하려면 Vertex AI 또는 Google AI Studio API 키를 사용하세요.

Q. `API error: 429 - Resource exhausted` 오류가 발생합니다.

API 요청 한도를 초과한 경우입니다. 해결 방법:

  1. 사용량 확인: Google AI Studio 또는 Google Cloud 프로젝트 대시보드에서 API 사용량 검토
  2. 프롬프트 최적화: 짧은 시간에 다수 요청 시 배치 처리 또는 요청 간 지연 추가
  3. 쿼터 증가 요청: 지속적으로 한도 초과 시 Google에 쿼터 증가 신청

Q. Gemini CLI 버전을 확인하려면?

Terminal
gemini --version    # 또는 -v
npm list -g @google/gemini-cli
pnpm list -g @google/gemini-cli
yarn global list @google/gemini-cli
brew list --versions gemini-cli

실행 중인 세션에서는 /about 명령으로 확인 가능합니다.

Q. Google AI Pro/Ultra 한도가 IDE와 공유되나요?

네, Google AI Pro/Ultra 구독자의 높은 한도는 Gemini CLI와 Gemini Code Assist IDE 확장의 에이전트 모드 사이에 공유됩니다. CLI에서 한도를 거의 다 사용하면 IDE에서도 한도 부족이 발생할 수 있습니다. Gemini 2.5 Pro와 Flash 사이에도 공유 쿼터입니다.

Q. 유료 플랜에서도 Google이 내 데이터로 모델을 학습시키나요?

유료 플랜에서는 학습에 사용하지 않습니다. Google AI Pro/Ultra 등 유료 플랜은 사용자 데이터를 모델 학습에 사용하지 않습니다. 무료 Gemini Code Assist for individuals 사용자도 개인정보 안내에 따라 옵트아웃 가능합니다.

Q. API 키를 안전하게 저장하려면?

  1. `.gemini/.env` 파일: 프로젝트 또는 홈에 두면 자동 로드. .gitignore에 반드시 포함.
  2. OS 키링 (가장 안전):
    • macOS: Keychain
    • Windows: Credential Manager
    • Linux: Secret Service API

피할 것: 스크립트 하드코딩, 소스 컨트롤 커밋.

Q. Windows에서 chmod +x 명령이 안 됩니다.

Windows에서는 chmod 같은 Unix 전용 명령이 기본 동작하지 않습니다. 해결 방법:

💡 더 많은 정보

공식 문서에서 더 자세한 정보를 확인하세요: geminicli.com/docs

Gemini 3 모델 NEW

Google의 최신 AI 모델 라인업인 Gemini 3을 Gemini CLI에서 사용하는 방법을 알아봅니다.

Gemini 3란?

Gemini 3은 Google의 차세대 AI 모델 시리즈입니다. 현재 다음 모델이 제공됩니다:

💡 Gemini 3.1 Pro Preview 롤아웃 중

Gemini 3.1 Pro Preview (gemini-3.1-pro-preview)가 순차적으로 롤아웃 중입니다. /modelManual에서 확인하세요. 접근 권한이 있다면 직접 지정할 수도 있습니다:

gemini -m gemini-3.1-pro-preview

활성화 방법

CLI 업그레이드

버전 0.21.1 이상이 필요합니다.

Terminal
npm install -g @google/gemini-cli@latest

모델 선택

/model 명령어를 실행하고 "Auto (Gemini 3)"를 선택합니다.

Gemini Code Assist 사용자

조직 관리자의 추가 설정이 필요합니다:

  1. Google Cloud 설정에서 릴리스 채널을 "Preview"로 변경
  2. 사용자가 /settings에서 "Preview Features" 활성화

모델 라우팅

라우팅 모드동작
Auto (Gemini 3)단순 프롬프트는 gemini-3-flash-preview, 복잡한 프롬프트는 gemini-3-pro-preview로 자동 라우팅
Pro가장 강력한 모델 우선 사용 (Gemini 3 활성화 시 gemini-3-pro-preview 고정)

일일 사용량 관리

Gemini 3 Pro의 일일 사용량 한도에 도달하면 CLI가 세 가지 옵션을 제시합니다:

  1. Gemini 2.5 Pro로 전환 — 대체 모델로 계속 작업
  2. 요금제 업그레이드 — 더 높은 한도로 이동
  3. 작업 중단 — 세션 일시 중지

높은 수요 기간에는 즉시 실패 대신 지수 백오프 재시도 로직이 적용됩니다.

모델 라우팅

모델 실패 시 자동 폴백(Fallback — 주 모델이 실패하면 대체 모델로 자동 전환)과 로컬 라우팅을 통한 안정적인 운영 방법을 알아봅니다.

🔀 모델 라우팅 결정 흐름
사용자 프롬프트 입력
ModelAvailabilityService 분석
⬇ 정상
✅ 현재 모델 유지
⬇ 실패(쿼터/오류)
⚠️ 폴백 시작
👤 사용자 확인
(내부 호출은 자동)
↓ 승인
🔄 대체 모델 전환

모델 선택 우선순위

우선순위방법예시설명
1 (최고)CLI 플래그gemini -m pro실행 시 직접 지정, 가장 높은 우선순위
2환경 변수GEMINI_MODEL=flash셸 환경에 설정, 플래그 없을 때 적용
3settings.json"model": { "name": "flash" }프로젝트·글로벌 설정 파일 (공식 키: model.name)
4로컬 GemmaHTTP 엔드포인트로컬에서 서빙 중인 경우만 적용 (실험적)
5 (기본)auto자동 선택위 설정 없을 때 복잡도에 따라 자동 결정

자동 폴백

Gemini CLI는 기본적으로 모델 라우팅이 활성화되어 있습니다. ModelAvailabilityService가 3단계로 관리합니다:

단계동작세부 내용
① 오류 감지폴백 트리거쿼터 초과, 서버 오류(5xx) 발생 시 자동 감지
② 사용자 동의확인 요청대화형 세션은 전환 전 사용자 확인. 내부 호출(프롬프트 완성)은 자동 폴백
③ 모델 전환대체 모델 적용가용한 폴백 모델이 현재 턴 또는 남은 세션 처리

내부 유틸리티 Silent 폴백 체인

프롬프트 자동완성 등 내부 유틸리티 호출은 사용자에게 알리지 않고 자동 폴백합니다:

gemini-2.5-flash-lite  →  gemini-2.5-flash  →  gemini-2.5-pro

이 체인은 사용자 설정과 별개로 동작하며, 사용량 리포트에 예상치 못한 모델이 표시될 수 있는 이유입니다.

Pro → Flash 자동 세션 폴백

기본 Pro 모델을 사용 중 rate limit이 감지되면 CLI가 현재 세션 동안 자동으로 Flash 모델로 전환합니다. 사용자 조치 없이 작업을 계속할 수 있으며, 다음 세션에서는 원래 설정 Pro 모델로 복귀합니다.

로컬 모델 라우팅 (실험적)

항목내용
지원 모델Gemma 계열 로컬 모델 (gemma3-1b-gpu-custom)
요구사항Gemini API 호환 HTTP 엔드포인트로 서빙 필요
장점API 비용 절감, 인터넷 없이도 라우팅 결정 가능
상태실험적 기능 — 프로덕션 환경 주의

설정 방법

settings.json
{
  "experimental": {
    "gemmaModelRouter": {
      "enabled": true,
      "classifier": {
        "host": "http://localhost:9379",
        "model": "gemma3-1b-gpu-custom"
      }
    }
  }
}

설정 변경 후 Gemini CLI를 재시작해야 적용됩니다. 공식 키는 experimental.gemmaModelRouter.* 이며 과거 표기인 localModel.endpoint는 실제 존재하지 않습니다.

💬 에이전트에게 이렇게 요청하세요

로컬 모델 라우터 주소와 모델 이름만 준비한 뒤 아래처럼 요청하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 로컬 모델 라우팅을 활성화해줘. 분류기 주소는 http://localhost:9379, 모델 이름은 gemma3-1b-gpu-custom이야. 기존 설정은 유지하면서 experimental.gemmaModelRouter 설정만 추가하거나 갱신해줘.

코어 핵심 기능

기능설명
채팅 히스토리 자동 압축대화가 모델 토큰 한도에 근접하면 정보 보존(무손실) 방식으로 히스토리를 자동 압축. 수동 트리거는 /compress
인용 (Citations)모델이 출처 텍스트를 인용하면 자동으로 인용 표기. 기본 활성, ui.showCitations: false로 비활성. 중복 제거 및 알파벳 순 정렬
File Discovery Service프로젝트에서 컨텍스트 관련 파일을 찾는 서비스. @ 명령과 파일 접근 도구가 사용
Memory Discovery ServiceGEMINI.md를 계층적으로 탐색/로드 (CWD → 프로젝트 루트 → 홈, 하위 디렉토리 포함)

💡 CLI 푸터에 현재 로드된 컨텍스트 파일 수가 표시되어 활성 지시 컨텍스트를 한눈에 확인할 수 있습니다.

모델 스티어링 실험적

작업 실행 중 실시간으로 AI에게 힌트를 전달하여 방향을 조정하세요.

모델 스티어링이란?

모델 스티어링(Steering — "조종하다")은 작업 실행 중 에이전트를 재시작하지 않고 실시간으로 피드백과 방향 수정을 제공하는 실험적 기능입니다. 자동차 핸들을 돌리듯 AI의 작업 방향을 중간에 수정할 수 있습니다. 특히 복잡한 플랜 모드 워크플로우에서 유용합니다.

🎯 모델 스티어링 vs 일반 대화 비교
💬 일반 대화
작업 완료 후 피드백
에이전트 재시작 필요
컨텍스트 초기화
중간 수정 불가
🎯 모델 스티어링
실행 실시간 피드백
재시작 없이 방향 수정
컨텍스트 유지
다음 턴에 즉시 반영

활성화

settings.json
{
  "experimental": {
    "modelSteering": true
  }
}
💬 에이전트에게 이렇게 요청하세요

모델 스티어링도 실험적 설정이므로 기존 설정을 덮어쓰지 않도록 요청하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 모델 스티어링을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 experimental.modelSteering 값을 true로 설정해줘.

작동 방식

단계동작세부 내용
① 힌트 입력사용자가 힌트 전달작업 실행 중 자연어로 방향 수정 요청
② 수신 확인빠른 모델이 확인1문장으로 힌트 수신을 확인해 과도한 응답 방지
③ 컨텍스트 주입힌트 내부 전달내부 지시사항과 함께 힌트가 에이전트에 주입
④ 실시간 반영다음 턴 즉시 적용이후 동작에 힌트 내용이 반영됨

힌트 유형별 활용 예시

힌트 유형예시효과
파일 경로 수정"유틸리티는 src/common/utils에 있어"잘못된 경로 탐색 즉시 교정
단계 건너뛰기"단위 테스트는 건너뛰고 구현에 집중해"불필요한 작업 제거로 효율화
도구/라이브러리 지정"Logger 대신 winston 사용해"특정 구현 방향으로 유도
모호성 해소"UserService는 auth 모듈 거야"동명의 파일/클래스 혼동 방지
도메인 지식 제공"이 API는 deprecated 됐어"코드만으로 알 수 없는 정보 전달
✅ 모범 사례
  • 모호한 지시 대신 구체적인 제안을 하세요.
  • 최종 계획 완료를 기다리지 말고 연구 단계에서 일찍 개입하세요.
  • 코드 분석만으로는 알 수 없는 도메인 지식을 전달하세요.

서브 에이전트

전문화된 AI 어시스턴트에게 특정 작업을 위임하세요.

서브 에이전트(Sub-agent)란 메인 AI가 혼자 처리하기 어려운 작업을 전문 분야별로 나누어 맡기는 "하위 AI 도우미"입니다. 마치 팀장이 팀원들에게 업무를 배분하듯, 메인 에이전트가 서브 에이전트들에게 작업을 분배합니다.

서브 에이전트란?

🌳 서브 에이전트 계층 구조
🤖 메인 Gemini CLI 세션
🔍 codebase
_investigator
❓ cli_help
🌐 browser
_agent
⚙️ 커스텀
에이전트
각 서브 에이전트는 독자적인 컨텍스트 윈도우와 도구 세트를 보유

서브 에이전트는 메인 Gemini CLI 세션 내의 전문 AI 어시스턴트입니다. 각각 독자적인 시스템 프롬프트, 페르소나, 특화된 도구 세트를 가지며 별도의 컨텍스트 윈도우에서 작동합니다.

내장 서브 에이전트

에이전트ID설명
코드베이스 조사자codebase_investigator코드 구조와 의존성 분석, 리버스 엔지니어링
CLI 도움말cli_helpGemini CLI 명령어, 설정, 문서 전문가
제너럴리스트generalist다중 파일 수정, 리소스 집약적 작업 처리
브라우저 에이전트browser_agent웹 브라우저 자동화 (Chrome 144+ 필요, 실험적)

사용 방법

자동 위임

메인 에이전트가 작업을 분석하여 적합한 서브 에이전트에 자동으로 위임합니다.

명시적 호출

Gemini CLI
# @ 구문으로 특정 에이전트 호출
@codebase_investigator 서비스 간의 의존성 관계를 분석해줘
@cli_help 커스텀 명령어 만드는 방법 알려줘

커스텀 서브 에이전트 생성

YAML 프론트매터가 포함된 마크다운 파일로 정의합니다.

파일 위치

설정 필드

필드설명기본값
name고유 식별자 (슬러그)필수
description에이전트 목적과 활성화 조건필수
kind에이전트 유형 (local 또는 remote). 원격은 A2A 프로토콜 사용local
tools접근 가능 도구 (*, mcp_* 와일드카드 지원)필수
model기본 모델 오버라이드auto
max_turns최대 대화 반복 횟수30
temperature모델 창의성 매개변수-
timeout_mins실행 시간 제한 (분)10

커스텀 서브 에이전트 예시

.gemini/agents/data-analyst.md
---
name: data-analyst
description: Python(pandas/numpy/matplotlib)으로 CSV·Parquet·DB 데이터를 탐색·시각화하는 데이터 분석가
tools:
  - "read_file"
  - "write_file"
  - "glob"
  - "search_file_content"
  - "run_shell_command(uv run:*)"   # uv 가상환경에서 Python 스크립트 실행
  - "run_shell_command(python:*)"   # python 직접 실행도 허용
  - "run_shell_command(jupyter:*)"  # 노트북 변환·실행
  # - "*"                           # 모든 도구 (과도한 권한, 프로덕션에서 피하기)
model: pro
max_turns: 20
temperature: 0.2
---

# 역할
당신은 Python 데이터 분석 전문가입니다. pandas, numpy, matplotlib/seaborn,
scikit-learn을 활용해 데이터를 탐색하고 인사이트를 제시합니다.

# 작업 원칙
1. **재현 가능성 우선**: 모든 분석은 단일 Python 스크립트로 실행 가능해야 하며,
   uv run script.py 한 줄로 의존성까지 자동 설치되게 합니다.
2. **EDA 4단계**:
   ① 데이터 로딩 + df.info()/df.describe()로 형태 파악
   ② 결측치·이상치 식별 (isna().sum(), IQR/Z-score)
   ③ 분포·상관관계 시각화 (히스토그램, 박스플롯, 히트맵)
   ④ 가설 검증 또는 모델 학습
3. **결과물 형식**: 차트는 output/figures/<timestamp>-<name>.png로 저장,
   요약은 output/report.md에 마크다운 표로 작성합니다.
4. **재실행 시 deterministic**: random_state=42 고정, 데이터 순서 정렬 등으로
   같은 입력 → 같은 출력을 보장합니다.

# 스크립트 템플릿 (uv 인라인 의존성)
새 분석 스크립트는 PEP 723 인라인 메타데이터로 시작하세요:

# /// script
# requires-python = ">=3.11"
# dependencies = ["pandas", "numpy", "matplotlib", "seaborn"]
# ///
import pandas as pd
import matplotlib.pyplot as plt
...

이렇게 작성하면 uv run analyze.py 한 줄로 어디서든 즉시 실행됩니다.

# 출력 규칙
- 수치는 의미를 한 줄로 해석해 곁들이세요 ("평균 47.3 — 중앙값 32보다 높아 우측 꼬리 분포")
- 모든 차트에는 한국어 제목·축 라벨·범례
- 큰 데이터셋(>10만 행)은 먼저 샘플링(.sample(10000, random_state=42))으로 빠른 검증 후 전체 적용

원격 에이전트 (A2A 프로토콜)

로컬 마크다운 외에 Agent-to-Agent(A2A) 프로토콜로 외부 서비스에 위임할 수 있는 원격 서브 에이전트를 정의할 수 있습니다.

.gemini/agents/remote-db.md
---
name: db-analyst
kind: remote
description: 원격 DB 분석 에이전트
agent_card_url: https://corp-a2a.example.com/.well-known/agent-card.json
# 또는 agent_card_json: { ... }
---

원격 인증 4종

  1. API Key — HTTP 헤더로 고정 키 전달
  2. HTTP — Bearer, Basic, 커스텀 IANA 스킴
  3. Google Credentials — access/identity 토큰 자동 선택 (GCP)
  4. OAuth 2.0 — PKCE가 적용된 Authorization Code 플로우

비밀 값은 $ENV_VAR, !command(셸 실행), 리터럴로 동적 해석 가능. HTTP/HTTPS 프록시 지원. 기본 활성이며 "enableAgents": false로 비활성화.

보안 & 격리

⚠️ 재귀 방지

서브 에이전트는 다른 서브 에이전트를 호출할 수 없습니다. 도구 접근 권한은 에이전트별로 명시적으로 정의되어 제어된 권한과 상태 격리가 보장됩니다.

관리

Gemini CLI / Terminal
# REPL 내부
/agents                    # 에이전트 관리
/agents reload             # 레지스트리 새로고침

# 비활성화 (settings.json)
{ "experimental": { "enableAgents": false } }
💬 에이전트에게 이렇게 요청하세요

서브 에이전트는 기본 활성 기능이지만, 비활성화했던 설정을 되돌릴 때는 아래처럼 요청하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 서브 에이전트를 사용할 수 있게 설정해줘. experimental.enableAgents가 false이면 true로 바꾸거나 해당 비활성화 설정을 제거해줘. 기존 설정은 유지해줘.
💡 격리 및 보안
  • 서브 에이전트는 다른 서브 에이전트를 호출할 수 없습니다 (재귀 방지).
  • * 와일드카드를 부여해도 다른 에이전트 호출은 불가합니다.
  • 격리된 실행으로 의도치 않은 부작용과 컨텍스트 오염을 방지합니다.

원격 에이전트

Agent-to-Agent(A2A — 에이전트 간 통신) 프로토콜로 외부 에이전트에 작업을 위임하세요.

원격 에이전트란?

원격 서브 에이전트는 A2A(Agent-to-Agent) 프로토콜을 사용하여 인터넷을 통해 외부 에이전트 서비스와 통신합니다. 내 컴퓨터의 작업 범위를 넘어 원격 서버에서 실행되는 AI 에이전트에 작업을 위임할 수 있습니다.

설정

프로젝트 또는 사용자 수준의 마크다운 파일로 정의합니다:

각 정의에는 고유 이름 슬러그와 agent_card_url 또는 인라인 agent_card_json이 필요합니다.

인증 방법

방법설명
API Key정적 헤더 + 동적 값 ($ENV_VAR)
HTTPBearer 토큰, Basic 인증, 커스텀 IANA 스킴
Google CredentialsGoogle Cloud ADC 사용
OAuth 2.0PKCE 인증 코드 플로우

관리 명령어

Gemini CLI
/agents list              # 사용 가능 에이전트 목록
/agents reload            # 파일 변경 후 레지스트리 새로고침
/agents enable <이름>      # 특정 에이전트 활성화
/agents disable <이름>     # 특정 에이전트 비활성화

플랜 모드

읽기 전용 환경에서 아키텍처를 설계하고 실행 계획을 수립하세요.

플랜 모드란?

📋 플랜 모드 워크플로우
🎯 목표 제공
🔍 읽기 전용 탐색
파일 분석, 의존성 확인
💬 전략 토론
ask_user로 옵션 협의
📄 계획서 생성
마크다운 파일 자동 생성
✅ 승인
구현 시작
🔄 반복
피드백 후 재계획

플랜 모드는 구현 전 아키텍처 계획을 위한 읽기 전용 환경입니다. 프로젝트를 탐색하고, 문제를 이해하고, 트레이드오프를 평가한 후 코드를 수정하기 전에 실행 전략을 정렬할 수 있습니다.

진입 방법

방법설명
gemini --approval-mode=plan시작 시 플랜 모드로 실행
Shift+Tab승인 모드 사이클 — Default → Auto-Edit → Plan 전환 (처리 중/다이얼로그 표시 중에는 Plan 제외)
/plan [목표]플랜 모드 시작 + 즉시 목표 프롬프트 제출
/plan copy현재 승인된 플랜을 클립보드로 복사
/settingsDefault Approval ModePlan으로 설정 — 항상 Plan으로 시작
자연어"start a plan for..." → enter_plan_mode 도구 자동 호출

워크플로우

목표 제공

달성해야 할 것을 설명합니다.

전략 토론

질문과 옵션을 통해 ask_user 도구로 협업합니다.

계획 검토

생성된 마크다운 파일을 검토합니다. Ctrl+X로 외부 편집기에서 편집할 수 있습니다.

승인 또는 반복

계획을 승인하면 구현이 시작됩니다. 피드백을 주거나 Esc로 취소할 수 있습니다.

도구 제한

플랜 모드에서는 안전을 위해 도구가 엄격히 제한됩니다:

플랜 디렉토리

플랜 파일은 기본적으로 세션별 임시 디렉토리에 저장됩니다:

~/.gemini/tmp/<project>/<session-id>/plans/

프로젝트 내부에 고정된 플랜 디렉토리를 사용하려면 settings.json에서 커스텀 경로를 지정할 수 있습니다:

settings.json (커스텀)
{
  "general": {
    "plan": {
      "directory": ".gemini/plans"
    }
  }
}
💬 에이전트에게 이렇게 요청하세요

플랜 파일을 프로젝트 안에 보관하고 싶다면 아래 요청을 사용하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 플랜 모드 파일 저장 경로를 .gemini/plans로 설정해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 general.plan.directory 값을 추가하거나 갱신해줘.

모델 라우팅 연동

auto 모델 사용 시, 계획 단계에서는 Pro 모델로 강력한 추론을 수행하고, 구현 단계에서는 Flash 모델로 전환하여 속도를 높입니다.

협업 플랜 편집 (Collaborative Editing)

자연어로 복잡한 변경을 설명하는 것보다 플랜 파일을 직접 편집하는 것이 더 빠르고 정확합니다.

  1. 플랜 열기: Gemini CLI가 플랜을 검토하라고 표시할 때 Ctrl+X 누름
  2. 편집 또는 주석: 외부 편집기(VS Code/Vim 등)에서 단계 재정렬·삭제·재작성 또는 인라인 주석 (예: "여기서 기존 Logger 클래스를 써야 하지 않나?")
  3. 저장 후 닫기
  4. 리뷰/개선: Gemini CLI가 변경 자동 감지 후 주석 검토 → 구현 전략 조정 → 최종 승인 요청

종료 방법

정책 엔진과 트러스트 격리

⚠️ 커스텀 plans 디렉토리 보안

사용자 정의 플랜 디렉토리는 프로젝트 루트 내로 제한됩니다. 워크스페이스 외부의 민감한 파일을 덮어쓰지 못하도록 탈출을 방지하기 위함입니다.

체크포인팅

AI가 파일을 수정하기 전 자동으로 프로젝트 상태를 스냅샷으로 저장합니다.

체크포인팅이란?

체크포인팅은 AI 도구가 파일을 수정하기 전에 프로젝트 상태의 스냅샷을 자동 저장하는 안전 기능입니다. 파일 수정 도구를 승인할 때 세 가지 구성 요소가 생성됩니다:

활성화

settings.json
{
  "general": {
    "checkpointing": {
      "enabled": true
    }
  }
}
💬 에이전트에게 이렇게 요청하세요

settings.json을 직접 열지 않아도 아래 요청으로 체크포인팅을 켤 수 있습니다.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 체크포인팅을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 general.checkpointing.enabled 값을 true로 설정해줘.
⚠️ CLI 플래그 제거됨

과거 --checkpointing CLI 플래그는 v0.11.0에서 제거되었습니다. 이제 settings.jsongeneral.checkpointing.enabled만 유효합니다. 기존 가이드/블로그의 gemini --checkpointing 예제는 동작하지 않으니 주의하세요.

/restore 명령어

명령어설명
/restore가용 체크포인트 목록 표시
/restore <checkpoint_file>특정 체크포인트로 파일과 대화 복원. 원본 도구 호출이 다시 제안됨

체크포인트 파일명 형식

체크포인트 파일명은 타임스탬프 + 파일명 + 도구명으로 구성됩니다:

2025-06-22T10-00-00_000Z-my-file.txt-write_file

⚠️ 공식 문서 간 차이: commands.md[tool_call_id]로 표기하나 checkpointing.md는 위 형식의 파일명을 사용합니다. 실제 동작은 /restore 목록에서 표시되는 이름을 그대로 입력하면 됩니다.

복원 동작

  1. 모든 파일을 스냅샷 시점 상태로 되돌림
  2. CLI 대화 히스토리 복원
  3. 원본 도구 호출이 다시 제안됨 — 다시 실행하거나 수정하거나 무시할 수 있음
💡 저장 위치
  • 모든 데이터는 로컬 머신에만 저장됩니다.
  • Git shadow 저장소: ~/.gemini/history/<project_hash> — 사용자의 Git 저장소에 영향 없음
  • 대화 이력 + 도구 호출: ~/.gemini/tmp/<project_hash>/checkpoints의 JSON 파일

되감기 (Rewind)

이전 대화 상태로 돌아가고, AI가 수정한 파일을 선택적으로 복원하세요.

사용 방법

복원 옵션

되돌릴 대화 지점을 선택한 후 다음 옵션이 표시됩니다:

옵션동작
대화 + 코드 되감기채팅 이력과 파일 수정 모두 복원
대화만 되감기채팅 이력만 제거; 파일 변경은 유지
코드만 복원대화는 유지하고 파일 수정만 되돌림
취소Esc 키로 취소
⚠️ 주의사항
  • AI 네이티브 도구를 통한 편집만 되감기 가능 (수동 편집이나 셸 명령은 대상 아님)
  • 선택한 지점 이후의 모든 AI 파일 편집이 일괄 되돌려집니다. 일부만 선택적으로 되돌릴 수는 없습니다.
  • AI는 제거된 대화의 컨텍스트를 잃음
  • 이 작업은 세션 이력과 파일을 영구적으로 변경합니다
💡 채팅 압축 지점을 넘어서도 동작

되감기는 채팅 컨텍스트 압축(compression) 지점을 넘어서도 동작합니다. 내부적으로 저장된 세션 데이터로 이력을 재구성하므로 압축 전 상태로도 돌아갈 수 있습니다.

💬 에이전트에게 이렇게 요청하세요

되감기는 settings.json로 켜는 기능이 아니라 세션 중 실행하는 복원 기능입니다.

프롬프트
> 방금 전 작업 상태로 되돌리고 싶어. /rewind를 사용해서 되돌릴 수 있는 지점을 확인하고, 대화만 되감기와 코드까지 되감기의 차이를 설명한 뒤 내가 선택할 수 있게 안내해줘.

토큰 캐싱

API 비용을 자동으로 최적화하는 토큰 캐싱 기능을 알아봅니다.

📖 토큰(Token)이란?

토큰은 AI가 텍스트를 처리하는 기본 단위입니다. 대략 한국어 한 글자 또는 영어 단어 일부에 해당합니다. AI에게 보내는 텍스트가 많을수록 토큰 소비가 늘고 비용이 증가합니다. 캐싱(Caching)은 이전에 보냈던 내용을 임시 저장해 두었다가 재사용하여 토큰 소비를 줄이는 기술입니다.

작동 방식

Gemini CLI는 API 키 인증 사용 시 자동으로 토큰 캐싱을 수행합니다. 이전에 제출한 시스템 지침과 컨텍스트를 후속 요청에서 재사용하여 처리할 토큰 수를 줄입니다.

지원 대상

인증 방법지원 여부
Gemini API 키✅ 지원
Vertex AI✅ 지원 (프로젝트/위치 설정 필요)
OAuth (Google 개인/기업)❌ 미지원

사용량 모니터링

Gemini CLI
/stats          # 전체 세션 통계
/stats model    # 모델별 토큰 사용량

일반 토큰 사용량과 캐시 절약량을 확인할 수 있습니다.

💡 cached tokens 표시 조건

/stats 출력에서 cached tokens 필드는 실제 캐시 적중이 발생한 경우에만 표시됩니다. 캐시 히트가 없으면 해당 필드가 나타나지 않을 수 있습니다.

💬 에이전트에게 이렇게 요청하세요

토큰 캐싱은 API 키 또는 Vertex AI 인증에서 자동으로 작동합니다. 설정 변경보다 인증 방식과 통계 확인이 중요합니다.

프롬프트
> 내 Gemini CLI 환경에서 토큰 캐싱을 사용할 수 있는 인증 방식인지 확인하는 방법을 알려줘. API 키 또는 Vertex AI 사용 여부를 확인하고, /stats와 /stats model로 캐시 절약량을 확인하는 절차도 정리해줘.

알림 실험적

백그라운드 작업 완료나 사용자 입력 필요 시 데스크톱 알림을 받으세요.

활성화

settings.json
{
  "general": {
    "enableNotifications": true
  }
}

또는 /settings → General → Enable Notifications → On

💬 에이전트에게 이렇게 요청하세요

알림 설정을 직접 찾기 어렵다면 아래 문장을 채팅창에 입력하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 알림을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 general.enableNotifications 값을 true로 설정해줘.

알림 유형

유형트리거 시점
Action Required모델이 사용자 입력 또는 도구 승인을 기다릴 때
Session Complete세션이 성공적으로 완료되었을 때

지원 터미널

OSC 9 이스케이프 시퀀스를 사용합니다. iTerm2, WezTerm, Ghostty, Kitty를 지원합니다. 미지원 터미널에서는 터미널 벨(BEL)로 대체되어 작업 표시줄 깜박임이나 시스템 알림음이 울립니다.

메모리 관리

GEMINI.md와 메모리 시스템을 활용한 지속적 컨텍스트 관리 방법을 알아봅니다.

두 가지 메커니즘

📄

GEMINI.md (프로젝트 컨텍스트)

자동으로 로드되는 지시사항 파일. 프로젝트 전반의 표준을 강제합니다.

🧠

Memory (학습된 사실)

대화 중 자연어로 가르친 사실을 저장하고 이후 세션에서 자동으로 기억합니다.

GEMINI.md 계층 구조

  1. 글로벌: ~/.gemini/GEMINI.md (모든 프로젝트)
  2. 프로젝트 루트: ./GEMINI.md (현재 저장소)
  3. 하위 디렉토리: ./src/GEMINI.md (폴더별 규칙)

Memory 저장

자연어로 기억할 내용을 말하면 에이전트가 save_memory 도구로 자동 저장합니다.

Gemini CLI
> 나는 'const'를 'let'보다 항상 선호해. 기억해줘.
> 이 프로젝트는 탭 대신 2칸 스페이스를 사용해. 기억해.

관리 명령어

명령어설명
/memory show현재 로드된 전체 컨텍스트 표시
/memory refreshGEMINI.md 파일 강제 새로고침
/memory add <텍스트>글로벌 GEMINI.md에 텍스트 추가
✅ 모범 사례
  • GEMINI.md는 간결하고 실행 가능하게 유지하세요.
  • 부정 제약 조건 (하지 않을 것)을 사용하면 명확합니다.
  • 주기적으로 오래된 규칙을 검토하고 제거하세요.

작업 계획 (Todo)

구조화된 할 일 목록으로 복잡한 프로젝트를 체계적으로 관리하세요.

왜 필요한가?

표준 LLM은 10턴 이상의 코드 생성 후 원래 목표를 "잊을" 수 있습니다. 작업 계획은 세 가지 장점을 제공합니다:

👁

가시성

작업 시작 전 에이전트의 전략을 검토합니다.

🎯

집중

에이전트가 현재 어떤 단계를 실행 중인지 추적합니다.

🛡

복원력

에이전트가 막히면 계획이 방향을 다시 잡아줍니다.

사용 방법

Gemini CLI
# 계획 수립 요청
> 이 프로젝트를 JavaScript에서 TypeScript로 마이그레이션하려고 해. 먼저 계획을 세워줘.

# 진행 상황 확인
Ctrl+T    # 전체 할 일 목록 표시 (대기, 진행 중, 완료)

# 계획 수정 요청
> @types/node 설치 단계가 빠져있어. 추가해줘.
> 3번 단계를 취소하고 4번부터 진행해줘.
💡 팁

에이전트는 write_todos 도구를 사용하여 구조화된 단계 목록을 생성합니다. 계획은 유연하여 작업 취소, 순서 변경, 새 작업 추가를 요청할 수 있습니다.

💬 에이전트에게 이렇게 요청하세요

작업 계획은 설정 파일을 수정하지 않고 자연어 요청으로 시작합니다.

프롬프트
> 이 작업을 바로 구현하지 말고 먼저 Todo 목록으로 계획을 세워줘. 각 단계의 목적, 수정할 파일 후보, 검증 방법을 포함하고, 내가 승인하면 순서대로 진행해줘.

웹 도구

실시간 웹 검색과 URL 내용 가져오기로 최신 정보에 접근하세요.

주요 도구

Google 웹 검색 (google_web_search)

인터넷에서 관련 페이지를 검색합니다. 모델의 학습 데이터 이후에 출시된 문서를 찾거나, 정보를 검증하여 할루시네이션을 방지하는 데 유용합니다.

웹 가져오기 (web_fetch)

특정 URL에서 원본 콘텐츠를 가져옵니다. 광고와 탐색 요소를 제거하여 핵심 내용만 추출합니다.

⚠️ 플랜 모드에서도 승인 필요

web_fetch는 읽기 전용 도구이지만 외부 네트워크 요청을 발생시키므로 플랜 모드에서도 사용자 승인이 필요합니다. 민감한 URL이 외부로 전송될 수 있으니 확인 후 승인하세요.

활용 예시

Gemini CLI
# 기술 조사
> Bun 1.0 릴리스 노트를 검색해서 주요 변경사항 요약해줘

# 상세 정보 가져오기
> https://docs.example.com/api 를 읽고 내 코드에 적용하는 방법 설명해줘

# 소스 비교
> React와 Vue의 최신 상태 관리 방법을 비교해줘

# 에러 트러블슈팅
> "TypeError: Cannot read property of undefined" 에러가 나와. 해결 방법 검색해줘
✅ 강력한 조합

가장 효과적인 방법은 웹 도구와 로컬 파일 편집을 결합하는 것입니다: 정보 검색 → 상세 가이드 가져오기 → 프로젝트 파일에 패턴 적용.

헤드리스 모드

대화형 인터페이스 없이 프로그래밍 방식으로 Gemini CLI를 사용하세요.

📖 헤드리스(Headless)란?

"헤드리스"는 화면(Head) 없이 실행한다는 뜻입니다. 사용자가 직접 대화하지 않고, 스크립트나 자동화 시스템이 Gemini CLI에 명령을 보내고 결과만 받는 방식입니다.

활성화

두 가지 경우에 자동 활성화됩니다:

💬 에이전트에게 이렇게 요청하세요

헤드리스 모드는 settings.json로 켜는 기능이 아니라 실행 방식입니다. 자동화 명령을 만들 때는 아래처럼 요청하세요.

프롬프트
> 이 작업을 Gemini CLI 헤드리스 모드로 실행할 수 있는 명령어로 만들어줘. --prompt와 --output-format json을 사용하고, CI나 스크립트에서 실패를 감지할 수 있게 종료 코드 처리 방법도 함께 알려줘.

출력 형식

JSON (-o json)

단일 JSON 객체를 반환합니다:

스트리밍 JSON (-o stream-json)

줄 구분 JSON(JSONL) 이벤트를 생성합니다:

이벤트 타입설명
init세션 메타데이터 (세션 ID, 모델)
message사용자/어시스턴트 메시지 청크
tool_use도구 호출 요청 + 인수
tool_result도구 실행 결과
error비치명적 경고/시스템 오류
result최종 결과 + 통계

종료 코드

코드의미
0성공
1일반 오류 또는 API 실패
42입력 오류 (잘못된 프롬프트/인수)
53턴 제한 초과

Git Worktrees 실험적

별도의 작업 디렉토리에서 여러 작업을 동시에 수행하세요.

Git Worktrees란?

Git worktree(워크트리)는 같은 저장소 이력을 공유하면서 각각 고유한 파일과 브랜치를 가진 별도의 작업 디렉토리를 생성합니다. 한 프로젝트 폴더를 여러 개 복사하지 않고도 동시에 다른 브랜치에서 작업할 수 있어, 동시 작업 세션 간 코드 변경 충돌을 방지합니다.

활성화

settings.json
{
  "experimental": {
    "worktrees": true
  }
}
💬 에이전트에게 이렇게 요청하세요

실험적 기능 설정도 에이전트에게 기존 설정을 보존하도록 요청하면 안전합니다.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI Git Worktrees 기능을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 experimental.worktrees 값을 true로 설정해줘.

사용법

Terminal
# 이름 지정하여 생성
gemini --worktree feature-search

# 축약형 플래그
gemini -w feature-search

# 자동 이름으로 생성 (인자 없이)
gemini --worktree

이름은 디렉토리명 (.gemini/worktrees/에 저장)과 연관된 브랜치명이 됩니다.

작업 재개

Terminal
cd .gemini/worktrees/feature-search
gemini --resume <session_id>
⚠️ 종료 시 자동 삭제 안 됨

세션을 종료(/quit 또는 Ctrl+C)해도 Gemini는 worktree나 브랜치를 자동 삭제하지 않습니다. 작업을 잃지 않기 위해 의도적으로 보존합니다 — 미커밋 변경, 스테이지된 변경, 추적되지 않은 파일, 신규 커밋 모두 유지됩니다. 종료 시 재개/제거 방법이 안내됩니다.

수동 정리

보존된 worktree와 브랜치를 정리할 때:

Terminal
# Worktree 디렉토리 강제 제거
git worktree remove .gemini/worktrees/feature-search --force

# 연관 브랜치 삭제
git branch -D worktree-feature-search

수동 worktree 생성 (대안)

Gemini의 --worktree 플래그 대신 Git 직접 사용으로 worktree 위치/브랜치를 자유롭게 제어:

Terminal
git worktree add ../project-feature-search -b feature-search
cd ../project-feature-search && gemini
💡 의존성 초기화

새 worktree마다 프로젝트의 개발 환경 초기화를 잊지 마세요: 의존성 설치(npm install, yarn), 가상환경 설정, 또는 표준 빌드 프로세스 등 스택에 맞게 실행합니다.

언제 워크트리를 활성화하는가 — 상황별 예시

워크트리는 "내 작업과 AI 작업을 격리해야 할 때" 활성화합니다. 단순한 한두 줄 수정에는 오히려 오버헤드가 됩니다. 다음 상황에서 활성화를 고려하세요.

1. 내가 작업 중인데 AI에게 별도 작업을 동시에 시키고 싶을 때

예: feature/login 브랜치에서 로그인 UI를 만드는 중인데, AI에게는 별개의 리팩토링 작업을 맡기고 싶은 상황.

Terminal
# 내 작업 디렉토리는 그대로 두고, AI는 별도 워크트리에서 작업
gemini -w "api/error-handler.ts의 에러 핸들링 로직을 개선해줘"

워크트리 없이 실행하면 AI의 파일 수정이 내 미커밋 변경과 뒤섞여 충돌할 위험이 있습니다.

2. AI의 변경을 PR로 검토하고 싶을 때

예: 대규모 리팩토링이나 마이그레이션처럼 즉시 메인 브랜치에 반영하기 위험한 작업.

Terminal
gemini -w "src/utils/ 폴더의 모든 유틸 함수를 TypeScript로 마이그레이션해줘"
# → 별도 브랜치에 커밋 → push → PR 생성 → diff 검토 후 머지

3. 여러 AI 작업을 병렬로 돌리고 싶을 때

예: 한 PR에 묶기에는 성격이 다른 작업들을 동시에 진행.

Terminal
# 터미널 1
gemini -w tests "user 서비스에 단위 테스트를 작성해줘"

# 터미널 2
gemini -w docs "API 엔드포인트 문서를 업데이트해줘"

# 터미널 3 — 나는 내 작업 계속
git commit -m "feat: 새 기능 추가"

각 워크트리는 독립된 작업 디렉토리이므로 서로 간섭 없이 병렬 실행됩니다.

4. 실험적 변경을 시도하고 마음에 안 들면 통째로 버리고 싶을 때

예: "Redux를 Zustand로 교체하면 어떨까?" 같은 PoC.

Terminal
gemini -w experiment-zustand "상태 관리를 Redux에서 Zustand로 교체하는 PoC를 만들어줘"
# 결과 확인 → 마음에 들면 머지 / 별로면 워크트리 삭제 (원본 무사)

언제 워크트리를 삭제하는가 — 상황별 예시

워크트리는 자동 삭제되지 않으므로 목적이 달성된 직후 직접 정리하는 습관이 필요합니다.

1. AI 작업 결과를 머지한 직후

Terminal
# 현재 워크트리 목록 확인
git worktree list
# /Users/me/project                            abc1234 [main]
# /Users/me/project/.gemini/worktrees/refactor def5678 [worktree-refactor]  ← 머지 완료

# 정리
git worktree remove .gemini/worktrees/refactor
git branch -d worktree-refactor

머지된 워크트리를 방치하면 디스크 공간 낭비 + git worktree list가 지저분해집니다.

2. AI 작업 결과를 폐기할 때

Terminal
# 실험 결과가 별로다 → 깔끔하게 폐기
git worktree remove .gemini/worktrees/experiment-zustand --force
git branch -D worktree-experiment-zustand

--force는 미커밋 변경이 있어도 삭제합니다. 원본 브랜치에는 영향이 없습니다.

3. 같은 브랜치를 다른 곳에서 체크아웃해야 할 때

워크트리에서 사용 중인 브랜치는 다른 위치에서 git checkout이 차단됩니다. 그 브랜치가 다시 필요해졌다면 해당 워크트리를 먼저 정리해야 합니다.

Terminal
# "fatal: 'feature-search' is already checked out at ..." 에러가 날 때
git worktree remove .gemini/worktrees/feature-search
# 이제 메인 디렉토리에서 git checkout feature-search 가능

4. 오래 방치된 워크트리 일괄 정리

Terminal
# 어떤 워크트리가 남아있는지 확인
git worktree list

# 디렉토리는 이미 수동 삭제했지만 git 메타데이터에 남은 참조 정리
git worktree prune

# 개별 삭제
git worktree remove <path>

판단 기준 요약

상황워크트리 사용이유
한 줄짜리 간단 수정오버헤드가 더 큼 — 그냥 gemini
내 작업 중 + AI에게 별개 작업 위임충돌 방지
대규모 변경을 PR로 검토격리된 브랜치에 커밋
여러 AI 작업 병렬 실행각각 독립된 작업 디렉토리
실험적 PoC실패 시 통째로 폐기 가능
머지 완료 / 실험 폐기 후🗑️ 삭제디스크·브랜치 잠금 해제

확장 프로그램 개발

커스텀 도구, 명령어, 컨텍스트를 제공하는 확장 프로그램을 직접 만드세요.

확장 기능 유형

기능용도호출 주체
MCP 서버도구와 데이터 소스 노출모델
커스텀 명령어프롬프트/셸 명령 단축키사용자
컨텍스트 파일지속적 모델 지시사항CLI → 모델
에이전트 스킬온디맨드 전문 워크플로우모델
CLI 생명주기 이벤트 가로채기CLI
커스텀 테마UI 색상 개인화사용자

프로젝트 구조

파일 구조
my-extension/
  gemini-extension.json    # 매니페스트 (필수)
  example.js               # MCP 서버 구현
  package.json             # Node.js 의존성
  GEMINI.md                # 컨텍스트 파일 (선택)
  commands/                # TOML 커스텀 명령어 (선택)
  hooks/
    hooks.json             # 훅 정의 (매니페스트 아님!)
  skills/
    security-audit/
      SKILL.md             # → "security-audit" 스킬로 노출
  agents/                  # 서브 에이전트 (선택, 프리뷰)
  policies/                # 정책 엔진 TOML 규칙 (선택)
⚠️ 중요한 디렉토리 컨벤션
  • 은 매니페스트가 아닌 hooks/hooks.json 파일에 정의
  • 스킬skills/<name>/SKILL.md 구조 — 디렉토리 이름이 곧 스킬 이름
  • 커스텀 명령: 확장 이름 gcpcommands/deploy.toml/deploy가 됩니다 (확장명이 prefix가 아님 — 직접 노출)
  • 네임스페이스 명령: commands/gcs/sync.toml/gcs:sync

매니페스트 필드

필드용도
name고유 식별자 (소문자, 공백은 대시로)
version버전 번호
description마켓플레이스 표시용 짧은 설명
mcpServersMCP 서버 정의 (command, args, cwd). ⚠️ trust 필드는 미지원 — 사용자 동의 없이 자동 승인 우회를 막기 위함
contextFileName컨텍스트 파일명 오버라이드 (기본 GEMINI.md)
excludeTools모델에서 제한할 도구 이름 배열
settings사용자 설정 배열 (name, description, envVar, sensitive)
plan플랜 디렉토리 설정 객체
themes커스텀 테마 정의 배열
migratedTo저장소 이전 시 자동 마이그레이션 URL

참고: settings[].sensitive: true로 표시된 값은 UI에서 마스킹되며 로그에 기록되지 않습니다. API 키, 비밀번호에 권장.

경로 플레이스홀더

매니페스트에서 크로스플랫폼 경로를 위한 플레이스홀더를 사용할 수 있습니다:

플레이스홀더의미
${extensionPath}확장 프로그램 설치 디렉토리 절대 경로
${/}OS별 경로 구분자 (macOS/Linux: /, Windows: \\)

매니페스트 예시

gemini-extension.json
{
  "name": "mcp-server-example",
  "version": "1.0.0",
  "description": "Example MCP server for posts API",
  "contextFileName": "INSTRUCTIONS.md",
  "excludeTools": ["run_shell_command"],
  "settings": [{
    "name": "API Key",
    "description": "Service API key",
    "envVar": "MY_SERVICE_API_KEY",
    "sensitive": true
  }],
  "mcpServers": {
    "nodeServer": {
      "command": "node",
      "args": ["${extensionPath}${/}example.js"],
      "cwd": "${extensionPath}"
    }
  }
}

MCP 서버 구현

example.js
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';

const server = new McpServer({
  name: 'my-server',
  version: '1.0.0',
});

server.registerTool(
  'fetch_posts',
  {
    description: 'Fetches posts from API.',
    inputSchema: z.object({}).shape,
  },
  async () => {
    const data = await fetch('https://api.example.com/posts');
    const json = await data.json();
    return { content: [{ type: 'text', text: JSON.stringify(json) }] };
  },
);

const transport = new StdioServerTransport();
await server.connect(transport);

개발 워크플로우

Terminal
# 1. 디렉토리 생성 + gemini-extension.json 작성
mkdir my-extension && cd my-extension
# (gemini-extension.json 매니페스트를 직접 작성)

# 2. 의존성 설치
npm install

# 3. 개발용 링크 (코드 변경이 즉시 반영)
gemini extensions link .

# 4. 테스트 (CLI 재시작 후 도구/명령어 확인)
gemini

# 5. 변경사항 반영 후 재시작
gemini extensions restart my-extension
✅ 모범 사례
  • TypeScript 사용으로 타입 안전성을 확보하세요.
  • 최소 권한 원칙: 필요한 도구만 노출하세요.
  • 민감 설정sensitive: true를 사용하면 시스템 키체인(macOS Keychain / Windows Credential Manager / Linux Secret Service)에 저장되고 CLI 출력에서 마스킹됩니다.
  • Semantic Versioning을 따르세요.
  • 배포 시 dist/, gemini-extension.json, package.json만 포함하세요.
  • excludeTools 명령 패턴: "excludeTools": ["run_shell_command(rm -rf *)"]처럼 괄호 안 명령 패턴으로 위험 명령 차단 가능.

정책 엔진 통합 (Tier 2)

확장 프로그램은 policies/ 디렉토리의 .toml 파일로 정책 규칙과 안전성 검사기를 기여할 수 있습니다.

policies/policies.toml
[[rule]]
mcpName = "my_server"
toolName = "dangerous_tool"
decision = "ask_user"
priority = 100

[[safety_checker]]
mcpName = "my_server"
toolName = "write_data"
priority = 200
[safety_checker.checker]
type = "in-process"
name = "allowed-path"
required_context = ["environment"]
⚠️ 보안: allow / yolo 무시

Gemini CLI는 보안상 확장 프로그램 정책의 allow 결정과 yolo 모드 설정을 무시합니다. 확장이 사용자 확인 없이 도구 호출을 자동 승인하거나 보안 조치를 우회할 수 없도록 합니다.

충돌 해결 규칙

💡 워크스페이스 우선

Gemini CLI 시작 시 모든 확장이 로드되고 설정이 머지됩니다. 충돌 시 워크스페이스 설정이 우선합니다. 특히 같은 이름의 MCP 서버가 settings.json과 확장 양쪽에 정의되어 있으면 settings.json의 정의가 우선합니다.

릴리스 채널 & 갤러리 등록

설치 옵션

Terminal
# 안정 채널 (기본)
gemini extensions install <repo-url>

# 특정 브랜치/태그/커밋
gemini extensions install <repo-url> --ref=stable
gemini extensions install <repo-url> --ref=v1.2.3

# Latest 미표시 버전 포함 (프리릴리스)
gemini extensions install <repo-url> --pre-release

채널 운영

공식 갤러리 자동 등록

Gemini CLI 확장 프로그램 갤러리에 자동 등재되려면:

  1. 공개 GitHub 저장소 사용
  2. 저장소 About 섹션에 gemini-cli-extension GitHub 토픽 추가
  3. gemini-extension.json을 저장소 루트(또는 릴리스 아카이브 루트)에 배치

크롤러가 매일 태그된 저장소를 스캔하며, 검증 통과 시 갤러리에 등재됩니다. 별도 신청/이슈 작성은 불필요.

플랫폼별 아카이브 명명 규칙

GitHub Release 자산을 플랫폼별로 자동 배포하려면:

  1. 플랫폼 + 아키텍처 특정: {platform}.{arch}.{name}.{extension}
  2. 플랫폼 특정: {platform}.{name}.{extension}
  3. 일반: 단일 자산 (폴백)

플레이스홀더 값:

예시:

저장소 마이그레이션 (`migratedTo`)

확장 프로그램을 새 저장소(예: 개인 → 조직)로 옮길 때 사용자 무중단 이전:

  1. 새 저장소에 확장 프로그램 셋업
  2. 기존 저장소의 gemini-extension.jsonmigratedTo 추가 + 버전 bump:
    {
      "name": "my-extension",
      "version": "1.1.0",
      "migratedTo": "https://github.com/new-owner/new-extension-repo"
    }
  3. 기존 저장소에 새 버전 publish

사용자가 업데이트 확인 시 CLI가 migratedTo를 감지하고, 새 저장소가 유효한 확장 업데이트를 포함하면 자동으로 새 소스로 마이그레이션합니다. 모든 확장 설정이 새 설치로 자동 이동.

GitHub Actions 워크플로우 예시

.github/workflows/release.yml
name: Release Extension

on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '20'
      - run: npm ci
      - run: npm run build
      - name: Create release assets
        run: |
          npm run package -- --platform=darwin --arch=arm64
          npm run package -- --platform=linux --arch=x64
          npm run package -- --platform=win32 --arch=x64
      - uses: softprops/action-gh-release@v1
        with:
          files: |
            release/darwin.arm64.my-tool.tar.gz
            release/linux.x64.my-tool.tar.gz
            release/win32.my-tool.zip

IDE 연동

VS Code, JetBrains 등의 IDE와 Gemini CLI를 연동하여 개발 경험을 향상시키세요.

지원 IDE

VS Code 호환 에디터

ACP 호환 IDE

VS Code Companion 확장

"Gemini CLI Companion" 확장은 직접 IDE 접근과 실시간 워크스페이스 인식을 제공합니다.

VS Code Command Palette 명령

Cmd+Shift+P (또는 Ctrl+Shift+P)에서 다음 명령 사용 가능:

명령동작
Gemini CLI: Run통합 터미널에 새 Gemini CLI 세션 시작
Gemini CLI: Accept Diff활성 diff 에디터의 변경사항 수락
Gemini CLI: Close Diff Editor활성 diff 에디터 거부 후 닫기
Gemini CLI: View Third-Party Notices확장의 3rd-party 라이선스 표시

설치

연결 관리

Gemini CLI
/ide install      # Gemini CLI Companion 확장 자동 설치
/ide enable       # IDE 연동 활성화
/ide disable      # IDE 연동 비활성화
/ide status       # 연결 상태 및 워크스페이스 파일 표시

Diff 작업

변경사항 수락 (4가지 방법)

변경사항 거부 (4가지 방법)

💡 diff 뷰에서 직접 수정 후 수락 가능. CLI에서 "Allow for this session" 선택 시 이후 변경은 IDE를 거치지 않고 자동 수락됩니다.

환경 변수 & 수동 PID 오버라이드

IDE Companion 확장이 자동 설정하는 환경 변수:

자동 감지가 실패하거나 별도 터미널에서 실행할 때 수동으로 IDE PID를 지정할 수 있습니다:

Terminal
# macOS/Linux
export GEMINI_CLI_IDE_PID=12345

# Windows PowerShell
$env:GEMINI_CLI_IDE_PID=12345

Docker 컨테이너에서 IDE 연결

💡 host.docker.internal 자동 감지

Docker/Podman 컨테이너 안에서 Gemini CLI를 실행해도 호스트의 VS Code 확장에 연결할 수 있습니다. CLI는 자동으로 host.docker.internal 주소로 IDE 서버를 찾습니다. 별도 설정은 보통 필요 없지만, 컨테이너→호스트 네트워크 연결이 가능해야 합니다.

⚠️ macOS 샌드박스 + IDE 연동

IDE Companion 통신은 네트워크 접근이 필요합니다. SEATBELT_PROFILEpermissive-open(기본) 또는 restrictive-open으로 설정해 네트워크를 허용하세요. strict-proxied 등 프록시 차단 프로파일에서는 IDE 연동이 동작하지 않습니다.

트러블슈팅

오류 메시지원인해결
"Failed to connect to IDE companion extension"환경 변수 누락 (확장 미실행)Companion 확장 설치/활성화 + IDE에서 새 터미널 열기
"IDE connection error. The connection was lost"연결 끊김/ide enable 재시도, IDE 재시작
"Directory mismatch"CLI 작업 디렉토리가 워크스페이스 외부같은 디렉토리로 cd 후 CLI 재시작
"please open a workspace folder"IDE에 워크스페이스 미오픈IDE에서 워크스페이스 열고 CLI 재시작
📚 관련 공식 문서

시스템 프롬프트

Gemini CLI의 핵심 동작 지침을 완전히 커스터마이징하세요.

시스템 프롬프트란?

시스템 프롬프트(System Prompt)는 AI에게 "너는 이런 규칙을 따라야 해"라고 미리 설정하는 핵심 지시사항입니다. 사용자의 질문보다 먼저 AI에게 전달되어 동작 방식을 결정합니다. 커스텀 마크다운 파일로 완전히 대체할 수 있습니다.

GEMINI_SYSTEM_MD 환경 변수

동작
true / 1프로젝트 디렉토리의 .gemini/system.md 읽기
파일 경로지정된 마크다운 파일 사용 (절대/상대 경로, ~확장 지원)
false 또는 미설정(unset)기본 내장 프롬프트 사용
⚠️ 중요

이것은 병합이 아닌 완전 대체입니다. 커스텀 파일을 사용하면 원본 핵심 지시사항이 적용되지 않습니다. 필요한 부분은 직접 포함해야 합니다.

변수 치환

커스텀 프롬프트에서 내장 콘텐츠를 동적으로 주입할 수 있습니다:

기본 프롬프트 내보내기

Terminal
GEMINI_WRITE_SYSTEM_MD=1 gemini
✅ 권장 구조
  • SYSTEM.md: 안전, 도구 사용 프로토콜 등 양보할 수 없는 운영 규칙
  • GEMINI.md: 페르소나, 목표, 방법론, 프로젝트/도메인 컨텍스트

UI 표시

커스텀 시스템 프롬프트가 활성화되면 CLI에 |⌐■_■| 표시가 나타납니다.

생성 설정

Temperature, Top-P 등 모델 생성 매개변수를 세밀하게 조정하세요.

주요 매개변수

매개변수설명
Temperature출력 무작위성 제어. 낮을수록(0.0) 결정적, 높을수록(>0.7) 창의적
Top P핵 샘플링 확률. 출력 다양성에 영향
Max Output Tokens생성 응답 길이 제한
Thinking Config추론 모델용: thinkingBudget, includeThoughts

설정 방법

GenerateContentConfig 객체를 통해 @google/genai SDK(Software Development Kit — 개발에 필요한 도구와 라이브러리 모음)에 전달됩니다. settings.json에서 modelConfigs 키 아래에 정의합니다:

settings.json — 정식 스키마
{
  "modelConfigs": {
    "customAliases": {
      "base": {
        "modelConfig": {
          "generateContentConfig": { "temperature": 0.0 }
        }
      },
      "chat-base": {
        "extends": "base",
        "modelConfig": {
          "generateContentConfig": { "temperature": 0.7 }
        }
      }
    },
    "overrides": [
      {
        "match": {
          "model": "gemini-2.5-flash",
          "overrideScope": "codebaseInvestigator"
        },
        "modelConfig": {
          "generateContentConfig": { "maxOutputTokens": 4096 }
        }
      }
    ]
  }
}

추상 별칭 (Abstract Alias)

별칭은 model을 지정하지 않아도 베이스 용도로 유효합니다. 위 예시의 basemodel 필드가 없어 직접 선택할 수 없지만 다른 별칭이 extends로 상속할 수 있습니다.

Override `match` 필드

⚠️ 주의

설정값은 최소한의 검증만 거쳐 모델 제공자에게 직접 전달됩니다. 잘못된 설정은 API 런타임 오류를 발생시킬 수 있습니다.

신뢰 폴더

프로젝트별 보안 수준을 제어하여 악성 코드 실행을 방지하세요.

신뢰 폴더란?

Gemini CLI의 전체 기능에 접근할 수 있는 프로젝트를 제어하는 보안 기능입니다. 프로젝트별 설정을 로드하기 전에 사용자의 승인을 요구합니다. 기본적으로 비활성화되어 있습니다.

활성화

settings.json
{
  "security": {
    "folderTrust": {
      "enabled": true
    }
  }
}
💬 에이전트에게 이렇게 요청하세요

신뢰 폴더 기능을 켤 때도 설정 파일 위치를 직접 찾을 필요가 없습니다.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 신뢰 폴더 기능을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 security.folderTrust.enabled 값을 true로 설정해줘.

신뢰 대화 옵션

폴더에서 처음 CLI를 실행하면 세 가지 옵션이 제공됩니다:

  1. 현재 폴더만 신뢰
  2. 상위 디렉토리 신뢰 (모든 하위 디렉토리 자동 신뢰)
  3. 비신뢰로 표시 (제한된 "안전 모드"로 작동)

비신뢰 폴더 제한사항

관리

엔터프라이즈 설정

조직 전체에 Gemini CLI 정책과 보안 제어를 적용하세요.

Admin Controls vs System Settings

엔터프라이즈 관리자는 두 가지 방법으로 정책을 배포할 수 있으며, 각각 특성이 다릅니다:

항목System SettingsAdmin Controls
설정 방법settings.json (시스템 경로)Management Console
사용자 오버라이드권한 있는 사용자는 수정 가능불가능 (전역 강제)
용도편의성·기본값정책 강제

Admin Controls는 로컬에서 수정할 수 없어 정책 준수에 유리합니다. System Settings는 convenient하지만 사용자가 우회할 수 있습니다.

Admin Controls (Management Console)

Management Console에서 설정 가능한 전역 제어:

제어기본효과
Strict Mode활성사용자가 YOLO 모드 진입 불가
Extensions비활성비활성 시 확장 프로그램 사용/설치 불가
MCP비활성비활성 시 MCP 서버 전체 사용 불가
MCP Servers (프리뷰)빈 목록신뢰할 수 있는 MCP 서버 허용 목록
Required MCP Servers (프리뷰)빈 목록사용자 설정과 무관하게 항상 주입되는 MCP 서버 (원격 전송만 지원)
Unmanaged Capabilities비활성비활성 시 Agent Skills 등 비관리 기능 사용 불가

MCP 허용 목록 적용 로직

Required MCP Servers 예시

Management Console
{
  "requiredMcpServers": {
    "corp-compliance-tool": {
      "url": "https://mcp.corp/compliance",
      "type": "http",
      "trust": true,
      "description": "Corporate compliance tool"
    }
  }
}

typesse 또는 http 필수. trust 기본 true. 같은 이름의 로컬 서버가 있으면 admin 설정이 완전 오버라이드.

시스템 설정 파일

OS경로
Linux/etc/gemini-cli/settings.json
macOS/Library/Application Support/GeminiCli/settings.json
WindowsC:\ProgramData\gemini-cli\settings.json

설정 병합 우선순위

시스템 기본값 → 사용자 설정 → 워크스페이스 설정 → 시스템 오버라이드 (최종 권한)

주요 보안 제어

도구 접근 제한

허용 목록 방식(tools.core)이 가장 안전합니다. 위험한 명령을 차단하는 대신 허용할 도구를 명시적으로 지정합니다. ShellTool(ls)처럼 인자까지 고정할 수 있습니다.

settings.json
{
  "tools": {
    "core": ["ReadFileTool", "GlobTool", "ShellTool(ls)"]
  }
}

YOLO 모드 비활성화

settings.json
{
  "security": {
    "disableYoloMode": true
  }
}

MCP 서버 허용 목록

settings.json
{
  "mcp": { "allowed": ["corp-data-api"] },
  "mcpServers": {
    "corp-data-api": {
      "command": "/usr/local/bin/start-corp-api.sh"
    }
  }
}
⚠️ mcp.allowed 생략 시 동작

mcp.allowed를 생략하면 CLI는 사용자가 정의한 모든 MCP 서버를 자동 허용합니다. 엔터프라이즈 환경에서는 반드시 허용 목록을 명시하세요.

시스템 설정 경로 오버라이드

GEMINI_CLI_SYSTEM_SETTINGS_PATH 환경 변수로 시스템 오버라이드 설정 파일 경로를 지정할 수 있습니다. 배포 자동화/wrapper 스크립트에서 활용하세요:

Terminal
export GEMINI_CLI_SYSTEM_SETTINGS_PATH="/opt/corp/gemini-policy.json"
gemini

인증 강제

settings.json
{
  "enforcedAuthType": "oauth-personal"
}

유효 값: "oauth-personal" / "gemini-api-key" / "vertex-ai" / "cloud-shell". 엔터프라이즈 환경에서 단일 인증 방법을 강제하며, 다른 인증 시도는 거부됩니다.

사용자 격리

공유 환경에서 GEMINI_CLI_HOME 환경 변수로 각 사용자/작업을 고유한 상태 디렉토리로 분리합니다.

감사 (Telemetry)

"logPrompts": false로 민감한 프롬프트 내용 없이 도구 사용만 감사할 수 있습니다. otlpEndpoint로 내부 OTLP 수집기에 전송합니다.

텔레메트리

Gemini CLI의 사용 데이터 수집과 설정 방법을 알아봅니다.

📖 텔레메트리(Telemetry)란?

텔레메트리는 프로그램이 어떻게 사용되고 있는지에 대한 통계 데이터를 자동으로 수집하는 기능입니다. 개인 정보나 코드 내용이 아닌, 사용 패턴과 성능 지표만 수집합니다. 원하지 않으면 끌 수 있습니다.

수집 데이터

OpenTelemetry(개방형 텔레메트리 표준)를 통해 세 가지 유형의 데이터를 수집합니다:

로그

세션 설정, 프롬프트 제출, 도구 실행 (함수명, 인수, 소요시간), API 요청/응답 (토큰 수), 파일 작업, 모델 라우팅 결정, 확장 프로그램 생명주기 이벤트.

메트릭

도구 호출 횟수/지연, API 요청 횟수/지연, 유형별 토큰 사용량 (입력, 출력, 사고, 캐시, 도구), 파일 작업 및 변경 라인 수.

추적 (Traces)

작업명, 모델, 도구 상세, 토큰 수 등 속성이 포함된 스팬 기반 상세 가시성.

설정

설정환경 변수기본값
enabledGEMINI_TELEMETRY_ENABLEDfalse
tracesGEMINI_TELEMETRY_TRACES_ENABLEDfalse
targetGEMINI_TELEMETRY_TARGET"local"
outfileGEMINI_TELEMETRY_OUTFILE-
logPromptsGEMINI_TELEMETRY_LOG_PROMPTStrue ⚠️
otlpEndpointGEMINI_TELEMETRY_OTLP_ENDPOINThttp://localhost:4317
otlpProtocolGEMINI_TELEMETRY_OTLP_PROTOCOLgrpc
useCollectorGEMINI_TELEMETRY_USE_COLLECTORfalse
useCliAuthGEMINI_TELEMETRY_USE_CLI_AUTHfalse
⚠️ logPrompts 기본값 주의

공식 cli/telemetry.md 기준 logPrompts 기본값은 true입니다 (configuration.md는 false로 표기 — 공식 문서 간 차이). 텔레메트리 활성화 시 프롬프트 내용까지 로그에 포함될 수 있으므로, 민감한 환경에서는 반드시 명시적으로 "logPrompts": false 설정을 권장합니다.

GCP 텔레메트리 추가 옵션

로컬 트레이싱 백엔드

Terminal
# Genkit Developer UI (http://localhost:4000)
npm run telemetry -- --target=genkit

# Jaeger UI (http://localhost:16686)
npm run telemetry -- --target=local

# Google Cloud Trace
npm run telemetry -- --target=gcp

수집기 로그: ~/.gemini/tmp/<projectHash>/otel/collector.log

💡 옵트아웃

텔레메트리는 기본적으로 비활성화되어 있습니다. 활성화하지 않으면 어떤 데이터도 수집되지 않습니다.

💬 에이전트에게 이렇게 요청하세요

텔레메트리 수집을 켜야 한다면 수집 대상과 프롬프트 기록 여부를 명확히 지정하세요.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 텔레메트리를 활성화해줘. 프롬프트 내용은 기록하지 않도록 하고, 기존 설정은 유지하면서 telemetry.enabled 값을 true로 설정해줘. 필요한 환경 변수 설정도 함께 알려줘.

도구 레퍼런스

Gemini CLI에서 사용 가능한 모든 내장 도구의 카테고리별 목록입니다.

실행

도구유형설명
run_shell_commandExecute임의의 셸 명령 실행. 대화형 세션과 백그라운드 프로세스 지원. 수동 확인 필요.

run_shell_command 상세

파라미터필수설명
command실행할 셸 명령 문자열
description승인 다이얼로그에 표시될 간단한 설명
dir_path실행 디렉토리 (절대 또는 워크스페이스 상대)
is_backgroundtrue면 시작 후 즉시 백그라운드로 이동
💬 에이전트에게 이렇게 요청하세요

대화형 셸이 필요한 도구 실행을 자주 쓴다면 아래처럼 설정을 요청할 수 있습니다.

프롬프트
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 대화형 셸을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 tools.shell.enableInteractiveShell 값을 true로 설정해줘.

파일 시스템

🔒 워크스페이스 경계

아래 도구는 모두 워크스페이스 루트(rootDirectory) 내로 작업이 제한됩니다. 외부 경로 접근 시도는 거부됩니다. 추가 디렉토리는 --include-directories 또는 context.includeDirectories로 허용할 수 있습니다.

도구유형설명
globSearch파라미터: pattern(필수), path, case_sensitive(기본 false), respect_git_ignore(기본 true). 절대 경로 반환, 최근 수정 순 정렬. node_modules/.git 자동 무시
grep_searchSearch파라미터: pattern(필수, 정규식), path, include(글롭 필터). 검색 엔진: git grep → 시스템 grep → JS 폴백. 레거시 별칭: search_file_content
list_directoryRead파라미터: dir_path(필수), ignore(글롭 배열), file_filtering_options(.gitignore/.geminiignore 옵션)
read_fileRead파라미터: file_path(필수), offset(0-based 시작 줄, 선택), limit(최대 줄 수, 선택). 텍스트/이미지/오디오/PDF 지원
read_many_filesRead여러 파일 동시 읽기. 사용자 프롬프트의 @path/to/file 구문으로 자주 호출됨
replaceEdit파라미터: file_path, instruction(시맨틱 설명), old_string(필수, 정확 매칭), new_string, allow_multiple(기본 false). old_string 주변에 충분한 컨텍스트 필요. 승인 필요
write_fileEdit파라미터: file_path(필수), content(필수). 승인 다이얼로그에서 diff 미리보기 제공

glob.gitignore / .geminiignore를 자동 존중하며, respect_git_ignore: false로 해제할 수 있습니다. case_sensitive 파라미터로 대소문자 구분 제어 가능.

상호작용

도구유형설명
ask_userCommunicate파라미터: questions(필수, 1-4개). 각 질문은 question, header(최대 16자), type(choice/text/yesno), options, multiSelect, placeholder
write_todosOther파라미터: todos(배열, 각 항목 description+status). 상태: pending/in_progress/completed/cancelled/blocked. in_progress는 동시 1개만. Ctrl+T로 토글

ask_user 질문 유형 및 제약

유형설명
Choice2–4개 옵션 선택 (다중 선택 지원, 각 옵션은 label + description). 다중 선택 시 "All the above" 자동 추가
Text자유 입력 (placeholder 힌트 지원)
Yes/No이진 확인 프롬프트

write_todos 상태 및 동작

상태의미
pending대기 중
in_progress진행 중 (동시에 단 1개만 가능)
completed완료
cancelled취소됨
blocked차단됨 (의존성 미해결 등)

메모리 & 계획

도구유형설명
activate_skillOther.gemini/skills에서 전문 지식 로드. 에이전트 전용 도구 (사용자 직접 호출 불가)
get_internal_docsThinkGemini CLI의 docs/ 마크다운 파일 조회. path(선택, 예: reference/commands.md), 생략 시 전체 파일 목록. 에이전트 전용 (사용자 호출 불가)
save_memoryThinkfact 파라미터로 전달된 사실을 ~/.gemini/GEMINI.md## Gemini Added Memories 섹션에 불릿으로 추가
enter_plan_modePlan안전한 읽기 전용 연구 모드로 전환. YOLO 모드에서 사용 불가. 파라미터: reason (선택)
exit_plan_modePlan플랜 완료 후 승인 요청. 파라미터: plan_path (필수, 플랜 디렉토리 내 MD 파일). 승인 시 DEFAULT/AUTO_EDIT로 전환, 거부 시 플랜 모드 유지

activate_skill은 에이전트가 작업과 매칭되는 스킬을 찾을 때 자동 호출됩니다. 사용자는 "code review 스킬 사용해줘"처럼 자연어로 간접 유도하세요. 파라미터: name (enum, 필수 — 예: code-reviewer, pr-creator, docs-writer).

도구유형설명
google_web_searchSearch파라미터: query(필수). Google 검색 → 요약 + 출처 URI/제목 인용. Gemini API가 결과를 처리
web_fetchFetch파라미터: prompt(필수, 최대 20개 URL 포함). http:///https://로 시작. 플랜 모드에서도 사용자 승인 필수. urlContext 사용, 실패 시 로컬 폴백

MCP

도구유형설명
list_mcp_resourcesSearch연결된 MCP 서버의 리소스 목록. serverName(선택)으로 특정 서버만 필터. URI/서버명/설명 반환. 승인 불필요
read_mcp_resourceRead특정 리소스 읽기. uri(필수)로 지정. 서버의 resources/read 메서드 호출. 바이너리는 타입 플레이스홀더 반환. 승인 불필요

작업 추적 (Tracker) 실험적

tracker_* 도구는 write_todos를 대체하는 영구 저장 작업 그래프입니다. 의존성이 있는 복잡한 작업을 DAG(Directed Acyclic Graph)로 관리합니다.

도구유형설명
tracker_create_taskOther새 작업 생성. title/description/type(epic/task/bug) 지정
tracker_list_tasksOther작업 목록. status/type/parent로 필터링
tracker_get_taskOther6자 hex ID로 특정 작업 상세 조회
tracker_update_taskOther상태(open/in_progress/blocked/closed), 설명, 의존성 업데이트
tracker_add_dependencyOther작업 간 의존성 추가 (토폴로지 실행 순서 보장)
tracker_visualizeOtherASCII 트리로 작업 그래프 시각화
update_topicOther현재 주제/상태를 사용자에게 진행 보고
complete_taskOther서브 에이전트의 미션 완료 처리 (내부용)

Tracker 특성

항목내용
작업 유형epic (대규모 목표) → task (일반 작업) → bug (버그)
작업 상태open · in_progress · blocked · closed (4종, write_todos와 다름)
작업 ID6자 hex (예: a1b2c3)
저장 경로.gemini/tmp/tracker/<session-id>/ — 세션별 격리, 세션 간 유지 안 됨
그래프 구조DAG (순환 금지), 의존성 선결 필수
💡 write_todos와의 비교
  • write_todos: 세션 내 휘발, 5상태 (pending/in_progress/completed/cancelled/blocked), 단순 리스트
  • tracker_*: 디스크 저장, 4상태 (open/in_progress/blocked/closed), DAG 의존성 지원

정책 엔진

도구 실행을 세밀하게 제어하는 TOML(Tom's Obvious, Minimal Language — 사람이 읽기 쉬운 설정 파일 형식) 기반 규칙 시스템입니다.

정책 엔진이란?

도구 호출을 허용(allow), 거부(deny), 또는 사용자 확인 요청(ask_user)으로 결정하는 규칙을 정의합니다.

규칙 조건

우선순위 계층

계층기본값용도
Default1내장 정책
Extension2확장 프로그램 정책
Workspace3프로젝트 수준 정책
User4사용자 커스텀 정책
Admin5시스템 관리자 정책

공식: 최종 우선순위 = 계층 기본값 + (toml_priority / 1000)

TOML 규칙 예시

policy.toml
# 위험한 명령 차단
[[rule]]
toolName = "run_shell_command"
commandPrefix = "rm -rf"
decision = "deny"
priority = 100

# MCP 도구 허용
[[rule]]
mcpName = "my-jira-server"
toolName = "search"
decision = "allow"
priority = 200

# 파일 수정 확인 요청
[[rule]]
toolName = ["write_file", "replace"]
decision = "ask_user"
priority = 10

# 승인 모드별 규칙 — yolo에서만 rm 차단
[[rule]]
toolName = "run_shell_command"
mode = ["yolo"]            # default / autoEdit / yolo / plan
commandPrefix = "rm"
decision = "ask_user"
priority = 500

mode 필드로 승인 모드별로 규칙을 다르게 적용할 수 있습니다. 유효 값: default, autoEdit, yolo, plan.

정책 파일 위치

메모리 임포트 프로세서

GEMINI.md 파일을 모듈화하여 재사용 가능한 컴포넌트로 관리하세요.

임포트 구문

@ 뒤에 파일 경로를 지정하여 다른 파일의 내용을 가져옵니다:

GEMINI.md
@./file.md                      # 상대 경로
@../shared/style-guide.md       # 상위 디렉토리
@./components/instructions.md   # 하위 디렉토리
@/absolute/path/to/file.md      # 절대 경로

안전 메커니즘

특수 처리

ACP 모드 실험적

Agent Client Protocol을 통해 IDE와 개발 도구에서 Gemini CLI를 프로그래밍 방식으로 제어하세요.

ACP 모드란?

ACP(Agent Client Protocol)는 AI 코딩 에이전트와 코드 에디터/IDE(통합 개발 환경) 간 통신을 표준화하는 개방형 프로토콜입니다. JSON-RPC(원격 프로시저 호출 — 한 프로그램이 다른 프로그램의 기능을 호출하는 규약) 프로토콜을 stdio(표준 입출력)로 통신합니다.

시작

Terminal
gemini --acp

이전 플래그 --experimental-acp는 별칭으로 남아있으나, 공식 가이드는 --acp를 권장합니다.

지원 메서드

카테고리메서드
코어initialize, authenticate, newSession, loadSession, prompt, cancel
세션 관리setSessionMode, unstable_setSessionModel
파일 시스템프록시된 파일 시스템 서비스 — IDE가 게이트키퍼 역할 (아래 설명)

프록시된 파일 시스템 (보안 모델)

ACP의 파일 시스템은 IDE 클라이언트가 게이트키퍼로 동작합니다. 에이전트는 IDE가 허용한 파일만 읽고 쓸 수 있으며, 워크스페이스 외부로 접근이 유출되지 않습니다. 이 구조로 IDE가 사용자 동의 기반 접근 제어를 유지합니다.

MCP 연동

IDE 클라이언트가 MCP 서버를 구현하면 Gemini 모델이 해당 도구를 사용할 수 있습니다:

  1. 클라이언트가 도구를 노출하는 MCP 서버 구현
  2. ACP 초기화 시 MCP 서버 연결 정보 제공
  3. Gemini CLI가 연결하여 사용 가능 도구 검색
  4. 모델이 작업 실행을 위해 도구 호출

디버깅

Terminal
gemini --acp --debug

제거 (Uninstall)

Gemini CLI를 시스템에서 완전히 제거하는 방법입니다.

설치 방법별 제거

npm 글로벌 설치

Terminal
npm uninstall -g @google/gemini-cli

npx (임시 캐시)

npx는 임시 캐시에서 실행되므로 영구 설치가 아닙니다. 캐시를 정리하려면:

macOS / Linux
rm -rf "$(npm config get cache)/_npx"
Windows (PowerShell)
Remove-Item -Path (Join-Path $env:LocalAppData "npm-cache\_npx") -Recurse -Force

Homebrew

Terminal
brew uninstall gemini-cli

MacPorts

Terminal
sudo port uninstall gemini-cli
💡 설정 데이터 정리

CLI를 제거한 후 설정과 캐시 데이터도 삭제하려면 ~/.gemini/ 디렉토리를 수동으로 제거하세요.

오픈소스 기여 가이드

Gemini CLI는 오픈소스 프로젝트로, 자동화된 트리아지 시스템을 통해 이슈와 PR을 관리합니다.

이슈 작성 시

이슈 작성 직후 Automated Issue Triage 봇이 Gemini 모델로 분석하여 라벨을 자동 부착합니다:

⚠️ 🔒Maintainers only 라벨 이슈는 메인테이너 전용 — 외부 PR 받지 않음.

PR 작성 시 필수 사항

15분마다 PR Auditing 봇이 모든 열린 PR을 검사합니다. 본문에 다음 키워드 중 하나로 이슈를 링크해야 합니다:

링크된 이슈가 없으면 status/need-issue 라벨이 자동 부착되며, 이슈 라벨이 PR로 자동 동기화됩니다.

외부 기여자 7일 정책

매일 09:00 UTC에 help wanted 라벨 + assignee가 있는 모든 이슈를 검사:

commit 전 사전 검사

Terminal
npm run preflight

CLA (Contributor License Agreement)

Gemini CLI에 코드를 기여하려면 Google CLA에 서명해야 합니다 (개인 또는 고용주). cla.developers.google.com에서 현재 동의 상태를 확인하거나 새로 서명할 수 있습니다. 다른 Google 프로젝트에서 이미 서명한 적이 있다면 다시 할 필요는 없습니다.

코드 기여 흐름

  1. 작업할 이슈 찾기 (🔒Maintainers only는 제외)
  2. 저장소 포크 → 새 브랜치 생성
  3. packages/ 디렉토리에서 변경 작업
  4. npm run preflight로 모든 검사 통과 확인
  5. PR 생성 — 본문에 Fixes #<issue> 추가

자동 PR 리뷰 도구

코드 리뷰 보조 도구를 제공합니다 (PR 작성자도 직접 실행 권장):

Terminal
# 헬퍼 스크립트 — PR을 별도 worktree에 체크아웃 + 의존성 설치 + 빌드 + 리뷰 도구 실행
./scripts/review.sh <PR_NUMBER> [model]

# 기본 모델: gemini-3.1-pro-preview (Pro 쿼터 부족 시 Flash 사용)
./scripts/review.sh 12345 gemini-3-flash-preview

또는 PR을 이미 체크아웃한 상태라면 Gemini CLI 안에서:

Gemini CLI
/review-frontend <PR_NUMBER>
⚠️ 보안 경고

scripts/review.sh를 실행하기 전 PR 코드가 데이터 유출 공격을 포함하지 않는지 검증해야 합니다 — 스크립트가 PR 코드를 빌드/실행하기 때문입니다.

포맷팅, 린트, 타입 오류 등 흔한 문제를 사전에 잡아냅니다.

공급망 보안 (Supply Chain Security) 보안

npm·bun·pnpm·uv에 "최소 출시 후 N일 지난 패키지만 설치"를 강제하는 한 줄 설정. Gemini CLI 자체와 MCP 서버 설치 과정을 노린 공급망 공격의 위험을 크게 줄입니다.

왜 이게 Gemini CLI 사용자에게 중요한가?

Gemini CLI는 npm으로 설치되고, Python 기반 MCP 서버는 uvx로 즉시 실행됩니다. 공격자가 인기 패키지를 가로채 악성 버전을 publish하면 그 직후 npm install 또는 uvx를 실행한 모든 사용자가 감염됩니다. 발견까지 보통 수 시간 ~ 며칠이 걸리므로, "출시된 지 N일 이상 지난 버전만 허용"으로 설정해두면 그 사이에 보안 스캐너가 탐지·차단할 시간을 벌 수 있습니다.

⚠️ 최근 사례

chalk, debug, colors.js, event-stream 등 매주 수억 회 다운로드되는 패키지조차 침해된 적이 있습니다. AI 에이전트가 --approval-mode=yolo로 자율 실행 중이면 감염된 의존성이 승인 없이 실행될 수 있어 위험이 배가됩니다.

핵심 개념: minimum release age

4대 패키지 매니저 모두 "이 패키지의 publish 시각으로부터 N (일/분/초) 이상 지났는가?"를 설치 전 검사하는 옵션을 제공합니다. 권장 기본값은 7일입니다 (대부분의 악성 패키지가 7일 이내에 보안 스캐너·연구자에게 탐지됨).

패키지 매니저별 설정

매니저설정 파일키 = 값 (7일 기준)단위
npm ~/.npmrc min-release-age=7
bun ~/.bunfig.toml minimumReleaseAge = 604800 초 (7×24×3600)
pnpm ~/Library/Preferences/pnpm/rc
(Linux: ~/.config/pnpm/rc)
minimum-release-age=10080 분 (7×24×60)
uv ~/.config/uv/uv.toml exclude-newer = "7 days" 문자열 (자연어)

npm 설정

Terminal
# 한 줄로 글로벌 설정
npm config set min-release-age 7
npm config set ignore-scripts true   # 추천: install-script 자동 실행 차단

# 확인
npm config get min-release-age

ignore-scripts=true는 패키지가 정의한 preinstall/postinstall 스크립트의 자동 실행을 막아 공격 표면을 한 단계 더 줄입니다. 대신 일부 네이티브 모듈(node-gyp 빌드 등)은 수동으로 npm rebuild 해야 할 수 있습니다.

bun 설정

~/.bunfig.toml
[install]
minimumReleaseAge = 604800   # 7일 (단위: 초)

pnpm 설정

Terminal
pnpm config set minimum-release-age 10080   # 7일 (단위: 분)
pnpm config set ignore-scripts true

uv 설정 (Python MCP 서버 사용자)

~/.config/uv/uv.toml
exclude-newer = "7 days"

자연어 표현("7 days", "24 hours") 또는 ISO 8601 timestamp("2026-05-01T00:00:00Z") 모두 지원합니다. uv 0.5.0 이상이 필요합니다 (uv --version으로 확인).

긴급 패치가 필요할 때 (per-repo override)

전역으로 7일 지연을 걸어두면 방금 publish된 보안 패치를 즉시 적용할 수 없습니다. 그럴 때는 프로젝트별로 일시적으로 해제하세요:

Terminal
# npm: 프로젝트 .npmrc 에 0으로 덮어쓰기 (또는 --no-min-release-age)
echo "min-release-age=0" > .npmrc

# bun: 환경 변수로 일회성 우회
BUN_INSTALL_MINIMUMRELEASEAGE=0 bun install

# uv: --exclude-newer "0 seconds" 로 일회성 우회
uv pip install vulnerable-pkg --exclude-newer "0 seconds"

Gemini CLI 자체 업데이트와의 관계

📌 권장 조합 (Gemini CLI 사용자)
# ~/.npmrc
min-release-age=7
ignore-scripts=true

# ~/.config/uv/uv.toml
exclude-newer = "7 days"

이 두 파일만 만들어두면 gemini 본체, npx로 실행되는 Node 기반 MCP 서버, uvx로 실행되는 Python 기반 MCP 서버 모두 7일 지연을 적용받습니다.

💬 프롬프트로 한 번에 설정하기

프롬프트
> 이 컴퓨터의 패키지 매니저 공급망 보안을 강화해줘:
> 1. ~/.npmrc 에 min-release-age=7, ignore-scripts=true 설정 (기존 키 보존)
> 2. ~/.config/uv/uv.toml 에 exclude-newer = "7 days" 추가 (없으면 생성)
> 3. (bun이 설치되어 있으면) ~/.bunfig.toml 의 [install] 섹션에
>    minimumReleaseAge = 604800 추가
> 4. (pnpm이 설치되어 있으면) pnpm config set minimum-release-age 10080
> 작업 후 변경한 파일 경로와 현재 적용된 값을 표로 보여줘.

한계와 주의사항

한계이유대응
제로데이 패치 지연 긴급 보안 픽스도 7일 대기 per-repo override + 보안 공지 모니터링
이미 침해된 의존성에는 무력 오래된 악성 버전이 여전히 설치 가능 npm audit / uv pip audit 병행
typosquatting 차단 안 됨 가짜 이름 패키지(colorrs)는 시간과 무관 설치 전 이름 한 글자씩 확인 + 다운로드 수 검증
Git/로컬 의존성은 적용 안 됨 레지스트리 외부 출처 해당 의존성은 별도로 코드 리뷰
📚 출처 및 참고 자료

Gemini CLI 설치 레거시

기존 Gemini CLI 사용자를 위한 설치 가이드입니다. 신규 설치라면 Antigravity CLI 설치를 권장합니다.

⚠️ Antigravity CLI로의 전환 권고

Google은 2026년 5월부터 Gemini CLI를 후속 도구인 Antigravity CLI로 통합하고 있습니다. 신규 사용자는 처음부터 Antigravity CLI를 설치하는 것을 권장합니다. 기존 Gemini CLI 사용자는 본 가이드의 Gemini CLI → Antigravity CLI 마이그레이션 섹션을 참고해 자동 임포트로 전환할 수 있습니다.

시스템 요구사항

항목요구사항
운영체제macOS 15+, Windows 11 24H2+, Ubuntu 20.04+
Node.js20.0.0 이상
RAM (일반)4GB 이상
RAM (고성능)16GB 이상 권장
Bash, Zsh, 또는 PowerShell
네트워크인터넷 연결 필수

Node.js 사전 준비

💡 왜 Node.js가 필요한가요?

Gemini CLI는 JavaScript(Node.js) 기반으로 개발된 도구입니다. npm(Node Package Manager)을 통해 배포되며, 실행 시 Node.js 런타임이 필요합니다. 따라서 Gemini CLI를 설치하기 전에 Node.js 20.0.0 이상이 시스템에 설치되어 있어야 합니다.

Node.js 설치 여부 확인

🔍 Node.js 설치 결정 흐름도
node --version 실행
버전이 20.0.0 이상?
✅ Yes
Gemini CLI
설치 진행
npm install -g @google/gemini-cli
❌ No / 미설치
Node.js 설치
필요
공식 사이트
nodejs.org
nvm
권장
brew
macOS

터미널에서 아래 명령어로 Node.js가 설치되어 있는지, 버전은 충분한지 확인하세요.

Terminal
node --version
# 예: v22.11.0 (20.0.0 이상이면 OK)

npm --version
# 예: 10.9.0

명령어가 인식되지 않거나(command not found) 버전이 20.0.0 미만이면 아래 방법으로 설치하세요.

Node.js 설치 방법

방법 1: 공식 사이트에서 설치 (가장 간단)

https://nodejs.org에서 LTS(장기 지원) 버전을 다운로드하여 설치합니다. 설치 프로그램이 Node.js와 npm을 함께 설치해 줍니다.

방법 2: nvm으로 설치 (권장 — 버전 관리 가능)

nvm(Node Version Manager)을 사용하면 여러 Node.js 버전을 설치하고 전환할 수 있어 편리합니다.

Terminal (macOS / Linux)
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

# 터미널 재시작 후
nvm install --lts
nvm use --lts
Terminal (Windows — nvm-windows)
# nvm-windows 설치 후 (https://github.com/coreybutler/nvm-windows)
nvm install lts
nvm use lts

방법 3: 패키지 매니저로 설치

Terminal (macOS — Homebrew)
brew install node
Terminal (Ubuntu / Debian)
# NodeSource 저장소 추가 (최신 LTS: Node.js 22.x 기준)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
Terminal (Windows — Chocolatey)
choco install nodejs-lts

설치 확인

설치가 완료되면 아래 명령어로 정상 설치 여부를 확인하세요.

Terminal
node --version   # v20.0.0 이상 출력되면 성공
npm --version    # npm도 함께 설치됨
⚠️ 주의

Node.js 버전이 20.0.0 미만이면 Gemini CLI 설치 시 오류가 발생할 수 있습니다. nvm install --lts 또는 공식 사이트에서 최신 LTS 버전을 설치하세요.

Gemini CLI 설치 방법

npm (권장)

Terminal
npm install -g @google/gemini-cli

Homebrew (macOS / Linux)

Terminal
brew install gemini-cli

MacPorts (macOS)

Terminal
sudo port install gemini-cli

Anaconda (제한된 환경)

Node.js를 직접 설치할 수 없는 환경에서 유용합니다.

Terminal
conda create -y -n gemini_env -c conda-forge nodejs
conda activate gemini_env
npm install -g @google/gemini-cli

설치 없이 실행 (npx)

Terminal
npx @google/gemini-cli

Docker

Terminal
# 공개된 샌드박스 이미지 직접 실행
docker run --rm -it us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.1.1

# 로컬 설치 후 샌드박스 모드로 실행
gemini --sandbox -y -p "your prompt here"
✅ 사전 설치 환경

Google Cloud Shell과 Cloud Workstations에서는 Node.js가 사전 설치되어 있어 npm install -g @google/gemini-cli 명령 한 줄로 바로 시작할 수 있습니다.

릴리스 채널

채널설명설치 명령
Stable주간 안정 릴리스 (권장). 매주 화요일 ~20:00 UTC 출시npm install -g @google/gemini-cli@latest
Preview주간 프리뷰. 1주간 dogfooding 후 stable로 승격npm install -g @google/gemini-cli@preview
Nightly매일 UTC 00:00 자동 빌드 (검증 안 됨)npm install -g @google/gemini-cli@nightly

승격 흐름: main → nightly → preview (1주) → stable. 핫픽스는 patch 버전으로 양 채널에 동시 배포.

패키지 스코프 (3종)

패키지역할번들 여부
@google/gemini-cli메인 CLI — UI/명령 파싱/사용자 기능단일 실행 파일로 번들 (모든 의존성 포함)
@google/gemini-cli-coreAPI 호출/인증/캐시 코어 로직❌ 번들 안 함 — standalone 사용 가능
@google/gemini-cli-a2a-serverAgent-to-Agent 프로토콜 서버독립 패키지

개발(dev) 환경: @google-gemini/** private GitHub NPM 저장소. 프로덕션(prod): @google/** Wombat Dressing Room. 프로젝트는 NPM Workspaces로 packages/* 구조.

릴리스 신뢰성 (Release Confidence) 전략

Gemini CLI는 모든 릴리스에 대해 2단계 신뢰성 검증을 수행합니다.

Level 1: 자동 게이트 (필수 통과)

Level 2: 수동 검증 (Dogfooding)

통합 테스트 빌드/실행 명령

기여자가 통합 테스트를 실행할 때 사용하는 명령:

Terminal
# 1. 릴리스 번들 빌드 (필수 사전 단계)
npm run bundle

# 2. 전체 통합 테스트
npm run test:integration:all
# 또는 단축형
npm run test:e2e

# 특정 파일만 실행
npm run test:e2e list_directory write_file

# 이름 패턴으로 단일 테스트 실행
npm run test:e2e -- --test-name-pattern "reads a file"

# 모델 응답 골든 파일 재생성
REGENERATE_MODEL_GOLDENS="true" npm run test:e2e

통합 테스트는 기본 npm run test에 포함되지 않습니다. 명시적으로 호출해야 합니다.

최신 안정 버전: v0.39.0 (2026-04-23)

업데이트

Terminal
gemini update
검색어를 입력하세요