Loading...
Loading...
Use when the task needs real browser automation, DOM exploration, browser session state, network capture, or browser-backed request replay with Opensteer. The default pattern is: explore with the CLI first, then write the final code with the SDK.
npx skill4agent add steerlabs/opensteer opensteerpersistopensteer skills installfetch()recorder--workspace <id>OPENSTEER_WORKSPACEpersistexecevaluatefetch()state()cookies()storage()Opensteeropensteer browser delete --workspace <id>What does the task need?
├─ Click, type, navigate, extract visible data → DOM path
├─ Find or replay a site API → Network path
├─ Analyze, deobfuscate, or sandbox page JavaScript → Scripts analysis
├─ Canvas, WebGL, or hard-to-target UI → Computer-use
├─ Work with multiple tabs or popups → Tab management
├─ Set up browser profile, clone, or attach → Browser sessions
├─ Run browser in the cloud → Cloud mode
├─ Watch what a headless browser is doing → Local view
└─ Unsure → start by capturing network trafficopensteer open https://example.com --workspace demo
opensteer snapshot action --workspace demo
opensteer input 5 "laptop" --workspace demo --press-enter --persist "search input"
opensteer click 7 --workspace demo --persist "search button"
opensteer snapshot extraction --workspace demo
opensteer extract '{"items":[{"name":{"element":13},"price":{"element":14}}]}' \
--workspace demo \
--persist "search results"c="N"import { Opensteer } from "opensteer";
const opensteer = new Opensteer({ workspace: "demo", rootDir: process.cwd() });
await opensteer.open("https://example.com");
await opensteer.input({ persist: "search input", text: "laptop", pressEnter: true });
await opensteer.click({ persist: "search button" });
const data = await opensteer.extract({ persist: "search results" });selectorpersistopensteer open https://example.com --workspace demo
opensteer goto https://example.com/search --workspace demo --capture-network page-load
opensteer input 5 "laptop" --workspace demo --press-enter --capture-network search
opensteer network query --workspace demo --capture search --json
opensteer network detail rec_123 --workspace demo --probenetwork detail --probeopensteer state example.com --workspace democonst cookies = await opensteer.cookies("example.com");
const localStorage = await opensteer.storage("example.com", "local");
const sessionStorage = await opensteer.storage("example.com", "session");
const state = await opensteer.state("example.com");execopensteer exec "
const response = await this.fetch('https://api.example.com/search', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ keyword: 'laptop', count: 24 }),
});
return { status: response.status, data: await response.json() };
" --workspace demoimport { Opensteer } from "opensteer";
const opensteer = new Opensteer({ workspace: "demo", rootDir: process.cwd() });
export async function search(keyword: string) {
const response = await opensteer.fetch("https://api.example.com/search", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ keyword, count: 24 }),
});
return response.json();
}fetch()transportopensteer scripts capture --workspace demo
opensteer scripts capture --workspace demo --url-filter "api" --external --dynamic--inline--external--dynamic--workers--persist--url-filter <pattern># Format minified code
opensteer scripts beautify <artifactId> --workspace demo --persist
# Deobfuscate packed/obfuscated code
opensteer scripts deobfuscate <artifactId> --workspace demo --persistopensteer scripts sandbox <artifactId> --workspace demo \
--fidelity standard \
--timeout 5000 \
--cookies '{"session":"abc123"}' \
--globals '{"window.API_KEY":"test"}' \
--ajax-routes '[{"url":"*/api/*","response":{"data":[]}}]'minimalstandardfullopensteer scripts capture --workspace demo --persist --external
opensteer artifact read art_abc123 --workspace demo # inspect raw
opensteer scripts beautify art_abc123 --workspace demo --persist
opensteer scripts deobfuscate art_def456 --workspace demo --persist
opensteer scripts sandbox art_ghi789 --workspace demoopensteer computer click 245 380 --workspace demo --capture-network action
opensteer computer type "search query" --workspace demo
opensteer computer key Enter --workspace demo
opensteer computer screenshot --workspace demoawait opensteer.computerExecute({
action: { type: "click", x: 245, y: 380 },
});opensteer tab list --workspace demo # List all open tabs
opensteer tab new https://example.com --workspace demo # Open new tab
opensteer tab 2 --workspace demo # Switch to tab 2
opensteer tab close 3 --workspace demo # Close tab 3
opensteer tab close --workspace demo # Close current tabconst tabs = await opensteer.listPages();
await opensteer.newPage("https://example.com");
await opensteer.activatePage(2);
await opensteer.closePage(3);| Mode | What it does | Data persists? |
|---|---|---|
| Persistent (default) | Browser tied to workspace, survives restarts | Yes — cookies, localStorage, logins, history, extensions all retained |
| Temporary | Headless browser in | No |
| Attach | Connects to an already-running browser via CDP | Depends on that browser |
--headless falseopensteer open https://example.com --workspace demo --headless falseopensteer viewopensteer open~/.opensteer/workspaces/<id>/browser/user-data/opensteer open --workspace demo# Discover available local browsers and profiles
opensteer browser discover
# Clone a profile into a workspace
opensteer browser clone --workspace demo \
--source-user-data-dir "$HOME/Library/Application Support/Google/Chrome" \
--source-profile-directory Defaultopensteer open https://example.com --workspace demo --attach-endpoint http://localhost:9222opensteer browser status --workspace demo # Check if browser is running
opensteer browser reset --workspace demo # Wipe browser data, keep workspace
opensteer browser delete --workspace demo # Delete workspace entirelyexport OPENSTEER_API_KEY=osk_your_key_here # Required
export OPENSTEER_PROVIDER=cloud # Or use --provider cloud per command--provider cloudopensteer open https://example.com --workspace demo --provider cloud
opensteer snapshot action --workspace demo
opensteer click 5 --workspace demo# Reads cookies from local Chrome, decrypts them, uploads to cloud
opensteer browser clone --workspace demo \
--source-user-data-dir "$HOME/Library/Application Support/Google/Chrome" \
--source-profile-directory Default \
--provider cloudopensteer view # Start viewer service, print URL
opensteer view stop # Stop the viewer service
opensteer view --auto # Auto-start viewer on every browser launch
opensteer view --no-auto # Only start viewer when manually requestedopensteer interaction capture --workspace demo --key "login-flow" --duration 30000
opensteer interaction get <traceId> --workspace demo
opensteer interaction replay <traceId> --workspace demo
opensteer interaction diff <traceA> <traceB> --workspace demo--persistopensteer artifact read <artifactId> --workspace demoextract --persistscripts capture --persistscripts beautify --persistopen(url)goto(url, { captureNetwork? })close()snapshot("action" | "extraction")click()hover()input()scroll()extract()listPages()newPage()activatePage()closePage()network.query()network.detail()waitForPage()cookies()storage()state()fetch()evaluate()addInitScript()route()computerExecute()browser.status()browser.clone()browser.reset()browser.delete()evaluateexecfetchopensteer browser discover