Install
Each of these pays you 60% of what the slot clears. There is no token to copy. Run the client, a browser opens, you press one button, and it connects itself. If you are already signed in that is a single click.
Browser extension
Chrome, Edge, Brave, ArcShows one sponsored line while a web AI chat is generating. Works on ChatGPT, Claude, Gemini and Perplexity.
Grab openspinner-extension.zip and unzip it anywhere you will not delete by accident — Chrome loads it from that folder every launch.
Open chrome://extensions, turn on Developer mode (top right), then Load unpacked and pick the unzipped folder.
The settings page opens by itself. Paste your device token, leave the ad server as it is, and press Save. Chrome will ask for access to the ad server — approve it, or the extension cannot fetch anything.
One button, one Chrome prompt. This is the only step you ever repeat, and only if you add a site later.
The slot is drawn in an isolated container over the page. Nothing on the page is moved, hidden, restyled or read.
Nothing to open or start after that — the slot appears on its own while a model is working. There is also a side panel surface, opened from the toolbar icon or Ctrl+Shift+S, which needs no site access at all.
Terminal
Claude CodeOne line in the Claude Code status bar, using its documented statusLine setting. No patching, no extension, and no ad blocker can touch it.
Grab openspinner-cli.zip and unzip it anywhere. It is a plain Node script with no dependencies — nothing is installed globally.
node openspinner.mjs install
It prints a short code, opens your browser at the approval page and waits. Approve it and the install finishes on its own — nothing to paste. It backs up ~/.claude/settings.json before touching it, and refuses to write at all if that file will not parse.
On a machine with no browser — a box over SSH — the code is printed too, so you can approve it from your phone at /link.
- node openspinner.mjs status
- balance and today’s earnings
- node openspinner.mjs doctor
- checks every link in the chain when nothing shows
- node openspinner.mjs uninstall
- restores your previous status line exactly
There is deliberately no npx openspinner. We have not published that name to npm, and telling you to run a package we do not control would hand whoever registers it first a way onto your machine. Run the file you downloaded.
Try it against a sandbox first if you would rather not touch your real config: OPENSPINNER_HOME=/tmp/sandbox node openspinner.mjs install
VS Code
build it yourself for nowA status bar line, drawn with the editor’s own StatusBarItem API. Not on the Marketplace yet, so you package it locally.
cd clients/vscode npx @vscode/vsce package code --install-extension openspinner-vscode-0.1.0.vsix
Then run OpenSpinner: Connect account from the command palette. Your token goes into VS Code’s SecretStorage, not settings.json — a bearer token that syncs across machines is a bearer token that ends up committed.
It knows whether the editor actually has focus, so an editor sitting behind a browser earns nothing. Honest — and better than the terminal client, which can only infer that.
JetBrains
not builtNo plugin exists. If you find one calling itself OpenSpinner, it is not ours.
It is buildable — JetBrains has a status bar widget equivalent to VS Code’s — but it means a Kotlin plugin and a separate toolchain, so it is waiting on someone actually asking for it.
What we will not build, on any editor, is an injection into another extension’s webview. That is what got the product this one is modelled on removed from the VS Code Marketplace, and the Content Security Policy it relaxed stayed relaxed after uninstall.
Before you install anything
An ad has to be on screen for 5 seconds before anyone is billed, and dwell stops accruing the moment the tab is hidden, the window is idle or the slot is covered. Short answers pay nothing at all.
Which is to say: you are paid for attention that actually happened, not for uptime. The calculator gives you a real number before you spend five minutes on it.