{"ok":true,"site":{"host":"webhud.shekkawai.workers.dev","url":"https://webhud.shekkawai.workers.dev/","type":"live","desc":"Smart glasses without the vendor OS — a web page, your agent, any glass. A WebMCP-driven HUD your agent renders and you drive by voice, palm swipe, or ring.","tools":[{"name":"surface_present","kind":"act","impl":"imperative","description":"Present structured data on this WebHUD smart-responsive surface. Choose only the user's purpose; the page chooses the UI for the current context. Purposes: glance = key facts in seconds (next event); browse = explore a collection (files or news); inspect = examine one item deeply (read an email); compare = weigh multiple items by shared facts (venues by price); choose = pick one option to act on (invitation design); triage = prioritize, keep, dismiss, or organize many items (inbox review). dataKind, interaction, and layout hints are optional. Hints are advisory and may be overridden for readability. Current context: desktop. The page can use wider tables, lists, grids, and card decks.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Stable surface id. Reusing it updates the same surface. Default: presentation."},"title":{"type":"string","description":"Short label for the surface and dock."},"purpose":{"type":"string","enum":["glance","browse","inspect","compare","choose","triage"],"description":"What the user needs to do: glance = key facts in seconds; browse = explore a collection; inspect = one item in depth; compare = weigh items by shared facts; choose = pick one option; triage = prioritize, keep, dismiss, or organize many items."},"dataKind":{"type":"string","enum":["collection","document","schedule","timeline","metrics","media","people","hierarchy","location","entity"],"description":"Optional semantic hint about the data. Omit when uncertain; the page can infer from the items."},"interaction":{"type":"string","enum":["view","navigate","single-select","multi-select","edit","confirm"],"description":"Optional interaction hint. The page applies a safe purpose default when omitted."},"hint":{"type":"object","description":"Optional presentation preference. The page may override it for the current device or lens.","properties":{"layout":{"type":"string","enum":["cards","grid","list","table"]}}},"items":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","properties":{"id":{"type":"string","description":"Stable id used to select or open this item in later tool calls."},"title":{"type":"string"},"subtitle":{"type":"string"},"summary":{"type":"string","description":"Short explanation for a card, list row, or glance view."},"badge":{"type":"string","description":"Short pill highlight on the card, e.g. 'Best fit', 'New', 'Urgent'. Keep it under ~15 characters."},"content":{"type":"string","description":"Full text used when the purpose is inspect or the item is opened."},"imageUrl":{"type":"string","description":"Optional HTTPS or data:image URL."},"lat":{"type":"number","description":"WGS84 latitude. When items carry lat+lng, the page renders them as numbered pins on a live map (location shape) — no separate map tool needed."},"lng":{"type":"number","description":"WGS84 longitude — see lat."},"facts":{"type":"array","maxItems":8,"description":"Comparable attributes in display order, e.g. Price, Capacity, Distance. For compare, use identical labels on every item so values align as table columns; the first 6 distinct labels become columns.","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":["string","number","boolean"]}},"required":["label","value"]}}},"required":["title"]}}},"required":["title","purpose","items"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_show_calendar","kind":"act","impl":"imperative","description":"Render the user's calendar on the surface. Fetch the events yourself (e.g. from the Google Calendar connector), then pass them with a view ('week' or 'month') and an ISO anchor date inside the period to show.","inputSchema":{"type":"object","properties":{"view":{"type":"string","enum":["week","month"]},"anchor":{"type":"string","description":"ISO date, e.g. 2026-09-14"},"events":{"type":"array","maxItems":500,"items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date"},"time":{"type":"string","description":"e.g. 15:00"},"title":{"type":"string"}},"required":["date","title"]}}},"required":["view","events"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_show_emails","kind":"act","impl":"imperative","description":"Render emails as swipeable cards. Fetch them yourself (e.g. from the Gmail connector). Include `body` (full text) when you have it, so the user can open a single email full-screen without another fetch.","inputSchema":{"type":"object","properties":{"emails":{"type":"array","maxItems":50,"items":{"type":"object","properties":{"id":{"type":"string"},"from":{"type":"string"},"subject":{"type":"string"},"preview":{"type":"string"},"time":{"type":"string","description":"e.g. 09:41"},"body":{"type":"string","description":"full plain-text body, optional"}},"required":["from","subject"]}}},"required":["emails"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_show_files","kind":"act","impl":"imperative","description":"Render files and folders as swipeable cards (e.g. a Google Drive folder listing you fetched). Include `content` for text documents when you have it, so a doc can be opened full-screen.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"surface label, e.g. the folder name. Default 'Drive'"},"files":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","description":"folder | doc | sheet | slide | pdf | image | file"},"owner":{"type":"string"},"modified":{"type":"string","description":"e.g. 'Aug 27'"},"preview":{"type":"string","description":"short description or first lines"},"content":{"type":"string","description":"full text content, optional"},"imageUrl":{"type":"string","description":"optional HTTPS or data:image thumbnail"}},"required":["name"]}}},"required":["files"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_show_items","kind":"act","impl":"imperative","description":"Legacy universal renderer: display any collection as swipeable cards. Prefer surface_present when the user's purpose (compare, choose, triage, inspect, browse, or glance) is known, because it adapts the UI to desktop or glasses.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"surface id, e.g. 'news'. Default 'items'"},"title":{"type":"string","description":"dock label, e.g. 'AI News'"},"items":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"preview":{"type":"string"},"badge":{"type":"string","description":"short pill highlight on the card, e.g. 'New'"},"content":{"type":"string","description":"full text for the reader, optional"},"imageUrl":{"type":"string","description":"optional image (HTTPS URL or data: URL) shown on the card and in the reader"}},"required":["title"]}}},"required":["title","items"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_show_options","kind":"act","impl":"imperative","description":"Present 2–4 visual design options as rendered cards for the user to choose between. Supply structured copy and styling, plus optional generated or Drive artwork as an HTTPS or data:image URL. The page keeps the text separate from the artwork. The user can swipe, enlarge, and pick by number or name.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"dock label, e.g. 'Invitation designs'"},"options":{"type":"array","minItems":2,"maxItems":4,"items":{"type":"object","properties":{"name":{"type":"string","description":"short option name, e.g. 'Aurora'"},"template":{"type":"string","enum":["aurora","mono","neon"],"description":"poster style: aurora = vivid gradient, mono = minimal light, neon = dark with glow"},"eventTitle":{"type":"string"},"dateLine":{"type":"string","description":"e.g. 'Fri 25 Sep · 7:00 PM'"},"venue":{"type":"string"},"tagline":{"type":"string"},"accent":{"type":"string","description":"CSS color for the accent, e.g. '#8b5cf6'"},"logoText":{"type":"string","description":"short logo mark, e.g. 'OMP'"},"imageUrl":{"type":"string","description":"optional poster background artwork: an HTTPS image URL (e.g. a Drive thumbnail) or a data: URL of an image you generated. Text renders on top and stays editable."}},"required":["name","template","eventTitle","dateLine"]}}},"required":["options"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_show_people","kind":"act","impl":"imperative","description":"Render people — invite recipients, contacts, a CRM segment — as a grid of name chips so the user can review a send list at a glance. Fetch them yourself (contacts connector, CRM, spreadsheet) and pass name plus optional detail.","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"dock label, e.g. 'Recipients'. Default 'People'"},"people":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"name":{"type":"string"},"detail":{"type":"string","description":"e.g. email or company"},"tag":{"type":"string","description":"short badge, e.g. 'VIP'"}},"required":["name"]}}},"required":["people"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_open_image","kind":"act","impl":"imperative","description":"Display an image full-screen on the surface. Accepts an HTTPS image URL (e.g. a Drive thumbnail or photo link) or a data: URL of an image you generated or were given. The image joins the 'Images' stack, so several opened images become swipeable.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS image URL or data:image/... URL"},"title":{"type":"string","description":"short caption, e.g. the filename. Give each image a DISTINCT caption — surface_get_view_state reports it back as the focused item's title, which is how you know which image the user swiped to."}},"required":["url"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_confirm_done","kind":"act","impl":"imperative","description":"Show a full-screen confirmation — a big check with a message — after you completed an action (event created, invitations sent, reply drafted). Use `detail` for the specifics. The user swipes to dismiss it.","inputSchema":{"type":"object","properties":{"message":{"type":"string","description":"e.g. 'Invitations sent'"},"detail":{"type":"string","description":"e.g. '12 people · Card One · via Gmail'"}},"required":["message"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_switch","kind":"act","impl":"imperative","description":"Bring an already-rendered surface to the front: 'calendar' or a stack id (e.g. 'mail', 'drive'). Call surface_get_view_state first to see what surfaces exist.","inputSchema":{"type":"object","properties":{"target":{"type":"string"}},"required":["target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_get_view_state","kind":"answer","impl":"imperative","description":"Read what the user is currently looking at: active view, which week/month the calendar sits on, which card is focused after the user's palm swipes, and what surfaces exist. Always call this to resolve references like 'this one', 'this week' or 'that email'.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"surface_speak","kind":"act","impl":"imperative","description":"Speak a short line out loud through the surface's own speaker.","inputSchema":{"type":"object","properties":{"text":{"type":"string","maxLength":500}},"required":["text"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"map_set_location","kind":"act","impl":"imperative","description":"Set the user's position — the map's blue you-are-here dot. The user TELLS you where they are (real or simulated, e.g. 'assume I'm at SF Caltrain'); the page never reads device GPS. Distances to map pins are computed from this point.","inputSchema":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"},"label":{"type":"string","description":"Short place name shown next to the dot, e.g. 'SF Caltrain'."}},"required":["lat","lng"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"AI & Agents","apiSurface":"spec","toolCount":13}}