SyncMind is a production-ready Chrome extension for transferring AI conversations between Claude, ChatGPT, Gemini, and Perplexity. It extracts the active thread, compresses it into structured memory, and pastes a continuation prompt into the destination platform.
- Detects
claude.ai,chatgpt.com,gemini.google.com, andperplexity.ai - Platform-specific DOM extractors for user and assistant messages
- Code block extraction, duplicate removal, recent-message prioritization, relevance scoring, and token estimates
- Structured memory JSON with project, goal, current problem, context, decisions, code context, pending tasks, preferences, and next prompt
- Provider abstraction for OpenAI, Groq, Gemini, OpenRouter, plus local fallback
- One-click transfer to supported platforms, copy structured context, and export JSON
- Dark minimal popup, settings/onboarding page, and side panel memory view
- Chrome MV3 with Plasmo, React, TypeScript, and TailwindCSS
npm install
npm run devLoad the generated development extension from .plasmo/chrome-mv3-dev in chrome://extensions.
For a production build:
npm run build
npm run packageOpen the SyncMind settings page from the popup. Choose one of:
- Local fallback: no API key required, lightweight heuristic compression
- OpenAI: default
gpt-4o-mini - Groq: default
llama-3.1-70b-versatile - Gemini: default
gemini-1.5-flash - OpenRouter: default
openai/gpt-4o-mini
API keys are saved in chrome.storage.local. They are not hard-coded, bundled into source files, or exposed to page content scripts.
src/
background/ background request orchestration
content/ platform extractors
popup/ main popup UI
sidepanel/ structured memory panel
options/ onboarding and provider settings
services/ compression, storage, export, tab transfer
providers/ AI provider adapters
utils/ platform, DOM, text, styling helpers
hooks/ React data hooks
types/ shared TypeScript contracts
contents/ Plasmo content script entry
- Permissions are limited to
activeTab,storage,scripting,tabs, andsidePanel - Host permissions are scoped to supported AI platforms and configured provider APIs
- Extractors read text content and strip script/style/navigation/button clutter
- Destination pages receive only the generated transfer prompt
- API keys are read by extension pages/background services, not injected into web pages
npm run typecheck
npm run lintDOM structures on AI platforms change often, so extractor selectors are intentionally layered. When a platform updates its UI, adjust the matching extractor in src/content/extractors.ts.