-
Check for existing note. If + Atlas/Places/<name>.md already exists, stop and tell the user — offer to open it instead.
-
Scaffold from template. Copy + Extras/Templates/Place.md to + Atlas/Places/<name>.md. Set title: and created: to today, plus type: if provided.
-
Context seed (unless quick). Fan out across every google_* MCP in a single tool-use block — independent calendar searches, never serialized.
- For each
google_* MCP, google_calendar_list_events over the last 90 days. Post-filter to events whose location field contains the place name (substring match, case-insensitive).
- For each
google_* MCP, google_gmail_search_emails with the place name as a quoted query, capped at 5 hits. Used to surface mentions that imply an address from email signatures or invitations.
- From the matched events, extract:
- The full
location string from any matching event → populate address: (parse out the postal portion after the first comma with a state code, per the same heuristic /sync-places uses)
- All non-user attendees → candidate links for
## Related people
- Event creators/organizers' email domains → candidate links for
## Related organizations (cross-reference against + Atlas/Organizations/*.md by domain)
-
Web fallback for address: (only if step 3 left it blank). If the context seed produced no unambiguous calendar address (or quick mode was used and there's no other signal), do an internet lookup:
- Issue a
WebSearch for "<place name>" address plus any geographic disambiguator the user provided in $1 (e.g. "Acme Cafe" Newton MA address). If $1 already contains a city/state, include it; otherwise, derive a disambiguator from the most-frequently-occurring metro in the user's calendar history (the user's home region by default — read + Atlas/Places/*.md for any type: home notes and use that city/state).
- Pick the top result that's clearly the official business listing (Google Maps, Yelp, the business's own site). If the top results disagree on address or there are multiple matching locations, stop and leave
address: blank — flag the candidates inline in ## Notes for the user to disambiguate. Chain businesses without a city hint must not auto-populate.
- If one result is unambiguous, populate
address: from it and append <!-- address sourced from web lookup, verify --> inline so the user knows to confirm. Cite the source URL in ## Notes: _Address from web lookup: <URL>._
- Cap at one
WebSearch + at most two WebFetch calls — don't crawl. If still uncertain, leave blank.
-
Type inference (if not provided in $2, best-effort from the place name):
- Contains
Church, Chapel, Cathedral → church
- Contains
Restaurant, Cafe, Café, Coffee, Kitchen, Bistro, Bar, Grill, Diner → restaurant
- Contains
Workbar, WeWork, Coworking, Office, HQ, Studio → office
- Contains
Stadium, Arena, Theater, Center, Hall, Park, Gym, Dance Center, Gymnastics → venue
- Contains
Elementary, Middle School, High School, Academy, University, College → other
- Otherwise →
other (leave as default; user can override)
-
Link people and orgs. Use the candidate lists from step 3:
- For each non-user attendee, match against
+ Atlas/People/*.md emails: array. If matched, add - [[Person Name]] (attended <N> events here) under ## Related people. Do not stage new person candidates from this skill — that's /sync-people's job.
- For each organizer domain, match against
+ Atlas/Organizations/*.md (by url: or domain inferred from title). If matched, add - [[Org Name]] under ## Related organizations. If no match, just note the domain inline so the user can decide whether to run /sync-organizations or /log-organization.
-
Facet cross-link suggestion. If the place name matches an existing Org by title (per the "Places and Orgs are facets" convention — a single real-world entity can be both a Place and an Org), add a Notes line:
_This place is the physical facet of [[<Org>]]. Open [[<Org>]] and add [[<this Place>]] to its ## Places section to complete the bi-directional link._
-
Report. Show the populated frontmatter and the inferred context; ask the user to confirm or correct before saving.