今朝、このモーフワープ検索ツールをインストールしたのですが、すっかり忘れていました。エージェントたちが使っていたのか、そしてそれが少しでも役に立っていたのか、気になっていました。 そこで彼らに尋ねてみたところ、彼らは皆、全く使っておらず、いつものようにgrepを使い続けていると、男らしく(いや、ロボットのように)認めました。まるで白髪の老練な開発者のように、自分のやり方に固執しているのです。 とにかく、彼らに実際に触ってみて、感想を聞かせてほしいと頼みました。それで彼らは試乗して、フィードバックをくれました。 次に、彼らに、いつ、なぜ、どのようにそれを最も効果的に使用できるかを考えてもらいました。そして、そのうちの 1 人に、AGENTS dot md ファイルで使用するために、そのすべてを説明する最もトークン密度が高く、直感的な説明 (少なくとも彼らのロボット脳にとって直感的なもの) を考えてもらいました。 出来上がったのがこれです。ぜひ、AGENTS dot md に取り入れてみてください(ちなみに、今のところの私の判断としては、しばらくはそのままにしておいて、実際にどれくらい使われるか見てみる価値はあると思いますが、おそらくかなり役に立つと思います。ただし、実際に使うように説得できればの話ですが。だからこそ、こうした短い説明は非常に重要で、エージェントに命令するよりも説得することに集中すべきなのです!道徳的な説得は人間だけのものではありません…): --- ### Morph Warp Grep と標準 Grep Warp Grep = grep、読み取り、接続の追跡、行番号付きの合成コンテキストを返す AI エージェント。 標準 Grep = 正規表現の高速一致、結果を解釈します。 決定: grep パターンを記述できますか? - はい → Grep - いいえ、質問があります → mcp__morph-mcp__warp_grep #### Warp Grep クエリ (自然言語、場所不明) 「モデレーションの異議申し立てフローはどのように機能しますか?」 「Websocket 接続はどこで管理されますか?」 「ユーザーが投稿を送信すると何が起こりますか?」 「レート制限はどこで実装されていますか?」 「API ルートで認証セッションはどのように検証されますか?」 「moderationDecisions テーブルにアクセスするサービスはどれですか?」 #### 標準 Grep クエリ (既知のパターン、特定のターゲット) pattern="fileAppeal" # 既知の関数名 pattern="class.*Service" # 構造パターン pattern="TODO|FIXME|HACK" # 個のマーカー pattern="processenv" path="apps/web" # 特定の文字列 pattern="import.*from [']@/lib/db" # インポートトレース #### Warp Grep が内部で行っていること 1 つのクエリ → 15 ~ 30 の操作: 複数のパターンを grep する → 関連するセクションを読み取る → インポート/参照を追跡する → ファイル全体ではなく、フォーカスされた行の範囲 (例: l3-guardian.ts:269-440) を返す。 #### アンチパターン | Warp Grep を使用しない理由 | 理由 | 代わりに使用 | |------------------------|-----|-------------| | "関数 handleSubmit を検索" | 既知の名前 | Grep パターン="handleSubmit" | | "認証設定を読み取ります" | 既知のファイル | file_path="lib/auth/..." を読み取ります | | "X が存在するかどうかを確認" | ブール値の回答 | Grep + 結果のチェック | | タスクの途中でのクイック検索 | レイテンシ 5~10 秒 | Grep は 100 ミリ秒 | #### Warp Grepが勝利したとき - ファイル間のデータフローのトレース(API → サービス → スキーマ → タイプ) - 変更する前に未知のサブシステムを理解する - 3つ以上のファイルにまたがる「方法」の質問に答える - 横断的な関心事に関するすべての接点を見つける — この gist で、この短いやり取り全体を見ることができます。 https://t.co/Z6jvFXDxub
実は、最初に出てきたものも気に入っているので、両方とも AGENTS dot md に含めるつもりです。 --- ### Morph Warp Grep — AIを活用したコード検索 **「X はどのように動作するのか」という探索的な質問には `mcp__morph-mcp__warp_grep` を使用します。** AI 検索エージェントがクエリを複数の検索パターンに自動的に拡張し、コードベースを grep し、関連ファイルを読み取り、完全なコンテキストを含む正確な行範囲を返します。これらはすべて 1 回の呼び出しで実行されます。 **対象を絞った検索には `ripgrep` (Grep ツール経由) を使用します。** 探しているもの (特定の関数名、エラー メッセージ、構成キーなど) が正確にわかっている場合は、ripgrep の方が高速かつ直接的です。 **構造コード パターンには `ast-grep` を使用します。** コメントや文字列を無視しながら AST ノードを一致/書き換える必要がある場合、またはコードベース全体のルールを適用する必要がある場合。 **何をいつ使うか** | シナリオ | ツール | 理由 | |----------|------|-----| | 「認証はどのように実装されていますか?」 | `warp_grep` | 探索的; どこから始めればよいかわかりません | | 「L3 ガーディアン アピール システムはどこにありますか?」 | `warp_grep` | アーキテクチャを理解し、複数の関連ファイルを見つける必要があります | | 「`useQuery(` のすべての使用箇所を検索」 | `ripgrep` | 対象を絞ったリテラル検索 | | 「`console.log` でファイルを検索する」| `ripgrep` | 単純なパターン、既知のターゲット | | 「`getUserById` を `fetchUser` に名前変更」| `ast-grep` | 構造的なリファクタリング、コメント/文字列の回避 | | 「すべての `var` を `let` に置き換えます」| `ast-grep` | コードベース全体の Codemod | **warp_grep の強み** * **コンテキスト汚染を軽減**: ファイル全体ではなく、関連する行範囲のみを返します。 * **インテリジェントな拡張**: 「appeals system」を「appeal」、「Appeals」、「guardian」、「L3」などの検索に変換します。 * **ワンショット回答**: 手動の grep → 読み取りサイクルではなく、正確な場所で最も関連性の高い 3 ~ 5 個のファイルを検索します。 * **自然言語**:「どのように」、「どこで」、「何を」などの質問に適しています。 **warp_grep の使い方** 「」 mcp__morph-mcp__warp_grep( リポジトリパス: "/data/projects/communitai", 質問: 「L3 Guardian の異議申し立てシステムはどのように実装されていますか?」 ) 「」 ファイル パス、行範囲、抽出されたコード スニペットを含む構造化された結果を返します。 **経験則** * **どこを探せばいいかわからない** → `warp_grep` (AIに見つけさせる) * **パターンを知る** → `ripgrep` (最速) * **AST 精度が必要** → `ast-grep` (書き換えに最も安全) **アンチパターン** * ❌ `warp_grep` を使用して、すでにわかっている特定の関数名を検索する → `ripgrep` を使用する * ❌ `ripgrep` を使って「X がどのように動作するか」を理解する → 手動でのファイル読み取りで時間を無駄にする * ❌ codemods に `ripgrep` を使用する → コメントや文字列が抜け落ち、付随的な編集のリスクがある