Gemini CLI 샌드박스 통합과 노션 피그마 분석 에이전트

26년 04월 21일

Gemini CLI 샌드박스 통합

이날은 에이전트 생태계를 더 똑똑하게 만든 날이었다.

더 싼 모델인 Gemini를 에이전트처럼 부를 수 있게 통합했고 노션 문서랑 피그마 디자인을 분석하는 에이전트도 만들었다.

그리고 자율 루프가 멈추는 버그도 잡았다.

가장 큰 작업은 Gemini CLI를 통합한 거다.

목표는 더 싸고 빠른 대안 모델을 추가하는 거였다.

기존에 쓰던 모델 외에 Gemini를 부를 수 있으면, 비용을 줄이면서 작업을 분산할 수 있다.

근데 그냥 설정에 추가하면 안 됐다.

opencode 설정을 오염시키지 않으면서 Gemini를 부르고 싶었다.

그래서 엄격한 샌드박스로 격리했다.

Gemini CLI가 관리하는 파일, 설정, 캐시를 전부 별도 디렉토리에 둔다.

Gemini가 자동으로 만드는 설정, OAuth 자격증명, 프로젝트 기록, 임시 파일이 전부 샌드박스 안에만 생긴다.

npm 캐시도 분리해서 Gemini의 npm 활동이 전역 캐시를 오염시키지 않게 만들었다.

그리고 다리 역할을 하는 모듈을 만들었다.

opencode에서 Gemini를 부르면, 이 다리 모듈이 샌드박스 안의 Gemini CLI를 호출한다.

opencode 입장에서는 자기 에이전트를 부르는 것처럼 보인다.

Gemini가 별도 프로세스로 돌고 있다는 걸 몰라도 된다.

프리셋 시스템

프리셋 시스템도 만들었다.

에이전트 디렉토리에 마크다운 파일을 하나 넣으면, 그게 자동으로 도구로 등록된다.

플러그인을 다시 시작할 필요 없이 프리셋을 추가할 수 있다.

용도별로 다른 프리셋을 만들어두면, 그때그때 맞는 프리셋을 부르면 된다.

디폴트 모델도 처음엔 프리뷰 모델로 잡았다가, 안정 버전으로 바꿨다.

그리고 모델별로 용도, 금지 사항, 특징을 정리한 사용 가이드도 붙였다.

노션 문서 분석 에이전트

두 번째는 노션 문서를 분석하는 에이전트다.

기획 문서를 개발 계획으로 바꾸는 작업을 자동화하고 싶었다.

노션에 있는 기획서를 읽고 거기서 텍스트랑 이미지를 분석해서 실행 가능한 개발 계획으로 바꾸는 거다.

이미지 위치 메타데이터

처음에는 이미지 URL만 수집했다.

근데 이걸로는 부족했다.

이미지가 문서 어디에 있는지, 앞뒤에 어떤 텍스트가 있는지 모르니까, 이미지의 맥락을 파악할 수가 없었다.

그래서 이미지별로 7개 필드의 위치 메타데이터를 수집하게 만들었다.

순서, URL, 섹션, 하위 섹션, 앞 텍스트, 뒤 텍스트, 컨테이너. 이렇게 하니까

각 이미지가 문서에서 어떤 의미를 가지는지 정확히 파악할 수 있었다.

스킬이 186줄에서 264줄로 늘었지만 분석 품질이 확 올라갔다.

피그마 분석 에이전트

세 번째는 피그마 디자인을 분석하는 에이전트다.

피그마 디자인을 받아서 11개 섹션의 분석 보고서를 만든다.

컴포넌트 트리, 스타일, 레이아웃, 디자인 토큰까지 뽑아낸다.

색상, 간격, 타이포그래피 토큰을 추출해서 개발자가 바로 쓸 수 있는 형태로 만든다.

그리고 피그마 링크 자동 감지도 만들었다.

노션이나 지라 문서에서 피그마 링크를 정규식으로 찾아서 자동으로 피그마 분석 에이전트에게 넘긴다.

기획자가 피그마 링크를 문서에 넣기만 하면, 분석이 자동으로 돌아간다.

노션과 피그마 통합

이 둘을 통합하는 흐름도 만들었다.

입력이 노션 URL만 있으면 노션 분석을, 피그마 URL만 있으면 피그마 분석을, 둘 다

있으면 통합 분석을 한다.

노션 분석과 본문 작성 사이에 디자인 분석 단계를 끼워 넣었다.

피그마 노드 트리를 순회하고 프레임 이름에서 최소 기능 범위를 찾아낸다.

자율 루프 멈춤 버그

마지막으로 자율 루프가 멈추는 버그도 잡았다.

자율 작업 루프가 작업 도중에 멈추고 사용자 입력을 기다리는 문제가 있었다.

이 루프는 끝까지 자율적으로 돌아가야 하는데, 멈춰버리니까 목적을 잃는 거다.

원인을 추적해보니 내부 훅 충돌이었다.

외부 플러그인 문제가 아니라, 프레임워크 자체 훅들끼리 충돌하고 있었다.

한 훅이 잡은 예약을 다른 훅이 못 놓아주니까, 세션이 영구적으로 예약된 상태로 막힌 거다.

이 버그의 전체 원인 분석은 약 두 달 뒤에 정리됐다. 이날은 증상에 대응하고 우회 방법을 찾은 단계였다.

예약을 해제하거나 세션을 다시 시작하면 복구되는 걸 확인하고 더 근본적인 수정은 이후로 넘겼다.

마무리

내가 이날 배운 핵심은 다음과 같다.

하루에 에이전트 생태계를 크게 넓혔다.

더 싼 모델을 부를 수 있게 됐고 노션이랑 피그마 문서를 자동으로 분석할 수 있게 됐다.

Gemini 통합에서 핵심은 격리였다.

그냥 설정에 추가하면 간단하겠지만 설정을 오염시키면 나중에 문제가 생긴다.

샌드박스로 확실히 격리하니까, Gemini가 독립적으로 돌면서도 opencode에 영향을 주지 않는다.

그리고 노션 분석에서 이미지 위치 메타데이터를 붙인 게 중요했다.

이미지 URL만으로는 맥락을 모른다.

앞뒤 텍스트랑 섹션 정보가 있어야, 그 이미지가 왜 거기 있는지 이해할 수 있다.

이 디테일이 분석 품질을 결정했다.