소개
gw는 Gradle 출력을 필터링하여 AI 코딩 에이전트가 이해하기 쉬운 형태로 제공하는 명령줄 도구입니다. AndVl1이 GitHub에서 공개한 MIT 라이선스 프로젝트로, ./gradlew를 감싸 데몬 배너와 같은 잡음을 제거하고 오류·경고·빌드 상태만 전달하도록 설계되었습니다. Claude Code, Gemini CLI, Cursor 등 다양한 AI 코딩 에이전트와 연동되는 것이 주목적입니다.
상세정보
출력 필터링과 신호 전달
Kotlin `e:`, Java `error:`, Lint 오류, FAILURE 블록, 테스트 실패와 그 30줄짜리 들여쓴 스택트레이스, BUILD SUCCESSFUL/FAILED 메시지를 stdout으로 그대로 흘려보냅니다. 그 외 daemon lifecycle, 의존성 다운로드, `> Task :foo`(UP-TO-DATE/FROM-CACHE/SKIPPED/NO-SOURCE 포함), `> Configure project`, Deprecated Gradle features 배너는 제거되며, 들여쓴 연속 줄도 leak 방지를 위해 함께 잘라냅니다. `w:` Kotlin/Java/Lint 경고는 기본적으로 개수만 집계해 요약에 표시하고, –warnings 플래그를 주면 함께 스트리밍합니다. PASSED/SKIPPED 테스트도 개수만 집계합니다.
하트비트와 최종 요약
빌드가 진행되는 동안 약 3초마다 stderr로 `▸ :app:compileKotlin (45s) [12 tasks]` 형태의 하트비트를 출력합니다. 활성 태스크, 경과 시간, 누적 태스크 진행률, 단일 태스크가 GW_HEARTBEAT_SLOW_SECS(기본 60초)를 넘으면 `— slow` 마커가 표시됩니다. 종료 시 stderr에는 태스크/테스트/에러·경고/디프레케이션 집계와 함께 풀 로그 경로가 한 블록으로 출력되며, 전체 로그는 ./build-logs/gw-.log에 항상 보존돼 필요할 때 내려가서 볼 수 있습니다.
AI 코딩 에이전트 연동
`gw init`은 멱등 동작으로 에이전트의 설정 파일에 훅을 패치합니다. 기본 대상은 Claude Code(PreToolUse 훅 + .claude/rules/gw.md 룰 파일)이며, –gemini-cli, –cursor, –opencode, –agent codex, –kilocode, –cline, –windsurf, –antigravity, –copilot 옵션으로 다른 에이전트로 확장하거나 여러 에이전트를 한 번에 지정할 수 있습니다. Cursor처럼 인밴드 rewrite가 없는 에이전트는 훅이 호출을 거절하고 `gw ` 접두를 붙여 재시도하도록 userMessage로 안내하며, 그 외 훅 기반 에이전트는 호출을 투명하게 자동 재작성합니다. 룰 기반 에이전트에는 ` `/` ` 마커 블록만 설치돼 업데이트나 제거 시 주변 내용이 보존됩니다. –local 옵션은 .claude/settings.local.json 같은 프로젝트 로컬 파일에 패치합니다. 명령 한 줄로 끝까지 확인할 수 있는 진단과 업그레이드 명령도 제공됩니다.
- `gw doctor` — 전역·로컬 양쪽에 걸친 모든 지원 에이전트의 훅 설치 상태를 읽기 전용으로 점검(✓ 설치, ⚠ 레거시, ✗ 파일은 있지만 훅 없음, − 파일 없음).
- `gw upgrade` — 이미 연결된 (에이전트, 스코프) 조합에만 설치 흐름을 재적용해 디스크 레이아웃을 최신으로 마이그레이션.
호출 재작성 규칙
훅은 선행하는 sudo/env/nice/time과 VAR=value 환경 접두를 제거한 뒤, `gradlew` 토큰을 단어 경계로 매칭하는 명령일 때만 `gw `를 앞에 붙입니다. ./mygradle처럼 부분적으로만 겹치는 이름은 건드리지 않고, 이미 `gw `로 시작하는 명령은 다시 쓰지 않습니다.
gw는 어떻게 설치하나요?
Windows에서는 winget으로 winget install --id AndVl1.gw --exact, PowerShell에서는 공식 install.ps1을 irm | iex로 내려받습니다. macOS/Linux는 curl 원라인 스크립트, Homebrew(brew tap AndVl1/tap && brew install gw), cargo install, 사전 빌드 tar.gz 중 하나를 선택할 수 있습니다.
설치 후 무엇을 실행해야 하나요?
사용할 AI 코딩 에이전트의 훅을 연결하기 위해 gw init(기본은 Claude Code)을 실행합니다. 다른 에이전트는 gw init --gemini-cli, gw init --cursor, gw init --opencode, gw init --agent codex --local처럼 지정하거나 gw init --all --local로 한 번에 설치할 수 있습니다.
훅이 실제로 적용됐는지 어떻게 확인하나요?
gw doctor를 실행하면 전역·로컬 양쪽의 모든 지원 에이전트 상태(설치/레거시/훅 누락/파일 없음)가 표시됩니다. 종료 코드는 원본 명령과 동일하게 유지됩니다.
업데이트나 레이아웃 변경은 어떻게 따라가나요?
이미 연결된 (에이전트, 스코프) 조합에만 새 설치 흐름을 다시 적용하는 gw upgrade를 사용합니다. 한 번도 설치하지 않은 대상은 건드리지 않습니다. 제거할 때는 gw uninstall(전역 Claude Code)이나 gw uninstall --gemini-cli --cursor, gw uninstall --all --local로 정리합니다.
어떤 출력이 제거되고 어떤 출력이 전달되나요?
데몬 lifecycle, 의존성 다운로드, `> Task :foo`, `> Configure project`, Deprecated Gradle features, 경고, 통과/스킵된 테스트는 기본적으로 제거되거나 개수만 집계됩니다. Kotlin/Java/Lint 컴파일 오류, FAILURE 블록, 테스트 실패와 그 스택트레이스, BUILD SUCCESSFUL/FAILED는 그대로 전달됩니다.
시스템 요구사항
Gradle 프로젝트(gradlew 스크립트가 존재하는 환경)에서 동작합니다. winget 설치 경로는 Windows 운영체제(x64 아키텍처)를 기준으로 합니다. 소스에서 직접 빌드하려면 Rust(cargo)가 필요합니다.


