Primitive on which every other browser skill composes. Opens a named browser session, allocates an RVF container for it, and binds every action to a ruvector trajectory step. You do not run a browser session in this plugin without invoking this skill (or one that wraps it).
browser-extract, browser-form-fill, browser-test) will compose.```bash
SID="$(date +%Y%m%d-%H%M%S)-${TASK_SLUG:-record}"
npx -y ruvector@0.2.27 rvf create "$SID.rvf" --dimension 384
npx -y ruvector@0.2.27 hooks trajectory-begin --session-id "$SID" --task "$1"
```
mcp__plugin_ruflo-core_ruflo__browser_open with the URL.browser_snapshot for the accessibility tree, browser_screenshot for a baseline image.```bash
npx -y ruvector@0.2.27 hooks trajectory-step \
--session-id "$SID" --action click --args '{"selector":"#login"}' --result ok
```
```bash
npx -y ruvector@0.2.27 hooks trajectory-end --session-id "$SID" --verdict pass
npx -y ruvector@0.2.27 rvf compact "$SID.rvf"
```
browser-sessions:```bash
npx -y @claude-flow/cli@latest memory store --namespace browser-sessions \
--key "$SID" --value "{rvf_id:$SID,host:...,task:...,verdict:pass}"
```
browser_session_record MCP tool ships (ADR-0001 §7), this skill drives the lifecycle from inside its own bash steps. Do not call mcp__plugin_ruflo-core_ruflo__browser_open directly without these wrappers.<YYYYMMDD-HHMMSS>-<task-slug>. Downstream /ruflo-browser ls parses this.--with-dom is expensive (full HTML dump per nav). Off by default.browser-record is a primitive; redaction is the responsibility of skills that read content (browser-extract, browser-test).