Communitygithub.com

Meeting Scribe -- 회의 기록, 교정, 캔버스, 요약

로컬 환경에서 실행되는 크로스 플랫폼 회의 기록 변환 도구입니다. 오디오 파일을 정확한 텍스트로 변환하고, Precision Pro HTML 캔버스로 시각화하며, AI 인사이트가 포함된 요약을 제공합니다. Claude Code 스킬입니다.

Meeting Scribe -- 회의 기록, 교정, 캔버스, 요약란 무엇인가요?

Meeting Scribe는 사용자가 지정한 드롭존에 오디오 파일(또는 기존 텍스트 파일)을 드롭하면, 로컬 Whisper 엔진을 사용하여 회의를 자동으로 텍스트로 변환하고, 교정된 대본, 시각적 캔버스(단일 HTML 파일), AI 인사이트가 포함된 요약(Markdown)이라는 세 가지 결과물을 생성하는 AI 에이전트 스킬입니다. 모든 처리는 사용자 기기에서 로컬로 이루어지며, WhisperKit CLI(Apple Silicon), faster-whisper(크로스 플랫폼), whisper.cpp(선택 사항) 등 다양한 엔진을 지원합니다. 설정은 `~/.config/meeting-transcripts/config.json` 파일에 저장되어 스킬 업데이트와 관계없이 사용자별 설정이 유지됩니다. 결과물은 클로드 코드의 채팅 창에 직접 출력되지 않고 설정된 출력 폴더나 옵시디언 볼트에 직접 작성되어 컨텍스트를 절약하고 사용자가 원하는 위치에서 편리하게 검토하고 편집할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add breakthrough-edu/meeting-scribe

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

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

문서

Meeting Scribe -- 회의 기록, 교정, 캔버스, 요약은(는) 무엇을 하나요?

이 스킬이 하는 일

사용자가 설정된 드롭존에 드롭한 회의 오디오 파일(또는 이미 기록된 .txt 파일)을 받아 세 가지 결과물을 생성합니다:

  1. 교정된 대본 (가벼운 다듬기, 음성 특징 유지)
  2. 시각적 캔버스 (단일 독립형 HTML, 회의 전체를 한눈에)
  3. 요약 (Markdown, AI 인사이트 섹션 포함)

기록(Transcription)은 로컬에서 Whisper를 통해 실행됩니다 (외부 앱 불필요). 결과물은 설정된 출력 대상에 직접 작성되며, 채팅에 전체가 표시되지 않습니다 (채팅에 표시하고 파일에 쓰면 동일한 내용이 두 번 생성되어 토큰이 낭비되고 컨텍스트가 비대해집니다). 사용자는 출력 대상에서 결과를 검토하고 필요한 편집을 요청합니다.

오디오 파일이 저장되는 위치, 사용할 Whisper 모델, 결과물이 저장될 경로, 작성 언어 등 모든 머신별 동작은 사용자별 설정 파일에서 비롯되며, 이 문서에서 비롯되지 않습니다. 이 스킬은 오케스트레이션 로직만 제공하며, 사용자와 머신 간에 이식 가능합니다.

설정

로드 시 (사용자가 이 스킬을 호출할 때), 설정 파일을 먼저 읽습니다:

cat ~/.config/meeting-transcripts/config.json
  • 파일이 존재하는 경우 -> 파일을 파싱하고 모든 경로/모델/언어 결정에 해당 값을 사용합니다. 이 읽기 과정을 설명하지 마세요.
  • 파일이 없는 경우 -> 최초 실행 설정(아래)을 한 번 실행하고 설정 파일을 기록한 후 계속 진행합니다.

설정 스키마

{
  "engine": "faster-whisper",
  "model": "large-v3",
  "model_path": "/abs/path/to/model",
  "engine_bin": null,
  "python_bin": null,
  "compute_type": "auto",
  "transcribe_language": "auto",
  "audio_dropzone": "/abs/path/to/drop-zone",
  "audio_archive": "/abs/path/to/processed-archive",
  "output": {
    "mode": "folder",
    "folder_path": "/abs/path/to/output-folder",
    "vault_path": null,
    "landing_folder": null,
    "baseline_context_file": null
  },
  "language": {
    "transcript": "as-spoken",
    "canvas": "english",
    "summary": "english",
    "replies": "english",
    "register": null
  },
  "vault_context_skill": null,
  "diarization": { "enabled": false, "num_speakers": null, "seg_model": null, "emb_model": null }
}

필드 설명:

  • engine -- 기록(Transcription) 백엔드. 다음 중 하나:
    • whisperkit-cli -- Apple Silicon Mac 전용 (CoreML / Apple Neural Engine, 가장 빠름). model_path = CoreML 모델 폴더.
    • faster-whisper -- 크로스 플랫폼 기본값 (Intel Mac / Windows / Linux, CPU 또는 CUDA; Apple Silicon에서도 잘 작동). Python / CTranslate2. model_path = CT2 모델 캐시 디렉토리, python_bin = faster-whisper가 설치된 venv의 Python, compute_type은 정밀도를 조정합니다.
    • whisper.cpp -- 선택적 크로스 플랫폼 바이너리 (Metal / CUDA / CPU, Python 불필요). model_path = GGML .bin 파일, engine_bin = whisper-cli 바이너리 (PATH에 없는 경우).
  • model -- 실행할 Whisper 모델. 모든 엔진에서 최고 품질을 위한 기본값은 large-v3; 더 작은 ID(medium, small, base)는 속도와 품질을 맞바꿉니다. 모델 FORMAT은 엔진마다 다릅니다 (CoreML 폴더 vs CT2 캐시 vs GGML .bin). 형식은 상호 교환할 수 없습니다 -- 최초 실행 설정이 선택한 엔진에 맞는 올바른 형식을 다운로드합니다.
  • model_path -- 해당 모델이 있는 위치 (엔진별로 다름, 위의 engine 참조).
  • engine_bin -- 선택적 엔진 바이너리(whisperkit-cli 또는 whisper-cli)의 절대 경로; null = PATH에서 찾음.
  • python_bin -- (faster-whisper 전용) faster-whisper가 설치된 venv 내의 Python 절대 경로.
  • compute_type -- (faster-whisper 전용) auto (CPU에서는 int8, CUDA에서는 float16) 또는 int8, int8_float16, float16, float32 중 하나로 강제 지정.
  • transcribe_language -- Whisper 언어 힌트(auto, zh, en, ...). 코드 스위칭 오디오의 경우 auto 대신 지배적인 언어를 설정하세요: 강제 단일 언어 디코딩은 인라인 외국어 용어를 그대로 유지하고 더 높은 신뢰도와 안정적인 출력을 제공합니다. whisperkit-cli에서 auto는 클립 중간에 언어 전환 환각(가짜 독일어 꼬리)을 추가하는 현상이 관찰되었습니다; faster-whisper의 실제 오디오 테스트에서는 auto가 무해했지만 신뢰도가 더 낮았습니다(올바르게 지배적인 언어를 유지했습니다) -- 어느 쪽이든 지배적인 언어를 강제하는 것이 더 안전한 기본값입니다. 지배적인 언어를 정말로 알 수 없는 경우에만 auto를 사용하세요.
  • audio_dropzone / audio_archive -- 새 오디오 파일이 저장되는 위치와 성공적으로 처리된 후 해당 파일(및 .txt)이 이동되는 위치.
  • output.mode -- folder (파일 시스템을 통해 folder_path에 결과물 작성) 또는 obsidian (mcp-obsidian 도구를 통해 Obsidian 볼트에 작성; vault_path, landing_folder, 선택적 baseline_context_file 사용).
  • language.* -- 결과물별 출력 언어. transcript: as-spoken은 사용된 언어를 그대로 유지합니다. register는 선택적 자유 텍스트 스타일 메모입니다(예: 지역적 레지스터).
  • vault_context_skill -- 선택적 동반 스킬 이름으로, 볼트/노트 기반 컨텍스트를 제공합니다; 설정된 경우 이 스킬과 함께 로드합니다. null = 없음.
  • diarization -- 선택적 화자 분리, 기본적으로 OFF (옵트인). enabled: true인 경우, 0단계는 통일된 형식 [mm:ss] Speaker A: <text>로 화자 태그가 지정된 대본을 생성합니다; 알려진 참가자 수로 num_speakers를 설정하거나(또는 자동 감지를 위해 null로 남겨둠). seg_model / emb_model은 faster-whisper 화자 분리 애드온을 위한 로컬 ONNX 모델 경로입니다 (선택적 화자 분리 설정 중에 설정됨; 기본 화자 분리가 있는 whisperkit-cli에서는 사용되지 않음). 어떤 엔진의 화자 분리에도 Hugging Face 토큰이 필요하지 않습니다. 화자 분리는 턴 수준(단어 수준 아님)이며, 레이블은 임의의 A/B(이름 아님)이며, 깨끗하고 중첩이 적은 2화자 오디오에서만 검증되었습니다 -- 옵트인 상태로 유지하고 속성 부여에 의존하지 마십시오. 지원은 엔진별입니다(0단계 참조): whisperkit-cli 기본; faster-whisper 로컬 애드온을 통해; whisper.cpp는 지원되지 않음.

최초 실행 설정 (설정 파일이 없을 때만)

한 번, 응답 언어로 대화형으로 실행하세요. 간결하게 유지하세요.

  1. 플랫폼 감지 + 기본 엔진 선택. uname -s (Darwin / Linux) 및 uname -m (arm64 / x86_64)를 읽습니다. Windows(uname 없음 또는 $OS = Windows_NT)에서는 WSL에서 실행하거나 faster-whisper를 사용하도록 권장합니다. 기본 엔진:

    • Darwin + arm64 (Apple Silicon) -> whisperkit-cli (가장 빠름, Apple Neural Engine).
    • Darwin + x86_64 (Intel Mac), Linux, 또는 Windows -> faster-whisper (크로스 플랫폼). 감지된 기본값을 한 줄로 명시하고 사용자가 재정의할 수 있도록 합니다(예: Python 없는 Metal/CUDA 바이너리의 경우 whisper.cpp).
  2. 엔진 확인.

    • whisperkit-cli -- command -v whisperkit-cli; 없고 Homebrew가 있으면 -> brew install whisperkit-cli.
    • faster-whisper -- 격리된 venv를 만들고 그 안에 설치합니다. uv가 있으면 선호:
      uv venv "$HOME/.config/meeting-transcripts/venv"
      VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install faster-whisper
      
      그렇지 않으면 python3 -m venv "$HOME/.config/meeting-transcripts/venv" && "$HOME/.config/meeting-transcripts/venv/bin/pip" install faster-whisper. python_bin = $HOME/.config/meeting-transcripts/venv/bin/python, compute_type = auto로 설정합니다.
    • whisper.cpp -- command -v whisper-cli; 없으면 Mac에서는 brew install whisper-cpp, Linux에서는 배포판 패키지 또는 소스에서 빌드(cmake 필요), Windows에서는 릴리스 바이너리 또는 WSL을 사용합니다. PATH에 없는 경우 engine_bin을 설정합니다.
  3. 엔진 형식으로 모델 다운로드 (기본 model = large-v3). 모델을 보관할 위치를 묻습니다($HOME/.config/meeting-transcripts/models 제안). 형식은 상호 교환할 수 없으므로 선택한 엔진과 일치하는 모델을 다운로드합니다:

    • whisperkit-cli (CoreML) -- 현재 whisperkit-cli(현재 argmax-cli로 식별됨)에는 독립 실행형 다운로드 명령이 없으며, transcribe는 오디오가 제공되지 않으면 오류(Either audioPath or audioFolder must be provided)가 다운로드 전에 발생합니다. 따라서 1초 무음 WAV를 기록하여 부작용으로 ~1.5 GB 가져오기를 트리거합니다(이것이 whisperkit이 런타임에 오디오를 기본 디코딩함에도 ffmpeg가 필요한 이유입니다):
      SILENCE="<dir>/.silence.wav"
      ffmpeg -y -f lavfi -i anullsrc=r=16000:cl=mono -t 1 -ar 16000 -ac 1 "$SILENCE"
      whisperkit-cli transcribe --audio-path "$SILENCE" --model large-v3 --download-model-path "<dir>"
      rm -f "$SILENCE"
      
      모델은 <dir>/models/argmaxinc/whisperkit-coreml/<model-name>/에 중첩되어 배치됩니다. model_path를 해당 폴더(실제로 .mlmodelc 번들이 있는 폴더)로 설정하고 <dir> 자체가 아닙니다 -- find "<dir>" -maxdepth 7 -name AudioEncoder.mlmodelc | grep -v '/.cache/'로 찾은 다음(grep -v는 .cache/huggingface/download/ 아래의 불완전한 Hugging Face 스테이징 복사본을 건너뜁니다), 해당 dirname을 사용하고 번들을 확인합니다.
    • faster-whisper (CT2) -- 번들 래퍼를 한 번 워밍업하여 model_path에 다운로드합니다: "<python_bin>" "<skill-dir>/scripts/fw_transcribe.py" --warm large-v3 "<model_path>" auto (~1.5 GB). 캐시 폴더가 비어 있지 않은지 확인합니다.
    • whisper.cpp (GGML) -- 단일 .bin 파일을 다운로드합니다(예: curl -L -o "<dir>/ggml-large-v3.bin" https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin (~3 GB)); model_path를 해당 파일로 설정하고 존재하는지 확인합니다.
  4. 출력 대상. 묻기: 일반 폴더 (기본값) 또는 Obsidian 볼트. 경로 수집(folder_path 또는 vault_path + landing_folder + 선택적 baseline_context_file).

  5. 오디오 폴더. audio_dropzone 및 audio_archive 요청(합리적인 기본값 제안; mkdir -p 생성).

  6. 언어. transcribe_language (기본값 auto, 하지만 코드 스위칭 오디오의 경우 지배적인 언어를 설정하세요 -- 필드 노트 참조) 및 출력 language.* (기본값 english, transcript = as-spoken); 선택적 register.

  7. 쓰기 ~/.config/meeting-transcripts/config.json (먼저 mkdir -p ~/.config/meeting-transcripts), 한 줄로 확인한 후 워크플로로 계속 진행합니다.

영속성 규칙: 모든 사용자별 설정은 해당 외부 설정 파일에 있으며, 이 스킬 파일에는 절대 없습니다. 이는 의도적인 설계입니다 -- 플러그인 마켓플레이스나 npx skills add를 통해 배포된 스킬은 git 관리/덮어쓰기 위치에 있으므로 스킬 본문에 대한 편집은 업데이트 후에도 유지되지 않습니다. 외부 설정 파일은 유지됩니다. 설정이 변경될 때마다 이 문서가 아닌 설정 파일을 업데이트하십시오. (실행 가능한 도우미는 스킬의 scripts/ 디렉토리에 있으며 스킬과 함께 업데이트됩니다. 설정만 설정 파일에 있습니다.)

화자 분리 활성화 (선택 사항, Hugging Face 토큰 불필요)

화자 분리는 기본적으로 OFF입니다. 활성화하려면 config.diarization.enabled = true로 설정하고(num_speakers는 참가자 수를 알고 있으면 설정, 그렇지 않으면 null로 두어 자동 감지), 다음을 수행합니다:

  • whisperkit-cli -- 추가 작업 없음; 첫 번째 화자 분리 실행 시 Hugging Face에서 화자 분리 모델을 자동으로 다운로드합니다(토큰 불필요).
  • faster-whisper -- 소규모 일회성 로컬 애드온(모든 모델은 공개, 토큰 불필요):
    1. 동일한 venv에 설치: VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install sherpa-onnx numpy (또는 venv의 pip 사용).
    2. 두 개의 비게이트 ONNX 모델을 $HOME/.config/meeting-transcripts/dia-models/에 다운로드:
      • 세그멘테이션 (~6 MB): https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-segmentation-models/sherpa-onnx-pyannote-segmentation-3-0.tar.bz2 (압축 해제; 모델은 내부 .../model.onnx).
      • 화자 임베딩 (~38 MB): https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-recongition-models/3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx (업스트림 릴리스 태그가 speaker-recongition-models로 철자됨에 유의).
    3. config.diarization.seg_model 및 config.diarization.emb_model을 해당 두 경로로 설정합니다.
  • whisper.cpp -- 화자 분리는 지원되지 않습니다. 화자 분리가 필요한 경우 whisperkit-cli 또는 faster-whisper로 전환하세요.

역할

당신은 사용자의 수석 전략 파트너이자 회의 분석가입니다. 회의 녹음이나 대본을 받고, 선택적으로 기반 컨텍스트(사용자의 노트/볼트, 설정된 경우)를 통해 이해를 강화하고, 세 가지 결과물을 제공합니다. 일반적인 기록 정리 도구가 아닌, 전체 컨텍스트를 가진 수석 전략가처럼 생각하세요.

사용자의 상세한 비즈니스 컨텍스트, 사람들, 고객, 방법론은 사용자 자신의 노트(및 설정된 vault_context_skill, 있는 경우)에 있습니다. 특정 사실(이름, 프로젝트 용어, 최근 결정의 철자 등)에 대한 신뢰할 수 있는 출처로 이것들을 취급하세요. 이 스킬은 오케스트레이션 로직만 제공합니다. 실질적인 내용은 해당 기반 컨텍스트에서 비롯됩니다.

사용 가능한 도구

  • Read -- 대본 / 오디오와 인접한 .txt 파일을 읽습니다.
  • Bash -- 설정 파일을 읽습니다. 드롭존에서 오디오 / .txt 파일을 나열합니다. 설정된 기록 엔진(whisperkit-cli / faster-whisper venv Python / whisper-cli)을 실행하고, 필요한 경우 형식 변환을 위해 ffmpeg를 사용합니다. 성공 후 소스를 보관하기 위해 mkdir -p 및 mv를 실행합니다.
  • Write / Edit -- 세 가지 결과물을 작성하고(폴더 출력 모드인 경우) 검토 루프 중에 제자리에서 편집합니다.
  • Obsidian 출력 모드 전용 (output.mode == "obsidian"): mcp__mcp-obsidian__obsidian_get_file_contents, mcp__mcp-obsidian__obsidian_batch_get_file_contents (2개 이상의 파일에 선호), mcp__mcp-obsidian__obsidian_append_content (볼트 파일 쓰기). 파일 시스템 Edit 도구를 사용하여 절대 볼트 경로로 기존 볼트 파일을 편집합니다.

기반 파일을 2개 이상 가져올 때는 배치 읽기 도구를 사용하세요.

언어 지시문

config.language에 의해 결정됨:

결과물언어
교정된 대본language.transcript (기본값 as-spoken: 사용된 언어(들) 및 코드 스위칭을 그대로 유지)
시각적 캔버스language.canvas
요약 문서language.summary
대화형 응답language.replies

관련 스킬