원문 캡처 · gist.github.com
원문 캡처 · gist.github.com

1996년 Lifestreams 논문이 구상한 summarize는 문서 유형에 따라 여러 기록을 한눈에 볼 수 있는 요약 화면으로 바꾸는 기능이었다. Supertag 제작자는 이제 자연어 문장으로 기존 Org 노트의 화면 구성을 만들 수 있다고 설명하지만, 노트 본문을 읽고 내용을 요약하는 기능은 아직 제공하지 않는다.

Lifestreams는 파일과 폴더 대신 시간순 문서 스트림을 제안하며 new, clone, transfer, find, summarize 다섯 가지 작업을 제시했다. 당시 summarize는 미리 정한 문서 유형과 요약 방식 중 하나를 메뉴에서 골라야 했다. 제작자는 이 방식이 예측하지 못한 화면을 만들 수 없고, 메뉴 항목마다 사실상 작은 애플리케이션을 미리 작성해야 하는 한계가 있었다고 짚는다.

Supertag는 Emacs 안에서 표준 Org 파일을 사용한다. Org 텍스트가 원본이며, Supertag는 이를 인덱스·관계·변경 이벤트가 있는 로컬 데이터베이스로 투영한다. ID가 있는 Org 제목은 속성, 상태, 시간 정보, 자유 형식 텍스트를 지닌 노드가 된다. 입력 단계에서 정해진 스키마를 강제하지 않는다.

요약 화면에는 두 종류가 있다. Summary Panel은 태그 하나에 속한 노트를 살펴보고, Stream Agent는 노트를 하나씩 처리한다. Summary Panel에서는 “활성 프로젝트마다 미완료 작업을 보여주고, 가장 오래 기다린 작업을 강조한다”처럼 원하는 화면을 문장으로 설명한다. 모델은 노트의 본문과 날짜가 아닌 속성값을 받지 않고, 속성 이름과 실제 기록 6개의 제목·상태·태그를 바탕으로 화면 코드를 작성한다. 결과가 맞지 않으면 문장을 바꿔 다시 작성하게 할 수 있다.

패널은 파일로 저장되며 열 때마다 데이터베이스를 조회해 현재 상태를 표시한다. 패널에서 TODO 상태를 바꾸거나 항목으로 이동할 수 있다. 다만 현재 패널이 다루는 것은 기록, 제목, 상태, 태그, 날짜, 개수 같은 사실 정보다. 모델이 노트 본문을 읽고 그 안에서 일어난 일을 요약하는 기능은 아직 패키지에 포함되지 않았다.

Stream Agent는 “30일 동안 연락하지 않은 사람을 위로 올리고, 연락하면 키 입력으로 날짜를 기록해 아래로 내린다” 같은 설명을 바탕으로 그룹화·정렬·표시 항목·키 동작을 작성한다. 검사를 통과하지 못한 결과는 모델에 되돌아가며, 통과한 결과도 화면을 확인하고 승인하거나 수정한 뒤 저장한다. 저장 후에는 모델 호출 없이 동작한다. 별도 Emacs 프로세스의 허용 함수 목록 안에서 실행하고 데이터만 반환한다. 에이전트가 표시하지 않은 기록은 ‘Others’ 그룹에 나타나며, 키 입력은 현재 노트의 Org 속성이나 SCHEDULED·DEADLINE 날짜 필드만 수정한다. 새 노트는 만들 수 없다.

제작자는 Org 파일이 원본으로 남기 때문에 노트를 일반 텍스트로 읽고 grep으로 검색하거나 Git으로 동기화할 수 있다고 설명한다. Supertag가 추가하는 태그 계층은 .supertag-metadata.eld에, 패널과 에이전트는 vault 안의 별도 파일에 저장된다. 이는 스트림 문서를 서버에 저장한 Lifestreams 프로토타입과 데이터 보관 방식이 다르다.

제작자의 설명에 따르면, 1996년에는 데이터가 들어오기 전에 사람이 화면을 만들어야 했지만 Supertag에서는 이미 있는 노트를 대상으로 문장만으로 화면을 만들 수 있다. 다만 이 기능은 기록을 구성하고 표시하는 데 초점을 두며, 노트 본문의 의미를 요약하는 단계까지 구현된 것은 아니다.