CLAUDE CODE MOD

ウラ取りuradori v0.12.0

AIの「根拠あります」に、原文で検印を押す。

Claude が回答で出典(プロジェクト内のファイルやウェブページ)を挙げると、mod 自身がその原文を読みに行き、主張と食い違っていないかを確かめます。結果は入力欄の上の帯と回答の本文に印で出て、原文の該当行を見ながら人が最終判断できます。

MIT LicenseClaude Code v2.1.287+判定モデル: haikuテスト 82件導入ガイド →ブラウザで体験 →

できること

入れておくだけで、出典つきの回答が終わるたびに自動でチェックします。

✔一致

原文にも同じことが書いてある

✖食い違い

数値・条件が違う、否定されている など。いちばん重い印

△引用ずれ

添えた引用が原文に一字一句はないが、内容は食い違っていない

?確認できない

記述がない、取得に失敗、時間切れ、読まない設定のファイル

🔒アクセス拒否

ボット対策などで取得できず、Web Archive にもない

📄PDF

自動では読めない。自分で開くリンクと[別の出典を探させる]

⏸保留

社内アドレスや秘密らしい値を含む URL。押したときだけ取りに行く

⚪根拠なし

根拠を求めたのに URL がない/出典が名前だけ

件数は帯・ホバーのカード・/uradori で同じ数え方です。✔ ✖ ? はいつも、△ ⏸ 🔒 📄 はあるときだけ出ます(⏸ 🔒 📄 は ? に含めません)。

回答の本文(印は表示だけで、保存された回答は変わらない)

タイムアウトは30秒です(根拠:src/config.ts)。✖ 原文と違う
リトライは3回です(src/config.ts:3)。✔

本文にマウスを乗せると出る原文カード
🔍 ウラ取り ✔ 1 ✖ 1 ? 0 ✖ タイムアウトは30秒です ▶ src/config.ts L2: timeout: 60_000, ✔ リトライは3回です ▶ src/config.ts L3: retries: 3,

原文ポップアップ

実際のページやファイルの該当箇所を前後の文脈ごと表示し、根拠の行を ▶ で強調します。✖ が出たときはダイアログで自動で開きます(Esc で閉じる)。入力中ならキー入力を奪わず横に開くだけ。ターミナルが144桁未満と狭いときはトーストで知らせます。

回答の本文に印NEW

チェックした文の後ろに 🔍 → ✔ / ✖ が付き、マウスを乗せると原文カードが重なって出ます。印は最近の10回答ぶん残ります。スマートフォンでは印だけ。

根拠モードNEW

質問に「根拠」「出典」「一次情報」「エビデンス」などがあると、Claude にだけ見える指示(URL かファイルパスで書く、一次情報と HTML を優先、引用を「」で添える)を添えて送ります。帯に「🔍 根拠モードで送信」と出ます。

引用の一字一句照合NEW

「」の引用や URL のテキストフラグメントは、モデルを使わずに原文と照合します。空白・全角半角の差は無視、「…」の省略にも対応。内容は合っているのに引用だけ合わないものは △ に分けます。

実サイトへのハイライトリンク

テキストフラグメント(#:~:text=…)付きリンクで、実際のサイトがその文までスクロールしハイライトされた状態で開きます(Chrome・Edge・Safari など)。

ワンクリックで直させる

[訂正させる]は原文の抜粋つきで訂正を依頼。🔒 📄 には[別の出典を探させる]、⚪ には[一次情報で裏付けさせる]。直した回答もまた自動でウラ取りされます。

コマンド動き
/uradori原文ポップアップを開く(結果の要約と該当箇所へのリンクも文字で表示)
/uradori 22件目の主張の原文を開く
/uradori recheck直前の回答をもう一度チェックする
/uradori off / on自動チェックを止める/再開する
/uradori strict毎回の回答をウラ取り対象にする(もう一度で元に戻す)
/uradori why直前の回答をウラ取りした/しなかった理由を表示する
/uradori archive off / onアクセス拒否のときに Web Archive を使わない/使う(既定: 使う)
/uradori popup off / on✖ のとき原文ポップアップを自動で開かない/開く(既定: 開く)

いつ発動するか

質問に根拠を求める言葉があるかどうかで動きが変わります。

質問回答動き
根拠を求める言葉がある
根拠・出典・一次情報・ソース・裏付け・エビデンス・原典・ファクトチェック・cite など
URL・ファイルの出典あり原文でチェック → ✔ ✖ △ ?(数値・日付・規格などの主張から先に確認)
出典が名前だけ帯に ⚪ URLなしの出典 n件 と[一次情報で裏付けさせる]
出典なし帯に ⚪ 根拠が示されていません と[一次情報で裏付けさせる]
根拠を求める言葉がないURL・ファイルの出典あり原文でチェック
出典なし何もしない

「ソースコード」や数式の「公式」では発動しません。入力した文そのものは変わらず、根拠モードの印はそのターンかぎりです。

✔ チェックする書き方

  • タイムアウトは60秒です(根拠:src/config.ts)
  • 根拠は src/config.ts の3行目です(直前の文が主張)
  • docs/spec.md によると、〜です
  • 回答末尾の参考リンク、「設定は src/config.ts にあります」
  • 行番号つき(src/config.ts:12、docs/a.md#L5)

— チェックしない書き方

  • 「config.ts を修正しました」のような作業の報告
  • 質問文
  • example.com のようなドメイン名だけ、1.2.3 のようなバージョン番号

なぜ必要か

「根拠あり」が伝言ゲームになる場面があるため。

WebFetch は要約を返す

Claude Code がウェブページを読むとき、受け取るのはページ全文ではなく小さなモデルが要約した結果です。

古いドキュメントをそのまま信じる

ドキュメントが古いと、Claude は古い内容を「根拠あり」として答えてしまいます。

人が確かめるのは手間

リンクやファイルを自分で開くしかなく、結局確かめずに信じてしまいがちです。

ウラ取りの答え

Claude が読んだ要約を使わず、原文を自分で取りに行きます。判定は会話の履歴を持たない別のモデル呼び出しなので、Claude と同じ思い込みを引き継ぎません。

仕組み

質問を送るときと、回答が終わったときの2か所で動きます。

送信時(prompt.submit):根拠を求める言葉があれば、Claude にだけ見える指示を質問に添えます。
回答完了時(turn.complete):$.clock.after(0, …) で処理を後回しにし、Claude を止めずに裏でチェックを始めます。サブエージェントの回答や空の回答は対象外です。

出典を拾い、主張と対にする正規表現 + $.model

かっこ内の出典、「〜によると」「根拠は〜」などは文から直接取り出します。末尾の参考リンクのように対応が曖昧なものは、モデルに主張と出典を対にさせます。数値・日付・規格などの主張を先に確認します。

原文を mod 自身が取りに行く$.fs / $.http

ファイルはプロジェクト内で秘密情報らしい名前でないものだけ。URL は社内アドレスや秘密らしい値を含むものを ⏸ にして送り出さず、それ以外をブラウザと同じヘッダーで取得します(1回15秒まで)。

拒否されたら Web Archiveweb.archive.org

403・429 やボット確認のページなら、Web Archive の最新の保存版で確かめます。保存版もなければ 🔒 です。

引用を一字一句照合し、関係する行を選ぶ

「」の引用があればモデルを使わずに原文と照合します。原文が大きいときは主張のキーワード(60_000→60000 のように正規化)と行番号を手がかりに抜粋します。

まっさらなモデルで判定$.model.complete (haiku)

会話履歴のない呼び出しに主張・出典・行番号つき原文だけを渡し、一致/食い違い/確認できないと根拠の行番号を返させます(30秒まで)。根拠の行を示せなければ ? にします。

帯・本文・ポップアップに表示ui.render / $.ui.open

抜粋は判定モデルの言葉ではなく原文の行そのもの。URL には根拠の文を使ったテキストフラグメント付きリンクを作ります。✖ があればポップアップを開きます。

1. まず

ブラウザと同じヘッダーで取りに行く

2. 拒否されたら

Web Archive の最新の保存版で確認。ポップアップに「📦 Web Archive 2026-04-25 の保存版で確認」のように出る

3. それもなければ

🔒。[別の出典を探させる]か、自分のブラウザで開いて確かめる

1回の回答でチェックする主張は最大6件、主張1件ぜんぶで60秒まで。時間を過ぎたものやリロードで途中になったものは ? にして、帯が「確認中」のまま残らないようにしています。判定モデルは hooks/register.tsx の JUDGE_MODEL(既定 haiku)で、sonnet に変えると精度が上がります。

mod としての特徴

Claude Code の mod の仕組みをどう使っているか。

mod の機能ウラ取りでの使い方
session.startセッション開始時に /uradori コマンドを登録
prompt.submit根拠を求める質問に、Claude にだけ見える指示(context)を添える
turn.complete回答完了をきっかけに、裏でチェックを開始
command.run/uradori の引数(番号・recheck・strict・why・archive・popup など)を処理
ui.render(AbovePrompt)入力欄の上の帯。根拠モードの表示もここ。アンケート表示中は譲る
ui.render(AssistantMessage)回答の本文に印を付け、ホバーで原文カードを重ねる
ui.render(Pane)+ $.ui.open原文ポップアップ。✖ のときはダイアログで開く
$.fs / $.http原文を直接読む。Claude の要約を経由しない
$.model.complete主張と出典の対応付け、および独立した判定
$.prompt.submit[訂正させる][別の出典を探させる][一次情報で裏付けさせる]の依頼を送る
atom(状態)結果の履歴(10回答ぶん)、オン/オフ、strict、Archive、自動ポップアップの設定を保持

表示される場所

  • ターミナル版 Claude Code
  • デスクトップアプリの Code タブ
  • VS Code 拡張
  • claude.ai のチャットやクラウドでは、動いても描く画面がないため見えません

構成

  • hooks/register.tsx … イベント処理と UI(約1,160行)
  • hooks/logic.ts … 出典抽出・URL の安全判定・引用照合・判定プロンプトなど純粋なロジック(約1,050行)
  • tests/ … 表示(terminal / desktop / vscode / mobile)、引用照合、時間切れ、保留 URL など82件

安全設計と限界

迷ったら ✔ にしない、が原則。

安全のために

  • 読むのはプロジェクト内のファイルだけ(シンボリックリンクの行き先も確認)
  • .env、*.pem、id_rsa、credentials など秘密情報らしいファイルは読まない
  • localhost・プライベート IP・.internal などの社内アドレス、token= などを含む URL は自動で取りに行かず ⏸(リダイレクト先も同じ)。読んだページに仕込まれた指示で秘密を送らされるのを防ぐため
  • 失敗・時間切れ・根拠の行を示せない判定は必ず ?。✔ にはしない
  • 主張と原文の抜粋をセッションと同じアカウントの haiku に、URL だけを Web Archive に送る(会話は送らない。/uradori archive off で止められる)
  • mod はサンドボックスの外であなたの権限で動く。会社 PC では社内ルールを確認

限界

  • 確かめるのは「出典にそう書いてあるか」。出典自体の正しさは分からない(古いドキュメントにも ✔ が付く)
  • ログインが必要なページ、JavaScript で描画されるページは読めない(?)
  • PDF は読めない(📄)。根拠モードでは HTML を優先するよう Claude に伝える
  • ホスト名を DNS で引いた先が社内 IP かどうかまでは確かめられない
  • 判定もモデルなので間違えることがある。だから原文の行を必ず並べて見せる

導入とデモ

約60秒で「古いドキュメント」を見抜く様子を試せます。

git clone https://github.com/yui-taro/uradori ~/mods/uradori claude --plugin-dir ~/mods/uradori # このセッションだけ試す // ~/.claude/settings.json に書くと毎回読み込む { "env": { "CLAUDE_CODE_PLUGIN_DIRS": "~/mods/uradori" } } /plugin # → 1 mod active · uradori

入手から動作確認・更新・うまくいかないときまでの詳しい手順は 導入ガイド にまとめています。

Claude Code がない環境でも、ブラウザで触れる体験デモで流れを試せます(動きを再現したもので、実際の判定はしません)。

demo/ には、docs/spec.md に「タイムアウト30秒」と書かれているのに、実際の src/config.ts は timeout: 60_000(60秒)という、ドキュメントが古いプロジェクトが入っています。

ドキュメントだけで答えさせる

「docs/spec.md を読んで、タイムアウトとリトライ回数を教えて。どのファイルで設定されているかも書いて。コードは開かず答えて」

Claude が古い情報で回答

「タイムアウトは30秒、リトライは3回。どちらも src/config.ts で設定」

数秒後に ✖ 1 / ✔ 1

本文の文末に印が付き、原文ポップアップが自動で開く。src/config.ts の3行目 timeout: 60_000 が ▶ で強調されている。人はファイルを開いていません。

[訂正させる]

Claude が config.ts を開き直して「60秒でした。ドキュメントが古いです」と訂正し、帯が ✔ に変わります。