wispr-flow-dictionary について
wispr-flow-dictionary は、Wispr Flow のローカルなディクテーション履歴と辞書をスクリプト経由で扱うスキルです。誤認識の分析や辞書管理に加え、書き込み前のデータベース状態確認を行います。
主な機能
- 01履歴と書式変更の確認
- 02用語、件数、定型文の分析
- 03辞書項目の追加、削除、取り消し
- 04書き込み前の辞書バックアップ
- 05データベース状態とスキーマ変更の確認
活用シーン
- 01繰り返し起きる音声認識ミスの発見
- 02ディクテーションから辞書項目を整理
- 03頻出する全文をスニペットに登録
- 04誤った辞書バッチの取り消し
MCP 対応
Wispr Flow のリモート MCP サーバーはディクテーション履歴や辞書にアクセスできません。このスキルはローカルスクリプトで SQLite データベースを操作します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yahyabedirhan/ skills --skill wispr-flow-dictionaryインストール後、Claude Code で/wispr-flow-dictionaryを入力して読み込まれたか確認します。
同梱ファイルscripts/wispr.py
詳細
Wispr Flow の辞書
Wispr Flow は macOS 用のディクテーションアプリです。CLI はなく、リモート MCP サーバーが対応しているのは会議であり、ディクテーション履歴や辞書ではありません。これらはローカルの SQLite データベースに保存されており、scripts/wispr.py がそのインターフェースです。読み取りと書き込みはすべてこのスクリプトを通してください。データベースの内部処理を一か所にまとめておくためです。
まず status を実行してください。スキーマが CHANGED と報告された場合は、書き込みを行わず、変更されたテーブルを確認してください。報告する件数はすべて count から取得してください。
コマンド
python3 <skill-dir>/scripts/wispr.py <command> --help
| コマンド | 動作 |
|---|---|
status | データベースを確認します。スキーマが CHANGED の場合、アプリの更新によって、スクリプトが読み書きするデータベースのテーブルが変更されています。 |
history | 指定した期間内のディクテーションを表示します(--since 30m、3h、2d、1h30m、または --from/--to)。--diff は書式によって置き換えられた単語のみを表示します。--fields raw,formatted は両方のテキストを表示します。--out FILE はファイルに書き込みます。 |
terms | 指定した期間内の、人名などの名前らしい単語やコマンドらしい単語を、件数、辞書への登録の有無、登録後の出現回数とともに表示します。 |
snippets | リンク、メールアドレス、文など、何度も全文がディクテーションされたものと、スニペットですでに展開されるかどうかを表示します。 |
count TERM... | 各語句を含むディクテーションを、大文字小文字を区別せず単語全体で数え、辞書項目の追加後の出現回数も表示します。--field formatted は貼り付けられた内容だけを数えます。 |
dict list / add / remove / undo / backup | 辞書を操作します。書き込みの前に毎回バックアップが作成されます。add は、undo で取り消せるバッチ ID を出力します。--restart は書き込みの前に Wispr Flow を終了し、後で再起動します。これにより、アプリに変更が読み込まれます。add --snippet は、--replace に置き換わるトリガーフレーズを作成します。 |
- バックアップの保存先:
~/.local/state/wispr-flow/backups/。最新の 30 件が保持されます。 - オーバーライド:
--backup-dirと--keep-backups、またはWISPR_FLOW_*変数を使用します。スクリプトはコマンドの後に指定すると拒否するため、2 つのオプションはコマンドの前に指定してください。
ユーザーの編集からアプリが学習した項目には source: user_edits が設定され、observedSource には実際に聞き取った内容が格納されます。
辞書
- 単語は、置き換えを伴わない語句で、Wispr にその語句を学習させます。聞き間違いでもスペルミスでも、まず単語として修正してください。
HerderではなくHerdrを追加します。Herder→Herdr。 - ルールは、置き換えを伴う語句で、聞き取るたびに語句を書き換えます。単語を追加しても間違いが繰り返される場合、または
work tree→worktreeのように、単語項目では学習できない一般的な単語を意図している場合に限り、ルールを提案してください。採用するかどうかはユーザーが決めます。 - 間違いが再発したか確認するには、単語を追加した日以降の貼り付けテキストで、誤った形を数えます。
count <wrong form> --field formatted --from <date>を実行し、意図した単語のcount行にあるIn dictionary sinceの日付を指定してください。countとtermsの追加後の列は、辞書項目自身の語句を数えるため、聞き間違いではなく、その単語が使われているかを示します。 - ルールの語句は単語全体に一致するため、複数形には独自のルールが必要です(
cloud sessions)。 - 一致判定では大文字小文字を区別しません。各項目は、表示したいとおりの綴りで一度だけ追加してください。名前はブランドの大文字小文字表記(
GitHub、WebMCP)、コマンドは小文字(npx、to-pr)にします。別の大文字小文字表記で項目を追加しても効果はありません。 - ルールの語句を、ユーザーが文字どおりの意味でも使う場合、そのルールは安全ではありません。
city→Citiとすると、通常の単語 city が壊れます。代わりにCitiを単語として追加してください。 - スニペットは、長いテキストに展開される短いトリガーフレーズです。たとえば
my email address→ メールアドレスのように使います。ユーザーが全文を何度もディクテーションしているテキストに限り、スニペットを提案してください。
ユーザーが報告した間違いを修正する
ユーザーが単語の誤認を伝えた場合(「skillと言ったのに、SQLと書かれた」など)、同じターンで修正します。
- ウィンドウを指定せずに、両方の形式を
countします。これにより全履歴が対象になり、間違った形式もユーザーが意図した単語かどうかを確認できます。たとえば、データベースを扱うユーザーにとってSQLは意図した単語である場合があります。 - 修正方法を選びます。
- 意図した単語が登録されていない場合:
--restartを付けて単語として追加します。 - 単語は登録されていて、追加後も間違った形式が出ている場合: 代わりにルールを提案します。
- 間違った形式もユーザーが意図した単語である場合: ルールは提案せず、ルールを追加すると悪影響がある理由をユーザーに伝えます。
- 意図した単語が登録されていない場合:
- 何を追加したかをユーザーに伝え、次回のレビューで効果を確認できることを伝えます。
文字起こしの間違いを見つける
音声認識がよく間違える単語、つまり人名、会社名、製品名、ツール名、CLI コマンドを探します。
-
確認するのは、辞書、
termsテーブル、対象ウィンドウの--diff履歴です。デフォルトでは過去24時間が対象です。次に、対象ウィンドウ内のすべてのディクテーションを、生の形式と整形済みの形式の両方で読みます。termsと--diffでは、整形機能が変更せずに残した一般的な単語として出力された誤認(「verb tree」「two PR」など)を見落とすためです。- ユーザーがウィンドウを指定した場合: 代わりにそのウィンドウを使います。
- ウィンドウが数時間を超える場合:
history --fields raw,formattedに--outを指定して、リポジトリ外の一時ディレクトリにあるファイルへ出力します。ディクテーション1日分で約30kトークンを消費し、ディクテーションはプライベートなため、そのファイルをページ単位で読みます。
-
候補を見つける: 文脈に合わない単語、たとえば名前が入るべきところに一般的な単語がある場合(「Herder session」「cloud code」)、名前の綴りが複数ある場合、またはCLIが「Sila」のように単語へ変換されている場合です。生のテキストも確認します。整形によって誤認が隠れることも、修正されることもあります。
-
意図した単語を確認するには、周囲のテキストとユーザーのプロジェクトを参照します。現在開いているプロジェクトと、ディクテーションの対象だったその他のプロジェクトは
app列に表示されます。それらをgrepして名前を探します。- 意図した単語を特定できない場合: 不明に記載して、ユーザーに確認します。
-
同じウィンドウ内で、誤認された形式と意図した形式をそれぞれ
countし、過去30日間に繰り返し現れたスニペットも数えます。 -
次の形式で報告します。
### Words to add | Word | Wispr wrote | Dictations | Example | ### Rules to add | Wispr writes | You meant | Dictations | Since its word was added | Example | ### Snippets to add | Trigger | Expands to | Dictations | ### Not fixable with the dictionary - <mishearing>: <why a rule would do harm, or what would fix it instead> ### Unclear - "<what Wispr wrote>": <the context>. What did you say?すでに辞書に登録されているものは省きます。
- 追加後も誤認が続いている項目の場合: 追加するルールに移します(「
CLIは単語として登録されていますが、追加後に2回Silaと認識されました」)。 - セクションが空の場合: そのセクションは削除します。
- 追加後も誤認が続いている項目の場合: 追加するルールに移します(「
-
ユーザーがリストを承認してから書き込みます。承認された項目をJSONファイルに追加します。
[{"phrase": "Figma"}, {"phrase": "work tree", "replacement": "worktree"}, {"phrase": "my site", "replacement": "https://example.com", "snippet": true}]dict add --file <file> --dry-runでドライランを実行し、Wispr Flowが数秒間終了することをユーザーに伝えてから、dict add --file <file> --restartで書き込み、バッチIDをユーザーに伝えます。
アプリは辞書をユーザーのアカウントと同期します。この方法で書き込んだ項目は再起動後も保持されます。注意点: 同期によって項目が削除されることがあるかどうかは不明なので、書き込みを報告する際にはその旨を伝えます。
スクリプト
- scripts/wispr.py:Wispr Flowのデータベースにアクセスする唯一のインターフェースです。