Not in the top 1,000 by GitHub stars

frane/vibesurfer

A browser for LLMs, not humans.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

crates/vs-cli/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

485112319300 → 485112319300

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 485112319300

No earlier version was observed for comparison.

Compare on GitHub

docs/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

485112319300 → 485112319300

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 485112319300

No earlier version was observed for comparison.

Compare on GitHub

plugin/skills/debug-failed-action/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

485112319300 → 485112319300

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 485112319300

No earlier version was observed for comparison.

Compare on GitHub

plugin/skills/vibesurfer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

485112319300 → 485112319300

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 485112319300

No earlier version was observed for comparison.

Compare on GitHub

skills/debug-failed-action/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

485112319300 → 485112319300

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 485112319300

No earlier version was observed for comparison.

Compare on GitHub

skills/vibesurfer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

485112319300 → 485112319300

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 485112319300

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 4851123193006a26cda3836fcad5a9bf96fb9c9c

git clone --filter=blob:none --no-checkout https://github.com/frane/vibesurfer.git .hotskills/frane-vibesurfer && git -C .hotskills/frane-vibesurfer checkout --detach 4851123193006a26cda3836fcad5a9bf96fb9c9c # Copy each selected skill directory from .hotskills/frane-vibesurfer into .claude/skills/<skill-name>/
17GitHub stars
1star in 7 days
6skills in this repository
0commits in 30 days

Heat

1.8
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 2, 202617

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

vibesurfer

When your agent uses it

Agent-native headless browser. 26 primitives over a Unix-socket wire protocol. Real WKWebView (macOS), WebKitGTK 6 (Linux), or WebView2 (Windows) — all three engines verified per-commit by a real-browser integration suite. Optimistic concurrency via state tokens; tree-delta wire format; durable session/page/auth state in SQLite.

What it loads into context

Frontmatter

97 tokens

Always available to the agent

SKILL.md

6,650 tokens

When the skill is activated

Reference documents

5,182 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Short forms are the default in agent contexts
  2. Use this tool when
  3. Don't use this tool for
  4. The 26 primitives
  5. When the tree isn't enough: look, then act at coordinates
  6. Optimistic concurrency
  7. Idempotency
  8. Auth flow
  9. How the wire stays cheap
  10. Common mistakes to avoid
  11. Capabilities by platform
  12. Where things live

Scripts executed separately

  • src/mcp/tools.rs

Files

  • ../../.claude-plugin/marketplace.jsonasset714 bytes
  • Cargo.tomlasset2,193 bytes
  • README.mddoc20,532 bytes
  • SKILL.mdcore24,742 bytes
  • SKILL.mdcore24,742 bytes
  • SKILL.mdcore24,742 bytes
  • SKILL.mdcore24,742 bytes
  • build.rsasset1,733 bytes
  • src/active_session.rsasset2,363 bytes
  • src/caller.rsasset7,427 bytes
  • src/client.rsasset5,215 bytes
  • src/commands/dispatch.rsasset25,437 bytes
  • src/commands/mod.rsasset41,122 bytes
  • src/commands/render.rsasset1,495 bytes
  • src/flow.rsasset5,891 bytes
  • src/lib.rsasset752 bytes
  • src/main.rsasset3,479 bytes
  • src/mcp/content.rsasset4,537 bytes
  • src/mcp/live-panel.htmlasset2,870 bytes
  • src/mcp/mod.rsasset14,117 bytes
  • src/mcp/tools.rsruns34,308 bytes
  • src/paths.rsasset2,206 bytes
  • src/serve.rsasset36,732 bytes
  • src/skill_install.rsasset22,533 bytes
  • src/spawn.rsasset2,404 bytes
  • tests/alias_parity.rsasset7,419 bytes
  • tests/auto_spawn.rsasset4,674 bytes
  • tests/e2e_cli.rsasset11,974 bytes
  • tests/m6/act.rsasset21,115 bytes
  • tests/m6/auth.rsasset16,998 bytes
  • tests/m6/challenge.rsasset3,361 bytes
  • tests/m6/download.rsasset5,791 bytes
  • tests/m6/extract.rsasset3,936 bytes
  • tests/m6/fingerprint.rsasset2,009 bytes
  • tests/m6/helpers.rsasset2,755 bytes
  • tests/m6/inspect.rsasset12,744 bytes
  • tests/m6/lifecycle.rsasset16,902 bytes
  • tests/m6/main.rsasset1,144 bytes
  • tests/m6/memory.rsasset6,477 bytes
  • tests/m6/visual.rsasset6,258 bytes
  • tests/m6/wait.rsasset6,111 bytes
  • tests/m6/webentry.rsasset19,485 bytes
  • tests/m6_smoke.rsasset1,231 bytes
  • tests/support/fixture_server.rsasset10,562 bytes
  • tests/support/mod.rsasset11,268 bytes
  • ../../plugin/.claude-plugin/plugin.jsonasset402 bytes
Read SKILL.md

# vibesurfer (binary: `vs`)

`vs` is a stateless CLI that talks to a daemon (`vs serve`, auto-spawned on first call) over a Unix socket. Not installed? `npx vibesurfer <args>` runs the same binary (downloaded and cached on first use); `vs skill install` wires it into every detected agent. The daemon owns one long-lived browser engine on the OS main thread and a SQLite store at `~/.vibesurfer/state.db`. Every primitive writes one audit row before returning — there's no opt-out, no untracked operation.

## Short forms are the default in agent contexts

Every primitive has a short alias. Long forms exist for human-readable documentation; agent invocations should use the shorter form to save tokens. `vs o https://...` is the canonical shape for `vs open https://...`, not the other way around. The 19-primitive tables below lead with the short form and show the long form in parens; both work identically.

Frequent flags also have short forms: `-S` (`--session`), `-j` (`--json`), `-F` (`--full`), `-s` (`--since`), `-n` (`--limit`), `-P` (`--page`). The `--token` flag stays verbose because it's never typed by hand — you paste it from the previous read.

## Use this tool when

- You need to drive a real browser to read or interact with a web app (login, scrape behind auth, click through SPA state).
- You need stable refs across snapshots so you can plan a multi-step interaction without scraping coordinates.
View the complete source on GitHub

Skills included

  • vibesurfer
  • debug-failed-action
  • vibesurfer
  • debug-failed-action
  • vibesurfer

Repository facts

License
Apache-2.0
Created
May 8, 2026
Last pushed
Sep 24, 2026
Forks
0
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 10 notes
  • crates/vs-cli/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • crates/vs-cli/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • crates/vs-cli/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • docs/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugin/skills/vibesurfer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugin/skills/vibesurfer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • plugin/skills/vibesurfer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/vibesurfer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/vibesurfer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/vibesurfer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 133 signals by file

.claude-plugin/marketplace.json

  • Network accessline 10
    "name": "vibesurfer",       "source": "./plugin",       "description": "Headless real browser (WKWebView/WebKitGTK/WebView2) driven over a Unix-socket wire protocol. 20 primitives, state-token concurrency, tree deltas, audit-by-construction
  • Network accessline 11
    "source": "./plugin",       "description": "Headless real browser (WKWebView/WebKitGTK/WebView2) driven over a Unix-socket wire protocol. 20 primitives, state-token concurrency, tree deltas, audit-by-construction. Requires the `vs` binary o
  • Network accessline 12
    "description": "Headless real browser (WKWebView/WebKitGTK/WebView2) driven over a Unix-socket wire protocol. 20 primitives, state-token concurrency, tree deltas, audit-by-construction. Requires the `vs` binary on PATH (install via `brew ta

crates/vs-cli/README.md

  • Network accessline 5
    <p align="center">   <a href="https://github.com/frane/vibesurfer/actions/workflows/ci.yml"><img alt="ci" src="https://img.shields.io/github/actions/workflow/status/frane/vibesurfer/ci.yml?branch=main&label=ci&style=flat-square"></a>
  • Network accessline 6
    <a href="https://github.com/frane/vibesurfer/actions/workflows/ci.yml"><img alt="ci" src="https://img.shields.io/github/actions/workflow/status/frane/vibesurfer/ci.yml?branch=main&label=ci&style=flat-square"></a>
  • Network accessline 7
    <a href="https://github.com/frane/vibesurfer/actions/workflows/engine-tests.yml"><img alt="engine-tests" src="https://img.shields.io/github/actions/workflow/status/frane/vibesurfer/engine-tests.yml?branch=main&label=engine-tests&style=flat-
  • Network accessline 8
    <a href="https://github.com/frane/vibesurfer/releases/latest"><img alt="release" src="https://img.shields.io/github/v/release/frane/vibesurfer?style=flat-square"></a>
  • Network accessline 9
    <a href="https://www.npmjs.com/package/vibesurfer"><img alt="npm" src="https://img.shields.io/npm/v/vibesurfer?style=flat-square&label=npm"></a>
  • Network accessline 10
    <a href="https://crates.io/crates/vibesurfer"><img alt="crates.io" src="https://img.shields.io/crates/v/vibesurfer?style=flat-square"></a>
  • Network accessline 11
    <a href="https://github.com/frane/vibesurfer/blob/main/LICENSE"><img alt="license" src="https://img.shields.io/badge/license-Apache_2.0-blue?style=flat-square"></a>
  • Network accessline 14
    <p align="center">   <img src="https://github.com/frane/vibesurfer/raw/main/docs/demo-claude.gif" alt="Claude Code using vibesurfer" width="560">
  • Network accessline 15
    <img src="https://github.com/frane/vibesurfer/raw/main/docs/demo-claude.gif" alt="Claude Code using vibesurfer" width="560">
  • Network accessline 35
    npx vibesurfer session-open npx vibesurfer open https://example.com
  • Network accessline 36
    npx vibesurfer open https://example.com
  • Network accessline 45
    curl (macOS, Linux):
  • Dangerous shell operationline 48
    curl -sSL https://raw.githubusercontent.com/frane/vibesurfer/main/install.sh | sh
  • Network accessline 48
    curl -sSL https://raw.githubusercontent.com/frane/vibesurfer/main/install.sh | sh
  • Network accessline 54
    irm https://raw.githubusercontent.com/frane/vibesurfer/main/install.ps1 | iex
  • Network accessline 66
    git clone https://github.com/frane/vibesurfer && cd vibesurfer
  • Network accessline 133
    | Probe | Result | |---|---| | [bot.sannysoft.com](https://bot.sannysoft.com/) | Every headless-artifact check passes — WebDriver, plugin array, languages, the PHANTOM_* and HEADCHR_* families, Selenium markers. `window.chrome` reports miss
  • Network accessline 134
    |---|---| | [bot.sannysoft.com](https://bot.sannysoft.com/) | Every headless-artifact check passes — WebDriver, plugin array, languages, the PHANTOM_* and HEADCHR_* families, Selenium markers. `window.chrome` reports missing, which is corre
  • Network accessline 135
    | [bot.sannysoft.com](https://bot.sannysoft.com/) | Every headless-artifact check passes — WebDriver, plugin array, languages, the PHANTOM_* and HEADCHR_* families, Selenium markers. `window.chrome` reports missing, which is correct for a W
  • Network accessline 136
    | [bot.incolumitas.com](https://bot.incolumitas.com/) | 31 checks OK, 1 FAIL (`webDriverAdvanced`). `navigator.webdriver` is `false` behind a native getter on `Navigator.prototype`, with no own-property override and absent from `Object.keys
  • Network accessline 137
    | [CreepJS](https://abrahamjuliot.github.io/creepjs/) | Stable fingerprint, no lies section rendered. Headless heuristics: `chromium: false 6%`, `like headless: 33%`, `headless: 20%`. Evaluating its heuristic set directly, every flag that f
  • Network accessline 175
    $ vs o https://example.com                     # open the URL
  • Network accessline 202
    [Credential-related source omitted]
  • Network accessline 204
    [Credential-related source omitted]
  • Network accessline 243
    git clone https://github.com/frane/vibesurfer && cd vibesurfer
  • Network accessline 274
    Issues and pull requests welcome. Open an issue first for anything beyond a small fix so we can discuss the approach. The codebase uses [agented](https://github.com/frane/agented) for transactional file edits during development; agented's w
  • Network accessline 280
    - [objc2](https://github.com/madsmtm/objc2), macOS WebKit FFI.
  • Network accessline 281
    - [webkit6](https://github.com/gtk-rs/gtk-rs-core), Linux engine bindings.
  • Network accessline 282
    - [webview2-com](https://github.com/wravery/webview2-rs), Windows COM layer.
  • Network accessline 283
    - [interprocess](https://github.com/kotauskas/interprocess), cross-platform IPC transport.
  • Network accessline 284
    - [tiny_http](https://github.com/tiny-http/tiny-http), integration test fixture server.
  • Network accessline 286
    Protocol borrows from [agented](https://github.com/frane/agented), an editor for AI agents.

crates/vs-cli/SKILL.md

  • Network accessline 14
    Every primitive has a short alias. Long forms exist for human-readable documentation; agent invocations should use the shorter form to save tokens. `vs o https://...` is the canonical shape for `vs open https://...`, not the other way aroun
  • Network accessline 90
    [Credential-related source omitted]
  • Network accessline 92
    [Credential-related source omitted]
  • Network accessline 157
    `vs watch <PAGE> [--open]` prints a read-only live-view URL (`http://127.0.0.1:…/live/<nonce>`, 30 min): an HTML page showing ~1 fps screenshots of the page while open. Relay it so the human can watch the browser work; MCP tool `vs_watch` r
  • Access to secretsline 164
    [Credential-related source omitted]
  • Network accessline 181
    # First time (browser, real human) vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 182
    vs session-open PAGE=$(vs open https://app.example.com) # ...log in via the page...
  • Network accessline 183
    PAGE=$(vs open https://app.example.com)
  • Network accessline 187
    # Tomorrow vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 188
    vs session-open PAGE=$(vs open https://app.example.com) vs auth load "$PAGE" example-prod    # restores the session
  • Network accessline 189
    PAGE=$(vs open https://app.example.com)

crates/vs-cli/src/commands/mod.rs

  • Access to secretsline 262
    [Credential-related source omitted]
  • Network accessline 507
    /// so login-and-drive scripts need no manual id/token threading.     /// Stops at the first failing step. Example file contents:     /// `[["open","https://x"],["act","$page","5","fill","hi","--token","$token"]]`
  • Network accessline 508
    /// Stops at the first failing step. Example file contents:     /// `[["open","https://x"],["act","$page","5","fill","hi","--token","$token"]]`     Flow {
  • Network accessline 509
    /// `[["open","https://x"],["act","$page","5","fill","hi","--token","$token"]]`

crates/vs-cli/src/flow.rs

  • Network accessline 38
    .with_context(|| format!("read flow file {}", file.display()))?;     let steps: Vec<Vec<String>> = serde_json::from_str(&text)         .context("flow file must be a JSON array of arg arrays, e.g. [[\"open\",\"https://x\"]]")?;
  • Network accessline 40
    .context("flow file must be a JSON array of arg arrays, e.g. [[\"open\",\"https://x\"]]")?;

crates/vs-cli/src/mcp/tools.rs

  • Executable scriptline 1
    #![allow(clippy::too_many_lines, clippy::needless_pass_by_value)]
  • Access to secretsline 227
    [Credential-related source omitted]

crates/vs-cli/tests/alias_parity.rs

  • Network accessline 48
    fn alias_open() {     assert_parity(         &["open", "https://example.com"],
  • Network accessline 49
    assert_parity(         &["open", "https://example.com"],         &["o", "https://example.com"],
  • Network accessline 50
    &["open", "https://example.com"],
  • Network accessline 51
    &["o", "https://example.com"],

crates/vs-cli/tests/e2e_cli.rs

  • Network accessline 134
    // 3. open.     let r = vs(&home, &["open", "https://example.com/login"]);
  • Network accessline 135
    let r = vs(&home, &["open", "https://example.com/login"]);

crates/vs-cli/tests/m6/auth.rs

  • Access to secretsline 158
    [Credential-related source omitted]
  • Network accessline 164
    let blob = serde_json::json!({             "version": 2,             "url": "http://127.0.0.1/",
  • Network accessline 165
    "version": 2,             "url": "http://127.0.0.1/",             "origin": "http://127.0.0.1",
  • Network accessline 166
    "url": "http://127.0.0.1/",
  • Network accessline 167
    "origin": "http://127.0.0.1",

crates/vs-cli/tests/m6/webentry.rs

  • Network accessline 81
    let url = body_kv(&enqueue_body, "url");         assert!(             url.starts_with("http://127.0.0.1:"),
  • Network accessline 82
    assert!(             url.starts_with("http://127.0.0.1:"),             "loopback url, got {url}"
  • Network accessline 83
    url.starts_with("http://127.0.0.1:"),

crates/vs-cli/tests/support/fixture_server.rs

  • Network accessline 64
    format!("/{path}")         };         format!("http://{}{}", self.addr, p)
  • Network accessline 65
    };         format!("http://{}{}", self.addr, p)     }
  • Network accessline 66
    format!("http://{}{}", self.addr, p)

docs/PRIMITIVES.md

  • Access to secretsline 28
    [Credential-related source omitted]

docs/PROTOCOL.md

  • Network accessline 67
    vs_session_open --policy=default vs_open https://example.com
  • Network accessline 68
    vs_open https://example.com
  • Network accessline 88
    ? nav https://example.com/login
  • Network accessline 162
    2 hd "Example Domain"   3 p "This domain is for use in illustrative examples..."   4 lnk "More information..." click href=https://www.iana.org/domains/example
  • Network accessline 164
    4 lnk "More information..." click href=https://www.iana.org/domains/example

docs/REALITY_CHECK.md

  • Network accessline 97
    `vs_type` joined the matrix in v0.2.5, cited from engine-tests run [35242053354](https://github.com/frane/vibesurfer/actions/runs/35242053354):
  • Network accessline 98
    [35242053354](https://github.com/frane/vibesurfer/actions/runs/35242053354):
  • Dangerous shell operationline 124
    sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
  • Network accessline 142
    domain. Addressing the fixture as `localhost` fixed it, and the cell now runs unskipped on all of them (run [35250587754](https://github.com/frane/vibesurfer/actions/runs/35250587754)).
  • Network accessline 144
    [35250587754](https://github.com/frane/vibesurfer/actions/runs/35250587754)).

docs/demo/record-claude.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 68
    rm -rf "$DEMO_DIR"
  • Network accessline 119
    SUGGESTED_PROMPT="Use vibesurfer to open https://news.ycombinator.com and tell me the top three stories: title, points, comments. Concise."
  • Network accessline 131
    $SUGGESTED_PROMPT

docs/demo/render.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Network accessline 3
    # # Boots a real daemon, opens a real session+page against # https://example.com, then materializes the tape with the actual
  • Network accessline 4
    # Boots a real daemon, opens a real session+page against # https://example.com, then materializes the tape with the actual # session and page ids substituted in. This avoids putting `$(...)`
  • Network accessline 5
    # https://example.com, then materializes the tape with the actual
  • Dangerous shell operationline 32
    rm -rf "$VS_HOME"
  • Network accessline 60
    SESSION_OUT=$("$BIN_DIR/vs" session-open) SESSION=$(echo "$SESSION_OUT" | tail -1) PAGE_OUT=$("$BIN_DIR/vs" open https://news.ycombinator.com)
  • Network accessline 61
    SESSION=$(echo "$SESSION_OUT" | tail -1) PAGE_OUT=$("$BIN_DIR/vs" open https://news.ycombinator.com) PAGE=$(echo "$PAGE_OUT" | tail -1)
  • Network accessline 62
    PAGE_OUT=$("$BIN_DIR/vs" open https://news.ycombinator.com)

plugin/.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Frane Bandov",     "url": "https://github.com/frane"
  • Network accessline 6
    "name": "Frane Bandov",     "url": "https://github.com/frane"   },
  • Network accessline 7
    "url": "https://github.com/frane"
  • Network accessline 8
    },   "homepage": "https://github.com/frane/vibesurfer",   "repository": "https://github.com/frane/vibesurfer",
  • Network accessline 9
    "homepage": "https://github.com/frane/vibesurfer",
  • Network accessline 10
    "repository": "https://github.com/frane/vibesurfer",

plugin/skills/vibesurfer/SKILL.md

  • Network accessline 14
    Every primitive has a short alias. Long forms exist for human-readable documentation; agent invocations should use the shorter form to save tokens. `vs o https://...` is the canonical shape for `vs open https://...`, not the other way aroun
  • Network accessline 90
    [Credential-related source omitted]
  • Network accessline 92
    [Credential-related source omitted]
  • Network accessline 157
    `vs watch <PAGE> [--open]` prints a read-only live-view URL (`http://127.0.0.1:…/live/<nonce>`, 30 min): an HTML page showing ~1 fps screenshots of the page while open. Relay it so the human can watch the browser work; MCP tool `vs_watch` r
  • Access to secretsline 164
    [Credential-related source omitted]
  • Network accessline 181
    # First time (browser, real human) vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 182
    vs session-open PAGE=$(vs open https://app.example.com) # ...log in via the page...
  • Network accessline 183
    PAGE=$(vs open https://app.example.com)
  • Network accessline 187
    # Tomorrow vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 188
    vs session-open PAGE=$(vs open https://app.example.com) vs auth load "$PAGE" example-prod    # restores the session
  • Network accessline 189
    PAGE=$(vs open https://app.example.com)

skills/vibesurfer/SKILL.md

  • Network accessline 14
    Every primitive has a short alias. Long forms exist for human-readable documentation; agent invocations should use the shorter form to save tokens. `vs o https://...` is the canonical shape for `vs open https://...`, not the other way aroun
  • Network accessline 14
    Every primitive has a short alias. Long forms exist for human-readable documentation; agent invocations should use the shorter form to save tokens. `vs o https://...` is the canonical shape for `vs open https://...`, not the other way aroun
  • Network accessline 90
    [Credential-related source omitted]
  • Network accessline 90
    [Credential-related source omitted]
  • Network accessline 92
    [Credential-related source omitted]
  • Network accessline 92
    [Credential-related source omitted]
  • Network accessline 157
    `vs watch <PAGE> [--open]` prints a read-only live-view URL (`http://127.0.0.1:…/live/<nonce>`, 30 min): an HTML page showing ~1 fps screenshots of the page while open. Relay it so the human can watch the browser work; MCP tool `vs_watch` r
  • Network accessline 157
    `vs watch <PAGE> [--open]` prints a read-only live-view URL (`http://127.0.0.1:…/live/<nonce>`, 30 min): an HTML page showing ~1 fps screenshots of the page while open. Relay it so the human can watch the browser work; MCP tool `vs_watch` r
  • Access to secretsline 164
    [Credential-related source omitted]
  • Access to secretsline 164
    [Credential-related source omitted]
  • Network accessline 181
    # First time (browser, real human) vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 181
    # First time (browser, real human) vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 182
    vs session-open PAGE=$(vs open https://app.example.com) # ...log in via the page...
  • Network accessline 182
    vs session-open PAGE=$(vs open https://app.example.com) # ...log in via the page...
  • Network accessline 183
    PAGE=$(vs open https://app.example.com)
  • Network accessline 183
    PAGE=$(vs open https://app.example.com)
  • Network accessline 187
    # Tomorrow vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 187
    # Tomorrow vs session-open PAGE=$(vs open https://app.example.com)
  • Network accessline 188
    vs session-open PAGE=$(vs open https://app.example.com) vs auth load "$PAGE" example-prod    # restores the session
  • Network accessline 188
    vs session-open PAGE=$(vs open https://app.example.com) vs auth load "$PAGE" example-prod    # restores the session
  • Network accessline 189
    PAGE=$(vs open https://app.example.com)
  • Network accessline 189
    PAGE=$(vs open https://app.example.com)

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 2 facts
  • Contacts news.ycombinator.com, which SKILL.md, the README and the plugin manifest do not mentiondocs/demo/record-claude.sh:119High confidence
  • Contacts news.ycombinator.com, which SKILL.md, the README and the plugin manifest do not mentiondocs/demo/render.sh:62High confidence
Signal confidence: 101 facts

and 51 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md crates/vs-cli/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md crates/vs-cli/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md crates/vs-cli/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md crates/vs-cli/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md crates/vs-cli/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.