en un clic
browser-control
// Inspect, navigate, and interact with open browser surfaces through space.browser
// Inspect, navigate, and interact with open browser surfaces through space.browser
| name | Browser Control |
| description | Inspect, navigate, and interact with open browser surfaces through space.browser |
| metadata | {"placement":"system","when":{"tags":["onscreen"]},"loaded":{"tags":["onscreen","browser:open"]}} |
Use this skill once at least one browser surface is open. browser-manager handles stand-alone window open or close work.
transient
currently open web browsers lists browser id|url|titlelast interacted web browser may include fresh page content↓ with typed ref markers such as [link 12], [button 18], [image 24], or [input text 30]workflow
1space.browser helpers already settle navigation state internally; do not call a separate sync stepstate(...), content(...), detail(...), and dom(...) settle internally and return fresh read results without a separate sync step, and evaluate(...) still resolves a ready guest without requiring a separate sync step firstclick, type, submit, typeSubmit, and scroll return { action, state }; inspect result.action.status before retryingopen(...) and typed navigate(...) treat bare hosts like novinky.cz or localhost:3000 as browser-address input instead of app-relative paths<x-browser src="google.com"></x-browser> surfaces appear in the same browser list as stand-alone windowscontent(...), detail(...), dom(...), and state(...) also settle internally and mark that browser as the current prompt-time page-content sourcelast interacted web browser transient block after open, navigate, history, reload, and ref-targeted actions before asking for another explicit content(...) capturecontent(...) to get readable page content with stable typed refs for the latest capture; unlike dom(...), it should stay cleaned up for agent use and should not include raw helper wrapper markup from nested frames or shadow rootsdom(...) and content(...) accept either { selector: "..." } or { selectors: ["...", "..."] } when you want a scoped read instead of the whole pagecontent(...) is lean by default to save tokens: it uses typed ref boxes like [link 12] Story, [disabled muted button 18] Continue, [checked checkbox 7] Email updates, or [input text 30] Search placeholder=Hledat value=Ethereum, omits link destinations, omits quotes around labels, and omits list bullets while keeping list indentation@click, x-on:click, v-on:click, or onclickdetail(id, ref) when actionability is unclearcontent(id, { includeStateTags: false, includeSemanticTags: false }) suppresses those extra bracket tagsdetail(id, ref) works for image targets toodetail(id, ref) on that reference instead of asking content(...) to print every -> urldetail(...) for deeper DOM on one ref before acting, and use it to inspect a link's real href, an image source, another referenced DOM target, or richer state metadata when the destination or actionability mattersclick, type, submit, typeSubmit, and scroll only with refs from the latest content(...) capturetypeSubmit(...) types into the field and then presses Enter in that same fieldcontent(...) call or navigation replaces the old ref idsevaluate(id, script) or send(id, "evaluate", { script }) only as a last resort when refs or navigation helpers cannot express the step, and remember that the last evaluated expression or resolved promise value becomes the resultresult.action.status.noObservedEffect === true, stop retrying the same action and re-read the page or inspect the relevant control with detail(...)validationTextAdded, nearbyTextChanged, descriptorChanged, valueChanged, checkedChanged, selectedChanged, and semanticHints as evidence about what the page did after your action1, not browser-1main helpers
runtime notes
examples Checking browser 1 now _____javascript return await space.browser.state(1)
Reading refs from browser 1 now _____javascript return await space.browser.content(1, { selectors: ["main", "article"] })
Reading one scoped region now _____javascript return await space.browser.dom(1, { selector: "[role='tab'], .nav-link, .tab, button" })
Inspecting one link target now _____javascript return await space.browser.detail(1, 79)
Opting into fuller link-heavy output now _____javascript return await space.browser.content(1, { includeLinkUrls: true, includeLabelQuotes: true, includeListMarkers: true })
Opening the first referenced result now _____javascript const content = await space.browser.content(1) console.log(content.document) return await space.browser.click(1, 79)
Typing into the active search box now _____javascript const content = await space.browser.content(1) console.log(content.document) return await space.browser.typeSubmit(1, 79, "Space Agent")
Running a last-resort page script now
_____javascript
return await space.browser.evaluate(1, const target = [...document.querySelectorAll("*")] .find((element) => element.textContent.trim() === "Update") if (!target) { "no update tab found" } else { target.click() "clicked: " + target.tagName })
Use the frontend API surface correctly for app files, discovery, identity, and permission-aware browser data access.
Frontend development router. Load deeper skills before editing
Open or close stand-alone browser windows
Editable frontend runtime rules for framework pages, stores, shared runtime namespaces, and reusable visual patterns.
Create, patch, inspect, and remove widgets in the current space
Open, create, remove, or edit spaces