Atlas / MCP servers / pooriaarab / vibeshare-live

vibeshare-liveCAUTION

mcp/pooriaarab/vibeshare

Share a live agent coding session by URL, for developers who pair in a browser.

Verdict
CAUTION
Grade
C
Trust score
79 /100
Exposed tools
3 1r · 2w · 0d
Transport
stdio
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Share your live agent coding session by URL — traces.com-style, open source, CLI-first. Spectators watch read-only; invite links let viewers request to join as collaborators (host approves, live).

Part of the Vibe Suite — companion tools for agentic coding CLIs (Claude Code, Codex, Gemini, Grok/pi, Kimi). Ships as CLI + npm package + MCP server, built on `@pooriaarab/vibe-core` (consent ledger, hooks bus, badges).

Local-first: the share runs on your machine. The consent ledger gates every share (share:session scope), the stream is served straight from your host, and nothing is stored on a server.

Works with any harness

vibeshare shares a LIVE TERMINAL SESSION. It wraps a PTY, so the program inside is irrelevant — any agent CLI, shell, or TUI renders faithfully (colors, cursor, full-screen) via xterm.js in the browser.

Two ways to share a session:

  • Wrap at launch (no tmux): vibeshare --public -- — vibeshare is the parent, PTY-captures. Examples: vibeshare --public -- claude, -- codex, -- gemini, -- aider, -- opencode, -- kimi, -- amp, or any shell/command.
  • Attach to an already-running session (needs tmux): run the harness inside tmux, then vibeshare attach taps it live. Harness-agnostic — it captures the terminal, not the app.

Verified harnesses (all render the real TUI live): Claude Code (claude), OpenAI Codex (codex), Gemini CLI (gemini), aider (requires pip install aider-chat), opencode, Moonshot Kimi (kimi), pi (grok/glm), Sourcegraph amp (requires its own PATH setup). Others (Continue, Goose, Crush, Qwen, Cursor Agent, Warp, Zed, ...) wrap identically — they're just terminal programs.

Modes:

Read from source at commit fc17bb0f9633OBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code (npm)
claude mcp add vibeshare-live -- npx -y [email protected] mcp
03

Exposed tools (3)

1 read · 2 write · 0 destructive.

ToolRiskDescription
vibeshare_createwriteShare this live session by URL. Spectators watch read-only; with access=
vibeshare_stopwriteEnd a live share: viewers are disconnected and the URL stops working.
vibeshare_viewersreadList viewers of a live share: who is watching, roles, and pending join requests.
04

Trust audit

CAUTIONgrade C · trust 79/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (6 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (25)

MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/cli/control.ts:12
res = await fetch(`http://127.0.0.1:${record.port}${path}`, {
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
tests/redact.test.ts:35
'-----BEGIN PRIVATE KEY-----',
LOWInventory / provenance · inv.hidden_file · CWE-1104
.cursorignore
.cursorignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.jscpd.json
.jscpd.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.oxlintrc.json
.oxlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/canvasPage.test.ts:26
expect(() => new Function(js)).not.toThrow();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/pageJs.test.ts:33
expect(() => new Function(js)).not.toThrow();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/webrtc/canvasPage/html.ts:1
import { xtermPageStyles } from '../../xtermClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/webrtc/canvasPage/page.ts:5
import { xtermScriptTags, XTERM_BOOT_JS } from '../../xtermClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/webrtc/gridPage/html.ts:1
import { xtermPageStyles } from '../../xtermClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/webrtc/gridPage/page.ts:5
import { xtermScriptTags, XTERM_BOOT_JS } from '../../xtermClient.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/webrtc/viewerPage/shell.ts:2
import { XTERM_BOOT_JS, xtermPageStyles, xtermScriptTags } from '../../xtermClient.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:62
url:      http://127.0.0.1:50613/s/KKxzdjLpr_km
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/hostControl.test.ts:33
const base = `http://127.0.0.1:${server.port}`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/hostControl.test.ts:76
const res = await fetch(`http://127.0.0.1:${server.port}/control/viewers?share=x`);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/transport.test.ts:27
base = `http://127.0.0.1:${transport.port}`;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/spectatorPage/js2.ts:121
var bin = atob(b64);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/spectatorPage/js2.ts:127
var bin = atob(s);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/webrtc/canvasPage/js1.ts:82
var bin = atob(b64);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/webrtc/gridPage/js1.ts:70
var bin = atob(b64);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/webrtc/viewerPage/js2.ts:4
export const VIEWER_JS_PART_2 = `    var bin = atob(b64);
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@pooriaarab/vibe-core, @xterm/addon-fit, @xterm/xterm, node-datachannel, node-pty, vibelive, ws, @cloudflare/workers-types
Why it matters. 13 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
worker/package.json
@pooriaarab/vibe-core, @cloudflare/workers-types, typescript, wrangler
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:7
**Local-first: the share runs on your machine.** The consent ledger gates every share (`share:session` scope), the stream is served straight from your host, and nothing is stored on a server.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/spec.md:31
Badge: "● p2p · e2e · nothing stored on a server". `share:session` consent grant
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha fc17bb0f9633full audit observations/trust-audit/mcp-server/pooriaarab__vibeshare.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12fc17bb0f9633CAUTIONC79first audit
06

Questions

What is the vibeshare-live MCP server?

Share a live agent coding session by URL, for developers who pair in a browser.

What tools does vibeshare-live expose?

3 in total: 1 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is vibeshare-live safe to connect to an agent?

With care. The audit graded it C (79/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does vibeshare-live need?

No credential environment variables were found in its source, so it appears to need none.

How does vibeshare-live run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as vibeshare-signaling at 0.1.0.

How current is this page?

The grade is for one exact copy of the source (fc17bb0f9633), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement