prumo について
prumoは、コーディングエージェントのコンテキストファイルをGitインデックスと照合し、古いパスやリンクを検出します。ファイル位置、行番号、修正案を示し、ドリフト、コンテキストコスト、カバレッジのレポートも備えます。
主な機能
- 01無効なパスとリンクの検出
- 02パスの大文字・小文字の不一致検出
- 03問題の行と修正案の提示
- 04ドリフト、予算、カバレッジのレポート
- 05JSON出力とCIチェックへの対応
- 06読み取り専用と修正用のMCPツール
活用シーン
- 01変更のマージ前にエージェント指示を確認
- 02CIでパスの大文字・小文字の誤りを検出
- 03リポジトリの改名後にコンテキストファイルを確認
- 04コンテキストファイルのドリフトとコードカバレッジを測定
MCP 対応
パッケージにはstdioで動作するMCPサーバーが含まれ、読み取り専用のチェック、パスの大文字・小文字とGitが記録した改名を直すツール、読み取り専用のドリフト、予算、カバレッジのレポートを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| repo | string | いいえ | git リポジトリへのパス。デフォルトはサーバーの現在の作業ディレクトリです。 |
| targets | array | いいえ | チェックする Markdown ファイルまたはフォルダー。リポジトリからの相対パスです。省略すると、CLAUDE.md、AGENTS.md、インストール済みの SKILL.md ファイルなどを自動検出します。 |
詳細
コーディングエージェントが読み込むコンテキストファイルを、その隣にあるコードと照合します。
問題
3か月前、誰かが CLAUDE.md に次のように書きました。
The sidebar logo lives in `layouts/AppLayout.vue`.
その後、フォルダー名は先頭のLを大文字にした Layouts に変更されました。WindowsやmacOSでは今もそのパスを開けるため、誰も問題に気づきませんでした。LinuxやCIでは開けず、このファイルを読むエージェントはすべて、存在しない場所に誘導されます。
この行は、同じファイルに対する手作業での監査を6回行っても残っていました。prumoは4秒で見つけました。
クイックスタート
すでにNode.js 18+とgitがあれば、すぐに使えます。インストールも設定も、アカウント作成も不要です。任意のgitリポジトリ内でターミナルを開き、次を実行してください。
npx @tomd4vs/prumo
prumoはコンテキストファイルを自動で見つけます。CLAUDE.md、AGENTS.md、.cursor/rules、.github/copilot-instructions.md、.claude/skills/にインストールされたスキルなどが対象です。検索対象となるすべてのファイルとフォルダーは、リファレンスに記載されています。
頻繁に使う場合は、1度だけインストールしてください。
npm install -g @tomd4vs/prumo # available everywhere on your machine
npm install --save-dev @tomd4vs/prumo # or as a dev dependency of one project
どちらの場合も、コマンドはprumoで、依存関係はゼロです。古いNodeやgitリポジトリではないフォルダーなど、この手順でエラーが発生した場合は、トラブルシューティングをご覧ください。
結果の読み方
問題がない場合:
prumo — 1 context file, 401 files tracked by git
nothing to review.
指摘事項がある場合(注釈付き):
prumo — 3 context files, 412 files tracked by git ← what it read
1 historical entry exempt from path checks ← what it skipped on purpose
CASE MISMATCH (1) wrong letter case: works on Windows and macOS, fails on Linux and CI
CLAUDE.md:18 layouts/AppLayout.vue -> resources/js/Layouts/AppLayout.vue
↑ what the note says ↑ what the repository has
BROKEN LINK (2) points at a page or heading that is not there; 1 with a likely destination
CLAUDE.md:21 [[deploy-checklist]] -> deploy_checklist ← the file it probably meant
CLAUDE.md:30 [[old-architecture]] ← no candidate: renamed or deleted
MISSING PATH (1) the note cites it, but git tracks no such file or folder
docs/setup.md:44 config/database.php ← file, line, dead path
Copy the template into `config/database.php`… ← the sentence, so you can judge
4 to review, --fix corrects 1 ← 1 + 2 + 1
各指摘にはファイル名、行番号、修正案が表示されます。また、パスが見つからない場合、履歴に名前変更の記録があれば、gitが移動先として記録した場所を示します。推測で判定することも、ファイルに書き込むこともありません。各指摘の意味と対処方法については、リファレンスをご覧ください。正しいと分かっている行に指摘が付いた場合は、指摘を抑制するで、抑制する2つの方法と、指摘が抑制される条件を説明しています。反対に、指摘されるはずの行が報告されない場合は、prumo --explain CLAUDE.md:12を実行すると、その行から何が読み取られ、どのフィルターが判定したのかが分かります(行が報告される場合とされない場合)。
prumoが行わないこと
意図的に設けた3つの制限については、設計で説明しています。
- 記述内容の正しさは判定しません。*「このフラグはキャッシュを無効にする」*が今も正しいかを調べるにはモデルが必要であり、それは別のツールの役割です。
- 大文字小文字の変更と、git自体が記録した名前変更以外の編集は行いません。名前からリンク先を提案するのは推測にすぎず、履歴に記録のないパスの欠落は、意図的な場合もあります。
- ネットワークへのアクセスは一切行いません。テレメトリーも、アカウントも、モデルもありません。
公開リポジトリで出荷前にすべてのチェックを計測しており、設計ページでは、見栄えの悪い結果も含めて数値を公開しています。
エージェントから使用する
prumo は通常の CLI なので、シェルにアクセスできるエージェントなら実行できます。
エージェントに実行を依頼する。 npx @tomd4vs/prumo はどの Git リポジトリでも動作し、.claude/skills/ の下にインストールされたスキルも自動でチェックします。リポジトリ自体がスキルの場合は、ファイルを指定します。npx @tomd4vs/prumo . SKILL.md。テキスト出力にはファイル名、行、修正内容が示されるため、解析しなくてもエージェントが対応できます。--format json は同じ指摘を構造化データで返します。
ツールとして公開する。 このパッケージには、stdio 経由の MCP サーバー prumo-mcp も含まれています。ツールは 5 つあります。読み取り専用の prumo_check、大文字・小文字と git に記録された名前変更を書き換える prumo_fix、さらに読み取り専用の 3 つのレポート prumo_drift、prumo_budget、prumo_coverage です。Claude Code では次のように設定します。
claude mcp add prumo -- npx -y -p @tomd4vs/prumo prumo-mcp
ほかの MCP クライアントの設定は、エージェントを参照してください。
スラッシュコマンドを追加する。 .claude/commands/prumo.md にファイルを作成すると、チェックを /prumo として実行できます。
Run `npx @tomd4vs/prumo` and fix every finding it reports.
編集のたびに実行する。 PostToolUse フックを使うと、エージェントがコンテキストファイルを書き込むたびに prumo が実行され、指摘がトランスクリプトに表示されます。そのため、同じターン内に修正できます。bash と PowerShell 用のフックは、エージェントにあります。
継続的インテグレーション
prumo は指摘があるとゼロ以外の終了コードを返すため、パイプラインの 1 ステップとして組み込めます。最も簡単なのは、このリポジトリに含まれているアクションです。
# .github/workflows/docs.yml
name: docs
on: [push, pull_request]
jobs:
prumo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: TomD4vs/prumo@v1
プルリクエストの該当行に注釈を付け、確認が必要な箇所があるとジョブを失敗させます。actions/setup-node の後に npx @tomd4vs/prumo --quiet を実行すれば、どのパイプラインでも同じことができます。通常どおり actions/checkout を使用してください。prumo は git インデックスを読み取るため、インデックスを含めないチェックアウトでは動作しません。残りのケースは、次の 3 つのオプションで対応できます。
--baselineは、既存の未対応項目があるリポジトリの状態を一度記録します。それ以降の実行では、新たに追加された項目だけが失敗の対象になります。--since origin/mainは、プルリクエストで変更されたコンテキストファイルのみをチェックします。--sarif FILEはコードスキャン用の指摘を書き出します。また、.pre-commit-hooks.yamlを使うと、pre-commit フレームワーク経由でコミットのたびに同じチェックを実行できます。
アクションの入力、SARIF のアップロード、pre-commit の設定は、リファレンスにあります。
3 つのレポート
チェックに加えて、3 つのコマンドは評価ではなく計測を行い、結果にかかわらず終了コード 0 を返します。
prumo drift # which sections describe code that changed since they were written
prumo budget # what each context file costs the agent, and what is written twice
prumo coverage # which folders of the code no context file mentions, most active first
drift は git blame から各セクションの最終更新時期を調べ、その後に引用されているファイルに加えられたコミット数を数え、最も変更の多いセクションから順に一覧表示します。レビュー時に読む順番を決めるためのもので、引用ファイルが 40 回変更されたセクションでも、内容が正しい場合はあります。budget は、各セッションでコンテキストファイルがどれほどのコストになるかを推定します。CLAUDE.md が読み込むファイルに加え、スキル、フォルダーのノート、スコープ付きルールの使用時にのみ追加される内容、その量がコミット以降どれほど増えたか、複数の場所に記述されている段落も示します。coverage は、ワークスペースではパッケージごとに、どのコンテキストファイルにも言及されていないコードのフォルダーを、過去 90 日間のコミット数が多い順に一覧表示します。つまり、エージェントにまったく伝えられていない内容がわかります。3 つすべての詳細はリファレンスにあり、いずれも MCP サーバーのツールです。
ドキュメント
| ページ | 内容 |
|---|---|
| リファレンス | すべてのオプションと終了コード、各指摘の意味、指摘を無視する方法、--fix が変更する内容 |
| エージェント | すべての連携機能の詳細:MCP サーバー、bash と PowerShell 用の PostToolUse フック、スラッシュコマンド |
| 設計 | チェック項目を少数に絞った理由:シンボルチェッカーを削除した計測と、残りのチェックを静かに保つフィルター |
| トラブルシューティング | エラーメッセージと、導入前によく寄せられる質問 |
| API | コードから呼び出す方法と、テストスイートの実行方法 |
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。