mcpField
L
local-places

local-places

github.com/nimbleway生産性6188 回インストール2 日前に更新
リポジトリ

local-places について

local-placesは、Nimbleを使って地域の店舗を検索・比較するスキルです。店舗情報の発見や補完、信頼度評価に加え、地図やレポートの作成にも対応します。

主な機能

  1. 01種類と地域を指定した店舗検索
  2. 02レビューとSNSプロフィールの補完
  3. 03重複排除と信頼度評価
  4. 04インタラクティブな地域マップ作成
  5. 05レポートとデータの保存・共有

活用シーン

  1. 01近隣のカフェやジムの検索
  2. 02レビューと情報源に基づく店舗比較
  3. 03検索した地域店舗のマップ作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nimbleway/agent-skills --skill local-places

インストール後、Claude Code で/local-placesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
memory-and-distribution.md
nimble-playbook.md
profile-and-onboarding.md
wsa-pipeline.md

詳細

ローカルスポット

Nimble Web Search Agents とウェブデータ API による位置情報インテリジェンス。

ユーザーのリクエスト:$ARGUMENTS

コマンドを実行する前に、Claude Code の制約(シェル状態なし、&/wait の使用禁止、サブエージェントの権限、コミュニケーションスタイル)について references/nimble-playbook.md を読んでください。


手順

ステップ 0:事前確認

references/nimble-playbook.md のトランスポート選択と標準の事前確認に従ってください。セッション開始時に CLI または MCP を選び、標準の事前確認呼び出し(日付計算、今日の日付、プロフィール、メモリーインデックス)を並行して実行します。

同時に、次の操作も行ってください。

  • mkdir -p ~/.nimble/memory/{reports,local-places/checkpoints}
  • 既存のチェックポイントを確認します:ls ~/.nimble/memory/local-places/checkpoints/ 2>/dev/null

結果に応じて、次のように対応してください。

  • CLI がない、または API キーが設定されていない -> references/profile-and-onboarding.md を参照して終了します。
  • すべての nimble CLI 呼び出しにタグを付けます:nimble --client-source nimble-agent-skills <subcommand>。MCP リクエストはトランスポートレベルで識別されます。references/nimble-playbook.md を参照してください。
  • プロフィールがある -> ユーザーの位置情報に関する希望があれば記録します。references/nimble-playbook.md のスマートな日付範囲設定を使ってモードを決めます。
    • フルモード: 初回実行、または前回の実行から 14 日を超えている場合
    • クイック更新: 前回の実行から 14 日未満の場合(ソーシャル情報の補足は省略し、新しいスポットのみレビューを確認します)
    • 同日再実行: last_runs.local-places が今日の日付の場合、~/.nimble/memory/reports/local-places-*[today].md にレポートがすでにあるか確認します。ある場合は「今日、このエリアはすでに実行済みです。最新データを取得するために再実行しますか?」と尋ねます。黙って再実行しないでください。
    • ステップ 1 に進みます。
  • プロフィールがない -> 問題ありません。ローカルスポットの検索にオンボーディングは必要ありません。ステップ 1 に進みます。
ステップ 1:リクエストの解析と最初の質問

$ARGUMENTS から場所の種類と地域を解析します。次の情報を抽出してください。

項目必須情報源
場所の種類はいユーザー入力(「コーヒーショップ」「ジム」「レストラン」など)
地域はいユーザー入力(「ウィリアムズバーグ」「オースティン中心街」「パークスロープ」など)
条件任意ユーザー入力(「レビューの評価が高い」「夜遅くまで営業」「安い」など)
出力形式の希望任意ユーザー入力(「地図」「一覧」「ガイド」など)

$ARGUMENTS から場所の種類と地域の両方が明確に分かる場合は、簡潔に確認してから進めます。「ウィリアムズバーグ(ブルックリン)のコーヒーショップを検索します……」

一部が不明確、または曖昧な場合は、次のように通常のテキストでまとめて質問します。

「どのような場所を、どの地域でお探しですか?(例:「ウィリアムズバーグのコーヒーショップ」や「オースティン中心街近くのジム」)」

ユーザーが場所の種類と地域の両方を指定していても、検索範囲をさらに絞りたい場合は、AskUserQuestion を使用します(最大 2 回の質問のうち 1 回としてカウントされます)。

検索の詳しさを選んでください。

  • クイックスキャン -- Google Maps と Yelp の上位結果(約 20 件)
  • 詳細検索 -- 全件の検索 + ソーシャル情報の補足 + レビュー(約 50 件以上)
  • 地図付き詳細調査 -- 上記すべて + インタラクティブな近隣マップ
ステップ 2:地域の特定

無駄な検索を避けるため、API を呼び出す前に地域を特定します。

特定が必要になる例:

  • 地域名が複数の都市や州に存在する場合(例:「ウィリアムズバーグ」=ニューヨーク州ブルックリン、またはバージニア州ウィリアムズバーグ)
  • 地域が広範囲を指す場合(例:「オースティン中心街」=複数の近隣地域)
  • 地域名が通称の場合(例:「ソーホー」=ニューヨーク市、またはロンドン)

曖昧な場合は、ユーザーに尋ねます(最大 2 回の質問のうち 1 回としてカウントされます)。

「ウィリアムズバーグという名前の場所がいくつかあります。どちらですか?」

  • ニューヨーク州ブルックリンのウィリアムズバーグ
  • バージニア州ウィリアムズバーグ
  • その他 -- 場所を指定します

曖昧でない場合は、市と州/国を含む正式な地域名を推定し、次のようにその場で確認します。 「ニューヨーク州ブルックリンのウィリアムズバーグを検索します……」

特定後、チェックポイントとファイルパスに使う slug を導き出します。小文字でハイフン区切りとし、市と州/国を含めてください(例:williamsburg-brooklyn-ny)。

Step 3: 既存のチェックポイントを確認する

references/memory-and-distribution.md のチェックポイントと再開のパターンに従います。

確認:cat ~/.nimble/memory/local-places/checkpoints/{slug}/discovery.json 2>/dev/null

  • チェックポイントが見つかった場合 -> 次のように提示します:「前回の実行が見つかりました({date} に {N} 件の場所)。
    再開して不足分を補いますか?それとも新規に開始しますか?」
  • チェックポイントがない場合 -> Step 4 に進みます
Step 4: WSA の検出

実行前に、すべてのフェーズで利用可能な WSA を検出します。次の検索を 同時に実行します:

nimble extract:templates list --limit 100  # then filter items for "maps"
nimble extract:templates list --limit 100  # then filter items for "reviews"
nimble extract:templates list --limit 100  # then filter items for "social"
nimble extract:templates list --limit 100  # then filter items for "{place-type}"

統合した結果から:

  1. entity_type でフィルタリングします:検出には SERP、エンリッチメント/詳細には PDP/Profile
  2. managed_by: "community" より managed_by: "nimble" を優先します
  3. フェーズに分類します。分類方法については references/wsa-pipeline.md を参照してください
  4. 各 WSA について nimble extract:templates get --extract-template-name {name} を実行し、パラメーターを確認します
  5. 検出したすべての WSA 名と検証済みパラメーターを、この実行の残りの処理用にキャッシュします

フェーズに対応する WSA が見つからない場合、そのフェーズでは nimble search を 使用します。WSA が利用できたフェーズと、フォールバックを使用するフェーズを記録します。

Step 5: 主検索(フェーズ 1)

カテゴリの判定ロジックについては references/wsa-pipeline.md を参照してください。

検出した地図/位置情報 WSA を同時に実行し、Step 4 で検証したパラメーターを 使用します:

nimble extract:templates run --template {discovered_maps_wsa} --params '{...validated params...}'
nimble extract:templates run --template {discovered_review_site_wsa} --params '{...validated params...}'

三次検索(条件付き): 主検索と二次検索を合わせたユニークな結果が 10 件未満の場合、またはユーザーが 信頼性/信用情報を求めた場合に限り、検出した信頼性 WSA を実行します。

WSA が失敗するか結果が空の場合は、次にフォールバックします: nimble search --query "[place-type] in [location]" --max-results 20 --search-depth lite

検出後:

  1. すべての結果を統一されたエンティティリストに解析します
  2. references/nimble-playbook.md のエンティティ重複排除パターンに従って重複を除去します:place_id の完全一致 -> ドメインの正規化 -> 名前と市区町村によるあいまい一致
  3. チェックポイントを保存します: ~/.nimble/memory/local-places/checkpoints/{slug}/discovery.json
Step 6: ソーシャル情報のエンリッチメント(フェーズ 2)

検出した場所のうち、Facebook ページまたは Instagram ハンドルがあるものについて、Step 4 で 検出したソーシャル WSA を実行します。Bash 呼び出しは同時に最大 4 件 までにします。

nimble extract:templates run --template {discovered_social_wsa} --params '{...validated params...}'

一致するハンドルがある場所ごとに、検出した各ソーシャル WSA を実行します。WSA が検出されなかった ソーシャルプラットフォームはスキップします。Step 4 でソーシャル WSA が見つからなかった場合は、 このフェーズ全体をスキップします。

チェックポイントを保存します:~/.nimble/memory/local-places/checkpoints/{slug}/social.json

Step 7: レビュー(フェーズ 3)

ソース数とデータの完全性に基づいて上位の場所を選び、Step 4 で 検出したレビュー WSA を実行します:

nimble extract:templates run --template {discovered_reviews_wsa} --params '{...validated params...}'

同時呼び出しは最大 4 件までにします。フェーズ 1 の検出で place_id またはそれに相当する識別子を 持つ場所を優先します。Step 4 でレビュー WSA が見つからなかった場合は、次に フォールバックします:nimble search --query "[place-name] reviews" --max-results 5 --search-depth lite

チェックポイントを保存します: ~/.nimble/memory/local-places/checkpoints/{slug}/reviews.json

Step 8: 飲食店向け追加情報(フェーズ 4)

場所の種類のカテゴリが飲食関連のキーワードに一致した場合、自動的に開始します。 カテゴリの判定ロジックについては references/wsa-pipeline.md を参照してください。

開始条件に一致した場合、Step 4 で検出したデリバリー/飲食店 WSA を実行します。まず検出を行い、 次に詳細を取得します:

nimble extract:templates run --template {discovered_delivery_serp_wsa} --params '{...validated params...}'

デリバリープラットフォームで見つかった場所については、検出した詳細 WSA を使用して完全な詳細を取得します:

nimble extract:templates run --template {discovered_delivery_detail_wsa} --params '{...validated params...}'

Step 4 でデリバリー WSA が見つからなかった場合は、次にフォールバックします: nimble search --query "[place-name] [location] delivery" --max-results 3 --search-depth lite

飲食カテゴリの場合のみ実行します。カテゴリが一致しない場合はスキップします。

ステップ 9:重複排除と信頼度スコアリング

重複排除: references/nimble-playbook.md のエンティティ重複排除パターンに従って、すべてのフェーズを対象に最後の重複排除を実行します。複数の情報源から得たフィールドを統合し、場所ごとに情報を充実させた単一のレコードにまとめます。

信頼度スコアリング: references/nimble-playbook.md のエンティティ信頼度スコアリングパターンに従います。このスキル固有の対象フィールド(N=8)は次のとおりです。

フィールド説明
nameビジネス名
address完全な住所
phone電話番号
websiteウェブサイトの URL
rating平均評価
review_countレビュー数
social1 件以上のソーシャルプロフィール
hours営業時間

スコアリング基準:

  • 高(8/8 フィールド + 2 件以上の情報源 + 10 件以上のレビュー) -> *** High と表示
  • 中(5~7/8 フィールド、または一部のデータを含む 2 件以上の情報源) -> ** Medium
  • 低(4/8 フィールド以下、情報源が 1 件のみ、レビューが少ない、またはレビューなし) -> * Low
ステップ 10:出力

信頼度の高い順(高を先頭)、次に各ランク内で評価の高い順に並べた番号付きの表で結果を提示します。

# Local Places: [Place Type] in [Location]
*Found [N] places | [Date] | Confidence: [H] High, [M] Medium, [L] Low*

## Results

| # | Name | Rating | Reviews | Confidence | Address | Sources |
|---|------|--------|---------|------------|---------|---------|
| 1 | Place A | 4.8 (312) | *** High | 123 Main St | [Maps][Yelp] |
| 2 | Place B | 4.6 (89)  | ** Medium | 456 Oak Ave | [Maps] |
...

## Top Picks (High Confidence)

### 1. Place A
- **Address:** 123 Main St, Williamsburg, Brooklyn, NY
- **Phone:** (555) 123-4567 | **Website:** [placea.com](https://placea.com)
- **Rating:** 4.8/5 (312 reviews on Google Maps, 289 on Yelp)
- **Social:** Instagram @placea (2.1K followers) | Facebook (1.8K likes)
- **Hours:** Mon-Fri 7am-7pm, Sat-Sun 8am-6pm
- **Delivery:** Available on DoorDash, Uber Eats
- **Why it stands out:** [1-2 sentences from review highlights]
- **Sources:** [Google Maps](link) | [Yelp](link) | [Facebook](link)

[Repeat for each High confidence place]

## Other Results (Medium + Low Confidence)
[Briefer format -- name, rating, address, missing data noted]

## What's Missing
[Note any data gaps: "3 places had no website or social presence",
 "Reviews unavailable for BBB-only listings"]

情報源へのリンクは必須です。 すべての場所に、クリック可能な情報源 URL(Google マップのリンク、Yelp の掲載ページ、ウェブサイト、またはソーシャルプロフィール)を少なくとも 1 つ付けてください。情報源へのリンクがない場所は「不足している情報」に記載しますが、WSA の結果から十分なデータが得られている場合は含めてください。

詳細表示: 結果を提示した後、ユーザーに次のように伝えます。

「詳しく知りたい場所はありますか?「#3について詳しく教えて」と言うか、「インタラクティブマップを表示して」とお尋ねください。」

ステップ 11:インタラクティブマップ(リクエスト時、または「Deep dive」モード)

Leaflet.js + OpenStreetMap タイルを使用して HTML ファイルを生成します。マップ生成パターンと配色の詳細は references/wsa-pipeline.md を参照してください。

保存先:~/.nimble/memory/local-places/{slug}-map-{date}.html

ブラウザーで開く:open ~/.nimble/memory/local-places/{slug}-map-{date}.html

ステップ 1 でユーザーが「Deep dive with map」を選択した場合に限り、自動的に生成します。マップ生成の詳細は references/wsa-pipeline.md を参照してください。 それ以外の場合は、フォローアップの操作として提案します。

ステップ 12:メモリに保存

すべての Write 呼び出しを同時に実行します。

  • レポート -> ~/.nimble/memory/reports/local-places-{slug}-{date}.md
  • 場所ごとのデータ -> ~/.nimble/memory/local-places/{slug}/places.json (情報を充実させたすべてのレコードを含む構造化 JSON)
  • プロフィール -> ~/.nimble/business-profile.json の last_runs.local-places を更新 (プロフィールが存在する場合のみ)
  • references/memory-and-distribution.md の Wiki 更新パターンに従います。影響を受けるすべてのエンティティファイルについて index.md の行を更新し、この実行に関するエントリーを log.md に追加します。
  • チェックポイントを削除(実行完了)するか、保持(部分実行)します。
ステップ 13:共有と配布

必ず配布を提案してください。このステップを省略しないでください。 コネクターの検出、共有フロー、情報源リンクの必須化については、references/memory-and-distribution.md に従ってください。

Notion:すべての結果を記載した、日付入りのサブページ。 Slack:上位 5 か所のみを含む TL;DR。

ステップ 14:フォローアップ
  • 「#Nについて詳しく教えて」 -> その場所の詳細をすべて表示
  • 「マップを表示して」 -> インタラクティブマップを生成(ステップ 11)
  • 「フィルターを追加して」 -> 条件を追加して再検索
  • 「近隣エリアを検索して」 -> 隣接する地域まで範囲を拡大
  • 「CSVとしてエクスポートして」 -> places.json から CSV を生成
  • 「よさそうです」 -> 完了

関連スキルの提案:

次のステップ:

  • このリストにあるビジネスの 360 度プロフィールを作成するには、company-deep-dive を実行します
  • これらのビジネスのいずれかの担当者と会う場合は、meeting-prep を実行します
  • この地域のビジネスを比較するには、competitor-positioning を実行します

サブエージェント戦略

包括的な検索(50か所以上)では、nimble-researcher エージェント (agents/nimble-researcher.md)を使って情報の補強を並列化します。

references/nimble-playbook.md のサブエージェント起動ルール (bypassPermissions、バッチの最大数は4、Bash の明示的な指示、失敗時のフォールバック)に従ってください。 WSA 呼び出しを大規模に行う場合(11件以上のエンティティ)は、個別に呼び出す代わりに agent run-batch を使うようエージェントに指示してください。階層の選択については、 references/nimble-playbook.md の Scaled Execution パターンを参照してください。Step 4 で見つかった WSA 名を 各エージェントに渡し、同じキャッシュ済みの名前を使うようにしてください。

起動パターン: ソーシャル情報の補強では、10か所ごとに1つのエージェントを起動します。 各エージェントは担当バッチの Phase 2 WSA を実行し、構造化された結果を返します。

単一バッチの最適化: 10か所以下の場合は、エージェントを起動せず、メインコンテキストから直接情報を補強します。これによりオーバーヘッドを削減できます。

フォールバック: エージェントが失敗した場合は、その WSA 呼び出しをメインコンテキストから直接実行します。


エージェントチームモード(デュアルモード)

起動時に確認します:echo $CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS

チームモード(フラグが設定されている場合):並列フェーズにチームメイトを起動します。

  • 発見チームメイト:Phase 1 の全 WSA を実行し、重複を排除して統合リストを返します
  • 情報補強チームメイト:場所の各バッチに対して Phases 2-4 を実行します
  • リード(あなた):調整、スコア付け、出力の生成、マップの作成を行います

ソロモード(フラグが設定されていない場合):Steps 4-7 の標準的な順次フローを実行します。


エラー処理

標準的なエラー表(API キーの欠落、429、401、結果なし、抽出データのゴミ)については、references/nimble-playbook.md を参照してください。スキル固有のエラーは以下のとおりです。

  • WSA/Search 500: 同じパラメーターで1回再試行します。それでも失敗する場合は、その場所/クエリに対して nimble search にフォールバックします。失敗を記録しますが、その場所はスキップしません。
  • WSA/Search のタイムアウト: 1回再試行してから、その呼び出しをスキップして続行します。プレイブックのタイムアウトポリシーと一貫した動作です。
  • WSA が見つからない: フェーズで WSA が1つも見つからない場合は、そのフェーズの WSA 呼び出しをスキップし、nimble search にフォールバックします。WSA でカバーされなかったフェーズを記録します。
  • 場所が見つからない: 「[location] の検索結果が見つかりませんでした。もう少し詳しく指定していただけますか?市区町村と州を含めてみてください(例:'Williamsburg, Brooklyn, NY')。」
  • 場所の種類に該当する結果がない: 「[location] に [place type] は見つかりませんでした。より広いカテゴリや近隣エリアで試してみますか?」
  • 場所の種類が曖昧: 「[option A] と [option B] のどちらをお探しですか?」(例:「bar」はカクテルバー、スポーツバー、ワインバーの可能性があります)

コメント