A Chrome extension that adds a navigation sidebar to Claude.ai. Markers appear for each user message — click to jump, hover to preview.
On load the extension runs through this sequence:
- loadSavedState — reads visibility preference from Chrome storage
- findScrollContainer — locates the scrollable div Claude uses
- createMinimap — injects the sidebar into the page
- startObserving — watches for new messages via MutationObserver
- setupChatChangeListener — detects URL changes when switching chats
- scanConversation — finds all user messages and renders markers
track userMessage elements
↓
extractText()
↓
build sections[]
↓
renderSingleMarker() ← one per message, stacked top to bottom
↓
user clicks marker
↓
jumpToSection() ← smooth scroll with header offset
#claude-minimap
└── .minimap-track
└── .minimap-markers
├── .minimap-marker
├── .minimap-marker
└── .minimap-marker
| Field | Type | Purpose |
|---|---|---|
sections[] |
Section[] |
User messages with their DOM elements |
markers[] |
MarkerData[] |
Rendered marker elements |
scrollContainer |
HTMLElement |
The scrollable div on the page |
isVisible |
boolean |
Sidebar visibility |
- TypeScript — class-based, no framework
- Native Web APIs — MutationObserver, getBoundingClientRect, scrollTo
- Chrome Extension Storage API — persists visibility preference
- Manifest V3
content.ts source
content.js compiled
styles.css sidebar styles
manifest.json extension config
popup.html extension popup
- v2 — toggle visibility, keyboard shortcuts (prev/next section), scroll sync indicator
- v3 — clustering for very long conversations ied
- Unused response tracking code in sections
- Chrome/Chromium-based browsers
- Requires Manifest V3 support

