px-summarize-transcript은(는) 무엇을 하나요?
회의록을 증거 기반의 기록으로 변환합니다. 어떤 결정이 내려졌고, 어떤 중요한 사실이 언급되었으며, 누가 어떤 후속 조치를 담당하는지, 모든 항목이 화자, 타임스탬프(있는 경우), 정확한 인용문과 함께 제시됩니다. Python 스크립트는 파싱, 파일 이름 지정, 프론트매터, 인용문 확인 등 기계적인 작업을 담당합니다. 추론은 사람이 수행합니다.
사용 시기
.vtt, Teams에서 복사하여.txt나.md에 붙여넣은 회의록,[화자] YYYY-MM-DD HH:MM:SS형식의 Markdown 회의록, 또는이름: 텍스트줄로 구성된 파일에서 결정사항과 액션 아이템을 추출해야 할 때- 누가 어떤 말을 했는지, 무엇에 동의했는지, 누가 후속 조치를 담당하는지 누군가 물어볼 때
- 정기 회의 시리즈에서 이전 회의의 미해결 사항이 무엇인지 누군가 물어볼 때
- 회의 결과를 프로젝트 문서와 비교하여 확인해야 할 때
번들 레이아웃 (고정)
모든 파일은 회의록이 있는 동일한 폴더에 위치하며, 동일한 파일 이름을 공유합니다. 접미사만 변경됩니다. 다른 곳에 작성할 수 없습니다. 사용자가 다른 폴더를 요청하면 번들은 회의록과 함께 유지된다고 설명하십시오. file_transcript.py는 전체 번들을 시리즈 폴더로 이동할 수 있으며, 구성원은 항상 함께 이동합니다.
| 파일 | 역할 |
|---|---|
<stem>.vtt / .txt / .md | 원본 회의록. .md와 .txt는 프론트매터가 그 자리에 병합됩니다. 기존 키는 절대 변경되지 않습니다. |
<stem>.source.md | .vtt 전용: 작은 Markdown "사이드카" 파일로, .vtt의 프론트매터를 보관합니다. .vtt 파일은 WEBVTT로 시작해야 하며 자체적으로 프론트매터를 가질 수 없기 때문입니다. |
<stem>.turns.md | 턴 인덱스. 한 번 생성되면 --rebuild를 전달하지 않는 한 다시 작성되지 않습니다. |
<stem>.summary.md | 보고서. 재실행 시 <stem>.summary.v2.md, .v3 등으로 작성됩니다. |
절차
스크립트는 이 SKILL.md와 같은 디렉토리의 ./scripts/에 있습니다. 터미널은 사용자 작업 공간에서 시작되므로, 먼저 스킬 폴더의 절대 경로를 확인하고(개인 설치는 보통 ~/.claude/skills/px-summarize-transcript 또는 ~/.agents/skills/px-summarize-transcript) 터미널당 한 번 설정합니다:
$S = "<이 스킬의 절대 경로>\scripts" # PowerShell
S="<이 스킬의 절대 경로>/scripts" # bash / zsh
아래 명령어는 PowerShell ("$S\build_turns.py")을 사용합니다. bash에서는 "$S/build_turns.py"로 작성합니다. 스크립트는 표준 라이브러리만 사용합니다(Python 3.10+). 파일 이름에 공백이 포함되는 경우가 많으므로 경로를 따옴표로 묶으십시오.
한 번에 하나의 회의록만 처리하십시오. 폴더나 "보류 중인 모든 항목"에 대해서는 여러 회의록을 참조하십시오.
-
회의록 정리 (선택 사항). 사용자가 요청하거나, 작업 공간이 회의록을 시리즈 폴더(예:
transcripts/<시리즈>/)에 보관하는데 현재 회의록이 아직 정리되지 않은 경우에 수행합니다.--root의 기본값은./transcripts입니다.python "$S\file_transcript.py" --list --root "<루트>" python "$S\file_transcript.py" "<회의록>" --series "<시리즈>" --root "<루트>"회의에 맞는 기존 시리즈를 재사용하십시오. 적절한 시리즈가 없으면 짧은 케밥-케이스 이름을 제안하고 생성 전에 사용자 확인을 받으십시오. 그런 다음
status에 따라 조치합니다:moved: 새source경로로 계속 진행합니다.already-filed: 회의록이 이미 루트 아래의 폴더나 시리즈 이름의 폴더 안에 있습니다. 이동된 것이 없으므로 계속 진행합니다.duplicate: 동일한 회의록이duplicate_of에 이미 존재합니다. 중단하고 사용자에게 어떤 복사본을 처리할지 물어보십시오. 파일을 삭제하지 마십시오.conflict(종료 코드 2): 동일한 이름의 다른 파일이 이미 시리즈 폴더에 있습니다. 중단하고 사용자에게 물어보십시오.
-
턴 인덱스 구축.
python "$S\build_turns.py" "<회의록>"형식을 감지하고, 아직 존재하지 않으면
<stem>.turns.md를 작성하고, 출처(또는 사이드카)를 스탬프하며, JSON을 출력합니다.turns_path,turns_status,summary_path,has_timestamps,speakers,meeting_date,meeting_date_source,gaps,previous_meeting_summary,transcription을 유지하십시오.turns_status: created또는kept: 계속 진행합니다.kept는 기존 턴 인덱스가 이미 회의록과 일치하므로 다시 작성되지 않았음을 의미합니다.turns_status: source-changed(종료 코드 3): 턴 인덱스가 구축된 후 회의록이 편집되었으며, 기존 보고서가 이전 턴 ID를 인용하고 있습니다. 중단하고 사용자에게--rebuild로 다시 실행할지 물어보십시오.- 지원되지 않는 형식 오류 (종료 코드 2): 사용자에게 지원되는 형식을 알리고 중단하십시오.
meeting_date가null인 경우: 사용자가 날짜를 알려주지 않으면 "명시되지 않음"이라고 쓰십시오.
-
전체 턴 인덱스를 큰 덩어리로 끝까지 읽으십시오. 부분 읽기에서 추출하지 마십시오.
-
화자 매핑. 보고서의 화자 테이블을 위해 화자 레이블당 한 행을 만드십시오: 레이블, 표시할 이름, 식별 방법.
- 증거가 있는 경우에만 다른 이름을 표시하십시오: 그 사람이 이름으로 불리거나, 자신을 소개하거나, 레이블이 명백한 오타인 경우. 증거를 기록하십시오.
- 회의실 기기 레이블은 해당 회의실로 유지하십시오. 그곳에서 들리거나 언급된 사람을 나열하고, 회의록이 명확하게 하지 않는 한 발언을 한 사람에게 귀속시키지 마십시오.
Transcription:헤더 줄에만 언급된 사람은 참석했지만 반드시 말을 한 것은 아닙니다.- 발언하지는 않았지만 언급된 사람을 언급된 위치와 함께 나열하십시오.
- 이름이 명확한 경우에만 이름을 전체 이름으로 확인하십시오.
-
항목 추출 다음 기준을 사용합니다:
- 결정사항: 옵션 간의 선택이 이루어지거나 수락됨 ("이걸로 가죠", "동의", "그렇게 하겠습니다", 또는 이의 없는 제안). 상태: 합의, 잠정, 제안.
- 중요 발언: 틀렸을 경우 범위, 설계, 일정, 비용 또는 위험을 변경할 수 있는 내용: 시스템, 제약 조건, 종속성, 숫자, 날짜, 약속, 명시된 위험에 대한 사실. 잡담이나 재진술은 제외합니다. 관련 발언을 병합하여 12개 이하를 목표로 합니다.
- 액션 아이템: 동사가 포함된 미래 작업으로, 요청되거나 자원함 ("제가", "~해 주시겠어요", "~해야 합니다").
- 미해결 질문: 제기되었지만 회의가 다른 주제로 넘어가기 전에 해결되지 않은 질문.
-
소유자 할당 각 액션 아이템에 대해 수행합니다. 소유자는 결석한 사람을 포함하여 이름이 언급된 누구나 될 수 있습니다.
- 명시적: 이름이 지정되고 요청받았으며 거절하지 않음.
- 자원: 화자가 "제가 ~하겠습니다"라고 말함.
- 위임: 결석하거나 침묵하는 사람에게 할당됨.
(부재 중)표시하고 누가 할당했는지 기록합니다. - 추론: 명시된 역할이나 소유권에서 비롯됨. 추론 근거를 작성합니다.
- 미할당: 위에 해당하지 않음. 소유자를 절대 임의로 만들지 마십시오.
마감일은 명시적으로 언급된 경우에만 기록합니다.
-
증거 첨부 모든 항목에 대해:
- 타임스탬프가 있는 경우:
[T042 00:12:31 화자] "축어적 인용문". - 타임스탬프가 없는 경우 (
has_timestamps: false):[T042 화자] "축어적 인용문". 화자는 화자 테이블에 다른 이름이 표시되더라도 턴 인덱스의 레이블과 정확히 일치해야 합니다. 다른 모든 곳에서는 표시 이름을 사용하십시오.- 인용문은 25단어 이하이며, ASR 오류를 포함하여 정확히 복사합니다. 생략 시
...을 사용합니다. 결정이 여러 턴에 걸쳐 형성되는 경우 여러 턴을 인용하십시오.
- 타임스탬프가 있는 경우:
-
이월 사항 확인 (
previous_meeting_summary가 설정된 경우에만). 해당 보고서의 액션 아이템 및 미해결 질문 테이블만 읽습니다. 각 항목에 대해 이번 회의록을 기반으로 완료, 진행 중, 여전히 미해결, 중단, 언급되지 않음 중에서 결정하고, 이를 보여주는 턴을 인용하십시오. 누군가 말하지 않으면 항목을 완료로 표시하지 마십시오. -
보고서 작성
summary_path에 템플릿을 사용합니다. 본문만 작성하고 프론트매터는 추가하지 마십시오. 항상 "한눈에 보기"를 채웁니다. 사용자가 독자를 지정한 경우에만 "<이름>님을 위한"을 추가합니다(예: "저를 위해, 저는 Dana Ruiz입니다"). 독자가 누구인지 추정하지 마십시오. -
전사 관련 주의사항 표시: 가능한 ASR 오류, 추론으로 매핑한 화자 이름,
gaps의 모든 항목(내용이 누락되었을 수 있음). 인용문을 조용히 수정하지 마십시오. -
인용문 검증 및 실패하는 모든 행을 통과할 때까지 수정 또는 삭제합니다:
python "$S\verify_quotes.py" "<summary_path>" -
번들 완료. 회의 내용에서 짧은 제목과 3~6개의 주제 태그(소문자, 케밥-케이스)를 도출합니다.
transcript와meeting-notes는 자동으로 추가됩니다.python "$S\finalize_bundle.py" "<회의록>" --summary "<summary_path>" --title "<제목>" --tags "태그-하나,태그-둘" --alias "회의록의 레이블=표시 이름" --mentioned "이름 (맥락)" --meeting-date YYYY-MM-DD--alias는 4단계에서 매핑한 화자 레이블당 한 번 반복됩니다. 참석자는 기본적으로 표시 이름으로 설정됩니다.--mentioned는 사람당 한 번 반복됩니다.--attendee "이름"는 참석자 목록을 재정의해야 할 때 사람당 한 번 반복됩니다.--attendees "A, B (방: C, D)"도 작동합니다.()또는[]안의 쉼표는 분할되지 않기 때문입니다.meeting_date가null이고 사용자가 날짜를 알려준 경우에만--meeting-date를 전달합니다.
-
대화로 간략히 보고합니다. 테이블을 붙여넣지 마십시오.
- 개수: 결정사항, 발언, 액션 아이템, 미해결 질문, 이월된 항목.
- "한눈에 보기" 불릿 포인트.
- 사람의 확인이 필요한 모든 사항: 추론된 화자 이름, 추론 또는 미할당 소유자, 공백, ASR 주의사항.
- 보고서 및 턴 인덱스 링크.
여러 회의록
python "$S\scan.py" "<폴더>" --recursive
각 회의록을 new, turns-only, summarized, 또는 not-a-transcript로 나열합니다. 사용자에게 보류 중인 항목(new 및 turns-only)을 보여주고 시작 전에 확인을 받으십시오. 가장 오래된 회의부터 하나씩 처리하여 각 회의가 해당 시리즈의 이전 회의를 찾을 수 있도록 합니다. 전체 절차를 실행하고 각 회의에 대해 보고한 후 다음 회의를 시작하십시오.
관련 프로젝트 문서
작업 공간에 관련 아키텍처 또는 계획 문서(다른 번들의 요약 파일 포함)가 있는 경우, 선택 사항인 "관련 프로젝트 문서" 테이블을 채우십시오. 각 항목이 해당 문서의 내용을 확인, 반박 또는 확장하는지 기록하십시오.
품질 검사
verify_quotes.py가 0개의 실패로 통과합니다.- 화자 테이블에는 턴 인덱스의 모든 레이블에 대한 행이 있으며, 모든 이름 매핑은 증거를 명시합니다.
- 명시적, 자원, 위임 또는 설명된 추론 증거 없이 소유자가 지정되지 않습니다.
- 합계로 표시된 결정사항은 제안이 아닌 수락 신호를 보여줍니다.
- 의견과 추측은 그렇게 표시됩니다.
- 회의에 참석하지 않은 소유자는
(부재 중)으로 표시됩니다. gaps의 모든 항목이 전사 관련 주의사항 아래에 나타납니다.- 이전 회의가 있는 경우, 해당 회의의 모든 액션 아이템과 미해결 질문에 대한 이월 행이 있습니다.
레거시 번들
이전 번들(예: <folder>.turns.md 옆에 있는 input.txt)을 정렬하려면 python "$S\backfill.py" "<루트>"를 건너뛰기 실행으로 먼저 실행한 다음 --apply를 실행하십시오. 그런 다음 번들당 finalize_bundle.py를 제목과 태그와 함께 실행하십시오. Backfill은 기존 턴 인덱스를 다시 생성하지 않으므로 기존 인용이 유효하게 유지됩니다.