Antigravity CLI로 댓글 모니터링하기: 설정 방법과 실측 데이터
Antigravity CLI로 YouTube와 Bilibili 댓글을 24시간 순찰합니다. 실측 결과 댓글 100개는 최근 5시간 분량이었고, 하루 API 비용은 $0.023입니다.

영상이 공개된 후 첫 24시간이 댓글 창의 분위기를 결정합니다. 사람이 빨리 확인해야 하는 댓글은 세 종류입니다. 불만, 실제 질문, 그리고 답하지 않고 두면 냉담한 인상을 줄 수 있는 댓글입니다. 이 가이드에서는 Gemini CLI를 대체한 Google의 터미널 에이전트 Antigravity CLI로 댓글 순찰을 구축합니다. 명령어는 agy입니다. 몇 시간마다 시스템 타이머가 agy -p를 실행하면, 에이전트가 새 댓글을 가져와 짧은 보고서를 작성합니다.
댓글 데이터는 EveryInfra 원격 MCP 서버에서 가져옵니다. YouTube에는 youtube/comments와 youtube/video를, Bilibili에는 bilibili/comments, bilibili/danmaku, bilibili/video를 사용합니다. 데이터 처리 부분은 2026년 11월 3일 싱가포르 시간(SGT) 00:17부터 01:22까지 실제로 실행했습니다.
댓글이 활발한 영상 2개를 대상으로 순찰을 3회 진행했으며, 유료 호출 20회에 API 비용은 총 $0.01137였습니다. 테스트 머신에는 Antigravity CLI가 설치되어 있지 않습니다. 따라서 아래의 mcp_config.json, 스킬, 타이머 스크립트는 모두 공식 문서를 바탕으로 한 설정 예시입니다. agy를 직접 실행하지는 않았습니다.
이 가이드의 일부 수치는 어떤 문서에도 나오지 않습니다. 한 YouTube 영상은 공개 23.6시간 후 댓글이 1,546개였습니다. 호출당 최대치인 최신 댓글 100개는 최근 5시간 분량에 불과했습니다. 27분 뒤 두 번째 회차에서는 100개 중 새 댓글이 9개뿐이었습니다. Bilibili에서는 한 영상이 공개 3시간도 되지 않아 댓글 4,075개를 기록했습니다.
댓글 엔드포인트는 세 회차에서 인기 댓글을 각각 3개, 10개, 3개 반환했습니다. 키워드 사전 필터가 YouTube 댓글 100개 중 34개를 표시했지만, 크리에이터가 시간을 들일 만한 댓글은 13개뿐이었습니다. 2시간마다 1회 순찰하면 하루 API 비용은 $0.023입니다. 모델 비용은 Gemini 3.8 Flash API 공개 가격 기준 약 $0.103이며, 대부분이 고정 프롬프트 오버헤드입니다.

해야 할 일: 24시간 댓글 순찰이 잡아내야 하는 것
새 영상에 달리는 댓글 대부분은 조치가 필요 없습니다. 이모지, 농담, "1등", 팬들의 잡담이 대부분을 차지합니다. 순찰의 목적은 조치가 필요한 소수의 댓글을 찾아 한 화면에 보여 주는 것입니다. 소셜 미디어 담당자는 휴대폰으로 2분 안에 보고서를 읽을 수 있어야 합니다. 실제 문제 3건을 찾으려고 YouTube Studio에서 댓글 1,500개를 스크롤하는 일은 없어야 합니다.
상태가 서로 다른 영상 2개를 골랐습니다. YouTube 영상은 Linus Tech Tips의 "GTA 6 on PC May be Coming Sooner than We Thought"입니다(영상 페이지). 11월 2일 00:45 SGT에 공개되었습니다. 첫 수집 시점에 공개 23.6시간째였으며, 조회수 794,104회, 댓글 1,546개였습니다.
Bilibili 영상은 DeepSeek Harness 계정의 첫 업로드로, 11월 2일 21:28 SGT에 게시되었습니다(영상 페이지). 첫 수집 시점에 공개 2.9시간째였으며, 조회수 225,698회, 댓글 4,075개, 탄막 342개였습니다. 한 영상은 24시간 구간의 끝에 가까웠고, 다른 영상은 시작에 가까웠습니다.
| 보고서 1행 | 출처 필드 | 비고 |
|---|---|---|
| 댓글 ID, 플랫폼, 영상 | youtube/comments 또는 bilibili/comments의 id와 video_id | ID는 남기고 사용자 이름은 제외 |
| 본문(200자로 자름) | text | 탄막은 별도 열에 기록 |
| 시간 구간 | YouTube는 "2 hours ago" 형식, Bilibili는 ISO 시간 | YouTube 라벨은 수집 시점에 변환 |
| 참여도 | like_count, reply_count | 새 댓글은 대개 0 |
| 카테고리 | 스크립트 사전 필터 + 모델 검토 | 불만, 질문, 답글 필요, 기타 |
| 심각도와 답글 초안 | JSON 스키마에 따른 모델 출력 | 고위험 항목은 초안 없이 사람에게 전달 |
Antigravity CLI란 무엇이며, 이 작업에 필요한 네 가지 기능은 무엇인가
"antigravity cli"를 검색하는 사람 중 상당수는 아직도 이것이 Gemini CLI의 새 이름이라고 생각합니다. 실제로는 다른 도구입니다. 2026년 5월 19일 Google Developers Blog는 개인 사용자를 대상으로 Gemini CLI에서 Antigravity CLI로 전환한다고 발표했습니다(Google Developers Blog). 새 도구는 같은 날부터 누구나 사용할 수 있었습니다.
6월 18일부터 Gemini CLI와 Gemini Code Assist IDE 확장 프로그램은 Google AI Pro, Ultra, 무료 사용자에게 서비스를 중단했습니다. Gemini Code Assist 엔터프라이즈 라이선스나 유료 API 키를 보유한 조직은 계속 사용할 수 있습니다. 같은 일정이 GitHub discussion #27274에도 나와 있습니다.
블로그 게시물에 따르면 팀은 도구를 Go로 다시 작성했고 명령어 이름을 agy로 정했습니다. 에이전트 스킬, 훅, 서브에이전트, 확장 프로그램은 유지되지만, 확장 프로그램은 이제 플러그인이라고 부릅니다. CLI는 Antigravity 2.0 데스크톱 앱과 같은 에이전트 코어를 공유합니다. 이 가이드와 관련해 중요한 사실이 두 가지 있습니다.
첫째, Antigravity CLI는 클로즈드 소스입니다. google-antigravity/antigravity-cli 저장소에는 코드가 아니라 설치 안내, 릴리스 노트, 토론만 있습니다. 따라서 이 가이드에서 설명하는 동작은 모두 공식 문서와 릴리스 노트에 근거합니다.
둘째, CLI는 빠르게 바뀝니다. GitHub releases API에는 2026-10-06의 1.3.0부터 2026-10-30(UTC)의 1.4.12까지 20개 릴리스가 있습니다(1.4.12 릴리스 노트). 중간 버전으로는 2026-10-16의 1.4.0, 2026-10-21의 1.4.4, 2026-10-27의 1.4.8, 2026-10-29의 1.4.10이 있습니다. 하루나 이틀에 한 번꼴로 릴리스가 나오는 셈입니다.
| 버전 | 날짜(UTC) | 예약 순찰과 관련된 변경 사항 |
|---|---|---|
| 1.2.9 | 2026-09-23 | 헤드리스 모드가 --print-timeout(최대 30분)까지 백그라운드 작업을 기다림 |
| 1.2.10 | 2026-09-24 | 스트리밍 응답이 도중에 실패하면 종료 코드 3으로 종료 |
| 1.3.4 | 2026-10-13 | 헤드리스 모드에서 알 수 없는 --agent 이름은 종료 코드 1로 종료 |
| 1.3.6 | 2026-10-15 | 헤드리스 모드에서 서브에이전트의 질문을 건너뜀 |
| 1.4.7 | 2026-10-24 | -p 실행 시 CPU 사용량 감소, 10 KB 이하의 MCP 결과는 에이전트에 바로 전달 |
| 1.4.11 | 2026-10-30 | JSON 출력에 finished_reason 추가 |
아래 예시를 복사하기 전에 로컬의 agy --version을 문서와 대조해 확인하세요.
| 이 작업에 쓰는 기능 | 문서 내용 | 출처(2026-11-03 확인) |
|---|---|---|
헤드리스 모드 agy -p | 프롬프트 하나를 실행하고 결과를 출력한 뒤 종료. --output-format json은 status와 usage가 담긴 엔벌로프를 반환. --json-schema는 구조화된 출력을 강제 | Headless mode |
| 원격 MCP | 서버는 mcp_config.json에 설정. 원격 서버는 serverUrl과 headers를 사용. enabledTools로 일부 도구만 노출 | MCP 문서, 마이그레이션 가이드 |
| 에이전트 스킬 | 워크스페이스 스킬은 .agents/skills/에, 전역 스킬은 ~/.gemini/skills/ 또는 ~/.gemini/antigravity-cli/skills/에 저장 | 에이전트 스킬 |
| 예약 실행 | /schedule은 현재 대화 안에서만 동작. Sidecars는 세션을 넘어 실행되지만 데스크톱 앱용으로 표시됨. CLI는 OS 타이머로 실행 가능 | /schedule, Sidecars |
Antigravity CLI MCP 설정: mcp_config.json의 위치와 작성 내용
Antigravity CLI는 MCP 서버 설정을 기본 설정 파일에서 mcp_config.json으로 옮겼습니다. 전역 파일은 ~/.gemini/config/mcp_config.json입니다. 프로젝트 파일은 프로젝트 루트의 .agents/mcp_config.json에 둡니다(마이그레이션 가이드, "MCP config formatting changes"). 원격 서버의 주소 키는 Gemini CLI의 url 또는 httpUrl에서 serverUrl로 바뀌었습니다.
MCP 문서에 따르면 url도 사용할 수 있습니다. 인증 정보는 사용자 지정 headers에 넣습니다. enabledTools 키는 허용 목록이므로, 에이전트는 해당 서버의 다른 도구를 볼 수 없습니다. timeoutSeconds 키의 기본값은 연결 300초, 도구 호출당 180초입니다(MCP 문서, "MCP configuration properties").
순찰 프로젝트용 예시입니다. .agents/mcp_config.json에 넣으세요:
{
"mcpServers": {
"everyinfra": {
"serverUrl": "https://api.everyinfra.com/mcp",
"headers": { "Authorization": "Bearer <your EveryInfra API key>" },
"enabledTools": ["everyinfra_call_api", "everyinfra_get_job", "everyinfra_list_capabilities"],
"timeoutSeconds": 120
}
}
}각 줄은 의도적으로 선택한 것입니다. enabledTools에는 도구 3개만 남겼습니다. 11월 3일 00:22 SGT에 키 없이 tools/list를 호출했을 때 EveryInfra MCP 서버에는 도구가 12개 있었습니다. 계정 조회, 지원 티켓 등 여러 도구는 순찰과 무관합니다. 불필요한 도구는 컨텍스트를 차지하고, 모델이 잘못 선택할 여지를 하나 더 만듭니다.
timeoutSeconds는 180이 아닌 120으로 설정했습니다. 가장 느린 동기 호출은 인기순으로 정렬한 YouTube 댓글 50개로, 70.48초가 걸렸습니다. 85초를 넘길 수 있는 호출에는 요청에 "mode":"async"를 추가하고 everyinfra_get_job을 폴링하세요. 폴링은 무료입니다. 타임아웃을 계속 늘리지는 마세요.
가장 주의해야 할 줄은 키입니다. 공식 원격 서버 예시는 Bearer YOUR_API_TOKEN을 headers에 그대로 넣습니다. 문서에는 headers가 ${ENV_VAR}를 확장한다는 내용이 없습니다. 이전 Gemini CLI 문서에서는 헤더에서 $VAR_NAME과 ${VAR_NAME}을 지원했습니다(Gemini CLI MCP 문서).
한 Reddit 사용자는 Antigravity가 ${MY_VAR}를 문자열 그대로 전송한다고 보고했습니다(r/google_antigravity 스레드). 문서에 별도 설명이 나오기 전까지는 확장되지 않는다고 가정하세요. 키를 전역 파일에 넣고 본인만 읽을 수 있게 하거나, 프로젝트 파일을 쓰되 .agents/mcp_config.json을 .gitignore에 추가하세요. 절대 커밋하지 마세요.
두 번째 파일은 권한 설정입니다. MCP 문서에 따르면 규칙이 없는 MCP 도구의 기본값은 "Ask"이므로, 호출할 때마다 사람의 승인을 기다립니다. 허용 규칙은 mcp(server/tool) 또는 mcp(server/*) 형태입니다(MCP 문서, 권한, 권한 문서). 헤드리스 모드에서는 아무도 승인하지 않습니다. 따라서 ~/.gemini/antigravity-cli/settings.json에 규칙을 미리 작성합니다:
{
"permissions": {
"allow": [
"mcp(everyinfra/everyinfra_call_api)",
"mcp(everyinfra/everyinfra_get_job)",
"mcp(everyinfra/everyinfra_list_capabilities)",
"write_file(reports/)"
]
}
}mcp(everyinfra/*)도, --dangerously-skip-permissions도 사용하지 않습니다. 와일드카드보다 이름으로 지정한 허용 목록이 더 안전합니다. 나중에 서버에 도구가 추가되어도 이름으로 지정한 규칙에는 포함되지 않습니다. 다른 Reddit 사용자가 바로 이 단계에서 문제를 겪었습니다. MCP 서버는 연결됨으로 표시되었지만, 에이전트는 서버에 접근할 수 없다고 응답했습니다.
해결책은 /permissions에서 명시적으로 허용하는 것이었습니다. 이 사용자는 설정이 ~/.gemini/config/가 아니라 ~/.gemini/antigravity-cli/ 아래에 작성된 것도 발견했습니다(r/google_antigravity, "Antigravity CLI MCP Servers Pain"). 설정을 마친 후 대화형 CLI를 한 번 여세요. /mcp로 서버 상태를 확인하고, 이어서 /permissions로 규칙을 확인합니다. 두 확인을 모두 통과한 후에만 타이머에 작업을 맡기세요.
실제 왕복 1회: 에이전트가 보내는 요청과 돌아오는 응답
agy를 실행할 수는 없었지만, agy가 원격 MCP 서버에 보내는 요청은 표준 MCP 메시지입니다. 클라이언트는 먼저 tools/list로 도구 카탈로그를 요청한 뒤 필요에 따라 tools/call을 보냅니다. MCP 사양에서는 이 전송 방식을 Streamable HTTP라고 부릅니다. 클라이언트가 JSON-RPC 메시지 하나를 POST하면 서버는 JSON 또는 SSE 스트림으로 응답합니다(MCP 사양 2026-07-28, "Transports"). 그래서 클라이언트를 거치지 않고 같은 요청을 EveryInfra MCP 엔드포인트로 직접 보냈습니다.
여기서 보는 것은 서버가 에이전트에 보내는 원본 응답입니다. 에이전트가 실제로 읽는 내용은 CLI가 바꿀 수 있습니다. 예를 들어 1.4.7 릴리스 노트에 따르면 10 KB를 넘는 도구 결과는 파일로 저장됩니다. 이 계층은 테스트하지 않았습니다.
11월 3일 00:45:27 SGT에 키를 포함해 다음 tools/call을 보냈습니다. YouTube 영상의 최신 댓글 100개를 요청하는 호출입니다:
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "everyinfra_call_api",
"arguments": {
"platform": "youtube",
"action": "comments",
"params": {
"url": "https://www.youtube.com/watch?v=g9IOdTisQyM",
"sort": "newest",
"limit": 100
}
}
}
}서버는 30.99초 후 HTTP 200으로 응답했습니다. MCP는 실제 처리 결과를 result.content[0].text에 33,915바이트 크기의 JSON 문자열로 감싸 반환합니다. 그 안에는 platform, action, count, results, billing이 있습니다. count는 100, billing.charged_usd는 0.000556이었습니다. 첫 번째 댓글은 3분 전에 작성된 것이었습니다.
한 시청자는 자신의 PC 사양을 나열하며 영상에서 말한 "평균적인 게이머 PC"가 다소 높게 잡혔다고 했습니다. 두 번째 댓글은 9분 전에 작성된 것으로, 에뮬레이터로 게임 리메이크를 끝까지 플레이한 경험을 적었습니다. 아래 스크린샷은 실제 응답 중 두 행을 보여 줍니다. 사용자 이름은 가렸고 본문은 짧게 잘랐습니다.

설정 파일을 작성할 때 이 응답 크기를 고려하세요. Antigravity CLI 1.4.7 릴리스 노트에 따르면 온디맨드 MCP 결과는 10 KB까지 에이전트에 바로 전달됩니다. 그보다 큰 결과는 파일로 저장되며, 에이전트가 별도 단계에서 그 파일을 읽어야 합니다(1.4.7 릴리스 노트). 댓글 100개로 구성된 한 페이지는 약 33 KB이므로 항상 파일로 저장됩니다.
순찰에는 오히려 유리합니다. 어차피 원본 응답은 디스크에 남겨 두는 편이 좋습니다. 스킬은 33 KB의 JSON을 컨텍스트로 읽어 들이는 대신 파일을 dedupe.py에 넘기라고 에이전트에 지시합니다.
MCP를 건너뛰고 REST 엔드포인트를 호출할 수도 있습니다. 타이머 스크립트가 agy를 깨우기 전에 데이터를 가져오는 구조라면 이 방법을 쓰세요. 1회차와 3회차에는 이 방법을 사용했습니다. results 배열은 MCP 응답 안의 배열과 형태가 같습니다:
curl -s https://api.everyinfra.com/api/v1/social \
-H "Authorization: Bearer $EVERYINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"platform":"youtube","action":"comments","params":{"url":"https://www.youtube.com/watch?v=g9IOdTisQyM","sort":"newest","limit":100}}' \
> youtube-$(date +%Y%m%d-%H%M).json권장 방식은 이렇습니다. 처음에는 MCP로 시작해 좋은 보고서가 어떤 모습인지 확인하세요. 안정되면 수집과 중복 제거를 스크립트로 옮기고 판단만 모델에 맡기세요. 이유는 사전 필터 섹션에서 설명합니다.
오류 응답도 왕복 과정의 일부입니다. bilibili/comments에 지원하지 않는 sort 파라미터를 보냈습니다. 00:21:33 SGT에 unknown_param과 함께 HTTP 422가 반환되었습니다. 메시지에는 허용되는 파라미터인 url과 limit가 나열되어 있었고, 마지막에 "Nothing was charged."라는 문구가 있었습니다. 모델은 이 메시지를 읽고 잘못된 파라미터를 뺀 뒤 재시도할 수 있습니다.
서버 장애는 다른 형태로 나타납니다. 3회차 01:22:15 SGT에 탄막 호출이 HTTP 503을 반환했고 fault는 service였습니다. 요청 자체에는 문제가 없었다는 뜻입니다. 응답 본문의 retryable은 true, retry_after는 20초였습니다. next_steps 항목에는 이 호출이 과금되지 않았으며 3회 중 1번째 실패라고 적혀 있었습니다. 23초 뒤 같은 요청을 다시 보내자 200과 함께 탄막 100개가 돌아왔고 $0.000556이 과금되었습니다. 타이머 스크립트는 이 필드를 따라야 합니다. retry_after만큼 기다리고, max_retries에 도달하면 멈춘 뒤 보고서에 "이번 회차 Bilibili 탄막 누락"이라고 기록합니다.
원격 MCP 서버를 연결하는 다른 방법은 MCP 서버 가이드와 문서를 참고하세요.
| 이번 왕복 | 실측값 |
|---|---|
| 요청 시각 | 2026-11-03 00:45:27 SGT |
| 도구 | everyinfra_call_api, platform=youtube, action=comments |
| 소요 시간 | 30.99초(동기 방식, 85초 미만이면 바로 반환) |
| 대응 | HTTP 200, count 100, 본문 33,915바이트 |
| 과금액 | $0.000556(billing.charged_usd) |
| 1회차와 비교 | 100행 중 91행은 이전에 확인, 9행은 신규 |
YouTube 댓글 모니터링: 호출당 댓글 100개로 몇 시간 분량을 커버할 수 있을까
순찰 간격은 현실적인 수치 하나에 달려 있습니다. 두 회차 사이에 달리는 새 댓글이 호출 1회로 가져올 수 있는 양을 넘을까요? 카탈로그에 따르면 youtube/comments의 기본값은 20행, 최대값은 100행입니다. 선택 파라미터는 sort(newest 또는 popular)와 since(날짜 필터)입니다.
필드는 id, text, author_name, like_count, reply_count, posted_at, is_reply, reply_to_id입니다. 페이지 파라미터는 없습니다. 따라서 한 회차에서 볼 수 있는 것은 100행이 전부입니다.
1회차는 00:18 SGT에 실행했습니다. 영상은 공개 23.6시간째였고 댓글은 1,546개였습니다. 최신 100개를 요청했고 호출에 22.2초가 걸렸습니다. 가장 최신 행은 "1 minute ago", 가장 오래된 행은 "5 hours ago"였습니다. 공개 첫날이 끝날 무렵, 100행은 최근 5시간 분량에 불과했습니다.
3행은 답글(is_reply true)이었고, 4행에는 "(edited)" 접미사가 붙어 있었습니다. 거꾸로 보면, 이 영상은 공개 18시간째부터 23시간째 사이에도 시간당 약 20개의 댓글이 달렸습니다. 6시간마다 1회 순찰하면 일부 댓글은 두 차례 수집 사이에서 누락되어 끝내 나타나지 않을 수 있습니다.
첫날 이후에도 댓글은 시간당 약 20~45개씩 꾸준히 달렸습니다.
직전 회차 27분 후인 00:45 SGT의 2회차에서 영상의 댓글은 1,557개로 11개 늘었습니다. 최신 100개 중 9개가 새 댓글이었고 91개는 이미 본 댓글이었습니다. 100행은 여전히 최근 5시간 분량에 불과했습니다.
직전 회차 35분 후인 01:20 SGT의 3회차에서 영상의 댓글은 1,583개로 26개 늘었습니다. 최신 100개 중 18개는 앞선 두 회차 모두에 없던 댓글이었고 82개는 이전에 본 댓글이었습니다. 2회차와만 비교하면 19개가 새 댓글이었고 81개가 겹쳤습니다. 100행은 여전히 최근 5시간 분량에 불과했습니다.
새 행의 수는 전체 댓글 수 증가분보다 적습니다. 차이의 일부는 답글로 설명됩니다. 최신 100개 중 답글은 1회차 3개, 2회차 0개, 3회차 1개였습니다. 나머지는 숨겨지거나 접힌 댓글 때문일 수 있습니다. 회차마다 두 수치를 모두 기록하고, 차이가 있으면 보고서에 표시하세요.
sort 파라미터는 간과하기 쉽습니다. 같은 시점에 인기순으로 정렬한 댓글 50개도 가져왔습니다. 이 호출에는 70.48초가 걸려 동기 호출 중 가장 느렸습니다. 인기 댓글 50개와 최신 댓글 100개 사이에 겹치는 행은 하나도 없었습니다.
인기 댓글 중 30행은 답글이었습니다. 라벨은 "9 minutes ago"부터 "23 hours ago"까지였고, 최상위 댓글은 좋아요가 3,500개였습니다. 순찰의 주된 목적은 새 댓글을 하나도 놓치지 않는 것이므로 매 회차 newest를 사용합니다. 인기순은 하루에 한 번 다른 질문, 즉 “지금 어떤 댓글이 분위기를 주도하는가?”에 답하는 데 씁니다.
posted_at 필드는 타임스탬프가 아니라 "N hours ago" 같은 상대 라벨입니다. 스크립트는 수집 시각을 기록하고 각 라벨을 시간 구간으로 변환해야 합니다. 중복 제거는 댓글 id로만 하세요. 시간으로 중복을 판단해서는 안 됩니다.
| 필드 | 1회차 측정값 | 순찰에서의 활용 |
|---|---|---|
id | 고유값 100개, Ugz…AaABAg 형태 | 유일한 중복 제거 키, state/seen-<video ID>.json에 저장 |
text | 전체 본문, 가장 긴 행은 1,876자 | 보고서에는 200자로 잘라 넣고 전체 본문은 로컬에 보관 |
posted_at | "1 minute ago"~"5 hours ago", 4행에 "(edited)" 표시 | 수집 시점에 변환, 수정된 댓글은 내용이 바뀌었을 수 있음 |
like_count, reply_count | 최신 100행 중 좋아요가 있는 행은 3개뿐 | 새 댓글은 아직 반응이 없으므로 반응은 인기순으로 확인 |
is_reply, reply_to_id | 답글 3개 | 답글은 부모 댓글과 함께 읽어야 어조를 오해하지 않음 |
author_name | 있음 | 로컬에서만 사용하고 보고서에는 넣지 않음 |
YouTube 권장 설정: 처음 6시간은 1시간마다, 이후에는 2시간마다 1회 순찰합니다. 한 회차에서 새 행이 정확히 100개라면 보고서 첫 줄에 "이번 회차에서 누락된 댓글이 있을 수 있음"이라고 적으세요. 그런 다음 다음 회차를 앞당겨 실행합니다. 이 규칙은 아래 스킬의 결정 트리에 이미 들어 있습니다. 전체 필드와 파라미터는 YouTube 댓글 API를 참고하세요. 댓글 수와 조회수 합계는 YouTube 동영상 API에서 가져옵니다.
Bilibili: 인기 댓글만 제공되며, 탄막은 보조 신호로 활용
Bilibili 샘플은 막 올라온 영상입니다. DeepSeek Harness 계정은 11월 2일 21:28 SGT에 첫 영상을 게시했습니다. 길이는 200초입니다. 00:20 SGT에 처음 bilibili/video를 호출했을 때 영상은 공개된 지 2.9시간밖에 되지 않았습니다. 그런데도 이미 조회수 225,698회, 좋아요 22,070개, 댓글 4,075개, 탄막 342개를 기록하고 있었습니다. 공개 직후 몇 시간 만에 반응이 폭발하는 영상이야말로 순찰이 가장 필요한 경우입니다.
그런데 00:21 SGT에 bilibili/comments는 1.26초 만에 댓글을 3개만 반환했습니다. 세 개 모두 좋아요 48~212개의 인기 댓글이었습니다. 영상 공개 후 3분에서 131분 사이에 작성된 댓글이었습니다. 00:46 SGT의 2회차에서는 같은 요청이 최대치인 댓글 10개를 반환했습니다.
그중 7개는 처음 보는 댓글이었고, 좋아요는 23개에서 1,100개였습니다. 같은 25분 동안 영상의 댓글 수는 4,075개에서 4,566개로 늘었습니다. 491개 증가로, 시간당 1,000개가 넘는 속도입니다. 01:22 SGT의 3회차에서는 limit를 다시 10으로 지정했지만 3개만 반환되었고, 세 개 모두 이전에 본 댓글이었습니다.
카탈로그는 이 엔드포인트에 대해 분명히 밝히고 있습니다. 기본값은 10, 최대값은 10이며, 더 큰 값은 최대값으로 조정됩니다. 파라미터는 url과 limit뿐입니다. sort 파라미터를 시도했다가 앞서 설명한 422 오류를 받았고, 과금은 없었습니다. 따라서 이 엔드포인트로는 최신 댓글을 시간순으로 가져올 수 없습니다.
이 엔드포인트가 주는 것은 현재 가장 인기 있는 댓글 최대 10개이며, 개수도 매번 다릅니다. 그래도 인기 댓글은 첫인상을 좌우하므로 가치가 있습니다. 부정적인 인기 댓글은 최우선 처리 항목입니다. 하지만 새 댓글을 모두 읽는 것을 대신하지는 못합니다. 보고서에는 "Bilibili: 전체 4,566개 중 인기 댓글 10개 확인"이라고 적어, 누구도 전체를 확인했다고 오해하지 않게 해야 합니다.
탄막은 보조 신호입니다. bilibili/danmaku의 기본값은 50행, 최대값은 200행입니다. 200행을 요청했는데 100행이 반환되었습니다. 영상 시간 기준 0초부터 98초까지 정렬되어 있어, 200초 영상의 앞부분 절반만 커버했습니다. 전송 시각은 21:35~00:19 SGT였습니다.
키워드 규칙은 이 중 29개를 질문으로 분류했습니다. 하지만 29개 중 15개는 "고래?! 고래가 진짜 라이브야?!" 같은, 물음표가 붙은 환호였습니다. 실제 내용은 다른 몇 개의 탄막에 있었습니다. 탄막 4개는 "서바이벌 모드"에 대해 물었고, 1개는 데스크톱 앱을 요청했으며, 1개는 계정을 팔로우하면 무료 토큰을 주는지 물었습니다. 물음표가 있다고 질문인 것은 아니며, 탄막에서는 더욱 그렇습니다.
| 탄막(의역) | 영상 시점(초) | 규칙 라벨 | 검토 결과 |
|---|---|---|---|
| "고래?! 진짜 라이브야?!" | 0~10 | 질문 | 환호, 조치 불필요 |
| "서바이벌 모드 있어요?" | 76 | 질문 | 기능 질문, 반복되는 주제의 일부 |
| "마침 데스크톱 앱 찾고 있었는데" | 8 | 질문 | 기능 질문 |
| "팔로워한테 무료 토큰 줘요?" | 53 | 질문 | 반은 농담, 반은 질문 |
| "진짜 칼퇴하는 거예요?" | 25 | 질문 | 카운트다운 플러그인에 대한 농담 |
서바이벌 모드 주제는 이후 2회차 인기 댓글에서도 나타났습니다. 좋아요 352개를 받은 댓글이 영상에서 서바이벌 모드를 전혀 언급하지 않았다고 지적했습니다. 흩어진 탄막 4개와 인기 댓글 1개가 같은 것을 가리킵니다. 좋은 보고서는 이를 "시청자들이 계속 서바이벌 모드에 대해 묻고 있음"이라는 한 줄로 합칩니다.
2회차 탄막도 98초에서 끝나는 100행이었습니다. 그중 21개가 새 탄막이었고, 전체 탄막 수는 342개에서 388개로 늘었습니다. 3회차도 98초에서 멈췄으며, 새 행은 16개, 전체는 430개였습니다. 이 엔드포인트는 영상 전반부의 첫 탄막 100개를 반환합니다. 새 탄막은 타임라인의 해당 구간에 들어올 때만 나타납니다.
| 기능 | 카탈로그 | 실제 결과 | 순찰에서의 활용 |
|---|---|---|---|
bilibili/video | 조회수, 좋아요, 댓글 수, 탄막 수를 포함한 필드 26개 | 호출 1회에 35.3초, 모든 필드 포함 | 4회차마다 댓글과 탄막 증가 추적 |
bilibili/comments | 기본값 10, 최대값 10, url과 limit만 지원 | 세 회차에서 인기 댓글 3개, 10개, 3개; sort는 422 반환(과금 없음) | 인기 댓글 모니터링: 인기 댓글이 바뀌거나 부정적으로 변하면 보고 |
bilibili/danmaku | 기본값 50, 최대 200 | 200개 요청에 100개 반환, 영상 시간순 정렬, 세 회차 모두 98초에서 멈춤 | 영상의 어느 지점에서 시청자가 환호하거나 질문하는지 확인하고 문제 구간 찾기 |
자신의 Bilibili 계정을 관리하며 모든 댓글이 필요하다면 크리에이터 센터를 이용하세요. 또는 Bilibili 오픈 플랫폼에 신청할 수 있습니다. 이 방법은 개발자 등록, 자격 심사, 앱 심사를 거쳐야 합니다(Bilibili Open Platform). YouTube Data API보다 훨씬 번거롭습니다.
경쟁사 영상이거나 오픈 플랫폼을 사용하지 않는다면 볼 수 있는 범위가 "인기 댓글 + 탄막"뿐임을 감안하고 보고서에 이를 명시하세요. 파라미터 상세는 Bilibili 댓글 API와 Bilibili 탄막 API 페이지에 있습니다. 플랫폼 개요는 YouTube API와 Bilibili API 페이지에서 볼 수 있습니다.
순찰을 스킬로 만들기: .agents/skills/comment-patrol/ 골격
Antigravity에서 스킬은 SKILL.md 파일이 들어 있는 폴더입니다. YAML 헤더에서 필수 항목은 description뿐입니다. name을 생략하면 폴더 이름이 사용됩니다. 에이전트는 매 턴마다 모든 스킬의 이름과 설명만 봅니다. 전체 내용은 스킬이 관련 있어 보일 때만 읽습니다.
문서에서는 이를 점진적 공개(progressive disclosure)라고 부릅니다(Agent skills 문서). 형식은 공개 표준인 Agent Skills를 따릅니다(agentskills.io). 이 표준을 지원하는 다른 도구에서도 경로만 조금 바꾸면 같은 스킬을 사용할 수 있습니다. 문서에는 순찰에 잘 맞는 팁도 두 가지 있습니다. 스크립트를 블랙박스로 취급하고 에이전트가 먼저 --help를 실행하게 하세요. 복잡한 흐름은 결정 트리로 작성하세요.
.agents/
mcp_config.json # remote MCP config from above (keep out of Git)
skills/
comment-patrol/
SKILL.md
scripts/
dedupe.py # reads state/seen.json, keeps only new rows, turns "2 hours ago" into a window
prefilter.py # keyword pre-filter: question, negative, needs reply
resources/
report.schema.json # output schema for --json-schema
state/
seen-<video ID>.json # comment IDs already seen, with first-seen time
reports/
<video ID>-<round>.md---
name: comment-patrol
description: Patrol YouTube and Bilibili comments in the 24 hours after a video goes live. Fetch new comments, dedupe, pre-filter, and flag complaints, questions and comments that need a reply. Use when the user asks for a comment patrol, post-launch monitoring, or a check of the comment section.
---
# Comment patrol
## Each round
1. Read `state/seen-<video ID>.json`. Create it in round 1.
2. Call everyinfra_call_api. Use only these capabilities:
- YouTube: platform=youtube, action=comments, params={url, sort: "newest", limit: 100}
- Bilibili: platform=bilibili, action=comments, params={url}; then action=danmaku, params={url, limit: 200}
- Every 4 rounds: youtube/video and bilibili/video, to record comment_count growth
3. Save each response as-is under `data/<round>/`. Run `python3 scripts/dedupe.py --help`, then use it to keep only new rows.
4. Run `scripts/prefilter.py`. Judge only rows it marks as question, negative or needs-reply, plus any theme you see repeated.
5. Output per `resources/report.schema.json`: category, severity, needs_reply, and a draft reply of at most two sentences. Never promise prices or dates.
## Decision tree
- New YouTube rows = 100 (the per-call cap): comments were missed between rounds. Write "this round may have missed comments" on line 1 and suggest a shorter interval.
- Zero new rows: do not call the model. Write "no new comments".
- Refunds, safety, legal or privacy: severity=high, no draft reply, hand to a human.
- Emoji only, "first", or similar: drop it.
## Never
- Never post a comment or reply from the account. This skill is read-only.
- Never put user names or profile links in the report. Use comment IDs only.왜 모델에게 집계를 맡기지 않고 중복 제거와 사전 필터를 스크립트로 처리할까요? 첫째는 비용입니다. 댓글 100개에 대한 원본 응답은 약 8,075토큰입니다. 2회차에는 새 행이 9개뿐이었으며 약 505토큰이었습니다. 둘째, 처리 과정을 검증할 수 있습니다.
스크립트는 고정된 규칙을 적용하므로 같은 입력을 두 번 넣으면 같은 결과가 나옵니다. 모델은 언어 이해가 필요한 단계에만 쓰세요. report.schema.json 아이디어는 헤드리스 --json-schema에서 나왔습니다. 이 플래그는 스키마 파일 경로를 받습니다. 파싱된 객체는 출력 엔벌로프의 structured_output 필드에 담깁니다(Headless mode, "Structured output with a schema"). 타이머 스크립트는 이 필드만 읽으며, 자유 텍스트에서 표를 파싱하지 않습니다.
사전 필터: 키워드 규칙이 잡아내는 것과 놓치는 것
모델이 댓글을 보기 전에, 1회차에서 수집한 YouTube 댓글 100개에 고정 규칙을 적용했습니다. 규칙은 00:29 SGT에 작성했으며, 이후 데이터를 더 확인한 뒤에도 바꾸지 않았습니다. 물음표나 중국어 의문사가 있거나, how, why, what, is, can 같은 의문사로 시작하면 질문으로 분류합니다. 단어 목록(bad, worst, disappointed, clickbait, scam, broken 등)에 해당하는 단어가 있으면 부정으로 분류합니다.
질문이거나, 좋아요 10개 이상인 부정 댓글이면 답글 필요로 분류합니다. 규칙은 질문 28개와 부정 8개, 총 34개 댓글을 표시했습니다. 탄막 100개에서는 질문 29개를 표시했고 부정은 없었습니다.
| 규칙 | 정의 | YouTube 댓글 100개 중 해당 수 | 탄막 100개 중 해당 수 |
|---|---|---|---|
| 질문 | 물음표, 문장 앞 의문사, 또는 중국어 의문사 | 28 | 29 |
| 부정 | 부정 단어 목록에 있는 단어 포함 | 8 | 0 |
| 답글 필요 | 질문이거나, 좋아요 10개 이상인 부정 댓글 | 28 | 29 |
| 하나라도 해당 | 질문 또는 부정 | 34 | 29 |
그런 다음 표시된 댓글 34개를 모두 직접 읽었습니다. 기준은 이 영상에 관한 댓글이면서 크리에이터가 알아야 하거나 답해야 하는 것입니다. 이 기준을 충족한 것은 13개뿐이었습니다. 나머지 21개는 대부분 수사 의문문과 논쟁이었습니다.
"AI로 만들었으면 뭐 어때?"에는 물음표가 있지만 아무도 답할 필요가 없습니다. 한 댓글은 게스트의 주장을 멍청하다고 하면서 "What"으로 시작해, 규칙이 질문으로 착각했습니다. 유용한 13개는 분명한 유형으로 나뉩니다. 한 시청자는 영상이 왜 30 fps로 업로드되었는지 물었습니다.
두 명은 9:43의 블러 바에 대해 물었습니다. 또 다른 시청자는 영상에서 게임 테스트로 다시 돌아오겠다고 해 놓고 끝내 그러지 않았다고 지적했습니다. 영상이 불법 복제를 조장하는 것 아니냐고 묻는 시청자들도 있었습니다. 이런 댓글이 순찰 보고서 맨 위에 와야 합니다.
규칙이 놓친 부분이 더 중요합니다. 표시되지 않은 댓글 66개에는 반복되는 주제가 최소 세 가지 있었습니다. 첫째, 블러 처리가 누락됐습니다. 댓글 4개에서 게임 폴더를 가린 블러가 잠깐 사라졌다고 지적했습니다.
그중 하나는 팀에 영상 검토를 요청했습니다. 크리에이터가 당장 고쳐야 하는 제작 실수인데, 규칙은 물음표가 있는 2개만 잡았습니다. 둘째, "이건 하이엔드가 아니다"라는 반응입니다. 진행자가 테스트 PC를 "엄청난 하이엔드는 아니다"라고 했고, 댓글 10개가 이에 반박했습니다.
규칙이 잡은 것은 2개입니다. 셋째, 댓글 6개가 PS5 탈옥 영상을 요청했으며, 이는 콘텐츠 주제 아이디어입니다. 규칙은 1개만 잡았습니다.
이 주제들은 댓글을 읽은 뒤에 찾아낸 것이므로 규칙 평가에는 사용하지 않습니다. 다만 한 가지는 분명히 보여 줍니다. 키워드 규칙은 명백한 잡음과 명백한 질문을 가르는 데 능합니다. 물음표 없이 반복되는 의견은 모델이 댓글 묶음을 읽고 주제별로 묶을 때에야 드러납니다.
| 댓글(의역, 사용자 이름 제외) | 규칙 라벨 | 검토 결과 | 보고서에 담을 내용 |
|---|---|---|---|
| 왜 30fps로 업로드했나요? | 질문 | 유용 | 제작상 문제, 고정 댓글로 답변 |
| 9:43에 나오는 블러 바는 뭔가요? | 질문 | 유용, “블러 누락” 주제에 해당 | 높음: 영상에 노출되면 안 되는 내용이 보일 수 있음 |
| 폴더 블러가 안 됐어요, 영상 확인해 주세요 | 미탐지 | 유용, 같은 주제 | 위 행과 병합, 건수 +1 |
| 이게 하이엔드가 아니면 제 PC는 뭔가요? | 미탐지 | 유용, “하이엔드 아님” 주제 | 요약 한 줄: 이 문구에 반박하는 댓글 10개 |
| PS5 탈옥 영상 만들어 주세요 | 미탐지 | 주제 아이디어 | “시청자 요청”에 넣고 답글 불필요 |
| AI로 만들었든 말든 누가 신경 써요?! | 질문 | 유용하지 않음(수사적 질문) | 리포트에서 제외 |
2회차 리포트는 다음과 같은 모습일 수 있습니다. 1·2회차의 실제 응답을 바탕으로 직접 작성한 것으로, 모델 실행 결과가 아니라 목표로 하는 출력입니다:
| 우선순위 | 플랫폼 | 항목 | 근거 | 액션 |
|---|---|---|---|---|
| 높음 | YouTube | 폴더 블러가 잠시 풀림 | 1회차 댓글 4개, 규칙이 잡은 것은 2개 | 9:43 전후 프레임 확인, 재편집 또는 고정 댓글로 안내 |
| 중간 | YouTube | 시청자가 “하이엔드 아님” 문구에 이의 제기 | 1회차 댓글 10개, 2회차 2개 추가 | 테스트 PC에 대한 짧은 안내를 고정 댓글로 게시 |
| 중간 | Bilibili | 시청자가 “생존 모드”에 대해 질문 | 탄막 4개, 좋아요 352개를 받은 인기 댓글 1개 | 고정 댓글로 답변 |
| 낮음 | YouTube | 시청자가 PS5 탈옥 영상을 원함 | 댓글 6개 | 주제 목록에 추가 |
| 정보 | 양쪽 모두 | 이번 회차 수집 범위 | YouTube: 새 행 9개 vs. 총 댓글 수 +11. Bilibili: 4,566개 중 인기 댓글 10개 | 2시간 간격 유지 |
그래서 스킬은 작업을 이렇게 나눕니다. 스크립트는 중복을 제거하고, 이모지만 있는 댓글과 “1등” 댓글을 걸러 내고, 각 행에 규칙 라벨을 붙입니다. 모델은 “이번 회차의 새 댓글과 규칙 라벨”을 받습니다. 모델이 할 일은 오탐 판정을 바로잡고, 같은 주제의 댓글을 건수와 함께 한 줄로 합치고, 주제별 심각도를 정하는 것입니다.
모델에 보내는 데이터는 조금만 늘어나지만, 규칙이 놓친 주제를 찾아냅니다. 2회차에서 이미 그 이유가 드러났습니다. YouTube 새 댓글 9개 중 2개가 “평범한” 테스트 PC가 너무 고사양이라고 다시 지적했습니다. 두 댓글 모두 “하이엔드”라는 단어는 들어 있지 않았습니다.
Antigravity CLI cron: launchd, cron, systemd에서 agy -p 실행하기
Antigravity에는 작업을 예약하는 기본 방법이 두 가지 있습니다. 하지만 서버나 노트북에서 몇 시간마다 순찰을 돌리려는 CLI 사용자에게는 둘 다 맞지 않습니다. /schedule을 쓰면 에이전트가 내장 schedule 도구로 타이머나 5필드 cron 표현식을 설정합니다. 시간이 되면 지시가 우선순위 높은 알림으로 에이전트에게 돌아옵니다. 문서에 따르면 이 예약은 예약을 생성한 대화에 속하며 해당 대화가 끝나면 함께 끝납니다. 세션을 넘나드는 장기 작업에 대해서는 문서가 사이드카를 안내합니다(/schedule 문서).
사이드카는 ~/.gemini/config/sidecars/<name>/sidecar.json에 정의하는 백그라운드 프로세스입니다. "builtin": "schedule"을 지정하면 cron 표현식에 따라 agentapi new-conversation을 호출할 수 있습니다. 하지만 해당 페이지 상단에는 지원 대상으로 Antigravity 데스크톱 앱만 나와 있습니다. 또한 사이드카는 기본적으로 꺼져 있으며, ~/.gemini/config/config.json에서 하나씩 활성화해야 합니다(Sidecars 문서). 남은 선택지는 헤드리스 모드를 실행하는 운영체제 타이머입니다.
| 스케줄러 | 유지 범위 | 실행별 컨텍스트 | 절전 중 동작 | 이 순찰에 적합한가 |
|---|---|---|---|---|
/schedule(CLI 내부) | 현재 대화에서만 | 전체 대화 기록과 함께 재개 | 프로세스가 없으면 실행 안 됨 | 첫 2시간 모니터링에는 충분하지만 24시간은 불가 |
사이드카 + agentapi | 세션 간 유지, 앱이 관리 | 매번 새 대화 | 데스크톱 앱 실행 필요 | 문서상 데스크톱 앱만 지원 |
macOS launchd + agy -p | 시스템 수준, 로그인 후 실행 | 새 프로세스, 상태 없음 | StartCalendarInterval은 깨어날 때 1회 실행 | 적합, Mac에서 권장 |
cron + agy -p | 시스템 수준 | 새 프로세스, 상태 없음 | 절전·종료 중 실행을 건너뛰고 보충 실행 없음 | 서버에서는 충분, 노트북에서는 회차 누락 |
systemd 타이머 + agy -p | 시스템 수준 | 새 프로세스, 상태 없음 | Persistent=true로 부팅 후 보충 실행 | Linux 서버에서 권장 |
절전 열의 내용은 운영체제 문서를 근거로 합니다. Apple에 따르면 cron 작업은 기기가 절전 중일 때 실행되지 않고 다음 예약 시간을 기다립니다. StartCalendarInterval을 쓰는 launchd 작업은 절전 중에 실행 시간을 놓치면 기기가 깨어날 때 실행됩니다. 기기가 꺼져 있을 때는 둘 다 실행되지 않습니다(Apple, “Scheduling Timed Jobs”).
Linux에서 이에 해당하는 기능은 systemd 타이머의 Persistent= 옵션입니다(systemd.timer 매뉴얼). cron 문법과 환경 규칙은 crontab(5)를 참고하세요. cron은 기본적으로 /bin/sh를 사용하고 셸 프로필을 읽지 않으므로 agy의 전체 경로를 적어야 합니다.
다음 launchd 예시는 macOS에서 2시간마다 한 회차를 실행합니다. 파일은 ~/Library/LaunchAgents/에 두세요. 스크립트와 데이터는 데스크톱과 문서 폴더 밖에 두어야 합니다. 그렇지 않으면 macOS 개인정보 보호 기능이 접근을 차단합니다:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.example.comment-patrol</string>
<key>ProgramArguments</key>
<array><string>/Users/you/patrol/run.sh</string></array>
<key>StartCalendarInterval</key>
<array>
<dict><key>Minute</key><integer>5</integer><key>Hour</key><integer>0</integer></dict>
<dict><key>Minute</key><integer>5</integer><key>Hour</key><integer>2</integer></dict>
<!-- the other 10 even hours follow the same pattern, 12 rounds in total -->
</array>
<key>StandardOutPath</key><string>/Users/you/patrol/logs/out.log</string>
<key>StandardErrorPath</key><string>/Users/you/patrol/logs/err.log</string>
</dict></plist>run.sh 스크립트가 Antigravity를 호출하는데, 여기에는 세 가지 함정이 함께 있습니다:
#!/bin/bash
set -uo pipefail
cd /Users/you/patrol
out=$(/usr/local/bin/agy -p "Use the comment-patrol skill on the videos in videos.txt. This is round ${ROUND:-1}." \
--output-format json \
--json-schema .agents/skills/comment-patrol/resources/report.schema.json \
--model gemini-3.8-flash-medium \
--print-timeout 15m 2> logs/last-stderr.log)
status=$(echo "$out" | jq -r '.status')
reason=$(echo "$out" | jq -r '.finished_reason // "complete"')
if [ "$status" != "SUCCESS" ] || [ "$reason" != "complete" ]; then
echo "$(date -u +%FT%TZ) patrol failed: $status $reason" >> logs/alerts.log; exit 1
fi
if grep -qi "permission\|denied" logs/last-stderr.log; then
echo "$(date -u +%FT%TZ) a tool was soft-denied, check permissions.allow" >> logs/alerts.log; exit 1
fi
echo "$out" | jq '.structured_output' > "reports/$(date +%Y%m%d-%H%M).json"
첫 번째 함정은 소프트 거부입니다. 문서에 따르면 헤드리스 모드에는 대화형 프롬프트가 없습니다. 승인이 필요한데 승인을 받을 수 없는 도구는 소프트 거부됩니다. 실행은 계속되고, 프로세스는 0으로 종료되며, 알림은 stderr로 출력됩니다(Headless mode, “Permissions in headless mode”). permissions.allow 규칙이 잘못되어 있으면 모든 예약 실행이 “성공”하고 모든 리포트가 비어 있게 됩니다.
따라서 스크립트는 stderr도 읽어야 합니다. 문서에는 정확한 알림 문구가 나와 있지 않습니다. 저희 스크립트는 키워드로 매칭합니다. 운영에 들어가기 전에 허용 규칙 하나를 일부러 제거하고, 실제 알림을 한 번 확인한 뒤 매칭 조건을 조정하세요.
두 번째 함정은 로그인입니다. 헤드리스 모드는 캐시된 자격 증명을 사용하므로, 먼저 agy를 대화형으로 한 번 실행해 로그인해야 합니다. 터미널도 로그인도 없는 환경에서는 “authentication required” 오류로 실패합니다. README에 따르면 자격 증명은 시스템 키체인에 저장됩니다(GitHub README, “Authentication”). 따라서 launchd 작업은 로그인한 사용자의 세션에서 실행되어야 합니다. LaunchDaemon이 아니라 LaunchAgent를 사용하세요.
세 번째 함정은 타임아웃입니다. --print-timeout의 기본값은 5분입니다. 플랫폼 2개, 여러 번의 호출, 모델 처리까지 거치면 더 오래 걸릴 수 있으므로 예시에서는 15분을 사용합니다. 2026년 10월 30일(UTC)에 출시된 1.4.11 버전은 JSON 출력에 finished_reason을 추가했습니다. 실행이 중간에 끊기면 이 값이 print_timeout이 됩니다.
턴이 정상적으로 끝나면 이 필드는 없습니다(1.4.11 릴리스 노트). 이제 스크립트가 완전한 리포트와 절반짜리 리포트를 구분할 수 있습니다. 이전 수정 사항도 여기서 중요합니다. 2026년 9월 24일에 나온 1.2.10부터는 스트리밍 응답 도중 실패한 -p 실행이 코드 3으로 종료됩니다. 더 이상 성공처럼 보이지 않습니다(1.2.10 릴리스 노트).

24시간 비용: API 요금은 호출당, 모델 사용량은 할당량 또는 토큰 기준
먼저 데이터 쪽부터 보겠습니다. 2026년 11월 3일 기준 카탈로그에서 이 가이드에 나오는 기능 5개의 가격은 모두 호출당 $0.000556입니다. 해당 기능은 youtube/comments, youtube/video, bilibili/comments, bilibili/danmaku, bilibili/video입니다. 카탈로그는 GET https://api.everyinfra.com/api/v1/social/catalog에 공개되어 있으며 키가 필요 없습니다. 실행하는 날에는 항상 여기서 가격을 확인하세요. 순찰 1회차에는 YouTube 최신 댓글 100개, Bilibili 인기 댓글, Bilibili 탄막을 가져오는 핵심 호출 3건이 들어가며, 합계 비용은 $0.001668입니다.
4회차마다 영상별로 상세 정보 호출을 1건 추가해 댓글 증가를 추적합니다. 실패한 호출은 무료입니다. 위에서 본 422 요청도 비용이 들지 않았습니다. 요청 ID로 과금 내역을 대조하려면 실패 요청 환불 내역 대조를 참고하세요.
| 구간 | 24시간 회차 수 | API 호출 | API 요금(정가) | 모델 비용(Gemini 3.8 Flash API 가격 기준 추정) |
|---|---|---|---|---|
| 1시간마다 | 24 | 84 | $0.047 | $0.205 |
| 2시간마다 | 12 | 42 | $0.023 | $0.103 |
| 3시간마다 | 8 | 28 | $0.016 | $0.069 |
| 4시간마다 | 6 | 22 | $0.012 | $0.051 |
| 6시간마다 | 4 | 14 | $0.008 | $0.034 |
모델 열은 추정치이며, 직접 수치를 넣어 볼 수 있도록 계산 방법을 공개합니다. Antigravity 헤드리스 문서에서 한 줄짜리 프롬프트의 JSON 출력은 input_tokens가 10,415입니다. 그중 cache_read_tokens가 8,113이고, output_tokens는 657입니다(Headless mode, “JSON output”). 즉 agy -p를 호출할 때마다 시스템 프롬프트와 도구 정의로 약 1만 토큰이 따라붙습니다.
회차마다 이 고정 입력이 들어가며, 그중 8,113개 토큰에는 캐시 가격을 적용합니다. 여기에 데이터 토큰 약 805개를 더합니다. 2회차의 YouTube 새 댓글 9개에 505개, 지시문과 Bilibili 행에 약 300개입니다. 출력 토큰은 1,500개로 잡습니다.
가격은 2026년 10월 30일에 업데이트된 Gemini API 가격 페이지를 기준으로 합니다. Gemini 3.8 Flash는 입력 토큰 100만 개당 $0.75, 출력 토큰 100만 개당 $3.75, 캐시된 토큰 100만 개당 $0.075입니다. 이 페이지에 따르면 이 가격은 2026년 12월 31일까지 유지되고 2027년 1월 1일부터 두 배가 됩니다(Gemini API pricing). 데이터 토큰은 바이트 수를 4로 나눠 추정합니다. Gemini 문서에 따르면 토큰 1개는 약 4자입니다(Gemini API, “Understand and count tokens”). 이 방법은 영어 댓글에는 잘 맞지만 중국어 텍스트에서는 실제보다 적게 나옵니다.
두 차트를 함께 보세요. 이 작업의 비용은 데이터 자체에서 발생하지 않으며, 댓글 토큰이 주된 비용도 아닙니다. 가장 큰 비용은 매번 agy를 실행할 때 드는 고정 비용입니다. 따라서 다음 순서로 절약하세요.
첫째, 간격을 늘리세요. 2시간마다 1회차를 돌리면 1시간마다 돌릴 때의 절반 비용이 듭니다. 둘째, 스킬의 결정 트리에 따라 새 댓글이 없는 회차에는 모델을 건너뛰세요. 댓글당 필드를 줄이는 것은 그다음입니다.
또한 --model로 순찰을 Flash 등급에 고정하세요. 모델 문서에 따르면 무료 및 Plus 사용자는 Gemini 3.8 Flash만 쓸 수 있고, Gemini 4 Argon은 Pro 또는 Ultra가 필요합니다(Models 문서). 기본 모델이 Argon이면 같은 순찰에 비용이 훨씬 많이 듭니다. 같은 페이지에서 Gemini 4 Argon은 2026년 11월 30일까지 입력 토큰 100만 개당 $2, 출력 토큰 100만 개당 $10입니다. 12월 1일부터는 가격이 두 배가 됩니다.
개인 사용자는 이 토큰 비용을 직접 내지 않습니다. 대신 플랜 할당량을 소모합니다. Antigravity 플랜 문서에는 세 가지 등급이 나와 있습니다. 무료 등급에는 주간 할당량이 있습니다.
Pro 할당량은 5시간마다 갱신되며 주간 한도도 있습니다. Ultra는 한도가 더 높습니다. 자체 키 사용은 지원되지 않습니다(Plans 문서). 2026년 5월 19일 플랜 관련 블로그 글에 따르면 Pro는 월 $20입니다.
이 글에서는 $100 Ultra 등급을 새로 추가하고 기존 $250 Ultra를 $200로 인하한다고 밝혔습니다. Flash와 Pro 모델은 하나의 할당량 풀을 공유하며, 이 풀은 API 가격 기준으로 차감됩니다. $100 등급과 $200 등급은 각각 Pro 할당량의 5배와 20배를 제공합니다(Antigravity 블로그, 2026년 5월 19일). 모델 열은 “이 순찰이 쓰는 할당량을 달러로 환산한 값”으로 읽으세요.
YouTube에는 무료로 쓸 수 있는 방법도 있습니다. commentThreads.list는 호출당 할당량 1단위를 쓰며, 기본 할당량은 하루 10,000단위입니다(commentThreads.list, quota calculator, 2026-10-15 업데이트). API 키로 공개 동영상의 댓글을 읽을 수 있습니다. 보류되었거나 스팸으로 의심되는 댓글에만 동영상 소유자의 OAuth가 필요합니다.
대신 Google Cloud 프로젝트가 필요하고, 할당량과 페이지네이션 로직을 직접 관리해야 하며, Bilibili는 지원되지 않습니다. 연동을 두 번 하지 않고 두 플랫폼을 하나의 리포트로 보고 싶다면 호출당 과금 방식이 더 간단합니다. 전체 가격표는 요금을 참고하세요.
Antigravity CLI vs Gemini CLI: 마이그레이션할 때 바꿔야 할 것
Gemini CLI로 비슷한 타이머 스크립트를 돌렸다면, 바뀌는 부분은 대부분 설정 파일 위치와 키 이름입니다. 워크스페이스 규칙 파일은 그대로입니다. 공식 가져오기 명령 agy plugin import gemini는 기존 확장 프로그램을 플러그인으로 바꾸고 MCP 정의를 mcp_config.json에 기록합니다(마이그레이션 가이드, “Converting extensions to plugins”). agy를 처음 실행하면 기존 설정을 감지해 체크리스트도 보여 줍니다.
하지만 ~/.gemini/settings.json에 직접 적어 넣은 MCP 서버 설정은 따로 확인해야 합니다. 신뢰 설정도 확인하세요. 아래 표는 양쪽 공식 문서를 한 줄씩 비교해 만들었습니다:
| 항목 | Gemini CLI | Antigravity CLI | 대응 방법 |
|---|---|---|---|
| 명령어 | gemini -p | agy -p(별칭 --print, --prompt) | 스크립트의 명령어와 전체 경로 변경 |
| MCP 설정 위치 | ~/.gemini/settings.json의 mcpServers | ~/.gemini/config/mcp_config.json 또는 .agents/mcp_config.json | 새 파일로 이동 |
| 원격 주소 키 | url(SSE) 또는 httpUrl(Streamable HTTP) | serverUrl(url도 사용 가능) | 키 이름 변경 |
| 헤더의 환경 변수 | $VAR, ${VAR} 지원 | 문서에 없음 | 미지원으로 가정하고 키는 보호된 파일에 보관 |
| 확인 생략 | 서버 수준 trust: true | permissions.allow의 mcp(server/tool) 규칙 | 도구별로 허용 |
| 도구 허용 목록 | includeTools / excludeTools | enabledTools / disabledTools | 키 이름 변경 |
| 타임아웃 | timeout(ms 단위), 기본값 600,000 | timeoutSeconds, 호출당 기본값 180초, 연결 기본값 300초 | 단위 변경 |
| 프로젝트 스킬 폴더 | .gemini/skills/ | .agents/skills/ | 폴더 이동 |
| 규칙 파일 | GEMINI.md, AGENTS.md | 위와 같음 | 변경 없음 |
| 로그인 | 유료 Gemini API 키 사용 가능 | 개인은 키체인의 Google 계정, 기업은 Google Cloud 프로젝트, 자체 키 사용 불가 | 서버에서 무인 실행하기 전에 로그인 방식 확인 |
예약 작업에서는 마지막 행이 가장 중요합니다. 플랜 문서에 따르면 할당량을 늘리기 위해 자체 키나 엔드포인트를 쓸 수 없습니다(Plans 문서). GitHub 토론에서 개발자들은 새 CLI가 더 이상 AI Studio API 키를 받지 않는다고 불만을 제기합니다(토론 #27274). 5월 발표에서는 Gemini CLI가 유료 API 키와 엔터프라이즈 라이선스로 계속 작동한다고도 밝혔습니다. 순찰을 헤드리스 클라우드 서버에서 돌리고 있고 API 키만 있다면, Gemini CLI에 머무는 편이 쉬울 수 있습니다. Antigravity 문서가 무인 서버 로그인 방법을 설명하면 그때 옮기세요.
공식적인 할당량 비교 자료는 없습니다. 한 Reddit 사용자는 Antigravity CLI가 할당량을 더 빨리 소모한다고 보고했습니다. 끝부분의 FAQ “어느 쪽이 할당량을 덜 쓰나요”를 참고하세요.
다만 이 보고는 공식 문서의 수치와 맞아떨어집니다. 헤드리스 JSON 예시에서 한 줄짜리 프롬프트만으로도 입력 토큰이 10,415개이고, 그중 8,113개가 캐시된 토큰입니다(Headless mode JSON 예시). 하루 12회차를 돌리면 고정 오버헤드만으로 약 120,000토큰이 들어갑니다. 위의 비용 섹션에는 이 부분이 반영되어 있습니다.
세 번째 차이는 모델 접근 권한입니다. Gemini 4 Argon은 2026년 10월 13일 Pro 및 Ultra 사용자를 대상으로 Antigravity 앱과 CLI에 도입되었습니다(Antigravity 블로그). 2026년 10월 14일 포럼 스레드에는 일부 비즈니스 등급 Ultra 사용자에게 문제가 있다는 보고가 올라왔습니다. 앱과 CLI 모두에서 Argon을 선택할 수 없었다는 내용입니다(Google AI 개발자 포럼). 순찰은 Flash로 충분하므로 큰 영향은 없습니다. 그래도 마이그레이션 후 /model을 한 번 확인하고, 스크립트에서 모델을 고정하세요.
한계와 주의할 점
데이터 측면에서는 네 가지 한계가 있습니다. 첫째, 플랫폼이 검토를 위해 보류한 댓글은 보이지 않습니다. YouTube 고객센터에 따르면 “기본” 또는 “엄격” 설정은 댓글을 YouTube 스튜디오에 최대 60일 동안 보류합니다. 이 댓글은 승인될 때까지 숨겨집니다(YouTube 고객센터, 댓글 설정). 저희를 포함한 모든 제3자는 공개 댓글만 볼 수 있습니다. 보류된 댓글이 필요한 채널 소유자는 OAuth와 moderationStatus=heldForReview로 YouTube Data API를 호출해야 합니다(commentThreads.list 문서).
둘째, YouTube의 시간 정보는 “2시간 전” 같은 상대 표시이며, 1회차에서는 4개 행에 “(수정됨)”도 붙어 있었습니다. 변환한 시간은 시 단위까지만 정확하고, 오래된 댓글일수록 오차가 커집니다. 셋째, Bilibili 댓글은 인기 댓글만 가져옵니다. 전체 댓글이 4,075개와 4,566개일 때 각각 3개와 10개를 받았습니다. Bilibili에서는 “모든 새 댓글”을 순찰할 수 없으므로 대신 인기 댓글과 탄막의 변화를 추적하세요.
넷째, YouTube는 2026년 9월 30일 Data API 개정 내역에서 댓글 리소스에 snippet.imageUrl을 추가했습니다. GIF와 이미지 댓글은 11월에 모든 사용자에게 제공됩니다(YouTube Data API revision history). youtube/comments 필드 목록에는 이미지 필드가 없습니다. 이미지만 있는 댓글은 빈 텍스트로 나타납니다.
빈 텍스트를 모두 잡음으로 취급하지는 마세요. TechCrunch는 2026년 9월 23일, YouTube가 크리에이터마다 조정할 수 있는 댓글 관리 기능을 테스트하고 있다고도 보도했습니다(TechCrunch). 이 테스트가 확대되면 보이는 댓글의 범위도 달라질 것으로 예상하세요.
Antigravity 쪽을 보면, CLI는 소스 코드가 공개되어 있지 않고 빠르게 바뀝니다. 이 가이드는 2026년 11월 3일에 확인한 문서와 1.4.12 릴리스 노트를 기준으로 합니다. 사이드카 문서에는 데스크톱 앱만 나와 있습니다. 헤드리스 모드는 캐시된 로그인에 의존하며, 문서는 클라우드 서버에서의 무인 로그인을 설명하지 않습니다.
개인 플랜 할당량은 처리한 작업량에 따라 줄어들며, 플랜 문서에는 할당량이 바뀔 수 있다고 나와 있습니다. 저희 비용 수치는 추정치로 보세요. 실제 수치는 /usage 패널에서 확인할 수 있습니다(/usage 문서).
마지막으로 사용상의 제한이 있습니다. 이 스킬은 읽기 전용이며 아무것도 게시하지 않습니다. EveryInfra는 공개 데이터를 읽으며 여러분의 계정으로 게시할 수 없습니다. 답글 초안은 사람이 YouTube 스튜디오나 Bilibili 크리에이터 센터에서 직접 보냅니다. 리포트에는 댓글 ID와 텍스트만 남기고, 사용자 이름이나 프로필 링크는 절대 남기지 마세요. 각 플랫폼의 약관과 서비스를 운영하는 지역의 개인정보 보호법을 준수하세요.
라벨도 완벽하지 않습니다. 키워드 규칙은 댓글 34개를 플래그했지만, 그중 크리에이터가 시간을 들일 만한 것은 13개뿐이었습니다. 또한 규칙은 “블러 누락” 댓글의 절반을 놓쳤습니다.
모델 라벨은 테스트하지 않았습니다. 운영에 들어가기 전에 같은 댓글 100개에 직접 라벨을 붙이고 모델 출력과 비교하세요. “높음” 항목은 항상 사람이 읽습니다. 모델은 댓글 100개를 10여 개로 줄여 줄 뿐입니다.
최근 달라진 점
- 2026년 10월 30일(UTC), Antigravity CLI 1.4.11이
--output-format json에finished_reason을 추가했습니다. 같은 날 1.4.12는 긴 답변에서 Markdown 표가 깨지는 문제를 수정했습니다(1.4.11, 1.4.12). 사용자에게 미치는 영향: 이제 타이머 스크립트가 “리포트 완료”와 “타임아웃으로 중단”을 구분할 수 있습니다. 1.4.11 이상을 사용하세요. - 2026년 10월 29일, 1.4.10 버전은 스트리밍 시 터미널 쓰기를 약 70% 줄였고, 대화형 UI가 시작된 뒤 약 100MB의 메모리를 해제하도록 개선했습니다. 릴리스 노트에 따르면 이 메모리 관련 변경은 print 모드와 헤드리스 모드에는 영향을 주지 않습니다(1.4.10). 사용자에게 미치는 영향: 많은 릴리스가 대화형 UI를 대상으로 합니다. 타이머 작업을 업그레이드하기 전에 각 릴리스 노트에서 헤드리스 관련 항목을 확인하세요.
- 2026년 10월 24일, 1.4.7 버전은 헤드리스
-p실행의 CPU 사용량을 줄였습니다. 또한 에이전트에 직접 반환되는 온디맨드 MCP 결과의 크기 한도를 4KB에서 10KB로 늘렸습니다(1.4.7). 사용자에게 미치는 영향: YouTube 댓글 100개는 약 33KB로 여전히 10KB를 넘습니다. 먼저 스크립트로 새 행을 압축하세요. - 2026년 10월 13일, Gemini 4 Argon이 Google AI Pro 및 Ultra 사용자를 대상으로 Antigravity 앱과 CLI에 도입되었습니다(Antigravity 블로그). 같은 날 1.3.4 버전은 헤드리스 모드에서 알 수 없는
--agent이름을 지정하면 코드 1로 종료되도록 바꿨습니다(1.3.4). 사용자에게 미치는 영향: 댓글 분류에는 Gemini 3.8 Flash로 충분하며, 이제 스크립트에 오타가 있으면 확실하게 실패로 드러납니다. - Gemini API 가격 페이지는 2026년 10월 30일에 업데이트되었습니다. Gemini 3.8 Flash는 12월 31일까지 토큰 100만 개당 입력 $0.75, 출력 $3.75입니다. 2027년 1월 1일부터는 가격이 두 배가 됩니다. Gemini 4 Argon은 11월 30일까지 $2와 $10이며, 이후 두 배가 됩니다(Gemini API pricing). 사용자에게 미치는 영향: 플랜 할당량은 API 가격 기준으로 차감됩니다(5월 플랜 글). 새 API 가격이 차감 속도를 바꾸는지는 Google이 밝히지 않았습니다. 운영을 시작한 뒤 일주일 동안
/usage를 지켜보세요.
FAQ
Antigravity CLI의 MCP 설정은 어디에 두나요?
전역 파일은 ~/.gemini/config/mcp_config.json입니다. 마이그레이션 가이드에 따르면 프로젝트 파일은 프로젝트 루트의 .agents/mcp_config.json입니다. 한 Reddit 사용자는 설정 파일이 ~/.gemini/antigravity-cli/ 아래에 저장된 것을 발견해 ~/.gemini/config/로 복사해야 했습니다(r/google_antigravity 스레드). 설정 후 가장 빠르게 확인하는 방법은 /mcp입니다. (Google 추천 검색어 “antigravity cli mcp config”에서 나온 질문입니다.)
Antigravity CLI vs Gemini CLI: 어느 쪽이 할당량을 덜 쓰나요?
공식 비교 자료는 없습니다. 추천 35개를 받은 한 Reddit 글에 따르면 Antigravity CLI는 웹 코딩 2시간 만에 Pro 계정 두 개의 할당량을 다 썼습니다. Gemini CLI는 4시간 동안 약 10%를 썼다고 합니다(측정값이 아닌 한 사람의 경험담입니다). 확실한 사실은 이렇습니다. 개인 할당량은 API 가격 기준으로 차감되고, Flash와 Pro는 하나의 풀을 공유하며, 헤드리스 호출마다 고정 입력 토큰이 약 10,000개 붙습니다. 순찰 같은 짧은 작업이라면 먼저 스크립트로 중복을 제거하고 사전 필터링하세요. 모델에는 새 댓글 몇백 토큰만 보내고, --model을 Flash로 고정하세요. (추천 검색어 “antigravity cli vs gemini cli quota”와 r/GeminiCLI 스레드에서 나온 질문입니다.)
Antigravity CLI cron 작업에 /schedule을 쓸 수 있나요?
대화 하나가 열려 있는 동안 몇 분마다 확인하는 것은 가능합니다. 아무도 없는 상태에서 24시간 작업을 돌릴 수는 없습니다. /schedule은 5필드 cron 표현식과 MaxIterations를 받지만, 현재 대화에 속합니다. 문서는 장기 작업에 사이드카를 권하는데, 사이드카는 데스크톱 앱만 지원 대상으로 나와 있습니다. CLI 사용자는 launchd, cron, systemd로 agy -p를 호출하는 편이 더 안정적입니다. (추천 검색어 “antigravity cli cron job”과 “antigravity cli cron expression”에서 나온 질문입니다.)
Antigravity CLI의 yolo 모드란 무엇이며, 타이머에서 써도 될까요?
CLI 레퍼런스에는 yolo라는 플래그가 없습니다. 가장 비슷한 것은 모든 도구를 허용하는 --dangerously-skip-permissions와 toolPermission: "always-proceed" 설정입니다. 순찰에는 MCP 도구 3개와 리포트 폴더 1개만 있으면 됩니다. 대신 permissions.allow에 이름으로 나열하세요. (추천 검색어 “antigravity cli yolo mode”에서 나온 질문입니다. 플래그는 CLI 레퍼런스에 있습니다.)
YouTube에 이미 댓글 관리 도구가 있는데 왜 순찰을 만들어야 하나요?
YouTube 스튜디오의 댓글 관리 기능은 의심스러운 댓글을 보류합니다. 이 기능은 “무엇을 숨길 것인가”에 답합니다. 순찰은 “어떤 공개 댓글이 질문이나 불만이고, 어떤 댓글에 답글이 필요한가”에 답합니다. 또한 YouTube와 Bilibili를 하나의 리포트에 담고, 경쟁사 영상에도 쓸 수 있습니다.
내 채널이라면 둘 다 쓰세요. 보류된 댓글은 스튜디오에서, 공개 댓글의 후속 조치는 순찰로 처리하면 됩니다. (추천 검색어 “youtube comment moderation tool”에서 나온 질문입니다. 설정 방법은 YouTube 고객센터에 있습니다.)
Bilibili 댓글 스크래퍼로 영상의 모든 댓글을 가져올 수 있나요?
bilibili/comments로는 불가능합니다. 카탈로그에 따르면 호출당 최대 10개이며, 더 큰 값을 지정해도 상한이 적용됩니다. 테스트에서는 영상 댓글이 4천 개가 넘는데도 인기 댓글을 3개, 이어서 10개만 반환했습니다. 정렬 파라미터도 거부합니다.
모든 댓글을 볼 수 있는 것은 영상 소유자뿐이며, 크리에이터 센터나 승인된 오픈 플랫폼 앱을 통해서만 가능합니다. 순찰에서는 Bilibili를 인기 댓글과 탄막이라는 두 가지 신호로 다루세요. (“Bilibili 댓글 스크래퍼”라는 뜻의 중국어 추천 검색어에서 나온 질문입니다.)
시작하기
- 빠른 시작에서 API 키를 발급받으세요. 먼저 무료 카탈로그를 확인하세요:
GET https://api.everyinfra.com/api/v1/social/catalog?platform=youtube.?platform=bilibili도 같은 방법으로 확인하세요. - YouTube API와 Bilibili API 페이지에서 내 영상 URL로 댓글 엔드포인트를 한 번 호출해 보세요.
- 위에서 설명한 대로
.agents/mcp_config.json과permissions.allow를 작성하세요.agy를 대화형으로 한 번 실행하고/mcp와/permissions를 확인하세요. - 스킬을
.agents/skills/comment-patrol/에 넣으세요.agy -p를 직접 한 번 실행하세요.structured_output이 스키마와 일치하는지, stderr에 거부된 도구가 없는지 확인하세요. - launchd, cron, systemd에 맡기세요. 첫날은 2시간마다 실행하고, 1행에 “댓글을 놓쳤을 수 있음”이 나오는지 지켜본 뒤 간격을 조정하세요.
같은 방식은 다른 AI 도구에서도 통합니다. Claude Code의 예약 작업은 Claude Code 예약 작업으로 Reddit 페인 포인트 찾기를 참고하세요. Gemini를 원격 MCP 서버에 연결하는 다른 방법은 원격 MCP를 활용한 Gemini Deep Research API를 참고하세요. 댓글 정제와 라벨링은 DeepSeek V4와 Claude Code로 댓글 정제하기를 참고하세요.
이 가이드의 모든 외부 자료는 2026년 11월 3일(SGT)에 확인했습니다. 참고 자료 목록의 날짜는 각 페이지에 표시된 게시일 또는 업데이트일입니다.
참고 자료
- Google Developers Blog: transitioning Gemini CLI to Antigravity CLI, 2026년 5월 19일.
- gemini-cli GitHub discussion #27274.
- Antigravity CLI migration guide.
- Antigravity CLI reference.
- Antigravity CLI headless mode.
- Antigravity /schedule command.
- Antigravity sidecars.
- Antigravity MCP docs (CLI tab).
- Antigravity Agent skills docs (CLI tab).
- Antigravity permissions docs (CLI tab).
- Antigravity plans docs.
- Antigravity models docs.
- Antigravity CLI modes.
- Antigravity CLI /usage command.
- Antigravity changelog.
- google-antigravity/antigravity-cli repository.
- Antigravity CLI 1.4.12 release notes, 2026년 10월 30일(UTC).
- Antigravity CLI 1.4.11 release notes, 2026년 10월 30일(UTC).
- Antigravity CLI 1.4.10 release notes, 2026년 10월 29일.
- Antigravity CLI 1.4.7 release notes, 2026년 10월 24일.
- Antigravity CLI 1.3.4 release notes, 2026년 10월 13일.
- Antigravity CLI 1.2.10 release notes, 2026년 9월 24일.
- Antigravity CLI 1.2.9 release notes, 2026년 9월 23일.
- Gemini CLI MCP docs.
- Antigravity blog: plan changes, 2026년 5월 19일.
- Antigravity blog: Gemini 4 Argon, 2026년 10월 13일.
- Antigravity blog: Gemini 3.8 Flash.
- Google blog: Gemini 4 Argon launch, 2026년 9월 30일.
- Gemini API pricing.
- Gemini API: understand and count tokens.
- Google AI developer forum: business Ultra users cannot access Gemini 4 Argon in Antigravity, 2026년 10월 14일.
- MCP specification 2026-07-28: Transports.
- Agent Skills open standard.
- YouTube Data API: commentThreads.list.
- YouTube Data API quota calculator.
- YouTube Data API revision history.
- YouTube Help: comment settings.
- TechCrunch: YouTube comment features, 2026년 9월 23일.
- Bilibili Open Platform.
- Apple developer docs: Scheduling Timed Jobs.
- crontab(5) manual.
- systemd.timer manual.
- r/google_antigravity: “Antigravity CLI MCP Servers Pain”.
- r/google_antigravity: env vars in the MCP config.
- r/GeminiCLI: why Antigravity CLI burns through quota.
- The New Stack: the Gemini CLI replacement, 2026년 6월 20일.
- YouTube 샘플 영상.
- Bilibili 샘플 영상.
- EveryInfra 카탈로그: YouTube.
- EveryInfra 카탈로그: Bilibili.
참고 BL-72