안티그래비티 2.0 자동 수락 안 될 때 해결법 (디벨로퍼 툴 스크립트 공유)

안티그래비티 2.0 업데이트 이후 멈춰버린 내 AI 에이전트

최근 AI 기반 개발 환경이 빠르게 진화하면서 Antigravity(안티그래비티) IDE를 활용해 자동화 워크로우를 구축하는 개발자가 눈에 띄게 늘었습니다. 저 역시 원격 서버 코딩이나 대규모 빌드 테스트를 할 때 아주 유용하게 쓰고 있었는데요. 그런데 얼마 전 안티그래비티 2.0 버전으로 업데이트가 진행된 이후 기존에 잘 작동하던 ITV Auto-Accept 같은 자동 승인 익스텐션들이 먹통이 되는 현상이 발생했습니다.

AI 에이전트가 알아서 수십 개의 명령어를 백그라운드에서 실행해야 하는데, 중간중간 보안 확인 창이나 디렉터리 변경 승인 팝업이 뜨면서 작업이 뚝뚝 끊기더군요. 화장실을 다녀오거나 커피 한 잔 마시고 오면 여전히 첫 단계 승인 창에서 대기 중인 화면을 보며 답답함을 느낀 분들이 많으실 겁니다. 이번 글에서는 외부 익스텐션 없이 개발자 도구 콘솔을 통해 직접 팝업을 자동 수락하는 확실한 해결책을 공유해 드리려고 합니다.

ITV Auto-Accept가 멈추는 이유와 자동화의 필요성

안티그래비티 내부 설정에서 'Always Allow(항상 허용)'를 켜두어도 SSH 원격 서버 환경이나 연쇄적인 멀티 명령 스크립트를 돌릴 때는 예외적인 확인 대화상자가 끊임없이 발생합니다. 글로벌 개발자 포럼의 최근 기술 동향 분석에 따르면, IDE 보안 레이어가 강화될수록 자동화 에이전트의 작업 효율이 최대 40%까지 저하될 수 있다고 합니다.

헤드리스(Headless) 환경처럼 모니터를 계속 주시할 수 없는 상황에서 이런 사소한 컨펌 박스는 치명적인 걸림돌이 됩니다. 기존 툴들이 2.0 버전에 대응하지 못한다면, 결국 IDE 내부 렌더링 트리를 직접 탐색하여 승인 버튼을 눌러주는 수밖에 없습니다.

안티그래비티 개발자 도구 진입 및 콘솔 활성화

가장 먼저 해야 할 일은 안티그래비티 내부의 브라우저 환경 창을 여는 것입니다. 상단 메뉴에서 Help를 누르고 Toggle Developer Tools를 선택하면 익숙한 크롬 개발자 도구 창이 오른쪽에 나타납니다.

여기서 Console 탭으로 이동해 줍니다. 일종의 백스테이지 제어실을 여는 과정이라고 보시면 됩니다. 평소에 웹 개발을 하셨던 분들이라면 매우 익숙한 화면이겠지만, IDE 내부에 코드를 주입하는 것은 또 다른 느낌입니다.

붙여넣기 제한 해제와 자바스크립트 코드 주입

막상 콘솔 창에 준비한 스크립트를 붙여넣으려고 하면 보안 경고와 함께 입력이 막히는 경우가 있습니다. 최근 IDE 보안 강화 기조에 따른 현상인데, 당황하지 말고 콘솔창에 딱 한 줄만 먼저 입력해 주면 됩니다.

💡 콘솔 붙여넣기 차단 해제 방법 코드 입력창에 allow pasting을 타이핑한 뒤 엔터(Enter)를 치면 외부 코드 복사 붙여넣기 제한이 즉시 풀립니다.

제한이 풀렸다면 아래의 업데이트된 섀도우 돔(Shadow DOM) 대응 자동 승인 코드를 통째로 복사해서 콘솔에 붙여넣고 엔터를 누릅니다.


if (window.myTimer) clearInterval(window.myTimer);
window.myTimer = setInterval(() => {
function queryAllElements(root = document, selector = '*') {
let elements = Array.from(root.querySelectorAll(selector));
const activeElements = root.querySelectorAll('*');
for (const el of activeElements) {
if (el.shadowRoot) {
elements = elements.concat(queryAllElements(el.shadowRoot, selector));
}
}
return elements;
}
const allElements = queryAllElements();
const options = allElements.filter(el => {
const tagName = el.tagName.toLowerCase();
const role = el.getAttribute('role') || '';
let className = '';
if (typeof el.className === 'string') {
className = el.className;
} else if (el.className && typeof el.className.baseVal === 'string') {
className = el.className.baseVal;
}
return (
role.includes('option') ||
role.includes('radio') ||
role.includes('listitem') ||
tagName.includes('option') ||
tagName.includes('radio') ||
className.includes('option') ||
className.includes('select-option')
);
});
if (options.length > 0) {
const keywordsPriority = ['always', 'always allow', '평생', '항상'];
const keywordsNormal = ['allow', 'yes', '허용', '동의', '승인'];
let targetOpt = options.find(opt => {
const txt = opt.textContent.trim().toLowerCase();
return keywordsPriority.some(k => txt.includes(k));
});
if (!targetOpt) {
targetOpt = options.find(opt => {
const txt = opt.textContent.trim().toLowerCase();
return keywordsNormal.some(k => txt.includes(k));
});
}
if (targetOpt) {
const isChecked = targetOpt.getAttribute('aria-checked') === 'true' ||
targetOpt.getAttribute('aria-selected') === 'true' ||
targetOpt.getAttribute('checked') !== null ||
targetOpt.classList.contains('selected') ||
targetOpt.classList.contains('active');
if (!isChecked) {
targetOpt.click();
}
const submitBtn = allElements.find(btn => {
const tagName = btn.tagName.toLowerCase();
let isBtnClass = false;
if (typeof btn.className === 'string') {
isBtnClass = btn.className.includes('btn');
} else if (btn.className && typeof btn.className.baseVal === 'string') {
isBtnClass = btn.className.baseVal.includes('btn');
}
const isButton = tagName === 'button' || tagName.includes('button') || isBtnClass;
if (!isButton) return false;
const txt = btn.textContent.trim().toLowerCase();
return ['submit', 'confirm', 'ok', '제출', '확인', '적용'].some(k => txt.includes(k));
});
if (submitBtn) {
submitBtn.click();
}
}
}
}, 1000);


코드의 작동 원리와 실제 체감 효과

위 코드는 1000ms(1초)마다 안티그래비티 내부의 모든 요소를 재귀적으로 탐색합니다. 안티그래비티 2.0으로 올라오면서 UI 컴포넌트들이 웹 컴포넌트의 섀도우 돔(Shadow DOM) 내부에 깊숙이 숨겨지게 되었는데, 이를 끝까지 추적하여 'always allow', '항상', '허용' 등의 키워드를 가진 라디오 버튼이나 옵션을 먼저 선택(Click)한 뒤 최종적으로 '확인(Confirm)' 버튼을 알아서 눌러줍니다.

실제 이 스크립트를 켜두고 대규모 마이그레이션 스크립트를 실행해 보니, 평소라면 서너 번씩 멈췄을 구간을 무정지 통과하는 것을 확인할 수 있었습니다.

수동 스크립트 방식의 아쉬운 점과 극복 방법

다만 이 방식도 완벽한 것은 아닙니다. 확장 프로그램 형태가 아니라 개발자 도구 콘솔에 직접 주입하는 임시 스크립트 형태이기 때문에, 안티그래비티 IDE를 완전히 종료했다가 다시 켜면 주입했던 코드가 증발합니다. 즉, 새 창을 열 때마다 매번 콘솔을 열고 다시 붙여넣어 줘야 하는 번거로움이 존재합니다.

이 단점을 보완하기 위해서는 자주 쓰는 코드 스니펫 등록 기능을 활용하거나, 메모장에 해당 코드를 저장해 두고 단축키처럼 사용하는 패턴을 들이는 것이 좋습니다. 매번 10초 정도의 세팅 시간이 필요하지만, 작업 도중 몇 시간씩 흐름이 끊기는 기회비용을 생각하면 충분히 감수할 만한 가치가 있습니다.

멈춤 없는 자동화 워크플로우 완성하기

안티그래비티 2.0 업데이트는 성능 면에서 많은 개선을 이뤄냈지만, 기존 서드파티 툴들의 호환성을 깨뜨려 일시적인 불편함을 초래했습니다. 공식 익스텐션 패치가 나오기 전까지는 오늘 소개해 드린 내부 콘솔 스크립트 우회법이 현존하는 가장 확실한 대안입니다. 무한 팝업 대기 지옥에서 벗어나 진정한 핸즈프리 생산성을 다시 경험해 보시기 바랍니다.

[글 핵심 요약] 안티그래비티 2.0 업데이트 이후 ITV Auto-Accept 등 자동 수락 기능이 제한되는 현상이 발생했습니다. IDE 내부의 Help > Toggle Developer Tools 메뉴에서 콘솔을 열고, 섀도우 돔 탐색 코드를 주입하면 1초 간격으로 확인 팝업을 자동 승인하여 무정지 자동화 개발 환경을 다시 구축할 수 있습니다.

[핵심 키워드] 안티그래비티 2.0, 자동 수락 익스텐션, Antigravity IDE, 개발자 도구 콘솔

[해시태그] #안티그래비티 #Antigravity #자동승인스크립트 #ITVAutoAccept #개발자도구

ADRYTHING, AD EVERYTHING

ADRYTHING (애드리띵) 세상의 모든 흥미로운 흐름과 가치 있는 지식을 연결하는 공간입니다. 개인 개발 프로젝트 및 웹마스터 가이드를 아카이빙하는 '기술 이야기'와, 지금 이 순간 주목해야 할 '최신 트렌드'를 명확하고 직설적인 시선으로 전합니다.

댓글 쓰기

다음 이전