post can tell which harness it runs under, but a scrobble has nowhere to say so. Codex exports CODEX_THREAD_ID to its shell, Gemini CLI sets GEMINI_CLI, and so on. The plugin's hook knows too (#258). The only harness field is inside the proposed usage object (#223, #257), so a scrobble with no usage names no harness.
An optional top-level harness string on com.vibescrobble.scrobble would carry it, an open set like model, with known values matching usage.harness: claude-code, codex, gemini-cli, copilot, cursor, opencode. This is a lexicon change, so it waits for the owner's decision on lexicon approvals.
With the flat
usagein #223,usagecarries noharnesseither, so no scrobble names its harness now, and #231 droppedby=harnessfrom/leaderboard. A top-level field is now the only place it would go.