1P by GN⁺ | ★ favorite | 댓글 1개
  • 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_KEY
    • ANTHROPIC_API_KEY
    • GOOGLE_API_KEY
  • 설치는 로컬 컴퓨터에서 기기별 바이너리를 내려받은 뒤 reMarkable로 복사하는 방식임
    • reMarkable2: ghostwriter-rm2
    • reMarkable Paper Pro: ghostwriter-rmpp
  • 기기에서는 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
  • 빌드 후 전송 과정은 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_textdraw_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-expGOOGLE_API_KEY를 통한 Google Gemini 지원이 추가됨
  • 2025-05-10에는 Anthropic의 thinkingweb_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만큼 좋지 않다고 기록돼 있음
  • 추가 아이디어에는 스트리밍 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용 텍스트를 펜 스트로크로 바꾸는 도구

댓글과 토론

Hacker News 의견들
  • 프로젝트 만든 사람임. 계속 진행 중인 작업이고, 가장 큰 깨달음은 비전 모델의 공간 인식 한계였음
    대략적인 평가 예시는 https://github.com/awwaiid/ghostwriter/blob/main/evaluation_...에 있음
    다음으로는 yaml+셸스크립트 기반 에이전트 프레임워크/도구로 계속 빌드·추출하고, 사전 분할 같은 공간 인식 방법을 더 탐색하며, 많은 점 대신 실제 펜 획을 보내는 reSvg 백엔드를 작성할 계획임

    • 정말 멋짐. 단순히 “꾸밈없는 턴제”가 아니라 더 협업적인 사용 방식이 떠오름
      예를 들어 단어, 간단한 수학, 다이어그램이 섞인 노트를 쓰다가 핵심 문구에 밑줄을 그으면 “기기”가 여백에 그 문구를 확장해 줄 수 있음
      기기가 다이어그램을 그리는 중에 내가 끼어들어 일부를 지우고 고치면, 그걸 이해해서 변경하는 식도 가능해 보임
      필기 인식으로 얻는 텍스트, 획 제스처, 작은 아이콘 언어, 그리고 LLM이 결합되면 기존 습관에 갇힌 우리가 바로 떠올리기 어려운 새 사용자 상호작용 패러다임이 열릴 것 같음
      이런 것에서 곧 “모든 데모의 어머니” 같은 순간이 나올 수도 있어 보이지만, UX 디자이너가 아니라 명확히 상상하긴 어렵고 어쩌면 만든 사람이 해낼 수 있을 듯함
    • 효과가 정말 멋짐. 실제로는 어떻게 쓰일 거라고 보는지 궁금함
      제품 관점에서는 스타일러스를 멈추는 순간마다 계속 답을 쓰려 하지 않도록, LLM에게 응답을 요청하는 모드를 쉽게 켜고 끌 수 있어야 할 것 같음
      한동안 스케치하고 생각한 뒤 대화를 다시 시작하고 싶을 수도 있고, 특정 페이지만 LLM을 켜고 다른 페이지는 끄고 싶을 수도 있음
      기기에 SSH 접근하려면 어떤 종류의 탈옥이 필요한지도 궁금함
  • reMarkable 태블릿용 앱을 해킹해서 만드는 걸 보는 게 정말 좋음
    예전에 작은 reMarkable 앱을 만들어서 여기 공유했었음: https://digest.ferrucc.io/

    • 이런 걸 볼 때마다 Remarkable 2 앱 개발을 해보고 싶어짐. 추천할 만한 자료가 있는지 궁금함
      공식 개발자 사이트를 찾았음: https://developer.remarkable.com/documentation
    • 멋짐. 창의적인 해킹으로 reMarkable 기능이 늘어나는 걸 보는 게 좋음
      앱을 살펴봤는데, reMarkable용으로 개발하면서 가장 어려웠던 점이 무엇이었는지 궁금함
  • reMarkable 태블릿이 좀 덜 잠겨 있었으면 좋겠음
    좋아하는 하드웨어 중 하나라서 앱이 더 많았으면

    • 잠겨 있다고? SSH로 접속하면 셸을 얻을 수 있음. iPad가 그걸 허용하면 그때 다시 얘기하자고 봄
  • 몇 달 전부터 이걸 구현해보고 싶었는데, 정말 잘 만들었음

    • 아직 진행 중인 작업이지만 배우고 영감을 얻기엔 아주 재미있는 프로젝트임
      Rust도 조금 들어갔고, 기기 제약과 씨름했고, 여러 LLM API 정규화, 공간 비전 LLM 교육 같은 것도 섞여 있음
    • 한때 goMarkableStream을 MCP 서버로 바꾸고 싶었음
      화면은 가져올 수 있었지만, “해킹” 없이는 응답을 다시 써 넣을 수 없었음
  • 이번 주말에 시도해볼 생각임
    할 일 목록을 쓰면 PDF를 이메일로 보내고 LLM에 넘겨 작업을 자동 생성하는 아이디어를 갖고 있었는데, 이건 그 목표를 실시간으로 훨씬 더 잘 달성할 수 있는 방법을 열어줌

    • 몇 달 전에 Claude와 rMPP로 개념 증명을 했을 때 꽤 잘 작동했음
      “언젠가 하고 싶은데 정해진 시간은 없으니 실제 일정과 겹치지 않는 시간으로 골라줘” 같은 모호한 일정 지정도 처리했음
      프롬프트도 거의 필요 없었지만, 워크플로가 별로라서 결국 PDF를 이메일로 보내는 방식이었음
      다시 봐야 할 것 같긴 한데, 어차피 만든 작업들을 무시해서 의욕이 안 났음
    • 필요하면 도와줄 수 있음. 지금까지 이걸 실제로 돌려본 사람이 한 명 정도밖에 없는 것 같음
      reMarkable Discord 서버 https://discord.gg/u3P9sDW에 있음. https://github.com/reHackable/awesome-reMarkable에서도 링크돼 있음
      Rust 바이너리라 설치는 쉬워야 함. 이론상으로는 :)
  • Android 기반 Onyx Boox 전자책 리더에서도 가능할지 궁금함

    • reMarkable의 제약 때문에 스크린샷을 찍고, 독점 드로잉 앱과 상호작용하도록 입력 이벤트를 주입하는 방식을 썼음
      Android에서는 적절한 권한이 있으면 앱 간 스크린샷은 가능할 것 같지만, 그리기 이벤트 주입은 잘 모르겠음
      다른 방법은 전용 앱을 만드는 것임. 방금 Apple Pencil을 샀고, 이 개념을 웹 앱으로 옮겨볼까 생각 중인데 지금까지는 의외로 잘 작동함
      그래도 제대로 된 해법이라면 이 에이전트가 기존 앱과 상호작용하는 편이 더 좋을 것 같음
  • 필기 입력과 LLM을 결합하는 건 훨씬 더 자연스러운 워크플로를 만들어주는 훌륭한 사용 사례임
    지저분한 필기를 얼마나 잘 처리하는지, 개인 노트로 미세조정하면 시간이 지나며 인식이 좋아질지도 궁금함

    • 몇 달 전에 Remarkable Paper Pro와 Claude로 해봤는데 꽤 잘 됐음
      내 필기가 상당히 엉망인데도, 하고 싶은 일과 대략적인 혹은 구체적인 시간을 적으면 캘린더에 넣을 수 있는 ical을 만들어줬음
    • 보통 내가 내 필기를 읽을 수 있으면 모델도 읽을 수 있음. 그 부분은 문제가 없었음
      진짜 문제는 공간 인식에 더 가까움. 상자 안에 X를 안정적으로 그리는 것도 어렵고, 틱택토나 점 잇기 게임은 더더욱 어려움
  • 좋음. 벡터 확산 모델도 몇 가지 있는데, 모델이 뭔가 그리기로 판단하면 도구 호출로 그런 모델에 맡기면 어떨까 싶음
    그러면 좌표 범위와 프롬프트를 지정할 수 있을 것임

    • 이유는 두 가지임. 하나는 아직 거기까지 못 했기 때문이고, 둘째는… 사실 그 하나뿐임
      추천할 만한 것, 가능하면 호스팅 API가 있는 모델이 있는지 궁금함
  • PDF 논문 읽기용으로 reMarkable의 11인치 크기가 충분한지 궁금함
    13인치 Sony DPT 2세대를 쓰고 있는데 보기에는 완벽함. 그래도 이런 프로젝트 때문에 reMarkable 제품이 계속 끌림

    • Remarkable 2로 논문을 읽어봤지만, 글자를 편하게 읽기엔 살짝 작았음
      적극적으로 읽는 편이라 컬러 하이라이트가 없는 점도 아쉬움. 주석 기능은 훌륭함
      지금은 iPad의 Zotero 앱에서 논문 검토를 계속하고 있음
    • 최근 reMarkable Pro 태블릿을 샀고, 그 덕분에 Sony DPT-S1과 reMarkable 2에서 넘어갈 수 있었음
      reMarkable 2는 해킹 가능성이 좋아서 괜찮았지만, Pro의 화면 크기와 컬러 기능 덕분에 훌륭한 대체품이 됐음
    • PDF용으로는 겨우 쓸 만한 정도임
  • Boox 태블릿을 쓰고 있는데, 사실상 전자잉크 화면이 달린 완전한 Android 태블릿이라 이런 기능에 딱 맞을 것 같음
    5년쯤 뒤에는 모바일 하드웨어가 이런 걸 로컬 실행으로 지원할 수 있을지도 궁금함