Documentation Index
Fetch the complete documentation index at: https://mintlify.com/steerlabs/opensteer/llms.txt
Use this file to discover all available pages before exploring further.
Overview
When running in cloud mode, OpenSteer creates remote browser sessions that you can monitor and control. Each session has a unique ID and optional viewing URL.
Methods
getCloudSessionId()
browser.getCloudSessionId(): string | null
Returns the current cloud session ID, or null if not in cloud mode or session not started.
Session ID string (e.g., 'sess_abc123...') or null if:
- Cloud mode is not enabled
launch() has not been called yet
- Session has been closed
getCloudSessionUrl()
browser.getCloudSessionUrl(): string | null
Returns the URL to view the cloud session in a web browser, or null if not available.
Session URL string (e.g., 'https://app.opensteer.com/session/sess_abc123') or null if:
- Cloud mode is not enabled
launch() has not been called yet
- Session has been closed
- Server did not provide a viewing URL
Session Lifecycle
1. Before Launch
Before calling launch(), both methods return null:
const browser = new Opensteer({ cloud: true })
console.log(browser.getCloudSessionId()) // null
console.log(browser.getCloudSessionUrl()) // null
2. After Launch
After launch(), session details are available:
await browser.launch()
const sessionId = browser.getCloudSessionId()
const sessionUrl = browser.getCloudSessionUrl()
console.log('Session ID:', sessionId) // 'sess_abc123...'
console.log('View session:', sessionUrl) // 'https://app.opensteer.com/session/sess_abc123'
3. During Execution
Session remains active while performing actions:
await browser.goto('https://example.com')
const html = await browser.snapshot()
// Session still active
console.log('Session ID:', browser.getCloudSessionId()) // 'sess_abc123...'
4. After Close
After closing, session details are cleared:
await browser.close()
console.log(browser.getCloudSessionId()) // null
console.log(browser.getCloudSessionUrl()) // null
Examples
Basic Session Info
import { Opensteer } from 'opensteer'
const browser = new Opensteer({
cloud: {
apiKey: process.env.OPENSTEER_API_KEY!
}
})
await browser.launch()
const sessionId = browser.getCloudSessionId()
const sessionUrl = browser.getCloudSessionUrl()
if (sessionId) {
console.log('✓ Cloud session started:', sessionId)
}
if (sessionUrl) {
console.log('→ View session:', sessionUrl)
}
await browser.goto('https://example.com')
await browser.close()
Logging Session Details
const browser = new Opensteer({ cloud: true })
await browser.launch()
const logSession = () => {
const id = browser.getCloudSessionId()
const url = browser.getCloudSessionUrl()
if (id) {
console.log(`[Session ${id}]`, url || 'No viewing URL')
} else {
console.log('[No active session]')
}
}
logSession() // [Session sess_abc123] https://app.opensteer.com/session/sess_abc123
await browser.goto('https://example.com')
logSession() // [Session sess_abc123] https://app.opensteer.com/session/sess_abc123
await browser.close()
logSession() // [No active session]
Conditional Cloud Mode
const browser = new Opensteer({
cloud: process.env.USE_CLOUD === 'true'
})
await browser.launch()
if (browser.getCloudSessionId()) {
console.log('Running in cloud mode')
console.log('Session URL:', browser.getCloudSessionUrl())
} else {
console.log('Running in local mode')
}
await browser.goto('https://example.com')
await browser.close()
Session URL in Test Reports
import { test } from '@playwright/test'
test('cloud automation test', async () => {
const browser = new Opensteer({ cloud: true })
await browser.launch()
const sessionUrl = browser.getCloudSessionUrl()
try {
await browser.goto('https://example.com')
// ... test actions ...
} catch (error) {
console.error('Test failed. View session:', sessionUrl)
throw error
} finally {
await browser.close()
}
})
Sharing Session Links
const browser = new Opensteer({ cloud: true })
await browser.launch()
const shareSession = () => {
const url = browser.getCloudSessionUrl()
if (url) {
console.log('Share this link to view the live session:')
console.log(url)
} else {
console.log('Session URL not available')
}
}
shareSession()
await browser.goto('https://example.com')
const html = await browser.snapshot()
shareSession()
await browser.close()
Session Monitoring
class SessionMonitor {
constructor(private browser: Opensteer) {}
getStatus() {
const sessionId = this.browser.getCloudSessionId()
const sessionUrl = this.browser.getCloudSessionUrl()
return {
active: sessionId !== null,
sessionId: sessionId || undefined,
viewUrl: sessionUrl || undefined,
timestamp: new Date().toISOString()
}
}
printStatus() {
const status = this.getStatus()
console.log(JSON.stringify(status, null, 2))
}
}
const browser = new Opensteer({ cloud: true })
const monitor = new SessionMonitor(browser)
await browser.launch()
monitor.printStatus()
// {
// "active": true,
// "sessionId": "sess_abc123",
// "viewUrl": "https://app.opensteer.com/session/sess_abc123",
// "timestamp": "2026-03-03T12:00:00.000Z"
// }
await browser.close()
monitor.printStatus()
// {
// "active": false,
// "timestamp": "2026-03-03T12:00:30.000Z"
// }
Session Announcement
By default, OpenSteer announces session details to stderr on launch:
[opensteer] cloud session ready sessionId=sess_abc123 workspaceId=ws_xyz url=https://app.opensteer.com/session/sess_abc123
Control announcements with the announce option:
// Always announce (default)
const browser = new Opensteer({
cloud: { apiKey: '...', announce: 'always' }
})
// Only announce in TTY (interactive terminals)
const browser = new Opensteer({
cloud: { apiKey: '...', announce: 'tty' }
})
// Never announce
const browser = new Opensteer({
cloud: { apiKey: '...', announce: 'off' }
})
Notes
- Session IDs are unique per launch
- Session URLs may not be available depending on cloud configuration
- Both methods return
null in local (non-cloud) mode
- Session details are cleared immediately after
close()
- You can safely call these methods before
launch() - they return null
- Session URLs allow team members to observe automation in real-time
- Sessions are automatically closed and cleaned up when the connection ends