Navigate long ChatGPT conversations with clarity.
ChronoChat is a Manifest V3 browser extension for ChatGPT that adds a native-feeling conversation map on the right side of the page. It helps you scan long threads, filter turns, search quickly, and jump back to the exact part of the conversation you need.
- Built for long ChatGPT sessions that become hard to navigate
- Designed to feel visually coherent with ChatGPT instead of competing with it
- Keeps everything local: no backend, no analytics, no remote runtime assets
- Right-side conversation map for the current chat
- Filters for
All,You, andAI - Text search across the current conversation
- Export Pro v1 for the full conversation as
JSON,CSV,Markdown,DOCX, orPDF, preserving semantic message blocks (heading,paragraph,list,quote,code,image) - Keyboard navigation:
Ctrl/Cmd + J: open or close ChronoChat/: focus searchj/k: move selectionEnter: jump to the selected messageEsc: close the sidebar or clear search focus state
- Theme-aware UI with a ChatGPT-adjacent visual language
- No message content is sent to external services
- No tracking or analytics
- No remote fonts or third-party runtime requests
https://chat.openai.com/*https://chatgpt.com/*
- Clone this repository
- Install dependencies:
npm install- Build the extension:
npm run build- Open
chrome://extensions/ - Enable Developer Mode
- Click
Load unpacked - Select this project directory
ChronoChat is a Chromium MV3 extension. Firefox is not a release target, and background compatibility should be verified separately before relying on it.
Run tests:
npm test -- --runInBandRun the full validation gate:
npm run validateRun the browser smoke check:
npm run test:smokeSource code lives in src/:
src/content/: modular content-script sourcesrc/service_worker.js: background command routingsrc/style.css: source stylesheet
Build outputs used by the manifest:
content_script.jsservice_worker.jsstyle.css
The runtime stays vanilla, while the source stays modular and testable.
- Keep UI changes visually aligned with ChatGPT, not brand-heavy
- Prefer selector-first DOM parsing with resilient fallbacks, because ChatGPT markup can drift over time
- Inline images are exported when recoverable; otherwise ChronoChat emits a standard image placeholder in rendered outputs
- The semantic parser still falls back to heuristic text extraction for nested or non-text message content (complex widgets are a known limit)
- Keep global preferences separate from transient UI state
- Exporting the filtered subset of messages is backlog work; export v1 always emits the full conversation transcript
- Add runtime tests for behavior changes instead of source-inspection placeholders
MIT