{"ok":true,"site":{"host":"localbuzz.modeless.io","url":"https://localbuzz.modeless.io/","type":"live","desc":"Local Buzz — shape and repair a live Stockholm evening with your personal agent.","tools":[{"name":"propose_event_from_url","kind":"act","impl":"imperative","description":"Submit structured facts already read by the browser agent from a public HTTPS event or venue page. Local Buzz validates and creates a discovery lead immediately; it never fetches the URL, publishes canonically, or changes a night automatically.","title":"Propose a public event for human review","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cityId":{"type":"string","enum":["stockholm","san-francisco"]},"sourceUrl":{"type":"string","format":"uri","maxLength":2048},"sourceType":{"type":"string","enum":["official_page","venue_calendar","ticket_page","editorial_page","other_public_page"]},"evidence":{"type":"array","minItems":1,"maxItems":30,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":80},"sourceUrl":{"type":"string","format":"uri","maxLength":2048},"note":{"type":"string","maxLength":500}},"required":["field","sourceUrl"],"additionalProperties":false}},"fields":{"type":"object","properties":{"title":{"type":"string","maxLength":300},"description":{"type":"string","maxLength":5000},"category":{"type":"string","enum":["live_music","club","comedy","food_drink","culture","film","talk","market","activity","other"]},"venue":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"address":{"type":"string","maxLength":500},"neighborhood":{"type":"string","maxLength":200},"lat":{"type":"number"},"lng":{"type":"number"}},"additionalProperties":false},"timing":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}},"additionalProperties":false},"commerce":{"type":"object","properties":{"priceMin":{"type":"number","minimum":0},"priceMax":{"type":"number","minimum":0},"currency":{"type":"string","enum":["SEK","USD"]},"bookingUrl":{"type":"string","format":"uri"}},"additionalProperties":false},"availability":{"type":"string","enum":["unknown","available","limited","sold_out","cancelled","walk_in"]},"performer":{"type":"string","maxLength":300},"organizer":{"type":"string","maxLength":300}},"additionalProperties":false}},"required":["cityId","sourceUrl","sourceType","fields","evidence"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_place_from_url","kind":"act","impl":"imperative","description":"Submit structured restaurant, bar, club or cafe facts already read from a public HTTPS page. Local Buzz creates a provisional discovery lead with missing-field and duplicate warnings; it does not fetch the URL, publish the Place, or change a night.","title":"Propose a public place for human review","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cityId":{"type":"string","enum":["stockholm","san-francisco"]},"sourceUrl":{"type":"string","format":"uri","maxLength":2048},"sourceType":{"type":"string","enum":["official_page","venue_calendar","ticket_page","editorial_page","other_public_page"]},"evidence":{"type":"array","minItems":1,"maxItems":30,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":80},"sourceUrl":{"type":"string","format":"uri","maxLength":2048},"note":{"type":"string","maxLength":500}},"required":["field","sourceUrl"],"additionalProperties":false}},"fields":{"type":"object","properties":{"name":{"type":"string","maxLength":300},"officialWebsite":{"type":"string","format":"uri"},"reservationUrl":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["restaurant","bar","pub","cocktail_lounge","wine_bar","music_bar","club","cafe"]},"location":{"type":"object","properties":{"address":{"type":"string","maxLength":500},"neighborhood":{"type":"string","maxLength":200},"lat":{"type":"number"},"lng":{"type":"number"}},"additionalProperties":false},"cuisine":{"type":"array","items":{"type":"string"},"maxItems":20},"drinkFocus":{"type":"array","items":{"type":"string"},"maxItems":20},"moodTags":{"type":"array","items":{"type":"string"},"maxItems":20},"bestFor":{"type":"array","items":{"type":"string","enum":["dinner","quick_bite","drinks","late_drinks"]}},"typicalVisitDurationMinutes":{"type":"integer","minimum":15,"maximum":480},"priceRange":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0},"currency":{"type":"string","enum":["SEK","USD"]},"basis":{"type":"string","const":"per_person"},"band":{"type":"string","enum":["budget","moderate","premium","unknown"]},"evidence":{"type":"string","enum":["official_menu","provider_estimate","unknown"]},"evidenceUrl":{"type":"string","format":"uri"}},"required":["currency","basis","band","evidence"],"additionalProperties":false},"weeklyHours":{"type":"object","properties":{"monday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}},"tuesday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}},"wednesday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}},"thursday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}},"friday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}},"saturday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}},"sunday":{"type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesAt":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"closesNextDay":{"type":"boolean"}},"required":["opensAt","closesAt"],"additionalProperties":false}}},"additionalProperties":false},"openingHoursEvidence":{"type":"object","properties":{"status":{"type":"string","enum":["verified","unknown"]},"sourceUrl":{"type":"string","format":"uri"},"checkedAt":{"type":"string","format":"date-time"}},"required":["status","checkedAt"],"additionalProperties":false},"exceptionalHours":{"type":"object","properties":{"status":{"type":"string","enum":["none_known","confirmed","unknown"]},"note":{"type":"string","maxLength":500}},"required":["status"],"additionalProperties":false},"reservationMode":{"type":"string","enum":["required","recommended","available","walk_in","unknown"]}},"additionalProperties":false}},"required":["cityId","sourceUrl","sourceType","fields","evidence"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_happenings","kind":"answer","impl":"imperative","description":"Search Local Buzz's structured inventory for the city currently selected by the human, using time, budget, category, text, and distance constraints. Use this before showing candidates or building the itinerary. Search results are not added automatically.","title":"Search happenings in the active city","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Mood, category, venue, or free-text intent."},"startAfter":{"type":"string","format":"date-time"},"endBefore":{"type":"string","format":"date-time"},"maxPrice":{"type":"number","minimum":0,"description":"Maximum price per person in the active city's currency."},"categories":{"type":"array","items":{"type":"string","enum":["live_music","club","comedy","food_drink","culture","film","talk","market","activity","other"]}},"happeningKinds":{"type":"array","items":{"type":"string","enum":["scheduled_event","live_signal","venue_activity","pop_up","city_condition","community_report"]},"description":"Optional canonical or social-pulse kinds."},"minBuzzScore":{"type":"number","minimum":0,"maximum":100,"description":"Minimum deterministic Buzz Score. Events without social support score zero."},"actionableNow":{"type":"boolean","description":"When true, return only records backed by current actionable social evidence."},"near":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"additionalProperties":false},"maxDistanceKm":{"type":"number","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":20}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"show_candidates","kind":"act","impl":"imperative","description":"Make specific happening IDs visibly prominent on the shared map and card grid. Use after search_happenings so the human can visually inspect and reject options.","title":"Show candidates on Local Buzz","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"happeningIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20},"reason":{"type":"string","description":"Short explanation visible above the candidates."}},"required":["happeningIds"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_places","kind":"answer","impl":"imperative","description":"Search the canonical Local Buzz place catalog by text, kind, purpose, price, open time and distance. Results retain source evidence and checked dates.","title":"Search places in the active city","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"query":{"type":"string"},"kinds":{"type":"array","items":{"type":"string","enum":["restaurant","bar","pub","cocktail_lounge","wine_bar","music_bar","club","cafe"]}},"purposes":{"type":"array","items":{"type":"string","enum":["dinner","quick_bite","drinks","late_drinks"]}},"moods":{"type":"array","items":{"type":"string"}},"neighborhoods":{"type":"array","items":{"type":"string"}},"openAt":{"type":"string","format":"date-time"},"maxPrice":{"type":"number","minimum":0},"near":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"additionalProperties":false},"maxDistanceKm":{"type":"number","minimum":0},"maxResults":{"type":"integer","minimum":1,"maximum":20}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"show_place_candidates","kind":"act","impl":"imperative","description":"Make canonical place IDs visible on the same shared map and place-card surface used by the human.","title":"Show place candidates on Local Buzz","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"placeIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20},"reason":{"type":"string"}},"required":["placeIds"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"read_place_details","kind":"answer","impl":"imperative","description":"Read one Place record including typed hours, service cutoffs, price, evidence, provenance and checked dates before adding it.","title":"Read canonical place details","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"placeId":{"type":"string"}},"required":["placeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_place_stop","kind":"act","impl":"imperative","description":"Add a dinner, quick-bite or drinks stop to the active itinerary. The shared domain validates purpose, hours, duration, party-size cost, currency, overlap and latest end before updating the visible plan.","title":"Add a canonical place stop","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"placeId":{"type":"string"},"purpose":{"type":"string","enum":["dinner","quick_bite","drinks","late_drinks"]},"plannedStart":{"type":"string","format":"date-time"},"budget":{"type":["number","null"],"minimum":0,"description":"Optional total party budget. Omit or use null when the user has not set a spending cap."},"reason":{"type":"string"}},"required":["placeId","purpose","plannedStart"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_custom_place_stop","kind":"act","impl":"imperative","description":"Add a custom place to the active itinerary using explicit location, duration, per-person price, currency and stated availability. Local Buzz validates the assumptions but does not add the place to the canonical catalog.","title":"Add a custom place stop","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string"},"purpose":{"type":"string","enum":["dinner","quick_bite","drinks","late_drinks"]},"plannedStart":{"type":"string","format":"date-time"},"location":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"address":{"type":"string"},"neighborhood":{"type":"string"}},"required":["lat","lng","address","neighborhood"],"additionalProperties":false},"typicalVisitDurationMinutes":{"type":"integer","minimum":15},"pricePerPerson":{"type":"number","minimum":0},"currency":{"type":"string","enum":["SEK","USD"]},"availableFrom":{"type":"string","format":"date-time"},"availableUntil":{"type":"string","format":"date-time"},"budget":{"type":["number","null"],"minimum":0,"description":"Optional total party budget. Omit or use null when the user has not set a spending cap."},"note":{"type":"string"},"reason":{"type":"string"}},"required":["name","purpose","plannedStart","location","typicalVisitDurationMinutes","pricePerPerson","currency","availableFrom","availableUntil"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_happening_stop","kind":"act","impl":"imperative","description":"Add one selected event to the active itinerary. The event must be available, within its occurrence window, non-overlapping and within any explicit budget and end-time constraints.","title":"Add an event stop","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"happeningId":{"type":"string"},"plannedStart":{"type":"string","format":"date-time"},"budget":{"type":["number","null"],"minimum":0,"description":"Optional total party budget. Omit or use null when the user has not set a spending cap."},"reason":{"type":"string"}},"required":["happeningId","plannedStart"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"build_evening_plan","kind":"act","impl":"imperative","description":"Build the active working itinerary from selected happening IDs and planned start times. The validated result immediately replaces the existing unlocked itinerary and remains directly editable through lock, unlock, add and remove actions.","title":"Build an evening plan","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"stops":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object","properties":{"happeningId":{"type":"string"},"plannedStart":{"type":"string","format":"date-time"}},"required":["happeningId","plannedStart"],"additionalProperties":false}},"budget":{"type":["number","null"],"minimum":0,"description":"Optional total party budget. Omit or use null when the user has not set a spending cap."},"rationale":{"type":"string"}},"required":["stops"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"read_current_plan","kind":"answer","impl":"imperative","description":"Read the one active shared itinerary, human locks, constraints, disruptions, current catalog counts, and per-source freshness state. Always use this after the human changes the UI and before attempting a repair.","title":"Read the shared evening plan","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"lock_plan_stop","kind":"act","impl":"imperative","description":"Lock one existing plan stop as an explicit human constraint. A locked stop cannot be silently removed or replaced by repair_plan. The lock appears immediately in the shared timeline.","title":"Lock a plan stop","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"stopId":{"type":"string"}},"required":["stopId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unlock_plan_stop","kind":"act","impl":"imperative","description":"Unlock one active itinerary stop so it can be changed by a later agent repair or direct edit.","title":"Unlock a plan stop","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"stopId":{"type":"string"}},"required":["stopId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_plan_stop","kind":"act","impl":"imperative","description":"Remove one unlocked stop from the active itinerary and immediately recalculate its route, total and end time. Locked stops must be unlocked before an agent can remove them.","title":"Remove a plan stop","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"stopId":{"type":"string"}},"required":["stopId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"repair_plan","kind":"act","impl":"imperative","description":"Apply the smallest possible repair after a disruption. Read the current plan first. Preserve locked stops and unaffected stops; do not regenerate the full itinerary. A valid repair updates the visible itinerary immediately.","title":"Repair the current night","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"reason":{"type":"string"},"preserveLockedStops":{"type":"boolean","const":true},"replacementHappeningIds":{"type":"array","items":{"type":"string"},"description":"Ordered candidate IDs returned by search_happenings."}},"required":["reason"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Travel & Events","favicon":"/favicons/localbuzz.modeless.io.png","apiSurface":"spec","toolCount":16}}