Communityライティング&編集github.com

px-summarize-transcript

会議の文字起こしから意思決定、重大な発言、アクションアイテム、未解決の質問を抽出し、発言者とタイムスタンプ付きの証拠とともに保存して、ソースファイルの隣にリンクされたバンドルとして出力します。

px-summarize-transcript とは?

このスキルは、会議の文字起こし(.vtt、Teamsのコピー&ペーストした.txt、Markdownの.md形式)を解析し、重要な意思決定、事実関係の表明、アクションアイテム、未解決の質問を抽出して、証拠付きのレポートを生成します。各項目には発言者、タイムスタンプ(利用可能な場合)、および正確な引用が含まれます。Claude Code, Cursor, CodexなどのAIエージェント向けに設計されており、ユーザーは「この会議で何が決まった?」「誰が何を言った?」「アクションアイテムは?」といった質問にすぐに答えられるようになります。仕組みとしては、Pythonスクリプトが機械的な処理(解析、ファイル命名、フロントマター処理、引用検証)を担当し、AIは推論(発言者の識別、所有権の割り当て、前回会議からの引き継ぎ項目の追跡)を行います。バンドルは常に元の文字起こしファイルと同じフォルダに配置され、ファイル名を共有します。シリーズ化された会議では、前回の会議からのアクションアイテムや未解決の質問がどのように進捗したかを追跡できます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/prodagenx/px-summarize-transcript/tree/HEAD

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

px-summarize-transcript は何をしますか?

会議の文字起こしを、何が決定され、どのような重要な事実が述べられ、誰が何を次に担当するのかという証拠に基づいた記録に変換します。すべての項目は、発言者、タイムスタンプ(文字起こしに含まれる場合)、および逐語的な引用を引用します。Pythonスクリプトが機械的な処理(解析、ファイル命名、フロントマター、引用チェック)を行います。推論はあなたが行います。

使用するタイミング

  • .vtt ファイル、Teamsの文字起こしを .txt または .md に貼り付けたもの、[Speaker] YYYY-MM-DD HH:MM:SS 形式のMarkdown文字起こし、または Name: text 形式の行から、決定事項とアクションアイテムを抽出する必要がある場合。
  • 誰が何を言ったか、何が合意されたか、誰がフォローアップを担当するかを尋ねられた場合。
  • 定例シリーズの前回の会議から何が未解決のままか尋ねられた場合。
  • 会議の成果をプロジェクト文書と照合する必要がある場合。

バンドル構成(固定)

すべてのファイルは文字起こし自体のフォルダに置かれ、そのファイル名を共有します。サフィックスのみが変更されます。他の場所に書き出すことはできません。ユーザーが別のフォルダを要求した場合は、バンドルはその文字起こしと一緒に置かれることを説明してください。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+)。ファイル名にはスペースが含まれることが多いため、パスは引用符で囲んでください。

一度に1つの文字起こしを処理します。フォルダ全体や「保留中のすべて」については、複数の文字起こしを参照してください。

  1. 文字起こしをファイリングする(オプション)。 ユーザーが要求した場合、またはワークスペースが文字起こしをシリーズフォルダ(例: transcripts/<series>/)に保持しており、これがまだファイリングされていない場合に実行します。--root のデフォルトは ./transcripts です。

    python "$S\file_transcript.py" --list --root "<root>"
    python "$S\file_transcript.py" "<transcript>" --series "<series>" --root "<root>"
    

    会議に適合する既存のシリーズを再利用します。適合するものがなければ、短いケバブケースの名前を提案し、作成する前にユーザーに確認します。その後、status に応じて行動します。

    • moved: 新しい source パスで続行します。
    • already-filed: 文字起こしは既にルート下のフォルダ内、またはシリーズ名のフォルダ内にあります。何も移動しなかったので続行します。
    • duplicate: 同じ文字起こしが既に duplicate_of に存在します。停止し、どのコピーを処理するかユーザーに尋ねます。どちらのファイルも削除しないでください。
    • conflict (exit code 2): 同じ名前の異なるファイルが既にシリーズフォルダにあります。停止してユーザーに尋ねます。
  2. ターンインデックスを構築します。

    python "$S\build_turns.py" "<transcript>"
    

    フォーマットを検出し、<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 (exit code 3): 文字起こしがターンインデックス構築後に編集され、既存のレポートが古いターン ID を引用しています。停止し、--rebuild で再実行する前にユーザーに確認します。
    • サポートされていないフォーマットエラー (exit code 2): サポートされているフォーマットをユーザーに伝えて停止します。
    • meeting_date が null: ユーザーが日付を指定しない限り、「未記載」と記述します。
  3. ターンインデックス全体を 大きなチャンクで最後まで読み取ります。部分読み取りから抽出しないでください。

  4. 発言者をマッピングします。 レポートの発言者テーブル用に、発言者ラベルごとに1行作成します。ラベル、表示名、およびその特定方法を示します。

    • 証拠がある場合のみ異なる名前を表示します。その人が名前で呼ばれている、自己紹介をしている、またはラベルが明らかなスペルミスである場合。証拠を記録します。
    • 会議室のデバイスラベルはそのまま部屋名にします。そこで聞こえた人や呼びかけられた人をリストアップし、文字起こしが明確でない限り、その発言を一人の人に帰属させません。
    • Transcription: ヘッダー行にのみ名前が記載されている人は出席していたが、必ずしも発言したわけではありません。
    • 発言はしなかったが言及された人を、言及された場所とともにリストアップします。
    • 曖昧さがない場合にのみ、ファーストネームをフルネームに解決します。
  5. 項目を抽出します 以下のテストを使用します。

    • 決定: 選択肢間の選択が行われた、または受け入れられた(「これでいこう」「合意」「やります」、または異議のない提案)。ステータス: 合意、暫定、提案。
    • 重大な表明: それが間違っていた場合、スコープ、設計、スケジュール、コスト、またはリスクを変更するもの。システム、制約、依存関係、数値、日付、コミットメント、表明されたリスクに関する事実。雑談や言い回しは含みません。関連する表明をマージして12個以下を目指します。
    • アクションアイテム: 動詞を伴う将来のタスク。依頼された、または自ら買って出たもの(「やります」「お願いできますか」「する必要があります」)。
    • 未解決の質問: 提起されたが、議論が次に移る前に解決されなかったもの。
  6. 各アクションアイテムに所有者を割り当てます。 所有者は、欠席者を含む、名前が挙がった任意の人物です。

    • 明示的: 指名され依頼されたが、断らなかった。
    • 自発的: 発言者が「私が〜します」と言った。
    • 委任: 欠席または沈黙している人に割り当てられた。(欠席) とマークし、誰が割り当てたかを記録します。
    • 推測: 表明された役割または所有権から導き出される。理由を記述します。
    • 未割り当て: 上記のいずれでもない。所有者をでっち上げないでください。

    期限は、言及された場合のみ記録します。

  7. すべての項目に証拠を添付します:

    • タイムスタンプあり: [T042 00:12:31 Speaker] "逐語引用"。
    • タイムスタンプなし (has_timestamps: false): [T042 Speaker] "逐語引用"。
    • Speaker はターンインデックス内のラベルと完全に同じにします。発言者テーブルが異なる名前を表示している場合でも同様です。表示名は他のすべての場所で使用します。
    • 引用は25語以内とし、ASRエラーを含めて正確にコピーします。省略には ... を使用します。決定が複数のターンにわたって形成される場合は、複数のターンを引用します。
  8. 引き継ぎ項目を確認します(previous_meeting_summary が設定されている場合のみ)。そのレポートのアクションアイテムと未解決の質問のテーブルのみを読み取ります。各項目について、この文字起こしから、完了、進行中、未解決、中止、言及なしのいずれであるかを判断し、その状態を示すターンを引用します。誰かがそう言わない限り、項目を完了とマークしないでください。

  9. レポートを summary_path に テンプレート を使用して書き込みます。本文のみを書き込み、フロントマターは追加しません。必ず「概要」を記入します。「<名前>へ」は、ユーザーが読者を指定した場合のみ追加します(例: 「私宛に、私はDana Ruizです」)。読者が誰かを決めてかからないでください。

  10. 文字起こしの注意事項をフラグ付けします: 可能性のあるASRエラー、推測によってマッピングした発言者名、および gaps のすべてのエントリ(内容が欠落している可能性があります)。引用を黙って修正しないでください。

  11. 引用を検証し、合格するまで失敗している行を修正または削除します。

    python "$S\verify_quotes.py" "<summary_path>"
    
  12. バンドルを最終確定します。 会議の内容から短いタイトルと、3〜6個のトピックタグ(小文字、ケバブケース)を導き出します。transcript と meeting-notes は自動的に追加されます。

    python "$S\finalize_bundle.py" "<transcript>" --summary "<summary_path>" --title "<title>" --tags "tag-one,tag-two" --alias "Label in transcript=Display name" --mentioned "Name (context)" --meeting-date YYYY-MM-DD
    
    • --alias は、ステップ4でマッピングした発言者ラベルごとに1回繰り返します。出席者はデフォルトで表示名になります。
    • --mentioned は人物ごとに1回繰り返します。
    • --attendee "Name" は、出席者リストを上書きする必要がある場合に人物ごとに1回繰り返します。--attendees "A, B (room: C, D)" も機能します。これは () または [] 内のカンマは分割されないためです。
    • --meeting-date は、meeting_date が null でユーザーが日付を指定した場合のみ渡します。
  13. チャットで簡単に報告します。 テーブルは貼り付けないでください。

    • カウント: 決定、表明、アクションアイテム、未解決の質問、および引き継ぎ項目。
    • 「概要」の箇条書き。
    • 人間による確認が必要なもの: 推測された発言者名、推測または未割り当ての所有者、ギャップ、ASRの注意事項。
    • レポートとターンインデックスへのリンク。

複数の文字起こし

python "$S\scan.py" "<folder>" --recursive

すべての文字起こしを new、turns-only、summarized、not-a-transcript としてリストします。保留中のもの(new と turns-only)をユーザーに表示し、開始する前に確認します。最も古い会議から順に一度に1つずつ処理し、各会議がそのシリーズ内の前回の会議を見つけられるようにします。完全な手順を実行し、次の会議を開始する前にそれぞれについて報告します。

関連プロジェクト文書

ワークスペースに関連するアーキテクチャや計画の文書(他のバンドルのサマリーファイルを含む)がある場合は、オプションの「関連プロジェクト文書」テーブルに記入します。各項目がそれらの文書の記録と一致するか、矛盾するか、拡張するかに注意します。

品質チェック

  • verify_quotes.py が0件の失敗で合格すること。
  • 発言者テーブルには、ターンインデックス内のすべてのラベルの行があり、すべての名前マッピングにその証拠が記載されていること。
  • 明示的、自発的、委任、または説明された推測による証拠なしに所有者が命名されていないこと。
  • 合意とマークされた決定には、単なる提案ではなく、受け入れのシグナルが示されていること。
  • 意見や推測はそのようにラベル付けされていること。
  • 会議に出席していなかった所有者は (欠席) とマークされていること。
  • gaps のすべてのエントリが文字起こしの注意事項に表示されていること。
  • 前回の会議がある場合、そのアクションアイテムと未解決の質問のすべてに「引き継ぎ」行があること。

レガシーバンドル

古いバンドル(例: <folder>.turns.md の隣にある input.txt)を整列させるには、ドライランとして python "$S\backfill.py" "<root>" を実行し、次に --apply を実行します。その後、バンドルごとにタイトルとタグを指定して finalize_bundle.py を実行します。バックフィルは既存のターンインデックスを再生成しないため、既存の引用は有効のままです。

関連スキル