Aside CLI 기초 — repl과 exec, 언제 무엇을 쓰나
로그인된 내 브라우저를 스크립트로 부리는 두 가지 방법과 공통 함정
Aside AI 브라우저의 명령줄 도구로 로그인된 사이트를 조작하는 두 방식(repl·exec)의 차이를 알고, 실제 업무 자동화에서 반복해서 만난 함정 다섯 가지를 미리 피합니다.
예상 소요 시간 약 40분
이 부(15~18강)에서 다루는 것
114강은 Claude 앱 안의 브라우저와 Computer Use로 사람이 지켜보며 하는 자동화였습니다. 1518강은 한 걸음 더 나가, 별도 앱인 Aside AI 브라우저를 명령줄로 불러 매일 혼자 도는 업무로 만든 실제 사례를 정리합니다. 영상 제작, 블로그·SNS 발행, 자료 수집까지 여러 프로젝트에서 실제로 돌고 있는 방식입니다.
Aside의 가장 큰 장점은 내가 이미 로그인해 둔 브라우저를 그대로 쓴다는 점입니다. 구글·유튜브 스튜디오·페이스북·학습 사이트처럼 공개 API가 없거나 쓰기 까다로운 곳도, 내 로그인 상태 그대로 스크립트가 다룹니다.
처음 설정할 것 (언박싱 실습에서 배운 것)
어사이드 언박싱 실습 영상(2시간)에서 처음 쓰는 사람들이 실제로 막힌 곳 위주로 정리했습니다.
| 설정 | 어디서 | 왜 |
|---|---|---|
| 크롬 설정 가져오기 | 처음 실행 시 | 쿠키·로그인을 그대로 옮겨 사이트마다 다시 로그인할 일이 줄어듭니다 |
| 모델 연결 | 설정 → Models | 이미 쓰는 GPT·Claude 구독을 연결하면 Aside 자체 토큰보다 넉넉합니다. 서브에이전트 모델은 Automatic 권장 |
| 권한 모드 | 대화창 아래 | 읽기 전용 / Guard / Full Access. 일이 자꾸 멈추면 여기부터 봅니다. Final confirm 을 켜면 전송·결제·삭제 직전에만 묻습니다 |
| CLI·스킬 설치 | 설정 → Developers | aside 명령이 생기고, Claude Code·Codex가 Aside를 부를 수 있게 됩니다 |
| 사이드 패널 | Cmd+E | 지금 보는 페이지에 바로 지시합니다(요약·추출) |
처음 쓰는 사람이 막힌 곳
- 작업 중 덧붙인 지시가 대기열에 쌓이기만 한다 → Steer(또는
Cmd+Enter)로 바로 전달 - 무료 플랜은 루틴 3개까지 → 여러 일을 루틴 하나에 묶거나, 외부 스케줄러가 CLI를 부르게 합니다(19강)
- 무분별한 가입·대량 메시지로 계정이 정지될 뻔한 사례 → 규칙 파일에 "이용약관·robots.txt 지키기"를 넣고, 수집은 로그인 없는 새 프로필에서
- 결과는 HTML 대시보드로 받으면 보기 좋고, 웹앱 디버깅에는 크롬 확장보다 Aside CLI가 낫다는 조언이 있었습니다
순서: 먼저 말로 한 번 성공시키고 → 스킬로 저장하고 → 루틴이나 예약으로 자동화합니다.
참고 지피터스 「에이전트 하네스」 스터디는 참여자에게 에이전트 초기 설정(소울·에이전트 문서)을 인터뷰로 함께 정하는 부트스트랩 스킬을 제공합니다. 개인 학습용 라이선스라 이 강의에는 내용을 싣지 않습니다. 필요하면 스터디에 참여해 받으세요.
두 가지 방식
aside repl | aside exec | |
|---|---|---|
| 하는 일 | 내가 쓴 자바스크립트(Playwright 비슷한 문법)를 브라우저에서 실행 | Aside 안의 AI 에이전트에게 말로 일을 맡김 |
| 비용 | 무료 | 에이전트 크레딧 소모 |
| 결과 | 매번 똑같이 동작 | 상황에 맞춰 판단하지만 매번 조금씩 다름 |
| 어울리는 일 | 매일 반복하는 수집·입력·업로드 | 화면이 자주 바뀌거나 판단이 필요한 일 |
규칙: repl이 기본, exec는 예외. 매일 도는 일과 읽기만 하는 일은 repl로 옮깁니다. exec는 에이전트의 판단이 꼭 필요할 때만 씁니다(16강의 영상 첫 프레임 지정, 업로드 결과 검증 같은 경우).
용어 풀이 CLI = 명령줄 도구. 터미널에서
aside ...로 부르는 프로그램입니다. repl = 코드를 한 덩어리씩 보내 바로 실행하는 창구입니다.
repl 한 번 써 보기
aside repl "const p = await openTab('https://example.com'); const s = await snapshot(p, { interactive: true }); console.log(s.tree);"
openTab(url)— 새 탭을 열고 페이지가 준비될 때까지 기다립니다.snapshot(page)— 화면을 접근성 트리로 읽어 줍니다. 버튼·입력칸마다ref=e12같은 번호가 붙습니다.page.locator('e12').click()— 그 번호로 누릅니다.fetch(url)— 내 로그인 쿠키를 실은 채 요청합니다. 탭을 열지 않고 문서를 받을 때 씁니다.
Gmail·구글 독스·시트·유튜브처럼 자주 쓰는 사이트는 Aside가 미리 만든 도구가 있습니다. 먼저 확인하세요.
aside skills list
aside skills show google-gmail
실제로 만난 함정 다섯 가지
실제 업무 스크립트들이 몇 주 돌면서 기록한 것들입니다. 처음부터 이렇게 짜면 대부분 피합니다.
1. 한 번 호출은 120초까지. repl 한 번이 2분을 넘기면 연결이 끊깁니다(other side closed). 영상 목록 60개를 한 번에 돌다가 매일 실패한 사례가 있습니다. 8~10개씩 나눠 여러 번 부르세요.
2. 업데이트로 문법이 깨질 수 있다. Aside 업데이트 뒤 getByRole('button', { name: /정규식/ }) 이 갑자기 "찾을 수 없음"이 된 적이 있습니다. 버튼을 이름 정규식으로 찾는 대신, 페이지 안에서 직접 찾아 누르는 쪽이 튼튼합니다.
await page.evaluate((i) => {
const bs = [...document.querySelectorAll('main button')].filter(b => /개 영상/.test(b.innerText));
bs[i].click();
}, 0);
3. 탭은 호출이 끝나면 닫힌다. repl 한 번에서 연 탭은 그 호출이 끝나면 사라집니다. 여러 단계를 이어 가야 하면 ① 한 호출 안에서 끝까지 하거나 ② repl 프로세스 하나를 계속 열어 두고 명령을 이어 보냅니다(17강 페이스북 사례).
4. 다운로드는 기다릴 수 없다. 다운로드 완료 이벤트를 기다리는 기능이 없습니다. 브라우저 기본 다운로드 폴더(~/Downloads)에 파일이 생기는지 확인한 뒤 옮깁니다.
5. 예약 실행에서 aside 명령을 못 찾는다. macOS 예약 실행(launchd)은 PATH가 짧아서 aside(보통 ~/.local/bin)를 못 찾습니다. 몇 주 동안 조용히 실패한 사례가 있습니다. 예약 설정의 PATH에 ~/.local/bin 을 꼭 넣으세요.
안전 규칙 (모든 사례 공통)
- 로그인은 사람이. 스크립트는 로그인 화면·보안 확인(캡차)을 만나면 멈추고 알립니다. 스스로 로그인하지 않습니다.
- 마지막 발행 버튼은 사람이. 게시·예약 확정 직전까지만 자동으로 하고, 초안으로 저장한 뒤 사람이 확인해 누릅니다.
- Aside가 켜져 있고 로그인돼 있어야 한다. 예약 작업 전에
open -a Aside로 띄우고,aside memory list가 응답하는지 확인하면 안전합니다. - 파일 쓰기는 세션 폴더 안에서만. repl 안의
fs는 세션의artifacts/폴더에만 씁니다. 결과는 출력으로 받아 바깥 스크립트(파이썬 등)가 저장합니다.
🧪 실습
실습 미션 — repl로 내 사이트 한 페이지 읽기
-
aside --help로repl·exec명령이 보이는 것을 확인했다 -
aside skills list로 미리 만든 사이트 도구 목록을 봤다 - repl로 내 사이트를 열고
snapshot트리에서 버튼의ref번호를 하나 찾았다 - 같은 일을
exec로 맡기면 무엇이 다른지(비용·결과의 일정함) 한 줄로 적었다
오늘의 체크리스트
- repl은 무료·일정, exec는 유료·판단 — 반복 업무는 repl
- 한 호출 120초, 길면 나눠서
- 로그인과 최종 발행은 사람이