Background
The Kickbacks VS Code extension serves ads across 6 distinct surfaces. The menu-bar app currently only reads one of them (~/.vibe-ads/cli-ad.json, the statusline surface). The others are either baked into patched bundles at extension activation time (not accessible via local file) or readable from a different local file we're not yet checking.
Surfaces audit
| Surface |
Location |
Local file? |
Currently captured? |
| Overlay |
Claude Code webview (above spinner glyph) |
❌ Patched into index.js at activation |
❌ |
| Banner |
Claude Code usage-limit bar (bottom of chat) |
❌ Same patched block |
❌ |
| Status bar |
VS Code bottom bar |
❌ In-memory widget |
❌ |
| Spinner verb |
Terminal thinking-verb during task run |
✅ ~/.claude/settings.json → spinnerVerbs.verbs[0] |
❌ |
| Statusline |
Terminal CLI output line |
✅ ~/.vibe-ads/cli-ad.json |
✅ (current) |
| Codex overlay |
Codex IDE webview |
❌ Separate patched bundle |
❌ |
What we can do
Short-term (local file read):
- Read
~/.claude/settings.json → spinnerVerbs.verbs[0] as a secondary local signal
- Use it as a fallback when
cli-ad.json is stale/missing (spinner text can persist longer)
- Cross-check: if the two differ, it signals the extension rotated ads mid-session
Not feasible locally:
- Overlay, banner, status bar, and Codex overlay are all in-process VS Code artifacts — no stable local file to read. The ad text injected into
index.js at activation time is the same as what arrives from /v1/portfolio, so the API model already captures it.
Considered but rejected
- Reading the patched
index.js to extract __VIBE_ADS_AD__ — fragile, depends on exact patch format, breaks on extension updates
- Using
debug.log — schema is unstable (flagged in design doc)
Next steps
- Add
~/.claude/settings.json spinnerVerbs reader as a fallback signal in live.ts
- Optionally show "spinner" vs "statusline" as labelled rows in the Recent Ads section if the texts differ
- Investigate whether overlay/banner impression counts are reflected in the
/v1/portfolio earnings (they should be — that's how revenue is tracked)
Background
The Kickbacks VS Code extension serves ads across 6 distinct surfaces. The menu-bar app currently only reads one of them (
~/.vibe-ads/cli-ad.json, the statusline surface). The others are either baked into patched bundles at extension activation time (not accessible via local file) or readable from a different local file we're not yet checking.Surfaces audit
index.jsat activation~/.claude/settings.json→spinnerVerbs.verbs[0]~/.vibe-ads/cli-ad.jsonWhat we can do
Short-term (local file read):
~/.claude/settings.json→spinnerVerbs.verbs[0]as a secondary local signalcli-ad.jsonis stale/missing (spinner text can persist longer)Not feasible locally:
index.jsat activation time is the same as what arrives from/v1/portfolio, so the API model already captures it.Considered but rejected
index.jsto extract__VIBE_ADS_AD__— fragile, depends on exact patch format, breaks on extension updatesdebug.log— schema is unstable (flagged in design doc)Next steps
~/.claude/settings.jsonspinnerVerbsreader as a fallback signal inlive.ts/v1/portfolioearnings (they should be — that's how revenue is tracked)