dotfiles/claude/skills/ba2-docs-search/SKILL.md
docs/ 配下のナレッジ(調査/実装/その他/メモ/レビュー/雑記)を、キーワード・人名・トピック・日付などで全ユーザー横断検索するスキル。まず rg でヒット件数だけ調べ(激安)、候補が多い場合は Explore エージェントをユーザー単位で並列 fan-out して「読み込み+要約」を分散し、本体コンテキストを軽く保ったまま高速に結果を返す。「docsを検索」「ナレッジ全体から探して」「○○について書いた記録ある?」「△△さんの調査どこ?」「横断検索して」「過去に□□って調べたっけ」などでトリガー。純粋な BAX-XXXX 番号だけが入力されたときは ba2-ticket-knowledge-reader に委譲する。
npx skillsauth add octkp/dotfiles ba2-docs-searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
docs/ 配下に蓄積された全ナレッジを、任意のクエリ(キーワード・人名・トピック・日付・チケット名の一部など)で全ユーザー横断に検索し、出典つきで要約して提示するスキル。
膨大化しても破綻しないよう、「まず安く件数を測る → 量に応じてエージェントで読み込みを並列化する」 という二段構えで動く。
| スキル | 入力 | 探す範囲 |
|---|---|---|
| ba2-ticket-knowledge-reader | BAX-XXXX 番号(既知の前提) | そのチケットの README/LOG/PLAN |
| ba2-memo(ワークフローB) | キーワード | 自分の メモ/ だけ |
| ba2-docs-search(本スキル) | 任意のクエリ | docs/ 全体(全ユーザー・全カテゴリ・雑記含む) |
BAX-\d+ 番号だけ(例: 「BAX-10987」「BAX-10325読んで」)なら、本スキルではなく ba2-ticket-knowledge-reader に委譲する(あちらの方が構造を理解して的確に出す)。docs/
{ユーザー名}/ ← takano / tokita / ushiroyama / yukioka …(全員が対象)
調査/ 実装/ その他/ ← BAX-XXXX_{名前}/{README,LOG,PLAN}.md
メモ/ ← YYYY-MM.md(日付軸メモ)
レビュー/ ← PR レビュー結果
雑記/ ← gitignore・非共有・ローカルのみ(後述)
{ユーザー名}/*.md ← 直下に置かれた単発 md もある(例: BAX-5399_*.md)
docs/.obsidian/ は Obsidian 設定なので常に除外する。docs/*/ を一律に対象にする。docs/*/雑記/ は .gitignore 対象で共有されないローカル専用メモ。ただし本人にとっては実質的な記録(共有を避けたい私的トピックの退避先)でもある。
雑記/ はそもそもローカルに存在しない(gitignore で同期されない)ため、実際に当たるのは自分の雑記だけになる。これは正常。REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -z "$REPO_ROOT" ]; then
echo "ERROR: ba2-workspace リポ内で実行してください" >&2
exit 1
fi
DOCS_DIR="$REPO_ROOT/docs"
cd "$REPO_ROOT" && git pull --ff-only 2>/dev/null || true
ユーザー入力から検索語を取り出す。
語1|語2 のパターンにする(下記コマンド参照)。BAX-\d+ だけなら ba2-ticket-knowledge-reader に委譲して終了。rg で「どのファイルに何件ヒットするか」だけを取る。ここは数千ファイルでもミリ秒。この時点ではファイル本文を読み込まない(コンテキストを汚さない)。
# 候補ファイル一覧(.obsidian は除外。雑記は含める)
rg -l -i --glob '!.obsidian/**' -- "<pattern>" "$DOCS_DIR"
# ファイルごとのヒット件数(多い順の判断材料)
rg -c -i --glob '!.obsidian/**' -- "<pattern>" "$DOCS_DIR" | sort -t: -k2 -nr
# 候補の規模感(ファイル数と概算バイト数)
rg -l -i --glob '!.obsidian/**' -- "<pattern>" "$DOCS_DIR" | wc -l
rg -l -i --glob '!.obsidian/**' -- "<pattern>" "$DOCS_DIR" | xargs -I{} wc -c {} | tail -1
rg -l 語1 ... | xargs rg -l 語2(候補を絞り込む)。-- "語1|語2"。BAX- の有無)を変えて 1〜2 回リトライしてから「見つからない」と報告する。重要な原則:重いのは rg ではなく、ヒットした大量ファイルを読み込んで関連性を判断・要約する工程。だからエージェントは「読み込み+要約の並列化」に使う。
| 規模(目安) | 戦略 |
|---|---|
| 候補ファイル ≤ 15 かつ 合計 ≤ 約500KB | インライン処理。rg -n -C2 で該当箇所+前後だけ読み、必要なファイルだけ Read して直接要約。エージェント不要。 |
| それ超(候補が多い/大きい/全ユーザーに散在) | Explore エージェントを並列 fan-out(次節) |
迷ったら小規模側(インライン)で始めてよい。途中で「思ったより多い」と分かったらエージェントに切り替える。
候補がヒットしたユーザーディレクトリ単位で Explore サブエージェントを立て、1メッセージ内で複数 Agent 呼び出しして並列実行する(独立タスクなので同時に投げる)。
docs/{ユーザー}/。候補ファイルが 0 のユーザーにはエージェントを立てない。調査/・実装/・メモ/ …)に再分割する。あなたは docs ナレッジの横断検索担当。担当範囲だけを調べて結果を返す(要約しすぎず、具体を残す)。
担当パス: docs/{ユーザー}/
クエリ: "<検索語>"
手順:
1. rg -n -i -C2 --glob '!.obsidian/**' -- "<検索語>" docs/{ユーザー}/ でヒット箇所を洗い出す
2. ヒットしたファイルの該当箇所周辺だけ読む(全文は読まない)
3. 各ヒットを以下の形式で返す(最大20件。多ければヒット件数の多い順):
- file: 相対パス(例 docs/takano/メモ/2026-05.md)
- line: 行番号
- context: 日付見出し / BAX番号 / トピック見出し など、その箇所が何の話か
- excerpt: 該当部分の1〜2行引用
- relevance: クエリとどう関係するか一言
- private: そのファイルが docs/*/雑記/ 配下なら true(非共有メモ)
ヒットが無ければ「該当なし」とだけ返す。
Agent ツールの subagent_type は Explore(読み取り専用・fan-out 検索向き)を使う。
path:line を必ず付ける(後から本人が辿れるように)。📁雑記(非共有) docs/takano/雑記/2026-05.md:12)。ユーザー: 「ソニペイの調査ってどこに書いたっけ」
rg -l "ソニペイ" docs → 候補 5 ファイル(小規模)rg -n -C2 "ソニペイ" docs で該当箇所を読むdocs/takano/調査/BAX-11281_ソニーペイメント調査/ と メモ/2026-05.md:242(5/18 会員削除処理のエラーハンドリング)に記録。結論は…」と出典つきで要約ユーザー: 「リロクラブ関連の記録、全員分まとめて」
rg -c "リロ" docs → 4ユーザー中3ユーザー・40+ファイルに散在(大規模)docs/takano/・docs/ushiroyama/・docs/tokita/ に Explore エージェントを並列で3つ起動ユーザー: 「BAX-10987」→ 番号だけなので ba2-ticket-knowledge-reader に委譲。
.obsidian/ は常に除外。雑記/ は含めるが必ず「非共有」と明示する。path:line を省略しない。省略・打ち切りをするときは件数を明記する(黙って切らない)。documentation
base リポジトリ(~/base)の主要ディレクトリ(dotfiles / home / local / scripts / docs)の README.md と、リポジトリ直下の README.md を、実際のファイル構成に合わせて更新・新規作成するスキル。各ディレクトリの中身を実際に走査して内容を導出するので、設定追加・ディレクトリ移動のあとに走らせると README が現状と一致する。「READMEを更新して」「READMEを作り直して」「base のドキュメントを整える」「/base-readme」などのリクエストで使用。
development
旧 badev-knowledge-base リポの docs/{苗字}/ 配下を、許可リストの現役メンバー 4 人 (takano / tokita / yukioka / ushiroyama) に絞って ba2-workspace/docs/ に同期するスキル。旧リポを source of truth として、衝突時は新リポ側を旧リポで上書きする。コミット・プッシュは行わず、git add までで停止する。「badev-knowledge-base から同期して」「旧リポのナレッジを取り込んで」「badev-knowledge-sync を走らせて」「旧 docs を同期」などのリクエストでトリガー。
documentation
チケット番号(BAX-XXXX)を伝えるだけで、ba2-ticket-knowledge-logger が記録したナレッジドキュメント(README.md / LOG.md / PLAN.md)を全ユーザー・全カテゴリ横断で自動検索して読み込み、要約して提示するスキル。別セッションで過去の調査・実装内容を読み直したいときに使う。「BAX-10987」「BAX-10325のナレッジ読んで」「前に調べたBAX-XXXXの記録」「BAX-XXXXの続きをやりたい」「BAX-XXXX読み直して」などのリクエストでトリガー。
tools
チケット番号(BAX-XXXX)とカテゴリ(調査/実装/その他)を指定して、会話ログとまとめファイルを記録し、JIRAチケットにもコメントとしてナレッジを投稿するスキル。「BAX-10325の調査を記録」「実装にチケット作成」「会話ログを保存」などのリクエストで使用。