Meeting Scribe -- 회의 기록, 교정, 캔버스, 요약은(는) 무엇을 하나요?
이 스킬이 하는 일
사용자가 설정된 드롭존에 드롭한 회의 오디오 파일(또는 이미 기록된 .txt 파일)을 받아 세 가지 결과물을 생성합니다:
- 교정된 대본 (가벼운 다듬기, 음성 특징 유지)
- 시각적 캔버스 (단일 독립형 HTML, 회의 전체를 한눈에)
- 요약 (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는 지원되지 않음.
최초 실행 설정 (설정 파일이 없을 때만)
한 번, 응답 언어로 대화형으로 실행하세요. 간결하게 유지하세요.
-
플랫폼 감지 + 기본 엔진 선택.
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).
- Darwin + arm64 (Apple Silicon) ->
-
엔진 확인.
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-whisperpython3 -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을 설정합니다.
-
엔진 형식으로 모델 다운로드 (기본
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를 해당 파일로 설정하고 존재하는지 확인합니다.
-
출력 대상. 묻기: 일반 폴더 (기본값) 또는 Obsidian 볼트. 경로 수집(
folder_path또는vault_path+landing_folder+ 선택적baseline_context_file). -
오디오 폴더.
audio_dropzone및audio_archive요청(합리적인 기본값 제안;mkdir -p생성). -
언어.
transcribe_language(기본값auto, 하지만 코드 스위칭 오디오의 경우 지배적인 언어를 설정하세요 -- 필드 노트 참조) 및 출력language.*(기본값english,transcript=as-spoken); 선택적register. -
쓰기
~/.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-- 소규모 일회성 로컬 애드온(모든 모델은 공개, 토큰 불필요):- 동일한 venv에 설치:
VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install sherpa-onnx numpy(또는 venv의pip사용). - 두 개의 비게이트 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로 철자됨에 유의).
- 세그멘테이션 (~6 MB):
config.diarization.seg_model및config.diarization.emb_model을 해당 두 경로로 설정합니다.
- 동일한 venv에 설치:
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 |