SonicSense: AI Music Annotation Assistant
A personal AI music annotation assistant that applies a working musician's knowledge to speed up metadata work.
Personal workflow automation for music annotation built by Les, a working keyboardist and producer. A Chrome side-panel extension that turns a free-text track description into structured music metadata in one pass, applying his own music knowledge to speed up annotation work.

A free-text track description becomes 13 structured fields in one pass
Team of one· Solo engineer
No team, no agency, no hand-offs. I owned this project end to end:
- Requirements
- Architecture
- UI & UX
- AI & prompts
- Backend & APIs
- Stack
- TypeScriptChrome MV3Claude APITool UseVite
Where AI does the work: Claude tool use reads the description and fills the structured metadata fields, applying music production knowledge encoded in the prompt.
What was broken, and what fixed it
Problem: Filling music metadata by hand for every track is slow and inconsistent.
Fix: Claude tool use turns a free-text description into 13 structured fields in one pass, applying Les's music knowledge to infer the right metadata.
Problem: Instruments, mood, and arrangement notes live in the producer's head, not in a form.
Fix: Per-section narratives fill in instruments and vibe tags automatically, in a Chrome side panel that sits next to the page and opens with a keyboard shortcut.
Approach
- Claude tool use returns structured fields, not free text, so output drops straight into a form.
- The annotation approach is encoded in the system prompt based on Les's own music production knowledge.
- A side panel keeps the tool next to the page being filled in.
What it does
AI extraction
- 13 global fields from one description
- Per-section narratives that auto-fill instruments and vibe tags
- Structured output through tool use
Extension
- Chrome MV3 side panel built with Vite
- Toggle with Cmd+Shift+B or Ctrl+Shift+B
Architecture
Interface
- Chrome MV3
- Vite
- React
AI
- Claude API
- Tool Use
Logic & APIs
- TypeScript
- 1ReactChrome
A Chrome MV3 extension with a React side panel, a service worker for the hotkey, and a content script for the page.
- 2ClaudeLLM agent
The Claude API is called with tool use, so output is structured fields instead of free text.
- 3Chrome
Per-track drafts are saved in chrome.storage, so work survives closing the panel.
Engineering
- Prompt caching keeps the system prompt cheap to resend.
- Each call records its model, latency, and cost, so spend is visible per field.
- The build type-checks with TypeScript before Vite bundles the extension.
Outcome
- A free-text track description becomes 13 structured fields in one pass, applying a working musician's knowledge.