--- name: find-nearby description: Find nearby places (restaurants, cafes, bars, pharmacies, etc.) using OpenStreetMap. Works with coordinates, addresses, cities, zip codes, or Telegram location pins. No API keys needed. version: 1.0.0 metadata: hermes: tags: [location, maps, nearby, places, restaurants, local] related_skills: [] --- # Find Nearby — Local Place Discovery Find restaurants, cafes, bars, pharmacies, and other places near any location. Uses OpenStreetMap (free, no API keys). Works with: - **Coordinates** from Telegram location pins (latitude/longitude in conversation) - **Addresses** ("near 123 Main St, Springfield") - **Cities** ("restaurants in downtown Austin") - **Zip codes** ("pharmacies near 90210") - **Landmarks** ("cafes near Times Square") ## Quick Reference ```bash # By coordinates (from Telegram location pin or user-provided) python3 SKILL_DIR/scripts/find_nearby.py --lat --lon --type restaurant --radius 1500 # By address, city, or landmark (auto-geocoded) python3 SKILL_DIR/scripts/find_nearby.py --near "Times Square, New York" --type cafe # Multiple place types python3 SKILL_DIR/scripts/find_nearby.py --near "downtown austin" --type restaurant --type bar --limit 10 # JSON output python3 SKILL_DIR/scripts/find_nearby.py --near "90210" --type pharmacy --json ``` ### Parameters | Flag | Description | Default | |------|-------------|---------| | `--lat`, `--lon` | Exact coordinates | — | | `--near` | Address, city, zip, or landmark (geocoded) | — | | `--type` | Place type (repeatable for multiple) | restaurant | | `--radius` | Search radius in meters | 1500 | | `--limit` | Max results | 15 | | `--json` | Machine-readable JSON output | off | ### Common Place Types `restaurant`, `cafe`, `bar`, `pub`, `fast_food`, `pharmacy`, `hospital`, `bank`, `atm`, `fuel`, `parking`, `supermarket`, `convenience`, `hotel` ## Workflow 1. **Get the location.** Look for coordinates (`latitude: ... / longitude: ...`) from a Telegram pin, or ask the user for an address/city/zip. 2. **Ask for preferences** (only if not already stated): place type, how far they're willing to go, any specifics (cuisine, "open now", etc.). 3. **Run the script** with appropriate flags. Use `--json` if you need to process results programmatically. 4. **Present results** with names, distances, and Google Maps links. If the user asked about hours or "open now," check the `hours` field in results — if missing or unclear, verify with `web_search`. 5. **For directions**, use the `directions_url` from results, or construct: `https://www.google.com/maps/dir/?api=1&origin=,&destination=,` ## Urgent product availability / fastest fulfillment Use this variant when the user needs a specific physical item quickly near a ZIP/city (for example, an instrument, appliance, medication, or replacement part) and asks for fastest shipping, pickup, or local availability. 1. **Search in parallel across fulfillment channels:** exact product name/model + ZIP/city, local store chains, specialty retailers, big-box retailers, Amazon/marketplaces, and local resale (Craigslist/Facebook Marketplace/eBay local pickup where appropriate). 2. **Verify each candidate from the source page when possible:** model match, condition (new/used/open box), price, ETA, pickup vs shipping, store/seller location, and phone/contact. Do not rely only on generic search-result snippets for final ranking if a product page is accessible. 3. **Rank by actual speed, not retailer brand:** same-day local pickup/resale first, then confirmed expedited/dated delivery, then “in stock / call to confirm” options, then slower default shipping. 4. **Call-out uncertainty clearly:** checkout ETAs can change by account, address, membership, and cutoff time. Mark entries as “confirmed on page,” “search result only,” or “call to confirm.” 5. **Give the user an action order, not just a list:** e.g. message local seller now, order the fastest guaranteed online option as backup, then call nearby stores for pickup/overnight. 6. **Include phone numbers for high-leverage local checks** (nearby specialty stores and chain locations) when discoverable, because urgent retail inventory is often best confirmed by phone. ## Tips - If results are sparse, widen the radius (1500 → 3000m) - For "open now" requests: check the `hours` field in results, cross-reference with `web_search` for accuracy since OSM hours aren't always complete - Zip codes alone can be ambiguous globally — prompt the user for country/state if results look wrong - The script uses OpenStreetMap data which is community-maintained; coverage varies by region