{"ok":true,"site":{"host":"understudy-wine.vercel.app","url":"https://understudy-wine.vercel.app/","type":"live","desc":"A triage workspace where you demonstrate a routine once and the agent turns it into a reusable WebMCP tool.","tools":[{"name":"start_recording","kind":"act","impl":"imperative","description":"Begin capturing the user's actions as a demonstration -- they are teaching you a routine. Call this when they say anything like \"let me teach you\", \"watch what I do\", or \"start recording\". The page does the capturing; you see nothing until you call get_recording afterwards. Call stop_recording when they say they are done. This is how new skills get created.","inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?live=1"]},{"name":"stop_recording","kind":"act","impl":"imperative","description":"Stop capturing and return the demonstration id and step count. Call this when the user says they are done teaching. Then call get_recording to see what they actually did.","inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?live=1"]},{"name":"get_recording","kind":"answer","impl":"imperative","description":"Read back what the user taught you: a plain-language list of what they did, plus, for each step, the exact fields you may turn into parameters. Each field is marked kind:\"content\" (a value the user typed or picked -- bind these) or kind:\"structural\" (the shape of the command -- leave these alone). Read the guidance field. Use this before calling save_skill. Defaults to the most recent recording.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"recordingId":{"type":"string","description":"Recording id. Omit for the most recent."}},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?live=1"]},{"name":"save_skill","kind":"act","impl":"imperative","description":"Turn a recording into a reusable, parameterised skill. You do NOT supply the steps -- they come from the recording exactly as the user performed them. You supply a name, a description, and which fields in which steps become parameters. Bind every kind:\"content\" field from get_recording unless the user said it should stay fixed -- missing one means the skill is stuck with a value the user only chose as an example. Each parameter needs: name, stepIndex, fieldPath (both from get_recording), type, and description. The skill is created unapproved; the user reviews the parameters in the Skills panel before it can run.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Skill name: lowercase letters, digits and underscores, e.g. triage_by_topic"},"description":{"type":"string","description":"What the skill does, written for whoever calls it later"},"recordingId":{"type":"string","description":"Recording id. Omit for the most recent."},"params":{"type":"array","description":"Fields to expose as parameters. Empty means the skill always does exactly what was demonstrated.","items":{"type":"object","properties":{"name":{"type":"string","description":"Parameter name"},"stepIndex":{"type":"number","description":"Which step, from get_recording"},"fieldPath":{"type":"string","description":"Which field in that step, from bindableFields"},"type":{"type":"string","enum":["string","number"],"description":"Parameter type"},"description":{"type":"string","description":"What this parameter means"}},"required":["name","stepIndex","fieldPath"]}}},"required":["name","description"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?live=1"]},{"name":"list_skills","kind":"answer","impl":"imperative","description":"List the skills this page has learned, with their parameters and whether the user has approved them. Approved skills can be run with run_skill, and are also registered as tools in their own right. Prefer run_skill: it was registered when the page loaded, so it is never missing from a stale tool snapshot.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?live=1"]},{"name":"run_skill","kind":"act","impl":"imperative","description":"Run a learned skill. Returns what actually happened at each step, including how many items were affected. Call it as many times as the task needs, with different arguments each time -- the user teaches a routine once on one example, and it is your job to supply the remaining cases from what you know. If asked to apply a skill to a category (\"every major browser\", \"the other big tech companies\"), enumerate the members yourself and run the skill once per member. If a step matches nothing it fails with the reason and tells you which earlier steps already applied -- read that and adjust rather than retrying blindly.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Skill name, from list_skills"},"args":{"type":"object","description":"Arguments matching the skill's inputSchema","additionalProperties":true}},"required":["name"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?live=1"]}],"category":"AI & Agents","apiSurface":"spec","toolCount":6}}