NATIVE macOS MENU-BAR APP · PEER-TO-PEER

Your friends’ AI subscriptions, shared.

VibeShare runs a local OpenAI and Anthropic-compatible endpoint on your Mac, then routes the models you don’t pay for to a friend who does — straight Mac-to-Mac, encrypted, with no server in the middle.

  • macOS 13+
  • ·v1.0
  • ·Lives in your menu bar
ANTHROPIC_BASE_URL=http://127.0.0.1:8788 ANTHROPIC_API_KEY=vibeshare claude

// POINT IT AND GO

One endpoint. Every tool you already use.

ANTHROPIC_BASE_URL=http://127.0.0.1:8788 \
  ANTHROPIC_API_KEY=vibeshare \
  claude

OpenAI- and Anthropic-compatible. No API key needed locally — any non-empty value works. The integration is the base URL.

// PLAINLY

It’s a menu-bar app. It exposes http://127.0.0.1:8788/v1 locally. Point any OpenAI-compatible tool — or Claude Code — at it. Connect your own providers, optionally share specific models with a friend via a code, and borrow theirs the same way. When you call a model you don’t have, VibeShare auto-routes it to an online friend who shares it and streams the answer back. That’s the whole thing.

// THREE JOBS

Connect your providers. Share a code. Borrow a friend's.

01

Connect

Connected

One-click OAuth for Claude (Anthropic), ChatGPT/Codex (OpenAI), Gemini (Google), Kimi (Moonshot), Antigravity, and xAI (Grok). Credentials stay local in ~/.cli-proxy-api, powered by the bundled open-source CLIProxyAPI engine.

02

Share

routing

Generate a grant code (VS-XXXX-XXXX-…), pick exactly which providers and models it exposes, and hand it to a friend. Revoke anytime. Watch requests and tokens tick up live.

03

Borrow

offline

Paste a friend’s code. Their shared models appear in your /v1/models. Call one and it just works — when they’re online.

// THE ARCHITECTURE

There is no VibeShare server. None.

public Nostr relayciphertext only — used once, for handshake
you online
a friend online
another friendoffline
WebRTC DataChannel · DTLS-encrypted · direct

Presence and connection setup — WebRTC offer / answer / ICE — ride on public Nostr relays. But everything is encrypted, so relays only ever see ciphertext.

Once connected, traffic flows directly peer-to-peer over a WebRTC DataChannel — DTLS-encrypted, reliable, ordered. Nostr drops out of the path entirely.

The grant code is the only credential. Both sides derive the same Nostr room and encryption keys from it via HKDF-SHA256.

Sharing is one-directional: your code lets a friend use your models. You only get theirs if they send a code back.

Treat your codes like passwords.

We couldn’t read your traffic if we wanted to — there’s no “we” in the path.

// THE GUARDRAILS

A code is a scoped key — not your whole account.

Sharing only ever exposes what you choose, on the paths an AI client actually needs. The host enforces it on every request.

Share codes like you’d share a Wi-Fi password — with people you actually know.

// the host enforces:

  • Only the models you shared on that code — nothing else is reachable.
  • Only these paths: /v1/chat/completions/v1/completions/v1/embeddings/v1/messages
  • Revoke any code instantly — access ends the moment you do.
  • Live per-code request and token counters, so you always see what’s flowing.
1,204 requests · 318k tokensRevoke

An example code’s live counters, shown in-app.

// COMPATIBILITY

If it speaks OpenAI or Anthropic, it speaks VibeShare.

Claude CodeCursorClineContinueAiderZedOpenAI SDKyour script.py

Point the base URL at http://127.0.0.1:8788/v1 — that’s the whole integration. curl it, drop it in your editor’s AI settings, or wire it into a script.

Tested with the tools above; anything OpenAI-compatible should work. If something doesn’t, open an issue.

Everything happens in a tidy menu-bar popover.

No dock icon. No window to manage. It lives in your menu bar (LSUIElement) and stays out of the way. These are live — click through the tabs.

Share
Borrow

// WHO IS THIS FOR?

You pay for Claude Max. Your friend’s on ChatGPT Plus. Another’s on Gemini. Why should any of you be capped at one?

Developers who pay for multiple AI coding subscriptions and want to pool access with a small circle of friends — and use the models you don’t pay for, whenever a friend is online.

// heads up

Sharing access to a provider account may run against that provider’s Terms of Service — many plans prohibit sharing credentials or access. VibeShare gives you the controls (scoped codes, allow-lists, instant revoke); how you use them is on you. Share with friends, not strangers — and know the rules of the plans you’re pooling. VibeShare ships as-is, no warranty.

  • Credentials never leave your Mac.
  • Relays see only ciphertext.
  • Revoke a code anytime — access ends instantly.

// QUESTIONS

The precise answers.

Is there really no server?

Yes, really. The only third party in the picture is public Nostr relays, used briefly for encrypted presence and handshake — they only ever see ciphertext. Once two Macs connect, traffic flows directly peer-to-peer over a DTLS-encrypted WebRTC DataChannel. There’s nothing in the middle to trust.

Where do my credentials live?

On your Mac, in ~/.cli-proxy-api. They’re never uploaded anywhere. Provider auth is handled by the bundled open-source CLIProxyAPI engine.

What can a friend's code actually do?

Only the exact models you allow-listed on that code, only on chat/completions, embeddings, and messages paths. Nothing else is reachable, and you can revoke the code instantly.

What happens when my friend goes offline?

Their models show as offline and routed calls fail cleanly — you just lose that model until they’re back online. Your own models keep working.

Is it really free?

Yes — MIT-licensed, open source, no account, no telemetry we run. Download it or build it from source.

How stable is this?

It’s v1.0 and works end-to-end today. It’s actively developed, so if you hit a rough edge, please file an issue.

macOS only?

For now, yes — it’s a native SwiftUI menu-bar app for macOS 13 and up.

Spin up your endpoint in a minute.
Share a code in two.

Latest release as a .dmg — ad-hoc signed, so on first launch: right-click → Open.