コンテンツ制作 · daymade/claude-code-skills

transcript-fixer

辞書ルールとClaude内蔵AI(外部APIキー不要)を使用して音声認識(STT/ASR)の文字起こしエラーを修正します。Native AI修正がデフォルトであり、Stage 1単独では不完全です。Stage 3 APIはClaude Codeを使用しない自動化専用です。パーソナライズされた修正データベースを構築し、設定されたグローバル人名名簿からASRの表記揺れを読み込み、同音異義語に対応するためドメインごとのコンテキストを参照します。人名を修正する前に、エージェントはグローバル名簿とプロジェクト固有のID名簿の双方を確認する必要があります。プロジェクト名簿は自動読み込みされず、出現頻度を身元特定の根拠として扱うことは固く禁止されています。誤認識、同音異義語、文字化けした専門用語、人名エラー、中国語・英語の混在を含むASR/STT出力の修正や、ユーザーが「この文字起こしを修正して」「議事録をクリーンアップして」とだけ指示した場合、または崩れた名前に言及した場合に使用します。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行依存関係インストールネットワーク通信ファイル書き込みDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1385License MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)Commit d5c4678cb5
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

2段階の修正ループ:Stage 1では確定的辞書ルールにより既知の修正を一括適用し、Native AI修正(Claude/Codex内蔵、外部キー不要)が全文を精読して単発エラーを修正しつつ再利用可能な修正を蓄積します。Stage 3 APIはエージェントを介さない自動化にのみ対応します。

daymade-audio/transcript-fixer/SKILL.md
1. Stage 1 applies deterministic, already-known corrections. 2. Native AI Correction reads the complete transcript, fixes one-off errors, verifies uncertain entities, and compounds reusable fixes.
処理内容:「文字起こしの修正」を確定的ルール(再現性・監査性あり)とLLMによる意味判断(単発エラー修正、エンティティ検証)の2層に分離し、「Native AI Correction is the default. Stage 1 alone is incomplete.(Native AI修正が基本であり、Stage 1単独では不完全)」を強制することで、辞書置換を実行しただけで完了とみなす事態を防ぎます。

パーソナライズ修正データベース:SQLite(~/.transcript-fixer/corrections.db)に辞書、コンテキストルール、人名名簿、レビューキューを格納します。ディレクトリはchmod 0o700、configは0o600で保護され、ドメインコンテキストファイルは~/.transcript-fixer/contexts/<domain>.mdの規約に従います。

daymade-audio/transcript-fixer/scripts/core/defaults.py
# Filesystem security CONFIG_DIR_MODE: Final[int] = 0o700 CONFIG_FILE_MODE: Final[int] = 0o600
config.pyのデフォルトパスはPath.home()/'.transcript-fixer'/corrections.db、contexts/、data/、logs/、cache/であり、ディレクトリ作成時にchmod 0o700が適用されます。スキーマバージョンv2.0(schema.sql)とマイグレーションCLI(--migration)を備え、確定した修正をドメインごとに蓄積することで「使い込むほど精度が向上する」仕組みを提供します。

人名修正ゲート:人名を変更する前に、グローバルなpeople名簿とプロジェクト明示の識別名簿の双方を必ず照合する必要があります。名簿にはASR表記揺れのみを保存し、プロジェクト名簿は自動読み込みされず、出現頻度は決して身元の証拠とはみなされません。

daymade-audio/transcript-fixer/SKILL.md
Before correcting any person name, directly read both the configured global people roster and the owning project's explicit identity roster or alias ledger. … Never use occurrence frequency as identity evidence.
コード実装:Stage 1ではグローバル名簿の「ASR表記揺れ」エントリのみを自動読み込みします(commands.py/1330付近のroster_path = os.getenv('TRANSCRIPT_FIXER_PEOPLE_ROSTER') or config…people_roster_path)。単なる姓と「先生/総(役職名)」の組み合わせは、読み込み時および--add/--import実行時(--forceを含む)に拒否されます。

セーフモード+多層マッチング防御:デフォルトでは低リスクなルールのみを自動適用し、中・高リスク項目は*_needs_review.mdおよび永続化レビューキューへ後回しにします。マッチング時の3層チェック(上位集合、一般語境界、単語境界)によって不適切なマッチをさらに排除します。

daymade-audio/transcript-fixer/SKILL.md
Safe mode is the Stage 1 default: low-risk rules apply; medium/high-risk matches defer to `*_needs_review.md` and the persistent review queue. `Applied: 0` is a valid result, not proof that the transcript is clean.
SKILL.mdの単語境界の例:ASCII文字に隣接する英字は長単語内の一部とみなされます('iCloud'内の'Cloud'は修正されず、数字は境界とみなされるため'cloud3'は修正対象)。CJK(日中韓文字)は辞書により形態素分割され、すべてが複数文字の単語であり境界を跨ぐ場合にのみ適用が拒否されます。

レビューキュー+ローカルダッシュボード:キューの行構造は{file, line, original, suggested, kind, context, evidence}です。review-dashboard/server.pyが127.0.0.1:8767でFastAPIを起動し、同一のSQLiteに読み取り専用で接続することで、CLIと人間のレビュアーが同一の判定ソースを共有します。

daymade-audio/transcript-fixer/scripts/review-dashboard/server.py
anchor guards, and audit logging stay the single source of truth — this UI never mutates the database itself. Agent (CLI) and human (this page) are equal writers of the same queue.
キューの最小エントリJSON(file必須、context原文完全一致、lineアンカー、suggested修正候補キー)はSKILL.mdで固定定義されています。CLI側には--resolve-review、--decision accepted、--reanchor-review、--list-reviewなどの裁定コマンドが用意されています。サーバーは127.0.0.1(host='127.0.0.1')にバインドされ、ローカルネットワークには公開されません。

AI拡張ルーティング(エージェントレス):Claude/Codexが利用できない場合にのみGLMへルーティングします。Anthropic互換エンドポイントopen.bigmodel.cn/api/anthropicを利用し、x-api-key認証、/v1/messages、モデルGLM-5.2(フォールバックGLM-5-turbo)で通信します。

daymade-audio/transcript-fixer/scripts/core/defaults.py
API_PROVIDER: Final[str] = "GLM" DEFAULT_MODEL: Final[str] = "GLM-5.2" FALLBACK_MODEL: Final[str] = "GLM-5-turbo" API_BASE_URL: Final[str] = "https://open.bigmodel.cn/api/anthropic" AUTH_HEADER_NAME: Final[str] = "x-api-key"
ai_processor.pyの_process_chunkはurl = f'{base_url}/v1/messages'を構築し、anthropic-versionとx-api-keyを含むヘッダーを設定してhttpxによる同期POSTを実行します(max_tokens 8000、temperature 0.3、チャンクサイズ6000文字)。SKILL.mdはClaude CodeやCodex内でのStage 3の実行を明示的に禁止しています。

証拠チェーンと完了契約:修正にはfrom_text/to_textのトレーサビリティとasr_note行マスク保護が必要です。--close-sidecarsはすべてのキュー行が裁定され、ルールが無効化され、ファイルの保留(pending)行がゼロになった場合にのみclosedを報告します(exit 1: open、exit 2: blocked)。

daymade-audio/transcript-fixer/SKILL.md
`--close-sidecars --input "<absolute-canonical-file>"` reports `closed`: every entry reads applied in the file (or the original form no longer appears anywhere in the ledger-masked transcript) or is answered by a decided queue row for this exact file
「サイドカーが存在すること=成功ではない」「pending行はブロック状態を意味する」とし、最終稿確定前にstats.pending_total == 0を必須とすることで、「高品質・最終稿」という主張を口頭の保証ではなくプログラムで検証可能な状態に変換します。

2コア機能

01Stage 1 確定的辞書修正(--domain 複数ドメイン結合 / --apply-domain / --dry-run / --json、トラップスキャンを含む)
02Native AI 全文修正(デフォルトパス:Claude/Codex内蔵モデルを使用、外部APIキー不要)
03人名修正ゲート:グローバル名簿+プロジェクト識別名簿の二重照合、表記揺れマッチング、頻度根拠の禁止、単独氏名ルールの禁止
04ドメインコンテキストのトラップと拒否(Veto):単一語の禁止/辞書登録のダウングレード、confirmed-correct(修正禁止)の記録、--apply-allによる明示的オーバーライド
05不確定項目のキュー投入+ローカルレビューダッシュボード(--enqueue-review / --list-review / --resolve-review、サーバー 127.0.0.1:8767)
06学習ループ:harvest_correctionsによるNativeパス編集のトラップ候補化、--report-false-positiveによる取り消し、数値一貫性スキャン、--scan-traps
07エージェントレスStage 3 APIバッチ処理(GLMキー使用:fix_transcript_enhanced.py、手動昇格が必要な*_stage2.mdを出力)
08音声検証パイプライン:fetch_minute_audio.pyがlark-cli経由でFeishu(Lark)Minutesの署名付きURLを取得し、curlでダウンロードしてタイムライン照合検証を実行
09バッチ処理と分割コールドレビュー:native_review_packets(複数ファイルの分割パケット化、JSON結果出力、中断再開)、git diff境界検証

3外部依存関係

KindDependency / Endpoint
networkopen.bigmodel.cn(GLM/智谱,anthropic 兼容)
cliuv / python3(PEP 723 入口,uv run)
packagehttpx/filelock/aiofiles(ensure_deps 的共享 venv)
packagejieba / rapidfuzz(fix_transcription.py PEP 723 依赖,词边界/模糊匹配)
clilark-cli(飞书 CLI,音频取证;需已登录 profile)
clicurl / ffprobe / sqlite3(工具链)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: fix_transcription.py および同ディレクトリ内のユーティリティスクリプト(uv run経由)
  • scripts/ 或 SKILL.md: 外部言語パッケージ依存関係の動的インストールを宣言
  • 网络端点: 外部ネットワークアクセスの宣言: Stage 2/3(エージェントレスAPIルーティング)が https://open.bigmodel.cn/api/anthropic/v1/ へPOSTリクエストを送信
  • 本地工作目录: ファイル読み書きと成果物の出力: ユーザーの文字起こし元ファイルを直接編集(Nativeモードではインプレース編集)し、*_stage1.md / *_changes.md / * などを生成
監査ノート: 統一基準に基づく分類:平文の認証情報へのアクセス——Stage 2/3においてGLM_API_KEY/ANTHROPIC_API_KEY環境変数または~/.transcript-fixer/config.json内の平文APIキーを読み取ります(configファイル0o600、ディレクトリ0o700の設定により保護)。また、fetch_minute_audioがlark-cli経由でユーザーのFeishuログインセッションを参照し、ensure_depsがPyPIからサードパーティ製パッケージをリモートインストールします。デフォルトのNative/Stage 1パス自体は完全オフライン・認証情報不要(ローカルSQLiteとファイル直接編集のみ)で動作しますが、API通信、音声取得、依存関係インストールの各要素が存在するため、全体としてオレンジ(注意)区分に分類されます。外部ネットワーク送信先は智譜(Zhipu)公式エンドポイント(予測可能)およびFeishuです。

5二重目の独立検証

  • [ok] SQLite 数据库与 0o700/0o600 权限 — defaults.py CONFIG_DIR_MODE=0o700/CONFIG_FILE_MODE=0o600;config.py DatabaseConfig/PathConfig __post_init__ 逐目录 mkdir+chmod;默认路径 Path.home()/'.transcript-fixer'/corrections.db。
  • [ok] 凭证读取面(GLM/ANTHROPIC key 与 config.json) — config.py from_env 读 GLM_API_KEY/ANTHROPIC_API_KEY/ANTHROPIC_BASE_URL;from_file 读 config.json api.api_key;get_config 全局 env 覆盖 file。无其他 key/token 读取。
  • [ok] 网络调用点仅 open.bigmodel.cn(+dashboard 本机) — ai_processor.py _process_chunk url=f'{base_url}/v1/messages' httpx POST;全目录 https?:// 扫描无其他外发端点;astral.sh 仅 ensure_deps 报错文案。
  • [ok] 人名门禁(roster 双读/频率非证据) — commands.py 715-719/1330-1333 roster_path = getenv('TRANSCRIPT_FIXER_PEOPLE_ROSTER') or config…people_roster_path 存在;SKILL.md 操作契约原文存在;Stage1 只加载全局 ASR 变体。
  • [ok] Safe mode 与 defer 行为 — SKILL.md『Safe mode is the Stage 1 default』;commands.py 1401 附近『Stage 1 defaults to conservative safe mode: only auto-apply low-risk』代码注释相符。
  • [ok] review queue 结构(file/line/original/suggested/kind/context/evidence) — SKILL.md 最小条目 JSON 逐字段存在;review_queue.py 以 sqlite 实现(--init 后 db 必须存在)。
  • [ok] dashboard 只读连库且仅本机 — server.py _connect_ro 用 'file:{DB_PATH}?mode=ro';uvicorn.run(host='127.0.0.1', port=PORT);docstring『never mutates the database itself』。
  • [ok] fetch_minute_audio 网络/CLI 行为 — lark-cli minutes +download --url-only → json 取 download_url → curl -sSL --noproxy '*' 下载;LARK_CLI_NO_PROXY=1 防代理带走凭证。

6結論

  • 修正作業を閉ループのデータプロダクトへ昇華:SQLite辞書、名簿、キュー、監査ログと学習ループ(harvest/learning engine)を組み合わせ、使い込むほど精度が向上し完全な監査性を維持します。
  • 幻覚(ハルシネーション)および過度な確信の抑止が本スキルの強固な防壁:流暢な誤推測よりも視認可能な文字化けを優先し、確定昇格には逐語的引用(verbatim quote)を必須とし、保留項目は最終稿出力をブロックします。
  • 人名および身元情報に対する極めて慎重なアプローチ:ソース側の表記優先、二重名簿によるゲート機能、頻度の身元根拠化禁止など、ASRの人名エラーにおける最大リスク領域に特化して設計されています。
  • デフォルトパスでは外部依存ゼロ(Native AI+ローカルSQLite):明示的なエージェントレス自動化でのみGLMキーを使用するため、「無償ですぐ使える手軽さ」と「高い拡張性」を両立しています。
  • 検証可能な品質保証:--close-sidecarsの完了条件、pending_total == 0の検証、degradedフラグにより、主観ではなく計算可能な状態で修正完了を保証します。
  • 最適な用途: 推奨対象:中国語および中国語・英語混在のASR文字起こしデータの本格的なクレンジング(会議議事録、インタビュー、ポッドキャスト、講義など)。特に人名や専門用語の誤認識が多く、長期的に修正データベースを蓄積・運用したいチームに最適です。transcript-fixerのレビューキューと人手による確認プロセスを組み合わせた「高精度な完成原稿」が求められる環境や、バッチ処理と分割コールドレビューを必要とする長文処理パイプラインに適しています。
    不向きな用途: 非推奨対象:~/.transcript-fixerデータベースや名簿の初期設定を行わず、1回限りの軽量なクレンジングのみを求めるユーザー。uvやPython環境が存在しないホスト環境。「人手による確認を一切排除した完全自動化」を期待するリスクの高い命名シナリオ(人名ゲート機能は人手や証拠による裁定を必須とします)。Claude Code内でStage 3をデフォルトとして実行しようとする構成(SKILL.mdで明示的に禁止されており、Native AIが正規のデフォルトです)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-09
    Option A · Direct DownloadDownload transcript-fixer.tar.gz
    sha256: 1621eed101bbd789…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.