easel
에이전트가 인간에게 검토받기를 원하는 작업을 위한 로컬 리뷰 보드입니다.
A comment and a pin queued on a board, sent, and picked up by an agent that was blocked waiting for them
위: 브라우저 속의 보드. 아래: 하나의 명령에서 막힌 에이전트가 피드백을 받아 재게시하고 — 그 결과물이 열린 탭에 도착합니다.
에이전트가 한 페이지를 게시합니다. 사용자가 이를 브라우저에서 열고, 아무 곳에나 주석을 달고, '보내기' 버튼을 누릅니다. 이 에이전트는 지금까지 단 하나의 명령에서 막혀 있었는데, 사용자의 피드백을 JSON 형태로 받아 적용하고 재게시합니다. 두 번째 결과물은 마지막으로 검토했을 때와 정확히 무엇이 바뀌었는지 보여주는 diff 마커와 함께 도착합니다.
클라우드에서는 아무것도 실행되지 않습니다. easeld 데몬이 launchd 아래에서 http://127.0.0.1:4400으로 실행되며 모든 상태를 소유하므로, 보드는 게시된 세션을 초월하고, 데몬 재시작을 견디며, 에이전트 간에 전달될 수 있습니다.
스크린샷 투어 → — 주석, 의사결정 위젯, diff를 거치며 라운드별 실제 검토 과정을 보여줍니다.
존재 이유 (Why it exists)
에이전트는 터미널에서 검토하기 까다로운 결과물을 생성합니다: 계획(plan), 평가 실행(eval run), 프롬프트 diff, 비교 테이블, 디자인 등. 일반적인 대안은 스크롤백의 벽이나 스크린샷이며, 되돌아가는 피드백은 어느 부분을 의미하는지 설명하는 산문 단락입니다.
easel은 이 교환에 페이지와 커서를 부여합니다. 사용자가 특정 지점을 가리킵니다. 에이전트는 사용자가 가리킨 요소에 첨부된 주석을 받고, 다음 라운드는 무엇이 이동했는지 보여줍니다.
빠른 시작 (Quickstart)
macOS 및 Node 22 이상이 필요합니다. 설치 과정은 Puppeteer를 통해 Chromium을 가져오는데, mermaid-cli는 이를 사용하여 게시 시점에 다이어그램을 SVG로 렌더링합니다 — 첫 npm install가 느리고 디스크에 약 1기가바이트 정도 차지할 것으로 예상해야 합니다.
git clone https://github.com/The-Sentience-Company/easel.git && cd easel
npm install # deps + postinstall이 화이트보드 번들을 빌드합니다
install/install.sh # 비멱등적(idempotent); plist를 작성하고, `easel`을 PATH에 배치하며, 상태 확인을 기다립니다.
...
URL을 열고 주석을 달고, 전송(Send) 버튼을 누르면 막혔던 easel await가 JSON 형식으로 피드백을 반환하고 종료됩니다. 이를 적용한 후, easel publish <key> --note "round 2: …"를 사용하면 이전 라운드 대비 차이점 마커(diff markers)와 함께 동일한 키로 다시 게시됩니다.
http://127.0.0.1:4400/에서는 모든 보드를 나열하고, 어떤 보드가 에이전트가 사용자 입력을 기다리고 있는지 표시합니다.
업데이트는 스스로 설치되지 않습니다. easel update는 수동 업그레이드이며, easel autoupdate on은 일일 자동 업데이트에 동의하는 것입니다. 이는 기본적으로 꺼져 있는데, 자동 업데이트 기능이 원격으로 배포되는 모든 것을 실행할 권한을 부여하기 때문입니다. docs/usage.md § Auto-update에서 배포되는 내용과 왜 직접 작성해 보는 것이 가치가 있는지 설명합니다.
데몬(daemon)은 익명의 일일 사용량 심장 박동 신호(heartbeat)를 전송하며, docs/usage.md § Telemetry에서 무엇을 보내는지와 끄는 방법을 알려줍니다.
원래 상태로 되돌리려면, install/install.sh --uninstall을 사용하면 에이전트, plist 파일, 그리고 easel 진입점(entry point)이 제거됩니다. 이 명령어는 사용자 보드와 데이터베이스가 있는 ~/.easel/ 디렉토리는 의도적으로 유지합니다. 이를 완전히 지우려면 별도의 명령인 rm -rf ~/.easel을 사용해야 합니다.
명령어 (The commands)
| 명령어 | 기능 |
|---|
easel open <file.html> | 일반 문서를 게시(publish)합니다 |
| ... | |
페이지에서 얻는 것 (What you get on the page)
- 모든 요소에 대한 주석(Annotations) — 모든 요소 또는 텍스트 선택을 의미합니다. 각 항목은 페이지 여백과 피드백 행 모두에 표시되는 두 글자 배지(
A1, A2, …)를 가지므로, 사용자님과 에이전트는 항상 동일한 앵커(anchor)에 대해 이야기하게 됩니다.
- 차이점(diffs)이 있는 라운드(Rounds) — 동일한 키로 재게시하면 기록이 유지됩니다. 라운드 알약(Round pills)을 사용하면 모든 버전을 페이지별로 되돌아갈 수 있으며, 변경된 블록은 추가됨(added) / 수정됨(modified) / 이동됨(moved)으로 표시되고, 심지어 diff 블록 내부의 단어 수준까지 표시됩니다.
- 위젯(Widgets) — 옵션과 함께
data-widget="vote|decision|approve|rating"을 선언하면 데몬(daemon)이 동작을 연결합니다. 클릭은 주석과 함께 초안으로 대기열에 추가되며, '전송(Send)' 시점에 한 번에 전달됩니다.
- 그려볼 수 있는 다이어그램(Diagrams) —
```mermaid 울타리(fence)는 게시 시점에 인라인 SVG로 렌더링되며, 브라우저에서 편집 가능한 Excalidraw 화이트보드로 열립니다.
- 채팅(Chat) — 앵커가 없는 피드백을 위한 기능입니다.
'전송(Send)' 버튼을 클릭하기 전까지는 아무것도 전달되지 않으므로, 미완성된 생각으로는 에이전트를 깨울 수 없습니다.
...
npm test # node --test
node render/build-excalidraw.mjs # whiteboard 번들 재빌드
e2e 하네스(harness)는 할당된 포트에 임시 데몬(scratch daemons)을 생성하므로, 테스트 스위트가 실행 중인 데몬에 영향을 주지 않습니다. chrome/, render/, daemon/, 또는 templates/ 아래의 어떤 것이든 수정하고 번들 재빌드(bundle rebuild)를 건너뛰면, 관련 없는 단언 실패(assertion failures)들이 흩어지는 대신 stale-bundle 오류로 전체 스위트가 실패합니다.
chrome/easel.css는 요청마다 디스크에서 읽어오기 때문에 스타일 변경 사항은 저장 시 실시간으로 적용됩니다. 다른 모든 것은 실행 중인 데몬에 의해 캐시되며 재시작이 필요합니다. install/install.sh가 이 작업을 대신 수행하며, 병합(merging) 후에는 easel update가 상주하는 데몬을 새 코드로 이동시키는 역할을 합니다.
크레딧
easel은 lavish-axi를 사용한 후에 구축되었는데, 이 프로젝트는 에이전트가 결과물(artifact)을 작성하고, 로컬 브라우저 UI가 주석(annotation)을 수집하며, 롱 폴링(long poll)으로 피드백을 되돌려 받는 루프를 개척했습니다. easel은 이러한 아이디어를 지속적인 다중 라운드 보드로 발전시켰습니다. 여기에는 영속적인 데몬(persistent daemon), 각 라운드 간의 시각적 차이점(visual diffs), 그리고 재시작에도 살아남는 에이전트별 피드백 커서가 포함됩니다. 어두운 테마와 표 처리는 lavish의 디자인에서 시작되었으며, 이는 MIT 라이선스가 적용되어 있습니다.
라이선스
Copyright © 2026 The Sentience Company.
easel은 완전히 오픈 소스이며, '오픈 코어(open core)'가 아닌 Apache License 2.0 하에 배포됩니다. 회사에서 사용하고, 수정하고, 모든 장치에 설치하며, 판매하는 제품 안에 포함시킬 수 있습니다. 저희 때문에 작성된 것은 아무것도 공개적으로 남지 않습니다: easel이 렌더링한 보드는 사용자 소유이며, HTTP API나 easel 명령어 등을 통해 구동되는 모든 것도 마찬가지입니다. 별도의 상업용 에디션은 없으며, 이것 자체가 전체 시스템입니다.
단 하나의 유보는 이름에 관한 것입니다. Apache 2.0은 상표권(trademark rights)을 부여하지 않으므로 (§6), 포크(fork)는 배포할 수 있지만 easel이라는 이름을 사용해서는 안 됩니다. NOTICE를 참조하십시오.