A local-first browser extension that adds a searchable conversation map to ChatGPT.
ChronoChat is built for long ChatGPT threads: research sessions, project work, debugging logs, study notes, planning chats, and any conversation where scrolling back manually becomes painful. It adds a side panel inside ChatGPT so you can scan the whole thread, filter messages, search, jump to a specific turn, and export the conversation without sending your data anywhere.
ChronoChat turns a long ChatGPT conversation into a navigable outline.
- See a compact list of all turns in the current chat
- Filter the list by
All,You, orAI - Search across the conversation and jump straight to the matching message
- Move through messages with keyboard shortcuts
- Export the full conversation as
JSON,CSV,Markdown,DOCX, orPDF - Keep everything local: no backend, no analytics, no remote runtime services
ChronoChat is useful when ChatGPT becomes part of your actual workflow instead of a one-off question box:
- Students reviewing long tutoring or exam-prep chats
- Developers navigating debugging sessions and code explanations
- Researchers collecting sources, arguments, and summaries
- Consultants and operators using ChatGPT for planning, writing, and analysis
- Anyone who wants a cleaner way to revisit earlier parts of a long conversation
- Native-feeling: the UI is designed to sit next to ChatGPT, not fight it
- Local-first: message content stays in the browser
- Practical over flashy: fast navigation, readable previews, dependable export
- Resilient: selector-based DOM parsing with fallbacks for ChatGPT markup changes
ChronoChat adds a right-side panel with a compact preview of every detected message in the current ChatGPT thread. Each item can be clicked to jump back to that exact part of the conversation.
Use the search box to find a word or phrase inside the current conversation. Filters let you narrow the map to your messages, assistant messages, or the full thread.
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
Export Pro v1 saves the full conversation as JSON, CSV, Markdown, DOCX, or PDF. The exporter preserves semantic message blocks where possible, including headings, paragraphs, lists, quotes, code, and images.
ChronoChat detects attachment-only messages and recoverable inline images so the conversation map and export do not collapse when a turn contains files instead of plain text.
- No backend server
- No tracking or analytics
- No remote fonts or third-party runtime requests
- No message content is sent to external services by ChronoChat
https://chat.openai.com/*https://chatgpt.com/*
- Download the latest
chronochat-extension.zipfrom the GitHub Releases page - Extract the zip
- Open
chrome://extensions/ - Enable Developer Mode
- Click
Load unpacked - Select the extracted extension folder
- 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
To create a distributable extension zip from source:
npm run package:extensionThe package is written to packages/chronochat-extension.zip.
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
