> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cowagent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# search_files - ファイル検索

> ファイル内容を正規表現で検索、またはファイル名でファイルを探す

ワークスペース内のファイルを検索します。1つのツールで2つの問いに答えます。**ファイルに何が書かれているか**（内容の正規表現検索）と、**ファイルがどこにあるか**（ファイル名での検索）で、`target` パラメータで切り替えます。

Agent はターミナルで `grep` / `find` を実行するよりも本ツールを優先します。構造化された結果を返し、依存関係ディレクトリを自動的にスキップし、Windows でも同様に動作するためです。

## 依存関係

追加の依存関係は不要で、デフォルトで利用可能です。[ripgrep](https://github.com/BurntSushi/ripgrep)（`rg`）がインストールされている場合は自動的に利用され、検索がより高速になります。

## パラメータ

| パラメータ         | 型       | 必須  | 説明                                                                      |
| ------------- | ------- | --- | ----------------------------------------------------------------------- |
| `pattern`     | string  | はい  | `target=content` の場合は正規表現、`target=files` の場合は `*.py` のようなファイル名のグロブ      |
| `target`      | string  | いいえ | `content` はファイル内容を検索（デフォルト）、`files` はファイル名でファイルを探す                      |
| `path`        | string  | いいえ | 検索の起点。デフォルトはワークスペースのルート。相対パスはワークスペースを基準とします                             |
| `file_glob`   | string  | いいえ | 検索対象ファイルの絞り込み（例：`*.py`、`*.{ts,tsx}`）。デフォルトは全ファイル（`target=content` のみ有効） |
| `output_mode` | string  | いいえ | `content` は一致した行を返す（デフォルト）、`files` はファイルパスのみ、`count` はファイルごとの一致数        |
| `ignore_case` | boolean | いいえ | 大文字小文字を区別しない。デフォルト false                                                |
| `no_ignore`   | boolean | いいえ | デフォルトで除外される対象も検索する。デフォルト false。下記「デフォルトで除外されるディレクトリ」を参照                 |
| `max_results` | integer | いいえ | 返す結果の最大数。デフォルト 50、上限 500                                                |

## 内容の検索

デフォルトのモードです。一致ごとにファイル、行番号、その行の内容を返します：

```json theme={null}
{
  "matches": [
    { "file": "channel/wechat_channel.py", "line": 42, "match": "def handle_message(self, msg):" }
  ],
  "match_count": 1
}
```

どのファイルが一致したかだけ知りたい場合は、`output_mode=files` で出力量を大きく削減できます。

## ファイルを探す

`target=files` では `pattern` を**ファイル名**に対して照合し、結果は**更新日時の新しい順**に並びます。複数一致した場合、直前に作業したファイルが目的のものであることがほとんどだからです：

```json theme={null}
{
  "files": ["websites/ai-news-report.md", "archive/ai-news-report.md"],
  "match_count": 2
}
```

`*` や `?` を含まない単語だけを指定した場合は「部分一致」として扱われます。たとえば `ai-news` は `*ai-news*` と同じ意味になり、ファイル名を正確に覚えている必要はありません。

<Note>
  ファイル名でファイルを探すには `target=files` が必要です。内容検索で `report.md` を探しても、その名前に**言及している**ファイルが見つかるだけで、ファイル自体は見つかりません。
</Note>

## デフォルトで除外されるディレクトリ

依存関係やビルド成果物で検索結果が埋もれないよう、以下のディレクトリは常にスキップされます：

`.git`、`node_modules`、`__pycache__`、`.venv`、`venv`、`.mypy_cache`、`.pytest_cache`、`dist`、`build`、`.next`、`target`、`vendor`、`.tox`、`coverage`、`.idea`。

さらに ripgrep がインストールされている場合は、`.gitignore` で無視されているファイルもスキップされます。

これらを検索する必要がある場合（サードパーティのソースを調べる場合など）、`no_ignore=true` で上記2種類の除外を同時に解除できます。検索結果が0件で、かつそうしたディレクトリがスキップされていた場合は、どれをスキップしたかを示す `notice` が結果に付きます。

## ユースケース

* 関数、設定項目、エラーメッセージがコードベースのどこにあるかを特定する
* 以前生成したドキュメント、レポート、Webページをファイル名から見つける
* ある書き方がプロジェクト内で何回登場するかを数える
