- Ghostwriter는 reMarkable에서 사용자가 손으로 쓴 내용을 감시하다가 제스처나 화면 콘텐츠로 트리거되면 Vision-LLM에 보내고, 결과를 다시 화면에 글씨나 그림으로 출력하는 실험 프로젝트임
- 실행에는
OPENAI_API_KEY,ANTHROPIC_API_KEY,GOOGLE_API_KEY같은 API 키가 필요하며, reMarkable2와 reMarkable Paper Pro용 바이너리를 내려받아 기기에 복사한 뒤 SSH에서 실행함 - 기본 모델은
claude-sonnet-4-0이며,--model gpt-4o-mini,--engine openai,--engine anthropic,--engine google,--engine-base-url등으로 모델과 엔진을 바꿀 수 있음 - 출력 방식은 SVG 그리기와 가상 키보드 기반 텍스트 입력을 모두 지원하며,
--no-svg,--no-keyboard,--thinking,--web-search,--apply-segmentation같은 옵션으로 동작을 조정함 - 프로젝트는 화면 캡처, Vision-LLM 호출, 도구 사용, 이미지 세그먼트, 평가 스크립트, reMarkable Paper Pro의
uinput모듈 대응까지 확장됐지만, 일부 기능은 명시적으로 실험적이거나 WIP 상태임
Ghostwriter가 하는 일
- Ghostwriter는 reMarkable 위에서 동작하는 실험용 인터페이스임
- 사용자가 화면에 손글씨나 그림을 작성함
- 손가락으로 특정 코너를 터치하거나 화면 콘텐츠로 트리거함
- 현재 화면을 Vision-LLM에 보내고, 모델 응답을 화면에 다시 출력함
- 예시로 사용자가 손으로 쓴 프롬프트를 입력하고, GPT-4o가 치와와 그림을 그린 사례가 포함돼 있음
- 프로젝트의 목적은 손글씨와 화면이 결합된 매체에서 다양한 상호작용 방식을 탐색하는 것임
설치와 실행 방식
- 실행 전 reMarkable 환경에 API 키를 설정해야 함
OPENAI_API_KEYANTHROPIC_API_KEYGOOGLE_API_KEY
- 설치는 로컬 컴퓨터에서 기기별 바이너리를 내려받은 뒤 reMarkable로 복사하는 방식임
- reMarkable2:
ghostwriter-rm2 - reMarkable Paper Pro:
ghostwriter-rmpp
- reMarkable2:
- 기기에서는 SSH로 접속해 실행 권한을 부여하고
./ghostwriter를 실행함 - 기본 실행은
claude-sonnet-4-0을 사용함./ghostwriter./ghostwriter --model gpt-4o-mini
- 백그라운드 실행 예시는
nohup ./ghostwriter --model gpt-4o-mini &임 - 부팅 시 자동 실행은 TODO로 남아 있음
사용 흐름과 CLI 옵션
- 사용자는 먼저 reMarkable에서
ghostwriter를 실행한 뒤 화면에 내용을 그리고, 오른쪽 위 코너를 손가락으로 탭해 어시스턴트를 트리거함 - 처리 중에는 SSH 세션에 터치 감지와 처리 로그가 표시되고, 화면에는 진행 표시용 점이 그려진 뒤 타이핑된 응답이나 그려진 응답이 나타남
- 모델과 엔진 관련 옵션
--model MODEL: 사용할 모델, 기본값은claude-sonnet-4-0--engine ENGINE:openai,anthropic,google중 선택하며 모델에서 자동 감지 가능--engine-api-key KEY: API 키 직접 지정--engine-base-url URL: 커스텀 API 기본 URL 지정
- 동작 관련 옵션
--prompt PROMPT: 프롬프트 파일 지정, 기본값은general.json--trigger-corner CORNER: 터치 트리거 코너 지정, 기본값은UR이며UL,LR,LL도 지원
- 도구 관련 옵션
--no-svg: SVG 그리기 도구 비활성화--no-keyboard: 텍스트 출력 비활성화--thinking: Anthropic의 thinking 활성화--web-search: Anthropic의 웹 검색 활성화
- 테스트와 디버깅 관련 옵션
--log-level LEVEL:info,debug,trace설정--no-loop: 한 번 실행 후 종료--input-png FILE: 스크린샷 대신 PNG 파일 사용--output-file FILE: 출력 저장--save-screenshot FILE: 스크린샷 저장--save-bitmap FILE: 렌더링 결과 저장--no-submit: 모델에 제출하지 않음--no-draw: 출력 그리지 않음--no-trigger: 터치 트리거 비활성화--apply-segmentation: 공간 인식을 위한 이미지 세그먼트 추가
구현과 개발 워크플로
- 개발은 Ubuntu에서 주로 진행됐고 OSX에서도 동작함
- 개발 흐름은 의존성 설치, reMarkable 대상 크로스 컴파일, 기기로
scp전송, 기기에서 재실행으로 구성됨 - 크로스 컴파일에는 Docker, Rust,
cross-rs, ARM 타깃이 사용됨- reMarkable2 타깃:
armv7-unknown-linux-gnueabihf - reMarkable Paper Pro 타깃:
aarch64-unknown-linux-gnu
- reMarkable2 타깃:
- 빌드 후 전송 과정은
build.sh로 감싸져 있음./build.sh: reMarkable2용 빌드와 전송./build.sh rmpp: reMarkable Paper Pro용 빌드와 전송
- 릴리스용 빌드는
v2026.09.21-01같은 태그를 main에 붙이면 GitHub Action이 최신 릴리스를 생성하는 방식임
기능 변화와 실험 기록
- 2024-10-06에는 기본 개념 증명이 동작함
- 수학 문제
3 + 7 =에 답을 채우는 예시가 동작함 - “Draw a picture of a chihuahua. Use simple line-art” 예시가 동작함
- SVG 출력을 래스터화한 뒤 많은 점을 그리는 방식은 reMarkable에서 잘 동작하지 않는 경우가 있었음
- 수학 문제
- 2024-10-07에는 오른쪽 위 터치 트리거와 상태 표시가 추가됨
- 터치하면 화면에
X가 그려지고, 처리 중에는 X에 추가 선이 그어짐 - 사용자가 직접 지워야 함
- 터치하면 화면에
- 2024-10-10부터 가상 키보드 기반 텍스트 입력 실험이 시작됨
- reMarkable의 페이지마다 큰 텍스트 영역이 하나 있고 서식은 기본적인 수준임
rM-input-devices를 통해 가상 키보드를 만들어 텍스트 레이어에 출력하는 방식을 검증함
- 2024-11-02에는
draw_text와draw_svg도구가 제공되기 시작함- 하나의 전체 어시스턴트가 키보드 텍스트로 답할지 SVG 그림으로 답할지 결정함
- 2024-11-07에는 Claude/Anthropic 지원이 추가됨
- OpenAI와 거의 동일한 도구 사용 설정을 쓸 수 있음
- 그리기는 더 선호하는 것처럼 보였지만, 그리기와 공간 인식은 좋지 않다고 기록돼 있음
- 2024-12-02에는 기본 이미지 세그먼트 단계가 추가됨
- 세그먼트 좌표를 Vision-LLM에 전달해 고려하게 함
- 당시에는 Claude에만 연결돼 있었음
- 박스 안에 X를 넣는 작업과 수학 답 위치 배치에서 개선 사례가 기록돼 있음
--apply-segmentation으로 명시적으로 활성화해야 하며,--input-png또는--save-screenshot을 전제로 PNG를 다시 파싱함
- 2024-12-15에는 OpenAI와 Anthropic 백엔드를 위한 다형적 엔진 계층이 분리됨
- 엔진과 모델을 인자로 전달할 수 있게 됨
- 프롬프트와 도구 정의가
prompts/디렉터리로 외부화되고 통합됨
- 2024-12-25에는 CLI가 단순화되고 확장됨
-m gpt-4o-mini만 넘기면 엔진을openai로 추정함- Groq 사용 예시가 추가됨
gemini-2.0-flash-exp와GOOGLE_API_KEY를 통한 Google Gemini 지원이 추가됨
- 2025-05-10에는 Anthropic의
thinking과web_search가 추가됨- thinking 응답은 처리하지만 화면으로 보내지는 않음
- 웹 검색은 Anthropic 서버 측 기능으로 동작함
- 기본 활성화는 아니며
./ghostwriter --thinking --web-search로 실행함
- 2025-09-21에는 reMarkable Paper Pro 관련 수정과 옵션 추가가 이뤄짐
- 3.20에서 화면 해상도가 변경돼 스크린샷이 제대로 들어오지 않던 문제가 수정됨
- 사용자 요청으로
--no-svg가 추가됨 --trigger-corner LR등 트리거 코너 지정이 추가됨
reMarkable Paper Pro와 uinput
- 2025-03-03에 Ghostwriter가 reMarkable Paper Pro에서도 동작하게 됨
- 화면과 입력 방식이 조금 다른 점은 예상된 차이였음
- 예상 밖의 문제는 reMarkable Paper Pro에
uinput커널 모듈이 포함되지 않았다는 점임 - reMarkable/linux-imx-rm을 사용해
uinput모듈을 빌드하고 번들함 - Ghostwriter는
uinput모듈이 로드돼 있지 않으면 로드를 시도함 - 각 reMarkable 릴리스가 보통 새 Linux 버전을 사용해 서로 호환되지 않을 수 있어, 이 부분은 큰 부담으로 기록돼 있음
- 2025-04-26에는 3.16, 3.17, 3.18용 모듈이 준비됨
- 2025-12-06 기록에는 업데이트 후 rmpp Linux가 이미 공개돼 있었고,
uinput모듈도 이미 존재했지만 로드는 필요했다고 적혀 있음
평가와 향후 아이디어
- 기본 평가 시스템은 완료된 항목으로 정리돼 있음
- 입력용 스크린샷 세트 생성
- 다양한 사용 사례 표현
- 텍스트, SVG, 액션 형태의 출력 예시 생성
- 일부는 사람 또는 별도 Vision-LLM 판정자를 통한 평가 가능성 포함
- 2024-12-22에는 run_eval.sh를 포함해 평가 시스템이 확장되기 시작함
- 당시 파라미터는 세그먼트 사용 여부와 Claude 3.5 Sonnet 또는 ChatGPT 4o-mini 선택을 하드코딩한 형태였음
- 초기 평가 리포트가 포함됨
- 최종 리포트에는 48회 실행이 있었고 비용은 약 $1로 기록됨
- WIP 항목으로 프롬프트 라이브러리가 있음
prompts/에 시작점이 있음- 도구를 프롬프트에서 설정 가능하게 하는 구상임
- TODO 관리용 프롬프트 예시에는
todo를 찾아 추출하고add-todo.sh같은 외부 명령을 실행하는 방식이 포함됨
- 향후 아이디어에는 초기 설정 파일 생성, API 키 입력, 자동 시작과 자동 복구, PlantUML 또는 Mermaid 기반 다이어그램 생성, 외부 조회, 이메일이나 Slack 전송이 포함됨
- 대화 모드 구상도 있음
- 한 화면에서 턴별 화면 버전을 추적함
- 원본 입력, 모델 응답, 새 입력을 색상으로 구분하는 방식이 제안돼 있음
- “새 프롬프트”와 “계속”을 서로 다른 트리거로 나누는 방식도 포함됨
- 로컬 네트워크 Vision-LLM 실험도 있음
- Ollama의 OpenAI API 호환 모드는
llama3.2-vision이 도구를 지원하지 않아 실패함 - Groq의
llama-3.2-vision은 도구를 지원하지만 ChatGPT, Claude, Gemini만큼 좋지 않다고 기록돼 있음
- Ollama의 OpenAI API 호환 모드는
- 추가 아이디어에는 스트리밍 LLM 서비스와 중단, 비동기 처리, OpenAI responses API, MCP(Model Context Protocol), 통합 웹 인터페이스가 포함됨
참고한 리소스
- Awesome reMarkable: reMarkable 관련 리소스
- reSnap: 화면 캡처 기반
- rmkit lamp: 화면 그리기 기법 참고
- resvg: SVG-to-PNG 처리
- rM-input-devices: 키보드 없이 가상 입력 장치 생성
- reMarkableAI: OCR→OpenAI→PDF→Device 방식의 관련 프로젝트
- rMAI: 별도 앱 형태의 reMarkable-LLM 인터페이스
- Crazy Cow: reMarkable1용 텍스트를 펜 스트로크로 바꾸는 도구