agents-cli)는 그 스킬들이 호출하는 손발이다.
Python 3.11+ · Click · uv · 그리고 Google ADK(Agent Development Kit) · Gemini Enterprise(구 Vertex AI) 위에서 동작한다.
(저장소: google/agents-cli · Python · v0.6.1 · Apache-2.0 · PyPI: google-agents-cli)
이 저장소가 대체 무엇인가.
요즘 코딩 어시스턴트(Claude Code, Codex, Gemini CLI 등)는 똑똑하지만, "Google Cloud에서 ADK 에이전트를 만들어 배포해줘"라고 하면 헤맨다. 최신 SDK 이름도 모르고, 배포 타깃이 뭔지도 모른다. agents-cli는 두 가지를 준다: ① 그 에이전트에게 정확한 순서와 명령을 알려주는 스킬 7개, ② 스킬이 실제로 호출하는 CLI(프로젝트 생성·실행·평가·배포·등록).
비유하면: 코딩 에이전트 = 손재주 좋은 신입, agents-cli 스킬 = 회사 표준 작업 매뉴얼, agents-cli CLI = 매뉴얼에 적힌 사내 전용 공구. 매뉴얼과 공구를 쥐여주면 신입이 곧바로 "GCP 에이전트 전문가"처럼 일한다.
공식 한 줄 설명은 "Turn your favorite coding assistant into an expert at building and deploying agents on Google Cloud". FAQ는 못을 박는다 — 이건 코딩 에이전트가 아니며, adk CLI의 대체재도 아니다. 다른 코딩 에이전트를 "잘 쓰게 만드는" 도구다. 그래서 제품의 본체는 7개의 SKILL.md이고, 파이썬 CLI는 그 스킬들이 uvx로 불러 쓰는 실행기다.
GitHub 저장소 = google/agents-cli · PyPI 패키지 = google-agents-cli (앞에 google-) · 실행 명령 = agents-cli · 파이썬 import 경로 = google.agents.cli. 문서·블로그마다 다르게 부르니 "전부 같은 것"으로 기억해 두자.
Agent(에이전트 정의), App(실행 단위), Gemini(모델 연결), 도구(tools) 같은 빌딩블록을 제공한다. agents-cli가 만들어내는 모든 프로젝트는 이 ADK 위에 올라간다. 파이썬뿐 아니라 TypeScript·Go·Java 버전도 있다.TrendShift 상승 이유 · 다른 에이전트 도구 대비 차별점.
2026년 상반기 깃허브 트렌딩은 "에이전트 스킬" 천지다. TrendShift 월간만 봐도 mattpocock/skills, addyosmani/agent-skills, obra/superpowers, phuryn/pm-skills … 죄다 .claude 폴더에서 꺼낸 스킬 모음이다. 이 흐름 한복판에 구글이 직접 내놓은 공식 스킬 묶음이 agents-cli다. "구글 공식 + ADK·Gemini Enterprise 전용 + 풀 라이프사이클"이라는 조합이 주목의 핵심이다.
대부분의 트렌딩 도구는 "또 하나의 코딩 에이전트" 또는 "또 하나의 게이트웨이"다. agents-cli는 반대다 — 새 에이전트가 되려 하지 않고, 네가 이미 쓰는 에이전트를 더 똑똑하게 만든다. 이 "미들웨어" 전략 덕분에 Claude Code 플러그인, Gemini CLI 확장, npx skills 생태계에 동시에 올라탄다. 한 번 만들어 여러 에이전트에 꽂는다.
| 해야 할 일 | 맨손 + 클라우드 콘솔 | 순수 adk CLI | 일반 코딩 에이전트 단독 | agents-cli |
|---|---|---|---|---|
| 프로젝트 뼈대 생성 | 수동 복붙 | 기본 템플릿 | 매번 다른 구조 | 4언어 × 4배포타깃 표준 템플릿 |
| 최신 SDK·제품명 추적 | 직접 문서 검색 | 일부 | 옛 이름 환각 | 스킬에 매핑표 내장 |
| 품질 평가(eval) | — | 제한적 | — | 생성·채점·합성·비교·최적화 풀세트 |
| 배포 | 콘솔 클릭 | 일부 | — | Agent Runtime / Cloud Run / GKE 3택 |
| Gemini Enterprise 등록 | REST 수동 | — | — | publish 한 방 |
| 여러 에이전트에 적용 | — | — | — | 플러그인·확장·npx skills 동시 |
① Understand→Scaffold→Build→Evaluate→Deploy→Publish→Observe 전 단계를 한 도구가 커버한다. ② 남들은 "만들기"에서 멈추는데, agents-cli는 eval(품질 플라이휠)이 진짜 무기다 — 데이터셋 합성, LLM 심판 채점, 실패 군집 분석, 프롬프트 자동 최적화까지. ③ 파이썬 CLI 하나가 Python·TypeScript·Go·Java ADK 프로젝트를 각각의 Dockerfile·Terraform·CI까지 통째로 찍어낸다.
"Cloud Run에 ADK 에이전트 하나 올려줘"라고 Claude Code에게 시킨다. 스킬이 없으면 에이전트는 옛 SDK 이름을 쓰고, Dockerfile을 엉성하게 짜고, 배포 명령을 헷갈린다.
agents-cli 스킬이 깔려 있으면: 에이전트가 먼저 "프로젝트부터 만들자"(scaffold create) → "로컬에서 돌려보자"(run) → "평가하자"(eval) → "Cloud Run으로 배포"(deploy --deployment-target cloud_run) 순서를 스스로 밟는다. 매뉴얼대로 움직이는 숙련공이 된다.
CLI 본체 · 배포 채널 · 생성되는 프로젝트 · GCP 연동면 전부.
| 요소 | 역할 | 비고 |
|---|---|---|
Python 3.11+ | CLI 구현 언어 (소스 117개 .py) | import 경로 google.agents.cli |
Click | CLI 프레임워크 — 명령·옵션·그룹 | 커스텀 LazyGroup으로 지연 로딩 |
rich | 사람용 출력 — 표·색상 배너 | stderr로 보내 stdout은 JSON 유지 |
uv (Astral) | 패키지·실행 도구 — 필수 | 시작 시 require_tool("uv") 강제 |
Node.js + npx skills | 스킬 설치 — vercel-labs/skills 생태계 | 코딩 에이전트별 IDE에 스킬 주입 |
cookiecutter + Jinja2 | 프로젝트 스캐폴딩 템플릿 엔진 | 패키지 데이터로 동봉 |
requests · googleapiclient · vertexai | Vertex / Gemini Enterprise REST 호출 | 배포·등록·평가 서비스 |
a2a | Agent-to-Agent 프로토콜 — 에이전트 카드·등록 | publish 단계에서 사용 |
fastapi · kfp · locust | 로컬 서버 · RAG 인제스트 파이프라인 · 부하테스트 | run/playground · data-ingestion · 템플릿 |
※ 이 저장소는 "소스 미러"라 루트에 pyproject.toml이 없다(아래 5번 참고). 위 의존성은 실제 코드의 import에서 역추적한 것이다.
| 채널 | 설치 방법 | 의미 |
|---|---|---|
| PyPI 패키지 | uvx google-agents-cli setup | CLI + 스킬 한 번에 |
| npx skills | npx skills add google/agents-cli | 스킬만, CLI는 코딩 에이전트가 uvx로 구동 |
| Claude Code 플러그인 | .claude-plugin/plugin.json | "7 skills 번들" v0.6.1 |
| Gemini CLI 확장 | gemini-extension.json | 동일 7스킬을 Gemini CLI에 |
| 계층 | 구성 |
|---|---|
| 에이전트 프레임워크 | google-adk (2.x) — Agent / App / Gemini |
| 기본 모델 | gemini-flash-latest + 재시도 3회 |
| 서빙 | FastAPI + uvicorn (Cloud Run/GKE), 포트 8080 |
| 평가 | google-cloud-aiplatform[evaluation] + Vertex AI Eval Service |
| 세션 저장 | asyncpg + SQLAlchemy (Cloud SQL) |
| 관측 | OpenTelemetry · Cloud Logging · Cloud Trace · BigQuery 분석 |
| 인프라 | Terraform (WIF·Cloud Build) + Dockerfile + GitHub Actions/Cloud Build |
| 품질 도구 | ruff(린트) · ty(타입체크) · codespell · pytest · Locust(부하) |
"스킬이 머리, CLI가 손발, GCP가 무대" — 3층 구조.
가장 헷갈리는 점부터 풀자. 이 시스템에는 세 명의 행위자가 있다. ① 사용자가 쓰는 코딩 에이전트(Claude Code 등), ② 그 에이전트가 읽는 스킬(SKILL.md), ③ 스킬이 호출하는 agents-cli 명령. 명령은 다시 GCP 서비스를 부른다. 데이터 흐름을 그림으로 보면:
모든 서브명령은 main.add_lazy_command("deploy", "google.agents.cli.deploy.cmd_deploy:cmd_deploy", "Deploy the agent.") 식으로 등록된다. 실제로 그 명령을 실행할 때만 해당 모듈을 import한다. agents-cli --help는 짧은 설명 문자열만 읽어 모듈 import 0회로 빠르게 뜬다. CLI 시작 속도를 지키는 흔하고 강력한 기법이다.
# src/google/agents/cli/_click.py (요약)
def get_command(self, ctx, cmd_name):
if cmd_name in self._lazy_commands and cmd_name not in self.commands:
module_path, attr = self._lazy_commands[cmd_name][0].split(":")
cmd = getattr(importlib.import_module(module_path), attr) # 이제서야 import
patch_source_in_help(cmd)
self.commands[cmd_name] = cmd
return super().get_command(ctx, cmd_name)
patch_source_in_help()가 각 명령의 도움말 끝에 "Source: <실제 소스 파일 절대경로>"를 붙인다. 어떤 명령이 어느 파일에서 구현됐는지 --help만 봐도 안다. 코드를 읽거나 디버깅할 때 길잡이가 된다.
스캐폴딩은 {{cookiecutter.*}}·{%- if ... %} 같은 Jinja2 플레이스홀더가 박힌 템플릿 묶음이다. 4개 언어 × 4개 배포타깃 행렬(base_templates/ × deployment_targets/)에 공용 Terraform(_shared/)을 더해, create 시점에 실제 파일로 펼쳐진다. 사용자의 선택(배포타깃·세션종류·CI러너 등)은 agents-cli-manifest.yaml에 기록돼, 나중에 enhance/upgrade가 그 선택을 다시 읽는다.
eval/_inference_runner.py 같은 스크립트는 CLI 패키지에 동봉돼 있다가, 사용자의 프로젝트 폴더(.agents-cli-scripts/)로 복사돼 사용자 자신의 uv 가상환경(=올바른 ADK 버전)에서 실행된다. CLI의 환경이 아니라 프로젝트의 환경에서 돌려야 평가가 정확하기 때문이다.
agents-cli는 uv·npx skills·gcloud·kubectl·terraform을 직접 다시 만들지 않고 _runner 추상화로 감싸서 호출한다. CLOUDSDK_CORE_DISABLE_PROMPTS=1을 설정해 gcloud가 멈춰 서서 입력을 기다리지 않게 한다(--interactive일 때만 예외). 자동화에 최적화된 선택이다.
deploy --deployment-target의 선택지. agent_runtime = 구글 관리형 "리즈닝 엔진"(ADK 웹 + A2A를 한 컨테이너로 서빙), cloud_run = gcloud beta run deploy로 서버리스 컨테이너 배포, gke = Terraform + docker build + kubectl apply로 쿠버네티스 배포. 같은 에이전트를 환경만 바꿔 올릴 수 있다.스킬은 어디 있고, CLI 코드는 어떻게 나뉘는가.
공개 저장소는 실제 개발 레포가 아니라 릴리스마다 통째로 게시되는 소스 미러다(RELEASE_NOTES 0.5.0: "소스 코드를 공개 깃허브에 게시"). 그래서 ① 빌드 매니페스트(pyproject.toml)가 루트에 없고(있는 건 docs/용뿐), ② git log 커밋이 1개(release v0.6.1)뿐이며, ③ CLI 자신의 tests/ 트리는 코드 주석엔 언급되지만 동봉되지 않았다. 의존성을 알려면 매니페스트가 아니라 import를 봐야 한다는 뜻.
반대로, 생성되는 프로젝트는 테스트가 풍부하다. 모든 스캐폴드가 tests/unit·tests/integration(실서버 e2e)·tests/load_test(Locust)를 4개 언어 각각에 깔아주고, eval/ 하니스와 데이터셋까지 붙여준다. "도구 본체는 가볍게, 만들어주는 결과물은 탄탄하게"라는 철학이 보인다.
이 저장소 하나로 배울 수 있는 것 + 각자 실습 아이디어.
가장 값진 학습 포인트. 각 스킬의 머리말은 단순 설명이 아니라 "언제 쓰고, 언제는 쓰지 말지"를 명시한다. 예컨대 scaffold 스킬의 description은 "이럴 때 써라"를 트리거 문구로 나열한 뒤, "코드 작성은 adk-code 스킬, 배포는 deploy 스킬을 써라(Do NOT use for…)"라고 다른 스킬과의 경계를 못 박는다. 스킬끼리 겹치지 않게 하는 설계다.
# skills/google-agents-cli-scaffold/SKILL.md (머리말)
---
name: google-agents-cli-scaffold
description: >
"create an agent project", "start a new ADK project" 같은 요청에 사용.
scaffold create / enhance / upgrade, 템플릿 옵션, 배포 타깃을 다룬다.
Do NOT use for 코드 작성(use ...-adk-code) or 배포(use ...-deploy).
metadata:
author: Google
license: Apache-2.0
version: 0.6.1
requires: { bins: [agents-cli] }
---
본문은 사람용 문서가 아니라 에이전트용 가드레일이다. workflow 스킬은 "STOP — Do NOT write code yet. 프로젝트가 없으면 scaffold create부터."라는 강한 단계 게이트로 시작한다. "Vertex AI Agent Engine → --deployment-target agent_runtime" 같은 제품명 매핑표까지 들어 있다.
스킬 하나(SKILL.md)를 직접 써보자. 머리말에 name·description(트리거 문구 3개 + "Do NOT use for …" 1줄)을 넣고, 본문에 "1단계 → 2단계" 플레이북을 적는다. npx skills add ./내스킬로 Claude Code에 꽂아 동작을 확인.
Click으로 서브명령 그룹을 만드는 법, 그리고 지연 로딩으로 시작 속도를 지키는 실전 패턴을 통째로 배운다. add_lazy_command(name, "module:obj", short_help) → 실행 시점 import. --help에 소스 경로를 자동으로 붙이는 메타 트릭, UTF-8 강제(윈도우 호환), Ctrl-C를 exit 130으로 처리하는 견고한 최상위 에러 핸들링도 좋은 교재다.
hello·bye 두 서브명령을 가진 미니 Click CLI를 만들되, 각각 무거운 라이브러리를 import하는 척(예: import time; time.sleep)하게 한 뒤, LazyGroup으로 바꿔 --help 속도 차이를 체감해보자.
"프로젝트 뼈대를 찍어내는 도구"를 만드는 법. {{cookiecutter.agent_directory}} 같은 변수와 {%- if deployment_target == "cloud_run" %} 같은 조건 블록으로, 하나의 템플릿이 사용자 선택에 따라 다른 결과물을 낳는다. 선택값을 manifest.yaml로 저장해 두면 나중에 "업그레이드"도 가능하다는 설계가 특히 배울 만하다.
cookiecutter로 "FastAPI 또는 Flask를 고르면 그에 맞는 app.py와 Dockerfile이 나오는" 미니 템플릿을 만들어보자. 선택값을 .mychoice.yaml로 남기고, 두 번째 실행 때 그 값을 읽어오게 한다.
스캐폴드가 찍어주는 에이전트 코드 자체가 ADK 입문서다. Agent(이름·모델·지시문·도구), App(루트 에이전트를 감싸는 실행 단위), Gemini(모델 + 재시도 옵션), 함수 도구(tools=[get_weather, ...])의 조립을 보여준다.
# scaffold/agents/adk/app/agent.py (Jinja2 템플릿)
root_agent = Agent(
name="root_agent",
model=Gemini(model="gemini-flash-latest",
retry_options=types.HttpRetryOptions(attempts=3)),
instruction="You are a helpful AI assistant ...",
tools=[get_weather, get_current_time],
)
app = App(root_agent=root_agent, name="{{cookiecutter.agent_directory}}")
도구 함수 하나(def get_time(): ...)를 더 만들어 tools=에 추가하고, 지시문을 바꿔 "한국어로만 답하는 에이전트"로 개조해보자. 로컬 키(AI Studio)만으로 run 가능.
agents-cli의 진짜 차별점. "만들고 끝"이 아니라 측정→개선 루프를 코드로 제공한다. eval generate(데이터셋으로 에이전트 추론 → 트레이스) → eval grade(LLM 심판이 메트릭으로 채점) → eval dataset synthesize(LLM이 가상 사용자로 멀티턴 시나리오 생성) → eval compare(두 결과 비교) → eval analyze(실패 군집화) → eval optimize(평가 데이터로 프롬프트 자동 튜닝).
에이전트 품질을 "감"이 아니라 시험 점수로 다룬다. 문제집(dataset)을 만들고 → 에이전트가 풀게 하고 → 채점하고(LLM 심판) → 틀린 유형을 모아 보고 → 프롬프트를 고쳐 점수를 올린다. 머신러닝의 "train/eval" 루프를 에이전트에 옮긴 것.
질문 5개짜리 작은 eval 데이터셋(JSON)을 만들어 eval generate → eval grade를 돌려보고, 지시문을 한 번 바꾼 뒤 eval compare로 점수 변화를 확인해보자.
같은 에이전트를 cloud_run·agent_runtime·gke 세 환경에 올려보며 차이를 익힌다. uv sync --frozen으로 빌드해 uvicorn으로 8080에 서빙하는 컨테이너, Terraform의 Workload Identity Federation·Cloud Build, 그리고 publish가 REST로 Gemini Enterprise에 A2A 에이전트 카드를 등록하는 흐름까지. 엔터프라이즈 네트워킹(PSC, DNS 피어링) 옵션도 노출된다.
# scaffold/base_templates/python/Dockerfile
FROM python:3.12-slim
RUN pip install --no-cache-dir uv==0.8.13
RUN uv sync --frozen
CMD ["uv","run","uvicorn","{{cookiecutter.agent_directory}}.fast_api_app:app",
"--host","0.0.0.0","--port","8080"]
GCP 무료 크레딧으로 deploy --deployment-target cloud_run을 먼저 성공시키고, 같은 프로젝트를 agent_runtime으로도 배포해 둘의 로그·트레이스 차이를 비교해보자.
로컬 실습은 가볍다 — GPU도, 무거운 서버도 필요 없다.
| 구분 | 요구사항 |
|---|---|
| 운영체제 | 크로스 플랫폼 (Linux · macOS · Windows). UTF-8 stdout 강제로 윈도우도 배려) |
| 필수 런타임 | Python 3.11+ · uv(Astral) · Node.js(스킬 설치용) |
| 로컬 개발(만들기·실행·평가) | GCP 불필요 — AI Studio API 키(GEMINI_API_KEY)만 있으면 create·run·eval 동작 |
| 배포 시 | Google Cloud 프로젝트 + 결제 + gcloud. Cloud Run/GKE는 Docker·kubectl·terraform 추가 |
| 하드웨어 | 일반 노트북으로 충분. 모델 추론은 클라우드(Gemini)에서 일어나므로 로컬 GPU 불필요 |
| 인증 3종 | ① gcloud ADC(기본 자격증명) · ② AI Studio 키 · ③ Express/Vertex API 키. 코드가 GOOGLE_GENAI_USE_VERTEXAI를 적절히 토글 |
"배우는 단계"는 노트북 + 무료 AI Studio 키면 끝이다. GCP 결제·배포는 "실제로 클라우드에 올릴 때"만 필요하다. 입문 장벽이 낮게 설계돼 있다.
난이도별 5단계 — 위에서부터 차례로.
uvx google-agents-cli setup으로 CLI+스킬을 설치하고(또는 npx skills add google/agents-cli), agents-cli scaffold create my-first-agent로 프로젝트를 만든 뒤, AI Studio 키를 넣고 agents-cli run "안녕"으로 로컬 실행까지 성공시키기. 목표: 4개 이름(repo/PyPI/명령/import)이 같은 물건임을 몸으로 익히기.
skills/google-agents-cli-scaffold/SKILL.md를 열어 머리말(name·description·metadata)과 본문 가드레일을 분석한다. 그다음 트리거 문구 3개 + "Do NOT use for …" 1줄이 들어간 내 SKILL.md를 작성해 npx skills add ./내스킬로 꽂고, 트리거 문구로 호출되는지 확인. 목표: 스킬이 "에이전트용 매뉴얼"임을 이해.
질문 5개짜리 eval 데이터셋을 만들어 eval generate → eval grade로 점수를 내고, eval analyze로 실패 유형을 본다. 지시문(instruction)을 한 번 고친 뒤 eval compare로 전/후 점수를 비교. 목표: 에이전트 품질을 "감"이 아니라 "숫자"로 다루는 감각.
GCP 무료 크레딧으로 deploy --deployment-target cloud_run을 성공시키고, 이어서 agent_runtime으로도 배포한다. 두 배포의 Dockerfile/서빙 방식, Cloud Trace·Cloud Logging 출력을 비교. 목표: "서버리스 컨테이너 vs 관리형 리즈닝 엔진"의 차이를 체감.
(A) publish gemini-enterprise로 Agent Runtime 배포를 등록하고 A2A 에이전트 카드가 어떻게 만들어지는지 추적한다. 또는 (B) _click.py의 LazyGroup을 읽고, 새 서브명령 하나(agents-cli hello)를 add_lazy_command로 추가해본다. 목표: 등록 프로토콜(A2A) 또는 CLI 아키텍처를 직접 손대보기.
이 저장소를 출발점으로, 6주 코스.
| 주차 | 주제 | 핵심 키워드 · 할 것 |
|---|---|---|
| 1주차 | 파이썬 CLI + uv | Click(그룹·옵션·LazyGroup), uv/uvx 패키지·실행, rich 출력. → LEVEL 1·2 실습 |
| 2주차 | 에이전트 스킬 생태계 | SKILL.md 포맷, npx skills(vercel-labs/skills), Claude Code 플러그인·Gemini CLI 확장. 다른 트렌딩 스킬 레포(addyosmani/agent-skills 등)와 비교 |
| 3주차 | Google ADK 기초 | Agent·App·Gemini·tools, 함수 도구, 멀티에이전트. agentic_rag 템플릿 분석 |
| 4주차 | 평가 주도 개발 | LLM-as-judge, 데이터셋 합성, 메트릭, 실패 군집화, 프롬프트 자동 최적화. Vertex AI Eval Service |
| 5주차 | GCP 배포·IaC | Cloud Run·Agent Runtime·GKE, Dockerfile(uv), Terraform, Workload Identity Federation, Cloud Build |
| 6주차 | A2A·엔터프라이즈·관측 | A2A 프로토콜·에이전트 카드, Gemini Enterprise 등록, Cloud Trace/Logging, BigQuery 에이전트 분석 |
문서·코드에서 계속 마주칠 용어들.
Agent/App/Gemini/tools로 에이전트를 조립한다. Python·TS·Go·Java 지원. agents-cli가 만드는 모든 결과물의 토대.--deployment-target agent_runtime. 인프라를 직접 관리하지 않아도 되는 가장 "매니지드"한 선택.publish가 이 카드를 만들어 Gemini Enterprise에 등록한다.uvx는 "설치 없이 패키지를 즉석 실행"(npx의 파이썬판). agents-cli는 시작 시 uv를 필수로 요구하고, 컨테이너 빌드도 uv sync --frozen을 쓴다.npx skills add google/agents-cli 한 줄로 Claude Code·Codex 등 감지된 IDE에 스킬을 배포한다. agents-cli의 setup이 내부적으로 이걸 호출.{{변수}}·{%- if %}로 사용자 선택에 따라 다른 파일을 찍어낸다. agents-cli의 4언어×4배포타깃 스캐폴딩이 전부 이 방식.--help는 짧은 설명만 읽어 import 0회. 명령이 많은 CLI의 필수 최적화.더 깊이 파고들기 위한 공식 자료.