How Spinwage works

Everything you need to know, installing, earning, getting paid, what we do (and pointedly don't do) with data, and how advertisers book the line. Take your time. The sloth does.

What is Spinwage For developers Hermes Agent Open WebUI Earnings Network integrity Payouts Privacy For advertisers FAQ

What is Spinwage?

Spinwage is an EU ad network for the one screen every developer stares at dozens of times a day: the AI coding agent wait screen. It works with Claude Code, Codex, Hermes Agent, and Open WebUI, and all of them earn to the same balance on the same device. While your agent is thinking, your status line shows a single tasteful, clickable sponsored message. Advertisers pay for that attention, and 50% of every euro settles to your balance. No banners, no popups, no tracking. One line, while you wait.

That's the whole footprint: the sponsored line, your running balance, your model. Nothing else changes.

For developers

Install

One command. It wires the official Claude Code statusLine setting, no patches, no forks, fully reversible.

npx spinwage install

Flags

FlagWhat it does
--with-spinner Also sets spinnerVerbs, so the sponsored line can appear in the spinner area as well as the status line. Both are official Claude Code settings.
--codex Installs for the Codex CLI instead of Claude Code. Same single-line format, same earnings.
--ref CODE Attaches a referral code at install time, crediting the developer who referred you.
npx spinwage install --with-spinner --ref CODE

What the status line shows

Exactly three things: the current sponsored message (clickable), your running Spinwage balance, and your active model. The line refreshes at most once per minute from a local cache, your terminal stays fast.

Claim your device

The installer assigns your machine an anonymous device id and the sponsored line renders from the first install, but an unclaimed device earns €0.00. Impressions only become billable and creditable once the device is claimed by a signed-in account and that account is GitHub-verified. To start earning:

  1. Run npx spinwage status and copy the device id it prints.
  2. Sign in on the dashboard, email plus a 6-digit code, no password. This lets you browse and claim devices.
  3. Paste the device id into Claim device to attach it to your account.
  4. Connect GitHub to unlock earning, the account has to be ≥ 90 days old with real public activity. Email sign-in alone browses and claims; it can't unlock earning or withdrawals on its own.

A device can only belong to one account. You can claim as many devices as you own, work laptop, home machine, the lot, and they all roll up to one balance. Earning starts from the first impression after the device is claimed and your GitHub is verified, not before.

Uninstall

npx spinwage uninstall

Restores your previous statusLine (and spinnerVerbs, if you used --with-spinner) byte-for-byte from the backup taken at install. Your settings end up exactly as they were, and the device stops serving immediately. The device id is stable, so if you reinstall later on the same machine you can still claim it and start earning.

Hermes Agent

Beyond Claude Code and Codex, Spinwage ships a plugin for Hermes Agent (Nous Research). One install adds two surfaces: a sponsored line plus your live balance in the Hermes dashboard (a Spinwage tab and a line above your sessions), and a /spinwage command in the terminal. Same as everywhere, it reads no code, prompts, or conversations, it only fetches one sponsored line.

Unofficial community plugin. Not affiliated with Nous Research.

Install

One command. It sets up your Spinwage device and drops the plugin into ~/.hermes/plugins/.

npx spinwage hermes-install
  1. Restart the Hermes web UI (or hit GET /api/dashboard/plugins/rescan), a Spinwage tab appears, with a sponsored line above your sessions.
  2. In the Hermes terminal, run /spinwage to print your current line and balance.
  3. Earning works the same as every surface: claim this device with a GitHub-verified account on the dashboard. Until then the line shows but bills and earns €0.00.

Uninstall

npx spinwage hermes-uninstall

Removes the plugin from ~/.hermes/plugins/spinwage. Your balance stays on your device id, so you can reinstall anytime.

Open WebUI

Running an Open WebUI server? Spinwage ships a Filter function. While the model is thinking, it shows one tasteful sponsored line and your live balance in the status area, then clears it when the response is done. It reads no prompts and no messages, it only sends your server's device id and fetches one line.

Unofficial community function. Not affiliated with Open WebUI.

Open WebUI is usually one server shared by many users, so the server operator earns: one device id on the instance, every wait state serves your line.

Install

It's an admin paste, not a file copy. This command sets up your device and prints exactly what to paste:

npx spinwage openwebui
  1. In Open WebUI: Admin Panel → Functions → + (new function).
  2. Paste the filter, npx spinwage openwebui --print | pbcopy copies it to your clipboard, then Save and enable it.
  3. Open the function's valves, paste your device id into Spinwage Device Id, and save. Optional: set a 2-letter country_code (e.g. DE) for geo-targeted campaigns.
  4. Earning works the same as every surface: claim this device with a GitHub-verified account on the dashboard. Until then the line shows but bills and earns €0.00.

Note: Open WebUI filters render on the UI chat flow, not on raw /api/chat/completions traffic.

Earnings mechanics

50%Revenue share

Half of every euro an advertiser spends on your screen settles to your balance. No tiers, no thresholds, no fine print.

45sImpression cap

One paid impression per ad at most every 45 seconds per device. Idling on the wait screen doesn't multiply earnings, real attention does.

50×Click multiplier

A click on the sponsored line pays 50× the impression rate. One genuine click is worth a lot more than a glance.

20/dayClick cap

Max 20 paid clicks per device per day. Clicks beyond that still work, they just don't earn. Keeps the network honest and CPMs high.

The caps aren't there to shortchange you, they're what makes advertisers trust the inventory, which is what keeps bids (and your 50%) up. Earnings are tracked in real time; your balance updates on the dashboard and right there in your status line.

How we keep the network clean

Your 50% only stays real if the other 50% is real. Advertisers keep bidding when the attention they buy is genuine human developer attention — so the same checks that protect their budget are what protect your payouts. Here's the honest version of how that works.

The one line that matters

Every billed impression comes from a GitHub-verified developer. Serving and billing are two different things: any device can have the sponsored line rendered, but an impression is only billed to an advertiser and credited to an earner when it's tied to a verified identity. Anonymous traffic and bot floods still see the line, they just bill €0.00 and earn nothing. There's no pile of fake money to fight over, so gaming the network has negative ROI by construction.

Concretely: the spoofed-view scripts that were publicly demonstrated against the US predecessor, the ones that minted real paid fake views — bill €0.00 when replayed against Spinwage, because none of those views carry a GitHub-verified identity. Same attack, no payout. We credit the original for inventing the category; we just engineered the billing so fake attention can't reach your balance or an advertiser's invoice.

Same ad line, two devices. Only the verified developer moves money, in either direction.

What a paid impression has to clear

For an impression to bill and earn, all of these have to hold. Miss any one and the line still renders, it just settles at zero.

One earner per machine

Your device id is derived from the machine itself, a fingerprint of hostname, MAC and OS. Claude Code, Codex and any other agent on the same machine share one device id, and wiping your config doesn't mint a fresh earning cap. It's deliberately hard to turn one laptop into a farm of fake earners.

Anomaly scoring without storing your IP

Every impression and click is scored for anomalies, but we never store your raw IP. What we keep is a salted hash of your IP plus the country , enough to spot a single address impersonating a crowd, not enough to track you. It's GDPR-clean by architecture and EU-hosted in Frankfurt (eu-central-1). The point isn't to watch you; it's to make sure the traffic sitting next to yours is real, so the budget that pays you stays real.

The review queue

Borderline accounts, the ones that sit right on the edge of the trust signals, land in a human review queue instead of earning automatically. Account age, repos, followers, recent events and contributions all feed a trust radar; promotion to earning is a manual decision. If your account is under review it's not a ban, it's a real person looking before money moves.

Real people at the cash-out

The last gate is the strongest. To take money out you need earnings across at least three distinct days and a one-time identity check via Stripe, government ID plus a bank account. So even a fraud attempt that somehow cleared every gate above would have to end with a real, KYC-verified person attaching their legal identity to a Stripe connected account. We never see your card, ID data, or new payout bank details; Stripe handles that.

None of this makes the network magically unbreakable, and we won't claim it does. What it does mean is concrete: every euro that reaches your balance is tied to a verified developer identity, and faking attention here costs the faker more than it pays.

Payouts

Sign in to the dashboard to check your balance and request a payout.

Privacy

Spinwage is built so that the privacy answer is boring:

For advertisers

How bidding works

Spinwage runs a simple open auction on CPM. The highest active bid serves across the network; ties rotate evenly between the tied campaigns. There's an anonymized bid ladder on the advertise page so you always know where your bid stands, no black-box auction, no "bid more" upsell calls. Clicks are billed at 50× the impression rate, every campaign has a hard budget cap, and you can cancel anytime.

From booking to live

  1. Create your campaign on the advertise page: ad text (8–80 characters), target URL (https), CPM bid (min €2), budget (min €10). It starts as pending.
  2. Payment. Secure card checkout opens immediately; German VAT invoice support is available for your records.
  3. Active. On payment receipt your campaign goes live and competes in the auction. Spend, impressions, and clicks update on your campaign table; serving stops automatically at your budget cap.

EU-entity friendly

FAQ

Does Spinwage slow down my terminal?

No. The status line renders from a local cache and fetches a new ad line at most once per minute, asynchronously. Your agent's response time and your typing latency are untouched, if the network is down, the cached line keeps rendering and your terminal doesn't notice.

What does it cost me as a developer?

Nothing, it's the opposite direction. Installing is free, there are no fees, and you receive 50% of the ad revenue your screen generates. Payouts run through Stripe Connect.

Why GitHub? Why can't I just earn with an email?

Email magic-link signs you in to browse and claim devices, but it can't unlock earning on its own, anyone can mint inboxes for free, and an ad network paid out on free inboxes is a fraud network. GitHub is the cheapest honest proof that you're a real, established developer: an account that's at least 90 days old with genuine public activity can't be spun up on demand. Think of it as your GitHub vouching for you. We read only your public profile to check account age and activity, no private repos, no code, no write access. And it's what lets us tell advertisers their euros buy real developer attention, which is exactly what keeps the bids, and your 50%, flowing.

Why was my account put under review?

A review isn't a ban. Accounts that sit right on the edge of the trust signals, for example an older GitHub account with very little public activity, the shape gray-market shell accounts tend to have — go to a human review queue instead of earning automatically. A person looks at the signals (account age, repos, followers, recent events, contributions) and makes the call. The line still renders on your machine while you wait; it just settles at €0 until you're promoted to earning. If you're a real developer, a bit more public activity and a little patience is usually all it takes.

Do you store my IP address?

No, not the raw one. For every impression and click we keep a salted hash of your IP plus the country, never the address itself. That's enough to score for anomalies, to notice one machine pretending to be a crowd, without ever holding data that identifies or tracks you. It's processed in Frankfurt (eu-central-1), stays in the EU, and is GDPR-clean by architecture. The reason it exists is the same reason every other gate exists: keeping the traffic real is what keeps your payouts real.

Can Anthropic ban this?

Spinwage uses only the official, documented Claude Code configuration: the statusLine setting and (optionally) spinnerVerbs. No binary patching, no API interception, no terms-of-service gray zones. It's the same mechanism any custom status line script uses, we just put something valuable in it. And uninstall restores your previous configuration byte-for-byte at any time.

Is this GDPR-okay?

Yes, and by design rather than by consent banner. Before you claim a device we hold only an anonymous device id and impression counts, no personal data at all. After claiming, we hold your email and payout request status; payout bank details stay with Stripe Connect. We never see your code, prompts, or completions, so there is nothing sensitive to leak in the first place. DPA available for advertisers on request.

How is Spinwage different from kickbacks.ai?

Kickbacks.ai invented this category, full credit to Andrew McCalip; Spinwage exists because we figured Europe shouldn't watch from the sidelines. Two differences matter. Technically: Spinwage only uses official Claude Code settings (statusLine, spinnerVerbs), we never patch another extension's files, and uninstall restores your setup byte-for-byte. Commercially: built for the European market, hosted in Frankfurt, GDPR-clean by architecture, EUR pricing and EU-grade paperwork for advertisers.

How does conversion tracking work, what data do you store?

Conversion tracking is server-to-server only, no pixel, no tracking script, no cookie. Here is the full chain:

1. Click passthrough. When a developer clicks a sponsored line they are redirected to the advertiser's URL with one extra query parameter: sw_cid=<click_id>. The click_id is a random UUID that exists only within Spinwage; it carries no personal data and is not derived from a device fingerprint or browser identity.

2. Advertiser postback. When a conversion happens on the advertiser's site (purchase, signup, etc.), their backend sends a POST /cv with a bearer token (conversion_secret, issued per advertiser at account creation) and the sw_cid they received at click time, plus their own order_id.

3. What we store per conversion: the click_id reference, campaign_id, advertiser_id, the advertiser-supplied order_id, an optional order value in microcents, billing amounts, and a timestamp. We do NOT store raw order data, customer details, emails, or anything the developer typed. Deduplication is enforced per (campaign_id, order_id) — duplicate postbacks are silently ignored.

4. Attribution window: a postback is accepted only when the referenced click is ≤ 30 days old.

5. No cross-site developer profiling. A click_id identifies one click event; Spinwage does not build behavioral profiles of developers across campaigns or advertisers. What a developer clicked is not shared with other advertisers.

All conversion data is stored in Frankfurt (eu-central-1). Spinwage acts as a data processor for the advertiser (controller), see our DPA Addendum for details, available on request.

What is CPA pricing, how is it different from CPM or CPC?

Spinwage supports three pricing models per campaign:

CPM (cost per mille), the default. You pay per 1 000 verified impressions. Your bid sets the price per 1 000 shows; campaigns rank by CPM bid. Good for brand awareness and reach.

CPC (cost per click), you pay only when a developer clicks your sponsored line. Impressions are free; the click is billed at your CPC bid. Good if your landing page does the conversion work.

CPA (cost per action), you pay only when a confirmed conversion is reported to Spinwage via server-to-server postback. Impressions and clicks are free; money moves only on a recorded conversion. You set a fixed CPA price per conversion; Spinwage bills that amount (capped at your remaining budget) and credits 50% to the developer whose click drove it, but only if that developer is GitHub-verified and earning-eligible. The hard budget cap applies in every model: serving stops automatically when your budget is exhausted.

Note: in v1 the auction ranking is always by the CPM bid field (bid_cpm_microcents) regardless of pricing model — eCPM normalization across mixed models is a planned future feature and is not live yet. If you run a CPA campaign alongside CPM campaigns today, set a representative CPM ranking bid accordingly.

When does my campaign go live?

After Stripe confirms checkout payment. New campaigns are pending until payment is confirmed, then the webhook switches them to active and they start competing in the auction.

Does it work with Codex?

Yes. Install with npx spinwage install --codex and you get the same single sponsored line in the Codex CLI, with the same 50% revenue share and the same uninstall guarantee. Running both Claude Code and Codex on one machine? Both count toward the same device balance.

What about IDE integrations (VS Code, Cursor, JetBrains)?

If your IDE runs Claude Code's terminal integration, the status line, and Spinwage, comes along for free, since it's just the official statusLine setting. Dedicated support for IDE-native agent panels is on the roadmap; the terminal is where the wait-screen attention is today, so that's where we started.

How do I remove it completely?

Run npx spinwage uninstall. It restores your previous status line configuration byte-for-byte from the backup made at install, and all network activity stops immediately. If you'd already claimed the device, your balance stays on your account and remains payable; the device id is stable, so you can reinstall and resume earning later on the same machine.

Ready?

Hang in there. Earn while you do.