Call Copilot について
Call Copilotは、macOS向けのローカル会議録音・文字起こしツールです。読み取り専用のMCPサーバーからAIクライアントで文字起こしを検索・閲覧でき、ネットワーク通信は行いません。
主な機能
- 01マイク音声とシステム音声を別々に録音
- 02faster-whisperによるローカル文字起こし
- 03音源ごとに文字起こしをラベル付け
- 04録音セッションの一覧表示と検索
活用シーン
- 01会議の文字起こしから特定の決定を検索
- 02MCPクライアントで文字起こし全体を閲覧
- 03会議記録の音源ラベルを確認
MCP 対応
stdio経由で `list_sessions`、`get_session`、`search_transcripts` を公開します。読み取り専用で、ネットワーク通信は行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Call Copilot
一つのことを、見事にやり遂げます。会議を録音し、文字起こしを保存。音声を損ないません。
Call Copilot は、会議の音声を録音し、停止するとローカルで文字起こしを行って、整った Markdown の文字起こしを保存するターミナルコマンド(rec)です。すべてお使いのマシン上で実行されます — クラウドも、API キーも、アカウントも不要です。音声と文字起こしがコンピューターの外に送信されることはありません。

$ rec setup # one-time: verify macOS + grant capture permission
$ rec start # starts recording, you keep working
$ rec stop # stops, transcribes, saves markdown
$ rec list # shows past recordings
音声のキャプチャ方法(BlackHole も Multi-Output Device も不要)
デフォルトでは、rec はマイク(あなたの声)とシステム音声(ほかの参加者の声/アプリが再生する音声)の両方をキャプチャします。そのため、あなた自身も話す実際の会議を録音でき、スピーカーから流れる音声だけに限られません。両方の音源は、Apple の Core Audio taps API(macOS 14.2 以降)を使い、audiotap ライブラリ経由で直接取得されます。次のものは不要です。
- インストールする仮想オーディオドライバー(BlackHole など)、
- Audio MIDI 設定で作成する Multi-Output Device、
- 切り替えや復元が必要なシステム出力デバイス、
- そのため、ルーティングが途切れたときに従来のドライバー方式で発生する無音録音の失敗もありません。
マイクとシステムの音声ストリームは、それぞれ本来のサンプリングレートで別々の WAV ファイルに録音され、それぞれ個別に文字起こしされます。その後、誰が何を話したか分かるように [Mic]/[System] のラベルを付けて、一つの文字起こしに統合します。一方の音源だけを使う場合は、rec start --mic-only または --system-only を実行してください。
キャプチャ権限の付与(ターミナルアプリごとに一度)
macOS では、rec を実行するアプリ(Terminal、iTerm、Warp、VS Code など)ごとにキャプチャ権限が設定されます。二つの権限を付与する必要があります。
- マイク(あなたの声):システム設定 → プライバシーとセキュリティ → マイク → お使いのターミナルアプリを有効にします。
- システム音声(macOS 14.2 以降では画面収録に分類):システム設定 → プライバシーとセキュリティ → 画面収録 → お使いのターミナルアプリを有効にし、その後、変更を反映させるためにアプリを終了して再度開きます。
マイクの権限が付与されていない間、rec start はシステム音声のみを録音し、マイクはスキップします(その旨が通知されます)。rec setup で現在のマイク権限の状態を確認できます。
rec stop の実行後(または rec start 中に Ctrl+C を押した後)、録音した音声は faster-whisper(CPU、int8 — API 不要。データがマシンの外に送信されることはありません)でローカルに文字起こしされ、Markdown の文字起こしとして書き出されます。
recording.wav ──> faster-whisper (local, free) ──> transcript.md
要件
- macOS 14.2 以降(Sonoma —
recが使用する Core Audio プロセスタップ API は 14.2 で導入されました)。Apple Silicon を推奨します。Intel でも動作します。 pipxでインストールする場合のみ Python 3.11 以降が必要です。Homebrew のフォーミュラには Python が含まれています。
仮想オーディオドライバー(BlackHole など)、Multi-Output Device、Audio MIDI 設定での手動設定は不要です。タップがシステム出力を直接読み取ります。rec は macOS のバージョンを自動で確認し、14.2 未満の場合は一行のメッセージを表示して実行を拒否するため、バージョンを推測する必要はありません。
インストール
Homebrew(推奨 — Python の管理は不要です):
brew install AnisurRahmann/tap/call-copilot
pipx(Homebrew を使わず、通常の Python インストールを利用する場合):
pipx install call-copilot
どちらの方法でも、PATH 上で rec コマンドを使えるようになります。続いて初回セットアップに進んでください。
macOS 14.2 未満のマシンで
recを実行すると、Error: rec requires macOS 14.2 or later ...と表示して終了します — トレースバックも、原因不明のエラーもありません。タップを自分でセットアップする場合は、 docs/HOMEBREW.md を参照してください。
録音への同意とプライバシー
Call Copilot は会議の音声を録音します。録音にはほかの参加者の音声が含まれる場合があります。 録音に関する法律は管轄区域によって異なり、録音される全員の同意が必要な場合も多くあります(1者同意か全員同意か)。同意を得る責任はお客様にあります。録音する前に、現地の法律と組織のポリシーをご確認ください。
技術面では、データはローカルにとどまります。
- faster-whisper(CPU、int8)を使って100%ローカルで文字起こしを実行します。API もクラウドも使用しません。
- **音声と文字起こしデータがマシンの外に送信されることはありません。**ネットワークに接続するのは、使用する Whisper モデルの初回実行時に Hugging Face から重みをダウンロードするときだけです。その後は完全にオフラインで動作します。
- 録音データはリポジトリ外の
~/.local/share/rec/sessions/(XDG データホーム)に保存されます。
初回のみのセットアップ
rec setup
macOS のバージョンと、audiotap ライブラリおよび同梱の dylib が読み込まれることを確認し、設定を保存して、初回の録音許可プロンプトについて案内します。
会議を録音する
rec start # mic + system (default); Ctrl+C to stop & transcribe
rec start --system-only # just what apps play (not your voice)
rec start --mic-only # just your voice (not system audio)
rec list # browse past sessions
rec transcribe 2026-07-27_14-30-00 --model medium # re-transcribe at higher quality
rec diagnose 2026-07-27_14-30-00 # bundle debug info for an AI agent
デフォルトでは、rec start はマイクとシステム音声の両方を録音します。文字起こしでは各行に [Mic] または [System] とラベルが付きます。対象を絞るには --system-only / --mic-only を使用してください。
rec start は録音中にライブインジケーターを表示します。
● REC 2026-07-28_14-30-00
elapsed 03:47 size 18.2 MB
press Ctrl+C to stop & transcribe
会議が終わったら Ctrl+C を押してください。録音を停止し、同じコマンド内で文字起こしを行ってから、文字起こしデータのパスを表示します。開始から完了まで、コマンドは1つだけです。
以前のバックグラウンド動作を使いたい場合は、rec start --detach を実行すると、録音プロセスを起動してすぐに終了します。後で別のターミナルから rec stop で停止するか、rec status で進行状況を確認してください。
**ヒント:**文字起こしデータが空の場合、録音が無音だったことを意味します。音声が再生されていなかったか、録音許可が取り消されています。
rec start(およびrec stop)は、この問題をすぐに警告します。また、rec diagnose <session>では音声レベルとログをまとめて確認できます。
Claude Code で会議の内容を利用する
rec にはMCP サーバーが付属しています(Claude Code、Cursor、Zed、Cline、その他の AI ツールが使用するオープンプロトコルです)。任意の MCP クライアントからローカルに録音した文字起こしデータに接続し、内容について質問できます。回答にはセッション ID が引用元として示されるため、該当する箇所を確認できます。データがマシンの外に送信されることはありません。サーバーは読み取り専用で、ネットワーク呼び出しも行いません。
rec mcp install # writes the server entry into Claude Code's config
その後、Claude Code を再起動して、たとえば次のように質問してください。
- 「火曜日の通話で、クライアントは実際に何を求めていましたか?」 — 文字起こしデータを検索し、該当箇所を見つけて、タイムスタンプ付きのセッション ID(例:
2026-07-28_12-25-20)を引用します。 - 「先週の会議を、所要時間とともに一覧表示して。」 — セッションを一覧表示し、日付で絞り込みます。
- 「API 移行について話し合ったスタンドアップの文字起こし全文を表示して。」 — 該当するセッションを見つけてから、文字起こし全文を読み取ります。
公開されるツールは3つです。list_sessions(日付で会議を検索)、get_session(文字起こし全文を読み取り)、search_transcripts(長い文字起こしデータから特定の行を検索。全文ではなく pricing discount のようなキーワードを渡してください)。検索インデックスは ~/.local/share/rec/index.db に保存され、初回検索時に遅延作成されます。削除しても問題のないキャッシュで、rec index で更新でき、rec index --rebuild で最初から再作成できます。
その他の MCP クライアント(Cursor、Zed、Cline、…)
rec mcp install を実行すると、任意の MCP クライアントで使える設定ブロックが出力されます。Cursor の場合は .cursor/mcp.json に、Zed の場合は settings.json の mcp_servers の下に貼り付けてください。次のような形式です。
{
"call-copilot": {
"type": "stdio",
"command": "rec",
"args": ["mcp"]
}
}
クライアントが直接のコマンドを必要とする場合は、rec mcp(stdio トランスポート)でサーバーを直接起動することもできます。
公式 MCP レジストリ
Call Copilot は、io.github.AnisurRahmann/call-copilot として公式 MCP レジストリに掲載されています。レジストリに対応した MCP クライアントなら、そこから検索して追加できます。レジストリエントリでは、次のコマンドでサーバーを起動します。
uvx --from call-copilot rec mcp
(PyPI パッケージ名は call-copilot です。インストールされるコマンドは rec なので、サーバーは rec mcp で起動します。)
ブラウザー UI
rec web はローカルのブラウザータブを開きます。すでに記録したセッションを参照するための閲覧専用に近いビューアーで、開始/停止コントロールも備えています。qBittorrent/Transmission の Web UI を参考にしており、ループバック HTTP サーバーが、CLI と同じセッションストアを操作するシングルページアプリを配信します。ターミナルでは、録音中のメーターや、文字起こしの横で再生位置をシークできるオーディオプレーヤー、ひと目でざっと確認できるセッション一覧を表示できません。ブラウザーなら表示できるため、この UI はまさにその 3 つの機能のために用意されています。


rec setup # one-time, in a terminal (the UI can't grant capture permission)
rec web # opens a browser tab at http://127.0.0.1:7717
タブからセッションを参照したり、文字起こしの横で音声を再生・シークしたり、すべての文字起こしを横断検索したり、録音を開始/停止したりできます。開始すると CLI と同じレコーダーが呼び出されます。停止すると文字起こしがキューに追加され、文字起こしができるまでページがポーリングします。設定が見つからない場合、開始ボタンに、まずターミナルで rec setup を実行するよう表示されます。
サーバーは 127.0.0.1 のみでバインドします。ホストは設計上、設定できません(ローカルツールが公開文字起こしサーバーになってはなりません)。--port でデフォルトのポートを上書きでき、--no-open でブラウザータブの自動表示をスキップできます。
これは何ではないか。 この UI は、依然としてリアルタイム文字起こし用の画面ではありません。CLI と同様、文字起こしが届くのは停止後です。また、クラウドも同期もアカウントもありません。ブラウザーでの操作はすべて既存のコマンドに対応しています。CLI に相当する機能がないものは、UI にもありません。
設定
~/.config/rec/config.json(XDG)に保存されます。録音データは ~/.local/share/rec/sessions/{id}/ に保存されます。必要に応じて、XDG_CONFIG_HOME/XDG_DATA_HOME で XDG のルートを上書きできます。
{
"sample_rate": 16000,
"channels": 1,
"whisper_model": "base",
"capture": "system",
"sessions_dir": "~/.local/share/rec/sessions"
}
16 kHz モノラル float32 は Whisper のネイティブ入力形式です。リサンプリング不要で、ファイルサイズを最小限に抑えられ(約 7.5 MB/分)、文字起こしの精度も最も高くなります。
サンプルレートについて(録音が正しい速度で再生される理由)
audiotap の sample_rate パラメーターは適用されません。指定した値にかかわらず、タップは常に出力デバイスのネイティブレート(通常は 48 kHz)で音声を配信します。rec はこれを透過的に処理します。録音時にタップが開始すると実際のキャプチャレートを測定し、そのレートで WAV を書き出すため、正しい速度で再生されます。また、文字起こしの前に16 kHz にリサンプリングして Whisper に渡すため、文字起こしも正確です。特別な操作は必要ありません。このセクションは、session.json の capture_sample_rate フィールド(設定の sample_rate と異なる場合があります)について説明するためのものです。
VAD(音声アクティビティ検出)について
デフォルトでは、faster-whisper の Silero VAD プリフィルターを使わずに文字起こしを実行します。VAD はマイクを近づけた音声用に調整されており、タップ経由のシステム音声キャプチャ(スピーカー/ヘッドフォンからの音声で、特性が異なります)を積極的に除外します。はっきり聞こえる録音の 100% が破棄され、文字起こしが空で返されたケースも確認しています。Whisper の no_speech_threshold だけで、そうしたリスクを避けつつ無音を十分に処理できます。
マイクを近づけて収録したクリーンな入力を使い、長い無音部分をスキップしたい場合(処理の高速化と出力の整理ができます)は、実行ごとに有効にしてください。
rec stop --vad # VAD on for this transcription
rec transcribe <id> --vad # re-transcribe with VAD
技術スタック
| ツール | 役割 |
|---|---|
audiotap | Core Audio タップ → システム音声を直接キャプチャ(macOS 14.2+) |
soundfile | WAV のチャンクをディスクにストリーミング(メモリ使用量は一定) |
faster-whisper | ローカル音声文字起こし(CPU int8) |
rich + click | ターミナル UI + CLI |
すべて無料のオープンソースです。文字起こしは 100% ローカルで実行されるため、API 費用はかからず、データがマシンの外に出ることもありません。(特定の Whisper モデルを初めて実行するときは、Hugging Face からモデルの重みがダウンロードされます。それ以降はオフラインで動作します。)
ログ記録とデバッグ
音声タップのライフサイクル、チャンクの書き込み、文字起こし、フォーマット、CLI の各判断など、すべての動作がログに記録されます。ログは次の 3 か所に出力されます。
| 出力先 | パス | レベル | 用途 |
|---|---|---|---|
| コンソール(stderr) | お使いのターミナル | WARNING* | ユーザー向け。デフォルトでは簡潔です |
| グローバルログ | ~/.local/share/rec/logs/rec.log | DEBUG | 監視用。tail -f で確認できます |
| セッションログ | ~/.local/share/rec/sessions/<id>/recorder.log | DEBUG | セッションごとの事後分析用 |
* デフォルトは WARNING です。-v → INFO、-vv → DEBUG、--quiet → CRITICAL、REC_LOG_LEVEL=DEBUG となります。
コマンドが失敗するたびに、理由と終了コードが ERROR レベルで記録されます。予期しないクラッシュには、完全なトレースバックが含まれます。
デバッグのためにセッションを AI エージェントに渡す
rec list # find the session id
rec diagnose 2026-07-27_14-30-00 # → writes sessions/<id>/diagnose.md
rec diagnose 2026-07-27_14-30-00 --stdout | <your-ai-tool> # pipe straight to an agent
バンドルには、セッションのメタデータ、デーモンの recorder.log、そのセッションのタグが付いたグローバルログの行、存在する場合はトランスクリプト、設定が含まれ、その後にデバッグ用チェックリストが続きます。(rec diagnose では、一意に特定できる接頭辞も使用できます。例:2026-07-27。)
録音ループに関する注意: オーディオコールバックは Core Audio のリアルタイムスレッドで実行され、意図的にログを出力しません。各チャンクをキューにコピーし、ライタースレッドがディスクへの I/O を行います。デーモンがログを出力するのは、タップの開始時と停止時、およびシグナル受信時のみです。
開発
rec 自体を開発する場合にのみ必要です。エンドユーザーは、上記のインストールコマンドを使用してください。
git clone https://github.com/AnisurRahmann/call-copilot.git && cd call-copilot
make install # creates .venv and installs `rec` in editable mode + dev deps
make test # unit tests (offline — no audio device or model download needed)
make run # rec start, using the dev venv's rec
make install には、PATH 上に Python 3.11 以降が必要です(仮想環境では python3.11 を使用します)。リリース、Homebrew tap、コードスタイルなどについては、CONTRIBUTING.md と docs/HOMEBREW.md を参照してください。
コントリビューション
github.com/AnisurRahmann/call-copilot で、Issue とプルリクエストを歓迎しています。PR を作成する前に CONTRIBUTING.md をお読みください。セキュリティ上の問題は、SECURITY.md に従って非公開で報告してください。
これは何ではないか
- リアルタイム文字起こしツールではありません(文字起こしは停止後に行われます)。
- 会議の要約ツールではありません(トランスクリプトのみです)。
- Zoom/Meet のプラグインではありません(システムオーディオを汎用的にキャプチャします)。
- クロスプラットフォームではありません(macOS 14.2 以降のみ対応)。
ライセンス
MIT — LICENSE を参照してください。© Anisur Rahman。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。