Community라이팅 & 에디팅github.com

m4bwav/readwright

전자책과 문서에서 텍스트를 필요한 섹션만 선택하여 읽을 수 있게 해주는 도구입니다. 전체 파일을 한 번에 컨텍스트에 덤프하는 대신, 목차를 먼저 보여주고 필요한 장만 읽거나 검색할 수 있습니다.

readwright란 무엇인가요?

readwright는 AI 에이전트가 전자책 및 문서 파일을 효율적으로 읽을 수 있도록 설계된 명령줄 도구입니다. EPUB, MOBI, AZW3, FB2, DOCX, ODT, RTF, PPTX, XLSX, HTML, EML, CSV, JSON, Markdown 및 이들의 압축 아카이브를 기본 지원하며, PDF, 레거시 DOC/XLS/PPT는 poppler, calibre, LibreOffice가 설치된 경우 지원합니다. 이 도구의 핵심 철학은 '필요한 것만 읽는다'입니다. 15만~30만 토큰에 달하는 소설 전체를 컨텍스트에 덤프하는 대신, 먼저 파일 정보와 목차(단어 수 포함)를 제공하고, 사용자가 선택한 섹션만 출력하거나 정규 표현식 검색을 통해 특정 구절을 찾아낼 수 있습니다. 이는 Claude Code, Cursor, Codex 등 컨텍스트 윈도우가 제한된 AI 코딩 도구에서 특히 유용하며, 사용자가 파일을 읽거나 인용, 요약, 검색, 텍스트 추출을 요청할 때 사용됩니다. 또한 PDF의 경우 내장 OCR(Windows 10/11)이나 tesseract를 활용한 텍스트 추출, DRM 감지, 여러 언어가 혼합된 문서에서 특정 언어만 필터링하는 기능 등을 제공합니다. 저작권이 있는 책의 경우 요약과 짧은 인용만 하도록 권장하며, 사용자가 문서를 요청할 때마다 이 스킬을 사용하는 것이 좋습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/readwright/tree/HEAD/skills/readwright

Installed? Explore more 라이팅 & 에디팅 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

readwright은(는) 무엇을 하나요?

소설의 분량은 보통 150,000~300,000 토큰입니다. 변환기(epr -d, pandoc -t plain, ebook-convert book.txt)로 전체를 덤프하면 질문에 답변하기도 전에 컨텍스트가 가득 찹니다. readwright는 에이전트에게 단어 수가 포함된 목차를 제공한 후, 선택한 섹션, 마지막으로 섹션 및 단락 번호가 포함된 검색 결과를 제공하여 작업에 필요한 내용만 읽고 나머지는 읽지 않도록 합니다.

아래에서 RW는 python "<this folder>/scripts/rw.py"(macOS 및 Linux에서는 python3)를 의미합니다. 런처 scripts/rw.sh 및 scripts/rw.ps1도 동일한 작업을 수행합니다. Python 3.10 이상이 필요하며 기본 제공 형식에는 다른 것이 필요하지 않습니다. RW formats는 이 기계에 설치된 외부 도구를 보여줍니다.

0단계: 최신 상태 확인

evergreen.json을 읽으십시오. contradiction이 설정되었거나 오늘 날짜가 next_due 이후이면 한 줄로 말하고 작업을 수행한 후 새로 고침하십시오(MAINTENANCE.md). 변환기 버전과 전자책 형식은 변경됩니다. 아래 절차는 이에 의존하지 않습니다.

Discord: 실시간 채널은 파일이 아닙니다. everscout의 scripts/es_discord.py를 사용하여 읽으십시오(사용자가 직접 초대한 봇, everscout kb/discord.md). 사용자가 만든 채널 내보내기(JSON 또는 HTML)는 여기의 다른 JSON 또는 HTML 파일처럼 읽힙니다.

1단계: 크기 측정

RW info FILE을 실행하십시오. 파일의 확장자가 아닌 바이트에서 감지된 형식, 제목, 저자, 언어, 섹션 수, 단어 수 및 대략적인 토큰 수(문자 수를 4로 나눈 값)를 출력합니다. 약 6,000 토큰(25,000자) 미만인 경우 RW read FILE로 전체 텍스트를 출력하고 여기서 중단할 수 있습니다.

info가 DRM을 보고하면 바로 말하고 중단하십시오. readwright는 절대 DRM을 제거하지 않으며, 사용자도 그래서는 안 됩니다: 스토어 자체 리더기나 판매자의 DRM 없는 사본을 제안하십시오. 누락된 도구(pdftotext, calibre의 ebook-convert, LibreOffice)를 명명하면 출력된 설치 명령줄을 전달하십시오. 사용자의 동의 없이 절대 설치하지 마십시오. PDF의 경우, 에이전트 자체 읽기 도구(페이지 범위 지정)가 더 나은 방법인 경우가 많습니다.

info가 note: no text layer라고 출력하면, 책은 페이지 이미지(스캔본)이며 readwright가 읽을 내용이 없습니다. 노트에 명명된 경로를 순서대로 따르십시오. 첫째, 같은 책의 다른 형식 사본이 옆에 있는 경우; DjVu 사본에는 종종 OCR 텍스트가 포함되어 있습니다. 그런 다음, PDF의 경우 RW ocr FILE: 페이지를 렌더링하고 Windows 10 및 11에 내장된 OCR(또는 설치된 경우 tesseract)을 실행하여 페이지당 약 1초가 소요되며, 25페이지마다 저장하고 ~/.readwright/ocr/에 텍스트를 유지하므로 이후에 동일한 파일에 대해 info, toc, read 및 grep이 이를 사용합니다(--pages N-M은 몇 페이지만, --force는 다시 실행). 전체 책은 백그라운드에서 실행하십시오. OCR은 일부 문자를 잘못 읽고 제목이 없으므로 섹션은 페이지입니다. 페이지 이미지에 대해 인용문을 확인하십시오. 마지막으로, RW page FILE 1-5(60dpi, --dpi, --out-dir)로 몇 페이지를 렌더링하고 자체 이미지 리더기로 보십시오. OCR 도구를 설치하기 전에 먼저 물어보십시오.

2단계: 개요

RW toc FILE을 실행하십시오. 각 줄은 N. 제목 (단어 w) 형식이며 수준에 따라 들여쓰기됩니다. --ids는 각 섹션의 id(파일 및 프래그먼트, 페이지, 시트)를 추가하지만 거의 필요하지 않습니다. EPUB 제목은 책 자체 탐색(nav 문서 또는 NCX)에서, DOCX 및 ODT 제목은 제목 스타일에서, HTML은 h1~h3에서, 일반 텍스트 및 Markdown은 제목 또는 CHAPTER 줄에서 가져옵니다. 구조가 없는 텍스트는 약 3,000 단어의 부분으로 나뉩니다. zip 아카이브의 경우 toc는 구성원을 나열합니다. 이후의 모든 명령에 --member NAME(또는 해당 번호)을 추가하십시오.

각 장 번호를 자체적으로 거의 비어 있는 섹션으로 나열하는 책(Packt, 일부 O'Reilly)은 병합되어 표시됩니다: Ch. 12: Title은 제목의 섹션 번호 아래에 인쇄됩니다(번호만 있는 섹션은 숨겨지지만 번호는 유지되며 여전히 읽을 수 있음). RW toc FILE --depth 1은 각 줄의 단어가 아래 섹션에서 롤업된 최상위 수준(파트 및 장)만 인쇄합니다(--depth 2는 다음 수준을 추가합니다. JSON은 chapter 및 words_total을 가져옴). 손으로 세는 대신 장을 셀 때 사용하십시오. 개요가 없는 PDF는 페이지당 하나의 섹션을 나열합니다. RW toc FILE --group은 공통 머리말을 공유하는 페이지를 페이지 범위(장)로 접어 --section 20-40으로 읽습니다. 머리말이 없으면 인쇄된 목차 페이지를 사용합니다. 여기서 각 항목은 제목 줄 다음에 페이지 번호 줄(0.26.0)이 오거나 항목이 Title ... 21 Next ... 26(0.35.0)으로 계속되며, toc는 노트에 이를 명시합니다.

사용자의 단어를 toc 줄과 일치시키십시오. "14장"은 일반적으로 CHAPTER FOURTEEN이라는 제목의 줄을 의미하며, 많은 전자책에서 이 줄은 장 제목과 에피그래프만 포함합니다. 본문은 다음 섹션입니다. 단어 수는 이를 보여줍니다(72단어, 그 다음 6,330단어). 섹션 번호는 장 번호가 아닙니다. 앞표지가 먼저 오므로 소설의 16장은 섹션 24일 수 있습니다.

3단계: 필요한 것만 읽기

  • RW read FILE --section 43-44 (N, N-, N,M도 가능. 반복된 --section은 누적됨) 또는 --title "REGEX" (대소문자 구분 안 함, 제목 및 id와 일치. 일치하는 항목이 없으면 공백이 무시되므로 westgate는 WEST GATE를 찾음)
  • --title이 300단어 미만의 섹션에 도달하면 그 뒤의 섹션이 추가되고 노트가 표시됩니다. --with-next는 모든 선택에 대해 동일하게 수행합니다.
  • 책에서 3회 이상 반복되는 제목("준비하기", "방법...", "더 알아보기...")의 섹션은 read 헤더와 toc에서 가장 가까운 고유한 제목과 함께 표시됩니다: How to do it... (in: Following a path) (toc JSON에서는 in)
  • --max-words N은 선택된 각 섹션을 N 단어로 제한하므로 --section 27-58 --max-words 80과 같은 배치를 작게 유지합니다. 잘린 섹션은 [cut at N of M words; continue with --section S --offset C]로 끝납니다.
  • --drop-repeated (읽기)는 섹션의 30% 이상에서 문자 그대로 또는 숫자가 접힌 후 마지막 네 단어가 동일하게 반복되는 짧은 단락(40단어 이하)을 삭제합니다. EPUB의 이미지당 크레딧 및 저작권 표시. 또한 하나의 섹션 내에서 10회 이상 반복되는 8단어 이하의 줄(단락의 1/4)을 삭제합니다. 예: 각주 뒤에 오는 "GO TO NOTE REFERENCE IN TEXT" 링크. 기본적으로 꺼져 있습니다.
  • --skip-code (읽기 및 grep)는 구조로 찾은 코드 블록(EPUB 및 HTML <pre>, 펜스된 Markdown; PDF는 표식이 없으므로 제외)을 삭제하고 삭제된 단어 수를 표시합니다. 조언 줄은 끝에 한 줄로 표시됩니다. --quiet는 이를 삭제합니다.
  • --lang CODE (읽기 및 grep, 0.43.0; en, de, es, fr, it, nl, pt)는 짧은 공통 단어가 해당 언어를 선호하는 단락을 유지합니다. 여러 언어가 나란히 인쇄된 판을 위한 것입니다. 4단어 미만의 동점 및 조각은 제목을 제외하고 삭제됩니다. 코드와 표는 유지됩니다. OCR로 붙은 단어는 여전히 계산됩니다. 바닥글은 삭제된 단어 수를 표시하고 --max-chars는 남은 것을 계산합니다. info는 여러 언어로 된 단락이 많은 책에 대해 메모합니다.
  • --headings (읽기, 0.20.0)는 선택된 섹션의 제목 단락만 수준별로 들여쓰기하여 각각 단락 번호와 그 아래 단어와 함께 출력합니다. --at-para P로 이동합니다. 제목이 없는 섹션(PDF 구조 없음)은 그렇다고 말합니다. toc --group 또는 grep을 사용하십시오.
  • --strip-boilerplate (읽기 및 grep)는 PDF 페이지에서 반복되는 줄(바닥글, 페이지 번호만, 머리말)을 삭제합니다. 반복 빈도로 찾습니다. 두 명령 모두에서 사용하여 grep의 단락 번호가 --at-para와 일치하도록 하십시오.
  • 모든 섹션은 헤더 줄로 시작합니다: === [43/80] 제목 | id ... | words | starts at word N of TOTAL (P%) ===
  • 출력은 --max-chars(기본값 25,000)에서 중단됩니다. 잘림은 한계 근처의 단락, 줄 또는 문장 경계에서 발생하며(0.11.1), 마지막 줄은 계속할 위치를 알려줍니다: --offset N. 각 읽기를 셸 도구의 출력 제한 미만으로 유지하십시오. Claude Code는 명령 출력의 30,000자를 표시하고 나머지는 사용자가 열어야 하는 파일에 저장합니다. 두 개의 긴 장은 각각 한 번의 호출로 읽으십시오. 그 이상은 --out <scratch>/part.txt로 선택 항목을 쓰고 자체 읽기 도구로 여십시오. 리더 에이전트에 여러 장을 전달하려면 --out-dir <scratch>/secs를 사용하면 선택된 각 섹션이 자체 파일(NNN-title.txt)로 기록되고 크기가 나열됩니다(0.12.0).
  • --section은 한 번의 호출로 목록과 범위를 사용합니다: --section 61,80,87 또는 --section 12,189-190. 섹션은 각각 자체 헤더와 함께 해당 순서로 인쇄됩니다.
  • 짧은 선택 항목은 다음 섹션이 텍스트를 계속 이어갈 가능성이 있을 때 해당 섹션을 명명하는 힌트로 끝납니다: 선택 항목이 제목 페이지 또는 에피그래프(60단어 미만)이거나 다음 섹션에 제목이 없거나, 연속으로 표시되거나, 제목이 반복되는 경우(0.15.0). 더 이상 모든 작은 하위 섹션에서 실행되지 않음.
  • 선택자가 없을 때 read는 텍스트가 제한을 초과하면 거부하고(종료 코드 2) 대신 toc를 인쇄합니다. 이 거부는 도구가 작동하는 방식입니다. 섹션을 선택하십시오.
  • --format md는 제목과 목록을 Markdown으로 유지합니다. --out FILE은 선택 항목을 파일에 씁니다. --max-chars를 사용하면 깔끔한 중단점에서 자르고 cut at chars A-B of N; write the rest with --offset B을 인쇄합니다(0.15.1). --compact는 단락 사이의 빈 줄을 제거합니다(0.13.0). --offset과 함께 다시 제공하십시오.

4단계: 검색

RW grep FILE "PATTERN" -C 1 --max 5는 일치하는 각 단락을 섹션 번호와 제목, 단락 번호 및 양쪽에 한 단락의 컨텍스트와 함께 출력합니다. 긴 단락은 일치 항목 주변에서 잘립니다(--width). --after N(-A N)은 각 적중 후에 N개의 단락을 추가하여 최대 --width까지 줄 바꿈과 함께 표시합니다. 이를 명명하는 문장 뒤에 오는 코드 블록 또는 목록(0.15.0). 대문자가 없는 패턴은 모든 대소문자와 일치합니다(--case-sensitive는 정확한 대소문자 강제, -i는 모든 대소문자 강제). -F는 일반 문자열을 사용합니다. --count는 섹션당 일치 횟수를 제공하며, 캐릭터나 용어가 등장하는 위치를 찾는 가장 빠른 방법입니다. 각 적중 줄은 | offset N으로 끝나며, read --section S --offset N이 시작되는 문자 오프셋입니다. read --section S --at-para P는 단락에서 시작합니다. toc가 하나의 거대한 섹션(조기 종료되는 북마크)을 기록할 때 사용하십시오. 0.17.0부터 이러한 섹션은 먼저 인쇄된 목차 페이지 또는 "Chapter N, Title" 목록이 명명한 장에서 잘리므로 노트는 실패할 때만 표시됩니다. 종료 코드 1은 일치 항목이 없음을 의미합니다. 사용자가 특정 내용이 언급된 위치나 여부를 물을 때 읽기 전에 검색하십시오.

RW rank FILE topic words (0.24.0)는 몇 가지 주제 단어에 대해 BM25로 섹션 순위를 매기고 점수, 단어 및 각각이 보유한 용어를 출력합니다: 어떤 섹션을 먼저 읽을지, grep이 책 순서로 적중을 출력하는 위치. 불용어와 복수형, -ed 및 -ing 어미는 접히므로 shingles는 shingling을 찾습니다. 책에 없는 단어는 명명됩니다. --paras는 단락 순위를 매깁니다(제목 줄이 종종 승리: 거기서부터 읽음). --top N, --section, --k1 및 --b는 BM25와 동일합니다. 긴 책에서는 먼저 순위를 매긴 다음 상위 섹션 내에서 grep하십시오.

5단계: 전체 책을 스크래치 파일로

긴 책에 대해 여러 번 패스가 필요한 작업(캐릭터가 등장하는 모든 장면, 타임라인)의 경우 RW dump FILE --out <scratch>/book.txt를 한 번 실행하십시오. 그런 다음 자체 검색 및 읽기 도구를 해당 파일에 사용하고 절대 cat을 사용하지 마십시오. 섹션 마커는 === [N/로 시작하는 줄입니다. --format md는 Markdown 제목과 함께 <!-- readwright section N/... --> 주석을 씁니다. 텍스트가 25,000자 미만인 경우에만 dump가 stdout에 씁니다. 파일을 세션의 스크래치 또는 임시 폴더에 넣고 사용자 저장소에는 절대 넣지 마십시오.

6단계: 답변

간략하게 인용하십시오. 저작권이 있는 책의 경우, 사용자가 사본을 소유하고 있더라도 전체 페이지나 장이 아닌 요약과 한두 문장씩 인용하십시오. 각 포인트가 어디서 왔는지(섹션 번호와 제목)를 인용하여 사용자가 확인할 수 있도록 하십시오. 변환 노트(calibre, LibreOffice, pdftotext)가 출력된 경우, 문구가 중요하다면 텍스트가 변환기를 통해 왔음을 언급하십시오.

책 요약하기

  • 이전 읽기의 노트를 기반으로: 재사용하기 전에 인용된 구절 두세 개를 grep하고, 노트에서 건너뛴 한 장을 읽어 새 글이 무언가를 추가하고 복사된 실수를 포함하지 않도록 하십시오.
  • 같은 페이지의 형제 항목 옆에 (0 w)가 표시된 toc 행은 해당 텍스트가 이웃에 있음을 의미합니다: --section N-M으로 전체 그룹을 읽으십시오. 실무 서적은 프레임 또는 레벨 공차를 경험으로 언급합니다. 측정된 것이 아니라 저자의 것으로 인용하십시오.
  • 저자가 강력한 주장을 위해 인용한 연구를 찾아보고 그 한계를 기록하십시오. 대중적인 책은 이를 생략할 수 있습니다. 한 보고서는 성별 차이를 언급했지만, 논문이 연령 범위의 일부에서만 발견했다고 말하지 않았습니다.

다른 주제에 대해 이미 읽은 광범위한 참고 자료: 이전 노트가 당신의 주제를 대상으로 했는지 확인한 다음, 두 리더 에이전트 간에 종류별로 분할하여 그들이 건너뛴 자신의 작업에 대한 장(평가 부록, 분석 장)을 읽으십시오.

사운드 또는 편집 주제에 대해 다시 읽는 영화 또는 방송 교과서: 이전 노트는 일반적으로 이론 장을 다루었습니다. 작업 규칙이 포함된 편집 및 프리믹스 섹션(트랙 레이아웃, 스템, 장면 전환)으로 이동하십시오. 선택한 섹션을 한 번의 호출로 읽으십시오(read --section 248,250,251). 각각 한 번의 호출이 아닙니다.

OCR을 통해 읽은 스캔된 실무자 책(페이지당 하나의 섹션): toc --chapters는 챕터 페이지 범위를 제공합니다. 그런 다음 원하는 장 내에서 --section N-M으로 주제의 단어를 grep하고 적중이 있는 페이지만 읽으십시오. 대부분의 페이지는 일화와 오래된 장비이기 때문입니다.

번호가 매겨지거나 전체 대문자 제목이 있는 평면 PDF 섹션: read --headings로 나열한 다음 --at-para로 원하는 곳으로 이동하십시오.

북마크가 파트에서 중단되는 PDF(toc는 하나의 섹션이 텍스트의 많은 부분을 차지한다고 경고함): 각 큰 섹션에 대해 read --section N --headings를 실행하면 실제 장 맵과 --at-para에 대한 단락 번호가 제공됩니다.

편집된 핸드북: 먼저 편집자의 서문을 읽으십시오. 어떤 장이 무엇을 다루는지 설명하기 때문입니다. 그런 다음 해당 장의 서두와 방법에 관한 모든 구절만 읽으십시오. 각 장에는 자체 저자가 있으므로 장을 인용하고 단독으로 판단하십시오.

이웃 분야의 방법서(게임 효과에 대해 읽는 극장 사운드): 사람과 장소 하드웨어는 건너뛰고 자료를 만드는 장을 읽고 작업의 단어를 나머지 부분에서 grep하십시오. mu?ed와 같은 텍스트는 게시자의 파일에 있을 수 있습니다. 리더를 비난하기 전에 출처를 확인하십시오.

긴 역사 개요: 악기 장은 건너뛰십시오. 방법 단어를 grep하고, 해당 장, 결론, 저자가 ...

관련 스킬