Antigravity 전환 — 무료 사용자 요금제 가이드 전환
2026년 6월 18일부터 Gemini CLI는 무료·Pro·Ultra 사용자에게 서비스를 중단합니다. 무료로 쓰던 분들이 가장 궁금한 "전환 후에도 무료로 쓸 수 있나? 한도는 그대로인가? 무엇을 미리 준비해야 하나?"를 정리합니다.
📣 공식 소개 블로그 — "Introducing Google Antigravity CLI"
"The Google Antigravity CLI is the most lightweight way to invoke, monitor, and interact with Antigravity agents, directly from your terminal."
1. Antigravity CLI란?
Antigravity CLI는 Google Antigravity 2.0의 "터미널 UI 대안"입니다. 데스크톱 앱(2.0)과 동일한 "agent harness"(에이전트 실행 환경)를 공유하며, 동일한 설정을 쓰고, CLI에서 시작한 대화를 데스크톱 앱으로 가져올 수 있습니다.
- 핵심 가치: 에이전트의 호출(invoke) · 모니터링(monitor) · 상호작용(interact) 세 가지에 집중
- GUI를 흉내내지 않습니다 — 그건 Antigravity 2.0의 영역. 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 발표 블로그
- Antigravity CLI는 Gemini CLI의 핵심 제품·하니스 컴포넌트에서 영감을 받음
- Gemini 모델과 함께 최적화된 "공유 에이전트 하니스" 단일화가 큰 그림
- 이런 통일을 통해 개발자 경험을 한 곳에 집중 → 향후 개선 속도 ↑
4. 기존 Gemini CLI 사용자의 시작 방법
- 다운로드 페이지의 안내에 따라 Antigravity CLI 설치 → antigravity.google/download
- 마이그레이션 가이드를 따라 기존 자산(스킬 · MCP 서버 · 기타 커스터마이징)을 옮김 → antigravity.google/docs/gcli-migration
- 슬래시 명령 · 설정 · 키바인딩 전체 레퍼런스는 Antigravity CLI 공식 문서에서 확인
5. 향후 로드맵 (Looking Forward)
- Antigravity CLI는 핵심 하니스와 에이전트 패러다임의 모든 개선을 계속 상속·통합
- Antigravity 2.0 = 기능 종합성(comprehensiveness) 최적화
- Antigravity CLI = 속도·낮은 오버헤드(speed and low overhead) 최적화
- 두 제품 모두 Antigravity 제공물의 핵심 축으로 유지·확장
📋 5분 요약 — 가장 중요한 5가지
| # | 핵심 메시지 |
|---|---|
| 1 | Antigravity CLI는 2.0 데스크톱의 가벼운 터미널 대안 — 호출·모니터링·상호작용에 특화 |
| 2 | 두 제품은 동일한 agent harness를 공유 — 한쪽 개선이 다른 쪽에 자동 반영 |
| 3 | 권한 등 공통 설정도 공유 — 한 곳에서만 설정하면 됨 |
| 4 | 대화 자체는 기본 분리되어 있지만 2.0에서 @conversation으로 CLI 대화 불러올 수 있음 |
| 5 | 장기 비전: "single, cohesive developer product offering" — 단일 통합 개발자 제품 라인 + 공유 하니스 + Gemini 모델 공동 최적화 |
🔗 블로그가 안내하는 공식 자료
- 다운로드: antigravity.google/download
- Gemini CLI → Antigravity CLI 마이그레이션 가이드: antigravity.google/docs/gcli-migration
- 슬래시 명령·설정·키바인딩 전체 문서: Antigravity CLI 공식 docs (블로그에서 링크)
- 전환 발표문 (Developers Blog): developers.googleblog.com — Important update
출처: 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. ❓ 아직 공식적으로 확인 안 된 항목
마이그레이션 전 직접 확인 권장:
- Antigravity CLI 무료 등급 일일 한도 — 기존 1,000건/일이 유지되는지, 줄어드는지, 늘어나는지 미공개
- 인증 방법 호환성 — 기존 OAuth 토큰을 그대로 쓸 수 있는지, 새로 로그인해야 하는지 미공개
- 사용 가능 모델 목록 — 무료 등급에서 Gemini 3 Pro/Flash 어디까지 호출 가능한지 미공개
- 분당/시간당 요청 수(RPM) — 일일 한도와 별개의 burst 제한이 있는지 미공개
- GEMINI.md, .gemini/settings.json 호환성 — 새 CLI가 기존 설정 파일을 그대로 읽는지, 변환이 필요한지 미공개
- MCP 서버 호환성 — 등록된 MCP 서버가 그대로 작동하는지, "플러그인" 포맷으로 재패키징해야 하는지 미공개
- 유예 기간 연장 가능성 — 6/18 마감을 미루는 옵션이 있는지 미공개
위 항목은 다음에서 최신 정보를 받을 수 있습니다 — 가이드도 확정되는 대로 업데이트할 예정입니다:
- antigravity.google/docs/gcli-migration (마이그레이션 가이드 본문)
- antigravity.google/pricing (요금제 페이지)
- github.com/google-antigravity/antigravity-cli (이슈 트래커에서 사용자 보고 확인)
4. 시나리오별 무료 사용자 액션 플랜
시나리오 A: "취미·학습용으로 가끔 쓴다"
권장: Antigravity CLI 무료 등급으로 이전 시도 → 한도·기능 확인 후 만족하면 계속, 부족하면 시나리오 B 또는 C로
- 📥 antigravity.google/download에서 다운로드
- 🔐 본인의 기존 Google 계정으로 로그인 (현재 OAuth 그대로 호환되리라 예상되나 확정 아님)
- 📂 기존
~/.gemini/디렉토리는 지우지 말고 백업 — 명령 매핑이나 설정 호환에 참고용 - ⏱️ 첫 며칠 동안 일일 한도에 부딪히는지 모니터링 (
/stats model로 사용량 확인)
시나리오 B: "매일 본격적으로 쓰는데 비용은 최소화하고 싶다"
권장: 유료 Gemini API 키로 전환 → Gemini CLI도 6/18 이후 계속 사용 가능
- Google AI Studio에서 API 키 발급 + 결제 등록
export GEMINI_API_KEY=...로 인증 전환 (기존 OAuth 로그인 대체)- 유료 키는 종량제 — 가벼운 사용은 월 1~2달러 수준 가능
- ✅ 발표문에 명시: "paid Gemini API keys via Gemini CLI remain accessible"
- 📌 단, Gemini CLI 자체 개발이 중단될 가능성이 높으므로 장기적으로는 Antigravity 이전 권장
시나리오 C: "팀 단위로 쓰고 안정성이 중요하다"
권장: Code Assist Standard 또는 Vertex AI(Gemini Enterprise Agent Platform)로 업그레이드
- 두 옵션 모두 공식 발표문에 "access remains unchanged"로 보장됨
- Gemini CLI도 계속 사용 가능 · Antigravity CLI로 자유 전환 가능
- 견적은 Google Cloud 영업 또는 Workspace 관리자 경로
시나리오 D: "Antigravity가 마음에 안 들면 어떡하지?"
대안: Gemini API 키만 발급해두고 다른 오픈소스 CLI 또는 IDE 확장으로 우회
- 오픈소스 CLI: Aider, Continue.dev, Cursor CLI 등이 Gemini API 키를 지원
- self-host MCP 서버: 일부 도구는 직접 운영 가능
- 다른 모델 병행: Claude(Anthropic), Codex(OpenAI), 또는 로컬 모델(Ollama/LM Studio) 결합
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 CLI | Antigravity 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를 사용해온 경우, 첫 실행 시 안내되는 일회성 마이그레이션 단계가 기존의 다음 항목들을 자동으로 가져옵니다.
- 익스텐션 (Extensions)
- 에이전트 스킬 (Skills)
- 사용자 설정 (Settings)
마이그레이션 절차의 단계별 안내는 본 가이드의 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 파일
- 모든 설정은 평문 JSON 파일
~/.gemini/antigravity-cli/settings.json에 저장됩니다. - 에디터로 직접 열어 편집해도 무방하며, MCP·스킬·훅 같은 복합 구조를 다룰 때는 직접 편집이 효율적입니다.
인터랙티브 설정 패널 — /config · /settings
실행 중인 프롬프트에서 /config 또는 /settings 를 입력하면 모든 옵션을 나열한 풀스크린 오버레이 메뉴가 열립니다.
- 항목을 선택하면 선택지 목록 또는 텍스트 입력 필드가 함께 표시됩니다.
- 값을 고르는 즉시 디스크에 반영되고 메인 목록으로 돌아옵니다.
- 각 항목의 의미·기본값·시나리오별 추천 조합은 본 가이드의
/config메뉴 섹션에서 자세히 다룹니다.
설정 오버라이드 — CLI 플래그가 이긴다
일부 설정은 CLI 실행 시 플래그로 덮어쓸 수 있습니다. 예: --sandbox, --dangerously-skip-permissions.
- 설정 메뉴에는 오버라이드 출처 인디케이터가 표시됩니다. 예:
Sandbox Mode on (overridden by --sandbox). - 이 인디케이터가 있으면,
/config에서 디스크 값은 바꿀 수 있지만 현재 세션은 인자 우선이라 즉시 반영되지 않습니다. CLI를 재시작해야 적용됩니다.
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입력 - 직접 편집:
~/.gemini/antigravity-cli/keybindings.json파일을 에디터로 수정
초기화 방법: keybindings.json 파일을 삭제하면 다음 실행 시 기본값으로 자동 복원됩니다.
기본 키바인딩 — 카테고리별 정리
① TUI / 세션 제어
| 동작 | 키 | 설명 |
|---|---|---|
| TUI 화면 비우기 | Ctrl+L | 터미널 출력 영역 클리어 |
| Enter / 제출 | Enter | 프롬프트나 선택지를 제출 |
| Escape / 취소 | Ctrl+C, Esc | 스트림 정지, 메뉴 닫기, 프롬프트 비우기 |
| CLI 종료 | Ctrl+D | TUI 세션 자체를 종료 |
| 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+Home | TUI 뷰를 즉시 최상단으로 이동 |
| 맨 아래로 | Ctrl+End | TUI 뷰를 즉시 최하단으로 이동 |
| 페이지 위로 | PgUp, Shift+↑ | TUI 한 페이지 위로 스크롤 |
| 페이지 아래로 | PgDn, Shift+↓ | TUI 한 페이지 아래로 스크롤 |
| Tab / 포커스 전환 | Tab | 자동완성 선택 또는 컴포넌트 포커스 전환 |
키바인딩 커스터마이징 규칙
- 다중 매핑: 한 동작에 여러 키 조합을 매핑할 수 있습니다. JSON에서 배열로 지정.
- 비활성화: 특정 동작의 키 배열을 빈 배열
[]로 두면 해당 단축키가 비활성화됩니다. - 오류 복구: JSON이 망가져 있어도 CLI는 유효한 부분만 사용하고, 깨진 동작은 기본값으로 폴백합니다.
cli.exit 와 cli.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 서버·훅을 하나의 네임스페이스가 부여된 번들로 묶은 배포 단위입니다. 설치 한 번으로 여러 종류의 커스터마이징을 한꺼번에 가져올 수 있습니다.
설치 시 동작
- CLI가 플러그인 파일을 사용자의 홈 디렉토리 아래
~/.gemini/antigravity-cli/plugins/<plugin_name>/에 스테이징합니다. - Antigravity 에이전트가 시작 시 이 위치를 자동 탐색해 플러그인을 로드합니다.
~/.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 | 샌드박스 백엔드 |
|---|---|
| Linux | nsjail |
| macOS | sandbox-exec |
| Windows | AppContainer |
설정 방법
사용자 설정 파일(~/.gemini/antigravity-cli/settings.json)에 다음 항목을 추가하면 활성화됩니다.
{
"enableTerminalSandbox": true
}
enableTerminalSandbox(boolean, 기본값false) — 모든 로컬 에이전트 프로세스에 격리 경계를 강제합니다.
인터랙티브 승인 — 샌드박스 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에서 깊이 있는 설정을 받습니다.
세분화된 권한 — 전역 레벨 대신 명령 단위 화이트/블랙리스트
{
"permissions": {
"allow": ["command(git)", "command(npm test)"],
"deny": ["command(rm -rf)"]
}
}
커스텀 상태 라인 / 윈도우 타이틀
에이전트의 실시간 메타데이터(JSON: 현재 디렉토리·활성 모델·토큰 사용량·상태 등)를 사용자가 작성한 셸 스크립트로 파이프해, 동적인 상태바나 터미널 타이틀을 만들 수 있습니다. 모니터링 패널을 직접 꾸미고 싶을 때 유용합니다.
- CLI 치트시트 — 200+ 명령 사전
/config메뉴 — TUI 설정 변경- 권한 (Permissions)
- 설정 파일
4. 서브에이전트 (Subagents)
Antigravity CLI는 비동기 서브에이전트 프레임워크를 갖추고 있습니다. 메인 에이전트가 병렬 작업, 백그라운드 조사, 시스템 테스트를 위임할 수 있어 현재 진행 중인 대화를 멈추지 않고도 부가 작업을 끝낼 수 있습니다.
서브에이전트란?
- 독립된 동시 세션: 메인 대화와 별개로 돌아가는 에이전트 인스턴스
- 자동 스폰: 문서 조회, 빌드 실행, 수정 사항 검증 같은 백그라운드 작업이 필요하면 메인 에이전트가 알아서 서브를 띄움
- 풀 권한: 코드 검색, 파일 편집, 터미널 명령, 웹 검색까지 도구 전반에 접근 가능
- 권한 통제는 메인이 결정: 서브에이전트가 MCP 도구를 쓸 수 있는지, 파일을 쓸 수 있는지를 메인 에이전트가 게이트키퍼로 통제
/agents 패널 — 인터랙티브 관리 UI
- 열기: 프롬프트에
/agents입력 - 개요 화면: 활성·완료 서브에이전트 목록 + 상태(
running·done·killed등) + 현재 실행 중인 단계 표시 - 상세 화면: 목록에서 항목을 선택하면 전체 대화 — 단계·생각·도구 실행 로그 — 가 풀스크린으로 표시
도구 승인 — 두 가지 경로
서브에이전트가 사용자 권한이 필요한 도구(예: 로컬 명령 실행, 파일 쓰기)를 호출하려 하면 승인 요청이 떠오릅니다. 두 가지 방식으로 처리할 수 있습니다.
| 방식 | 위치 | 단축키 | 특징 |
|---|---|---|---|
| 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축의 이전 절차와 위치 변화를 다룹니다.
Antigravity CLI는 Gemini CLI 기능 대부분을 그대로 지원합니다. 100% 동일하진 않지만 워크플로우의 뼈대를 이루는 — 익스텐션(이제 ‘플러그인’), 에이전트 스킬, MCP 서버, 훅, 서브에이전트 — 모두 호환됩니다. 첫 실행 시 자동 임포트로 대부분의 자산을 옮길 수 있고, 일부 항목(예: 커스텀 테마)은 현재 1:1로 옮겨지지 않습니다.
첫 실행 — Migration Options 화면
Antigravity CLI를 처음 실행하면 Migration Options 화면이 표시됩니다. 여기서 기존 Gemini CLI 익스텐션을 동등한 Antigravity 플러그인으로 자동 변환하도록 선택할 수 있습니다.
일부 컴포넌트는 현재 호환되지 않습니다. 대표적으로 커스텀 테마가 그 예입니다. 마이그레이션 로그에서 skipped 표시가 보이면 해당 항목은 수동 이전이 필요합니다.
대부분의 사용자는 마이그레이션이 끝난 직후 기존 Gemini CLI 워크플로우 그대로 Antigravity CLI를 사용할 수 있습니다. 컨텍스트 파일과 글로벌 에이전트 스킬은 같은 위치에서 그대로 로드됩니다.
1. 익스텐션 (Extensions) → 플러그인 (Plugins)
Gemini CLI가 ‘익스텐션’이라 부르던 — 기능을 묶어서 공유하는 단위 — 개념은 이제 업계 표준 용어인 플러그인으로 정착됐습니다. Antigravity CLI는 이 플러그인을 1급 시민으로 지원합니다.
자동 마이그레이션
첫 실행 시 안내되는 옵션을 통해 자동으로 진행되며, 언제든 명령으로 다시 실행할 수도 있습니다.
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)
- ✔ processed: 정상적으로 플러그인으로 변환된 항목
- - skipped (not found): 원래 익스텐션에 해당 컴포넌트가 없어 건너뜀
- commands → skills: 익스텐션의 커스텀 명령은 스킬로 변환됨
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 CLI | Antigravity 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 관리 명령도 동일합니다. 가장 중요한 차이는 두 가지입니다.
- MCP 서버 정의가
settings.json에서 분리되어 별도의mcp_config.json파일을 사용 - 원격 MCP 서버의 URL 필드 이름이
url(또는 deprecated된httpUrl)에서serverUrl로 변경
| 속성 | Gemini CLI | Antigravity 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 |
기존 설정을 복사할 때 "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 CLI | Antigravity 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 전환 가이드 — 본 가이드의 전체 마이그레이션 흐름
- Antigravity CLI 기능 — 플러그인·샌드박스·서브에이전트 등 신규 기능
- 에이전트 스킬 · MCP 서버 · 확장 프로그램
Antigravity CLI 설치
Antigravity CLI를 처음 설치하는 가이드입니다. 시스템 요구사항을 확인한 후 원하는 방법을 선택하세요. 기존 Gemini CLI를 쓰던 경우라면 자동 마이그레이션 안내도 참고하세요.
- CLI 본체의 실행 명령은
agy입니다 (Antigravity의 약어). - 설정·플러그인 파일은
~/.gemini/antigravity-cli/아래에 저장됩니다. - 기존
~/.gemini/폴더의 글로벌 스킬·컨텍스트 파일은 그대로 인식됩니다 — 즉, 마이그레이션 없이도 글로벌 자산은 살아 있습니다.
1. 시스템 요구사항
| 항목 | 요구사항 |
|---|---|
| 운영체제 | macOS 15+, Windows 11 24H2+ (또는 WSL2), Ubuntu 20.04+ |
| Node.js | 20.0.0 이상 (LTS 권장) |
| RAM | 최소 4GB, 매니저 뷰·서브에이전트 활용 시 16GB 권장 |
| 셸 | Bash, Zsh, Fish, PowerShell |
| Git | 2.40+ (체크포인팅·워크트리 기능 활용에 권장) |
| 네트워크 | 인터넷 연결 필수 (Vertex AI / Workspace 인증) |
| 계정 | Google 개인 계정 또는 Workspace 계정 |
2. Node.js 사전 준비
Antigravity CLI는 Node.js 기반 도구입니다. node --version으로 현재 버전을 확인하고, 20.0.0 미만이거나 설치돼 있지 않다면 아래 방법 중 하나로 설치하세요.
node --version # v20.0.0 이상이면 OK
npm --version # npm도 함께 설치돼 있어야 함
설치 옵션
옵션 A — 공식 사이트 (입문자에 가장 간단)
nodejs.org에서 LTS 버전을 다운로드해 설치 프로그램을 실행합니다. Node.js와 npm이 함께 설치됩니다.
옵션 B — nvm (개발자 권장: 여러 버전 전환 가능)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
# 터미널 재시작 후
nvm install --lts
nvm use --lts
# https://github.com/coreybutler/nvm-windows/releases 에서 설치 후
nvm install lts
nvm use lts
옵션 C — 패키지 매니저
brew install node
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
choco install nodejs-lts
3. Antigravity CLI 설치 방법
방법 1 — npm 글로벌 설치 (권장)
가장 표준적인 방법입니다. 한 번 설치하면 어디서든 agy 명령으로 실행할 수 있습니다.
npm install -g @google/antigravity-cli
# 설치 확인
agy --version
방법 2 — Homebrew (macOS / Linux)
brew install antigravity-cli
방법 3 — 설치 없이 일회성 실행 (npx)
한 번만 써보고 싶거나 글로벌 설치를 피하고 싶을 때.
npx @google/antigravity-cli@latest
방법 4 — IDE에서 자동 설치
VS Code, Cursor, Windsurf 등 Antigravity IDE 또는 VS Code 계열 환경의 통합 터미널에서 처음 agy 를 입력하면 컴패니언 익스텐션과 함께 설치가 안내됩니다. 자세한 내용은 IDE 익스텐션 섹션 참조.
방법 5 — 제한된 환경 (Anaconda 등)
Node.js를 직접 설치할 수 없는 폐쇄망·랩 환경에서 유용합니다.
conda create -y -n agy_env -c conda-forge nodejs
conda activate agy_env
npm install -g @google/antigravity-cli
Google Cloud Shell과 Cloud Workstations에는 Node.js가 사전 설치돼 있어 npm install -g @google/antigravity-cli 한 줄로 바로 시작 가능합니다.
4. 첫 실행과 인증
설치가 끝났다면 빈 디렉토리든 작업 중인 프로젝트든 어디서나 agy 명령으로 진입할 수 있습니다.
agy
# 1) 환영 화면 표시
# 2) 처음 한 번 Google 계정 로그인 (브라우저 자동 오픈)
# 3) 기존 Gemini CLI 사용자라면 Migration Options 안내
# 4) /help 또는 /ide install 추천 표시
인증·계정·과금 통합 흐름의 자세한 안내는 인증 설정 섹션을 참고하세요. Workspace SSO를 쓰는 팀은 다음과 같이 도메인을 지정해 로그인합니다.
agy auth login --workspace example.com
5. 설치 결과 확인 체크리스트
아래 3가지가 모두 정상 응답하면 설치가 끝난 것입니다.
# 1. 버전
agy --version
# 2. 인증 상태
agy auth status
# 3. 한 줄 프롬프트 (헤드리스 모드)
agy -p "현재 디렉토리의 파일 구조를 한 줄로 요약해줘"
6. 업데이트와 제거
npm install -g @google/antigravity-cli@latest
# 또는
agy update
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/)에 저장되므로 안전. |
- 개발 환경 설정 — Node.js·Git·uv 통합 셋업
- Antigravity CLI 개요 — 설치 전에 도구 전반 이해
- Gemini CLI → Antigravity CLI 마이그레이션
- Gemini 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
> request-review (current)
proceed-in-sandbox
always-proceed
strict
- ↑ / ↓ — 항목 이동 (현재 선택 항목은
>표시) - 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— 산출물 적용 전 점검
- 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 + 특정 키바인딩)와 충돌. 검색용 문자 입력으로 항목 필터 후 선택 |
오늘코드 Antigravity CLI 가이드 v1.0
Google의 Gemini 모델을 터미널에서 직접 활용하세요. 코드 이해, 작업 자동화, 워크플로우 구축을 위한 완벽 가이드입니다.
Google이 2026년 5월 19일 공식 발표한 내용에 따르면, Gemini CLI는 후속 도구인 Antigravity CLI로 통합·이전됩니다. 이 가이드도 곧 Antigravity CLI 내용으로 확장될 예정입니다.
📅 주요 일정
| 날짜 | 변경 사항 |
|---|---|
| 2026-05-19 | Antigravity CLI 전 사용자에게 공개. Gemini CLI도 당분간 병행 |
| 2026-06-18 | Gemini 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 개인 사용자
- 🛡️ 영향 받지 않음: 엔터프라이즈 유료 라이선스 보유 조직 (별도 안내)
🚀 마이그레이션
- Antigravity CLI 다운로드 → antigravity.google/download
- 마이그레이션 가이드 정독 → antigravity.google/docs/gcli-migration
- 커뮤니티·이슈 트래커 → github.com/google-antigravity/antigravity-cli
- 주요 변경점(설정 파일, 명령 이름, 확장 → 플러그인) 본인 환경에서 검증 후 6월 18일 전 전환
📝 이 가이드는 어떻게 되나
- 당분간 Gemini CLI 내용 그대로 유지 — 6월 18일 전까지 학습·참고용으로 유효
- Antigravity CLI 챕터를 별도 섹션으로 점진적 추가 (먼저 마이그레이션 가이드, 그다음 명령 매핑 표, 그다음 신기능)
- 섹션마다 Gemini CLI / Antigravity 배지로 어느 도구 기준인지 명시 예정
빠른 설치
npm 한 줄로 설치하고 바로 사용할 수 있습니다. Node.js 20 이상이면 충분합니다.
터미널 네이티브
터미널을 떠나지 않고 AI와 대화하며 코드를 분석, 생성, 리팩토링할 수 있습니다.
프로젝트 컨텍스트
GEMINI.md로 프로젝트별 지시사항을 설정하면 더 정확한 응답을 받을 수 있습니다.
확장 가능
MCP 서버, 확장 프로그램, 에이전트 스킬로 기능을 무한히 확장할 수 있습니다.
안전한 실행
샌드박싱, 승인 모드, 훅으로 AI의 행동을 안전하게 제어합니다.
무료 사용
Google 계정(OAuth)만 있으면 Gemini Code Assist 기반 무료 할당량으로 사용할 수 있습니다.
Gemini CLI란?
Gemini CLI
에이전트 루프
(반복 실행 엔진)
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 모델 지원 (프리뷰)
빠른 설치
npm install -g @google/gemini-cli
설치 후 gemini 명령으로 바로 시작할 수 있습니다.
gemini
개발 환경 설정
Gemini CLI를 사용하기 위해 필요한 개발 도구를 설치하세요. Node.js, Git, uv(Python 패키지 매니저)의 역할과 설치 방법을 안내합니다.
Node.js — Gemini CLI의 핵심 런타임
Gemini CLI는 JavaScript(Node.js) 기반으로 개발된 도구입니다. npm(Node Package Manager)을 통해 배포되며, CLI 실행 시 Node.js 런타임 위에서 동작합니다. 따라서 Node.js 20.0.0 이상이 반드시 설치되어 있어야 합니다.
설치 여부 확인
node --version # 예: v22.11.0 (20.0.0 이상이면 OK)
npm --version # 예: 10.9.0
명령어가 인식되지 않거나(command not found) 버전이 20.0.0 미만이면 아래 방법으로 설치하세요.
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 창에서 다음을 실행하세요:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
# 변경 확인
Get-ExecutionPolicy -Scope CurrentUser # → RemoteSigned
현재 로그인한 사용자에게만 적용되며 시스템 전체는 영향받지 않습니다. RemoteSigned는 로컬 스크립트는 자유롭게 실행하고, 인터넷에서 다운로드한 스크립트는 디지털 서명이 있을 때만 실행하는 안전한 정책입니다.
✅ 해결 방법 2: 관리자 권한으로 PowerShell 실행 (시스템 전체 적용)
- 시작 메뉴에서 "PowerShell"을 검색
- "Windows PowerShell"을 마우스 오른쪽 클릭 → "관리자 권한으로 실행" 선택
- "이 앱이 디바이스를 변경할 수 있도록 허용하시겠어요?"에서 "예" 클릭
- 아래 명령 실행:
Set-ExecutionPolicy RemoteSigned
# Y 입력 후 Enter
✅ 해결 방법 3: 일회성 우회 (정책 변경 없이 실행)
정책을 영구적으로 바꾸지 않고 한 번만 우회하고 싶을 때 사용합니다. 단축 실행 형태로 자주 쓰이는 패턴입니다:
# 단일 명령 우회 실행
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 실행 정책 공식 문서를 참고하세요.
설치 방법
| 방법 | 플랫폼 | 특징 | 추천 대상 |
|---|---|---|---|
| 공식 사이트 | 전체 | 설치 프로그램으로 간편 설치 | 입문자 |
| nvm | macOS / Linux | 여러 버전 설치·전환 가능 | 개발자 (권장) |
| nvm-windows | Windows | Windows용 Node 버전 관리자 | Windows 개발자 |
| Homebrew | macOS | brew install node | Homebrew 사용자 |
| 패키지 매니저 | Linux | apt, dnf 등 시스템 패키지 관리자 | 서버 환경 |
방법 1: 공식 사이트 (가장 간단 — 추천)
https://nodejs.org에서 LTS(장기 지원) 버전을 다운로드하여 설치합니다. Node.js와 npm이 함께 설치됩니다.
처음 사용하시면 방법 1만 따라하세요. 아래 방법 2·3은 여러 Node 버전을 다뤄야 하거나 패키지 매니저를 선호하는 사용자를 위한 옵션입니다.
방법 2: nvm — 여러 Node 버전 관리가 필요할 때
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
# 터미널 재시작 후
nvm install --lts
nvm use --lts
# nvm-windows 설치 후 (https://github.com/coreybutler/nvm-windows/releases)
nvm install lts
nvm use lts
방법 3: 패키지 매니저 (Homebrew / apt / Chocolatey)
brew install node
# NodeSource 저장소 추가 (최신 LTS: Node.js 22.x 기준)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
choco install nodejs-lts
Node.js 버전이 20.0.0 미만이면 Gemini CLI 설치 시 오류가 발생합니다. nvm install --lts 또는 공식 사이트에서 최신 LTS 버전을 설치하세요.
Git — 버전 관리 및 Worktree 지원
Git은 코드 버전 관리 시스템입니다. Gemini CLI는 Git이 있으면 다음 기능을 사용할 수 있습니다:
- Git Worktree:
gemini -w로 독립된 브랜치에서 AI가 안전하게 코드 변경 - 체크포인팅: 파일 변경 전 자동 스냅샷 저장, 이전 상태로 되돌리기
- Diff 기반 작업: AI가 변경사항을 정확하게 추적하고 리뷰
- 브랜치 관리: 기능 개발, 버그 수정 등을 독립적으로 관리
Git 없이도 Gemini CLI를 사용할 수 있지만, 위 기능들이 비활성화되므로 설치를 강력히 권장합니다.
설치 여부 확인
git --version # 예: git version 2.43.0
설치 방법
| 플랫폼 | 설치 방법 | 명령어 / 링크 |
|---|---|---|
| macOS | Xcode CLI Tools (별도 설치 필요) | xcode-select --install |
| macOS | Homebrew | brew install git |
| Windows | Git for Windows | git-scm.com/download/win |
| Windows | Chocolatey | choco install git |
| Windows | winget | winget install --id Git.Git |
| Ubuntu / Debian | apt | sudo apt install git |
| Fedora / RHEL | dnf | sudo dnf install git |
설치 후 초기 설정
Git을 처음 설치했다면 사용자 정보를 설정하세요. 이 정보는 커밋 기록에 포함됩니다.
# 사용자 이름과 이메일 설정
git config --global user.name "이름"
git config --global user.email "email@example.com"
# 설정 확인
git config --list
자세한 사용법은 Git 공식 문서 또는 Pro Git 한국어 번역을 참고하세요.
uv — 초고속 Python 패키지 매니저
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 설치를 강력히 권장합니다.
설치 여부 확인
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" |
| macOS | Homebrew | brew install uv |
| 전체 | pip (기존 Python 있을 때) | pip install uv |
| 전체 | pipx (격리 설치) | pipx install uv |
macOS / Linux 설치
# 공식 설치 스크립트 (권장)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 설치 후 셸 재시작 또는
source $HOME/.local/bin/env
Windows 설치
# 공식 설치 스크립트
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 기반일 때
다음과 같은 분에게 도움이 됩니다:
- uv가 Gemini CLI 생태계와 어떻게 연결되는지 큰 그림이 궁금한 분
- Python 기반 MCP 서버를 이미 사용해 본 경험이 있는 분
- 설정 파일(
settings.json) 구조를 미리 한번 훑어보고 싶은 분
⚠️ 다시 강조: 아래 코드는 "보기만 하는 예시"이며, 직접 입력해 실행할 필요는 없습니다.
↓ 아래 코드 블록은 참고용 예시입니다. 지금 따라 입력하지 마세요.
# [예시] 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 공식 문서를 참고하세요. GitHub 저장소에서 최신 릴리스를 확인할 수 있습니다.
전체 환경 검증
모든 도구가 설치되었는지 한 번에 확인하세요.
# 필수: Node.js 20+ 확인
node --version
# 필수: npm 확인
npm --version
# 권장: Git 확인
git --version
# 권장: uv 확인 (Python 스크립트 개발 · MCP 서버 실행은 선택)
uv --version
각 항목을 설치 완료하면 체크하세요. 진행 상황이 자동 저장됩니다.
git --versionuv --versionnpm install -g @google/gemini-cligeminiIDE 익스텐션
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 Code | VS Code Marketplace 또는 Open VSX | 1차 지원 |
| Google Antigravity | Open VSX | VS Code 포크 — Open VSX 레지스트리 사용 |
| Cursor | Open VSX | VS Code 포크 |
| Windsurf | Open VSX | VS Code 포크 |
| VSCodium | Open VSX | 오픈소스 빌드 |
이들은 라이선스 문제로 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+P → Gemini CLI: Run으로 통합 터미널에서 새 세션을 시작합니다. |
요구사항
- VS Code 1.99.0 이상 또는 동일 API 레벨의 포크 IDE
- Gemini CLI가 별도 설치되어 있어야 함 — 설치 가이드 참조
- 익스텐션은 IDE의 통합 터미널에서 실행 중인 Gemini CLI 세션을 감지합니다. 외부 터미널에서는 동작하지 않습니다.
설치 방법
1. VS Code에서 설치
가장 간단한 방법입니다.
- 왼쪽 사이드바의 익스텐션 아이콘 클릭 (또는
Cmd/Ctrl+Shift+X) - 검색창에
Gemini CLI입력 - 게시자가 Google인 Gemini CLI Companion 선택 → Install
2. Antigravity / Cursor / Windsurf / VSCodium에서 설치 (Open VSX)
이 IDE들은 Open VSX를 기본 마켓플레이스로 사용합니다. 익스텐션 탭에서 검색하면 같은 결과가 나오지만, 보이지 않을 경우 다음 방법을 사용합니다.
# 익스텐션 탭에서 정확한 ID로 검색
Google.gemini-cli-vscode-ide-companion
# 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 내부 슬래시 명령으로도 설치할 수 있습니다.
/ide install # 현재 IDE에 맞는 companion 익스텐션 자동 설치
/ide status # 연결 상태 확인
/ide enable # IDE 모드 켜기 (기본값)
/ide disable # IDE 모드 끄기 (컨텍스트 공유 중단)
사용법
- IDE의 통합 터미널을 엽니다 (
Ctrl+`) gemini실행 — 익스텐션이 활성 상태면 우측 상태바 또는 첫 응답에 IDE 연결 표시가 나옵니다- 편집기에서 코드를 선택한 뒤 프롬프트 작성 — 선택 영역이 자동으로 컨텍스트에 포함됩니다
- 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분 안에 시작해보세요.
단계별 가이드
Gemini CLI 설치
npm install -g @google/gemini-cli
대화형 세션 시작
프로젝트 디렉토리로 이동한 후 gemini를 실행합니다.
cd my-project
gemini
Google 계정으로 로그인
처음 실행 시 "Sign in with Google"을 선택하면 브라우저가 열립니다. 로그인하면 인증 정보가 로컬에 캐시됩니다.
첫 번째 질문하기
프롬프트가 나타나면 자연어로 질문을 입력합니다.
> 이 프로젝트의 구조를 설명해줘
> README.md를 요약해줘
> src/ 폴더에서 TODO 주석을 찾아줘
기본 사용 패턴
대화형 모드 (기본)
# 대화형 REPL 시작
gemini
# 초기 프롬프트와 함께 시작
gemini "이 프로젝트에 대해 설명해줘"
REPL은 Read-Eval-Print Loop의 약자로, "입력을 읽고(Read) → 실행하고(Eval) → 결과를 출력하고(Print) → 다시 반복(Loop)하는" 대화형 환경을 뜻합니다. 쉽게 말해, 터미널에서 한 줄씩 명령을 입력하면 바로 응답을 받을 수 있는 실시간 대화 모드입니다. gemini를 입력하면 REPL이 시작되고, 질문을 입력할 때마다 AI가 즉시 답변합니다.
비대화형 모드 (일회성 질문)
# 질문 후 바로 종료
gemini -p "README.md를 요약해줘"
# 파이프와 함께 사용
cat error.log | gemini -p "이 에러 로그를 분석해줘"
대화형 + 프롬프트
# 프롬프트 실행 후 REPL 유지
gemini -i "프로젝트 구조를 분석해줘"
--approval-mode)파일 수정이나 셸 명령 실행 시 Gemini CLI는 사용자의 승인을 요청합니다. --approval-mode 플래그로 이 동작을 제어할 수 있습니다:
default— 기본값. 모든 도구 실행 전 사용자 승인을 요청합니다.auto_edit— 파일 편집은 자동 승인하되, 셸 명령 등은 승인을 요청합니다.yolo— 모든 작업을 자동 승인합니다. 신뢰할 수 있는 환경에서만 사용하세요.plan— 읽기 전용 플랜 모드로 시작합니다. 파일 수정 없이 계획만 세울 수 있습니다.
# 모든 작업 자동 승인 (주의해서 사용)
gemini --approval-mode=yolo
# 파일 편집만 자동 승인
gemini --approval-mode=auto_edit
--yolo / -y 플래그는 deprecated(더 이상 권장되지 않는, 향후 제거 예정) 상태입니다. 대신 --approval-mode=yolo를 사용하세요. 자세한 내용은 CLI 레퍼런스 공식 문서를 참고하세요.
인증 설정
Gemini CLI에서 사용할 수 있는 인증 방법과 설정 방법을 알아봅니다.
Gemini Code Assist 개인 티어
즉시 사용 가능
GEMINI_API_KEY 환경변수
개인 프로젝트용
엔터프라이즈 용도
gcloud ADC 사용
인증 방법 전환: `/auth` 명령
REPL 내에서 /auth 명령을 입력하면 OAuth / API Key / Vertex AI 등 인증 방법을 대화형으로 전환할 수 있습니다. 새 방법을 선택하면 필요한 브라우저 로그인 또는 환경 변수 확인을 진행합니다.
/auth
인증 방법
1. Google 계정으로 로그인 (권장)
가장 간단한 방법입니다. gemini를 실행하고 "Sign in with Google"을 선택하면 브라우저를 통해 로그인이 진행됩니다. 인증 정보는 로컬에 캐시되어 이후 세션에서 자동으로 사용됩니다.
2. Gemini API 키
Google AI Studio에서 API 키를 발급받아 환경 변수로 설정합니다.
export GEMINI_API_KEY="your-api-key-here"
API 키는 민감한 자격 증명입니다. 코드 저장소에 직접 커밋하지 마세요.
3. Vertex AI
Google Cloud 프로젝트를 통한 인증으로, 세 가지 방법을 지원합니다:
- A. ADC (Application Default Credentials — 애플리케이션 기본 인증 정보):
gcloud auth application-default login명령으로 설정 - B. 서비스 계정 키: JSON 키 파일 경로를
GOOGLE_APPLICATION_CREDENTIALS에 설정 - C. Google Cloud API 키:
GOOGLE_API_KEY환경 변수 사용 (일부 조직에서 제한될 수 있음)
Vertex AI 인증 시 다음 환경 변수도 설정이 필요합니다:
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="us-central1"
Google Cloud 프로젝트 설정
다음에 해당하는 경우 Google Cloud 프로젝트 설정이 필요합니다:
- 회사, 학교, Google Workspace 계정 사용자
- Gemini Code Assist 라이선스 보유자
- 엔터프라이즈 구독자
# 환경 변수로 프로젝트 설정 (공식: GOOGLE_CLOUD_PROJECT)
export GOOGLE_CLOUD_PROJECT="my-project-id"
환경 변수 영구 저장
두 가지 방법으로 환경 변수를 영구적으로 저장할 수 있습니다.
방법 1: 셸 설정 파일
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_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 "질문" | 프롬프트 실행 후 REPL | gemini -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 | -y | Deprecated. 모든 액션 자동 승인. --approval-mode=yolo 사용 권장 | CLI 레퍼런스 |
--worktree | -w | Git worktree에서 실행 (요구사항: settings.json에 experimental.worktrees: true) | Git Worktrees |
--skip-trust | 현재 세션 동안만 워크스페이스 신뢰 — 폴더 신뢰 확인 건너뛰기 | 신뢰 폴더 | |
--allowed-tools | Deprecated. 정책 엔진 사용 권장. 승인 없이 실행 가능한 도구 목록 | 정책 엔진 | |
--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 서버 | |
--acp | ACP(Agent Client Protocol) 모드 실행 (별칭: --experimental-acp) | ||
--experimental-zed-integration | Zed 에디터 통합 모드 (실험적) | ||
--version | -v | CLI 버전 표시 후 종료 | |
--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 | 설정 에디터 열기 (대화형) | |
/theme | UI 테마 변경 다이얼로그 | 테마 |
/privacy | 개인정보 안내 + 텔레메트리 옵트인/아웃 | |
/policies list | 모드별 활성 정책 목록 | 정책 엔진 |
/permissions trust [경로] | 폴더 신뢰 설정 관리 | 신뢰 폴더 |
/directory add <경로> · show | 워크스페이스 디렉토리 관리 (별칭: /dir) | |
/tools [desc|nodesc] | 사용 가능 도구 목록 (설명 포함/생략) | |
/vim | Vim 키바인딩 모드 토글 (NORMAL/INSERT) | |
/shells 또는 /bashes | 백그라운드 프로세스 대시보드 토글 — 로그 확인, 폭주 프로세스 종료(kill) | |
/terminal-setup | 멀티라인 입력용 터미널 키바인딩 구성 (VS Code 등) | |
/setup-github | GitHub Actions로 이슈 트리아지/PR 리뷰 자동화 설정 | |
/upgrade | Gemini Code Assist 업그레이드 페이지 (Google 로그인 시만) | |
/restore [tool_call_id] | 도구 호출 직전 상태로 파일 복원 (체크포인팅 활성 시만) | 체크포인팅 |
/rewind | 대화 이력/파일 변경 되감기 (Esc 두 번) | 되감기 |
/compress | 채팅 컨텍스트를 요약으로 대체 (토큰 절약) | |
/model | 모델 선택 다이얼로그 열기 | 모델 선택 |
/memory refresh | GEMINI.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 reload | MCP 서버 재시작 | 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 요약해줘
# 외로운 @ — 그대로 모델로 전달
이 코드의 @ 심볼은 무엇을 의미하나?
- git-aware 필터링: 기본적으로
node_modules/,dist/,.env,.git/등 git-ignored 파일은 제외됨.context.fileFiltering설정으로 변경 가능 - 대용량/바이너리:
read_many_files가 성능을 위해 건너뛰거나 truncate할 수 있음
하네스 엔지니어링 (Harness Engineering)
LLM을 단순 호출하는 것을 넘어, "에이전트가 살아 움직이는 환경"을 설계하는 기술. Gemini CLI를 진짜 생산성 도구로 만드는 핵심 사고방식입니다.
하네스(Harness)란 무엇인가?
하네스(harness)는 원래 "마구(馬具)" — 말을 마차에 연결하는 가죽 끈을 뜻합니다. 소프트웨어에서는 "무언가를 통제 가능하게 묶어두는 장치"를 의미하며, AI 분야에서는 LLM을 둘러싼 실행 루프 + 도구 + 컨텍스트 + 안전장치의 총합을 가리킵니다.
같은 모델(예: Gemini 3 Pro)을 사용해도, 하네스가 어떻게 설계되었느냐에 따라 결과물의 품질이 10배 이상 차이가 납니다. 하네스 엔지니어링은 바로 이 차이를 만드는 작업입니다.
모델이 "엔진"이라면, 하네스는 "차체·서스펜션·브레이크·계기판"입니다. 엔진이 좋아도 차체가 부실하면 멈추거나 폭주합니다. 반대로 평범한 엔진이라도 잘 짜인 차체 위에 얹으면 안정적이고 강력해집니다.
왜 Gemini CLI에서 중요한가?
Gemini CLI는 단순한 챗봇이 아니라 파일을 수정하고, 셸 명령을 실행하고, 외부 API를 호출하는 자율 에이전트입니다. 이런 에이전트가 안전하고 일관되게 동작하려면 다음 질문에 답할 수 있어야 합니다:
- 모델은 어떤 컨텍스트를 알아야 하는가? (코드 스타일, 도메인 지식, 금기 사항)
- 어떤 도구까지 사용해도 되는가? (셸 명령, 외부 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: "처음 보는 레거시 프로젝트" 하네스
모델이 코드를 마구 수정하지 않고, 먼저 이해하고 계획부터 세우게 만드는 설정입니다.
# 읽기 전용으로 시작 → 안전하게 탐색
gemini --approval-mode=plan -m gemini-3-pro
# 계획이 마음에 들면 Shift+Tab으로 일반 모드 전환
+ GEMINI.md에 "먼저 코드 구조를 파악하고 변경 계획을 제시한 뒤, 사용자 승인 후 수정"이라는 메타 지침을 넣으면 더 안정적입니다.
레시피 2: "신뢰할 수 있는 작업 자동화" 하네스
CI 파이프라인이나 새벽 자동 작업 등, 사람이 지켜보지 않는 환경에서 동작하는 설정입니다.
# 격리된 컨테이너 + 자동 승인 + JSON 출력으로 로그 수집
gemini \
--sandbox \
--approval-mode=yolo \
--output-format=json \
--prompt "오늘 머지된 PR을 요약해서 release-notes.md 업데이트해줘"
--approval-mode=yolo를 단독으로 쓰면 호스트 시스템에 위험한 명령이 실행될 수 있습니다. --sandbox로 격리하거나, 정책 엔진으로 허용 도구를 명시적으로 제한하세요.
레시피 3: "큰 작업을 작게 쪼개기" 하네스
한 에이전트에게 거대한 작업을 시키지 말고, 전문 서브에이전트에게 위임하는 패턴입니다.
---
name: code-reviewer
description: 코드 변경 사항을 보안·성능·가독성 관점에서 리뷰
tools: read_file, run_shell_command(git diff:*)
---
당신은 시니어 엔지니어입니다. diff를 받으면 다음 순서로 리뷰합니다:
1. 보안 이슈 (SQL injection, XSS, 인증)
2. 성능 핫스팟
3. 테스트 커버리지
한국어로 답하되, 코드 스니펫은 그대로 인용하세요.
메인 에이전트는 code-reviewer 서브에이전트에게 이 PR 리뷰 부탁해처럼 위임만 하면 됩니다. 컨텍스트가 분리되어 메인 세션의 토큰을 절약하고, 전문성도 높아집니다.
레시피 4: "되돌릴 수 있는 실험" 하네스
위험한 변경을 시도하기 전, 안전망을 깔아두는 설정입니다.
- Git Worktree로 별도 브랜치에서 작업:
gemini --worktree feat/experiment - 체크포인팅 활성화:
settings.json에"checkpointing": { "enabled": true } - 훅으로 위험 명령 차단:
PreToolUse훅에서rm -rf /같은 패턴 거부 - 실패하면
/rewind로 직전 도구 호출 취소
안티패턴 (피해야 할 설정)
| 안티패턴 | 왜 나쁜가 | 대안 |
|---|---|---|
| 매 세션 GEMINI.md 없이 시작 | 매번 같은 지침을 입력 → 토큰 낭비, 일관성 깨짐 | 프로젝트 루트에 GEMINI.md 작성 |
모든 작업에 --approval-mode=yolo |
되돌릴 수 없는 파괴적 명령 위험 | auto_edit 기본 + 셸은 매번 승인 |
| 한 세션에 모든 컨텍스트 욱여넣기 | 토큰 낭비, 모델 주의 분산, 캐시 무효화 | 서브에이전트/스킬로 분리 |
| 훅 없이 위험 명령 허용 | git push --force, DROP TABLE 등이 그냥 실행됨 |
PreToolUse 훅으로 패턴 차단 |
| 관측(텔레메트리) 비활성화 + 무한 루프 | 토큰을 다 쓰고도 무엇이 잘못됐는지 모름 | 로컬 텔레메트리 활성화 + 토큰 한도 설정 |
측정 가능한 하네스 품질 지표
좋은 하네스는 "감"이 아니라 숫자로 검증할 수 있습니다. 아래 지표를 주기적으로 추적하세요:
- 1차 시도 성공률 — 사용자 개입 없이 작업이 완료되는 비율
- 롤백률 —
/rewind나git reset으로 되돌린 비율 (낮을수록 좋음) - 토큰/작업 비율 — 같은 작업을 더 적은 토큰으로 끝내는가 (캐싱·서브에이전트 효과)
- 승인 피로도 — 사용자가 승인 다이얼로그를 거부한 비율 (도구 권한 재설계 신호)
- 탈선(off-track) 빈도 — 의도하지 않은 파일을 수정한 빈도 (컨텍스트/스킬 부족 신호)
현재 프로젝트의 하네스 상태를 점검하고 싶다면:
> 이 프로젝트의 GEMINI.md, .gemini/settings.json, .gemini/hooks/, .gemini/agents/, .gemini/skills/ 파일을 모두 읽고
"하네스 엔지니어링" 9개 레이어 관점에서 부족한 부분을 표로 정리해줘.
각 레이어별로 (현재 상태 / 권장 개선 / 우선순위) 컬럼을 채워줘.
참고 자료
- Gemini CLI 공식 문서 — 각 레이어 컴포넌트의 상세 레퍼런스
- CLI 레퍼런스 —
--approval-mode,--sandbox등 하네스 관련 플래그 전체 - Sandboxing, Policy Engine, Hooks — 안전 레이어 구성 가이드
GEMINI.md (프로젝트 컨텍스트)
프로젝트별 지시사항과 규칙을 정의하여 AI의 응답을 맞춤화하세요.
GEMINI.md란?
GEMINI.md는 Gemini 모델에게 프로젝트에 대한 컨텍스트와 지시사항을 전달하는 파일입니다. 매번 프롬프트에 반복적인 설명을 입력하는 대신, 한 번 정의하면 모든 세션에서 자동으로 적용됩니다.
계층 구조
Gemini CLI는 다음 순서로 컨텍스트 파일을 로드합니다:
| 우선순위 | 위치 | 설명 |
|---|---|---|
| 1 | ~/.gemini/GEMINI.md | 모든 프로젝트에 적용되는 글로벌 컨텍스트 |
| 2 | 워크스페이스 GEMINI.md | 프로젝트 디렉토리와 상위 디렉토리 |
| 3 | JIT (Just-in-Time) 컨텍스트 | 도구가 특정 디렉토리에 접근할 때 자동 스캔 — 기본 최대 200개 하위 디렉토리. .gitignore/.geminiignore 존중 |
GEMINI.md 작성 예시
# 프로젝트: My TypeScript Library
## 일반 지침
- 기존 코딩 스타일을 따를 것
- 함수와 클래스에 JSDoc 주석 추가
- 한국어로 주석 작성
## 코딩 스타일
- 들여쓰기: 2칸 스페이스
- 인터페이스 이름: 'I' 접두사 사용
- 엄격한 동등 비교 (=== 및 !==)
- 세미콜론 필수
## 테스트
- Jest 프레임워크 사용
- 테스트 파일은 __tests__ 디렉토리에 배치
- 커버리지 80% 이상 유지
모듈화
@ 구문으로 다른 마크다운 파일을 임포트할 수 있습니다.
@./components/instructions.md
@../shared/style-guide.md
파일명 커스터마이징
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 inbox | Auto-Memory로 추출된 스킬 후보 검토 (아래 Auto-Memory 섹션 참조) |
Auto-Memory 실험적
Auto-Memory는 과거 세션 기록을 분석해 반복되는 워크플로우를 자동으로 Agent Skill로 추출하는 실험적 기능입니다. 백그라운드에서 세션 시작 시 실행되며, 3시간 이상 유휴 상태였고 사용자 메시지가 10개 이상인 세션만 분석합니다.
{
"experimental": {
"autoMemory": true
}
}
Auto-Memory 실험 기능도 설정 파일 수정을 에이전트에게 맡길 수 있습니다.
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI Auto-Memory를 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 experimental.autoMemory 값을 true로 설정해줘. 적용 후 CLI 재시작이 필요한지도 알려줘.
- 활성화 후 CLI를 재시작해야 합니다.
- 추출된 스킬 후보는
/memory inbox로 검토하고 승격/삭제할 수 있습니다. - 승격된 스킬은
~/.gemini/skills/(사용자) 또는.gemini/skills/(워크스페이스)로 이동합니다. - 비활성화는
autoMemory를false로 설정 후 재시작.
내부 동작 5단계
- 적격성 스캔:
~/.gemini/tmp/<project>/chats/의 최근 세션 인덱싱. 3시간+ 유휴 + 10+ 사용자 메시지인 세션만 적격. - 락 획득: 프로젝트 메모리 디렉토리에 락 파일을 두어 다중 CLI 인스턴스 사이에 한 번만 추출하도록 조정.
- 서브 에이전트 추출:
confucius전용 서브 에이전트(Flash 프리뷰 모델)가 세션을 검토하고SKILL.md초안 작성. 증거가 약하면 아무것도 만들지 않는 것이 기본. - 패치 검증: 기존 스킬 편집 제안 시 unified diff
.patch파일 생성 → dry-run 후 깨끗하게 적용되지 않으면 폐기. - 알림: 새 스킬/패치 생성 시 인라인 메시지로 대기 항목 수 표시.
인박스 액션
/memory inbox 다이얼로그에서:
- Read — 전체 SKILL.md 본문 검토
- Promote — 사용자(
~/.gemini/skills/) 또는 워크스페이스(.gemini/skills/) 디렉토리로 승격 - Discard — 원하지 않는 스킬 폐기
- Apply / Reject — 기존 스킬에 대한
.patch제안 적용/거부
- 로컬 세션 파일만 읽음 — 추출 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-lite | gemini-2.5-flash-lite | 단순 작업에 최적화된 가장 빠른 모델 |
모델 선택 방법
CLI 시작 시 지정
# Pro 모델로 시작
gemini -m pro
# Flash 모델로 시작
gemini -m flash
세션 중 변경
/model
대화형 다이얼로그가 열리며 모델을 선택할 수 있습니다. 변경은 즉시 적용됩니다.
모델 선택 가이드
- Auto (기본): 대부분의 경우 권장. 속도와 성능의 균형을 자동으로 조절합니다.
- Pro: 복잡한 멀티스텝 작업, 깊은 추론, 창의적 코드 생성 시 사용하세요.
- Flash: JSON-YAML(데이터 직렬화 형식) 변환 같은 단순 작업에서 빠른 응답이 필요할 때 적합합니다.
/model 명령어와 --model 플래그는 서브 에이전트가 사용하는 모델에는 영향을 주지 않습니다.
에이전트 스킬
전문 지식과 워크플로우를 패키징하여 AI의 능력을 확장하세요.
에이전트 스킬이란?
에이전트 스킬은 특화된 전문 지식과 절차적 워크플로우를 패키징한 확장 기능입니다. GEMINI.md와 달리 스킬은 온디맨드로 작동하며, 모델이 작업의 관련성과 스킬의 설명을 기반으로 자율적으로 활성화를 결정합니다.
주요 장점
공유 가능한 전문 지식
복잡한 워크플로우를 재사용 가능한 폴더로 패키징합니다.
반복 가능한 워크플로우
일관된 멀티스텝 작업 실행을 보장합니다.
리소스 번들링
스크립트, 템플릿, 데이터를 함께 포함할 수 있습니다.
점진적 로딩
메타데이터만 먼저 로드하여 컨텍스트 토큰을 절약합니다.
스킬 발견 우선순위
같은 이름의 스킬이 여러 위치에 있을 때 높은 우선순위가 낮은 우선순위를 오버라이드합니다:
- 워크스페이스 스킬 (최우선):
.gemini/skills/또는.agents/skills/— 보통 버전 컨트롤에 커밋해 팀과 공유 - 사용자 스킬:
~/.gemini/skills/또는~/.agents/skills/— 모든 워크스페이스에서 사용 가능한 개인 스킬 - 확장 프로그램 스킬: 설치된 확장 프로그램에 번들된 스킬
즉 Workspace > User > Extension.
같은 티어 안에서 .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로 자동 생성
새 스킬을 만드는 가장 빠른 방법은 자연어로 요청하는 것입니다:
> create a new skill called 'code-reviewer'
Gemini CLI가 내장 skill-creator를 사용하여 자동으로:
- 스킬 디렉토리 생성 (예:
code-reviewer/) name/description프론트매터가 있는SKILL.md작성- 표준 리소스 디렉토리(
scripts/,references/,assets/) 생성
SKILL.md 구조
각 스킬 폴더의 루트에 SKILL.md가 필수로 있어야 하며, YAML 프론트매터의 두 필드가 필수입니다:
---
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 서버
MCP 서버
MCP 서버
MCP 서버
MCP 서버
MCP(Model Context Protocol) 서버는 Gemini CLI에 외부 도구와 리소스를 제공하는 애플리케이션입니다. 외부 시스템, API, 데이터베이스, 커스텀 워크플로우에 대한 접근을 가능하게 합니다.
전송 방식
| 방식 | 설명 |
|---|---|
| Stdio | 서브프로세스를 생성하여 stdin/stdout(표준 입출력)으로 통신하는 방식입니다. 같은 컴퓨터 내에서 프로그램끼리 데이터를 주고받습니다. |
| SSE | Server-Sent Events의 약자로, 서버가 클라이언트에게 실시간으로 데이터를 보내는 방식입니다. 원격 서버와 연결할 때 사용합니다. |
| Streamable HTTP | HTTP 프로토콜을 통한 스트리밍 통신 방식입니다. SSE와 유사하지만 더 유연한 양방향 통신을 지원합니다. |
MCP 서버 추가
CLI로 추가
# 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 서버를 설치하는 전체 흐름:
- 토큰 준비: fine-grained PAT 생성. 권한: Metadata/Contents Read, Issues/PR Read/Write
- 환경 변수 설정:
export GITHUB_PERSONAL_ACCESS_TOKEN="github_pat_..." - 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}" } } } } - CLI 재시작 후
/mcp list→✓ github: docker ... - Connected확인 - 자연어 사용: "List the open PRs in the google/gemini-cli repository." → 에이전트가 자동으로
mcp_github_list_pull_requests호출
- 서버가 시작 안 함 → 터미널에서
docker run명령 직접 실행해 오류 메시지 확인 (예: 이미지 미존재) - 도구가 안 보임 →
/mcp reload로 도구 재탐색
settings.json으로 설정
Python 서버 (Stdio)
{
"mcpServers": {
"pythonTools": {
"command": "python",
"args": ["-m", "my_mcp_server"],
"env": { "API_KEY": "$DB_TOKEN" },
"timeout": 15000
}
}
}
HTTP 서버
{
"mcpServers": {
"httpServer": {
"httpUrl": "http://localhost:3000/mcp",
"headers": { "Authorization": "Bearer token" }
}
}
}
Docker 기반 서버
{
"mcpServers": {
"dockerized": {
"command": "docker",
"args": ["run", "-i", "--rm", "my-mcp-server:latest"]
}
}
}
MCP 서버 종류와 실행 명령만 알려주면 에이전트가 settings.json 형식으로 정리할 수 있습니다.
> 현재 프로젝트의 .gemini/settings.json에 MCP 서버를 추가해줘. 서버 이름은 내도구, 실행 명령은 여기에 입력할게: [실행 명령]. 파일이 없으면 만들고, 기존 mcpServers 설정은 유지한 채 새 서버만 추가해줘.
MCP 설정 필드 전체
| 필드 | 설명 |
|---|---|
command | Stdio 전송 필수 — 실행 파일 경로 |
args | Stdio 인자 배열 |
cwd | 작업 디렉토리 (Stdio) |
env | 환경 변수 맵 ($VAR, ${VAR}, %VAR% 지원) |
url | SSE 전송 필수 — SSE 엔드포인트 URL |
httpUrl | HTTP 전송 필수 — HTTP 스트리밍 엔드포인트 |
headers | url/httpUrl의 커스텀 HTTP 헤더 |
timeout | 요청 타임아웃(ms). 기본값 600000 (10분) |
trust | true면 이 서버의 모든 도구 호출 승인 스킵 (기본 false) |
includeTools | 허용 도구 이름 배열 (allowlist) |
excludeTools | 차단 도구 이름 배열 — includeTools보다 우선 |
authProviderType | dynamic_discovery / google_credentials / service_account_impersonation |
targetAudience | IAP-protected 앱의 OAuth Client ID |
targetServiceAccount | 임퍼소네이션 대상 GCP 서비스 계정 이메일 |
oauth | OAuth 2.0 설정 (scopes, clientId, clientSecret, authorizationUrl, tokenUrl, redirectUri, audiences) |
전송 방식별 필수 필드
| 전송 | 필수 필드 | 용도 |
|---|---|---|
| Stdio | command | 로컬 프로세스 (가장 일반적) |
| SSE | url | Server-Sent Events 원격 서버 |
| HTTP Streaming | httpUrl | HTTP 스트리밍 원격 서버 |
trust vs 사용자 승인
- trust:
settings.json에 고정된 사전 설정. 해당 서버의 모든 도구가 항상 승인 없이 실행됨. - user-approved: 세션 내 동적으로 추가되는 허용 목록. 도구별 또는 서버별로 단일/영구 승인 가능.
서버 관리
| 명령어 | 설명 |
|---|---|
gemini mcp list | 설정된 모든 MCP 서버 목록 |
gemini mcp remove <이름> | MCP 서버 제거 |
/mcp list 또는 /mcp ls | 설정된 MCP 서버와 도구 목록 (세션 내) |
/mcp desc | MCP 서버와 도구를 설명과 함께 표시 |
/mcp schema | MCP 서버와 도구를 설명 및 스키마와 함께 표시 |
/mcp auth <서버> | OAuth 지원 MCP 서버 인증 |
/mcp enable <서버> | MCP 서버 활성화 |
/mcp disable <서버> | MCP 서버 비활성화 |
/mcp reload | 모든 MCP 서버 재시작 및 도구 재탐색 |
서버 이름에 밑줄(_)을 사용하지 마세요. 정책 파서가 mcp_ 뒤의 첫 번째 밑줄에서 분할합니다. my_server 대신 my-server를 사용하세요.
보안
- 환경 변수 필터링:
*TOKEN*,*SECRET*,*PASSWORD*,*KEY*등 민감한 변수는 자동으로 제거됩니다. - 명시적 전달: 필요한 변수는
env블록에서 명시적으로 설정해야 합니다. - OAuth 지원: 동적 검색, 자동 토큰 갱신,
~/.gemini/mcp-oauth-tokens.json에 안전한 저장.
샌드박싱
AI 작업을 격리된 환경에서 안전하게 실행하세요.
샌드박싱이란?
샌드박스(Sandbox)는 "모래놀이터"라는 뜻으로, 프로그램을 나머지 시스템과 격리된 안전한 공간에서 실행하는 보안 기술입니다. AI가 실수로 중요한 파일을 삭제하거나 시스템을 손상시키는 것을 방지합니다.
샌드박싱은 잠재적으로 위험한 작업을 호스트 시스템으로부터 격리하는 보안 기능입니다. AI 작업과 실행 환경 사이에 보안 장벽을 제공하여 우발적인 시스템 손상을 방지합니다.
플랫폼별 격리 방식
| 방식 | 플랫폼 | 설명 |
|---|---|---|
| macOS Seatbelt | macOS | sandbox-exec를 사용한 경량 격리. SEATBELT_PROFILE 환경 변수로 6개 프로파일 선택 (기본: permissive-open) |
| Docker/Podman | 크로스플랫폼 | 완전한 프로세스 격리를 제공하는 컨테이너 방식 |
| Windows Native | Windows | icacls를 사용한 Low Integrity Level 파일 보호 |
| gVisor/runsc | Linux | 사용자 공간 커널을 통한 가장 강력한 격리 |
| LXC/LXD | Linux (실험) | 완전한 Linux 시스템 컨테이너 격리 |
활성화 방법
우선순위 순서로 세 가지 방법이 있습니다:
1. 명령줄 플래그
gemini -s
# 또는
gemini --sandbox
2. 환경 변수
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
{
"tools": {
"sandbox": true
}
}
Docker 기본 이미지 & 커스텀화
- 기본 이미지:
ghcr.io/google/gemini-cli:latest - 워크스페이스 마운트: 현재 작업 디렉토리가 호스트와 동일한 절대 경로로 컨테이너에 마운트됩니다 (예: 호스트
/Users/you/project→ 컨테이너/Users/you/project)
커스텀 이미지 — 옵션 A: 레지스트리 이미지
{
"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 자동 빌드
- 프로젝트 루트에
.gemini/sandbox.Dockerfile작성 ghCLI 설치/인증 (기본ghcr.io/google/gemini-cli베이스 이미지 사용 시)BUILD_SANDBOX=1환경 변수와 함께 실행:
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가 응답하기 직전에 이 스크립트를 실행해줘"처럼 특정 순간에 자동으로 동작을 추가할 수 있습니다.
훅이란?
훅은 Gemini CLI의 에이전트 루프에서 특정 시점에 실행되는 스크립트입니다. 소스 코드를 수정하지 않고도 동작을 커스터마이징할 수 있습니다. 훅은 동기적으로 실행되며, 모든 훅이 완료될 때까지 Gemini CLI가 대기합니다.
훅 이벤트
| 이벤트 | 트리거 시점 | 주요 용도 |
|---|---|---|
SessionStart | 세션 초기화 | 컨텍스트 로드, 리소스 초기화 |
SessionEnd | 세션 종료 | 정리, 상태 저장 |
BeforeAgent | 프롬프트 제출 후 | 컨텍스트 추가, 입력 검증 |
AfterAgent | 에이전트 루프 완료 | 출력 검토, 재시도 강제 |
BeforeModel | LLM 요청 전 | 프롬프트 수정, 모델 교체 |
AfterModel | LLM 응답 후 | 응답 필터링/편집 |
BeforeTool | 도구 실행 전 | 인수 검증, 작업 차단 |
AfterTool | 도구 실행 후 | 결과 처리, 테스트 실행 |
BeforeToolSelection | 도구 선택 전 | 사용 가능 도구 필터링 |
PreCompress | 컨텍스트 압축 시 | 상태 저장 알림 |
Notification | 시스템 알림 | 외부 알림 전달/로깅 |
설정 예시
{
"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) |
timestamp | ISO 8601 타임스탬프 |
도구 훅(BeforeTool/AfterTool)은 추가로 tool_name, tool_input 필드를 받습니다.
훅 설정 필드
| 필드 | 기본값 | 설명 |
|---|---|---|
type | - | "command" 고정 (필수) |
command | - | 실행할 셸 명령 (필수) |
name | - | 표시용 이름 (/hooks enable/disable용) |
description | - | 선택적 설명 문자열 |
timeout | 60000ms | 실행 타임아웃 (밀리초) |
matcher | - | 도구 훅에서는 정규식, 라이프사이클 훅에서는 정확 문자열 |
sequential | false | 동일 이벤트의 여러 훅을 순차(true) 또는 병렬 실행 |
훅 공통 출력 필드 (stdout JSON)
| 필드 | 타입 | 설명 |
|---|---|---|
systemMessage | string | 사용자 터미널에 즉시 표시 |
suppressOutput | boolean | 로그/텔레메트리에서 훅 메타데이터 숨김 |
continue | boolean | false면 에이전트 루프 즉시 중단 |
stopReason | string | continue: false 시 사용자에게 표시할 사유 |
decision | string | "allow" 또는 "deny" (별칭 "block") |
reason | string | decision: "deny" 시 필수 — 피드백/오류 메시지 |
이벤트별 입출력 필드
BeforeTool / AfterTool
- 입력:
tool_name,tool_input,mcp_context,original_request_name(tail 호출용) - BeforeTool 출력:
decision: "deny"— 도구 실행 차단 (reason필수, 에이전트가 재시도 가능)hookSpecificOutput.tool_input— 모델 인자에 머지+오버라이드- 종료 코드
2—stderr이 거부 사유, 턴은 계속
- AfterTool 출력:
decision: "deny"— 결과를 에이전트에게 숨김 (reason이 결과 대체)hookSpecificOutput.additionalContext— 결과에 추가 텍스트hookSpecificOutput.tailToolCallRequest: { name, args }— 다른 도구 자동 호출 (프로그래매틱 라우팅). 결과가 원래 응답 대체
BeforeAgent / AfterAgent
- BeforeAgent:
decision: "deny"— 턴 차단 + 메시지 폐기 (히스토리에 미저장)continue: false— 턴 차단 + 메시지 히스토리에 저장hookSpecificOutput.additionalContext— 이 턴에만 프롬프트에 추가
- AfterAgent:
- 입력:
prompt,prompt_response,stop_hook_active decision: "deny"— 응답 거부 + 자동 재시도 (reason이 새 프롬프트)continue: false— 재시도 없이 세션 중지hookSpecificOutput.clearContext— LLM 메모리 비우되 UI 표시 유지
- 입력:
MCP 도구 매처 패턴
MCP 서버 도구는 mcp_<server_name>_<tool_name> 패턴으로 명명됩니다. 훅 matcher에서 정규식으로 활용:
{
"hooks": {
"BeforeTool": [
{
"matcher": "mcp_github_.*",
"hooks": [{ "type": "command", "command": "/path/to/gh-audit.sh" }]
}
]
}
}
환경 변수
훅 실행 시 다음 환경 변수에 접근할 수 있습니다:
GEMINI_PROJECT_DIR: 프로젝트 루트 절대 경로GEMINI_SESSION_ID: 현재 세션 고유 식별자GEMINI_CWD: 현재 작업 디렉토리GEMINI_PLANS_DIR: 플랜 파일 저장 디렉토리 절대 경로CLAUDE_PROJECT_DIR: 호환성 별칭 (GEMINI_PROJECT_DIR과 동일 값)
훅은 사용자 권한으로 임의 코드를 실행합니다. 신뢰할 수 있는 스크립트만 등록하세요.
Gemini CLI는 프로젝트 수준 훅을 핑거프린트합니다. 훅의 이름이나 명령이 변경되면(예: git pull 후) 새로운 신뢰되지 않은 훅으로 간주되어 실행 전 사용자 경고가 표시됩니다. 신뢰할 수 없는 프로젝트를 열 때 특히 중요한 보호 메커니즘입니다.
관리 명령어
/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로 즉시 쿼리 가능.
#!/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"
{
"hooks": {
"BeforeTool": [
{
"matcher": "*",
"hooks": [
{ "name": "log-tool-calls", "type": "command",
"command": "$GEMINI_PROJECT_DIR/.gemini/hooks/log-tool-calls.sh",
"timeout": 2000 }
]
}
]
}
}
분석 쿼리 예시:
# 가장 많이 사용된 도구 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에서 파일 편집 도구만 골라 변경된 경로를 카운트합니다. 자주 수정되는 "핫스팟" 파일을 식별할 수 있습니다.
#!/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
"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 호출마다 응답 메타데이터를 받습니다. 토큰 사용량을 세션별로 누적해 비용을 추정합니다.
#!/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로 실패율을 집계합니다.
#!/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
모범 사례
성능
- 병렬 실행: 순차 fetch 대신
Promise.all로 병렬 - 캐싱: 빈번히 호출되는 후크(
BeforeTool/AfterModel)는.gemini/hook-cache.json으로 결과 저장 - 이벤트 선택:
AfterAgent는 턴당 1회,AfterModel은 청크마다 호출 — 최종 응답만 검사하면AfterAgent사용 - matcher 좁히기:
"*"대신"write_file|replace"처럼 구체적으로
독립 테스트
CLI에 연결 전 샘플 JSON으로 후크 동작 검증:
# 테스트 입력 생성
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: $?"
실행 권한
- macOS/Linux:
chmod +x .gemini/hooks/*.sh - Windows PowerShell:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
비활성 후크 (settings.json)
슬래시 명령 외에도 hooks.disabled 배열로 직접 비활성화:
{
"hooks": {
"disabled": ["my-hook-name", "another-hook"]
}
}
security.environmentVariableRedaction.enabled는 기본 비활성화입니다. 3rd party 후크 또는 민감 환경에서 작업할 때 강력히 활성화 권장:
{
"security": {
"environmentVariableRedaction": {
"enabled": true,
"allowed": ["MY_REQUIRED_TOOL_KEY"]
}
}
}
활성 시 KEY/TOKEN/SECRET/PASSWORD/AUTH/CREDENTIAL/PRIVATE/CERT 패턴이 자동 가려집니다.
파일 관리
Gemini CLI를 사용하여 파일을 읽고, 생성하고, 수정하는 방법을 알아봅니다.
파일 작업 예시
# 파일 읽기 및 분석
> src/index.ts 파일을 분석해줘
# 파일 생성
> utils/helpers.ts에 문자열 유틸리티 함수를 만들어줘
# 파일 수정
> config.json에서 포트를 3000에서 8080으로 변경해줘
# 여러 파일 작업
> src/ 폴더의 모든 .ts 파일에서 console.log를 제거해줘
# 파일 검색
> TODO 주석이 포함된 파일을 모두 찾아줘
승인 모드
Gemini CLI는 파일을 수정하기 전에 사용자의 승인을 요청합니다.
| 모드 | 설명 |
|---|---|
default | 모든 파일 수정과 셸 명령에 승인 필요 |
auto_edit | 파일 수정은 자동, 셸 명령은 승인 필요 |
yolo | 모든 작업 자동 승인 (주의 필요) |
plan | 읽기 전용 모드 (분석만 수행) |
# 승인 모드 지정
gemini --approval-mode auto_edit
# yolo 모드 (모든 작업 자동 승인)
gemini --approval-mode yolo
# --yolo / -y 플래그는 deprecated (하위 호환을 위해 동작하나 권장하지 않음)
# gemini -y ← 대신 --approval-mode=yolo 사용 권장
셸 명령어
Gemini CLI 내에서 직접 셸 명령을 실행하고 결과를 활용하세요.
셸 명령 실행
Gemini CLI는 AI가 필요할 때 자동으로 셸 명령을 실행합니다. 또한 사용자가 직접 실행을 요청할 수도 있습니다.
# AI에게 명령 실행 요청
> git log --oneline -10 실행해서 최근 커밋 보여줘
> npm test 실행하고 실패한 테스트 수정해줘
> docker ps로 실행 중인 컨테이너 확인해줘
# 파이프로 결과 전달
cat build.log | gemini -p "빌드 에러를 분석하고 해결 방법을 알려줘"
비대화형 자동화
# 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 실패 등 |
41 | FatalAuthenticationError | 인증 프로세스 오류 |
42 | FatalInputError | 잘못된 입력 (비대화형 모드) |
44 | FatalSandboxError | 샌드박스 환경 오류 (Docker/Podman/Seatbelt) |
52 | FatalConfigError | settings.json 오류 |
53 | FatalTurnLimitedError | 최대 대화 턴 도달 (비대화형) |
세션 관리
대화 세션을 저장하고 이어서 작업하는 방법을 알아봅니다.
세션 이어하기
# 가장 최근 세션 재개 (인자 없이)
gemini --resume
# 인덱스 번호로 재개
gemini --resume 1
# 세션 UUID로 재개
gemini --resume a1b2c3d4-e5f6-7890-abcd-ef1234567890
# 세션 재개 + 추가 프롬프트
gemini --resume 1 "이 PR을 마무리해줘"
REPL 내부 인터랙티브 브라우저
실행 중인 세션에서 /resume을 입력하면 과거 대화를 미리보기, 검색, 선택할 수 있는 인터랙티브 세션 브라우저가 열립니다.
| 명령어 | 설명 |
|---|---|
/resume | 인터랙티브 세션 브라우저 열기 (/chat의 별칭) |
/resume save <이름> | 현재 세션 내 이름있는 체크포인트 저장 |
세션 목록 및 관리
# 현재 프로젝트의 세션 목록
gemini --list-sessions
# 특정 세션 삭제
gemini --delete-session 0
저장 위치 및 보존 정책
- 저장 경로:
~/.gemini/tmp/<project_hash>/chats/— 프로젝트별로 격리된 디렉토리에 대화, 도구 실행, 토큰 사용량, 추론 요약이 함께 저장됩니다. - 자동 정리: 기본 30일 후 자동 삭제.
general.sessionRetention.maxAge설정으로 조정 가능. - 세션당 턴 제한:
maxSessionTurns로 컨텍스트 비용을 제한할 수 있습니다.
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 템플릿 종류
mcp-server— MCP 서버 기반 확장 (도구 추가용)context— 컨텍스트 파일 위주 확장custom-commands— 슬래시 명령 위주 확장
Gemini CLI는 확장 프로그램 설치 시 로컬 복사본을 만듭니다. 원격 저장소의 변경을 반영하려면 반드시 gemini extensions update <name> (또는 --all)을 실행해야 합니다.
개발용 명령어
# 새 확장 프로그램 템플릿 생성
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를 프로그래밍 방식으로 사용할 수 있습니다. 대화형 인터페이스 없이 프롬프트를 처리합니다.
# 비대화형 실행
gemini -p "모든 테스트 파일에 JSDoc 주석을 추가해줘" -y
# JSON 출력
gemini -p "package.json의 의존성 목록" -o json
# 파이프라인에서 사용
git diff HEAD~1 | gemini -p "이 변경사항을 리뷰해줘" -o text
CI/CD 활용 예시
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 }}
스크립트 통합
#!/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를 읽고 다음 한 가지를 하라"는 메타 지시만 적습니다.
# 임무
당신은 이 저장소를 안전하게 개선하는 자율 에이전트입니다.
## 매 반복 절차
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
- [ ] src/auth/ 모듈에 단위 테스트 추가
- [ ] README의 깨진 링크 수정
- [ ] TypeScript strict 모드 켜고 발생한 에러 정리
- [ ] CI 워크플로우에 lint 단계 추가
- [ ] CHANGELOG.md 최신 커밋 기준으로 갱신
3단계: 루프 스크립트
#!/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단계: 실행
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)로 확장할 수 있습니다.
#!/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 파일을 만들고 종료한다.
관측과 디버깅
루프가 돌면서 무슨 일이 벌어지는지 보고 싶다면 다음을 활용하세요:
- JSON 로그:
--output-format=json으로 매 반복 결과를 구조화 저장.jq로 조회 가능Terminal# 마지막 반복에서 실행된 도구 호출만 추출 jq -r '.tool_calls[] | "\(.name): \(.args)"' .ralph-logs/iter-12.json - git log 모니터링: 다른 터미널에서
watch -n 5 'git log --oneline -10'으로 진행 상황 실시간 추적 - fix_plan.md diff:
watch -n 10 'git diff fix_plan.md'로 계획 변화 추적 - 훅으로 알림:
AfterAgent훅에서osascript -e 'display notification "iteration done"'(macOS) 호출
흔한 실수와 함정
| 실수 | 증상 | 대응 |
|---|---|---|
| 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를 만들고 그 안에서 동작하도록 안내해줘.
참고 자료
- Geoffrey Huntley — "Ralph Wiggum as a software engineer" (원글)
- Gemini CLI 헤드리스 모드 — 랄프 루프의 실행 기반
- Git Worktrees — 격리 실행 환경
- Sandboxing — 자동 승인 모드의 안전장치
- 하네스 엔지니어링 — 더 큰 그림에서의 루프 설계
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/Debian | sudo apt install gh (공식 저장소 등록 후) |
| Fedora/RHEL | sudo dnf install gh |
| Arch Linux | sudo pacman -S github-cli |
최신 설치 가이드: github.com/cli/cli#installation
인증
# 대화형 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)에 저장됩니다.
이슈 관리
# 새 이슈 작성 (대화형)
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 관리
# 현재 브랜치로 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 "..."
저장소 / 워크플로우 / 릴리스
# 저장소
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 생성을 한 번에:
> src/auth/ 모듈을 리팩토링하고, 변경사항을 새 브랜치에 커밋한 다음
> gh pr create로 PR을 만들어줘. PR 본문에는 변경 사항 요약과
> "Closes #142"를 포함해줘.
패턴 2: 이슈를 GEMINI.md 컨텍스트로 주입
# 이슈 본문을 그대로 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 자동 리뷰
gh pr diff 456 | gemini -p "이 PR의 보안·성능 문제점을 찾아 인라인 코멘트로 정리해줘"
패턴 4: 자동화 스크립트
#!/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)
# 검색·설치
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 등) | 셸 환경 값 |
| 3 | System Overrides (GEMINI_CLI_SYSTEM_SETTINGS_PATH) | 관리자 강제 설정 |
| 4 | 프로젝트/.gemini/settings.json (Workspace) | 워크스페이스별 설정 |
| 5 | ~/.gemini/settings.json (User) | 사용자(글로벌) 설정 |
| 6 | system-defaults.json | 시스템 기본 설정 파일 |
| 7 (기준) | 하드코딩 기본값 | 가장 낮은 우선순위 |
병합은 아래 → 위 순서로 덮어쓰기 방식이며, 배열/객체(예: mcpServers)는 각 단계에서 머지됩니다. CLI 인자 > 환경 변수 > 설정 파일의 큰 틀을 기억하세요.
주요 최상위 키
| 키 | 역할 |
|---|---|
general | 승인 모드(defaultApprovalMode), 자동 업데이트, Vim 모드, 플랜, 세션 보존 등 |
ui | 테마(theme), autoThemeSwitching, showLineNumbers, compactToolOutput, accessibility.screenReader |
output | 출력 포맷 (format: text / json / stream-json) |
model | name, maxSessionTurns, compressionThreshold, disableLoopDetection, skipNextSpeakerCheck |
context | fileName, fileFiltering.respectGitIgnore, discoveryMaxDirs, loadMemoryFromIncludeDirectories |
tools | sandboxAllowedPaths, shell.enableInteractiveShell, useRipgrep, truncateToolOutputThreshold, disableLLMCorrection |
mcpServers | MCP 서버 정의 (서버명 → command/args/env 등) |
security | toolSandboxing, disableYoloMode, folderTrust.enabled, enablePermanentToolApproval, environmentVariableRedaction.enabled |
skills | 스킬 활성화 (skills.enabled) |
hooks | 훅 이벤트 핸들러 등록 (이벤트명별 매처/명령 배열) |
telemetry | 텔레메트리 수집 설정 |
experimental | 실험적 기능 (voiceMode, worktrees, modelSteering, memoryV2 등) |
policyPaths / adminPolicyPaths | 정책 엔진 파일 경로 |
환경 변수 치환 구문
settings.json과 gemini-extension.json의 문자열 값에서 환경 변수를 치환할 수 있습니다:
| 구문 | 동작 |
|---|---|
$VAR_NAME | 환경 변수로 치환 (단순 형태) |
${VAR_NAME} | 환경 변수로 치환 (중괄호 형태) |
${VAR_NAME:-DEFAULT} | 환경 변수 치환, 없으면 DEFAULT 사용 |
민감 환경 변수 자동 리댁션
도구 실행 시 변수 이름에 다음 키워드가 포함되면 자동으로 가려집니다(best effort):
TOKEN · SECRET · PASSWORD · KEY · AUTH · CREDENTIAL · PRIVATE · CERT
{
"security": {
"environmentVariableRedaction": {
"enabled": true,
"allowed": ["PUBLIC_API_KEY"],
"blocked": ["MY_CUSTOM_SECRET_VAR"]
}
}
}
텔레메트리 옵트아웃 (privacy)
기본적으로 익명화된 도구 이름, API 요청 메타데이터, 세션 설정이 수집됩니다. 프롬프트, 응답, 파일 내용은 수집되지 않습니다. 완전히 비활성화하려면:
{
"privacy": {
"usageStatisticsEnabled": false
}
}
설정 파일을 처음 다룬다면 원하는 정책을 자연어로 말하고 기존 설정 보존을 함께 요청하세요.
> 현재 프로젝트의 .gemini/settings.json을 확인해서 내가 원하는 Gemini CLI 설정을 추가해줘. 파일이 없으면 만들고, 기존 설정은 유지해줘. 원하는 설정은 다음과 같아: [여기에 원하는 기능과 값을 적기]
자주 쓰는 general 설정
| 키 | 설명 |
|---|---|
general.defaultApprovalMode | 기본 승인 모드 (default / auto_edit / yolo / plan) |
general.vimMode | Vim 키바인딩 활성화 |
general.enableAutoUpdate | 자동 업데이트 활성화 |
general.plan.enabled | 플랜 모드 기능 활성화 |
general.checkpointing.enabled | 체크포인팅 활성화 |
general.sessionRetention.maxAge | 세션 자동 삭제 보존 기간 (기본 30일) |
general.enableNotifications | 데스크톱 알림 활성화 (실험적) |
설정 예시
{
"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. 신뢰 폴더 — 디렉토리 단위 허용
처음 진입한 폴더에서 "이 폴더를 신뢰합니까?" 다이얼로그가 뜹니다. 신뢰한 폴더는 자동 도구 실행이 허용됩니다.
- REPL 내:
/permissions trust - CLI 일회성:
gemini --skip-trust - 여러 폴더 일괄 관리:
~/.gemini/trustedFolders.json
자세한 설정과 비신뢰 폴더 제한 사항 → 신뢰 폴더 전용 페이지
3. 정책 엔진 — 도구·인자 패턴 단위 규칙
도구 단위가 아니라 "도구 + 인자 패턴" 단위로 허용/거부할 수 있는 정밀 시스템. TOML 포맷으로 작성하며 우선순위로 충돌 해결.
[[rule]]
toolName = "run_shell_command"
commandPrefix = "rm -rf"
decision = "deny"
priority = 100
전체 문법, 매처 옵션(mcpName/mode/commandPrefix 등), 파일 위치 → 정책 엔진 전용 페이지
4. 샌드박스 — 실행 환경 자체를 격리
위 1~3이 "무엇을 허용/거부"라면 샌드박스는 "설사 잘못 실행되어도 호스트는 안전"한 마지막 방어선입니다.
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에서 다음과 같이 설정합니다:
{
"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.json의 ui.customThemes 블록에서 색상을 직접 정의할 수 있습니다:
{
"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"
}
}
}
}
}
- text:
primary(기본 텍스트),secondary(보조),link(URL),accent(강조),response(모델 응답) - background:
primary(주 배경),diff.added/diff.removed(diff 라인) - border:
default(기본),focused(포커스)
settings.json에 ui.theme(이름 또는 파일 경로)가 정의되어 있으면 /theme 대화형 명령으로 테마를 변경할 수 없습니다. 대화형 선택을 사용하려면 먼저 해당 설정을 제거하세요.
커스텀 명령어
자주 사용하는 프롬프트를 슬래시 명령어로 등록하세요.
커스텀 명령어란?
자주 사용하는 프롬프트 패턴을 슬래시 명령어로 만들어 빠르게 재사용할 수 있습니다.
파일 위치 및 우선순위
커스텀 명령어는 TOML 파일(.toml)로 정의하며 두 위치에서 자동 로드됩니다:
- 프로젝트:
<프로젝트 루트>/.gemini/commands/ - 사용자:
~/.gemini/commands/
같은 이름의 명령이 양쪽에 있으면 프로젝트 명령이 우선합니다. 하위 디렉토리는 콜론(:)으로 네임스페이스가 됩니다:
~/.gemini/commands/test.toml→/test.gemini/commands/git/commit.toml→/git:commit
TOML 필드
| 필드 | 필수 | 설명 |
|---|---|---|
prompt | ✓ | Gemini에 전송되는 프롬프트 텍스트 |
description | 도움말/자동완성에 표시될 한 줄 설명 |
인자 및 특수 구문
| 구문 | 용도 |
|---|---|
{{args}} | 사용자 인자 주입 (셸 블록 내에서는 자동 이스케이프). 없으면 두 줄바꿈 뒤 뒤에 덧붙여짐. |
!{...} | 셸 명령 실행 후 표준 출력을 프롬프트에 삽입 (실행 전 사용자 확인) |
@{...} | 파일/디렉토리 내용 임베딩 (이미지/PDF/오디오/비디오 멀티모달 지원). .gitignore/.geminiignore 존중 |
예시
description = "현재 diff 리뷰"
prompt = """
다음 변경사항을 리뷰하고 잠재적 문제점을 지적해줘.
!{git diff HEAD~1}
추가 지시사항: {{args}}
"""
무시 파일 (.geminiignore)
AI가 접근하지 않아야 할 파일과 디렉토리를 지정하세요.
.geminiignore란?
.gitignore와 유사한 형식으로, Gemini CLI가 무시할 파일과 디렉토리 패턴을 지정합니다. 민감한 파일, 대용량 바이너리, 불필요한 종속성 폴더 등을 제외할 수 있습니다.
.geminiignore에 지정된 파일은 Gemini CLI에게만 보이지 않을 뿐, Git이나 다른 도구에서는 정상적으로 추적됩니다. 민감한 파일은 반드시 .gitignore에도 추가하세요.
.geminiignore 변경 사항은 Gemini CLI 세션을 재시작해야 적용됩니다.
예시
# 종속성
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 Standard | 1,500건/일 |
| Code Assist Enterprise | 2,000건/일 |
| Workspace AI Ultra | 2,000건/일 |
종량제
- Vertex AI (일반 모드): 모델과 토큰 사용량에 따라 과금. 동적 공유 쿼터 또는 사전 구매 처리량 옵션.
- Gemini API 키 (유료): 가격 등급별 가변 쿼터. 토큰/호출 단위 과금.
사용량 확인
/stats model 명령으로 현재 세션의 토큰 사용량과 적용된 한도를 실시간으로 확인할 수 있습니다. 세션 종료 시에도 사용량 요약이 자동으로 표시됩니다.
/stats model
키보드 단축키
Gemini CLI를 더 빠르게 사용하기 위한 단축키 모음입니다.
세션 제어
| 단축키 | 설명 | 비고 |
|---|---|---|
| Ctrl+C | 현재 작업 중단 / 응답 취소 | 스트리밍 응답 중 사용 가능 |
| Ctrl+D | 세션 종료 (EOF) | 빈 입력에서 동작 |
| Ctrl+L | 터미널 화면 지우고 UI 재렌더링 | 대화 컨텍스트는 유지됨 (컨텍스트 초기화는 /clear) |
| Ctrl+Z | 프로세스 백그라운드 이동 | 터미널에서 fg로 복귀 |
| Ctrl+\\ | 강제 종료 (SIGQUIT) | 응답 없을 때 비상 탈출용 |
| Ctrl+[ | 취소 / 다이얼로그 닫기 (Esc 대체) |
앱 제어
| 단축키 | 설명 |
|---|---|
| F12 | 디버그 콘솔 토글 (상세 오류 정보) |
| Ctrl+T | TODO 리스트 전체 표시 토글 |
| Alt+M | 마크다운 렌더링 토글 |
| Ctrl+S | 마우스 모드 토글 (스크롤/클릭) |
| Ctrl+Y | YOLO(자동 승인) 모드 토글 |
| Ctrl+B | 백그라운드 셸 표시 토글 |
| F4 | IDE 컨텍스트 세부 정보 표시 |
| 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 refresh | GEMINI.md 파일 다시 로드 |
/memory add <텍스트> | 글로벌 ~/.gemini/GEMINI.md에 메모 추가 (프로젝트 파일에는 추가되지 않음) |
/chat save <이름> | 현재 대화 저장 |
/chat resume <이름> | 저장된 대화 불러오기 |
/chat list | 저장된 대화 목록 표시 |
/chat delete <이름> | 저장된 대화 삭제 |
/chat share | 현재 대화를 공유 가능한 형식으로 내보내기 |
/chat debug | 대화 디버그 정보 표시 |
/compress | 긴 대화를 요약하여 컨텍스트 압축 |
/theme | UI 테마 선택 다이얼로그 열기 (이름 인자 없음 — 이름 지정은 settings.json ui.theme) |
Tab을 누르면 사용 가능한 슬래시 명령어가 자동 완성됩니다. Ctrl+R로 이전 입력 히스토리를 검색할 수 있습니다(터미널 readline 지원 시). 슬래시 명령어는 항상 Tab으로 완성하는 것이 가장 정확합니다.
문제 해결
자주 발생하는 문제와 해결 방법을 안내합니다.
설치 관련
Node.js 버전 오류
Node.js 20.0.0 이상이 필요합니다.
# 현재 버전 확인
node --version
# nvm으로 업그레이드
nvm install 20
nvm use 20
권한 오류 (npm)
# 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
인증 관련
로그인이 안 될 때
- 인터넷 연결을 확인하세요.
- 방화벽이나 프록시 설정을 확인하세요.
- Gemini Code Assist 지원 지역인지 확인하세요.
API 키 오류
- 환경 변수가 올바르게 설정되었는지 확인:
echo $GEMINI_API_KEY - API 키가 유효한지 Google AI Studio에서 확인하세요.
MCP 서버 관련
서버가 연결되지 않을 때
- 명령어와 인수가 올바른지 확인하세요.
- 서버를 독립적으로 테스트하세요.
- 실행 권한을 확인하세요.
도구가 발견되지 않을 때
- MCP 프로토콜이 올바르게 구현되었는지 확인하세요.
- 서버 로그를 검토하세요.
기업 네트워크 인증서 문제
UNABLE_TO_GET_ISSUER_CERT_LOCALLY 또는 unable to get local issuer certificate 오류가 발생할 때:
# 시스템 인증서 저장소 사용 (먼저 시도)
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_ 프리픽스 환경 변수가 있으면 인터랙티브 모드 진입이 차단됩니다.
- 감지 트리거:
CI,CONTINUOUS_INTEGRATION,CI_*프리픽스 - 일시 해제:
env -u CI_TOKEN gemini - 비대화형 강제:
CI=true gemini -p "..."
MCP EADDRINUSE 오류
MCP 서버 시작 시 EADDRINUSE (Address already in use) 발생 시:
# Linux/macOS — 점유 프로세스 찾기
lsof -i :3000
# Windows
netstat -ano | findstr :3000
해결: 점유 프로세스 종료 또는 MCP 서버 설정에서 다른 포트 지정.
사전 검사 (commit 전)
npm run preflight
포맷팅, 린트, 타입 오류 등 흔한 문제를 사전에 잡아냅니다.
디버그 모드
# CLI 디버깅
gemini --debug # 상세 로깅 (-d)
# 인터랙티브 모드 중 F12 → 디버그 콘솔
# 환경 변수 (코어 디버그 상세도)
DEBUG_MODE=true gemini
# Node.js 디버거로 단계별 실행
node --inspect packages/cli/dist/index.js
프로젝트 .env의 DEBUG/DEBUG_MODE는 Gemini CLI 동작 간섭 방지를 위해 자동 제외됩니다. 디버그 모드 환경 변수가 동작하지 않을 때:
- 옵션 1:
.gemini/.env사용 (자동 제외 안 됨) - 옵션 2:
advanced.excludedEnvVars설정 변경 (기본 제외 목록 오버라이드)
종료 코드 (스크립팅용)
| 코드 | 오류 유형 |
|---|---|
41 | FatalAuthenticationError — 인증 오류 |
42 | FatalInputError — 잘못된 입력 (비대화형) |
44 | FatalSandboxError — Docker/Podman/Seatbelt 오류 |
52 | FatalConfigError — settings.json 오류 |
53 | FatalTurnLimitedError — 최대 턴 도달 |
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 요청 한도를 초과한 경우입니다. 해결 방법:
- 사용량 확인: Google AI Studio 또는 Google Cloud 프로젝트 대시보드에서 API 사용량 검토
- 프롬프트 최적화: 짧은 시간에 다수 요청 시 배치 처리 또는 요청 간 지연 추가
- 쿼터 증가 요청: 지속적으로 한도 초과 시 Google에 쿼터 증가 신청
Q. Gemini CLI 버전을 확인하려면?
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 키를 안전하게 저장하려면?
- `.gemini/.env` 파일: 프로젝트 또는 홈에 두면 자동 로드.
.gitignore에 반드시 포함. - OS 키링 (가장 안전):
- macOS: Keychain
- Windows: Credential Manager
- Linux: Secret Service API
피할 것: 스크립트 하드코딩, 소스 컨트롤 커밋.
Q. Windows에서 chmod +x 명령이 안 됩니다.
Windows에서는 chmod 같은 Unix 전용 명령이 기본 동작하지 않습니다. 해결 방법:
- Windows 동등 명령:
chmod대신icacls로 파일 권한 변경 - 호환 레이어: Git Bash 또는 WSL(Windows Subsystem for Linux) 사용
공식 문서에서 더 자세한 정보를 확인하세요: geminicli.com/docs
Gemini 3 모델 NEW
Google의 최신 AI 모델 라인업인 Gemini 3을 Gemini CLI에서 사용하는 방법을 알아봅니다.
Gemini 3란?
Gemini 3은 Google의 차세대 AI 모델 시리즈입니다. 현재 다음 모델이 제공됩니다:
- gemini-3-pro-preview: 복잡한 작업을 위한 최고 성능 모델
- gemini-3-flash-preview: 단순 작업을 위한 빠른 모델
Gemini 3.1 Pro Preview (gemini-3.1-pro-preview)가 순차적으로 롤아웃 중입니다. /model → Manual에서 확인하세요. 접근 권한이 있다면 직접 지정할 수도 있습니다:
gemini -m gemini-3.1-pro-preview
활성화 방법
CLI 업그레이드
버전 0.21.1 이상이 필요합니다.
npm install -g @google/gemini-cli@latest
모델 선택
/model 명령어를 실행하고 "Auto (Gemini 3)"를 선택합니다.
Gemini Code Assist 사용자
조직 관리자의 추가 설정이 필요합니다:
- Google Cloud 설정에서 릴리스 채널을 "Preview"로 변경
- 사용자가
/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가 세 가지 옵션을 제시합니다:
- Gemini 2.5 Pro로 전환 — 대체 모델로 계속 작업
- 요금제 업그레이드 — 더 높은 한도로 이동
- 작업 중단 — 세션 일시 중지
높은 수요 기간에는 즉시 실패 대신 지수 백오프 재시도 로직이 적용됩니다.
모델 라우팅
모델 실패 시 자동 폴백(Fallback — 주 모델이 실패하면 대체 모델로 자동 전환)과 로컬 라우팅을 통한 안정적인 운영 방법을 알아봅니다.
(내부 호출은 자동)
모델 선택 우선순위
| 우선순위 | 방법 | 예시 | 설명 |
|---|---|---|---|
| 1 (최고) | CLI 플래그 | gemini -m pro | 실행 시 직접 지정, 가장 높은 우선순위 |
| 2 | 환경 변수 | GEMINI_MODEL=flash | 셸 환경에 설정, 플래그 없을 때 적용 |
| 3 | settings.json | "model": { "name": "flash" } | 프로젝트·글로벌 설정 파일 (공식 키: model.name) |
| 4 | 로컬 Gemma | HTTP 엔드포인트 | 로컬에서 서빙 중인 경우만 적용 (실험적) |
| 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 비용 절감, 인터넷 없이도 라우팅 결정 가능 |
| 상태 | 실험적 기능 — 프로덕션 환경 주의 |
설정 방법
{
"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 Service | GEMINI.md를 계층적으로 탐색/로드 (CWD → 프로젝트 루트 → 홈, 하위 디렉토리 포함) |
💡 CLI 푸터에 현재 로드된 컨텍스트 파일 수가 표시되어 활성 지시 컨텍스트를 한눈에 확인할 수 있습니다.
모델 스티어링 실험적
작업 실행 중 실시간으로 AI에게 힌트를 전달하여 방향을 조정하세요.
모델 스티어링이란?
모델 스티어링(Steering — "조종하다")은 작업 실행 중 에이전트를 재시작하지 않고 실시간으로 피드백과 방향 수정을 제공하는 실험적 기능입니다. 자동차 핸들을 돌리듯 AI의 작업 방향을 중간에 수정할 수 있습니다. 특히 복잡한 플랜 모드 워크플로우에서 유용합니다.
활성화
{
"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 도우미"입니다. 마치 팀장이 팀원들에게 업무를 배분하듯, 메인 에이전트가 서브 에이전트들에게 작업을 분배합니다.
서브 에이전트란?
_investigator
_agent
에이전트
서브 에이전트는 메인 Gemini CLI 세션 내의 전문 AI 어시스턴트입니다. 각각 독자적인 시스템 프롬프트, 페르소나, 특화된 도구 세트를 가지며 별도의 컨텍스트 윈도우에서 작동합니다.
내장 서브 에이전트
| 에이전트 | ID | 설명 |
|---|---|---|
| 코드베이스 조사자 | codebase_investigator | 코드 구조와 의존성 분석, 리버스 엔지니어링 |
| CLI 도움말 | cli_help | Gemini CLI 명령어, 설정, 문서 전문가 |
| 제너럴리스트 | generalist | 다중 파일 수정, 리소스 집약적 작업 처리 |
| 브라우저 에이전트 | browser_agent | 웹 브라우저 자동화 (Chrome 144+ 필요, 실험적) |
사용 방법
자동 위임
메인 에이전트가 작업을 분석하여 적합한 서브 에이전트에 자동으로 위임합니다.
명시적 호출
# @ 구문으로 특정 에이전트 호출
@codebase_investigator 서비스 간의 의존성 관계를 분석해줘
@cli_help 커스텀 명령어 만드는 방법 알려줘
커스텀 서브 에이전트 생성
YAML 프론트매터가 포함된 마크다운 파일로 정의합니다.
파일 위치
- 프로젝트:
.gemini/agents/*.md - 사용자:
~/.gemini/agents/*.md
설정 필드
| 필드 | 설명 | 기본값 |
|---|---|---|
name | 고유 식별자 (슬러그) | 필수 |
description | 에이전트 목적과 활성화 조건 | 필수 |
kind | 에이전트 유형 (local 또는 remote). 원격은 A2A 프로토콜 사용 | local |
tools | 접근 가능 도구 (*, mcp_* 와일드카드 지원) | 필수 |
model | 기본 모델 오버라이드 | auto |
max_turns | 최대 대화 반복 횟수 | 30 |
temperature | 모델 창의성 매개변수 | - |
timeout_mins | 실행 시간 제한 (분) | 10 |
커스텀 서브 에이전트 예시
---
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) 프로토콜로 외부 서비스에 위임할 수 있는 원격 서브 에이전트를 정의할 수 있습니다.
---
name: db-analyst
kind: remote
description: 원격 DB 분석 에이전트
agent_card_url: https://corp-a2a.example.com/.well-known/agent-card.json
# 또는 agent_card_json: { ... }
---
원격 인증 4종
- API Key — HTTP 헤더로 고정 키 전달
- HTTP — Bearer, Basic, 커스텀 IANA 스킴
- Google Credentials — access/identity 토큰 자동 선택 (GCP)
- OAuth 2.0 — PKCE가 적용된 Authorization Code 플로우
비밀 값은 $ENV_VAR, !command(셸 실행), 리터럴로 동적 해석 가능. HTTP/HTTPS 프록시 지원. 기본 활성이며 "enableAgents": false로 비활성화.
보안 & 격리
서브 에이전트는 다른 서브 에이전트를 호출할 수 없습니다. 도구 접근 권한은 에이전트별로 명시적으로 정의되어 제어된 권한과 상태 격리가 보장됩니다.
관리
# 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 에이전트에 작업을 위임할 수 있습니다.
설정
프로젝트 또는 사용자 수준의 마크다운 파일로 정의합니다:
- 프로젝트:
.gemini/agents/*.md(팀 공유) - 사용자:
~/.gemini/agents/*.md(개인용)
각 정의에는 고유 이름 슬러그와 agent_card_url 또는 인라인 agent_card_json이 필요합니다.
인증 방법
| 방법 | 설명 |
|---|---|
| API Key | 정적 헤더 + 동적 값 ($ENV_VAR) |
| HTTP | Bearer 토큰, Basic 인증, 커스텀 IANA 스킴 |
| Google Credentials | Google Cloud ADC 사용 |
| OAuth 2.0 | PKCE 인증 코드 플로우 |
관리 명령어
/agents list # 사용 가능 에이전트 목록
/agents reload # 파일 변경 후 레지스트리 새로고침
/agents enable <이름> # 특정 에이전트 활성화
/agents disable <이름> # 특정 에이전트 비활성화
플랜 모드
읽기 전용 환경에서 아키텍처를 설계하고 실행 계획을 수립하세요.
플랜 모드란?
파일 분석, 의존성 확인
ask_user로 옵션 협의
마크다운 파일 자동 생성
구현 시작
피드백 후 재계획
플랜 모드는 구현 전 아키텍처 계획을 위한 읽기 전용 환경입니다. 프로젝트를 탐색하고, 문제를 이해하고, 트레이드오프를 평가한 후 코드를 수정하기 전에 실행 전략을 정렬할 수 있습니다.
진입 방법
| 방법 | 설명 |
|---|---|
gemini --approval-mode=plan | 시작 시 플랜 모드로 실행 |
Shift+Tab | 승인 모드 사이클 — Default → Auto-Edit → Plan 전환 (처리 중/다이얼로그 표시 중에는 Plan 제외) |
/plan [목표] | 플랜 모드 시작 + 즉시 목표 프롬프트 제출 |
/plan copy | 현재 승인된 플랜을 클립보드로 복사 |
/settings | Default Approval Mode를 Plan으로 설정 — 항상 Plan으로 시작 |
| 자연어 | "start a plan for..." → enter_plan_mode 도구 자동 호출 |
워크플로우
목표 제공
달성해야 할 것을 설명합니다.
전략 토론
질문과 옵션을 통해 ask_user 도구로 협업합니다.
계획 검토
생성된 마크다운 파일을 검토합니다. Ctrl+X로 외부 편집기에서 편집할 수 있습니다.
승인 또는 반복
계획을 승인하면 구현이 시작됩니다. 피드백을 주거나 Esc로 취소할 수 있습니다.
도구 제한
플랜 모드에서는 안전을 위해 도구가 엄격히 제한됩니다:
- 허용 (읽기):
read_file,list_directory,glob,grep_search,google_web_search,web_fetch,ask_user,get_internal_docs - 허용 (리서치 서브에이전트):
codebase_investigator,cli_help - 허용 (메모리/스킬):
save_memory,activate_skill - 허용 (MCP): 읽기 전용 MCP 도구 및
list_mcp_resources,read_mcp_resource - 제한적 쓰기: 플랜 디렉토리의
.md파일만write_file/replace가능 - 금지: 프로젝트 코드에 대한 모든 쓰기 작업
플랜 디렉토리
플랜 파일은 기본적으로 세션별 임시 디렉토리에 저장됩니다:
~/.gemini/tmp/<project>/<session-id>/plans/
프로젝트 내부에 고정된 플랜 디렉토리를 사용하려면 settings.json에서 커스텀 경로를 지정할 수 있습니다:
{
"general": {
"plan": {
"directory": ".gemini/plans"
}
}
}
플랜 파일을 프로젝트 안에 보관하고 싶다면 아래 요청을 사용하세요.
> 현재 프로젝트의 .gemini/settings.json에서 플랜 모드 파일 저장 경로를 .gemini/plans로 설정해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 general.plan.directory 값을 추가하거나 갱신해줘.
모델 라우팅 연동
auto 모델 사용 시, 계획 단계에서는 Pro 모델로 강력한 추론을 수행하고, 구현 단계에서는 Flash 모델로 전환하여 속도를 높입니다.
협업 플랜 편집 (Collaborative Editing)
자연어로 복잡한 변경을 설명하는 것보다 플랜 파일을 직접 편집하는 것이 더 빠르고 정확합니다.
- 플랜 열기: Gemini CLI가 플랜을 검토하라고 표시할 때 Ctrl+X 누름
- 편집 또는 주석: 외부 편집기(VS Code/Vim 등)에서 단계 재정렬·삭제·재작성 또는 인라인 주석 (예: "여기서 기존 Logger 클래스를 써야 하지 않나?")
- 저장 후 닫기
- 리뷰/개선: Gemini CLI가 변경 자동 감지 후 주석 검토 → 구현 전략 조정 → 최종 승인 요청
종료 방법
- 완성된 계획을 승인 (자동 종료 후 구현 시작) — "Yes, automatically accept edits" 또는 "Yes, manually accept edits"
Shift+Tab으로 모드 전환- 자연어 요청: "exit plan mode" 또는 "stop planning"
- Esc로 플랜 취소
정책 엔진과 트러스트 격리
- Plan Mode 도구 제한은 정책 엔진 Tier 1의 내장
plan.toml에서 정의됨 - 커스텀 규칙은
~/.gemini/policies/(Tier 2)에 추가 - 트러스트 격리: Default/AutoEdit에서 승인된 도구는 Plan에 적용 안 됨. 반대로 Plan에서 승인된 것은 모든 모드에 적용 (의도적 글로벌 트러스트)
- 특정 모드에만 규칙 적용 시:
modes = ["default", "autoEdit"]명시
사용자 정의 플랜 디렉토리는 프로젝트 루트 내로 제한됩니다. 워크스페이스 외부의 민감한 파일을 덮어쓰지 못하도록 탈출을 방지하기 위함입니다.
체크포인팅
AI가 파일을 수정하기 전 자동으로 프로젝트 상태를 스냅샷으로 저장합니다.
체크포인팅이란?
체크포인팅은 AI 도구가 파일을 수정하기 전에 프로젝트 상태의 스냅샷을 자동 저장하는 안전 기능입니다. 파일 수정 도구를 승인할 때 세 가지 구성 요소가 생성됩니다:
- Git 스냅샷:
~/.gemini/history/<project_hash>의 쉐도우 저장소에 커밋 (사용자의 Git 저장소에 영향 없음) - 대화 이력: 해당 시점까지의 전체 채팅 내용 보존
- 도구 호출 데이터: 체크포인트를 트리거한 도구 실행 정보 저장
활성화
{
"general": {
"checkpointing": {
"enabled": true
}
}
}
settings.json을 직접 열지 않아도 아래 요청으로 체크포인팅을 켤 수 있습니다.
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 체크포인팅을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 general.checkpointing.enabled 값을 true로 설정해줘.
과거 --checkpointing CLI 플래그는 v0.11.0에서 제거되었습니다. 이제 settings.json의 general.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 목록에서 표시되는 이름을 그대로 입력하면 됩니다.
복원 동작
- 모든 파일을 스냅샷 시점 상태로 되돌림
- CLI 대화 히스토리 복원
- 원본 도구 호출이 다시 제안됨 — 다시 실행하거나 수정하거나 무시할 수 있음
- 모든 데이터는 로컬 머신에만 저장됩니다.
- Git shadow 저장소:
~/.gemini/history/<project_hash>— 사용자의 Git 저장소에 영향 없음 - 대화 이력 + 도구 호출:
~/.gemini/tmp/<project_hash>/checkpoints의 JSON 파일
되감기 (Rewind)
이전 대화 상태로 돌아가고, AI가 수정한 파일을 선택적으로 복원하세요.
사용 방법
- 명령어:
/rewind입력 후 Enter - 단축키:
Esc두 번 누르기
복원 옵션
되돌릴 대화 지점을 선택한 후 다음 옵션이 표시됩니다:
| 옵션 | 동작 |
|---|---|
| 대화 + 코드 되감기 | 채팅 이력과 파일 수정 모두 복원 |
| 대화만 되감기 | 채팅 이력만 제거; 파일 변경은 유지 |
| 코드만 복원 | 대화는 유지하고 파일 수정만 되돌림 |
| 취소 | Esc 키로 취소 |
- AI 네이티브 도구를 통한 편집만 되감기 가능 (수동 편집이나 셸 명령은 대상 아님)
- 선택한 지점 이후의 모든 AI 파일 편집이 일괄 되돌려집니다. 일부만 선택적으로 되돌릴 수는 없습니다.
- AI는 제거된 대화의 컨텍스트를 잃음
- 이 작업은 세션 이력과 파일을 영구적으로 변경합니다
되감기는 채팅 컨텍스트 압축(compression) 지점을 넘어서도 동작합니다. 내부적으로 저장된 세션 데이터로 이력을 재구성하므로 압축 전 상태로도 돌아갈 수 있습니다.
되감기는 settings.json로 켜는 기능이 아니라 세션 중 실행하는 복원 기능입니다.
> 방금 전 작업 상태로 되돌리고 싶어. /rewind를 사용해서 되돌릴 수 있는 지점을 확인하고, 대화만 되감기와 코드까지 되감기의 차이를 설명한 뒤 내가 선택할 수 있게 안내해줘.
토큰 캐싱
API 비용을 자동으로 최적화하는 토큰 캐싱 기능을 알아봅니다.
토큰은 AI가 텍스트를 처리하는 기본 단위입니다. 대략 한국어 한 글자 또는 영어 단어 일부에 해당합니다. AI에게 보내는 텍스트가 많을수록 토큰 소비가 늘고 비용이 증가합니다. 캐싱(Caching)은 이전에 보냈던 내용을 임시 저장해 두었다가 재사용하여 토큰 소비를 줄이는 기술입니다.
작동 방식
Gemini CLI는 API 키 인증 사용 시 자동으로 토큰 캐싱을 수행합니다. 이전에 제출한 시스템 지침과 컨텍스트를 후속 요청에서 재사용하여 처리할 토큰 수를 줄입니다.
지원 대상
| 인증 방법 | 지원 여부 |
|---|---|
| Gemini API 키 | ✅ 지원 |
| Vertex AI | ✅ 지원 (프로젝트/위치 설정 필요) |
| OAuth (Google 개인/기업) | ❌ 미지원 |
사용량 모니터링
/stats # 전체 세션 통계
/stats model # 모델별 토큰 사용량
일반 토큰 사용량과 캐시 절약량을 확인할 수 있습니다.
/stats 출력에서 cached tokens 필드는 실제 캐시 적중이 발생한 경우에만 표시됩니다. 캐시 히트가 없으면 해당 필드가 나타나지 않을 수 있습니다.
토큰 캐싱은 API 키 또는 Vertex AI 인증에서 자동으로 작동합니다. 설정 변경보다 인증 방식과 통계 확인이 중요합니다.
> 내 Gemini CLI 환경에서 토큰 캐싱을 사용할 수 있는 인증 방식인지 확인하는 방법을 알려줘. API 키 또는 Vertex AI 사용 여부를 확인하고, /stats와 /stats model로 캐시 절약량을 확인하는 절차도 정리해줘.
알림 실험적
백그라운드 작업 완료나 사용자 입력 필요 시 데스크톱 알림을 받으세요.
활성화
{
"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 계층 구조
- 글로벌:
~/.gemini/GEMINI.md(모든 프로젝트) - 프로젝트 루트:
./GEMINI.md(현재 저장소) - 하위 디렉토리:
./src/GEMINI.md(폴더별 규칙)
Memory 저장
자연어로 기억할 내용을 말하면 에이전트가 save_memory 도구로 자동 저장합니다.
> 나는 'const'를 'let'보다 항상 선호해. 기억해줘.
> 이 프로젝트는 탭 대신 2칸 스페이스를 사용해. 기억해.
관리 명령어
| 명령어 | 설명 |
|---|---|
/memory show | 현재 로드된 전체 컨텍스트 표시 |
/memory refresh | GEMINI.md 파일 강제 새로고침 |
/memory add <텍스트> | 글로벌 GEMINI.md에 텍스트 추가 |
- GEMINI.md는 간결하고 실행 가능하게 유지하세요.
- 부정 제약 조건 (하지 않을 것)을 사용하면 명확합니다.
- 주기적으로 오래된 규칙을 검토하고 제거하세요.
작업 계획 (Todo)
구조화된 할 일 목록으로 복잡한 프로젝트를 체계적으로 관리하세요.
왜 필요한가?
표준 LLM은 10턴 이상의 코드 생성 후 원래 목표를 "잊을" 수 있습니다. 작업 계획은 세 가지 장점을 제공합니다:
가시성
작업 시작 전 에이전트의 전략을 검토합니다.
집중
에이전트가 현재 어떤 단계를 실행 중인지 추적합니다.
복원력
에이전트가 막히면 계획이 방향을 다시 잡아줍니다.
사용 방법
# 계획 수립 요청
> 이 프로젝트를 JavaScript에서 TypeScript로 마이그레이션하려고 해. 먼저 계획을 세워줘.
# 진행 상황 확인
Ctrl+T # 전체 할 일 목록 표시 (대기, 진행 중, 완료)
# 계획 수정 요청
> @types/node 설치 단계가 빠져있어. 추가해줘.
> 3번 단계를 취소하고 4번부터 진행해줘.
에이전트는 write_todos 도구를 사용하여 구조화된 단계 목록을 생성합니다. 계획은 유연하여 작업 취소, 순서 변경, 새 작업 추가를 요청할 수 있습니다.
작업 계획은 설정 파일을 수정하지 않고 자연어 요청으로 시작합니다.
> 이 작업을 바로 구현하지 말고 먼저 Todo 목록으로 계획을 세워줘. 각 단계의 목적, 수정할 파일 후보, 검증 방법을 포함하고, 내가 승인하면 순서대로 진행해줘.
웹 도구
실시간 웹 검색과 URL 내용 가져오기로 최신 정보에 접근하세요.
주요 도구
Google 웹 검색 (google_web_search)
인터넷에서 관련 페이지를 검색합니다. 모델의 학습 데이터 이후에 출시된 문서를 찾거나, 정보를 검증하여 할루시네이션을 방지하는 데 유용합니다.
- 파라미터:
query(string, 필수) - 반환: 검색 결과 요약 + 출처 URI와 제목 인용
- 활용: 라이브러리 최신 버전, 보안 이슈, 학습 데이터 이후 문서
웹 가져오기 (web_fetch)
특정 URL에서 원본 콘텐츠를 가져옵니다. 광고와 탐색 요소를 제거하여 핵심 내용만 추출합니다.
- 파라미터:
prompt(URL + 처리 지시사항 포함) - 한 번에 최대 20개 URL (http/https)
- Gemini API의
urlContext로 처리, 실패 시 직접 fetch로 폴백 - 응답에 출처 인용(citations) 포함
web_fetch는 읽기 전용 도구이지만 외부 네트워크 요청을 발생시키므로 플랜 모드에서도 사용자 승인이 필요합니다. 민감한 URL이 외부로 전송될 수 있으니 확인 후 승인하세요.
활용 예시
# 기술 조사
> Bun 1.0 릴리스 노트를 검색해서 주요 변경사항 요약해줘
# 상세 정보 가져오기
> https://docs.example.com/api 를 읽고 내 코드에 적용하는 방법 설명해줘
# 소스 비교
> React와 Vue의 최신 상태 관리 방법을 비교해줘
# 에러 트러블슈팅
> "TypeError: Cannot read property of undefined" 에러가 나와. 해결 방법 검색해줘
가장 효과적인 방법은 웹 도구와 로컬 파일 편집을 결합하는 것입니다: 정보 검색 → 상세 가이드 가져오기 → 프로젝트 파일에 패턴 적용.
헤드리스 모드
대화형 인터페이스 없이 프로그래밍 방식으로 Gemini CLI를 사용하세요.
"헤드리스"는 화면(Head) 없이 실행한다는 뜻입니다. 사용자가 직접 대화하지 않고, 스크립트나 자동화 시스템이 Gemini CLI에 명령을 보내고 결과만 받는 방식입니다.
활성화
두 가지 경우에 자동 활성화됩니다:
- 비TTY (비터미널) 환경에서 실행
-p또는--prompt플래그와 함께 실행
헤드리스 모드는 settings.json로 켜는 기능이 아니라 실행 방식입니다. 자동화 명령을 만들 때는 아래처럼 요청하세요.
> 이 작업을 Gemini CLI 헤드리스 모드로 실행할 수 있는 명령어로 만들어줘. --prompt와 --output-format json을 사용하고, CI나 스크립트에서 실패를 감지할 수 있게 종료 코드 처리 방법도 함께 알려줘.
출력 형식
JSON (-o json)
단일 JSON 객체를 반환합니다:
response: 모델의 최종 답변 (문자열)stats: 토큰 사용량 및 API 지연 메트릭 (객체)error: 요청 실패 시 에러 상세 (선택)
스트리밍 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(워크트리)는 같은 저장소 이력을 공유하면서 각각 고유한 파일과 브랜치를 가진 별도의 작업 디렉토리를 생성합니다. 한 프로젝트 폴더를 여러 개 복사하지 않고도 동시에 다른 브랜치에서 작업할 수 있어, 동시 작업 세션 간 코드 변경 충돌을 방지합니다.
활성화
{
"experimental": {
"worktrees": true
}
}
실험적 기능 설정도 에이전트에게 기존 설정을 보존하도록 요청하면 안전합니다.
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI Git Worktrees 기능을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 experimental.worktrees 값을 true로 설정해줘.
사용법
# 이름 지정하여 생성
gemini --worktree feature-search
# 축약형 플래그
gemini -w feature-search
# 자동 이름으로 생성 (인자 없이)
gemini --worktree
이름은 디렉토리명 (.gemini/worktrees/에 저장)과 연관된 브랜치명이 됩니다.
작업 재개
cd .gemini/worktrees/feature-search
gemini --resume <session_id>
세션을 종료(/quit 또는 Ctrl+C)해도 Gemini는 worktree나 브랜치를 자동 삭제하지 않습니다. 작업을 잃지 않기 위해 의도적으로 보존합니다 — 미커밋 변경, 스테이지된 변경, 추적되지 않은 파일, 신규 커밋 모두 유지됩니다. 종료 시 재개/제거 방법이 안내됩니다.
수동 정리
보존된 worktree와 브랜치를 정리할 때:
# Worktree 디렉토리 강제 제거
git worktree remove .gemini/worktrees/feature-search --force
# 연관 브랜치 삭제
git branch -D worktree-feature-search
수동 worktree 생성 (대안)
Gemini의 --worktree 플래그 대신 Git 직접 사용으로 worktree 위치/브랜치를 자유롭게 제어:
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에게는 별개의 리팩토링 작업을 맡기고 싶은 상황.
# 내 작업 디렉토리는 그대로 두고, AI는 별도 워크트리에서 작업
gemini -w "api/error-handler.ts의 에러 핸들링 로직을 개선해줘"
워크트리 없이 실행하면 AI의 파일 수정이 내 미커밋 변경과 뒤섞여 충돌할 위험이 있습니다.
2. AI의 변경을 PR로 검토하고 싶을 때
예: 대규모 리팩토링이나 마이그레이션처럼 즉시 메인 브랜치에 반영하기 위험한 작업.
gemini -w "src/utils/ 폴더의 모든 유틸 함수를 TypeScript로 마이그레이션해줘"
# → 별도 브랜치에 커밋 → push → PR 생성 → diff 검토 후 머지
3. 여러 AI 작업을 병렬로 돌리고 싶을 때
예: 한 PR에 묶기에는 성격이 다른 작업들을 동시에 진행.
# 터미널 1
gemini -w tests "user 서비스에 단위 테스트를 작성해줘"
# 터미널 2
gemini -w docs "API 엔드포인트 문서를 업데이트해줘"
# 터미널 3 — 나는 내 작업 계속
git commit -m "feat: 새 기능 추가"
각 워크트리는 독립된 작업 디렉토리이므로 서로 간섭 없이 병렬 실행됩니다.
4. 실험적 변경을 시도하고 마음에 안 들면 통째로 버리고 싶을 때
예: "Redux를 Zustand로 교체하면 어떨까?" 같은 PoC.
gemini -w experiment-zustand "상태 관리를 Redux에서 Zustand로 교체하는 PoC를 만들어줘"
# 결과 확인 → 마음에 들면 머지 / 별로면 워크트리 삭제 (원본 무사)
언제 워크트리를 삭제하는가 — 상황별 예시
워크트리는 자동 삭제되지 않으므로 목적이 달성된 직후 직접 정리하는 습관이 필요합니다.
1. AI 작업 결과를 머지한 직후
# 현재 워크트리 목록 확인
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 작업 결과를 폐기할 때
# 실험 결과가 별로다 → 깔끔하게 폐기
git worktree remove .gemini/worktrees/experiment-zustand --force
git branch -D worktree-experiment-zustand
--force는 미커밋 변경이 있어도 삭제합니다. 원본 브랜치에는 영향이 없습니다.
3. 같은 브랜치를 다른 곳에서 체크아웃해야 할 때
워크트리에서 사용 중인 브랜치는 다른 위치에서 git checkout이 차단됩니다. 그 브랜치가 다시 필요해졌다면 해당 워크트리를 먼저 정리해야 합니다.
# "fatal: 'feature-search' is already checked out at ..." 에러가 날 때
git worktree remove .gemini/worktrees/feature-search
# 이제 메인 디렉토리에서 git checkout feature-search 가능
4. 오래 방치된 워크트리 일괄 정리
# 어떤 워크트리가 남아있는지 확인
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구조 — 디렉토리 이름이 곧 스킬 이름 - 커스텀 명령: 확장 이름
gcp면commands/deploy.toml이/deploy가 됩니다 (확장명이 prefix가 아님 — 직접 노출) - 네임스페이스 명령:
commands/gcs/sync.toml→/gcs:sync
매니페스트 필드
| 필드 | 용도 |
|---|---|
name | 고유 식별자 (소문자, 공백은 대시로) |
version | 버전 번호 |
description | 마켓플레이스 표시용 짧은 설명 |
mcpServers | MCP 서버 정의 (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: \\) |
매니페스트 예시
{
"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 서버 구현
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);
개발 워크플로우
# 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 파일로 정책 규칙과 안전성 검사기를 기여할 수 있습니다.
[[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"]
- 확장 정책은 Tier 2 (Default보다 높음, Workspace와 동일 티어)
- User/Admin 정책보다 낮은 우선순위
Gemini CLI는 보안상 확장 프로그램 정책의 allow 결정과 yolo 모드 설정을 무시합니다. 확장이 사용자 확인 없이 도구 호출을 자동 승인하거나 보안 조치를 우회할 수 없도록 합니다.
충돌 해결 규칙
Gemini CLI 시작 시 모든 확장이 로드되고 설정이 머지됩니다. 충돌 시 워크스페이스 설정이 우선합니다. 특히 같은 이름의 MCP 서버가 settings.json과 확장 양쪽에 정의되어 있으면 settings.json의 정의가 우선합니다.
릴리스 채널 & 갤러리 등록
설치 옵션
# 안정 채널 (기본)
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
채널 운영
- 기본 브랜치(
main)를 안정 채널로 권장 dev브랜치로 활발 개발, 머지로 릴리스- 태그/GitHub Releases로 버전 고정 가능 (
--ref=v1.0.0) - HEAD 커밋이 항상 최신으로 처리되며 사용자에게 업데이트 알림
공식 갤러리 자동 등록
Gemini CLI 확장 프로그램 갤러리에 자동 등재되려면:
- 공개 GitHub 저장소 사용
- 저장소 About 섹션에
gemini-cli-extensionGitHub 토픽 추가 gemini-extension.json을 저장소 루트(또는 릴리스 아카이브 루트)에 배치
크롤러가 매일 태그된 저장소를 스캔하며, 검증 통과 시 갤러리에 등재됩니다. 별도 신청/이슈 작성은 불필요.
플랫폼별 아카이브 명명 규칙
GitHub Release 자산을 플랫폼별로 자동 배포하려면:
- 플랫폼 + 아키텍처 특정:
{platform}.{arch}.{name}.{extension} - 플랫폼 특정:
{platform}.{name}.{extension} - 일반: 단일 자산 (폴백)
플레이스홀더 값:
{platform}:darwin/linux/win32{arch}:x64/arm64{extension}:.tar.gz/.zip
예시:
darwin.arm64.my-tool.tar.gz(Apple Silicon Mac 전용)darwin.my-tool.tar.gz(모든 Mac 폴백)linux.x64.my-tool.tar.gzwin32.my-tool.zip
저장소 마이그레이션 (`migratedTo`)
확장 프로그램을 새 저장소(예: 개인 → 조직)로 옮길 때 사용자 무중단 이전:
- 새 저장소에 확장 프로그램 셋업
- 기존 저장소의
gemini-extension.json에migratedTo추가 + 버전 bump:{ "name": "my-extension", "version": "1.1.0", "migratedTo": "https://github.com/new-owner/new-extension-repo" } - 기존 저장소에 새 버전 publish
사용자가 업데이트 확인 시 CLI가 migratedTo를 감지하고, 새 저장소가 유효한 확장 업데이트를 포함하면 자동으로 새 소스로 마이그레이션합니다. 모든 확장 설정이 새 설치로 자동 이동.
GitHub Actions 워크플로우 예시
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 호환 에디터
- Visual Studio Code
- Antigravity
- 기타 VS Code 포크
ACP 호환 IDE
- JetBrains IDE (IntelliJ IDEA, PyCharm, GoLand)
- Zed
- Agent Client Protocol(ACP) 에이전트 레지스트리를 지원하는 모든 IDE
VS Code Companion 확장
"Gemini CLI Companion" 확장은 직접 IDE 접근과 실시간 워크스페이스 인식을 제공합니다.
- 최근 접근 파일 10개, 커서 위치, 선택 텍스트 (최대 16KB)의 워크스페이스 컨텍스트
- 코드 변경 검토 및 적용을 위한 네이티브 diff 뷰어
- Command Palette를 통한 CLI 기능 접근
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 라이선스 표시 |
설치
- 지원 에디터에서 CLI 실행 시 자동 설치
- CLI 명령:
/ide install - VS Code Marketplace 또는 Open VSX Registry에서 수동 설치
- JetBrains/Zed: ACP Agent Registry에서 IDE 내장 검색/설치/업데이트 — 별도 다운로드 불필요
연결 관리
/ide install # Gemini CLI Companion 확장 자동 설치
/ide enable # IDE 연동 활성화
/ide disable # IDE 연동 비활성화
/ide status # 연결 상태 및 워크스페이스 파일 표시
Diff 작업
변경사항 수락 (4가지 방법)
- diff 에디터 타이틀바의 체크 아이콘 클릭
- 파일 저장 (Cmd+S / Ctrl+S)
- Command Palette →
Gemini CLI: Accept Diff - CLI에서
yes응답
변경사항 거부 (4가지 방법)
- diff 에디터 타이틀바의 'x' 아이콘 클릭
- diff 에디터 탭 닫기
- Command Palette →
Gemini CLI: Close Diff Editor - CLI에서
no응답
💡 diff 뷰에서 직접 수정 후 수락 가능. CLI에서 "Allow for this session" 선택 시 이후 변경은 IDE를 거치지 않고 자동 수락됩니다.
환경 변수 & 수동 PID 오버라이드
IDE Companion 확장이 자동 설정하는 환경 변수:
GEMINI_CLI_IDE_WORKSPACE_PATH— IDE에서 열린 워크스페이스 경로GEMINI_CLI_IDE_SERVER_PORT— Companion 서버 포트
자동 감지가 실패하거나 별도 터미널에서 실행할 때 수동으로 IDE PID를 지정할 수 있습니다:
# macOS/Linux
export GEMINI_CLI_IDE_PID=12345
# Windows PowerShell
$env:GEMINI_CLI_IDE_PID=12345
Docker 컨테이너에서 IDE 연결
Docker/Podman 컨테이너 안에서 Gemini CLI를 실행해도 호스트의 VS Code 확장에 연결할 수 있습니다. CLI는 자동으로 host.docker.internal 주소로 IDE 서버를 찾습니다. 별도 설정은 보통 필요 없지만, 컨테이너→호스트 네트워크 연결이 가능해야 합니다.
IDE Companion 통신은 네트워크 접근이 필요합니다. SEATBELT_PROFILE을 permissive-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) | 기본 내장 프롬프트 사용 |
이것은 병합이 아닌 완전 대체입니다. 커스텀 파일을 사용하면 원본 핵심 지시사항이 적용되지 않습니다. 필요한 부분은 직접 포함해야 합니다.
변수 치환
커스텀 프롬프트에서 내장 콘텐츠를 동적으로 주입할 수 있습니다:
${AgentSkills}: 에이전트 스킬 목록 섹션${SubAgents}: 서브 에이전트 목록${AvailableTools}: 활성화된 도구 전체 목록${toolName_ToolName}: 특정 내장 도구 이름 삽입 (예:${toolName_ReadFileTool})
기본 프롬프트 내보내기
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 키 아래에 정의합니다:
- 별칭 (
modelConfigs.customAliases): 이름 있는 재사용 가능 프리셋.extends로 다른 별칭 상속 가능 — 충돌 시 "자식 우선" - 오버라이드 (
modelConfigs.overrides): 런타임 컨텍스트(모델명, 에이전트 범위)에 따라 조건부 적용. 매칭 기준 수가 많을수록 우선순위가 높음
{
"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을 지정하지 않아도 베이스 용도로 유효합니다. 위 예시의 base는 model 필드가 없어 직접 선택할 수 없지만 다른 별칭이 extends로 상속할 수 있습니다.
Override `match` 필드
model— 요청된 모델 이름 또는 별칭overrideScope— 요청 범위 (일반적으로 에이전트 이름, 예:codebaseInvestigator)- 매칭 기준 수가 많을수록 우선순위가 높음
설정값은 최소한의 검증만 거쳐 모델 제공자에게 직접 전달됩니다. 잘못된 설정은 API 런타임 오류를 발생시킬 수 있습니다.
신뢰 폴더
프로젝트별 보안 수준을 제어하여 악성 코드 실행을 방지하세요.
신뢰 폴더란?
Gemini CLI의 전체 기능에 접근할 수 있는 프로젝트를 제어하는 보안 기능입니다. 프로젝트별 설정을 로드하기 전에 사용자의 승인을 요구합니다. 기본적으로 비활성화되어 있습니다.
활성화
{
"security": {
"folderTrust": {
"enabled": true
}
}
}
신뢰 폴더 기능을 켤 때도 설정 파일 위치를 직접 찾을 필요가 없습니다.
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 신뢰 폴더 기능을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 security.folderTrust.enabled 값을 true로 설정해줘.
신뢰 대화 옵션
폴더에서 처음 CLI를 실행하면 세 가지 옵션이 제공됩니다:
- 현재 폴더만 신뢰
- 상위 디렉토리 신뢰 (모든 하위 디렉토리 자동 신뢰)
- 비신뢰로 표시 (제한된 "안전 모드"로 작동)
비신뢰 폴더 제한사항
- 워크스페이스 설정 파일 무시
.env파일 환경 변수 미로드- 확장 프로그램 관리 차단
- 도구 자동 수락 비활성화
- 자동 메모리 로드 중지
- MCP 서버 연결 차단
- 커스텀 명령어 미로드
관리
/permissions명령어로 현재 폴더의 신뢰 수준 변경~/.gemini/trustedFolders.json에서 모든 신뢰 규칙 확인
엔터프라이즈 설정
조직 전체에 Gemini CLI 정책과 보안 제어를 적용하세요.
Admin Controls vs System Settings
엔터프라이즈 관리자는 두 가지 방법으로 정책을 배포할 수 있으며, 각각 특성이 다릅니다:
| 항목 | System Settings | Admin 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 허용 목록 적용 로직
- 빈 허용 목록: 로컬 설정 그대로 사용 (MCP 자체가 비활성이 아닌 한)
- 활성 허용 목록: 허용 목록에 없는 로컬 서버는 모두 무시됨
- 머지: 서버가 허용 목록과 로컬 양쪽에 존재해야 활성화 (이름으로 매칭)
- 오버라이드 필드:
url,type,trust는 admin 값 사용 - 도구 필터: admin의
includeTools/excludeTools가 정의되면 admin 규칙만 사용 - 삭제 필드:
command,args,env,cwd,httpUrl,tcp는 보안상 자동 클리어
- 오버라이드 필드:
Required MCP Servers 예시
{
"requiredMcpServers": {
"corp-compliance-tool": {
"url": "https://mcp.corp/compliance",
"type": "http",
"trust": true,
"description": "Corporate compliance tool"
}
}
}
type은 sse 또는 http 필수. trust 기본 true. 같은 이름의 로컬 서버가 있으면 admin 설정이 완전 오버라이드.
시스템 설정 파일
| OS | 경로 |
|---|---|
| Linux | /etc/gemini-cli/settings.json |
| macOS | /Library/Application Support/GeminiCli/settings.json |
| Windows | C:\ProgramData\gemini-cli\settings.json |
설정 병합 우선순위
시스템 기본값 → 사용자 설정 → 워크스페이스 설정 → 시스템 오버라이드 (최종 권한)
주요 보안 제어
도구 접근 제한
허용 목록 방식(tools.core)이 가장 안전합니다. 위험한 명령을 차단하는 대신 허용할 도구를 명시적으로 지정합니다. ShellTool(ls)처럼 인자까지 고정할 수 있습니다.
{
"tools": {
"core": ["ReadFileTool", "GlobTool", "ShellTool(ls)"]
}
}
YOLO 모드 비활성화
{
"security": {
"disableYoloMode": true
}
}
MCP 서버 허용 목록
{
"mcp": { "allowed": ["corp-data-api"] },
"mcpServers": {
"corp-data-api": {
"command": "/usr/local/bin/start-corp-api.sh"
}
}
}
mcp.allowed를 생략하면 CLI는 사용자가 정의한 모든 MCP 서버를 자동 허용합니다. 엔터프라이즈 환경에서는 반드시 허용 목록을 명시하세요.
시스템 설정 경로 오버라이드
GEMINI_CLI_SYSTEM_SETTINGS_PATH 환경 변수로 시스템 오버라이드 설정 파일 경로를 지정할 수 있습니다. 배포 자동화/wrapper 스크립트에서 활용하세요:
export GEMINI_CLI_SYSTEM_SETTINGS_PATH="/opt/corp/gemini-policy.json"
gemini
인증 강제
{
"enforcedAuthType": "oauth-personal"
}
유효 값: "oauth-personal" / "gemini-api-key" / "vertex-ai" / "cloud-shell". 엔터프라이즈 환경에서 단일 인증 방법을 강제하며, 다른 인증 시도는 거부됩니다.
사용자 격리
공유 환경에서 GEMINI_CLI_HOME 환경 변수로 각 사용자/작업을 고유한 상태 디렉토리로 분리합니다.
감사 (Telemetry)
"logPrompts": false로 민감한 프롬프트 내용 없이 도구 사용만 감사할 수 있습니다. otlpEndpoint로 내부 OTLP 수집기에 전송합니다.
텔레메트리
Gemini CLI의 사용 데이터 수집과 설정 방법을 알아봅니다.
텔레메트리는 프로그램이 어떻게 사용되고 있는지에 대한 통계 데이터를 자동으로 수집하는 기능입니다. 개인 정보나 코드 내용이 아닌, 사용 패턴과 성능 지표만 수집합니다. 원하지 않으면 끌 수 있습니다.
수집 데이터
OpenTelemetry(개방형 텔레메트리 표준)를 통해 세 가지 유형의 데이터를 수집합니다:
로그
세션 설정, 프롬프트 제출, 도구 실행 (함수명, 인수, 소요시간), API 요청/응답 (토큰 수), 파일 작업, 모델 라우팅 결정, 확장 프로그램 생명주기 이벤트.
메트릭
도구 호출 횟수/지연, API 요청 횟수/지연, 유형별 토큰 사용량 (입력, 출력, 사고, 캐시, 도구), 파일 작업 및 변경 라인 수.
추적 (Traces)
작업명, 모델, 도구 상세, 토큰 수 등 속성이 포함된 스팬 기반 상세 가시성.
설정
| 설정 | 환경 변수 | 기본값 |
|---|---|---|
enabled | GEMINI_TELEMETRY_ENABLED | false |
traces | GEMINI_TELEMETRY_TRACES_ENABLED | false |
target | GEMINI_TELEMETRY_TARGET | "local" |
outfile | GEMINI_TELEMETRY_OUTFILE | - |
logPrompts | GEMINI_TELEMETRY_LOG_PROMPTS | true ⚠️ |
otlpEndpoint | GEMINI_TELEMETRY_OTLP_ENDPOINT | http://localhost:4317 |
otlpProtocol | GEMINI_TELEMETRY_OTLP_PROTOCOL | grpc |
useCollector | GEMINI_TELEMETRY_USE_COLLECTOR | false |
useCliAuth | GEMINI_TELEMETRY_USE_CLI_AUTH | false |
공식 cli/telemetry.md 기준 logPrompts 기본값은 true입니다 (configuration.md는 false로 표기 — 공식 문서 간 차이). 텔레메트리 활성화 시 프롬프트 내용까지 로그에 포함될 수 있으므로, 민감한 환경에서는 반드시 명시적으로 "logPrompts": false 설정을 권장합니다.
GCP 텔레메트리 추가 옵션
useCliAuth: true— CLI OAuth 자격증명을 텔레메트리에 사용 (Direct export 전용,useCollector: true와 동시 설정 시 텔레메트리 비활성화)OTLP_GOOGLE_CLOUD_PROJECT환경 변수 — inference와 다른 GCP 프로젝트로 텔레메트리 export- 필요 IAM 역할: Cloud Trace Agent, Monitoring Metric Writer, Logs Writer
로컬 트레이싱 백엔드
# 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_command | Execute | 임의의 셸 명령 실행. 대화형 세션과 백그라운드 프로세스 지원. 수동 확인 필요. |
run_shell_command 상세
| 파라미터 | 필수 | 설명 |
|---|---|---|
command | ✓ | 실행할 셸 명령 문자열 |
description | 승인 다이얼로그에 표시될 간단한 설명 | |
dir_path | 실행 디렉토리 (절대 또는 워크스페이스 상대) | |
is_background | true면 시작 후 즉시 백그라운드로 이동 |
- OS별 셸: Windows는
powershell.exe -NoProfile -Command, 그 외는bash -c - 반환:
{ Command, Directory, Stdout, Stderr, "Exit Code", "Background PIDs" }JSON 객체 - 설정:
tools.shell.enableInteractiveShell(node-pty 기반 대화형, 기본false),tools.shell.showColor,tools.shell.pager(기본cat, 대화형 활성 시에만 적용)
대화형 셸이 필요한 도구 실행을 자주 쓴다면 아래처럼 설정을 요청할 수 있습니다.
> 현재 프로젝트의 .gemini/settings.json에서 Gemini CLI 대화형 셸을 활성화해줘. 파일이 없으면 만들고, 기존 설정은 유지하면서 tools.shell.enableInteractiveShell 값을 true로 설정해줘.
파일 시스템
아래 도구는 모두 워크스페이스 루트(rootDirectory) 내로 작업이 제한됩니다. 외부 경로 접근 시도는 거부됩니다. 추가 디렉토리는 --include-directories 또는 context.includeDirectories로 허용할 수 있습니다.
| 도구 | 유형 | 설명 |
|---|---|---|
glob | Search | 파라미터: pattern(필수), path, case_sensitive(기본 false), respect_git_ignore(기본 true). 절대 경로 반환, 최근 수정 순 정렬. node_modules/.git 자동 무시 |
grep_search | Search | 파라미터: pattern(필수, 정규식), path, include(글롭 필터). 검색 엔진: git grep → 시스템 grep → JS 폴백. 레거시 별칭: search_file_content |
list_directory | Read | 파라미터: dir_path(필수), ignore(글롭 배열), file_filtering_options(.gitignore/.geminiignore 옵션) |
read_file | Read | 파라미터: file_path(필수), offset(0-based 시작 줄, 선택), limit(최대 줄 수, 선택). 텍스트/이미지/오디오/PDF 지원 |
read_many_files | Read | 여러 파일 동시 읽기. 사용자 프롬프트의 @path/to/file 구문으로 자주 호출됨 |
replace | Edit | 파라미터: file_path, instruction(시맨틱 설명), old_string(필수, 정확 매칭), new_string, allow_multiple(기본 false). old_string 주변에 충분한 컨텍스트 필요. 승인 필요 |
write_file | Edit | 파라미터: file_path(필수), content(필수). 승인 다이얼로그에서 diff 미리보기 제공 |
glob은 .gitignore / .geminiignore를 자동 존중하며, respect_git_ignore: false로 해제할 수 있습니다. case_sensitive 파라미터로 대소문자 구분 제어 가능.
상호작용
| 도구 | 유형 | 설명 |
|---|---|---|
ask_user | Communicate | 파라미터: questions(필수, 1-4개). 각 질문은 question, header(최대 16자), type(choice/text/yesno), options, multiSelect, placeholder |
write_todos | Other | 파라미터: todos(배열, 각 항목 description+status). 상태: pending/in_progress/completed/cancelled/blocked. in_progress는 동시 1개만. Ctrl+T로 토글 |
ask_user 질문 유형 및 제약
| 유형 | 설명 |
|---|---|
| Choice | 2–4개 옵션 선택 (다중 선택 지원, 각 옵션은 label + description). 다중 선택 시 "All the above" 자동 추가 |
| Text | 자유 입력 (placeholder 힌트 지원) |
| Yes/No | 이진 확인 프롬프트 |
- 요청당 1–4개 질문,
question필수,header라벨 최대 16자 - 응답:
{"answers": {"0": "Option A"}}형식 JSON (인덱스 기반)
write_todos 상태 및 동작
| 상태 | 의미 |
|---|---|
pending | 대기 중 |
in_progress | 진행 중 (동시에 단 1개만 가능) |
completed | 완료 |
cancelled | 취소됨 |
blocked | 차단됨 (의존성 미해결 등) |
- CLI 입력 프롬프트 위쪽 진행 표시줄에 현재 작업 표시, 전체 목록은 Ctrl+T로 확인
- 작업 목록은 현재 세션 한정 (세션 간 유지 안 됨)
메모리 & 계획
| 도구 | 유형 | 설명 |
|---|---|---|
activate_skill | Other | .gemini/skills에서 전문 지식 로드. 에이전트 전용 도구 (사용자 직접 호출 불가) |
get_internal_docs | Think | Gemini CLI의 docs/ 마크다운 파일 조회. path(선택, 예: reference/commands.md), 생략 시 전체 파일 목록. 에이전트 전용 (사용자 호출 불가) |
save_memory | Think | fact 파라미터로 전달된 사실을 ~/.gemini/GEMINI.md의 ## Gemini Added Memories 섹션에 불릿으로 추가 |
enter_plan_mode | Plan | 안전한 읽기 전용 연구 모드로 전환. YOLO 모드에서 사용 불가. 파라미터: reason (선택) |
exit_plan_mode | Plan | 플랜 완료 후 승인 요청. 파라미터: plan_path (필수, 플랜 디렉토리 내 MD 파일). 승인 시 DEFAULT/AUTO_EDIT로 전환, 거부 시 플랜 모드 유지 |
activate_skill은 에이전트가 작업과 매칭되는 스킬을 찾을 때 자동 호출됩니다. 사용자는 "code review 스킬 사용해줘"처럼 자연어로 간접 유도하세요. 파라미터: name (enum, 필수 — 예: code-reviewer, pr-creator, docs-writer).
웹
| 도구 | 유형 | 설명 |
|---|---|---|
google_web_search | Search | 파라미터: query(필수). Google 검색 → 요약 + 출처 URI/제목 인용. Gemini API가 결과를 처리 |
web_fetch | Fetch | 파라미터: prompt(필수, 최대 20개 URL 포함). http:///https://로 시작. 플랜 모드에서도 사용자 승인 필수. urlContext 사용, 실패 시 로컬 폴백 |
MCP
| 도구 | 유형 | 설명 |
|---|---|---|
list_mcp_resources | Search | 연결된 MCP 서버의 리소스 목록. serverName(선택)으로 특정 서버만 필터. URI/서버명/설명 반환. 승인 불필요 |
read_mcp_resource | Read | 특정 리소스 읽기. uri(필수)로 지정. 서버의 resources/read 메서드 호출. 바이너리는 타입 플레이스홀더 반환. 승인 불필요 |
작업 추적 (Tracker) 실험적
tracker_* 도구는 write_todos를 대체하는 영구 저장 작업 그래프입니다. 의존성이 있는 복잡한 작업을 DAG(Directed Acyclic Graph)로 관리합니다.
| 도구 | 유형 | 설명 |
|---|---|---|
tracker_create_task | Other | 새 작업 생성. title/description/type(epic/task/bug) 지정 |
tracker_list_tasks | Other | 작업 목록. status/type/parent로 필터링 |
tracker_get_task | Other | 6자 hex ID로 특정 작업 상세 조회 |
tracker_update_task | Other | 상태(open/in_progress/blocked/closed), 설명, 의존성 업데이트 |
tracker_add_dependency | Other | 작업 간 의존성 추가 (토폴로지 실행 순서 보장) |
tracker_visualize | Other | ASCII 트리로 작업 그래프 시각화 |
update_topic | Other | 현재 주제/상태를 사용자에게 진행 보고 |
complete_task | Other | 서브 에이전트의 미션 완료 처리 (내부용) |
Tracker 특성
| 항목 | 내용 |
|---|---|
| 작업 유형 | epic (대규모 목표) → task (일반 작업) → bug (버그) |
| 작업 상태 | open · in_progress · blocked · closed (4종, write_todos와 다름) |
| 작업 ID | 6자 hex (예: a1b2c3) |
| 저장 경로 | .gemini/tmp/tracker/<session-id>/ — 세션별 격리, 세션 간 유지 안 됨 |
| 그래프 구조 | DAG (순환 금지), 의존성 선결 필수 |
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)으로 결정하는 규칙을 정의합니다.
규칙 조건
- 도구 이름: 정확한 이름 또는 와일드카드 (
*,mcp_server_*) - 인수 패턴: JSON 형식 인수에 대한 정규식
- 실행 환경: 대화형 vs 비대화형
- 승인 모드: default, autoEdit, plan, yolo
우선순위 계층
| 계층 | 기본값 | 용도 |
|---|---|---|
| Default | 1 | 내장 정책 |
| Extension | 2 | 확장 프로그램 정책 |
| Workspace | 3 | 프로젝트 수준 정책 |
| User | 4 | 사용자 커스텀 정책 |
| Admin | 5 | 시스템 관리자 정책 |
공식: 최종 우선순위 = 계층 기본값 + (toml_priority / 1000)
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/policies/*.toml - 워크스페이스:
$WORKSPACE_ROOT/.gemini/policies/*.toml - 시스템 관리자: OS별 시스템 경로
메모리 임포트 프로세서
GEMINI.md 파일을 모듈화하여 재사용 가능한 컴포넌트로 관리하세요.
임포트 구문
@ 뒤에 파일 경로를 지정하여 다른 파일의 내용을 가져옵니다:
@./file.md # 상대 경로
@../shared/style-guide.md # 상위 디렉토리
@./components/instructions.md # 하위 디렉토리
@/absolute/path/to/file.md # 절대 경로
안전 메커니즘
- 순환 임포트 감지: A가 B를 임포트하고 B가 A를 임포트하는 것을 자동 방지
- 파일 접근 보안:
validateImportPath함수로 지정된 디렉토리로만 임포트 제한 - 최대 깊이 제한: 기본 5단계로 무한 재귀 방지
특수 처리
- 오류 처리: 누락된 파일이나 권한 문제 시 에러 주석을 삽입 (무음 실패 방지)
- 코드 블록 인식:
marked라이브러리로 코드 블록 내의@구문은 실제 임포트로 처리하지 않음 - 계층 시각화: 임포트 트리 구조로 파일 관계를 명시적으로 표시
ACP 모드 실험적
Agent Client Protocol을 통해 IDE와 개발 도구에서 Gemini CLI를 프로그래밍 방식으로 제어하세요.
ACP 모드란?
ACP(Agent Client Protocol)는 AI 코딩 에이전트와 코드 에디터/IDE(통합 개발 환경) 간 통신을 표준화하는 개방형 프로토콜입니다. JSON-RPC(원격 프로시저 호출 — 한 프로그램이 다른 프로그램의 기능을 호출하는 규약) 프로토콜을 stdio(표준 입출력)로 통신합니다.
시작
gemini --acp
이전 플래그 --experimental-acp는 별칭으로 남아있으나, 공식 가이드는 --acp를 권장합니다.
지원 메서드
| 카테고리 | 메서드 |
|---|---|
| 코어 | initialize, authenticate, newSession, loadSession, prompt, cancel |
| 세션 관리 | setSessionMode, unstable_setSessionModel |
| 파일 시스템 | 프록시된 파일 시스템 서비스 — IDE가 게이트키퍼 역할 (아래 설명) |
프록시된 파일 시스템 (보안 모델)
ACP의 파일 시스템은 IDE 클라이언트가 게이트키퍼로 동작합니다. 에이전트는 IDE가 허용한 파일만 읽고 쓸 수 있으며, 워크스페이스 외부로 접근이 유출되지 않습니다. 이 구조로 IDE가 사용자 동의 기반 접근 제어를 유지합니다.
MCP 연동
IDE 클라이언트가 MCP 서버를 구현하면 Gemini 모델이 해당 도구를 사용할 수 있습니다:
- 클라이언트가 도구를 노출하는 MCP 서버 구현
- ACP 초기화 시 MCP 서버 연결 정보 제공
- Gemini CLI가 연결하여 사용 가능 도구 검색
- 모델이 작업 실행을 위해 도구 호출
디버깅
gemini --acp --debug
제거 (Uninstall)
Gemini CLI를 시스템에서 완전히 제거하는 방법입니다.
설치 방법별 제거
npm 글로벌 설치
npm uninstall -g @google/gemini-cli
npx (임시 캐시)
npx는 임시 캐시에서 실행되므로 영구 설치가 아닙니다. 캐시를 정리하려면:
rm -rf "$(npm config get cache)/_npx"
Remove-Item -Path (Join-Path $env:LocalAppData "npm-cache\_npx") -Recurse -Force
Homebrew
brew uninstall gemini-cli
MacPorts
sudo port uninstall gemini-cli
CLI를 제거한 후 설정과 캐시 데이터도 삭제하려면 ~/.gemini/ 디렉토리를 수동으로 제거하세요.
오픈소스 기여 가이드
Gemini CLI는 오픈소스 프로젝트로, 자동화된 트리아지 시스템을 통해 이슈와 PR을 관리합니다.
이슈 작성 시
이슈 작성 직후 Automated Issue Triage 봇이 Gemini 모델로 분석하여 라벨을 자동 부착합니다:
area/*— 기능 영역 (예:area/ux,area/models,area/platform)kind/*— 이슈 유형 (예:kind/bug,kind/enhancement,kind/question)priority/*— 우선순위 (P0 critical → P3 low)status/need-information— 정보 부족 시status/need-retesting— 6버전 이상 오래된 CLI 참조 시
⚠️ 🔒Maintainers only 라벨 이슈는 메인테이너 전용 — 외부 PR 받지 않음.
PR 작성 시 필수 사항
15분마다 PR Auditing 봇이 모든 열린 PR을 검사합니다. 본문에 다음 키워드 중 하나로 이슈를 링크해야 합니다:
Fixes #123Closes #123Resolves #123
링크된 이슈가 없으면 status/need-issue 라벨이 자동 부착되며, 이슈 라벨이 PR로 자동 동기화됩니다.
외부 기여자 7일 정책
매일 09:00 UTC에 help wanted 라벨 + assignee가 있는 모든 이슈를 검사:
- 외부 기여자가 7일 초과 linked PR을 안 올리면 자동 unassign
- draft PR은 카운트 안 됨 — open 또는 merged 비-draft PR 필요
- 메인테이너/조직 멤버/write+ 권한 콜라보레이터는 면제
- 재할당:
/assign댓글, 자체 해제:/unassign댓글
commit 전 사전 검사
npm run preflight
CLA (Contributor License Agreement)
Gemini CLI에 코드를 기여하려면 Google CLA에 서명해야 합니다 (개인 또는 고용주). cla.developers.google.com에서 현재 동의 상태를 확인하거나 새로 서명할 수 있습니다. 다른 Google 프로젝트에서 이미 서명한 적이 있다면 다시 할 필요는 없습니다.
코드 기여 흐름
- 작업할 이슈 찾기 (🔒Maintainers only는 제외)
- 저장소 포크 → 새 브랜치 생성
packages/디렉토리에서 변경 작업npm run preflight로 모든 검사 통과 확인- PR 생성 — 본문에
Fixes #<issue>추가
자동 PR 리뷰 도구
코드 리뷰 보조 도구를 제공합니다 (PR 작성자도 직접 실행 권장):
# 헬퍼 스크립트 — 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 안에서:
/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 설정
# 한 줄로 글로벌 설정
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 설정
[install]
minimumReleaseAge = 604800 # 7일 (단위: 초)
pnpm 설정
pnpm config set minimum-release-age 10080 # 7일 (단위: 분)
pnpm config set ignore-scripts true
uv 설정 (Python MCP 서버 사용자)
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된 보안 패치를 즉시 적용할 수 없습니다. 그럴 때는 프로젝트별로 일시적으로 해제하세요:
# 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(
@google/gemini-cli)는 npm으로 배포 →min-release-age=7이 적용됨 - auto-update를 켜두면(
general.enableAutoUpdate=true) 7일 지난 최신 버전만 자동 갱신 - MCP 서버를
npx/uvx로 즉시 실행할 때도 같은 정책이 적용됨
# ~/.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/로컬 의존성은 적용 안 됨 | 레지스트리 외부 출처 | 해당 의존성은 별도로 코드 리뷰 |
- Hacker News: PSA — npm/bun/pnpm/uv now all support setting a minimum release age for packages (이 페이지의 원 출처)
- npm:
.npmrc설정 레퍼런스 (min-release-age,ignore-scripts) - bun:
bunfig.tomlInstall 옵션 - pnpm:
minimum-release-age설정 - uv:
exclude-newer설정 - 권한 (Permissions) — 실행 시점 권한, 이 페이지는 설치 시점 권한
Gemini CLI 설치 레거시
기존 Gemini 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.js | 20.0.0 이상 |
| RAM (일반) | 4GB 이상 |
| RAM (고성능) | 16GB 이상 권장 |
| 셸 | Bash, Zsh, 또는 PowerShell |
| 네트워크 | 인터넷 연결 필수 |
Node.js 사전 준비
Gemini CLI는 JavaScript(Node.js) 기반으로 개발된 도구입니다. npm(Node Package Manager)을 통해 배포되며, 실행 시 Node.js 런타임이 필요합니다. 따라서 Gemini CLI를 설치하기 전에 Node.js 20.0.0 이상이 시스템에 설치되어 있어야 합니다.
Node.js 설치 여부 확인
설치 진행
필요
nodejs.org
권장
macOS
터미널에서 아래 명령어로 Node.js가 설치되어 있는지, 버전은 충분한지 확인하세요.
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 버전을 설치하고 전환할 수 있어 편리합니다.
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
# 터미널 재시작 후
nvm install --lts
nvm use --lts
# nvm-windows 설치 후 (https://github.com/coreybutler/nvm-windows)
nvm install lts
nvm use lts
방법 3: 패키지 매니저로 설치
brew install node
# NodeSource 저장소 추가 (최신 LTS: Node.js 22.x 기준)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
choco install nodejs-lts
설치 확인
설치가 완료되면 아래 명령어로 정상 설치 여부를 확인하세요.
node --version # v20.0.0 이상 출력되면 성공
npm --version # npm도 함께 설치됨
Node.js 버전이 20.0.0 미만이면 Gemini CLI 설치 시 오류가 발생할 수 있습니다. nvm install --lts 또는 공식 사이트에서 최신 LTS 버전을 설치하세요.
Gemini CLI 설치 방법
npm (권장)
npm install -g @google/gemini-cli
Homebrew (macOS / Linux)
brew install gemini-cli
MacPorts (macOS)
sudo port install gemini-cli
Anaconda (제한된 환경)
Node.js를 직접 설치할 수 없는 환경에서 유용합니다.
conda create -y -n gemini_env -c conda-forge nodejs
conda activate gemini_env
npm install -g @google/gemini-cli
설치 없이 실행 (npx)
npx @google/gemini-cli
Docker
# 공개된 샌드박스 이미지 직접 실행
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-core | API 호출/인증/캐시 코어 로직 | ❌ 번들 안 함 — standalone 사용 가능 |
@google/gemini-cli-a2a-server | Agent-to-Agent 프로토콜 서버 | 독립 패키지 |
개발(dev) 환경: @google-gemini/** private GitHub NPM 저장소. 프로덕션(prod): @google/** Wombat Dressing Room. 프로젝트는 NPM Workspaces로 packages/* 구조.
릴리스 신뢰성 (Release Confidence) 전략
Gemini CLI는 모든 릴리스에 대해 2단계 신뢰성 검증을 수행합니다.
Level 1: 자동 게이트 (필수 통과)
- CI 헬스: Linux + macOS에서 린트/타입체크/유닛 테스트/빌드 통과
- E2E 테스트: Linux/macOS/Windows에서 sandbox:none + sandbox:docker 모두 통과
- 스모크 테스트: npm 배포 후
npx -y @google/gemini-cli@<tag> --version으로 설치/실행 가능 확인
Level 2: 수동 검증 (Dogfooding)
- 1주간 프리뷰 사용 후 stable 승격 — 메인테이너가 일상 사용
- CUJ 체크리스트: 인증(/auth) → 기본 프롬프팅 → 파이프 입력 → @file 컨텍스트 → /settings 등 핵심 흐름 매뉴얼 검증
- 클린 설치 권장:
npm uninstall -g @google/gemini-cli && npm cache clean --force && npm install -g @google/gemini-cli@preview
통합 테스트 빌드/실행 명령
기여자가 통합 테스트를 실행할 때 사용하는 명령:
# 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)
- Skill Extractor & Memory Inbox —
/memory inbox로 추출된 스킬 검토/패치, 지속적 학습 워크플로우 강화 - 플랜 모드 보안 강화 — 스킬 활성화 시 사용자 확인 + 생성 플랜 전체 내용 보기
- Advanced Display Protocol — 도구 제어 표시 프로토콜로 풍부한 시각 피드백
- 코어 아키텍처 리팩토링 —
ContextManager+Sidecar분리형 구조로 상태/세션 회복력 개선 - 모델 사고 표시 복원 — 추론 과정과 raw text 응답 가시성 보장
업데이트
gemini update