A Kickbacks.ai-style sponsored status line for Google Antigravity IDE. While the agent is working, the dead "Thinking..." time in your peripheral vision becomes a rotating, clickable sponsored line in the status bar — with local impression and click tracking.
Antigravity is a VS Code fork, so it accepts standard .vsix packages:
- Open Antigravity IDE.
- Open the Extensions panel (
Ctrl+Shift+X). - Click the
...menu (top right of the panel) → Install from VSIX... - Select
antigravity-adspinner-0.1.0.vsix. - Reload when prompted.
Or from the command palette: Extensions: Install from VSIX...
- Idle: nothing shown (configurable).
- Agent working: the extension detects bursts of file edits/creates/renames that aren't coming from your keyboard, lights up a spinner + sponsored line in the status bar, and rotates creatives every 5 seconds (one Kickbacks-style impression window each).
- Click the line to open the sponsor link (click logged).
- Hover for live impression/click totals.
| Command | What it does |
|---|---|
AdSpinner: Toggle Sponsored Line |
Master on/off |
AdSpinner: Show Impression / Click Stats |
Totals + per-ad breakdown |
AdSpinner: Reset Stats |
Zero the counters |
AdSpinner: Refresh Ad Feed |
Re-pull the remote feed |
AdSpinner: Open Current Sponsor Link |
Same as clicking the line |
| Setting | Default | Notes |
|---|---|---|
adspinner.enabled |
true |
Master switch |
adspinner.feedUrl |
"" |
HTTPS URL returning [{"id","text","url"}]. Blank = bundled ads.json |
adspinner.rotationSeconds |
5 |
Impression window length |
adspinner.onlyWhileAgentActive |
true |
false = always-on line |
adspinner.activityWindowSeconds |
12 |
How long the line lingers after the last detected agent activity |
adspinner.spinnerPrefix |
true |
Animated braille spinner glyph |
Point adspinner.feedUrl at any HTTPS endpoint returning:
[
{ "id": "linear-1", "text": "Linear — issue tracking that's actually fast", "url": "https://linear.app" }
]Text is truncated to 64 chars (status bar real estate — fits the row or it isn't served). Impression/click counts live in extension globalState; wire recordImpression/recordClick in extension.js to a backend POST if you build a revenue pipeline.
- This is not inside the agent panel. Kickbacks works on Claude Code because Claude Code deliberately exposes
spinnerVerbsin~/.claude/settings.json. Antigravity's Gemini agent panel has no equivalent public hook, so no extension can rewrite its literal "Thinking..." text. The status bar is the closest sanctioned surface — and it's the same surface Kickbacks' own IDE extension uses. - Activity detection is heuristic. Non-keyboard document changes, file creates/deletes/renames, and terminal state changes count as "agent working." Big git operations or external file syncs can trigger it too. Tune
activityWindowSecondsto taste. - No marketplace/revenue backend included. This is the client. The auction engine, advertiser portal, and payouts are the hard 90% — Kickbacks keeps theirs in a private repo for a reason. Note their code is proprietary source-available, so build your own backend rather than reusing theirs.
npm install -g @vscode/vsce
vsce package --allow-missing-repository