한 줄로
로그인 세션을 그대로 물고 있는 브라우저를 AI 가 조종하게 해주는 도구다.
일반 브라우저 자동화는 빈 브라우저에서 시작한다. 그래서 사내 관리자 화면 하나 열려면 로그인부터
해야 한다. Aside 는 내가 이미 로그인해둔 브라우저 자체를 조종한다. 인증 단계가 사라진다.
내 설정에서는 브라우저 작업의 1순위 도구다. chrome-devtools 가 후순위다.
붙는 자리가 셋이다
여기서부터가 이 글의 본론이다. Aside 는 내 환경에 세 군데로 들어와 있고, 각각 설치 주체가
다르다. 이게 나중에 사고로 이어진다.
| 자리 | 실체 | 누가 설치하나 |
|---|---|---|
| CLI | ~/.local/bin/aside |
Aside 앱 자신 |
| MCP 서버 |
aside mcp (도구 1개) |
dotfiles install.sh |
| 스킬 | ~/.claude/skills/aside-browser/ |
Aside 앱 자신 |
설치 시각을 보면 순서가 그대로 남아 있다.
2026-08-13 10:01 Aside-1.0.811.1.dmg (내려받음)
2026-08-13 10:19 ~/.local/bin/aside (CLI 심링크)
2026-08-13 10:43 aside-browser/SKILL.md (스킬)
앱을 깔았더니 24분 뒤에 스킬이 저절로 생겼다. 내가 만든 게 아니다.
그 증거가 하나 더 있다. 내 스킬 24개를 실체별로 세면 이렇게 갈린다.
| 실체 | 개수 |
|---|---|
| 심링크(원본을 가리키는 바로가기 파일) → dotfiles | 19 |
심링크 → ~/.agents/skills/
|
3 |
| 진짜 디렉터리 |
2 (aside-browser, omc-reference) |
aside-browser 는 저 마지막 칸에 있다.
SYMLINK artifact-diagram -> /Users/.../dotfiles/claude/skills/artifact-diagram/
REAL aside-browser
SYMLINK chrome-mcp -> /Users/.../dotfiles/claude/skills/chrome-mcp/
dotfiles 심링크가 아니라는 건 dotfiles 관리 밖이라는 뜻이고, 곧 맥 4대에 동기화되지
않는다는 뜻이다. 앱을 깐 머신에만 있다.
(~/.agents 쪽 3개도 dotfiles 밖이라 사정은 같다. 그래서
스킬 목록 글에서 이 5개를 “순수 외부” 로 묶었다.)
두 개의 입구 — exec 과 repl
CLI 를 열어보면 서브커맨드가 셋이다. exec, repl, mcp.
이 중 실제로 일을 시키는 건 앞의 둘인데, 성격이 정반대다.
aside exec |
aside repl |
|
|---|---|---|
| 무엇 | 브라우저 전용 서브에이전트 | Playwright 호환 JS 콘솔 |
| 시키는 법 | 자연어로 목표를 던진다 | 코드를 직접 쓴다 |
| 결과 | 알아서 다 하고 보고 | 내가 시킨 것만 정확히 |
스킬 문서가 고르는 기준을 이렇게 적어놨다.
- 통째 위임: aside exec
- 직접 증거·다운로드·스크린샷·정확한 검증·민감한 로그인 작업: aside repl
증거가 필요하면 repl. 에이전트에게 맡기면 “했습니다” 라는 말이 돌아오지만, repl 은 내가
스크린샷과 DOM 을 직접 본다. 검증에는 후자가 맞다.
MCP 도구는 딱 하나다
MCP 로 붙은 aside 가 노출하는 도구는 repl 하나뿐이다. chrome-devtools 는 30개다.
30개짜리를 두고 1개짜리를 1순위로 둔 이유는 MCP 글에
적었다. 요약하면 왕복 횟수가 비용이기 때문이다. repl 은 여러 단계를 코드 한 덩어리에 넣지만,
chrome-devtools 는 클릭·입력·확인마다 도구 호출을 한 번씩 쓴다.
snapshot — 이 도구의 핵심 설계
repl 을 쓸 때 페이지를 읽는 방법이 snapshot() 이다. HTML 을 통째로 주는 게 아니라
접근성 트리(화면 낭독기가 쓰는 구조 정보) 를 압축해서 준다. 각 요소에는 e12 같은
ref ID 가 붙는다.
const s1 = await snapshot(page, { interactive: true });
console.log(s1.tree);
여기에 실수하기 좋은 규칙이 셋 있다.
1) ref ID 는 DOM 속성이 아니다. page.locator('e31') 에는 그대로 넣어도 되지만,
CSS 선택자에 섞으면 안 된다. 화면에 실재하는 값이 아니라 가상 식별자다.
2) 스냅샷을 새로 찍으면 이전 ref 가 전부 무효가 된다. 그래서 클릭 한 번마다 다시 찍어야
하고, 스킬 문서가 const s1, const s2 로 번호를 붙여 쌓으라고 시킨다.
3) 잘라 쓰면 안 된다. substring(), slice() 로 스냅샷을 줄이는 걸 명시적으로 금지한다.
토큰을 아끼려다 필요한 요소를 버리기 때문이다.
읽는 순서도 정해져 있다. 싼 것부터 쓴다.
1. snapshot(page, { interactive: true }) ← 상호작용 요소만
2. snapshot(page) ← 전체
3. 잠깐 기다렸다 다시 ← 아직 그리는 중이면
4. annotatedScreenshot(page) ← 눈으로 확인
page.content() 와 page.evaluate() 는 정확한 선택자를 알 때만 쓰라고 돼 있다.
모르면서 쓰면 추측이 되기 때문이다.
스크롤이 필요 없다
작은 대목인데 인상적이라 남긴다. 스킬 문서에 이렇게 적혀 있다.
No scroll needed. 스냅샷은 화면 밖 요소도 포함하고, 클릭은 필요하면 알아서 스크롤한다.
사람이 브라우저를 쓸 때 하는 동작 하나가 통째로 사라진다. 화면이라는 개념 자체가 없고
문서 전체가 한 번에 보이는 셈이다.
회사 머신에만 붙인다 — 그리고 여기서 틀렸다
MCP 등록은 dotfiles 가 하는데, 프로파일 게이트가 걸려 있다.
if [[ "$CLAUDE_PROFILE" == company-* ]]; then
# aside MCP 등록
사내 로그인 세션을 물고 사내 화면에 접근하는 도구라 개인 머신에는 안 넣는다는 판단이었다.
그래서 전역 규칙에도 이렇게 적어뒀다.
⚠️ aside MCP 는 회사 머신(company-*)에만 등록된다.
개인 머신(mac-mini / mac-air)에는 없다.
그런데 이게 틀렸다. 8월 22일 대화 기록에 내가 정정한 흔적이 남아 있다.
정정: 아까 "aside는 개인 머신에 없다"고 했는데 틀렸습니다
— mac mini에도 등록돼 있습니다.
왜 이런 일이 생기나. 설치 주체가 셋으로 갈려 있기 때문이다. dotfiles 는 회사 머신에만
MCP 를 걸지만, Aside 앱 자체를 개인 머신에 깔면 그쪽에도 등록될 수 있다. dotfiles 가
안 건다는 것과 그 머신에 없다는 것은 다른 말인데, 규칙은 둘을 같은 말처럼 적어놨다.
교훈은 ultrawork 사건과 같은 종류다. 규칙에 적은
사실은 시간이 지나면 조용히 낡는다. 특히 “없다” 같은 부정형 단언이 위험하다. 확인하지
않으면 틀린 줄도 모른다.
이름이 겹치는 함정 하나
조사하다 발견했다. 내 환경에 aside.md 라는 파일이 하나 더 있는데, Aside 브라우저와 아무
관계가 없다.
references/ecc/commands/aside.md
→ "작업 중에 곁가지 질문을 하고 하던 일로 돌아오는" 슬래시 명령
영어 단어 aside(곁가지) 를 쓴 별개 도구다. 이름만 보고 같은 것으로 묶으면 안 된다.
실제로 얼마나 썼나
기록이 남아 있어서 세봤다.
| 항목 | 값 |
|---|---|
| CLI 버전 | 1.26.810.1915 |
| 도입일 | 2026-08-13 |
aside-browser 스킬 호출 |
3회 |
| 마지막 사용 | 2026-08-26 |
3회. 1순위 도구로 지정해둔 것 치고는 적다. 다만 이 숫자는 스킬을 읽은 횟수이지
브라우저를 조종한 횟수가 아니다. 규칙상 aside 를 쓰기 전에 스킬을 먼저 읽게 돼 있으니
대략의 하한선으로는 볼 수 있다.
질의 습관을 세어본 글에서 트리거 키워드 11종이
사용 0회로 나왔던 것과 같은 종류의 결과다. 규칙에 적어두는 것과 실제로 쓰는 것은
다르다.
안 되는 것도 있다
만능은 아니다. 8월 22일에 실제로 막혔던 일이 있다.
전용 프로필로 도는 자동화에 로그인 쿠키가 없어서 막혔는데, 그때 내가 이렇게 적었다.
aside를 썼어도 이 문제는 안 풀렸을 겁니다. 평소 크롬을 조종하는 도구라
전용 프로필에 세션이 안 남으니까요.
로그인 세션을 물고 있다는 장점이 그대로 한계가 된다. 깨끗한 비로그인 상태를 재현해야
하는 일 — 신규 사용자 플로우 같은 것 — 은 aside 로 못 한다. 그래서 규칙에 그 경우를
chrome-devtools 로 보내는 줄을 따로 뒀다.
| 상황 | 도구 |
|---|---|
| 기본 — 화면 확인, 로그인 필요한 사내 화면 | aside |
| 콘솔·네트워크·성능 트레이스 | chrome-devtools |
| 비로그인 클린 상태 재현 | chrome-devtools |
정리
- 로그인 세션을 물고 있는 브라우저를 조종한다. 인증 단계가 사라지는 게 핵심 가치다
- 붙는 자리가 셋 — CLI·MCP·스킬. CLI 와 스킬은 앱이, MCP 는 dotfiles 가 설치한다
- 그래서
aside-browser스킬은 심링크가 아니고, 맥 4대에 동기화되지 않는다 -
exec은 위임,repl은 증거 수집. 검증에는 repl 이다 - MCP 도구는 1개뿐인데 30개짜리보다 우선한다 — 왕복 횟수가 비용이라서
-
snapshot()의 ref ID 는 찍을 때마다 무효화된다. 잘라 쓰면 안 된다 - ⚠️ “개인 머신에는 없다” 고 적어둔 규칙이 틀렸다. dotfiles 가 안 건다는 것과
그 머신에 없다는 것은 다른 말이다 - 장점이 곧 한계다 — 비로그인 상태 재현은 못 한다
같이 읽을 글:
MCP 12개, 도구 251개 ·
스킬 24개 전체 목록 ·
질의를 어떻게 시작하나